{{page>en:templates:fapiint}} ====== DosSubAlloc ====== 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]]. ===== Example Code ===== ==== C Binding ==== #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 Binding ==== 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 ===== Note ===== Text based on [[http://www.edm2.com/index.php/DosSubAlloc]] {{page>en:templates:fapi}}