Table of Contents
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
DosSubSet
This call is used to initialize a segment or to reset a reallocated segment for suballocation.
Syntax
DosSubSet (SegSelector, Flags, Size)
Parameters
0 = Increasing the size of a segment already initialized. 1 = Initializing a segment.
- Size (USHORT) - input : Segment size in bytes.
Return Code
rc (USHORT) - return
Return code descriptions are:
- 0 NO_ERROR
- 310 ERROR_DOSSUB_SHRINK
- 313 ERROR_DOSSUB_BADSIZE
- 314 ERROR_DOSSUB_BADFLAG
Remarks
To initialize a segment for suballocation, issue DosSubSet before issuing DosSubAlloc and set Flags = 1. The segment must have been allocated with DosAllocSeg or DosAllocShrSeg.
If a segment allocated by a DosAllocSeg call has already been set for suballocation, and a call to [DosSubAlloc returns ERROR_DOSSUB_NOMEM, the segment's size can be increased by a call to DosReallocSeg. After reallocation, the segment must be reset by a DosSubSet. Failure to reset the segment after changing its size can yield unpredictable results.
The size parameter should be a multiple of four bytes, or it is rounded up to a multiple of four. Note in DosSubSet, a size parameter of 0 indicates the segment is 64KB, while in DosSubAlloc and DosSubFree, a size parameter of 0 is an error. Other than this special case of 0 meaning 64KB, the minimum size that can be set is 12 bytes.
Example Code
C Binding
#define INCL_DOSMEMMGR USHORT rc = DosSubSet(SegSelector, Flags, Size); SEL SegSelector; /* Segment selector */ USHORT Flags; /* Parameter flags */ USHORT Size; /* Size of a block */ USHORT rc; /* return code */
MASM Binding
EXTRN DosSubSet:FAR INCL_DOSMEMMGR EQU 1 PUSH WORD SegSelector ;Segment selector PUSH WORD Flags ;Parameter flags PUSH WORD Size ;Size of a segment CALL DosSubSet
Returns WORD
Note
Text based on http://www.edm2.com/index.php/DosSubSet