Jump to content

DosSubAlloc: Difference between revisions

From EDM2
Ak120 (talk | contribs)
Ak120 (talk | contribs)
mNo edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
==Description==
This call suballocates portions of a segment allocated by DosAllocSeg or DosAllocShrSeg, and initialized by [[DosSubSet]].
This call suballocates portions of a segment allocated by DosAllocSeg or DosAllocShrSeg, and initialized by DosSubSet.


==Syntax==
==Syntax==
<PRE>
  DosSubAlloc (SegSelector, BlockOffset, Size)
  DosSubAlloc


    (SegSelector, BlockOffset, Size)
</PRE>
==Parameters==
==Parameters==
; SegSelector (SEL) - input : Data segment selector that allocates the memory.  
;SegSelector (SEL) - input : Data segment selector that allocates the memory.
 
;BlockOffset (PUSHORT) - output : Address of the allocated block offset.
; BlockOffset (PUSHORT) - output : Address of the allocated block offset.  
;Size (USHORT) - input : Memory block size requested in bytes.
 
; Size (USHORT) - input : Memory block size requested in bytes.


==Return Code==
==Return Code==
rc (USHORT) - return
;rc (USHORT) - return:Return code descriptions are:
 
* 0 NO_ERROR
Return code descriptions are:
*311 ERROR_DOSSUB_NOMEM
 
*313 ERROR_DOSSUB_BADSIZE
* 0         NO_ERROR
* 311       ERROR_DOSSUB_NOMEM  
* 313       ERROR_DOSSUB_BADSIZE


==Remarks==
==Remarks==
Before a segment allocated by DosAllocSeg or DosAllocShrSeg can be suballocated, it must first be initialized for suballocation by a call to DosSubSet.
Before a segment allocated by [[DosAllocSeg]] or [[DosAllocShrSeg]] can be suballocated, it must first be initialized for suballocation by a call to [[DosSubSet]].


Allocation size must be a multiple of four bytes. Otherwise, it is rounded up to a multiple of four bytes. The maximum value for the size parameter is the size that was set with DosSubSet minus 8. Note that no paragraph (16-byte) alignment is required; all requests are serviced on a byte alignment basis.
Allocation size must be a multiple of four bytes. Otherwise, it is rounded up to a multiple of four bytes. The maximum value for the size parameter is the size that was set with DosSubSet minus 8. Note that no paragraph (16-byte) alignment is required; all requests are serviced on a byte alignment basis.
Line 31: Line 22:
A suballocated block of memory in a suballocated segment is freed by a call to DosSubFree.  
A suballocated block of memory in a suballocated segment is freed by a call to DosSubFree.  


==Example Code==
==Binding==
===C Binding===
===C===
<PRE>
<PRE>
#define INCL_DOSMEMMGR
#define INCL_DOSMEMMGR
Line 38: Line 29:
USHORT  rc = DosSubAlloc(SegSelector, BlockOffset, Size);
USHORT  rc = DosSubAlloc(SegSelector, BlockOffset, Size);


SEL             SegSelector;  /* Segment selector */
SEL     SegSelector;  /* Segment selector */
PUSHORT         BlockOffset;  /* Block Offset (returned) */
PUSHORT BlockOffset;  /* Block Offset (returned) */
USHORT           Size;          /* Size of requested block */
USHORT Size;          /* Size of requested block */


USHORT           rc;            /* return code */
USHORT rc;            /* return code */
</PRE>
</PRE>


===MASM Binding===
===MASM===
<PRE>
<PRE>
EXTRN  DosSubAlloc:FAR
EXTRN  DosSubAlloc:FAR
Line 57: Line 48:
Returns WORD
Returns WORD
</PRE>
</PRE>
==Related Functions==
*


[[Category:The OS/2 API Project]]
[[Category:Dos16]]

Latest revision as of 08:08, 26 January 2020

This call suballocates portions of a segment allocated by DosAllocSeg or DosAllocShrSeg, and initialized by DosSubSet.

Syntax

DosSubAlloc (SegSelector, BlockOffset, Size)

Parameters

SegSelector (SEL) - input
Data segment selector that allocates the memory.
BlockOffset (PUSHORT) - output
Address of the allocated block offset.
Size (USHORT) - input
Memory block size requested in bytes.

Return Code

rc (USHORT) - return
Return code descriptions are:
  • 0 NO_ERROR
  • 311 ERROR_DOSSUB_NOMEM
  • 313 ERROR_DOSSUB_BADSIZE

Remarks

Before a segment allocated by DosAllocSeg or DosAllocShrSeg can be suballocated, it must first be initialized for suballocation by a call to DosSubSet.

Allocation size must be a multiple of four bytes. Otherwise, it is rounded up to a multiple of four bytes. The maximum value for the size parameter is the size that was set with DosSubSet minus 8. Note that no paragraph (16-byte) alignment is required; all requests are serviced on a byte alignment basis.

A suballocated block of memory in a suballocated segment is freed by a call to DosSubFree.

Binding

C

#define INCL_DOSMEMMGR

USHORT  rc = DosSubAlloc(SegSelector, BlockOffset, Size);

SEL     SegSelector;   /* Segment selector */
PUSHORT BlockOffset;   /* Block Offset (returned) */
USHORT  Size;          /* Size of requested block */

USHORT  rc;            /* return code */

MASM

EXTRN  DosSubAlloc:FAR
INCL_DOSMEMMGR      EQU 1

PUSH   WORD    SegSelector   ;Segment selector
PUSH@  WORD    BlockOffset   ;Block Offset (returned)
PUSH   WORD    Size          ;Size of requested block
CALL   DosSubAlloc

Returns WORD