en:docs:fapi:dossuballoc

This is an old revision of the document!


This is part of Family API which allow to create dual-os version of program runs under OS/2 and DOS

Note: This is legacy API call. It is recommended to use 32-bit equivalent

2021/09/17 04:47 · prokushev · 0 Comments
2021/08/20 03:18 · prokushev · 0 Comments

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

<PRE> #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 */ </PRE>

MASM Binding

<PRE> 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 </PRE>

Note