Category : Recently Uploaded Files
Archive   : INTER45B.ZIP
Filename : INTERRUP.E

 
Output of file : INTERRUP.E contained in archive : INTER45B.ZIP
Interrupt List, part 5 of 12
This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
--------D-2145-------------------------------
INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
AH = 45h
BX = file handle
Return: CF clear if successful
AX = new handle
CF set on error
AX = error code (04h,06h) (see #0885 at AH=59h)
Notes: moving file pointer for either handle will also move it for the other,
because both will refer to the same system file table
for DOS versions prior to 3.3, file writes may be forced to disk by
duplicating the file handle and closing the duplicate
SeeAlso: AH=3Dh,AH=46h
--------D-2146-------------------------------
INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
AH = 46h
BX = file handle
CX = file handle to become duplicate of first handle
Return: CF clear if successful
CF set on error
AX = error code (04h,06h) (see #0885 at AH=59h)
Notes: closes file with handle CX if it is still open
DOS 3.30 hangs if BX=CX on entry
moving file pointer for either handle will also move it for the other,
because both will refer to the same system file table
SeeAlso: AH=3Dh,AH=45h
--------D-2147-------------------------------
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
AH = 47h
DL = drive number (00h = default, 01h = A:, etc)
DS:SI -> 64-byte buffer for ASCIZ pathname
Return: CF clear if successful
AX = 0100h (undocumented)
CF set on error
AX = error code (0Fh) (see #0885 at AH=59h)
Notes: the returned path does not include a drive or the initial backslash
many Microsoft products for Windows rely on AX being 0100h on success
under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
--------D-2148-------------------------------
INT 21 - DOS 2+ - ALLOCATE MEMORY
AH = 48h
BX = number of paragraphs to allocate
Return: CF clear if successful
AX = segment of allocated block
CF set on error
AX = error code (07h,08h) (see #0885 at AH=59h)
BX = size of largest available block
Notes: DOS 2.1-6.0 coalesces free blocks while scanning for a block to
allocate
.COM programs are initially allocated the largest available memory
block, and should free some memory with AH=49h before attempting any
allocations
under the FlashTek X-32 DOS extender, EBX contains a protected-mode
near pointer to the allocated block on a successful return
SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
--------D-2149-------------------------------
INT 21 - DOS 2+ - FREE MEMORY
AH = 49h
ES = segment of block to free
Return: CF clear if successful
CF set on error
AX = error code (07h,09h) (see #0885 at AH=59h)
Notes: apparently never returns an error 07h, despite official docs; DOS 2.1+
code contains only an error 09h exit
DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
freed, only when a block is allocated or resized
the code for this function is identical in DOS 2.1-6.0 except for
calls to start/end a critical section in DOS 3+
SeeAlso: AH=48h,AH=4Ah
--------D-214A-------------------------------
INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
AH = 4Ah
BX = new size in paragraphs
ES = segment of block to resize
Return: CF clear if successful
CF set on error
AX = error code (07h,08h,09h) (see #0885 at AH=59h)
BX = maximum paragraphs available for specified memory block
Notes: under DOS 2.1-6.0, if there is insufficient memory to expand the block
as much as requested, the block will be made as large as possible
DOS 2.1-6.0 coalesces any free blocks immediately following the block
to be resized
SeeAlso: AH=48h,AH=49h,AH=83h
--------v-214A--BX00B6-----------------------
INT 21 - VIRUS???
AH = 4Ah
BX = 00B6h
ES = CX
Return: ???
Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
with Novell DOS 7, and is presumably some virus's installation check
SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=FFFFh,AH=D2h"VIRUS"
--------v-214A--BXFFFF-----------------------
INT 21 - VIRUS???
AH = 4Ah
BX = FFFFh
CX = 0568h
SI = 0129h
DI = 0000h
ES = BP
Return: ???
Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
with Novell DOS 7, and is presumably some virus's installation check
SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=00B6h
--------D-214B-------------------------------
INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
AH = 4Bh
AL = type of load
00h load and execute
01h load but do not execute
03h load overlay (see #0804)
04h load and execute in background (European MS-DOS 4.0 only)
"Exec & Go" (see also AH=80h)
DS:DX -> ASCIZ program name (must include extension)
ES:BX -> parameter block (see #0803,#0804,#0805)
CX = mode (subfunction 04h only)
0000h child placed in zombie mode after termination
0001h child's return code discarded on termination
Return: CF clear if successful
BX,DX destroyed
if subfunction 01h, process ID set to new program's PSP; get with
INT 21/AH=62h
CF set on error
AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see #0885 at AH=59h)
Notes: DOS 2.x destroys all registers, including SS:SP
under ROM-based DOS, if no disk path characters (colons or slashes)
are included in the program name, the name is searched for in the
ROM module headers (see #0808) before searching on disk
for functions 00h and 01h, the calling process must ensure that there
is enough unallocated memory available; if necessary, by releasing
memory with AH=49h or AH=4Ah
for function 01h, the AX value to be passed to the child program is put
on top of the child's stack
for function 03h, DOS assumes that the overlay is being loaded into
memory allocated by the caller
function 01h was undocumented prior to the release of DOS 5.0
some versions (such as DR-DOS 6.0) check the parameters and parameter
block and return an error if an invalid value (such as an offset of
FFFFh) is found
background programs under European MS-DOS 4.0 must use the new
executable format
this function ignores the filename extension, instead checking the
first two bytes of the file to determine whether there is a valid
.EXE header (see #0807); if not, the file is assumed to be in .COM
format. If present, the file may be in any of several formats which
are extensions of the original .EXE format (see #0806)
.COM-format executables begin running with the following register
values:
AL = 00h if first FCB has valid drive letter, FFh if not
AH = 00h if second FCB has valid drive letter, FFh if not
CS,DS,ES,SS = PSP segment
SP = offset of last word available in first 64K segment
(note: AX is always 0000h under DESQview)
old-format executables begin running with the following register
values:
AL = 00h if first FCB has valid drive letter, FFh if not
AH = 00h if second FCB has valid drive letter, FFh if not
DS,ES = PSP segment
SS:SP as defined in .EXE header
(note: AX is always 0000h under DESQview)
new executables begin running with the following register values
AX = environment segment
BX = offset of command tail in environment segment
CX = size of automatic data segment (0000h = 64K)
ES,BP = 0000h
DS = automatic data segment
SS:SP = initial stack
the command tail corresponds to an old executable's PSP:0081h and
following, except that the 0Dh is turned into a NUL (00h); new
format executables have no PSP
under the FlashTek X-32 DOS extender, only function 00h is supported
and the pointers are passed in DS:EDX and ES:EBX
DR-DOS 6 always loads .EXE-format programs with no fixups and
.COM-format programs starting with 9Ch 55h (PUSHF/PUSH BP) above the
64K mark to avoid the EXEPACK bug, by extending the memory block
containing the program's environment; this code is disabled if the
name of the parent program as stored in the MCB is 'WIN'.
BUGS: DOS 2.00 assumes that DS points at the current program's PSP
Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
file contains additional data after the actual overlay
SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E,INT 60/DI=0604h

Format of EXEC parameter block for AL=00h,01h,04h:
Offset Size Description (Table 0803)
00h WORD segment of environment to copy for child process (copy caller's
environment if 0000h)
02h DWORD pointer to command tail to be copied into child's PSP
06h DWORD pointer to first FCB to be copied into child's PSP
0Ah DWORD pointer to second FCB to be copied into child's PSP
0Eh DWORD (AL=01h) will hold subprogram's initial SS:SP on return
12h DWORD (AL=01h) will hold entry point (CS:IP) on return
SeeAlso: #0804,#0805

Format of EXEC parameter block for AL=03h:
Offset Size Description (Table 0804)
00h WORD segment at which to load overlay
02h WORD relocation factor to apply to overlay if in .EXE format
SeeAlso: #0803,#0805

Format of EXEC parameter block for FlashTek X-32:
Offset Size Description (Table 0805)
00h PWORD 48-bit far pointer to environment string
06h PWORD 48-bit far pointer to command tail string
SeeAlso: #0803,#0804

(Table 0806)
Values for the executable types understood by various environments:
MZ old-style DOS executable (see #0807)
NE Windows or OS/2 1.x segmented ("new") executable (see #0809)
LE Windows virtual device driver (VxD) linear executable (see #0822)
LX variant of LE used in OS/2 2.x (see #0822)
W3 Windows WIN386.EXE file; a collection of LE files
PE Win32 (Windows NT and Win32s) portable executable based on Unix COFF
DL HP 100LX/200LX system manager compliant executable (.EXM)
MP old PharLap .EXP (see #0832)
P2 PharLap 286 .EXP (see #0833)
P3 PharLap 386 .EXP (see #0833)

Format of .EXE file header:
Offset Size Description (Table 0807)
00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
(see also #0806)
02h WORD number of bytes in last 512-byte page of executable
04h WORD total number of 512-byte pages in executable (includes any
partial last page)
06h WORD number of relocation entries
08h WORD header size in paragraphs
0Ah WORD minimum paragraphs of memory to allocation in addition to
executable's size
0Ch WORD maximum paragraphs to allocate in addition to executable's size
0Eh WORD initial SS relative to start of executable
10h WORD initial SP
12h WORD checksum (one's complement of sum of all words in executable)
14h DWORD initial CS:IP relative to start of executable
18h WORD offset within header of relocation table
40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
1Ah WORD overlay number (normally 0000h = main program)
---new executable---
1Ch 4 BYTEs ???
20h WORD behavior bits
22h 26 BYTEs reserved for additional behavior info
3Ch DWORD offset of new executable (NE,LE,etc) header within disk file,
or 00000000h if plain MZ executable
---Borland TLINK---
1Ch 2 BYTEs ??? (apparently always 01h 00h)
1Eh BYTE signature FBh
1Fh BYTE TLINK version (major in high nybble, minor in low nybble)
20h 2 BYTEs ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
---ARJ self-extracting archive---
1Ch 4 BYTEs signature "RJSX" (older versions, new signature is "aRJsfX" in
the first 1000 bytes of the file)
---LZEXE 0.90 compressed executable---
1Ch 4 BYTEs signature "LZ09"
---LZEXE 0.91 compressed executable---
1Ch 4 BYTEs signature "LZ91"
---PKLITE compressed executable---
1Ch BYTE minor version number
1Dh BYTE bits 0-3: major version
bit 4: extra compression
bit 5: huge (multi-segment) file
1Eh 6 BYTEs signature "PKLITE" (followed by copyright message)
---LHarc 1.x self-extracting archive---
1Ch 4 BYTEs unused???
20h 3 BYTEs jump to start of extraction code
23h 2 BYTEs ???
25h 12 BYTEs signature "LHarc's SFX "
---LHA 2.x self-extracting archive---
1Ch 8 BYTEs ???
24h 10 BYTEs signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
---TopSpeed C 3.0 CRUNCH compressed file---
1Ch DWORD 018A0001h
20h WORD 1565h
---PKARCK 3.5 self-extracting archive---

1Ch DWORD 00020001h
20h WORD 0700h
---BSA (Soviet archiver) self-extracting archive---
1Ch WORD 000Fh
1Eh BYTE A7h
---LARC self-extracting archive---
1Ch 4 BYTEs ???
20h 11 BYTEs "SFX by LARC "
---LH self-extracting archive---
1Ch 8 BYTEs ???
24h 8 BYTEs "LH's SFX "
---other linkers---
1Ch var optional information
---
N N DWORDs relocation items
Notes: if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
versions of the MS linker set it that way
if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
program is loaded as high in memory as possible (DOS only checks
the maximum allocation, however)
the maximum allocation is set to FFFFh by default
additional data may be contained in the file beyond the end of the
load image described by the .EXE header; this data may be overlays,
the actual executable for newer-format executables, or debugging
information (see #0813,#0837)

Format of ROM Module Header:
Offset Size Description (Table 0808)
00h 2 BYTEs ROM signature 55h, AAh
02h BYTE size of ROM in 512-byte blocks
03h 3 BYTEs POST initialization entry point (near JMP instruction)
06h ROM Program Name List [array]
Offset Size Description
00h BYTE length of ROM program's name (00h if end of name list)
01h N BYTEs program name
N+1 3 BYTEs program entry point (near JMP instruction)

Format of new executable header:
Offset Size Description (Table 0809)
00h 2 BYTEs "NE" (4Eh 45h) signature
02h 2 BYTEs linker version (major, then minor)
04h WORD offset from start of this header to entry table (see #0816)
06h WORD length of entry table in bytes
08h DWORD file load CRC (0 in Borland's TPW)
0Ch BYTE program flags (see #0810)
0Dh BYTE application flags (see #0811)
0Eh WORD auto data segment index
10h WORD initial local heap size
12h WORD initial stack size (added to data seg, 0000h if SS <> DS)
14h DWORD program entry point (CS:IP), "CS" is index into segment table
18h DWORD initial stack pointer (SS:SP), "SS" is segment index
if SS=automatic data segment and SP=0000h, the stack pointer is
set to the top of the automatic data segment, just below the
local heap
1Ch WORD segment count
1Eh WORD module reference count
20h WORD length of nonresident names table in bytes
22h WORD offset from start of this header to segment table (see #0814)
24h WORD offset from start of this header to resource table
26h WORD offset from start of this header to resident names table
28h WORD offset from start of this header to module reference table
2Ah WORD offset from start of this header to imported names table
(array of counted strings, terminated with a string of length
00h)
2Ch DWORD offset from start of file to nonresident names table
30h WORD count of moveable entry point listed in entry table
32h WORD file alignment size shift count
0 is equivalent to 9 (default 512-byte pages)
34h WORD number of resource table entries
36h BYTE target operating system
00h unknown
01h OS/2
02h Windows
03h European MS-DOS 4.x
04h Windows 386
05h BOSS (Borland Operating System Services)
81h PharLap 286|DOS-Extender, OS/2
82h PharLap 286|DOS-Extender, Windows
37h BYTE other EXE flags (see #0812)
38h WORD offset to return thunks or start of gangload area
3Ah WORD offset to segment reference thunks or length of gangload area
3Ch WORD minimum code swap area size
3Eh 2 BYTEs expected Windows version (minor version first)
Note: this header is documented in detail in the Windows 3.1 SDK Programmer's
Reference, Vol 4.

Bitfields for new executable program flags:
Bit(s) Description (Table 0810)
0-1 DGROUP type
0 = none
1 = single shared
2 = multiple (unshared)
3 = (null)
2 global initialization
3 protected mode only
4 8086 instructions
5 80286 instructions
6 80386 instructions
7 80x87 instructions

Bitfields for new executable application flags:
Bit(s) Description (Table 0811)
0-2 application type
001 full screen (not aware of Windows/P.M. API)
010 compatible with Windows/P.M. API
011 uses Windows/P.M. API
3 is a Family Application (OS/2)
5 0=executable, 1=errors in image
6 non-conforming program (valid stack is not maintained)
7 DLL or driver rather than application
(SS:SP info invalid, CS:IP points at FAR init routine called with
AX=module handle which returns AX=0000h on failure, AX nonzero on
successful initialization)

Bitfields for other new .EXE flags:
Bit(s) Description (Table 0812)
0 supports long filenames
1 2.X protected mode
2 2.X proportional font
3 gangload area

Format of Codeview trailer (at end of executable):
Offset Size Description (Table 0813)
00h WORD signature 4E42h ('NB')
02h WORD Microsoft debug info version number
04h DWORD Codeview header offset
SeeAlso: #0837

Format of new executable segment table record:
Offset Size Description (Table 0814)
00h WORD offset in file (shift left by alignment shift to get byte offs)
02h WORD length of image in file (0000h = 64K)
04h WORD segment attributes (see #0815)
06h WORD number of bytes to allocate for segment (0000h = 64K)
Note: the first segment table entry is entry number 1
SeeAlso: #0817

Bitfields for segment attributes:
Bit(s) Description (Table 0815)
0 data segment rather than code segment
1 unused???
2 real mode
3 iterated
4 movable
5 sharable
6 preloaded rather than demand-loaded
7 execute-only (code) or read-only (data)
8 relocations (directly following code for this segment)
9 debug info present
10,11 80286 DPL bits
12 discardable
13-15 discard priority

Format of new executable entry table item (list):
Offset Size Description (Table 0816)
00h BYTE number of entry points (00h if end of entry table list)
01h BYTE segment number (00h if end of entry table list)
02h 3N BYTEs entry records
Offset Size Description
00h BYTE flags
bit 0: exported
bit 1: single data
bits 2-7: unused???
01h WORD offset within segment

Format of new executable relocation data (immediately follows segment image):
Offset Size Description (Table 0817)
00h WORD number of relocation items
02h 8N BYTEs relocation items
Offset Size Description
00h BYTE relocation type
00h LOBYTE
02h BASE
03h PTR
05h OFFS
0Bh PTR48
0Dh OFFS32
01h BYTE flags
bit 2: additive
02h WORD offset within segment
04h WORD target address segment
06h WORD target address offset
SeeAlso: #0814,#0818

Format of new executable resource data:
Offset Size Description (Table 0818)
00h WORD alignment shift count for resource data
02h N RECORDs resources
Format of resource record:
Offset Size Description
00h WORD type ID
0000h if end of resource records
>= 8000h if integer type
else offset from start of resource table to type string
02h WORD number of resources of this type
04h DWORD reserved for runtime use
08h N Resources (see #0819)
Note: resource type and name strings are stored immediately following the
resource table, and are not null-terminated
SeeAlso: #0819

Format of new executable resource entry:
Offset Size Description (Table 0819)
00h WORD offset in alignment units from start of file to contents of
the resource data
02h WORD length of resource image in bytes
04h WORD flags
bit 4: moveable
bit 5: shareable
bit 6: preloaded
06h WORD resource ID
>= 8000h if integer resource
else offset from start of resource table to resource string
08h DWORD reserved for runtime use
Notes: resource type and name strings are stored immediately following the
resource table, and are not null-terminated
strings are counted strings, with a string of length 0 indicating the
end of the resource table
SeeAlso: #0818,#0820

Format of new executable module reference table [one bundle of entries]:
Offset Size Description (Table 0820)
00h BYTE number of records in this bundle (00h if end of table)
01h BYTE segment indicator
00h unused
FFh movable segment, segment number is in entry
else segment number of fixed segment
02h N RECORDs
Format of segment record
Offset Size Description
00h BYTE flags
bit 0: entry is exported
bit 1: entry uses global (shared) data
bits 7-3: number of parameter words
---fixed segment---
01h WORD offset
---moveable segment---
01h 2 BYTEs INT 3F instruction (CDh 3Fh)
03h BYTE segment number
05h WORD offset
Note: table entries are numbered starting from 1
SeeAlso: #0821

Format of new executable resident/nonresident name table entry:
Offset Size Description (Table 0821)
00h BYTE length of string (00h if end of table)
01h N BYTEs ASCII text of string
N+1 WORD ordinal number (index into entry table)
Notes: the first string in the resident name table is the module name; the
first entry in the nonresident name table is the module description
the strings are case-sensitive; if the executable was linked with
/IGNORECASE, all strings are in uppercase
SeeAlso: #0820

Format of Linear Executable (enhanced mode executable) header:
Offset Size Description (Table 0822)
00h 2 BYTEs "LE" (4Ch 45h) signature (Windows)
"LX" (4Ch 58h) signature (OS/2)
02h BYTE byte order (00h = little-endian, nonzero = big-endian)
03h BYTE word order (00h = little-endian, nonzero = big-endian)
04h DWORD executable format level
08h WORD CPU type (see also INT 15/AH=C9h)
01h Intel 80286 or upwardly compatible
02h Intel 80386 or upwardly compatible
03h Intel 80486 or upwardly compatible
04h Intel Pentium (80586) or upwardly compatible
20h Intel i860 (N10) or compatible
21h Intel "N11" or compatible
40h MIPS Mark I (R2000, R3000) or compatible
41h MIPS Mark II (R6000) or compatible
42h MIPS Mark III (R4000) or compatible
0Ah WORD target operating system
01h OS/2
02h Windows
03h European DOS 4.0
04h Windows 386
0Ch DWORD module version
10h DWORD module type (see #0823)
14h DWORD number of memory pages
18h Initial CS:EIP
DWORD object number
DWORD offset
20h Initial SS:ESP
DWORD object number
DWORD offset
28h DWORD memory page size
2Ch DWORD (Windows LE) bytes on last page
(OS/2 LX) page offset shift count
30h DWORD fixup section size
34h DWORD fixup section checksum
38h DWORD loader section size
3Ch DWORD loader section checksum
40h DWORD offset of object table (see #0824)
44h DWORD object table entries
48h DWORD object page map table offset (see #0826)
4Ch DWORD object iterate data map offset
50h DWORD resource table offset
54h DWORD resource table entries
58h DWORD resident names table offset (see #0827)
5Ch DWORD entry table offset (see #0828,#0829)
60h DWORD module directives table offset
64h DWORD Module Directives entries
68h DWORD Fixup page table offset
6Ch DWORD Fixup record table offset (see #0831)
70h DWORD imported modules name table offset
74h DWORD imported modules count
78h DWORD imported procedures name table offset
7Ch DWORD per-page checksum table offset
80h DWORD data pages offset
84h DWORD preload page count
88h DWORD non-resident names table offset
8Ch DWORD non-resident names table length
90h DWORD non-resident names checksum
94h DWORD automatic data object
98h DWORD debug information offset
9Ch DWORD debug information length
A0h DWORD preload instance pages number
A4h DWORD demand instance pages number
A8h DWORD extra heap allocation
ACh 12 BYTEs reserved
B8h DWORD offset of VERSIONINFO resource (MS-Windows VxD only)
BCh DWORD pointer to ??? (dynamically-loadable VxDs only???)
C0h WORD device ID (MS-Windows VxD only)
C2h WORD DDK version (MS-Windows VxD only)
Note: used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers

Bitfields for Linear Executable module type:
Bit(s) Description (Table 0823)
2 initialization (only for DLLs) 0 = global, 1 = per-process
4 no internal fixups in executable image
5 no external fixups in executable image
8-10 API compatibility
0 = unknown
1 = incompatible with PM windowing \
2 = compatible with PM windowing > (only for
3 = uses PM windowing API / programs)
13 module not loadable (only for programs)
15-17 module type
000 program
001 library (DLL)
011 protected memory library module
100 physical device driver
110 virtual device driver
30 per-process library termination
(requires valid CS:EIP, can't be set for .EXE)

Format of object table entry:
Offset Size Description (Table 0824)
00h DWORD virtual size in bytes
04h DWORD relocation base address
08h DWORD object flags (see #0825)
0Ch DWORD page map index
10h DWORD page map entries (see #0826)
14h 4 BYTEs reserved??? (apparently always zeros)

Bitfields for object flags:
Bit(s) Description (Table 0825)
0 readable
1 writable
2 executable
3 resource
4 discardable
5 shared
6 preloaded
7 invalid
8-9 type
00 normal
01 zero-filled
10 resident
11 resident and contiguous
10 resident and long-lockable
11 reserved
12 16:16 alias required
13 "BIG" (Huge: 32-bit)
14 conforming
15 "OBJECT_I/O_PRIVILEGE_LEVEL"
16-31 reserved

Format of object page map table entry:
Offset Size Description (Table 0826)
00h BYTE ??? (usually 00h)
01h WORD (big-endian) index to fixup table
0000h if no relocation info
03h BYTE type (00h hard copy in file, 03h some relocation needed)

Format of resident names table entry:
Offset Size Description (Table 0827)
00h BYTE length of name
01h N BYTEs name
N+1 3 BYTEs ???

Format of LE linear executable entry table:
Offset Size Description (Table 0828)
00h BYTE number of entries in table
01h 10 BYTEs per entry
Offset Size Description
00h BYTE bit flags
bit 0: non-empty bundle
bit 1: 32-bit entry
01h WORD object number
03h BYTE entry type flags
bit 0: exported
bit 1: uses single data rather than instance
bit 2: reserved
bits 3-7: number of stack parameters
04h DWORD offset of entry point
08h 2 BYTEs ???
Note: empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
and do not contain the remaining nine bytes

Format of LX linear executable entry table [array]:
Offset Size Description (Table 0829)
00h BYTE number of bundles following (00h = end of entry table)
01h BYTE bundle type
00h empty
01h 16-bit entry
02h 286 callgate entry
03h 32-bit entry
04h forwarder entry
bit 7 set if additional parameter typing information is present
---bundle type 00h---
no additional fields
---bundle type 01h---
02h WORD object number
04h BYTE entry flags
bit 0: exported
bits 7-3: number of stack parameters
05h WORD offset of entry point in object (shifted by page size shift)
---bundle type 02h---
02h WORD object number
04h BYTE entry flags
bit 0: exported
bits 7-3: number of stack parameters
05h WORD offset of entry point in object
07h WORD reserved for callgate selector (used by loader)
---bundle type 03h---
02h WORD object number
04h BYTE entry flags
bit 0: exported
bits 7-3: number of stack parameters
05h DWORD offset of entry point in object
---bundle type 04h---
02h WORD reserved
04h BYTE forwarder flags
bit 0: import by ordinal
bits 7-1 reserved
05h WORD module ordinal
(forwarder's index into Import Module Name table)
07h DWORD procedure name offset or import ordinal number
Note: all fields after the first two bytes are repeated N times

Bitfields for linear executable fixup type:
Bit(s) Description (Table 0830)
7 ordinal is BYTE rather than WORD
6 16-rather than 8-object number/module ordinal
5 addition with DWORD rather than WORD
4 relocation info has size with new two bytes at end
3 reserved (0)
2 set if add to destination, clear to replace destination
1-0 type
00 internal fixup
01 external fixup, imported by ordinal
10 external fixup, imported by name
11 internal fixup via entry table

Format of linear executable fixup record:
Offset Size Description (Table 0831)
00h BYTE type
bits 7-4: modifier (0001 single, 0011 multiple)
bits 3-0: type
0000 byte offset
0010 word segment
0011 16-bit far pointer (DWORD)
0101 16-bit offset
0110 32-bit far pointer (PWORD)
0111 32-bit offset
1000 near call or jump, WORD/DWORD based on seg attrib
01h BYTE linear executable fixup type (see #0830)
---if single type---
02h WORD offset within page
04h relocation information
---internal fixup---
BYTE object number
---external,ordinal---
BYTE one-based module number in Import Module table
BYTE/WORD ordinal number
WORD/DWORD value to add (only present if modifier bit 4 set)
---external,name---
BYTE one-based module number in Import Module table
WORD offset in Import Procedure names
WORD/DWORD value to add (only present if modifier bit 4 set)
---if multiple type---
02h BYTE number of items
03h var relocation info as for "single" type (see above)
N WORDs offsets of items to relocate

Format of old Phar Lap .EXP file header:
Offset Size Description (Table 0832)
00h 2 BYTEs "MP" (4Dh 50h) signature
02h WORD remainder of image size / page size (page size = 512h)
04h WORD size of image in pages
06h WORD number of relocation items
08h WORD header size in paragraphs
0Ah WORD minimum number of extra 4K pages to be allocated at the end
of program, when it is loaded
0Ch WORD maximum number of extra 4K pages to be allocated at the end
of program, when it is loaded
0Eh DWORD initial ESP
12h WORD word checksum of file
14h DWORD initial EIP
18h WORD offset of first relocation item
1Ah WORD overlay number
1Ch WORD ??? (wants to be 1)
SeeAlso: #0833

Format of new Phar Lap .EXP file header:
Offset Size Description (Table 0833)
00h 2 BYTEs signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
02h WORD level (01h flat-model file, 02h multisegmented file)
04h WORD header size
06h DWORD file size in bytes
0Ah WORD checksum
0Ch DWORD offset of run-time parameters within file (see #0835)
10h DWORD size of run-time parameters in bytes
14h DWORD offset of relocation table within file

18h DWORD size of relocation table in bytes
1Ch DWORD offset of segment information table within file (see #0834)
20h DWORD size of segment information table in bytes
24h WORD size of segment information table entry in bytes
26h DWORD offset of load image within file
2Ah DWORD size of load image on disk
2Eh DWORD offset of symbol table within file
32h DWORD size of symbol table in bytes
36h DWORD offset of GDT within load image
3Ah DWORD size of GDT in bytes
3Eh DWORD offset of LDT within load image
42h DWORD size of LDT in bytes
46h DWORD offset of IDT within load image
4Ah DWORD size of IDT in bytes
4Eh DWORD offset of TSS within load image
52h DWORD size of TSS in bytes
56h DWORD minimum number of extra bytes to be allocated at end of program
(level 1 executables only)
5Ah DWORD maximum number of extra bytes to be allocated at end of program
(level 1 executables only)
5Eh DWORD base load offset (level 1 executables only)
62h DWORD initial ESP
66h WORD initial SS
68h DWORD initial EIP
6Ch WORD initial CS
6Eh WORD initial LDT
70h WORD initial TSS
72h WORD flags
bit 0: load image is packed
bit 1: 32-bit checksum is present
bits 4-2: type of relocation table
74h DWORD memory requirements for load image
78h DWORD 32-bit checksum (optional)
7Ch DWORD size of stack segment in bytes
80h 256 BYTEs reserved (0)
SeeAlso: #0832,#0836

Format of Phar Lap segment information table entry:
Offset Size Description (Table 0834)
00h WORD selector number
02h WORD flags
04h DWORD base offset of selector
08h DWORD minimum number of extra bytes to be allocated to the segment

Format of 386|DOS-Extender run-time parameters:
Offset Size Description (Table 0835)
00h 2 BYTEs signature "DX" (44h 58h)
02h WORD minimum number of real-mode params to leave free at run time
04h WORD maximum number of real-mode params to leave free at run time
06h WORD minimum interrupt buffer size in KB
08h WORD maximum interrupt buffer size in KB
0Ah WORD number of interrupt stacks
0Ch WORD size in KB of each interrupt stack
0Eh DWORD offset of byte past end of real-mode code and data
12h WORD size in KB of call buffers
14h WORD flags
bit 0: file is virtual memory manager
bit 1: file is a debugger
16h WORD unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
18h 104 BYTEs reserved (0)

Format of Phar Lap repeat block header:
Offset Size Description (Table 0836)
00h WORD byte count
02h BYTE repeat string length

Format of Borland debugging information header (following load image):
Offset Size Description (Table 0837)
00h WORD signature 52FBh
02h WORD version ID
04h DWORD size of name pool in bytes
08h WORD number of names in name pool
0Ah WORD number of type entries
0Ch WORD number of structure members
0Eh WORD number of symbols
10h WORD number of global symbols
12h WORD number of modules
14h WORD number of locals (optional)
16h WORD number of scopes in table
18h WORD number of line-number entries
1Ah WORD number of include files
1Ch WORD number of segment records
1Eh WORD number of segment/file correlations
20h DWORD size of load image after removing uninitialized data and debug
information
24h DWORD debugger hook; pointer into debugged program whose meaning
depends on program flags
28h BYTE program flags
bit 0: case-sensitive link
bit 1: pascal overlay program
29h WORD no longer used
2Bh WORD size of data pool in bytes
2Dh BYTE padding
2Eh WORD size of following header extension (currently 00h, 10h, or 20h)
30h WORD number of classes
32h WORD number of parents
34h WORD number of global classes (currently unused)
36h WORD number of overloads (currently unused)
38h WORD number of scope classes
3Ah WORD number of module classes
3Ch WORD number of coverage offsets
3Eh DWORD offset relative to symbol base of name pool
42h WORD number of browser information records
44h WORD number of optimized symbol records
46h WORD debugging flags
48h 8 BYTEs padding
Note: additional information on the Borland debugging info may be found in
Borland's Open Architecture Handbook
SeeAlso: #0813
--------U-214B-------------------------------
INT 21 - ELRES v1.0 only - INSTALLATION CHECK
AH = 4Bh
DS:DX = 0000h:0000h
Return: ES:BX -> ELRES history structure (see #0606 at AH=2Bh/CX=454Ch)
DX = DABEh (signature, DAve BEnnett)
Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
Bennett
SeeAlso: AH=2Bh/CX=454Ch
--------v-214B04-----------------------------
INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
AX = 4B04h
Return: CF clear if "MG" resident
AX = 044Bh if "699"/"Thirteen Minutes" resident
SeeAlso: AX=4243h,AH=4Ah/BX=FFFFh,AX=4B21h
--------D-214B05-----------------------------
INT 21 - DOS 5+ - SET EXECUTION STATE
AX = 4B05h
DS:DX -> execution state structure (see #0838)
Return: CF clear if successful
AX = 0000h
CF set on error
AX = error code (see #0885 at AH=59h)
Note: used by programs which intercept AX=4B00h to prepare new programs for
execution (including setting the DOS version number). No DOS, BIOS
or other software interrupt may be called after return from this call
before commencement of the child process. If DOS is running in the
HMA, A20 is turned off on return from this call.
SeeAlso: AH=4Bh

Format of execution state structure:
Offset Size Description (Table 0838)
00h WORD reserved (00h)
02h WORD type flags
bit 0: program is an .EXE
bit 1: program is an overlay
04h DWORD pointer to ASCIZ name of program file
08h WORD PSP segment of new program
0Ah DWORD starting CS:IP of new program
0Eh DWORD program size including PSP
--------v-214B20-----------------------------
INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
AX = 4B20h
SeeAlso: AX=4B04h,AX=4B21h
--------v-214B21-----------------------------
INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
AX = 4B21h
Note: called at completion of virus installation
SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
--------v-214B25-----------------------------
INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
AX = 4B25h
Return: DI = 1234h if resident
SeeAlso: AX=4B21h,AX=4B40h
--------v-214B40-----------------------------
INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
AX = 4B40h
Return: AX = 5678h if resident
SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
--------v-214B41-----------------------------
INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
AX = 4B41h
???
Return: ???
SeeAlso: AX=4B40h
--------v-214B4A-----------------------------
INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
AX = 4B4Ah
Return: AL = 57h if resident
SeeAlso: AX=4B40h,AX=4B4Bh
--------v-214B4B-----------------------------
INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
AX = 4B4Bh
Return: CF clear if resident
SeeAlso: AX=4B4Ah,AX=4B4Dh
--------v-214B4D-----------------------------
INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
AX = 4B4Dh
Return: CF clear if resident
SeeAlso: AX=4B4Ah,AX=4B50h
--------v-214B50-----------------------------
INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
AX = 4B50h
Return: AX = 1234h if resident
SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
--------v-214B53-----------------------------
INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
AX = 4B53h
Return: CF clear if resident
SeeAlso: AX=4B50h,AX=4B53h/BX=2121h,AX=4B55h
--------v-214B53BX2121-----------------------
INT 21 - VIRUS - "One Half" - INSTALLATION CHECK
AX = 4B53h
BX = 2121h
CX = 1212h
DX = 0236h
Return: AX = 454Bh if installed
SeeAlso: AX=4B50h,AX=4B53h,AX=4B55h
--------v-214B55-----------------------------
INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
AX = 4B55h
Return: AX = 1231h if resident
SeeAlso: AX=4B53h,AX=4B59h
--------v-214B59-----------------------------
INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
AX = 4B59h
Return: CF clear if resident
SeeAlso: AX=4B50h,AX=4B5Eh
--------v-214B5E-----------------------------
INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
AX = 4B5Eh
Return: CF clear if resident
SeeAlso: AX=4B59h,AX=4B87h
--------v-214B60-----------------------------
INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
AX = 4B60h
???
Return: ???
SeeAlso: AX=4B50h
--------v-214B87-----------------------------
INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
AX = 4B87h
Return: AX = 6663h if resident
SeeAlso: AX=4B5Eh,AX=4B95h
--------v-214B95-----------------------------
INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
AX = 4B95h
Return: AX = 1973h if resident
SeeAlso: AX=4B87h,AX=4BA7h
--------v-214BA7-----------------------------
INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
AX = 4BA7h
Return: AX = B459h if resident
SeeAlso: AX=4B95h,AX=4BAAh
--------v-214BAA-----------------------------
INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
AX = 4BAAh
Return: CF clear if resident
SeeAlso: AX=4BA7h,AX=4BAFh
--------v-214BAF-----------------------------
INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
AX = 4BAFh
Return: AL = AFh if "Magnitogorsk" resident
AL = FAh if "948"/"Screenplus1" resident
SeeAlso: AX=4BAAh,AX=4BDDh
--------v-214BDD-----------------------------
INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
AX = 4BDDh
Return: AX = 1234h
SeeAlso: AX=4BAFh,AX=4BFEh
--------v-214BEE-----------------------------
INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
AX = 4BEEh
Return: AX = status
1234h grab was successful
2345h failed (INT 21 grabbed previously)
Program: F-DRIVER.SYS is part of the shareware F-PROT virus/trojan protection
package by Fridrik Skulason
Note: when called the first time, this function moves the INT 21 monitoring
code from its original location in the INT 21 chain to be the first
thing called by INT 21. This is the mechanism used by F-NET.
SeeAlso: INT 2F/AX=4653h
--------k-214BF0-----------------------------
INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
AX = 4BF0h
Return: CF clear if installed
AX = 899Dh
Program: DIET is an executable-compression program by Teddy Matsumoto
SeeAlso: AX=37D0h,AX=4BF1h
--------k-214BF1-----------------------------
INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
AX = 4BF1h
Return: ???
SeeAlso: AX=37D0h,AX=4BF0h
--------v-214BFE-----------------------------
INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
AX = 4BFEh
Return: AX = 1234h if "Hitchcock" resident
AX = ABCDh if "1193"/"Copyright" resident
DI = 55BBh if "Dark Avenger-1028" resident
SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
--------v-214BFF-----------------------------
INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
AX = 4BFFh
Return: BL = FFh if "USSR-707" resident
DI = 55AAh if "Justice" resident
CF clear if "Europe 92" resident
SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
--------v-214BFFSI0000-----------------------
INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
AX = 4BFFh
SI = 0000h
DI = 0000h
Return: DI = 55AAh if installed
SeeAlso: AX=4BFFh"Justice",AX=5252h
--------D-214C-------------------------------
INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
AH = 4Ch
AL = return code
Return: never returns
Notes: unless the process is its own parent (see #0603 at AH=26h, offset 16h
in PSP), all open files are closed and all memory belonging to the
process is freed
all network file locks should be removed before calling this function
SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
SeeAlso: INT 60/DI=0601h
----------214C57-----------------------------
INT 21 - Headroom - ???
AX = 4C57h
DS:DX -> target address
Note: jumps to target address instead of terminating program
SeeAlso: AX=5758h
--------D-214D-------------------------------
INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
AH = 4Dh
Return: AH = termination type
00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
01h control-C abort
02h critical error abort
03h terminate and stay resident (INT 21/AH=31h or INT 27)
AL = return code
Notes: the word in which DOS stores the return code is cleared after being
read by this function, so the return code can only be retrieved once
COMMAND.COM stores the return code of the last external command it
executed as ERRORLEVEL
this call should not be used if the child was started with AX=4B04h;
use AH=8Ah instead
the following sequence will close a Virtual DOS Machine under OS/2 2.0:
MOV AH,4Dh
INT 21h
HLT
DB 02h,0FDh
This sequence is the only way to close a specific VDM which was
booted from floppy or a disk image.
SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
--------D-214E-------------------------------
INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
AH = 4Eh
AL = special flag for use by APPEND (see note below)
CX = file attribute mask (see #0643 at AX=4301h) (bits 0 and 5 ignored)
0088h (Novell DOS 7) find first deleted file
DS:DX -> ASCIZ file specification (may include path and wildcards)
Return: CF clear if successful
[DTA] = FindFirst data block (see #0839)
CF set on error
AX = error code (02h,03h,12h) (see #0885 at AH=59h)
Notes: for search attributes other than 08h, all files with at MOST the
specified combination of hidden, system, and directory attributes
will be returned. Under DOS 2.x, searching for attribute 08h
(volume label) will also return normal files, while under DOS 3+
only the volume label (if any) will be returned.
this call also returns successfully if given the name of a character
device without wildcards. DOS 2.x returns attribute 00h, size 0,
and the current date and time. DOS 3+ returns attribute 40h and the
current date and time.
immediately after an INT 2F/AX=B711h (APPEND return found name), the
name at DS:DX will be overwritten; if AL=00h on entry, the actual
found pathname will be stored, otherwise, the actual found path
will be prepended to the original filespec without a path.
under LANtastic, this call may be used to obtain a list of a server's
shared resources by searching for "\\SERVER\*.*"; a list of printer
resources may be obtained by searching for "\\SERVER\@*.*"
under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
BUGS: under DOS 3.x and 4.x, the second and subsequent calls to this function
with a character device name (no wildcards) and search attributes
which include the volume-label bit (08h) will fail unless there is
an intervening DOS call which implicitly or explicity performs a
directory search without the volume-label bit. Such implicit
searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
(AH=41h), and RENAME (AH=56h)
DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
SeeAlso: AH=11h,AH=4Fh,AX=4301h,AH=71h,INT 2F/AX=111Bh,INT 2F/AX=B711h

Format of FindFirst data block:
Offset Size Description (Table 0839)
---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
00h BYTE drive letter (bits 0-6), remote if bit 7 set
01h 11 BYTEs search template
0Ch BYTE search attributes
---DOS 2.x (and some DOS 3.x???)---
00h BYTE search attributes
01h BYTE drive letter
02h 11 BYTEs search template
---WILDUNIX.COM---
00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed)
0Ch BYTE search attributes
---DOS 2.x and most 3.x---
0Dh WORD entry count within directory
0Fh DWORD pointer to DTA???
13h WORD cluster number of start of parent directory
---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
0Dh WORD entry count within directory
0Fh WORD cluster number of start of parent directory
11h 4 BYTEs reserved
---all versions, documented fields---
15h BYTE attribute of file found
16h WORD file time (see #0876 at AX=5700h)
18h WORD file date (see #0877 at AX=5700h)
1Ah DWORD file size
1Eh 13 BYTEs ASCIZ filename+extension
--------f-214E-------------------------------
INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
AH = 4Eh
DS:DX = 0000h:0000h
Return: AH = 99h if installed
Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
Hosgood and Terry Barnaby
--------D-214F-------------------------------
INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
AH = 4Fh
[DTA] = data block from previous FindFirst or FindNext call
Return: CF clear if successful
CF set on error
AX = error code (12h) (see #0885 at AH=59h)
Note: under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
the next matching deleted file will be returned
BUG: DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
SeeAlso: AH=12h,AH=4Eh,AH=71h,AH=72h
--------D-2150-------------------------------
INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
AH = 50h
BX = segment of PSP for new process
Notes: DOS uses the current PSP address to determine which processes own files
and memory; it corresponds to process identifiers used by other OSs
under DOS 2.x, this function cannot be invoked inside an INT 28h
handler without setting the Critical Error flag
under MS-DOS 3+ and DR-DOS 3.41+, this function does not use any of
the DOS-internal stacks and may thus be called at any time, even
during another INT 21h call
some Microsoft applications such as Quick C 2.51 use segments of 0000h
and FFFFh and direct access to the SDA (see #0892 at AX=5D06h) to
test whether they are running under MS-DOS rather than a compatible
OS; although one should only call this function with valid PSP
addresses, any program hooking it should be prepared to handle
invalid addresses
this function is supported by the OS/2 compatibility box
this call was undocumented prior to the release of DOS 5.0
SeeAlso: AH=26h,AH=51h,AH=62h
--------D-2151-------------------------------
INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
AH = 51h
Return: BX = segment of PSP for current process
Notes: DOS uses the current PSP address to determine which processes own files
and memory; it corresponds to process identifiers used by other OSs
under DOS 2.x, this function cannot be invoked inside an INT 28h
handler without setting the Critical Error flag
under DOS 3+, this function does not use any of the DOS-internal stacks
and may thus be called at any time, even during another INT 21h call
supported by OS/2 compatibility box
identical to the documented AH=62h
this call was undocumented prior to the release of DOS 5.0
SeeAlso: AH=26h,AH=50h,AH=62h
--------D-2152-------------------------------
INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
AH = 52h
Return: ES:BX -> DOS list of lists (see #0840)
Notes: partially supported by OS/2 v1.1 compatibility box (however, most
pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
pointer is FFFFh:FFFFh).
partially supported by the Windows NT DOS box; contains only a
rudimentary Current Directory Structure (see #0857)
on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
Quarterdeck's suggested check for the use of its DOSDATA.SYS or
DOS-UP.SYS is to test whether the list-of-lists segment is greater
than the segment of the first memory block; a better check for
DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
SeeAlso: INT 2F/AX=1203h

Format of List of Lists:
Offset Size Description (Table 0840)
-24 WORD (DOS 3.1+) contents of CX from INT 21/AX=5E01h
-22 WORD (DOS ???+) LRU counter for FCB caching
-20 WORD (DOS ???+) LRU counter for FCB opens
-18 DWORD (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
FFFFh:FFFFh if not installed or not available
-14 WORD (DOS ???+) offset in DOS CS of code to return from INT 21 call
-12 WORD (DOS 3.1+) sharing retry count (see AX=440Bh)
-10 WORD (DOS 3.1+) sharing retry delay (see AX=440Bh)
-8 DWORD (DOS 3+) pointer to current disk buffer
-4 WORD (DOS 3+) pointer in DOS data segment of unread CON input
when CON is read via a handle, DOS reads an entire line,
and returns the requested portion, buffering the rest
for the next read. 0000h indicates no unread input
-2 WORD segment of first memory control block (see #0841)
00h DWORD pointer to first Drive Parameter Block (see #0620 at AH=32h)
04h DWORD -> first System File Table (see #0851,#0852,#0853,#0854)
08h DWORD pointer to active CLOCK$ device's header (most recently loaded
driver with CLOCK bit set)
0Ch DWORD pointer to active CON device's header (most recently loaded
driver with STDIN bit set)
---DOS 2.x---
10h BYTE number of logical drives in system
11h WORD maximum bytes/block of any block device
13h DWORD pointer to first disk buffer (see #0861,#0862)
17h 18 BYTEs actual NUL device driver header (not a pointer!)
NUL is always the first device on DOS's linked list of device
drivers. (see #0858)
---DOS 3.0---
10h BYTE number of block devices
11h WORD maximum bytes/block of any block device
13h DWORD pointer to first disk buffer (see #0862,#0864)
17h DWORD pointer to array of current directory structures (see #0855)
1Bh BYTE value of LASTDRIVE command in CONFIG.SYS (default 5)
1Ch DWORD pointer to STRING= workspace area
20h WORD size of STRING area (the x in STRING=x from CONFIG.SYS)
22h DWORD pointer to FCB table
26h WORD the y in FCBS=x,y from CONFIG.SYS
28h 18 BYTEs actual NUL device driver header (not a pointer!)
NUL is always the first device on DOS's linked list of device
drivers. (see #0858)
---DOS 3.1-3.3---
10h WORD maximum bytes per sector of any block device
12h DWORD pointer to first disk buffer in buffer chain (see #0862)
16h DWORD pointer to array of current directory structures (see #0855)
1Ah DWORD pointer to system FCB tables (see #0852,#0853,#0854)
1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
20h BYTE number of block devices installed
21h BYTE number of available drive letters (largest of 5, installed
block devices, and CONFIG.SYS LASTDRIVE=). Also size of
current directory structure array.
22h 18 BYTEs actual NUL device driver header (not a pointer!)
NUL is always the first device on DOS's linked list of device
drivers. (see #0858)
34h BYTE number of JOIN'ed drives
---DOS 4.x---
10h WORD maximum bytes per sector of any block device
12h DWORD pointer to disk buffer info record (see #0864,#0865)
Note: although the initialization code in IO.SYS uses this
pointer, MSDOS.SYS does not, instead using the hardcoded
address of the info record
16h DWORD pointer to array of current directory structures
(see #0855,#0856)
1Ah DWORD pointer to system FCB tables (see #0852,#0853,#0854)
1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
(always 00h for DOS 5.0)
20h BYTE number of block devices installed
21h BYTE number of available drive letters (largest of 5, installed
block devices, and CONFIG.SYS LASTDRIVE=). Also size of
current directory structure array.
22h 18 BYTEs actual NUL device driver header (not a pointer!)
NUL is always the first device on DOS's linked list of device
drivers. (see #0858)
34h BYTE number of JOIN'ed drives
35h WORD pointer within IBMDOS code segment to list of special program
names (see #0874)
(always 0000h for DOS 5.0)
37h DWORD pointer to FAR routine for resident IFS utility functions
(see #0870)
may be called by any IFS driver which does not wish to
service functions 20h or 24h-28h itself
3Bh DWORD pointer to chain of IFS (installable file system) drivers
3Fh WORD the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
41h WORD number of lookahead buffers (the y in BUFFERS x,y)
43h BYTE boot drive (1=A:)
44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise
45h WORD extended memory size in KB
---DOS 5.0-6.0---
10h 39 BYTEs as for DOS 4.x (see above)
37h DWORD pointer to SETVER program list or 0000h:0000h
3Bh WORD (DOS=HIGH) offset in DOS CS of function to fix A20 control
when executing special .COM format
3Dh WORD PSP of most-recently EXECed program if DOS in HMA, 0000h if low
used for maintaining count of INT 21 calls which disable A20
on return
3Fh 8 BYTEs as for DOS 4.x (see above)
---Windows NT DOS Box---
10h 6 BYTEs ???
16h DWORD pointer to array of current directory structures (see #0857)
1Ah 6 BYTEs ???
20h BYTE number of block devices installed
21h BYTE number of local drive letters (= installed block devices)
Also size of current directory structure array.
22h 18 BYTEs actual NUL device driver header (not a pointer!)
NUL is always the first device on DOS's linked list of device
drivers. (see #0858)

Format of DOS memory control block (see also below):
Offset Size Description (Table 0841)
00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
01h WORD PSP segment of owner or special flag value (see #0842)
03h WORD size of memory block in paragraphs
05h 3 BYTEs unused by MS-DOS
(386MAX) if locked-out block, region start/prev region end
---DOS 2.x,3.x---
08h 8 BYTEs unused
---DOS 4+ ---
08h 8 BYTEs ASCII program name if PSP memory block or DR-DOS UMB,
else garbage
null-terminated if less than 8 characters
Notes: the next MCB is at segment (current + size + 1)
under DOS 3.1+, the first memory block is the DOS data segment,
containing installable drivers, buffers, etc. Under DOS 4+ it is
divided into subsegments, each with its own memory control block
(see #0845), the first of which is at offset 0000h.
for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
08h and 09h. "SC" is system code or locked-out inter-UMB memory,
"SD" is system data, device drivers, etc.
Some versions of DR-DOS use only seven characters of the program name,
placing a NUL in the eighth byte.
SeeAlso: #0843,#0844,#0845

(Table 0842)
Values for special flag PSP segments:
0000h free
0006h DR-DOS XMS UMB
0007h DR-DOS excluded upper memory ("hole")
0008h belongs to DOS
FFF7h 386MAX v6.01+ ???
FFFAh 386MAX UMB control block (see #0697 at AX=4402h"386MAX")
FFFDh 386MAX locked-out memory
FFFEh 386MAX UMB (normally immediately follows its control block)
FFFFh 386MAX v6.01+ device driver

Format of MS-DOS 5+ UMB control block:
Offset Size Description (Table 0843)
00h BYTE type: 5Ah if last block in chain, 4Dh otherwise
01h WORD first available paragraph in UMB if control block at start
of UMB, 000Ah if control block at end of UMB
03h WORD length in paragraphs of following UMB or locked-out region
05h 3 BYTEs unused
08h 8 BYTEs block type name: "UMB" if start block, "SM" if end block in UMB

Format of STARLITE (General Software's Embedded DOS) memory control block:
Offset Size Description (Table 0844)
00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
01h WORD PSP segment of owner, 0000h if free, 0008h if belongs to DOS
03h WORD size of memory block in paragraphs
05h BYTE unused
06h WORD segment address of next memory control block (0000h if last)
08h WORD segment address of previous memory control block or 0000h
0Ah 6 BYTEs reserved

Format of DOS 4+ data segment subsegment control blocks:
Offset Size Description (Table 0845)
00h BYTE subsegment type (blocks typically appear in this order)
"D" device driver
"E" device driver appendage
"I" IFS (Installable File System) driver
"F" FILES= control block storage area (for FILES>5)
"X" FCBS= control block storage area, if present
"C" BUFFERS EMS workspace area (if BUFFERS /X option used)
"B" BUFFERS= storage area
"L" LASTDRIVE= current directory structure array storage area
"S" STACKS= code and data area, if present (see #0846,#0847)
"T" INSTALL= transient code
01h WORD paragraph of subsegment start (usually the next paragraph)
03h WORD size of subsegment in paragraphs
05h 3 BYTEs unused
08h 8 BYTEs for types "D" and "I", base name of file from which the driver
was loaded (unused for other types)

Format of data at start of STACKS code segment (if present):
Offset Size Description (Table 0846)
00h WORD ???
02h WORD number of stacks (the x in STACKS=x,y)
04h WORD size of stack control block array (should be 8*x)
06h WORD size of each stack (the y in STACKS=x,y)
08h DWORD pointer to STACKS data segment
0Ch WORD offset in STACKS data segment of stack control block array
0Eh WORD offset in STACKS data segment of last element of that array
10h WORD offset in STACKS data segment of the entry in that array for
the next stack to be allocated (initially same as value in
0Eh and works its way down in steps of 8 to the value in
0Ch as hardware interrupts pre-empt each other)
Note: the STACKS code segment data may, if present, be located as follows:
DOS 3.2: The code segment data is at a paragraph boundary fairly early
in the IBMBIO segment (seen at 0070:0190h)
DOS 3.3: The code segment is at a paragraph boundary in the DOS data
segment, which may be determined by inspecting the segment
pointers of the vectors for those of interrupts 02h, 08h-0Eh,
70h, 72-77h which have not been redirected by device drivers
or TSRs.
DOS 4+ Identified by sub-segment control block type "S" within the DOS
data segment.
SeeAlso: #0848,INT B4"STACKMAN"

Format of array elements in STACKS data segment:
Offset Size Description (Table 0847)
00h BYTE status: 00h=free, 01h=in use, 03h=corrupted by overflow of
higher stack.
01h BYTE not used
02h WORD previous SP
04h WORD previous SS
06h WORD ptr to word at top of stack (new value for SP). The word at the
top of the stack is preset to point back to this control
block.

Format of SHARE.EXE hooks (DOS 3.1-6.00):
Offset Size Description (Table 0848)
(offsets from first system file table--pointed at by ListOfLists+04h)
-3Ch DWORD pointer to FAR routine for ???
Note: not called by MS-DOS 3.3, set to 0000h:0000h by
SHARE 3.3+
-38h DWORD pointer to FAR routine called on opening file
on call, internal DOS location points at filename
(see #0892 at AX=5D06h)
Return: CF clear if successful
CF set on error
AX = DOS error code (24h) (see #0885 at AH=59h)
Note: SHARE directly accesses DOS-internal data to get name of
file just opened
-34h DWORD pointer to FAR routine called on closing file
ES:DI -> system file table
Note: does something to every Record Lock Record for file
-30h DWORD pointer to FAR routine to close all files for given computer
(called by AX=5D03h)
-2Ch DWORD pointer to FAR routine to close all files for given process
(called by AX=5D04h)
-28h DWORD pointer to FAR routine to close file by name
(called by AX=5D02h)
DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
DPL's DS:DX -> name of file to close
Return: CF clear if successful
CF set on error
AX = DOS error code (03h) (see #0885 at AH=59h)
-24h DWORD pointer to FAR routine to lock region of file
call with BX = file handle
---DOS 3.x---
CX:DX = starting offset
SI:AX = size
---DOS 4+---
DS:DX -> lock range
DWORD start offset
DWORD size in bytes
Return: CF set on error
AL = DOS error code (21h) (see #0885 at AH=59h)
Note: not called if file is marked as remote
-20h DWORD pointer to FAR routine to unlock region of file
call with BX = file handle
---DOS 3.x---
CX:DX = starting offset
SI:AX = size
---DOS 4+---
DS:DX -> lock range
DWORD start offset
DWORD size in bytes
Return: CF set on error
AL = DOS error code (21h) (see #0885 at AH=59h)
Note: not called if file is marked as remote
-1Ch DWORD pointer to FAR routine to check if file region is locked
call with ES:DI -> system file table entry for file
CX = length of region from current position in file
Return: CF set if any portion of region locked
AX = 0021h
-18h DWORD pointer to FAR routine to get open file list entry
(called by AX=5D05h)
call with DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
DPL's BX = index of sharing record
DPL's CX = index of SFT in SFT chain of sharing rec
Return: CF set on error or not loaded
AX = DOS error code (12h) (see #0885 at AH=59h)
CF clear if successful
ES:DI -> filename
CX = number of locks owned by specified SFT
BX = network machine number
DX destroyed
-14h DWORD pointer to FAR routine for updating FCB from SFT???
call with DS:SI -> unopened FCB
ES:DI -> system file table entry
Return: BL = C0h???
Note: copies following fields from SFT to FCB:
starting cluster of file 0Bh 1Ah
sharing record offset 33h 1Ch
file attribute 04h 1Eh
-10h DWORD pointer to FAR routine to get first cluster of FCB file ???
call with ES:DI -> system file table entry
DS:SI -> FCB
Return: CF set if SFT closed or sharing record offsets
mismatched
CF clear if successful
BX = starting cluster number from FCB
-0Ch DWORD pointer to FAR routine to close file if duplicate for process
DS:SI -> system file table
Return: AX = number of handle in JFT which already uses SFT
Note: called during open/create of a file
Note: if SFT was opened with inheritance enabled and sharing
mode 111, does something to all other SFTs owned by
same process which have the same file open mode and
sharing record
-08h DWORD pointer to FAR routine for closing file
Note: closes various handles referring to file most-recently
opened
-04h DWORD pointer to FAR routine to update directory info in related SFT
entries
call with ES:DI -> system file table entry for file (see #0853)
AX = subfunction (apply to each related SFT)
00h: update time stamp (offset 0Dh) and date
stamp (offset 0Fh)
01h: update file size (offset 11h) and starting
cluster (offset 0Bh). Sets last-accessed
cluster fields to start of file if file
never accessed
02h: as function 01h, but last-accessed fields
always changed
03h: do both functions 00h and 02h
Note: follows ptr at offset 2Bh in system file table entries
Note: NOP if opened with no-inherit or via FCB
Notes: most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
either that SS=DOS DS or SS=DS=DOS DS and directly access
DOS-internal data
sharing hooks are not supported by DR-DOS 5-6; they appear to be
supported by Novell DOS 7, with a segment of 0000h indicating the
DOS data segment
SeeAlso: #0849,#0850

Format of sharing record:
Offset Size Description (Table 0849)
00h BYTE flag
00h free block
01h allocated block
FFh end marker
01h WORD size of block
03h BYTE checksum of pathname (including NUL)
if sum of ASCII values is N, checksum is (N/256 + N%256)
04h WORD offset in SHARE's DS of first Record Lock Record (see #0850)
06h DWORD pointer to start of system file table chain for file
0Ah WORD unique sequence number
0Ch var ASCIZ full pathname
Note: not supported by DR-DOS SHARE 1.1 and 2.0; will reportedly be
supported by Novell DOS 7
SeeAlso: #0848,#0850

Format of SHARE.EXE Record Lock Record:
Offset Size Description (Table 0850)
00h WORD offset in SHARE's DS of next lock table in list or 0000h
02h DWORD offset in file of start of locked region
06h DWORD offset in file of end of locked region
0Ah DWORD pointer to System File Table entry for this file
0Eh WORD PSP segment of lock's owner
---DOS 5+ ---
10h WORD lock type: (00h lock all, 01h lock writes only)
SeeAlso: #0848,#0849,#0851,#0854

Format of DOS 2.x system file tables:
Offset Size Description (Table 0851)
00h DWORD pointer to next file table (offset FFFFh if last)
04h WORD number of files in this table
06h 28h bytes per file
Offset Size Description
00h BYTE number of file handles referring to this file
01h BYTE file open mode (see #0627 at AH=3Dh)
02h BYTE file attribute
03h BYTE drive (0 = character device, 1 = A, 2 = B, etc)
04h 11 BYTEs filename in FCB format (no path,no period,blank-padded)
0Fh WORD ???
11h WORD ???
13h DWORD file size???
17h WORD file date in packed format (see #0877 at AX=5700h)
19h WORD file time in packed format (see #0876 at AX=5700h)
1Bh BYTE device attribute (see #0646 at AX=4400h)
---character device---
1Ch DWORD pointer to device driver
---block device---
1Ch WORD starting cluster of file
1Eh WORD relative cluster in file of last cluster accessed
------
20h WORD absolute cluster number of current cluster
22h WORD ???
24h DWORD current file position???
SeeAlso: #0852,#0853,#0854

Format of DOS 3.0 system file tables and FCB tables:
Offset Size Description (Table 0852)
00h DWORD pointer to next file table (offset FFFFh if last)
04h WORD number of files in this table
06h 38h bytes per file
Offset Size Description
00h-1Eh as for DOS 3.1+ (see #0853)
1Fh WORD byte offset of directory entry within sector
21h 11 BYTEs filename in FCB format (no path/period, blank-padded)
2Ch DWORD (SHARE.EXE) pointer to previous SFT sharing same file
30h WORD (SHARE.EXE) network machine number which opened file
(Windows Enhanced mode DOSMGR uses the virtual machine
ID as the machine number; see INT 2F/AX=1683h)
32h WORD PSP segment of file's owner (first three entries for
AUX/CON/PRN contain segment of IO.SYS startup code)
34h WORD (SHARE.EXE) offset in SHARE code seg of share record
36h WORD ??? apparently always 0000h
SeeAlso: #0851,#0853,#0854

Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
Offset Size Description (Table 0853)
00h DWORD pointer to next file table (offset FFFFh if last)
04h WORD number of files in this table
06h 35h bytes per file
Offset Size Description
00h WORD number of file handles referring to this file
02h WORD file open mode (see AX=6C00h, #0627 at AH=3Dh)
bit 15 set if this file opened via FCB
04h BYTE file attribute (see #0643 at AX=4301h)
05h WORD device info word (see #0646 at AX=4400h)
bit 15 set if remote file
bit 14 set means do not set file date/time on closing
bit 12 set means don't inherit on EXEC
bits 5-0 drive number for disk files
07h DWORD pointer to device driver header if character device
else pointer to DOS Drive Parameter Block
(see #0620 at AH=32h)
0Bh WORD starting cluster of file
0Dh WORD file time in packed format (see #0876 at AX=5700h)
not used for character devices in DR-DOS
0Fh WORD file date in packed format (see #0877 at AX=5700h)
not used for character devices in DR-DOS
11h DWORD file size
---system file table---
15h DWORD current offset in file (may be larger than size of
file; INT 21/AH=42h does not check new position)
---FCB table---
15h WORD counter for last I/O to FCB
17h WORD counter for last open of FCB
(these are separate to determine the times of the
latest I/O and open)
---
19h WORD relative cluster within file of last cluster accessed
1Bh WORD absolute cluster number of last cluster accessed
0000h if file never read or written???
1Dh WORD number of sector containing directory entry
1Fh BYTE number of dir entry within sector (byte offset/32)
20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
2Fh WORD (SHARE.EXE) network machine number which opened file
(Windows Enhanced mode DOSMGR uses the virtual machine
ID as the machine number; see INT 2F/AX=1683h)
31h WORD PSP segment of file's owner (see #0603 at AH=26h)
(first three entries for AUX/CON/PRN contain segment
of IO.SYS startup code)
33h WORD offset within SHARE.EXE code segment of
sharing record (see #0849) 0000h = none
SeeAlso: #0851,#0852,#0854

Format of DOS 4.0-6.0 system file tables and FCB tables:
Offset Size Description (Table 0854)
00h DWORD pointer to next file table (offset FFFFh if last)
04h WORD number of files in this table
06h 3Bh bytes per file
Offset Size Description
00h WORD number of file handles referring to this file
FFFFh if in use but not referenced
02h WORD file open mode (see AX=6C00h,#0627 at AH=3Dh)
bit 15 set if this file opened via FCB
04h BYTE file attribute (see #0643 at AX=4301h)
05h WORD device info word (see also #0646 at AX=4400h)
bit 15 set if remote file
bit 14 set means do not set file date/time on closing
bit 13 set if named pipe
bit 12 set if no inherit
bit 11 set if network spooler
bit 7 set if device, clear if file (only if local)
bits 6-0 as for AX=4400h
07h DWORD pointer to device driver header if character device
else pointer to DOS Drive Parameter Block
(see #0620 at AH=32h) or REDIR data
0Bh WORD starting cluster of file (local files only)
0Dh WORD file time in packed format (see #0876)
0Fh WORD file date in packed format (see #0877)
11h DWORD file size
15h DWORD current offset in file (SFT)
LRU counters (FCB table, two WORDs)
---local file---
19h WORD relative cluster within file of last cluster accessed
1Bh DWORD number of sector containing directory entry
1Fh BYTE number of dir entry within sector (byte offset/32)
---network redirector---
19h DWORD pointer to REDIRIFS record
1Dh 3 BYTEs ???
------
20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
2Fh WORD (SHARE.EXE) network machine number which opened file
(Windows Enhanced mode DOSMGR uses the virtual machine
ID as the machine number; see INT 2F/AX=1683h)
31h WORD PSP segment of file's owner (see #0603 at AH=26h)
(first three entries for AUX/CON/PRN contain segment
of IO.SYS startup code)
33h WORD offset within SHARE.EXE code segment of
sharing record (see #0808) 0000h = none
35h WORD (local) absolute cluster number of last clustr accessed
(redirector) ???
37h DWORD pointer to IFS driver for file, 0000000h if native DOS
Note: the OS/2 2.0 DOS Boot Session does not properly fill in the filename
field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
does not appear to support SFTs at all
SeeAlso: #0851,#0852,#0853

Format of current directory structure (CDS) (array, LASTDRIVE entries):
Offset Size Description (Table 0855)
00h 67 BYTEs ASCIZ path in form X:\PATH (local) or UNC form
\\MACH\PATH (network, see notes below)
43h WORD drive attributes (see also note below and AX=5F07h)
bit 15: uses network redirector \ invalid if 00, installable
bit 14: physical drive / file system if 11
bit 13: JOIN'ed \ path above is true path that would be
bit 12: SUBST'ed / needed if not under SUBST or JOIN
bit 7: remote drive hidden from redirector's assign-list and
exempt from network connection make/break commands;
set for CD-ROM drives
45h DWORD pointer to Drive Parameter Block for drive
(see #0620 at AH=32h)
---local drives---
49h WORD starting cluster of current directory
0000h = root, FFFFh = never accessed
4Bh WORD ??? seems to be FFFFh always
4Dh WORD ??? seems to be FFFFh always
---network drives---
49h DWORD pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
(DOS 4 only) available for use by IFS driver
4Dh WORD stored user data from INT 21/AX=5F03h
------
4Fh WORD offset in current directory path of backslash corresponding to
root directory for drive
this value specifies how many characters to hide from the
"CHDIR" and "GETDIR" calls; normally set to 2 to hide the
drive letter and colon, SUBST, JOIN, and networks change it
so that only the appropriate portion of the true path is
visible to the user
---DOS 4+ ---
51h BYTE (DOS 4 only, remote drives) device type
04h network drive
52h DWORD pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
this drive, 00000000h if native DOS
56h WORD available for use by IFS driver
Notes: the path for invalid drives is normally set to X:\, but may be empty
after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
normally, only one of bits 13&12 may be set together with bit 14, but
DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
0001 SUBST, 0101 ASSIGN (see #0856)
Windows for Workgroups 3.11 network sets the path to the local
drive and directory even for network drives; in that case the
UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h
or INT 21/AX=5F46h
SeeAlso: #0856

Format of DR-DOS 5.0-6.0 current directory structure entry (array):
Offset Size Description (Table 0856)
00h 67 BYTEs ASCIZ pathname of actual root directory for this logical drive
43h WORD drive attributes
1000h SUBSTed drive
3000h??? JOINed drive
4000h physical drive
5000h ASSIGNed drive
7000h JOINed drive
8000h network drive
45h BYTE physical drive number (0=A:) if this logical drive is valid
46h BYTE ??? apparently flags for JOIN and ASSIGN
47h WORD cluster number of start of parent directory (0000h = root)
49h WORD entry number of current directory in parent directory
4Bh WORD cluster number of start of current directory
4Dh WORD used for media change detection (details not available)
4Fh WORD cluster number of SUBST/JOIN "root" directory
0000h if physical root directory
SeeAlso: #0855

Format of Windows NT Current Directory Structure (CDS) (array):
Offset Size Description (Table 0857)
00h 67 BYTEs ASCIZ path in form X:\ (does not show either current directory
or network path)
43h 4 BYTEs ???
Note: the WinNT CDS contains only as many entries as there are local drives,
not LASTDRIVE entries.

Format of DOS device driver header:
Offset Size Description (Table 0858)
00h DWORD pointer to next driver, offset=FFFFh if last driver
04h WORD device attributes (see #0859,#0860)
06h WORD device strategy entry point
call with ES:BX -> request header
(see #1382 at INT 2F/AX=0802h)
08h WORD device interrupt entry point
---character device---
0Ah 8 BYTEs blank-padded character device name
---block device---
0Ah BYTE number of subunits (drives) supported by driver
0Bh 7 BYTEs normally unused; sometimes contains signature to indicate
specific drivers:
"GFS " LapLink III device driver DD.BIN
"STAC-CD" Stacker/Stacker Anywhere (see AX=4404h"Stacker")
"SIDExxx" PCMCIA driver ATADRV.EXE (see AX=440Dh)
"$PCMATA" PCMCIA driver PCMATA.SYS (see AX=440Dh)
"DSKREET" NortonUtils v5+ Diskreet (see INT 2F/AX=FE00h)
---
12h WORD (CD-ROM driver) reserved, must be 0000h
appears to be another device chain
14h BYTE (CD-ROM driver) drive letter (must initially be 00h)
15h BYTE (CD-ROM driver) number of units
16h 6 BYTEs (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
(currently '00')
SeeAlso: #1341 at INT 25/AX=CDCDh,#1557 at INT 2F/AX=5600h

Bitfields for device attributes (character device):
Bit(s) Description (Table 0859)
15 set (indicates character device)
14 IOCTL supported (see AH=44h)
13 (DOS 3+) output until busy supported
12 reserved
11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
10-8 reserved
7 (DOS 5+) Generic IOCTL check call supported (driver command 19h)
(see AX=4410h,AX=4411h)
6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
(see AX=440Ch,AX=440Dh)
5 reserved
4 device is special (use INT 29 "fast console output")
3 device is CLOCK$ (all reads/writes use transfer record described
below)
2 device is NUL
1 device is standard output
0 device is standard input
Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
010 = European DOS 4.0)
SeeAlso: #0860,#0858

Bitfields for device attributes (block device):
Bit(s) Description (Table 0860)
15 clear (indicates block device)
14 IOCTL supported
13 non-IBM format
12 network device (device is remote)
11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
10 reserved
9 direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives
7 (DOS 5+) Generic IOCTL check call supported (driver command 19h)
(see AX=4410h,AX=4411h)
6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
implies support for commands 17h and 18h
(see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
5-2 reserved
1 driver supports 32-bit sector addressing (DOS 3.31+)
0 reserved
Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
010 = European DOS 4.0)
SeeAlso: #0859,#0858

Format of DOS 2.x disk buffer:
Offset Size Description (Table 0861)
00h DWORD pointer to next disk buffer, offset = FFFFh if last
least-recently used buffer is first in chain
04h BYTE drive (0=A, 1=B, etc), FFh if not in use
05h 3 BYTEs unused??? (seems always to be 00h 00h 01h)
08h WORD logical sector number
0Ah BYTE number of copies to write (1 for non-FAT sectors)
0Bh BYTE sector offset between copies if multiple copies to be written
0Ch DWORD pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
10h buffered data
SeeAlso: #0862,#0864,#0865,#0867

Format of DOS 3.x disk buffer:
Offset Size Description (Table 0862)
00h DWORD pointer to next disk buffer, offset = FFFFh if last
least-recently used buffer is first in chain
04h BYTE drive (0=A,1=B, etc), FFh if not in use
05h BYTE buffer flags (see #0863)
06h WORD logical sector number
08h BYTE number of copies to write (1 for non-FAT sectors)
09h BYTE sector offset between copies if multiple copies to be written
0Ah DWORD pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
0Eh WORD unused??? (almost always 0)
10h buffered data
SeeAlso: #0861,#0864,#0865,#0867

Bitfields for DOS 3.x disk buffer flags:
Bit(s) Description (Table 0863)
7 ???
6 buffer dirty
5 buffer has been referenced
4 ???
3 sector in data area
2 sector in a directory, either root or subdirectory
1 sector in FAT
0 boot sector??? (guess)
SeeAlso: #0868

Format of DOS 4.00 (pre UR 25066) disk buffer info:
Offset Size Description (Table 0864)
00h DWORD pointer to array of disk buffer hash chain heads (see #0866)
04h WORD number of disk buffer hash chains (referred to as NDBCH below)
06h DWORD pointer to lookahead buffer, zero if not present
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
0Ch BYTE 00h if buffers in EMS (/X), FFh if not
0Dh WORD EMS handle for buffers, zero if not in EMS
0Fh WORD EMS physical page number used for buffers (usually 255)
11h WORD ??? seems always to be 0001h
13h WORD segment of EMS physical page frame
15h WORD ??? seems always to be zero
17h 4 WORDs EMS partial page mapping information???
SeeAlso: #0861,#0862,#0865,#0869

Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
Offset Size Description (Table 0865)
00h DWORD pointer to array of disk buffer hash chain heads (see #0866)
04h WORD number of disk buffer hash chains (referred to as NDBCH below)
06h DWORD pointer to lookahead buffer, zero if not present
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
0Ch BYTE 01h, possibly to distinguish from pre-UR 25066 format
0Dh WORD ??? EMS segment for BUFFERS (only with /XD)
0Fh WORD ??? EMS physical page number of EMS seg above (only with /XD)
11h WORD ??? EMS segment for ??? (only with /XD)
13h WORD ??? EMS physical page number of above (only with /XD)
15h BYTE ??? number of EMS page frames present (only with /XD)
16h WORD segment of one-sector workspace buffer allocated in main memory
if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
into EMS
18h WORD EMS handle for buffers, zero if not in EMS
1Ah WORD EMS physical page number used for buffers (usually 255)
1Ch WORD ??? appears always to be 0001h
1Eh WORD segment of EMS physical page frame
20h WORD ??? appears always to be zero
22h BYTE 00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
SeeAlso: #0861,#0862,#0864,#0869

Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
Offset Size Description (Table 0866)
00h WORD EMS logical page number in which chain is resident, -1 if not
in EMS
02h DWORD pointer to least recently used buffer header. All buffers on
this chain are in the same segment.
06h BYTE number of dirty buffers on this chain
07h BYTE reserved (00h)
Notes: buffered disk sectors are assigned to chain N where N is the sector's
address modulo NDBCH, 0 <= N <= NDBCH-1
each chain resides completely within one EMS page
this structure is in main memory even if buffers are in EMS

Format of DOS 4.0-6.0 disk buffer:
Offset Size Description (Table 0867)
00h WORD forward ptr, offset only, to next least recently used buffer
02h WORD backward pointer, offset only
04h BYTE drive (0=A,1=B, etc) if bit 7 clear
SFT index if bit 7 set
FFh if not in use
05h BYTE buffer flags (see #0868)
06h DWORD logical sector number (local buffers only)
0Ah BYTE number of copies to write
for FAT sectors, same as number of FATs
for data and directory sectors, usually 1
0Bh WORD offset in sectors between copies to write for FAT sectors
0Dh DWORD pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
11h WORD size of data in buffer if remote buffer (see flags above)
13h BYTE reserved (padding)
14h buffered data
Note: for DOS 4.x, all buffered sectors which have the same hash value
(computed as the sum of high and low words of the logical sector
number divided by the number of disk buffer chains) are on the same
doubly-linked circular chain; for DOS 5+, only a single circular
chain exists.
the links consist of offset addresses only, the segment being the same
for all buffers in the chain.
SeeAlso: #0861,#0862,#0864

Bitfields for DOS 4.0-6.0 disk buffer flags:
Bit(s) Description (Table 0868)
7 remote buffer
6 buffer dirty
5 buffer has been referenced (reserved in DOS 5+)
4 search data buffer (only valid if remote buffer)
3 sector in data area
2 sector in a directory, either root or subdirectory
1 sector in FAT
0 reserved
SeeAlso: #0863

Format of DOS 5.0-6.0 disk buffer info:
Offset Size Description (Table 0869)
00h DWORD pointer to least-recently-used buffer header (may be in HMA)
(see #0867)
04h WORD number of dirty disk buffers
06h DWORD pointer to lookahead buffer, zero if not present
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
0Ch BYTE buffer location
00h base memory, no workspace buffer
01h HMA, workspace buffer in base memory
0Dh DWORD pointer to one-segment workspace buffer in base memory
11h 3 BYTEs unused
14h WORD ???
16h BYTE flag: INT 24 fail while making an I/O status call
17h BYTE temp storage for user memory allocation strategy during EXEC
18h BYTE counter: number of INT 21 calls for which A20 is off
19h BYTE bit flags
bit 0: ???
bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
WINA20.SYS when MS Windows 3.0 starts)
bit 2: in EXEC state (INT 21/AX=4B05h)
1Ah WORD offset of unpack code start (used only during INT 21/AX=4B05h)
1Ch BYTE bit 0 set iff UMB MCB chain linked to normal MCB chain
1Dh WORD minimum paragraphs of memory required by program being EXECed
1Fh WORD segment of first MCB in upper memory blocks or FFFFh if DOS
memory chain in base 640K only (first UMB MCB usually at
9FFFh, locking out video memory with a DOS-owned memory
block)
the MCB this word points at contains a valid link into high
memory even if it is marked with a 'Z' indicating the last
memory block
21h WORD paragraph from which to start scanning during memory allocation
SeeAlso: #0864,#0865

(Table 0870)
Call IFS utility function entry point with:
AH = 20h miscellaneous functions
AL = 00h get date
Return: CX = year
DH = month
DL = day
AL = 01h get process ID and computer ID
Return: BX = current PSP segment
DX = active network machine number
AL = 05h get file system info
ES:DI -> 16-byte info buffer
Return: buffer filled
Offset Size Description
00h 2 BYTEs unused
02h WORD number of SFTs (actually counts only
the first two file table arrays)
04h WORD number of FCB table entries
06h WORD number of proctected FCBs
08h 6 BYTEs unused
0Eh WORD largest sector size supported
AL = 06h get machine name
ES:DI -> 18-byte buffer for name
Return: buffer filled with name starting at offset 02h
AL = 08h get sharing retry count
Return: BX = sharing retry count
AL = other
Return: CF set
AH = 21h get redirection state
BH = type (03h disk, 04h printer)
Return: BH = state (00h off, 01h on)
AH = 22h ??? some sort of time calculation
AL = 00h ???
nonzero ???
AH = 23h ??? some sort of time calculation
AH = 24h compare filenames
DS:SI -> first ASCIZ filename
ES:DI -> second ASCIZ filename
Return: ZF set if files are same ignoring case and / vs \
AH = 25h normalize filename
DS:SI -> ASCIZ filename
ES:DI -> buffer for result
Return: filename uppercased, forward slashes changed to backslashes
AH = 26h get DOS stack
Return: DS:SI -> top of stack
CX = size of stack in bytes
AH = 27h increment InDOS flag
AH = 28h decrement InDOS flag
Note: IFS drivers which do not wish to implement functions 20h or 24h-28h may
pass them on to the default handler pointed at by [LoL+37h]
SeeAlso: #0871,#0872

Format of IFS driver list:
Offset Size Description (Table 0871)
00h DWORD pointer to next driver header
04h 8 BYTEs IFS driver name (blank padded), as used by FILESYS command
0Ch 4 BYTEs ???
10h DWORD pointer to IFS utility function entry point (see #0870)
call with ES:BX -> IFS request (see #0872)
14h WORD offset in header's segment of driver entry point
???
SeeAlso: #0870,#0872

Format of IFS request block:
Offset Size Description (Table 0872)
00h WORD total size in bytes of request
02h BYTE class of request
02h ???
03h redirection
04h ???
05h file access
06h convert error code to string
07h ???
03h WORD returned DOS error code
05h BYTE IFS driver exit status
00h success
01h ???
02h ???
03h ???
04h ???
FFh internal failure
06h 16 BYTEs ???
---request class 02h---
16h BYTE function code
04h ???
17h BYTE unused???
18h DWORD pointer to ???
1Ch DWORD pointer to ???
20h 2 BYTEs ???
---request class 03h---
16h BYTE function code
17h BYTE ???
18h DWORD pointer to ???
1Ch DWORD pointer to ???
22h WORD returned ???
24h WORD returned ???
26h WORD returned ???
28h BYTE returned ???
29h BYTE unused???
---request class 04h---
16h DWORD pointer to ???
1Ah DWORD pointer to ???
---request class 05h---
16h BYTE function code
01h flush disk buffers
02h get disk space
03h MKDIR
04h RMDIR
05h CHDIR
06h delete file
07h rename file
08h search directory
09h file open/create
0Ah LSEEK
0Bh read from file
0Ch write to file
0Dh lock region of file
0Eh commit/close file
0Fh get/set file attributes
10h printer control
11h ???
12h process termination
13h ???
---class 05h function 01h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h BYTE ???
27h BYTE ???
---class 05h function 02h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h WORD returned total clusters
28h WORD returned sectors per cluster
2Ah WORD returned bytes per sector
2Ch WORD returned available clusters
2Eh BYTE returned ???
2Fh BYTE ???
---class 05h functions 03h,04h,05h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h DWORD pointer to directory name
---class 05h function 06h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h WORD attribute mask
28h DWORD pointer to filename
---class 05h function 07h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h WORD attribute mask
28h DWORD pointer to source filespec
2Ch DWORD pointer to destination filespec
---class 05h function 08h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h BYTE 00h FINDFIRST
01h FINDNEXT
28h DWORD pointer to FindFirst search data + 01h if FINDNEXT
2Ch WORD search attribute if FINDFIRST
2Eh DWORD pointer to filespec if FINDFIRST
---class 05h function 09h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h WORD ??? \ together, specify open vs. create, whether or
28h WORD ??? / not to truncate
2Ah 4 BYTEs ???
2Eh DWORD pointer to filename
32h 4 BYTEs ???
36h WORD file attributes on call
returned ???
38h WORD returned ???
---class 05h function 0Ah---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h BYTE seek type (02h = from end)
28h DWORD offset on call
returned new absolute position
---class 05h functions 0Bh,0Ch---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
28h WORD number of bytes to transfer
returned bytes actually transferred
2Ah DWORD transfer address
---class 05h function 0Dh---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h BYTE file handle???
27h BYTE unused???
28h WORD ???
2Ah WORD ???
2Ch WORD ???
2Eh WORD ???
---class 05h function 0Eh---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h BYTE 00h commit file
01h close file
27h BYTE unused???
---class 05h function 0Fh---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h 4 BYTEs ???
26h BYTE 02h GET attributes
03h PUT attributes
27h BYTE unused???
28h 12 BYTEs ???
34h WORD search attributes???
36h DWORD pointer to filename
3Ah WORD (GET) returned ???
3Ch WORD (GET) returned ???
3Eh WORD (GET) returned ???
40h WORD (GET) returned ???
42h WORD (PUT) new attributes
(GET) returned attributes
---class 05h function 10h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h WORD ???
28h DWORD pointer to ???
2Ch WORD ???
2Eh BYTE ???
2Fh BYTE subfunction
01h get printer setup
03h ???
04h ???
05h ???
06h ???
07h ???
21h set printer setup
---class 05h function 11h---
17h 7 BYTEs ???
1Eh DWORD pointer to ???
22h DWORD pointer to IFS open file structure (see #0873)
26h BYTE subfunction
27h BYTE unused???
28h WORD ???
2Ah WORD ???
2Ch WORD ???
2Eh BYTE ???
2Fh BYTE ???
---class 05h function 12h---
17h 15 BYTEs unused???
26h WORD PSP segment
28h BYTE type of process termination
29h BYTE unused???
---class 05h function 13h---
17h 15 BYTEs unused???
26h WORD PSP segment
---request class 06h---
16h DWORD returned pointer to string corresponding to error code at 03h
1Ah BYTE returned ???
1Bh BYTE unused
---request class 07h---
16h DWORD pointer to IFS open file structure (see #0873)
1Ah BYTE ???
1Bh BYTE unused???
SeeAlso: #0871,#0870,#0873

Format of IFS open file structure:
Offset Size Description (Table 0873)
00h WORD ???
02h WORD device info word
04h WORD file open mode
06h WORD ???
08h WORD file attributes
0Ah WORD owner's network machine number
0Ch WORD owner's PSP segment
0Eh DWORD file size
12h DWORD current offset in file
16h WORD file time
18h WORD file date
1Ah 11 BYTEs filename in FCB format
25h WORD ???
27h WORD hash value of SFT address
(low word of linear address + segment&F000h)
29h 3 WORDs network info from SFT
2Fh WORD ???

Format of one item in DOS 4+ list of special program names:
Offset Size Description (Table 0874)
00h BYTE length of name (00h = end of list)
01h N BYTEs name in format name.ext
N 2 BYTEs DOS version to return for program (major,minor)
(see AH=30h,INT 2F/AX=122Fh)
---DOS 4 only---
N+2 BYTE number of times to return fake version number (FFh = always)
Note: if the name of the executable for the program making the DOS "get
version" call matches one of the names in this list, DOS returns the
specified version rather than the true version number
--------v-215252-----------------------------
INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
AX = 5252h
Return: BX = FFEEh if resident
SeeAlso: AX=4BFFh"Cascade",AX=58CCh
--------D-2153-------------------------------
INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
AH = 53h
DS:SI -> BIOS Parameter Block (see #0875)
ES:BP -> buffer for Drive Parameter Block (see #0620 at AH=32h)
Return: ES:BP buffer filled
Notes: for DOS 3+, the cluster at which to start searching is set to 0000h
and the number of free clusters is set to FFFFh (unknown)
if the number of sectors per cluster is set to zero, MS-DOS will hang
at startup because it computes the internally-used shift count by
shifting this value right until the carry flag is set; since this
will never happen when the field is zero, MS-DOS hangs


Format of BIOS Parameter Block:
Offset Size Description (Table 0875)
00h WORD number of bytes per sector
02h BYTE number of sectors per cluster
03h WORD number of reserved sectors at start of disk
05h BYTE number of FATs
06h WORD number of entries in root directory
08h WORD total number of sectors
for DOS 4+, set to zero if partition >32M, then set DWORD at
15h to actual number of sectors
0Ah BYTE media ID byte (see #0581)
0Bh WORD number of sectors per FAT
---DOS 2.13---
0Dh WORD number of sectors per track
0Fh WORD number of heads
11h WORD number of hidden sectors
---DOS 3+---
0Dh WORD number of sectors per track
0Fh WORD number of heads
11h DWORD number of hidden sectors
15h 11 BYTEs reserved
---DOS 4+ ---
15h DWORD total number of sectors if word at 08h contains zero
19h 6 BYTEs ???
1Fh WORD number of cylinders
21h BYTE device type
22h WORD device attributes (removable or not, etc)
---DR-DOS 5+ ---
15h DWORD total number of sectors if word at 08h contains zero
19h 6 BYTEs reserved
---European MS-DOS 4.00---
15h DWORD total number of sectors if word at 08h contains zero
(however, this DOS does not actually implement >32M partitions)
SeeAlso: #0620
--------D-2154-------------------------------
INT 21 - DOS 2+ - GET VERIFY FLAG
AH = 54h
Return: AL = verify flag
00h off
01h on (all disk writes verified after writing)
SeeAlso: AH=2Eh
--------D-2155-------------------------------
INT 21 - DOS 2+ internal - CREATE CHILD PSP
AH = 55h
DX = segment at which to create new PSP
SI = (DOS 3+) value to place in memory size field at DX:[0002h]
Return: CF clear if successful
Notes: creates a "child" PSP rather than making an exact copy of the current
PSP; the new PSP's parent pointer is set to the current PSP and the
reference count for each inherited file is incremented
(DOS 2+) sets current PSP to DX
(DOS 3+) marks "no inherit" file handles as closed in child PSP
SeeAlso: AH=26h,AH=50h
--------D-2156-------------------------------
INT 21 - DOS 2+ - "RENAME" - RENAME FILE
AH = 56h
DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
ES:DI -> ASCIZ new filename (no wildcards)
CL = attribute mask (server call only, see below)
Return: CF clear if successful
CF set on error
AX = error code (02h,03h,05h,11h) (see #0885)
Notes: allows move between directories on same logical volume
this function does not set the archive attribute
(see #0643 at AX=4301h), which results in incremental backups not
backing up the file under its new name
open files should not be renamed
(DOS 3+) allows renaming of directories
(DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
error 12h (no more files) is returned on success, and both source and
destination specs must be canonical (as returned by AH=60h).
Wildcards in the destination are replaced by the corresponding char
of each source file being renamed. Under DOS 3.x, the call will fail
if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
the call will fail if any wildcards are used. When invoked via
AX=5D00h, only those files matching the attribute mask in CL are
renamed.
under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
and the new-name pointer is in ES:EDI (DS must equal ES)
(DOS 2.x only) this function renames file by creating a new directory
entry with the new name,then marking the old entry deleted
BUG: under DR-DOS 3.41, this function will generate a new directory entry
with the new name (including any wildcards) which can only be removed
with a sector editor when invoked via AX=5D00h
SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h
--------D-215700-----------------------------
INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
AX = 5700h
BX = file handle
Return: CF clear if successful
CX = file's time (see #0876)
DX = file's date (see #0877)
CF set on error
AX = error code (01h,06h) (see #0885)
Note: under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
character devices; MS-DOS returns date and time of opening
SeeAlso: AX=5701h

Bitfields for file time:
Bit(s) Description (Table 0876)
15-11 hours (0-23)
10-5 minutes
4-0 seconds/2

Bitfields for file date:
Bit(s) Description (Table 0877)
15-9 year - 1980
8-5 month
4-0 day
--------D-215701-----------------------------
INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
AX = 5701h
BX = file handle
CX = new time (see #0876)
DX = new date (see #0877)
Return: CF clear if successful
CF set on error
AX = error code (01h,06h) (see #0885)
SeeAlso: AX=5700h
--------D-215702-----------------------------
INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
AX = 5702h
BX = file handle
CX = size of result buffer or 0000h
DS:SI -> EAP list (see #0878)
ES:DI -> buffer for returned EAV list (see #0881)
Return: CF clear if successful
CX = size of returned data
CF set on error
AX = error code (see #0885)
Desc: get the current value of one or more extended attributes
Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
returned, only the amount of data which is available
the default DOS 4 behavior is to return a single word of 0000h (no
structures) in the result buffer if CX>=0002h on entry
SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh

Format of EAP (extended attribute properties) list:
Offset Size Description (Table 0878)
00h WORD number of EAP structures following
02h var array of EAP structures (see #0879)
SeeAlso: #0881

Format of EAP (extended attribute property) structure:
Offset Size Description (Table 0879)
00h BYTE attribute type
01h boolean (either 00h or 01h)
02h number (BYTE, WORD, or DWORD)
03h string
04h date stamp
05h time stamp
01h WORD EAP flags (see #0880)
03h BYTE size of reference string (name)
04h N BYTEs reference string

Bitfields for EAP flags:
Bit(s) Description (Table 0880)
12 unchangeable
13 ignore
14 unchangeable
15 used by COMMAND.COM for code page, but not understood by ATTRIB

Format of EAV (extended attribute value) list:
Offset Size Description (Table 0881)
00h WORD number of EAV structures following
02h var array of Extended Attribute Value structures (see #0882)
SeeAlso: #0878

Format of Extended Attribute Value structures:
Offset Size Description (Table 0882)
00h 4 BYTEs ???
04h BYTE size of reference string
05h WORD size of value
07h var reference string
var value
--------O-215702-----------------------------
INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
AX = 5702h
BX = file handle
CX = size of buffer for information
DX = level of information
ES:DI -> buffer for information
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
--------O-215702BXFFFF-----------------------
INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
AX = 5702h
BX = FFFFh
CX = size of buffer for information
DX = level of information (0002h)
DS:SI -> filename
ES:DI -> buffer for FAPI path information (see #0883)
Return: CF clear if successful
AL = 00h
CF set on error
AX = error code
SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh

Format of FAPI path information:
Offset Size Description (Table 0883)
00h 22 BYTEs ???
16h DWORD extended attribute size (none present if less than 5)
--------D-215703-----------------------------
INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
AX = 5703h
BX = file handle
CX = size of result buffer or 0000h
ES:DI -> result buffer
Return: CF clear if successful
CX = size of returned data
CF set on error
AX = error code (see #0885)
ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
Desc: get a list of the extended attributes which are defined for the
specified file
Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
returned, only the amount of data which is available
the default DOS 4 behavior is to return a trivial EAP list consisting
of the single word 0000h (no EAP structures) if CX>=0002h on entry
SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
--------O-215703-----------------------------
INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
AX = 5703h
BX = file handle
CX = size of information buffer
DX = level of information
ES:DI -> information buffer
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
--------O-215703BXFFFF-----------------------
INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
AX = 5703h
BX = FFFFh
CX = size of information buffer
DX = level of information
DS:SI -> filename
ES:DI -> information buffer
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
--------D-215704-----------------------------
INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
AX = 5704h
BX = file handle
ES:DI -> EAV list (see #0881)
Return: CF clear if successful
CF set on error
AX = error code (see #0885)
Note: the default DOS 4 behavior is to do nothing and return successfully
SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
----------215757BX5757-----------------------
INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
AX = 5757h
BX = 5757h
Return: AX = 0000h if installed
BX = ???
DX = ???
DS:SI -> list of 27 DWORD entry point addresses
Program: IBM Genie is a set of utility TSRs by Helix Software
Note: other functions possible if BX <> 5757h, but details not yet available
----------215758-----------------------------
INT 21 U - Headroom - API
AX = 5758h
BL = function
00h ???
01h get Headroom location
Return: CF clear if installed
AX = PSP segment of Headroom TSR
BX = paragraphs of memory used by Headroom
CF set if not (normal DOS return)
Note: this function is also used as an installation check
02h get INT 21 handler
Return: CF clear
ES:BX -> Headroom's INT 21 handler
Note: also sets unknown flag
03h launch application???
DS:SI -> 233-byte application record
Return: ???
04h ???
???
Return: CF clear
05h get swap directory
Return: CF clear
DX:AX -> ASCIZ swap directory name
06h ???
DX = ???
Return: CF clear
07h ???
08h ???
09h get current application
Return: BX = application number
0Ah ???
DX = application number
DS:SI = ???
Return: ???
0Bh ???
0Ch ???
DX = application number
???
Return: ???
0Dh ???
DX = application number
???
Return: ???
0Eh get ???
Return: CF clear
AX = ???
0Fh set ??? flag
10h clear ??? flag
11h find application by name
DS:SI -> ASCIZ application name
Return: CF clear
AX = application number or FFFFh if not loaded
12h ???
DX = application number
Return: CF clear
???
13h ???
Return: CF clear
14h ???
same as function 13h
15h set ???
DX = ???
16h get ???
Return: AX = ??? set by function 15h
17h get ???
Return: BX = ???
CX = ??? (may be pointer in BX:CX)
18h BUG: branches incorrectly due to fencepost error
Program: Headroom is a TSR/task switcher by Helix Software
SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
--------D-2158-------------------------------
INT 21 - DOS 2.11+ - GET OR SET MEMORY ALLOCATION STRATEGY
AH = 58h
AL = subfunction
00h get allocation strategy
Return: AX = current strategy (see #0884)
01h set allocation strategy
BL = new allocation strategy (see #0884)
BH = 00h (DOS 5+)
Return: CF clear if successful
CF set on error
AX = error code (01h) (see #0885)
Notes: the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
2 or greater means last fit
the Get subfunction returns the last value set
setting an allocation strategy involving high memory does not
automatically link in the UMB memory chain; this must be done
explicitly with AX=5803h in order to actually allocate high memory
a program which changes the allocation strategy should restore it
before terminating
Toshiba MS-DOS v2.11 supports subfunctions 00h and 01h, as does the
TI Professional MS-DOS v2.13
DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh

(Table 0884)
Values for DOS memory allocation strategy:
00h low memory first fit
01h low memory best fit
02h low memory last fit
---DOS 5+ ---
40h high memory first fit
41h high memory best fit
42h high memory last fit
80h first fit, try high then low memory
81h best fit, try high then low memory
82h last fit, try high then low memory
--------D-2158-------------------------------
INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
AH = 58h
AL = subfunction
02h get UMB link state
Return: AL = current link state
00h UMBs not part of DOS memory chain
01h UMBs in DOS memory chain
03h set UMB link state
BX = new link state
0000h remove UMBs from DOS memory chain
0001h add UMBs to DOS memory chain
Return: CF clear if successful
CF set on error
AX = error code (01h) (see #0885)
Note: a program which changes the UMB link state should restore it before
terminating
--------v-2158CC-----------------------------
INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
AX = 58CCh
Return: CF clear if resident
SeeAlso: AX=5252h,AX=58DDh,AX=6969h
--------v-2158DD-----------------------------
INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
AX = 58DDh
Return: CX = code segment of virus
ES:BX = old INT 21h vector
SeeAlso: AX=5252h,AX=58CCh,AX=6969h
--------D-2159--BX0000-----------------------
INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
AH = 59h
BX = 0000h
Return: AX = extended error code (see #0885)
BH = error class (see #0887)
BL = recommended action (see #0888)
CH = error locus (see #0889)
ES:DI may be pointer (see #0886, error code list below)
CL, DX, SI, BP, and DS destroyed
Notes: functions available under DOS 2.x map the true DOS 3+ error code into
one supported under DOS 2.x
you should call this function to retrieve the true error code when an
FCB or DOS 2.x call returns an error
under DR-DOS 5.0, this function does not use any of the DOS-internal
stacks and may thus be called at any time
SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh

(Table 0885)
Values for DOS extended error code:
00h (0) no error
01h (1) function number invalid
02h (2) file not found
03h (3) path not found
04h (4) too many open files (no handles available)
05h (5) access denied
06h (6) invalid handle
07h (7) memory control block destroyed
08h (8) insufficient memory
09h (9) memory block address invalid
0Ah (10) environment invalid (usually >32K in length)
0Bh (11) format invalid
0Ch (12) access code invalid
0Dh (13) data invalid
0Eh (14) reserved
0Fh (15) invalid drive
10h (16) attempted to remove current directory
11h (17) not same device
12h (18) no more files
---DOS 3+---
13h (19) disk write-protected
14h (20) unknown unit
15h (21) drive not ready
16h (22) unknown command
17h (23) data error (CRC)
18h (24) bad request structure length
19h (25) seek error
1Ah (26) unknown media type (non-DOS disk)
1Bh (27) sector not found
1Ch (28) printer out of paper
1Dh (29) write fault
1Eh (30) read fault
1Fh (31) general failure
20h (32) sharing violation
21h (33) lock violation
22h (34) disk change invalid (ES:DI -> media ID structure)(see #0886)
23h (35) FCB unavailable
24h (36) sharing buffer overflow
25h (37) (DOS 4+) code page mismatch
26h (38) (DOS 4+) cannot complete file operation (out of input)
27h (39) (DOS 4+) insufficient disk space
28h-31h reserved
32h (50) network request not supported
33h (51) remote computer not listening
34h (52) duplicate name on network
35h (53) network name not found
36h (54) network busy
37h (55) network device no longer exists
38h (56) network BIOS command limit exceeded
39h (57) network adapter hardware error
3Ah (58) incorrect response from network
3Bh (59) unexpected network error
3Ch (60) incompatible remote adapter
3Dh (61) print queue full
3Eh (62) queue not full
3Fh (63) not enough space to print file
40h (64) network name was deleted
41h (65) network: Access denied
42h (66) network device type incorrect
43h (67) network name not found
44h (68) network name limit exceeded
45h (69) network BIOS session limit exceeded
46h (70) temporarily paused
47h (71) network request not accepted
48h (72) network print/disk redirection paused
49h (73) network software not installed
(LANtastic) invalid network version
4Ah (74) unexpected adapter close
(LANtastic) account expired
4Bh (75) (LANtastic) password expired
4Ch (76) (LANtastic) login attempt invalid at this time
4Dh (77) (LANtastic v3+) disk limit exceeded on network node
4Eh (78) (LANtastic v3+) not logged in to network node
4Fh (79) reserved
50h (80) file exists
51h (81) reserved
52h (82) cannot make directory
53h (83) fail on INT 24h
54h (84) (DOS 3.3+) too many redirections
55h (85) (DOS 3.3+) duplicate redirection
56h (86) (DOS 3.3+) invalid password
57h (87) (DOS 3.3+) invalid parameter
58h (88) (DOS 3.3+) network write fault
59h (89) (DOS 4+) function not supported on network
5Ah (90) (DOS 4+) required system component not installed
64h (100) (MSCDEX) unknown error
65h (101) (MSCDEX) not ready
66h (102) (MSCDEX) EMS memory no longer valid
67h (103) (MSCDEX) not High Sierra or ISO-9660 format
68h (104) (MSCDEX) door open

Format of media ID structure:
Offset Size Description (Table 0886)
00h 12 BYTEs ASCIZ volume label of required disk
0Ch DWORD serial number (DOS 4+)

(Table 0887)
Values for DOS Error Class:
01h out of resource (storage space or I/O channels)
02h temporary situation (file or record lock)
03h authorization (denied access)
04h internal (system software bug)
05h hardware failure
06h system failure (configuration file missing or incorrect)
07h application program error
08h not found
09h bad format
0Ah locked
0Bh media error
0Ch already exists
0Dh unknown

(Table 0888)
Values for DOS Suggested Action:
01h retry
02h delayed retry
03h prompt user to reenter input
04h abort after cleanup
05h immediate abort
06h ignore
07h retry after user intervention

(Table 0889)
Values for DOS Error Locus:
01h unknown or not appropriate
02h block device (disk error)
03h network related
04h serial device (timeout)
05h memory related
--------D-2159--BX0001-----------------------
INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
AH = 59h
BX = 0001h
Return: ES:DI -> hard error information packet (see #0890) for most recent
hard (critical) error
SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24

Format of European MS-DOS 4.0 hard error information packet:
Offset Size Description (Table 0890)
00h WORD contents of AX at system entry
02h WORD Process ID which encountered error
04h WORD contents of AX at time of error
06h BYTE error type
00h physical I/O error
01h disk change request
02h file sharing violation
03h FCB problem
04h file locking violation
05h bad FAT
06h network detected error
07h BYTE INT 24 error code
08h WORD extended error code (see #0885)
0Ah DWORD pointer to associated device
--------D-215A-------------------------------
INT 21 - DOS 3+ - CREATE TEMPORARY FILE
AH = 5Ah
CX = file attribute (see #0643 at AX=4301h)
DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
generated filename
Return: CF clear if successful
AX = file handle opened for read/write in compatibility mode
DS:DX pathname extended with generated name for temporary file
CF set on error
AX = error code (03h,04h,05h) (see #0885)
Desc: creates a file with a unique name which must be explicitly deleted
BUGS: COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
wraps around to the end of the segment
MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
hang the system if the specified path is the root directory and the
root directory is full (no free directory entries)
Note: under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
SeeAlso: AH=3Ch,AH=5Bh
--------D-215B-------------------------------
INT 21 - DOS 3+ - CREATE NEW FILE
AH = 5Bh
CX = file attribute (see #0643 at AX=4301h)
DS:DX -> ASCIZ filename
Return: CF clear if successful
AX = file handle opened for read/write in compatibility mode
CF set on error
AX = error code (03h,04h,05h,50h) (see #0885)
Notes: unlike AH=3Ch, this function will fail if the specified file exists
rather than truncating it; this permits its use in creating semaphore
files because it is an atomic "test and set" operation
under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
SeeAlso: AH=3Ch,AH=5Ah
--------D-215C-------------------------------
INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
AH = 5Ch
AL = subfunction
00h lock region of file
01h unlock region of file
BX = file handle
CX:DX = start offset of region within file
SI:DI = length of region in bytes
Return: CF clear if successful
CF set on error
AX = error code (01h,06h,21h,24h) (see #0885)
Notes: error returned unless SHARE or network installed
an unlock call must specify the same region as some prior lock call
locked regions become entirely inaccessible to other processes
duplicate handles created with AH=45h or AH=46h inherit locks, but
handles inherited by child processes (see AH=4Bh) do not
under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
inherit flag and then starts a child, any locks set by the parent
are ignored, and the child will only get an error if it tries to
lock an area previously locked by the parent process
SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
--------D-215D00-----------------------------
INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
AX = 5D00h
DS:DX -> DOS parameter list (see #0891)
DPL contains all register values for a call to INT 21h
Return: as appropriate for function being called
Notes: does not check AH. Out of range values will crash the system
executes using specified computer ID and process ID
sharing delay loops skipped
a special sharing mode is enabled to handle FCBs opened across network
wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
under DR-DOS 5.0-6.0, the call returns error code 03h due to improper
support for the server function call (see below)
an extra file attribute parameter is enabled for OPEN (AH=3Dh),
DELETE (AH=41h), and RENAME (AH=56h)
functions which take filenames require canonical names (as returned
by AH=60h); this is apparently to prevent multi-hop file forwarding
BUGS: the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
seemingly ignoring HPFS drives
DR-DOS 5.0-6.0 merely recursively call INT 21 after loading the
registers from the DPL, leading to problems for peer-to-peer
networks
SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h

Format of DOS parameter list:
Offset Size Description (Table 0891)
00h WORD AX
02h WORD BX
04h WORD CX
06h WORD DX
08h WORD SI
0Ah WORD DI
0Ch WORD DS
0Eh WORD ES
10h WORD reserved (0)
12h WORD computer ID (0 = current system)
14h WORD process ID (PSP segment on specified computer)
Note: under Windows Enhanced mode, the computer ID is normally the virtual
machine ID (see INT 2F/AX=1683h), though this can reportedly be
changed by setting UniqueDOSPSP= in SYSTEM.INI
--------D-215D01-----------------------------
INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
AX = 5D01h
DS:DX -> DOS parameter list (see #0891), only computer ID and
process ID fields used
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
Notes: flushes buffers and updates directory entries for each file which has
been written to; if remote file, calls INT 2F/AX=1107h
the computer ID and process ID are stored but ignored under DOS 3.3
not supported by DR-DOS 3.41 and 5.0; returns error code 01h
SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
--------D-215D02-----------------------------
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
AX = 5D02h
DS:DX -> DOS parameter list (see #0891), only fields DX, DS,
computer ID, and process ID used
DPL's DS:DX -> ASCIZ name of file to close
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
Notes: error unless SHARE is loaded (calls [SysFileTable-28h])
(see #0848 at AH=52h)
name must be canonical fully-qualified, such as returned by AH=60h
not supported by DR-DOS 3.41 and 5.0; returns error code 01h
not supported by Novell DOS 7
SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
--------D-215D03-----------------------------
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
AX = 5D03h
DS:DX -> DOS parameter list (see #0891), only computer ID used
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
Notes: error unless SHARE is loaded (calls [SysFileTable-30h])
(see #0848 at AH=52h)
not supported by DR-DOS 3.41 and 5.0; returns error code 01h
not supported by Novell DOS 7
SeeAlso: AX=5D02h,AX=5D04h
--------D-215D04-----------------------------
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
AX = 5D04h
DS:DX -> DOS parameter list (see #0891), only computer ID and
process ID fields used
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
Notes: error unless SHARE is loaded (calls [SysFileTable-2Ch])
(see #0848 at AH=52h)
not supported by DR-DOS 3.41 and 5.0; returns error code 01h
not supported by Novell DOS 7
SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
--------D-215D05-----------------------------
INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
AX = 5D05h
DS:DX -> DOS parameter list (see #0891)
DPL's BX = index of sharing record (see #0849 at AH=52h)
DPL's CX = index of SFT in sharing record's SFT list
Return: CF clear if successful
ES:DI -> ASCIZ filename
BX = network machine number of SFT's owner
CX = number of locks held by SFT's owner
CF set if either index out of range
AX = 0012h (no more files)
Notes: error unless SHARE is loaded (calls [SysFileTable-18h])
(see #0848 at AH=52h)
names are always canonical fully-qualified, such as returned by AH=60h
not supported by DR-DOS 3.41 and 5.0 and Novell DOS 7, but does not
return an error, instead destroying AX
SeeAlso: AH=5Ch,AH=60h
--------D-215D06-----------------------------
INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
AX = 5D06h
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
DS:SI -> nonreentrant data area (includes all three DOS stacks)
(critical error flag is first byte) (see #0892)
CX = size in bytes of area which must be swapped while in DOS
DX = size in bytes of area which must always be swapped
Notes: the Critical Error flag is used in conjunction with the InDOS flag
(see AH=34h) to determine when it is safe to enter DOS from a TSR
setting CritErr flag allows use of functions 50h/51h from INT 28h under
DOS 2.x by forcing use of correct stack
swapping the data area allows reentering DOS unless DOS is in a
critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
under DOS 4.0, AX=5D0Bh should be used instead of this function
SHARE and other DOS utilities consult the byte at offset 04h in the
DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
DR-DOS 3.41+ supports this function, but the SDA format beyond the
first 18h bytes is completely different from MS-DOS
SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h

Format of DOS 3.10-3.30 Swappable Data Area:
Offset Size Description (Table 0892)
-34 BYTE (DOS 3.10+) printer echo flag (00h off, FFh active)
-31 BYTE (DOS 3.30) current switch character
-28 BYTE (DOS 3.30) incremented on each INT 21/AX=5E01h call
-27 16 BYTEs (DOS 3.30) machine name set by INT 21/AX=5E01h
-11 5 WORDs zero-terminated list of offsets which need to be patched to
enable critical-section calls (see INT 2A/AH=80h)
-1 BYTE unused padding
---start of actual SDA---
00h BYTE critical error flag ("ErrorMode")
01h BYTE InDOS flag (count of active INT 21 calls)
02h BYTE drive on which current critical error occurred, or FFh
(DR-DOS sets to drive number during INT 24, 00h otherwise)
03h BYTE locus of last error
04h WORD extended error code of last error
06h BYTE suggested action for last error
07h BYTE class of last error
08h DWORD ES:DI pointer for last error
0Ch DWORD current DTA (Disk Transfer Address)
note: may point into SDA during the DOS EXEC function
(see AH=4Bh), so programs which swap the SDA must be
prepared to move the DTA to a private buffer if they
might be invoked during an EXEC
10h WORD current PSP
12h WORD stores SP across an INT 23
14h WORD return code from last process termination (zerod after reading
with AH=4Dh)
16h BYTE current drive
17h BYTE extended break flag
---remainder need only be swapped if in DOS---
18h WORD value of AX on call to INT 21
1Ah WORD PSP segment for sharing/network
1Ch WORD network machine number for sharing/network (0000h = us)
1Eh WORD first usable memory block found when allocating memory
20h WORD best usable memory block found when allocating memory
22h WORD last usable memory block found when allocating memory
24h WORD memory size in paragraphs (used only during initialization)
26h WORD last entry checked during directory search
28h BYTE flag: INT 24 returned Fail
29h BYTE flags: allowable INT 24 actions (passed to INT 24 in AH)
2Ah BYTE directory flag (00h directory, 01h file)
2Bh BYTE flag: FFh if Ctrl-Break termination, 00h otherwise
2Ch BYTE flag: allow embedded blanks in FCB
2Dh BYTE padding (unused)
2Eh BYTE day of month
2Fh BYTE month
30h WORD year - 1980
32h WORD number of days since 1-1-1980
34h BYTE day of week (0 = Sunday)
35h BYTE flag: console swapped during read from device
36h BYTE flag: safe to call INT 28 if nonzero
37h BYTE flag: if nonzero, INT 24 Abort turned into INT 24 Fail
(set only during process termination)
38h 26 BYTEs device driver request header (see #1382 at INT 2F/AX=0802h)
52h DWORD pointer to device driver entry point (used in calling driver)
56h 22 BYTEs device driver request header for I/O calls
6Ch 14 BYTEs device driver request header for disk status check
7Ah DWORD pointer to device I/O buffer???
7Eh WORD ???
80h WORD ???
82h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
83h BYTE padding (unused)
84h 3 BYTEs 24-bit user number (see AH=30h)
87h BYTE OEM number (see #0619 at AH=30h)
88h WORD offset to error code conversion table for INT 25/INT 26
8Ah 6 BYTEs CLOCK$ transfer record (see #0893)
90h BYTE device I/O buffer for single-byte I/O functions
91h BYTE padding??? (unused)
92h 128 BYTEs buffer for filename
112h 128 BYTEs buffer for filename
192h 21 BYTEs findfirst/findnext search data block (see #0839 at AH=4Eh)
1A7h 32 BYTEs directory entry for found file (see #0580 at AH=11h)
1C7h 81 BYTEs copy of current directory structure for drive being accessed
218h 11 BYTEs FCB-format filename for device name comparison
223h BYTE terminating NUL for above filename
224h 11 BYTEs wildcard destination specification for rename (FCB format)
22Fh BYTE terminating NUL for above spec
230h BYTE ???
231h WORD destination file/directory starting sector
233h 5 BYTEs ???
238h BYTE extended FCB file attribute
239h BYTE type of FCB (00h regular, FFh extended)
23Ah BYTE directory search attributes
23Bh BYTE file open/access mode
23Ch BYTE file found/delete flag
bit 0: file found
bit 4: file deleted
23Dh BYTE flag: device name found on rename, or file not found
23Eh BYTE splice flag (file name and directory name together)
23Fh BYTE flag indicating how DOS function was invoked
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
240h BYTE sector position within cluster
241h BYTE flag: translate sector/cluster (00h no, 01h yes)
242h BYTE flag: 00h if read, 01h if write
243h BYTE current working drive number
244h BYTE cluster factor
245h BYTE flag: cluster split mode
246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
247h BYTE canonicalized filename referred to existing file/dir if FFh
248h BYTE volume ID flag
249h BYTE type of process termination (00h-03h) (see AH=4Dh)
24Ah BYTE file create flag (00h = no, search only)
24Bh BYTE value with which to replace first byte of deleted file's name
(normally E5h, but 00h as described under INT 21/AH=13h)
24Ch DWORD pointer to Drive Parameter Block for critical error invocation
temp: used during process termination
250h DWORD pointer to stack frame containing user registers on INT 21
254h WORD stores SP across INT 24
256h DWORD pointer to DOS Drive Parameter Block for ???
25Ah WORD saving partial cluster number
25Ch WORD temp: sector of work current cluster
25Eh WORD high part of cluster number (only low byte referenced)
260h WORD ??? temp
262h BYTE Media ID byte returned by AH=1Bh,1Ch
263h BYTE padding (unused)
264h DWORD pointer to device header when filename is character device
268h DWORD pointer to current SFT
26Ch DWORD pointer to current directory structure for drive being accessed
270h DWORD pointer to caller's FCB
274h WORD number of SFT to which file being opened will refer
276h WORD temporary storage for file handle
278h DWORD pointer to a JFT entry in process handle table
(see #0603 at AH=26h)
27Ch WORD offset in DOS DS of first filename argument
27Eh WORD offset in DOS DS of second filename argument
280h WORD offset of last component in pathname or FFFFh
282h WORD offset of transfer address to add
284h WORD last relative cluster within file being accessed
286h WORD temp: absolute cluster number being accessed
288h WORD directory sector number
28Ah WORD ??? current cluster number
28Ch WORD current relative sector number within file
28Eh WORD current sector number
290h WORD current byte offset within sector
292h DWORD current offset in file
296h DWORD temp: file byte count
29Ah WORD temp: file byte count
29Ch WORD free file cluster entry
29Eh WORD last file cluster entry
2A0h WORD next file cluster number
2A2h DWORD number of bytes appended to file
2A6h DWORD pointer to current work disk buffer
2AAh DWORD pointer to working SFT
2AEh WORD used by INT 21 dispatcher to store caller's BX
2B0h WORD used by INT 21 dispatcher to store caller's DS
2B2h WORD temporary storage while saving/restoring caller's registers
2B4h DWORD pointer to prev call frame (offset 250h) if INT 21 reentered
also switched to for duration of INT 24
2B8h 21 BYTEs FindFirst search data for source file(s) of a rename operation
(see #0839 at AH=4Eh)
2CDh 32 BYTEs directory entry for file being renamed (see #0580 at AH=11h)
2EDh 331 BYTEs critical error stack
403h 35 BYTEs scratch SFT
438h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
5B8h 384 BYTEs character I/O stack (functions 01h through 0Ch)
---DOS 3.2,3.3x only---
738h BYTE device driver lookahead flag (usually printer) (see AH=64h)
739h BYTE volume change flag
73Ah BYTE flag: virtual open
73Bh BYTE ???
SeeAlso: #0895

Format of CLOCK$ transfer record:
Offset Size Description (Table 0893)
00h WORD number of days since 1-Jan-1980
02h BYTE minutes
03h BYTE hours
04h BYTE hundredths of second
05h BYTE seconds
--------D-215D07-----------------------------
INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
AX = 5D07h
Return: DL = mode
00h redirected output is combined
01h redirected output in separate print jobs
SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
--------D-215D08-----------------------------
INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
AX = 5D08h
DL = mode
00h redirected output is combined
01h redirected output placed in separate jobs, start new print job
now
SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
--------D-215D09-----------------------------
INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
AX = 5D09h
Notes: forces redirected printer output to be printed, and starts a new print
job
this function is also supported by 10Net, which calls it Terminate All
Spool Jobs, and does not flush if in "combine" mode
SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
--------D-215D0A-----------------------------
INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
AX = 5D0Ah
DS:DX -> 11-word DOS parameter list (see #0891)
Return: nothing. next call to AH=59h will return values from fields AX,BX,CX,
DX,DI, and ES in corresponding registers
Notes: documented for DOS 5+, but undocumented in earlier versions
the MS-DOS Programmer's Reference incorrectly states that this call was
introduced in DOS 4, and fails to mention that the ERROR structure
passed to this function is a DOS parameter list.
BUGS: DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the
DPL; fortunately, MS-DOS ignores the DS field, allowing a generic
routine which sets both DS and ES fields to the same value
Novell DOS 7 does not save the pointer, which is always reported as
0000h:0000h by AH=59h
SeeAlso: AH=59h/BX=0000h
--------D-215D0B-----------------------------
INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
AX = 5D0Bh
Return: CF set on error
AX = error code (see #0885)
CF clear if successful
DS:SI -> swappable data area list (see #0894)
Notes: copying and restoring the swappable data areas allows DOS to be
reentered unless it is in a critical section delimited by calls to
INT 2A/AH=80h and INT 2A/AH=81h,82h
SHARE and other DOS utilities consult the byte at offset 04h in the
DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
call for finding the SDA (see #0892)
SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h

Format of DOS 4.x swappable data area list:
Offset Size Description (Table 0894)
00h WORD count of data areas
02h N BYTEs "count" copies of data area record
Offset Size Description
00h DWORD address
04h WORD length and type
bit 15 set if swap always, clear if swap in DOS
bits 14-0: length in bytes
SeeAlso: #0895

Format of DOS 4.0-6.0 swappable data area:
Offset Size Description (Table 0895)
-34 BYTE printer echo flag (00h off, FFh active)
-31 BYTE current switch character (ignored by DOS 5+)
-28 BYTE incremented on each INT 21/AX=5E01h call
-27 16 BYTEs machine name set by INT 21/AX=5E01h
-11 5 WORDs zero-terminated list of offsets which need to be patched to
enable critical-section calls (see INT 2A/AH=80h)
(all offsets are 0D0Ch, but this list is still present for
DOS 3.x compatibility)
-1 BYTE unused padding
---start of actual SDA---
00h BYTE critical error flag ("ErrorMode")
01h BYTE InDOS flag (count of active INT 21 calls)
02h BYTE drive on which current critical error occurred or FFh
03h BYTE locus of last error
04h WORD extended error code of last error
06h BYTE suggested action for last error
07h BYTE class of last error
08h DWORD ES:DI pointer for last error
0Ch DWORD current DTA (Disk Transfer Address)
note: may point into SDA during the DOS EXEC function
(see AH=4Bh), so programs which swap the SDA must be
prepared to move the DTA to a private buffer if they
might be invoked during an EXEC
10h WORD current PSP
12h WORD stores SP across an INT 23
14h WORD return code from last process termination (zerod after reading
with AH=4Dh)
16h BYTE current drive
17h BYTE extended break flag
18h BYTE flag: code page switching
19h BYTE flag: copy of previous byte in case of INT 24 Abort
---remainder need only be swapped if in DOS---
1Ah WORD value of AX on call to INT 21
1Ch WORD PSP segment for sharing/network
1Eh WORD network machine number for sharing/network (0000h = us)
20h WORD first usable memory block found when allocating memory
22h WORD best usable memory block found when allocating memory
24h WORD last usable memory block found when allocating memory
26h WORD memory size in paragraphs (used only during initialization)
28h WORD last entry checked during directory search
2Ah BYTE flag: nonzero if INT 24 Fail
2Bh BYTE flags: allowable INT 24 responses (passed to INT 24 in AH)
2Ch BYTE flag: do not set directory if nonzero
2Dh BYTE flag: program aborted by ^C
2Eh BYTE flag: allow embedded blanks in FCB
may also allow use of "*" wildcard in FCBs
2Fh BYTE padding (unused)
30h BYTE day of month
31h BYTE month
32h WORD year - 1980
34h WORD number of days since 1-1-1980
36h BYTE day of week (0 = Sunday)
37h BYTE flag: console swapped during read from device
38h BYTE flag: safe to call INT 28 if nonzero
39h BYTE flag: abort currently in progress, turn INT 24 Abort into Fail
3Ah 30 BYTEs device driver request header (see #1382 at INT 2F/AX=0802h) for
device calls
58h DWORD pointer to device driver entry point (used in calling driver)
5Ch 22 BYTEs device driver request header for I/O calls
72h 14 BYTEs device driver request header for disk status check
80h DWORD pointer to device I/O buffer
84h WORD ???
86h WORD ??? (0)
88h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
89h DWORD start offset of file region to lock/unlock
8Dh DWORD length of file region to lock/unlock
91h BYTE padding (unused)
92h 3 BYTEs 24-bit user number (see AH=30h)
95h BYTE OEM number (see #0619 at AH=30h)
96h 6 BYTEs CLOCK$ transfer record (see #0893 at AX=5D06h)
9Ch BYTE device I/O buffer for single-byte I/O functions
9Dh BYTE padding???
9Eh 128 BYTEs buffer for filename
11Eh 128 BYTEs buffer for filename
19Eh 21 BYTEs findfirst/findnext search data block (see #0839 at AH=4Eh)
1B3h 32 BYTEs directory entry for found file (see #0619 at AH=11h)
1D3h 88 BYTEs copy of current directory structure for drive being accessed
22Bh 11 BYTEs FCB-format filename for device name comparison
236h BYTE terminating NUL for above filename
237h 11 BYTEs wildcard destination specification for rename (FCB format)
242h BYTE terminating NUL for above filespec
243h BYTE ???
244h WORD ???
246h 5 BYTEs ???
24Bh BYTE extended FCB file attributes
24Ch BYTE type of FCB (00h regular, FFh extended)
24Dh BYTE directory search attributes
24Eh BYTE file open/access mode
24Fh BYTE ??? flag bits
reportedly 00h when deleting a file under MSDOS 5.0
250h BYTE flag: device name found on rename, or file not found
251h BYTE splice flag??? (file name and directory name together)
252h BYTE flag indicating how DOS function was invoked
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
253h BYTE sector position within cluster
254h BYTE ??? (flag: translate sector/cluster)
255h BYTE ??? (flag: 00h if read, 01h if write)
256h BYTE current working drive number
257h BYTE cluster factor
258h BYTE ???
259h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
25Ah BYTE canonicalized filename referred to existing file/dir if FFh
25Bh BYTE volume ID flag
25Ch BYTE type of process termination (00h-03h) (see AH=4Dh)
25Dh BYTE ???
25Eh BYTE ??? file create flag (00h = no, search only)
25Fh BYTE ??? (value for deleted file's first byte)
260h DWORD pointer to Drive Parameter Block for critical error invocation
264h DWORD pointer to stack frame containing user registers on INT 21
268h WORD stores SP across INT 24
26Ah DWORD pointer to DOS Drive Parameter Block for ???
26Eh WORD segment of disk buffer
270h WORD ??? (saving partial cluster number)
272h WORD ??? (temp: sector of work current cluster)
274h WORD ??? (high part of cluster number)
276h WORD ??? (temp)
278h BYTE Media ID byte returned by AH=1Bh,1Ch
279h BYTE ??? (doesn't seem to be referenced)
27Ah DWORD pointer to device header if filename is character device
27Eh DWORD pointer to current SFT
282h DWORD pointer to current directory structure for drive being accessed
286h DWORD pointer to caller's FCB
28Ah WORD SFT index to which file being opened will refer
28Ch WORD temporary storage for file handle
28Eh DWORD pointer to a JFT entry in process handle table
(see #0603 at AH=26h)
292h WORD offset in DOS DS of first filename argument
294h WORD offset in DOS DS of second filename argument
296h WORD ??? (offset of last component in pathname or FFFFh)
298h WORD offset of transfer address to add
29Ah WORD last relative cluster within file being accessed
29Ch WORD temp: absolute cluster number being accessed
29Eh WORD directory sector number
2A0h WORD ???
2A2h WORD ??? directory cluster number
2A4h DWORD current relative sector number within file
2A8h DWORD ??? (current sector number)
2ACh WORD ??? (current byte offset within sector)
2AEh DWORD current offset in file
2B2h WORD ???
2B4h WORD bytes in partial sector
2B6h WORD number of sectors
2B8h WORD ??? (free file cluster entry)
2BAh WORD ??? (last file cluster entry)
2BCh WORD ??? (next file cluster number)
2BEh DWORD number of bytes appended to file
2C2h DWORD pointer to current work disk buffer
2C6h DWORD pointer to working SFT
2CAh WORD used by INT 21 dispatcher to store caller's BX
2CCh WORD used by INT 21 dispatcher to store caller's DS
2CEh WORD temporary storage while saving/restoring caller's registers
2D0h DWORD pointer to prev call frame (offset 264h) if INT 21 reentered
also switched to for duration of INT 24
2D4h WORD open mode/action for INT 21/AX=6C00h
2D6h BYTE ??? (set to 00h by INT 21h dispatcher, 02h when a read is
performed, and 01h or 03h by INT 21/AX=6C00h)
2D7h WORD ??? apparently unused
2D9h DWORD stored ES:DI for AX=6C00h
2DDh WORD extended file open action code (see #0966 at AX=6C00h)
2DFh WORD extended file open attributes (see #0965 at AX=6C00h)
2E1h WORD extended file open file mode (see AX=6C00h)
2E3h DWORD pointer to filename to open (see AX=6C00h)
2E7h WORD ??? temp DX storage or 0000h or temp data buffer size from
disk buffer
2E9h WORD ???
2EBh BYTE ???
2ECh WORD stores DS during call to [List-of-Lists + 37h]
2EEh WORD ???
2F0h BYTE ???
2F1h WORD ??? bit flags
2F3h DWORD pointer to user-supplied filename
2F7h DWORD pointer to ???
2FBh WORD stores SS during call to [List-of-Lists + 37h]
2FDh WORD stores SP during call to [List-of-Lists + 37h]
2FFh BYTE flag, nonzero if stack switched in calling [List-of-Lists+37h]
300h 21 BYTEs FindFirst search data for source file(s) of a rename operation
(see #0839 at AH=4Eh)
315h 32 BYTEs directory entry for file being renamed (see #0580 at AH=11h)
335h 331 BYTEs critical error stack
480h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
600h 384 BYTEs character I/O stack (functions 01h through 0Ch)
780h BYTE device driver lookahead flag (usually printer) (see AH=64h)
781h BYTE volume change flag
782h BYTE flag: virtual open
783h BYTE ???
784h WORD ???
786h WORD ???
788h WORD ???
78Ah WORD ???
SeeAlso: #0892,#0894
--------D-215E00-----------------------------
INT 21 - DOS 3.1+ network - GET MACHINE NAME
AX = 5E00h
DS:DX -> 16-byte buffer for ASCIZ machine name
Return: CF clear if successful
CH = validity
00h name invalid
nonzero valid
CL = NetBIOS number for machine name
DS:DX buffer filled with blank-paded name
CF set on error
AX = error code (01h) (see #0885 at AH=59h)
Note: supported by OS/2 v1.3+ compatibility box, PC-NFS
SeeAlso: AX=5E01h
--------N-215E00-----------------------------
INT 21 - 10NET v5.0 - GET MACHINE NAME
AX = 5E00h
Return: CL = redirector's NetBIOS name number
ES:DI -> network node ID
SeeAlso: AX=5E01h"10NET"
--------D-215E01CH00-------------------------
INT 21 - DOS 3.1+ network - SET MACHINE NAME
AX = 5E01h
CH = 00h undefine name (make it invalid)
<> 0 define name
CL = name number
DS:DX -> 15-character blank-padded ASCIZ name
SeeAlso: AX=5E00h
--------N-215E01-----------------------------
INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
AX = 5E01h
CX = length of buffer
DS:DX -> buffer for 10Net configuration table (see #821)
SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h

Format of 10Net Configuration Table:
Offset Size Description (Table 0896)
00h 8 BYTEs user name
08h 15 BYTEs node ID
17h 3 BYTEs unique portion of Ethernet address
1Ah BYTE Who group number
1Bh WORD services mask (see #0898)
1Dh DWORD serial number
21h BYTE maximum concurrent users with same serial number allowed on net
22h BYTE chat mask (see #0899)
23h BYTE internal system bits (see #0900)
24h 9 BYTEs version number in format MM.mm.xxx
2Dh BYTE flag: 01h if machine is a PS/2
2Eh BYTE flag: 03h if 80386
2Fh BYTE spool termination mode: 01h concatenate, 02h truncate
(see AX=5D09h)
30h WORD autospool timeout in clock ticks
32h WORD monitor timeout in clock ticks
34h WORD unused
36h WORD chat timeout in clock ticks
38h WORD netBIOS session timeout in half-seconds
3Ah WORD datagram send timeout in seconds
3Ch WORD keyboard value for initiating chat mode
3Eh WORD Who timeout in clock ticks
40h BYTE flag: 01h if server should process rom NetBIOS Post return
41h BYTE flag: 01h if FCBs should be recycled
42h 3 BYTEs signature "DBG"
45h BYTE last interrupt (21h or 6Fh)
46h BYTE last INT 21 AH value
47h BYTE last INT 6F AH value
48h WORD last item posted
4Ah WORD last item free-posted
4Ch WORD last item handled by server
4Eh WORD last redirector send NCB
50h WORD last redirector receive NCB
52h 4 BYTEs signature "TABL"
56h WORD offset of datagram buffer table header (see #0897)
58h WORD offset of chat buffer table header (see #0897)
5Ah WORD offset of Raw buffer table header (see #0897)
5Ch WORD offset of Workstation buffer table header (see #0897)
5Eh WORD offset of server receive-any table header (see #0897)
60h WORD offset of Tiny buffer table header (see #0897)
62h WORD offset of zero-length buffer table (NCBs) (see #0897)
64h WORD offset of Rdr (Redirector Mount) table header (see #0897)
66h WORD offset of Ntab (Redirector Session) table header (see #0897)
68h WORD offset of FCB table header (see #0897)
6Ah WORD offset of user file handle table header (see #0897)
6Ch WORD offset of workstation printer RDR extension table header
6Eh WORD offset of server shared device table header (see #0897)
70h WORD offset of server connection table header (see #0897)
72h WORD offset of server login table header (see #0897)
74h WORD offset of server file table header (see #0897)
76h WORD offset of server shared file table header (see #0897)
78h WORD offset of server record lock table header (see #0897)
7Ah WORD offset of remote printer claim table header (see #0897)
7Ch WORD offset of remote printer device table header (see #0897)
7Eh WORD offset of print server mount table header (see #0897)
80h WORD offset of print server sessions table header (see #0897)
82h WORD offset of print server print job structure table header
84h WORD offset of print server pooled device table header (see #0897)
86h WORD size of workstation buffer
88h WORD size of server receive-any buffer
8Ah WORD size of server raw I/O buffer
8Ch 6 BYTEs reserved
92h DWORD pointer to profile pathname
96h BYTE datagram retry count
97h BYTE NetBIOS LAN adapter number
98h 6 BYTEs physical Ethernet address
9Eh BYTE NetBIOS server name number
9Fh BYTE NetBIOS redirector name number
A0h BYTE 10Net interrupt number
A1h BYTE flag: chat is loaded
A2h BYTE flag: INT 6F APIs permanently loaded
A3h BYTE flag: file security present
A4h WORD reserved
A6h BYTE fixed mount bitmask for drives A:-H:
A7h BYTE reserved
A8h WORD 10Net system flags (see #0901)
AAh BYTE monitor flags (see #0902)
ABh 5 BYTEs reserved
B0h WORD offset of monitor timer block
B2h WORD offset of server timer block
B4h WORD offset of chat timer block
B6h WORD timer chain
B8h 4 BYTEs signature "TALS"
BCh WORD number of 10Net sends
BEh WORD number of 10Net receives
C0h WORD number of no-buffer conditions
C2h WORD number of dropped posted messages
C4h WORD number of server NCB errors
C6h WORD number of redirector NCB errors
C8h WORD number of datagram send/receive errors
CAh WORD number of dropped Whos
CCh WORD number of dropped submits
CEh WORD number of session aborts
D0h BYTE number of NetBIOS interface-busy errors
D1h BYTE last NetBIOS bad post command
D2h BYTE last NetBIOS bad redirector command
D3h BYTE do send datagram send/receive error command
D4h DWORD -> DOS system parameter table
D8h WORD number of DOS physical drives
DAh WORD offset of DOS PSP field in DOS data segment
DCh WORD offset of in-DOS flag in DOS data segment
DEh WORD DOS data segment
E0h WORD offset of DOS SFT in DOS data segment
E2h WORD offset of number-of-physical-units field in DOS data segment
E4h WORD 10Net code segment
E6h WORD 10Net data segment
E8h WORD 10Net common server segment
EAh WORD 10Net file server segment
ECh WORD 10Net print server segment
EEh WORD 10Net remote printer segment
Note: documentation lists field at offset D0h as a WORD, but all following
offsets are as though it were a BYTE; if it is indeed a WORD, all
offsets after D0h must be increased by one byte

Format of 10Net Table Header:
Offset Size Description (Table 0897)
-16 4 BYTEs table identifier
-12 WORD peak number of tables allocated
-10 WORD number of tables currently in use
-8 WORD total number of tables
-6 WORD size of each table
-4 WORD offset of first allocated table
-2 WORD offset of first free table

Bitfields for 10NET services mask:
Bit(s) Description (Table 0898)
0 workstation
1 file server
2 print queue server
3 de-spool server

Bitfields for 10NET chat mask:
Bit(s) Description (Table 0899)
0 chat permitted
1 bell enabled
2 chat keyboard initiated
3 in INT 16 handler
4 in Get Input
5 display has timed out
6 chat is idle

Bitfields for 10NET internal system bits:
Bit(s) Description (Table 0900)
0 submit permitted
1 submit initiated
2 submit executing
3 internal client call/chat/spool/autospool
4 in spool termination
5 print permitted
6 waiting for keyboard input

Bitfields for 10NET System Flags:
Bit(s) Description (Table 0901)
0 in NetBIOS
1 processing INT 28
2 is server
3 in net user-DOS function
4 in DOS user-DOS function
5 in net for user non-DOS function
6 in server DOS function
7 in server non-DOS function
8 in terminate
10 in user on server request
13 in DOS for user on server
14 disable critical error handler

Bitfields for Monitor Flags:
Bit(s) Description (Table 0902)
0 waiting for monitor response
4 in monitor get-input routine
5 monitor display timeout
6 sensing for escape key
--------D-215E02-----------------------------
INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
AX = 5E02h
BX = redirection list index (see AX=5F02h)
CX = length of setup string
DS:SI -> setup string
Return: CF clear if successful
CF set on error
AX = error code (01h) (see #0885 at AH=59h)
Note: also supported by 10NET v5.0
SeeAlso: AX=5E03h,INT 2F/AX=111Fh
--------D-215E03-----------------------------
INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
AX = 5E03h
BX = redirection list index (see AX=5F02h)
ES:DI -> 64-byte buffer for setup string
Return: CF clear if successful
CX = length of setup string
ES:DI buffer filled
CF set on error
AX = error code (01h) (see #0885 at AH=59h)
Note: also supported by 10NET v5.0, but 10NET is documented as using DS:SI
instead of ES:DI
SeeAlso: AX=5E02h,INT 2F/AX=111Fh
--------D-215E04-----------------------------
INT 21 - DOS 3.1+ network - SET PRINTER MODE
AX = 5E04h
BX = redirection list index (see AX=5F02h)
DX = mode
bit 0: set if binary, clear if text (tabs expanded to blanks)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
Note: calls INT 2F/AX=111Fh with 5E04h on stack
SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
--------N-215E04-----------------------------
INT 21 - 10NET v5.0 - INITIATE PRINT JOB
AX = 5E04h
BX = zero-based redirection list index (see AX=5F02h)
DS:DX -> extended workstation printer setup structure (see #0903)
Return: CF clear if successful
CF set on error
AX = error code (see #0885 at AH=59h)
SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"

Format of 10NET extended workstation printer setup structure:
Offset Size Description (Table 0903)
00h BYTE notification flags (see #0904)
01h BYTE job control mask (see #0905)
02h WORD days to retain file
04h WORD test print length
06h BYTE number of copies to print
07h BYTE compression algorithm
08h BYTE tab width (00h = don't expand)
09h BYTE initiation type (00h normal, 01h non-spooled)
0Ah 38 BYTEs job start operation notification instructions
30h 32 BYTEs comment for job
50h 64 BYTEs output filename or non-spooled file

Bitfields for 10NET notification flags:
Bit(s) Description (Table 0904)
0 user at print start
1 operator at start, with reply
2 user at print completion
3 operator at completion, with reply
4 user on queue switch
5 operator on queue switch, with reply
6 user on print error

Bitfields for 10NET job control mask:
Bit(s) Description (Table 0905)
0 print banner page
1 eject page at end of job
2 mark as "held" (queue but don't print)
3 rush job (queue at top)
4 overwrite file with zeros before deletion
5 hyperspool if possible
--------D-215E05-----------------------------
INT 21 - DOS 3.1+ network - GET PRINTER MODE
AX = 5E05h
BX = redirection list index (see AX=5F02h)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
DX = printer mode (see AX=5E04h)
Note: calls INT 2F/AX=111Fh with 5E05h on stack
SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
--------N-215E05-----------------------------
INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
AX = 5E05h
BX = zero-based redirection list index (see AX=5F02h)
Return: CF clear if successful
CF set on error
AX = error code (see #0885 at AH=59h)
Note: this call resets the spool termination mode to "truncate"
(see AX=5D08h)
SeeAlso: AX=5E04h"10NET",AX=5E06h
--------N-215E06-----------------------------
INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
AX = 5E06h
BX = zero-based redirection list index (see AX=5F02h)
CX = operation (06h set, 07h get)
DS:DX -> buffer for setup structure (same as first nine bytes of
workstation printer setup) (see #0903)
Return: CF clear if successful
DS:DX buffer updated on get
CF set on error
AX = error code (see #0885 at AH=59h)
SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
--------D-215F00-----------------------------
INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
AX = 5F00h
BL = redirection type
03h printer
04h disk drive
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
BH = redirection state
00h off
01h on
Note: calls INT 2F/AX=111Eh with AX on top of the stack
SeeAlso: AX=5F01h,INT 2F/AX=111Eh
--------D-215F01-----------------------------
INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
AX = 5F01h
BL = redirection type
03h printer
04h disk drive
BH = redirection state
00h off
01h on
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
Notes: when redirection is off, the local device (if any) rather than the
remote device is used
calls INT 2F/AX=111Eh with AX on top of the stack
SeeAlso: AX=5F00h,INT 2F/AX=111Eh,INT 60/AX=0002h
--------D-215F02-----------------------------
INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
AX = 5F02h
BX = zero-based redirection list index
CX = 0000h (LANtastic)
DS:SI -> 16-byte buffer for ASCIZ local device name or drive letter
followed by colon
ES:DI -> 128-byte buffer for ASCIZ network name
Return: CF clear if successful
BH = device status
00h valid
01h invalid
02h valid (connected from inside Windows for Workgroups v3.11)
BL = device type
03h printer
04h disk drive
CX = user data previously set with AX=5F03h
DS:SI and ES:DI buffers filled
DX,BP destroyed
CF set on error
AX = error code (01h,12h) (see #0885 at AH=59h)
Notes: this function is passed through to INT 2F/AX=111Eh by the DOS kernel
error code 12h is returned if BX is greater than the size of the list
also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
the returned device name may or may not include a colon, depending on
the network software
SeeAlso: AX=5F03h,AX=5F46h,INT 2F/AX=111Eh
--------D-215F03-----------------------------
INT 21 - DOS 3.1+ network - REDIRECT DEVICE
AX = 5F03h
BL = device type
03h printer
04h disk drive
CX = user data to save
0000h for LANtastic
4E57h ("NW") for NetWare 4.0 requester
DS:SI -> ASCIZ local device name (16 bytes max)
ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
Return: CF clear if successful
CF set on error
AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
Notes: if device type is disk drive, DS:SI must point at either a null string
or a string consisting the drive letter followed by a colon; if a
null string, the network attempts to access the destination without
redirecting a local drive
the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
also supported by Banyan VINES, LANtastic, and 10NET
SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh,INT 60/AX=0002h
--------D-215F04-----------------------------
INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
AX = 5F04h
DS:SI -> ASCIZ local device name or path
CX = 4E57h ("NW") for NetWare 4.0 requester
Return: CF clear if successful
CF set on error
AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
Notes: the DS:SI string must be either a local device name, a drive letter
followed by a colon, or a network directory beginning with two
backslashes
the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
also supported by Banyan VINES, LANtastic, and 10NET
SeeAlso: AX=5F03h,INT 2F/AX=111Eh,INT 60/AX=0003h
--------D-215F05-----------------------------
INT 21 - DOS 4+ network - GET EXTENDED REDIRECTION LIST ENTRY
AX = 5F05h
BX = redirection list index
DS:SI -> buffer for ASCIZ source device name
ES:DI -> buffer for destination ASCIZ network path
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX = server's network process ID handle (10NET)
BH = device status flag (bit 0 clear if valid)
BL = device type (03h if printer, 04h if drive)
CX = stored parameter value (user data) from AX=5F03h
BP = NETBIOS local session number
DS:SI buffer filled
ES:DI buffer filled
Notes: the local session number allows sharing the redirector's session number
if an error is caused on the NETBIOS LSN, the redirector may be unable
to correctly recover from errors
the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
supported by DR-DOS 5.0
also supported by 10NET v5.0
SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
--------O-215F05-----------------------------
INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
AX = 5F05h
DL = drive number (0=A:)
DS:SI -> ASCIZ name of the object to map the drive to
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
SeeAlso: AX=5F06h"STARLITE",INT 60/AX=0002h
--------N-215F06-----------------------------
INT 21 U - Network - GET FULL REDIRECTION LIST
AX = 5F06h
???
Return: ???
Notes: similar to AX=5F02h and AX=5F05h, but also returns redirections
excluded from those calls for various reasons
calls INT 2F/AX=111Eh with AX on top of the stack
SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
--------O-215F06-----------------------------
INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
AX = 5F06h
DL = drive to be unmapped (0=A:)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
SeeAlso: AX=5F05h"STARLITE",INT 60/AX=0003h
--------D-215F07-----------------------------
INT 21 - DOS 5+ - ENABLE DRIVE
AX = 5F07h
DL = drive number (0=A:)
Return: CF clear if successful
CF set on error
AX = error code (0Fh) (see #0885 at AH=59h)
Notes: simply sets the "valid" bit in the drive's CDS
this function is not supported by Novell DOS 7
SeeAlso: AH=52h,AX=5F08h"DOS"
--------O-215F07-----------------------------
INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
AX = 5F07h
DS:SI -> ASCIZ name of object to offer to network
ES:DI -> ASCIZ name under which object will be known on the network
MUST begin with three slashes
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
SeeAlso: AX=5F08h"STARLITE"
--------D-215F08-----------------------------
INT 21 - DOS 5+ - DISABLE DRIVE
AX = 5F08h
DL = drive number (0=A:)
Return: CF clear if successful
CF set on error
AX = error code (0Fh) (see #0885 at AH=59h)
Notes: simply clears the "valid" bit in the drive's CDS
this function is not supported by Novell DOS 7
SeeAlso: AH=52h,AX=5F07h"DOS"
--------O-215F08-----------------------------
INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
AX = 5F08h
DS:SI -> ASCIZ network name (not local name) of object to unshare
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
SeeAlso: AX=5F07h"STARLITE"
--------O-215F09-----------------------------
INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
AX = 5F09h
DS:DX -> ASCIZ name of the device driver to attach to
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
Note: the STARLITE distributed file system can attach to multiple networks
simultaneously
SeeAlso: AX=5F0Ah
--------O-215F0A-----------------------------
INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
AX = 5F0Ah
DS:DX -> ASCIZ name of device driver to detach from
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
SeeAlso: AX=5F09h
--------N-215F30-----------------------------
INT 21 U - LAN Manager Enhanced DOS - GET REDIRECTOR VERSION
AX = 5F30h
Return: AX = version (AH=major,AL=minor)
--------N-215F32-----------------------------
INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
AX = 5F32h
BX = handle
CX = size of _PIPEINFO structure
DX = level (must be 0001h)
DS:SI -> _PIPEINFO structure (see #0906)
Return: CF clear if successful
_PIPEINFO structure filled in
CF set on error
AX = error code
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F33h,AX=5F34h

Format of Named Pipes _PIPEINFO structure:
Offset Size Description (Table 0906)
00h WORD size of outgoing buffer
02h WORD size of incoming buffer
04h BYTE maximum number of instances allowed
05h BYTE current number of instances
06h BYTE length of the name (including terminating NUL)
07h N BYTEs name
--------N-215F33-----------------------------
INT 21 u - Named Pipes - LOCAL DosQNmPHandState
AX = 5F33h
BX = handle
Return: CF clear if successful
AH = pipe mode bit mask (see #0907)
AL = maximum number of instances
CF set on error
AX = error code
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F32h,AX=5F34h

Bitfields for Named Pipes pipe mode:
Bit(s) Description (Table 0907)
7 set if nonblocking, clear if blocking
6 set if server end, clear if client end
2 set if write in message mode, clear if write in byte mode
0 set if read in message mode, clear if read in byte mode
--------N-215F34-----------------------------
INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
AX = 5F34h
BX = handle
CX = pipe mode bit mask
bit 15: set if nonblocking, clear if blocking
bit 8: set if read in message mode, clear if read in byte mode
Return: CF clear if successful
CF set if error
AX = error code
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
--------N-215F35-----------------------------
INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
AX = 5F35h
BX = handle
CX = buffer length
DS:SI -> buffer
Return: CF set on error
AX = error code
CF clear if successful (LAN Manager v1-v2)
AX = 0000h if successful (LAN Manager 3.x)
---if successful---
CX = bytes read
SI = bytes left in the pipe
DX = bytes left in the current message
AX = pipe status (v1-v2) (see #0908)
DI = pipe status (v3.x)
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h

(Table 0908)
Values for pipe status:
0001h disconnected
0002h listening
0003h connected
0004h closing
--------N-215F36-----------------------------
INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
AX = 5F36h
BX = handle
CX = in buffer length
DS:SI -> in buffer
DX = out buffer length
ES:DI -> out buffer
Return: CF clear if successful
CX = bytes read
CF set on error
AX = error code
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F34h,AX=5F37h
--------N-215F37-----------------------------
INT 21 u - Named Pipes - DosCallNmPipe
AX = 5F37h
DS:SI -> DosCallNmPipe stack frame (see #0909)
Return: CF clear if successful
CX = bytes read
CF set on error
AX = error code
Note: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F36h,AX=5F38h

Format of Named Pipes DosCallNmPipe stack frame:
Offset Size Description (Table 0909)
00h DWORD timeout
04h DWORD -> bytes read WORD (not used!!)
08h WORD out buffer length
0Ah DWORD address of out buffer
0Eh WORD in buffer length
10h DWORD address of in buffer
14h DWORD address of pipe name
--------N-215F38-----------------------------
INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
AX = 5F38h
DS:DX -> pipe name
BX:CX = timeout value
Return: CF clear if successful
CF set if error
AX = error code
Notes: when a client gets a return code of ERROR_PIPE_BUSY on attempting to
open a pipe, it should issue this call to wait until the pipe
instance becomes available again; on return from this call, the
client must attempt to open the pipe once again
this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
SeeAlso: AX=5F37h,AX=5F39h
--------N-215F39-----------------------------
INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
AX = 5F39h
BX = handle
CX = buffer length
DS:DX -> buffer
Return: CF clear if successful
CX = bytes read
CF set if error
AX = error code
Notes: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
not documented in the LAN Manager Toolkit
SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
--------N-215F3A-----------------------------
INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
AX = 5F3Ah
BX = handle
CX = buffer length
DS:DX -> buffer
Return: CF clear if successful
CX = bytes written
CF set if error
AX = error code
Notes: this function was introduced by LAN Manager but is also supported by
the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
Machines, and others
not documented in the LAN Manager Toolkit
SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
--------N-215F3B-----------------------------
INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
AX = 5F3Bh
BX = handle
CX = handle_info_1 structure length or sizeof DWORD
DI = parameter number to set
0000h all
0001h number of milliseconds
0002h number of characters
DS:DX -> handle_info_1 structure (DI=0000h) (see #0910)
or DWORD (DI=0001h or 0002h)
SI = level of information (0001h)
Return: CF clear if successful
CX = total bytes available
CF set if error
AX = error code
SeeAlso: AX=5F3Ch

Format of LAN Manager handle_info_1 structure:
Offset Size Description (Table 0910)
00h DWORD number of milliseconds which workstation collects data before
it sends the data to the named pipe
04h DWORD number of characters which workstation collects before it
sends the data to the named pipe
--------N-215F3C-----------------------------
INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
AX = 5F3Ch
BX = handle
CX = length of handle_info_1 structure
DS:DX -> handle_info_1 structure (see #0910)
SI = level of information (must be 0001h)
Return: CF clear if successful
CX = total bytes available
CF set if error
AX = error code
SeeAlso: AX=5F3Bh
--------N-215F3D-----------------------------
INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
AX = 5F3Dh
???
Return: ???
--------N-215F3E-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
AX = 5F3Eh
???
Return: ???
Note: This function is not documented anywhere in the LAN Manager 2.x Toolkit
but was documented in LAN Manager 1.x manuals.
--------N-215F3F-----------------------------
INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
AX = 5F3Fh
CX = api number
ES:DI -> data descriptor
ES:SI -> parameter descriptor
ES:DX -> auxiliary descriptor (if DX <> 0)
???
Return: ???
--------N-215F40-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
AX = 5F40h
DS:DX -> NetMessageBufferSend parameter structure (see #0911)
Return: AX = error code

Format of LAN Manager NetMessageBufferSend parameter structure:
Offset Size Description (Table 0911)
00h DWORD -> recipient name (name for specific user, name* for domain
wide name, * for broadcast)
04h DWORD -> buffer
08h WORD length of buffer
--------N-215F41-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
AX = 5F41h
BL = level of detail (0000h, 0001h or 0002h)
CX = buffer length
ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
(see #0912,#0913,#0914)
Return: CF clear if successful
CX = entries read
DX = total available
CF set on error
AX = error code

Format of LAN Manager service_info_0 structure:
Offset Size Description (Table 0912)
00h 16 BYTEs name
SeeAlso: #0913,#0914

Format of service_info_1 structure:
Offset Size Description (Table 0913)
00h 16 BYTEs name
10h WORD status bitmask (see #0915)
12h DWORD status code (see #0916)
(also see Microsoft LAN Manager Programmer's Reference)
16h WORD process id
SeeAlso: #0912,#0914

Format of service_info_2 structure:
Offset Size Description (Table 0914)
00h 16 BYTEs name
10h WORD status bitmask (see #0915)
12h DWORD status code (see #0916)
16h WORD process id
18h 64 BYTEs text
SeeAlso: #0912,#0913


Bitfields for LAN Manager status bitmask:
Bit(s) Description (Table 0915)
0,1 00 uninstall
01 install pending
10 uninstall pending
11 installed
2,3 00 active
01 Continue pending
10 Pause pending
11 paused
4 uninstallable
5 pausable
8 disk redirector paused
9 spooled device redirector paused (printing)
10 communication device redirector paused

(Table 0916)
Values for LAN Manager status code:
high word
3051 Bad parameter value
3052 A parameter is missing
3053 An unknown parameter was specified
3054 The resource is insufficient
3055 Configuration is faulty
3056 An MS-DOS or MS OS/2 error occured
3057 An internal error occured
3058 An ambiguous parameter name was given
3059 A duplicate parameter exists
3060 The service was terminated by NetSeviceControl when it did not respond
3061 The service program file could not be executed
3062 The subservice failed to start
3063 There is a conflict in the value or use of these parameters
3064 There is a problem with the file
low word
3070 There is insufficient memory
3071 There is insufficeient disk space
3072 Unable to create thread
3073 Unable to create process
3074 A security failure occured
3075 There is bad or missing default path
3076 Network software is not installed
3077 Server software is not installed
3078 The server could not access the UAS database
3079 The action requires user-level security
3080 The log directory is invalid
3081 The LAN group specificed could not be used
3082 The computername is being used as a message alias on another computer
3083 The workstation failed to announce the servername
3084 The user accounts system is not configured properly
--------N-215F42-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
AX = 5F42h
DH = opcode
00h interrogate status
01h pause
02h continue
03h uninstall
DL = argument
01h disk resource
02h print resource
04h communications resource (not implemented for DOS)
ES:BX -> NetServiceControl parameter structure (see #0917)
Return: CF clear if successful
CF set on error
AX = error code

Format of LAN Manager NetServiceControl parameter structure:
Offset Size Description (Table 0917)
00h DWORD -> service name
04h WORD result buffer size
06h DWORD -> result buffer as service_info_2 structure
--------N-215F43-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
AX = 5F43h
BX = handle of remote print job
CX = size of PRIDINFO struture
ES:DI -> PRIDINFO structure (see #0918)
Return: CF clear if successful
PRIDINFO filled in
CF set on error
AX = error code

Format of LAN Manager PRIDINFO structure:
Offset Size Description (Table 0918)
00h WORD job id
02h 16 BYTEs server name
12h 13 BYTEs queue name
1Fh 1 BYTE pad
--------N-215F44-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
AX = 5F44h
BX = information level (00h, 01h, or 0Ah)
CX = buffer size
ES:DI -> buffer in which to store info
Return: AX = error code
DX = amount of buffer used (or required)
SeeAlso: AX=5F45h,AX=5F49h
--------N-215F45-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
AX = 5F45h
BX = level (0000h or 0001h)
CX = buffer size
DX = parameter to set
ES:DI -> buffer
Return: CF clear if successful
CF set if error
AX = error code
SeeAlso: AX=5F44h
--------N-215F46-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
AX = 5F46h
BX = level (0000h or 0001h)
CX = size of buffer
ES:DI -> buffer of use_info_0 or use_info_1 structures
(see #0919,#0920)
Return: CF clear if successful
CX = entries read
DX = total available entries
CF set if error
AX = error code
SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch

Format of LAN Manager use_info_0 structure:
Offset Size Description (Table 0919)
00h 9 BYTEs local device name
09h BYTE padding
0Ah DWORD -> remote device name in UNC form \\server\share
SeeAlso: #0920

Format of LAN Manager use_info_1 structure:
Offset Size Description (Table 0920)
00h 9 BYTEs Local device name
09h BYTE padding
0Ah DWORD -> remote device name in UNC form \\server\share
0Eh DWORD -> password
12h WORD network link status
(00h OK, 02h disconnected, else unsure)
14h WORD use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
16h WORD ignored
18h WORD ignored
SeeAlso: #0919
--------N-215F47-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
AX = 5F47h
BX = level (0001h)
CX = size of use_info_1 structure
ES:DI -> use_info_1 structure (see #0920)
Return: CF clear on success
CF set on error
AX = error code
SeeAlso: AX=5F46h,AX=5F48h
--------N-215F48-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
AX = 5F48h
BX = force level
0000h no force
0001h force
0002h lots of force
ES:DI -> buffer as either the local device name or UNC remote name
Return: CF clear on success
CF set on error
AX = error code
SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
--------N-215F49-----------------------------
INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
AX = 5F49h
DS:DX -> NetUseGetInfo parameter structure (see #0921)
Return: CF clear on success
DX = total available
CF set on error
AX = error code
SeeAlso: AX=5F44h,AX=5F47h

Format of LAN Manager NetUseGetInfo parameter structure:
Offset Size Description (Table 0921)
00h DWORD pointer to either the local device name or UNC remote name
04h WORD level of information (0000h or 0001h)
06h DWORD pointer to buffer of use_info_0 or use_info_1 structures
0Ah WORD length of buffer
--------N-215F4A-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
AX = 5F4Ah
DS:DX -> NetRemoteCopy parameter structure (see #0922)
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F4Bh

Format of LAN Manager NetRemoteCopy parameter structure:
Offset Size Description (Table 0922)
00h DWORD -> source name as UNC
04h DWORD -> destination name as UNC
08h DWORD -> source password
0Ch DWORD -> destination password
10h WORD destination open bitmap
if destination path exists
0000h open fails
0001h file is appended
0002h file is overwritten
if destination path doesn't exist
0000h open fails
0010h file is created
12h WORD copy control bitmap (see #0923)
14h DWORD -> copy_info buffer
18h WORD length of copy_info buffer

Bitfields for LAN Manager copy control:
Bit(s) Description (Table 0923)
0 destination must be a file
1 destination must be a directory
2 destination is opened in ascii mode instead of binary
3 source is opened in ascii mode instead of binary
4 verify all write operations
--------N-215F4B-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
AX = 5F4Bh
DS:DX -> NetRemoteMove parameter structure (see #0924)
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F4Ah

Format of LAN Manager NetRemoteMove parameter structure:
Offset Size Description (Table 0924)
00h DWORD -> source name as UNC
04h DWORD -> destination name as UNC
08h DWORD -> source password
0Ch DWORD -> destination password
10h WORD destination open bitmap
if destination path exists
0000h open fails
0001h file is appended
0002h file is overwritten
if destination path doesn't exist
0000h open fails
0010h file is created
12h WORD move control bitmap
0001h destination must be a file
0002h destination must be a directory
14h DWORD -> move_info buffer
18h WORD length of move_info buffer
--------N-215F4C-----------------------------
INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
AX = 5F4Ch
BX = level (0000h or 0001h)
CX = buffer length
ES:DI -> buffer in which to store information
Return: CF clear if successful
ES:DI -> server_info_X structures (depending on level)
(see #0925,#0926)
BX = entries read
CX = total entries available
CF set on error
AX = error code
Notes: this function is also supported by the Novell DOS Named Pipe Extender
this function has been obseleted by NetServerEnum2
SeeAlso: AX=5F53h

Format of LAN Manager server_info_0 structure:
Offset Size Description (Table 0925)
00h 16 BYTEs name
SeeAlso: #0926

Format of LAN Manager server_info_1 structure:
Offset Size Description (Table 0926)
00h 16 BYTEs name
10h BYTE major version in lower nibble
11h BYTE minor version
12h DWORD server type bitmask (see #0927)
16h DWORD -> comment string
SeeAlso: #0925

Bitfields for LAN Manager server type:
Bit(s) Description (Table 0927)
0 workstation
1 server
2 SQL server
3 primary domain controller
4 backup domain controller
5 time server
6 Apple File Protocol (AFP) server
7 Novell server
8 Domain Member (v2.1+)
9 Print Queue server (v2.1+)
10 Dialin server (v2.1+)
11 Unix server (v2.1+)
--------N-215F4D-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
AX = 5F4Dh
BX = message size
CX = mailslot size (must be bigger than message size by at least 1)
(minimum 1000h, maximum FFF6h)
(buffer must be 9 bytes bigger than this)
DS:SI -> name
ES:DI -> memory buffer
Return: CF clear if successful
AX = handle
CF set on error
AX = error code
SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
--------N-215F4E-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
AX = 5F4Eh
BX = handle
Return: CF clear if successful
ES:DI -> memory to be freed (allocated during DosMakeMailslot)
CF set on error
AX = error code
SeeAlso: AX=5F4Dh,AX=5F4Fh
--------N-215F4F-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
AX = 5F4Fh
BX = handle
Return: CF clear if successful
AX = max message size
BX = mailslot size
CX = next message size
DX = next message priority
SI = number of messages waiting
CF set on error
AX = error code
SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
--------N-215F50-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
AX = 5F50h
BX = handle
DX:CX = timeout
ES:DI -> buffer
Return: CF clear if successful
AX = bytes read
CX = next item's size
DX = next item's priority
CF set on error
AX = error code
SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
--------N-215F51-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
AX = 5F51h
BX = handle
ES:DI -> buffer
Return: CF clear if successful
AX = bytes read
CX = next item's size
DX = next item's priority
CF set on error
AX = error code
SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
--------N-215F52-----------------------------
INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
AX = 5F52h
BX = class
CX = length of buffer
DX = priority
ES:DI -> DosWriteMailslot parameter structure (see #0928)
DS:SI -> mailslot name
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h

Format of LAN Manager DosWriteMailslot parameter structure:
Offset Size Description (Table 0928)
00h DWORD timeout
04h DWORD -> buffer
--------N-215F53-----------------------------
INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
AX = 5F53h
DS:SI -> NetServerEnum2 parameter structure (see #0929)
Return: CF clear if successful
BX = entries read
CX = total entries available
CF set on error
AX = error code
SeeAlso: AX=5F4Ch

Format of LAN Manager NetServerEnum2 parameter structure:
Offset Size Description (Table 0929)
00h WORD level (0000h or 0001h)
02h DWORD -> buffer as array of server_info_??? structures (see #0931)
06h WORD length of buffer
08h DWORD server type bitmask (see #0930)
0Ch DWORD -> Domain name (may be 0000h:0000h for all local domains)

Bitfields for LAN Manager server type:
Bit(s) Description (Table 0930)
0 workstation
1 server
2 SQL server
3 primary domain controller
4 backup domain controller
5 time server
6 Apple File Protocol (AFP) server
7 Novell server
8 Domain Member (v2.1+)
9 Print Queue server (v2.1+)
10 Dialin server (v2.1+)
11 Unix server (v2.1+)
Note: set all (FFFFFFFFh) for All Types

Format of LAN Manager server_info_0 structure:
Offset Size Description (Table 0931)
00h 16 BYTEs name
SeeAlso: #0932

Format of LAN Manager server_info_1 structure:
Offset Size Description (Table 0932)
00h 16 BYTEs name
10h BYTE major version in lower nibble
11h BYTE minor version
12h DWORD server type (bits 0-11) (see #0930)
16h DWORD -> comment string
SeeAlso: #0931
--------N-215F55----------------------------
INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
AX = 5F55h
BX = ???
Return: CF clear if successful
CF set on error
AX = error code
--------N-215F80-----------------------------
INT 21 - LANtastic - GET LOGIN ENTRY
AX = 5F80h
BX = login entry index (0-based)
ES:DI -> 16-byte buffer for machine name
Return: CF clear if successful
buffer filled with machine name ("\\" prefix removed)
DL = adapter number (v3+)
CF set on error
AX = error code
Note: the login entry index corresponds to the value BX used in AX=5F83h
SeeAlso: AX=5F83h
--------N-215F81-----------------------------
INT 21 - LANtastic - LOGIN TO SERVER
AX = 5F81h
ES:DI -> ASCIZ login path followed immediately by ASCIZ password
BL = adapter number
FFh try all valid adapters
00h-07h try only specified adapter
Return: CF clear if successful
CF set on error
AX = error code
Notes: login path is of form "\\machine\username"
if no password is used, the string at ES:DI must be terminated with
three NULs for compatibility with LANtastic v3.0.
SeeAlso: AX=5F82h,AX=5F84h
--------N-215F82-----------------------------
INT 21 - LANtastic - LOGOUT FROM SERVER
AX = 5F82h
ES:DI -> ASCIZ server name (in form "\\machine")
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
--------N-215F83-----------------------------
INT 21 - LANtastic - GET USERNAME ENTRY
AX = 5F83h
BX = login entry index (0-based)
ES:DI -> 16-byte buffer for username currently logged into
Return: CF clear if successful
DL = adapter number (v3+)
CF set on error
AX = error code
Note: the login entry index corresponds to the value BX used in AX=5F80h
SeeAlso: AX=5F80h
--------N-215F84-----------------------------
INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
AX = 5F84h
BX = server index not currently logged into
ES:DI -> 16-byte buffer for server name which is available for logging
in to ("\\" prefix omitted)
Return: CF clear if successful
DL = adapter number to non-logged in server is on
CF set on error
AX = error code
SeeAlso: AX=5F81h
--------N-215F85-----------------------------
INT 21 - LANtastic - CHANGE PASSWORD
AX = 5F85h
ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
Return: CF clear if successful
CF set on error
AX = error code
Notes: must be logged into the named machine
this function is illegal for group accounts
--------N-215F86-----------------------------
INT 21 - LANtastic - DISABLE ACCOUNT
AX = 5F86h
ES:DI -> ASCIZ machine name and password in form "\\machine\password"
Return: CF clear if successful
CF set on error
AX = error code
Note: must be logged into the named machine and concurrent logins set to 1
by NET_MGR. Requires system manager to re-enable account.
--------N-215F87-----------------------------
INT 21 - LANtastic v3+ - GET ACCOUNT
AX = 5F87h
DS:SI -> 128-byte buffer for account information (see #0933)
ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
BX destroyed
Note: must be logged into the specified machine

Format of LANtastic user account structure:
Offset Size Description (Table 0933)
00h 16 BYTEs blank-padded username (zero-padded for v4.x)
10h 16 BYTEs reserved (00h)
20h 32 BYTEs user description
40h BYTE privilege bits (see #0934)
41h BYTE maximum concurrent users
42h 42 BYTEs bit map for disallowed half hours, beginning on Sunday
(bit set if half-hour not an allowed time)
6Ch WORD internal (0002h)
6Eh 2 WORDs last login time
72h 2 WORDs account expiration date (MS-DOS-format year/month:day)
76h 2 WORDs password expiration date (0 = none)
7Ah BYTE number of days to extend password after change (1-31)
00h if no extension required
---v3.x---
7Bh 5 BYTEs reserved
---v4.x---
7Bh BYTE storage for first letter of user name when deleted (first
character is changed to 00h when deleting account)
7Ch BYTE extended privileges
7Dh 3 BYTEs reserved

Bitfields for LANtastic privilege bits:
Bit(s) Description (Table 0934)
7 bypass access control lists
6 bypass queue protection
5 treat as local process
4 bypass mail protection
3 allow audit entry creation
2 system manager
0 user cannot change password
--------N-215F88-----------------------------
INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
AX = 5F88h
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F82h
--------N-215F97-----------------------------
INT 21 - LANtastic - COPY FILE
AX = 5F97h
CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
SI = source file handle
DI = destination file handle
Return: CF clear if successful
DX:AX = number of bytes copied
CF set on error
AX = error code
Note: copy is performed by server
--------N-215F98-----------------------------
INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
AX = 5F98h
DS:SI -> message buffer (see #0935)
Return: CF clear if successful
CF set on error
AX = error code
Note: v4.1- return no errors
SeeAlso: AX=5F99h

Format of LANtastic message buffer:
Offset Size Description (Table 0935)
00h BYTE reserved
01h BYTE message type
00h general
01h server warning
02h-7Fh reserved
80h-FFh user-defined
02h 16 BYTEs ASCIZ destination machine name
12h 16 BYTEs ASCIZ server name which user must be logged into
22h 16 BYTEs ASCIZ user name
32h 16 BYTEs ASCIZ originating machine name (filled in when received)
42h 80 BYTEs message text
--------N-215F99-----------------------------
INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
AX = 5F99h
ES:DI -> messsage buffer (see #0935)
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F98h
--------N-215F9A-----------------------------
INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
AX = 5F9Ah
Return: CF clear if successful
DL = bits describing processing of received messages (see #0936)
CF set on error
AX = error code
SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh

Bitfields for unsolicited message processing flags:
Bit(s) Description (Table 0936)
0 beep before message is delivered
1 deliver message to message service
2 pop up message automatically (v3+)
--------N-215F9B-----------------------------
INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
AX = 5F9Bh
DL = bits describing processing for received unsolicited messages
(see #0936)
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5F9Ah,AX=5F9Eh
--------N-215F9C-----------------------------
INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
AX = 5F9Ch
CX = time to leave on screen in clock ticks
DH = 0-based screen line on which to place message
Return: CF clear if successful
CF set on error
AX = error code (0Bh)
Notes: the original screen contents are restored when the message is removed
the message will not appear, and an error will be returned, if the
screen is in a graphics mode
SeeAlso: AX=5F9Ah
--------N-215F9D-----------------------------
INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
AX = 5F9Dh
Return: DL = redirector control bits
bit 7: set to notify on print job completion
SeeAlso: AX=5F9Ah,AX=5F9Eh
--------N-215F9E-----------------------------
INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
AX = 5F9Eh
DL = redirector control bits (see AX=5F9Dh)
Return: nothing
SeeAlso: AX=5F9Bh,AX=5F9Dh
--------N-215FA0-----------------------------
INT 21 - LANtastic - GET QUEUE ENTRY
AX = 5FA0h
BX = queue entry index (0000h is first entry)
DS:SI -> buffer for queue entry (see #0937)
ES:DI -> ASCIZ server name in form "\\name"
Return: CF clear if successful
CF set on error
AX = error code
BX = entry index for next queue entry (BX-1 is current index)
SeeAlso: AX=5FA1h,AX=5FA2h

Format of LANtastic queue entry:
Offset Size Description (Table 0937)
00h BYTE status of entry (see #0938)
01h DWORD size of spooled file
05h BYTE type of entry (see #0939)
06h BYTE output control (see #0940)
07h WORD number of copies
09h DWORD sequence number of queue entry
0Dh 48 BYTEs pathname of spooled file
3Dh 16 BYTEs user who spooled file
4Dh 16 BYTEs name of machine from which file was spooled
5Dh WORD date file was spooled (see #0877 at AX=5700h)
5Fh WORD time file was spooled (see #0876 at AX=5700h)
61h 17 BYTEs ASCIZ destination device or user name
72h 48 BYTEs comment field

(Table 0938)
Values for status of LANtastic queue entry:
00h empty
01h being updated
02h being held
03h waiting for despool
04h being despooled
05h canceled
06h spooled file could not be accessed
07h destination could not be accessed
08h rush job

(Table 0939)
Values for type of LANtastic queue entry:
00h printer queue file
01h message
02h local file
03h remote file
04h to remote modem
05h batch processor file

Bitfields for output control:
Bit(s) Description (Table 0940)
6 don't delete (for mail)
5 mail file contains voice mail (v3+)
4 mail message has been read
3 response has been requested for this mail
--------N-215FA1-----------------------------
INT 21 - LANtastic - SET QUEUE ENTRY
AX = 5FA1h
BX = handle of opened queue entry
DS:SI -> queue entry (see #0937)
Return: CF clear if successful
CF set on error
AX = error code
Notes: the only queue entry fields which may be changed are output control,
number of copies, destination device, and comment
the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
call on the file "\\server\\@MAIL" or "\\server\@name" (for
printer queue entries)
SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
--------N-215FA2-----------------------------
INT 21 - LANtastic - CONTROL QUEUE
AX = 5FA2h
BL = control command
00h start despooling (privileged)
01h halt despooling (privileged)
02h halt despooling at end of job (privileged)
03h pause despooler at end of job (privileged)
04h print single job (privileged)
05h restart current job (privileged)
06h cancel the current job
07h hold queue entry
08h release a held queue entry
09h make queue entry a rushed job (privileged)
CX:DX = sequence number to control (commands 06h-09h)
DX = physical printer number (commands 00h-05h)
00h-02h LPT1-LPT3
03h,04h COM1,COM2
other all printers
ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
--------N-215FA3-----------------------------
INT 21 - LANtastic v3+ - GET PRINTER STATUS
AX = 5FA3h
BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
DS:SI -> buffer for printer status (see #0941)
ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
BX = next physical printer number
Note: you must be logged in to the specified server

Format of LANtastic printer status:
Offset Size Description (Table 0941)
00h BYTE printer state (see #0942)
01h WORD queue index of print job being despooled
FFFFh if not despooling--ignore all following fields
03h WORD actual characters per second being output
05h DWORD number of characters actually output so far
09h DWORD number of bytes read from spooled file so far
0Dh WORD copies remaining to print

Bitfields for LANtastic printer state:
Bit(s) Description (Table 0942)
7 printer paused
0-6 0 printer disabled
1 will stop at end of job
2 print multiple jobs
--------N-215FA4-----------------------------
INT 21 - LANtastic v3+ - GET STREAM INFO
AX = 5FA4h
BX = 0-based stream index number
DS:SI -> buffer for stream information (see #0943)
ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
BX = next stream number
SeeAlso: AX=5FA5h

Format of LANtastic stream information:
Offset Size Description (Table 0943)
00h BYTE queueing of jobs for logical printer (0=disabled,other=enabled)
01h 11 BYTEs logical printer resource template (may contain ? wildcards)
--------N-215FA5-----------------------------
INT 21 - LANtastic v3+ - SET STREAM INFO
AX = 5FA5h
BX = 0-based stream index number
DS:SI -> buffer containing stream information (see #0943)
ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5FA4h
--------N-215FA7-----------------------------
INT 21 - LANtastic - CREATE USER AUDIT ENTRY
AX = 5FA7h
DS:DX -> ASCIZ reason code (max 8 bytes)
DS:SI -> ASCIZ variable reason string (max 128 bytes)
ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
Note: you must be logged in to the specified server and have the "U"
privilege to execute this call
--------N-215FA9-----------------------------
INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
AX = 5FA9h
BX = handle of opened queue entry
DS:SI -> queue entry (see #0937)
Return: CF clear if successful
CF set on error
AX = error code
Note: functions exactly the same as AX=5FA1h except the spooled filename is
also set. This call supports direct despooling.
SeeAlso: AX=5FA1h
--------N-215FB0-----------------------------
INT 21 - LANtastic - GET ACTIVE USER INFORMATION
AX = 5FB0h
BX = server login entry index
DS:SI -> buffer for active user entry (see #0944)
ES:DI -> ASCIZ machine name in form "\\server"
Return: CF clear if successful
CF set on error
AX = error code
BX = next login index
SeeAlso: AX=5FB2h

Format of LANtastic active user entry:
Offset Size Description (Table 0944)
00h WORD virtual circuit number
02h BYTE login state (see #0945)
03h BYTE last command issued (see #0946)
04h 5 BYTEs number of I/O bytes (40-bit unsigned number)
09h 3 BYTEs number of server requests (24-bit unsigned)
0Ch 16 BYTEs name of user who is logged in
1Ch 16 BYTEs name of remote logged in machine
2Ch BYTE extended privileges (v4+???)
bit 0: user cannot change his password
2Dh WORD time left in minutes (0000h = unlimited) (v4+???)

Bitfields for login state:
Bit(s) Description (Table 0945)
0 fully logged in
1 remote program load login
2 user has system manager privileges
3 user can create audit entries
4 bypass mail protection
5 treat as local process
6 bypass queue protection
7 bypass access control lists

(Table 0946)
Values for last LANtastic command:
00h login
01h process termination
02h open file
03h close file
04h create file
05h create new file
06h create unique file
07h commit data to disk
08h read file
09h write file
0Ah delete file
0Bh set file attributes
0Ch lock byte range
0Dh unlock byte range
0Eh create subdirectory
0Fh remove subdirectory
10h rename file
11h find first matching file
12h find next matching file
13h get disk free space
14h get a queue entry
15h set a queue entry
16h control the queue
17h return login information
18h return link description
19h seek on file
1Ah get server's time
1Bh create audit entry
1Ch open file in multitude of modes
1Dh change password
1Eh disable account
1Fh local server file copy
---v3+---
20h get username from account file
21h translate server's logical path
22h make indirect file
23h get indirect file contents
24h get physical printer status
25h get logical print stream info
26h set logical print stream info
27h get user's account record
---v4+---
28h request server shutdown
29h cancel server shutdown
2Ah stuff server's keyboard
2Bh write then commit data to disk
2Ch set extended queue entry
2Dh terminate user from server
2Eh enable/disable logins
2Fh flush server caches
30h change username
31h get extended queue entry
(same as get queue, but can return named fields blanked)
--------N-215FB1-----------------------------
INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
AX = 5FB1h
DS:SI -> 64-byte buffer for link description
ES:DI -> ASCIZ machine and shared directory name in form
"\\machine\shared-resource"
Return: CF clear if successful
CX = access control list privileges for requesting user (see #0947)
CF set on error
AX = error code

Bitfields for LANtastic access control list:
Bit(s) Description (Table 0947)
4 (I) allow expansion of indirect files
5 (A) allow attribute changing
6 (P) allow physical access to device
7 (E) allow program execution
8 (N) allow file renaming
9 (K) allow directory deletion
10 (D) allow file deletion
11 (L) allow file/directory lookups
12 (M) allow directory creation
13 (C) allow file creation
14 (W) allow open for write and writing
15 (R) allow open for read and reading
--------N-215FB2-----------------------------
INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
AX = 5FB2h
BX = username entry index (0 for first)
DS:SI -> 16-byte buffer for username
ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
BX = next queue entry index
SeeAlso: AX=5FB0h
--------N-215FB3-----------------------------
INT 21 - LANtastic v3+ - TRANSLATE PATH
AX = 5FB3h
DS:SI -> 128-byte buffer for ASCIZ result
ES:DI -> full ASCIZ path, including server name
DX = types of translation to be performed
bit 0: expand last component as indirect file
bit 1: return actual path relative to server's physical disk
Return: CF clear if successful
CF set on error
AX = error code
Note: always expands any indirect files along the path
SeeALso: AX=5FB4h,INT 21/AH=60h
--------N-215FB4-----------------------------
INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
AX = 5FB4h
DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
ES:DI -> full ASCIZ path of indirect file to create, incl machine name
Return: CF clear if successful
CF set on error
AX = error code
Note: the contents of the indirect file may be any valid server-relative path
SeeAlso: AX=5FB3h,AX=5FB5h
--------N-215FB5-----------------------------
INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
AX = 5FB5h
DS:SI -> 128-byte buffer for ASCIZ indirect file contents
ES:DI -> full ASCIZ path of indirect file
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5FB4h
--------N-215FB6-----------------------------
INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
AX = 5FB6h
ES:DI -> pointer to ASCIZ default user name, immediately followed by
ASCIZ password
BL = adapter number to use for default login attempt
FFh try all valid adapters
00h-05h try adapter 0-5 explicitly
Return: CF clear if successful
CF set on error
AX = error code
Notes: call with ES:DI -> two nulls to disable auto-login
SeeAlso: AX=5FB7h
--------N-215FB7-----------------------------
INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
AX = 5FB7h
ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
Return: CF clear if successful
DL = adapter number used for default login attempt
FFh all valid adapters will be tried
00h-05h specified adapter will be tried explicitly
CF set on error
AX = error code
SeeAlso: AX=5F81h,AX=5FB6h
--------N-215FC0-----------------------------
INT 21 - LANtastic - GET TIME FROM SERVER
AX = 5FC0h
DS:SI -> time block (see #0948)
ES:DI -> ASCIZ server name to get time from
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AH=E7h

Format of LANtastic time block:
Offset Size Description (Table 0948)
00h WORD year
02h BYTE day
03h BYTE month
04h BYTE minutes
05h BYTE hour
06h BYTE hundredths of second
07h BYTE second
--------N-215FC8-----------------------------
INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
AX = 5FC8h
ES:DI -> ASCIZ server name in form "\\machine"
DS:SI -> ASCIZ reason string (80 characters)
CX = number of minutes until shutdown (0 = immediate)
DX = option flags (see #0949)
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5FC9h


Bitfields for LANtastic option flags:
Bit(s) Description (Table 0949)
0 auto reboot
1 do not notify users
2 halt after shutdown
3 shutdown due to power fail (used by UPS)
4-7 reserved
8-14 user definable
15 reserved
--------N-215FC9-----------------------------
INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
AX = 5FC9h
ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
Note: you must have the "S" privilege to use this call
SeeAlso: AX=5FC8h
--------N-215FCA-----------------------------
INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
AX = 5FCAh
ES:DI -> ASCIZ server name in form "\\machine"
DS:SI -> ASCIZ string to stuff (128 bytes)
Return: CF clear if successful
CF set on error
AX = error code
Note: you must have the "S" privilege to use this call
maximum number of characters that can be stuffed is determined by the
server's RUN BUFFER SIZE.
SeeAlso: INT 16/AH=05h
--------N-215FCB-----------------------------
INT 21 - LANtastic v4.1+ - TERMINATE USER
AX = 5FCBh
ES:DI -> ASCIZ server name in form "\\machine"
DS:SI -> blank-padded username. A null char = wildcard.
DS:DX -> blank-padded machine name. A null char = wildcard.
CX = minutes until termination (0 = immediate)
Return: CF clear if successful
CF set on error
AX = error code
Note: you must have the "S" privilege to use this call
you cannot log yourself out using this call
SeeAlso: AX=5F82h
--------N-215FCC-----------------------------
INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
AX = 5FCCh
ES:DI -> ASCIZ server name in form "\\machine"
CX = bit values (value of bits you want to set) (see #0950)
DX = bit mask (bits you are interested in, 0 = get only) (see #0950)
Return: CF clear if successful
CX = control bits after call (see #0950)
CF set on error
AX = error code
Note: you must have the "S" privilege to SET, anyone can GET.

Bitfields for control bits:
Bit(s) Description (Table 0950)
0 disable logins
--------N-215FCD-----------------------------
INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
AX = 5FCDh
ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error
AX = error code
Note: you must have the "S" privilege to use this call.
--------N-215FD0-----------------------------
INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
AX = 5FD0h
Return: CF clear if successful
CX = redirected printer timeout in clock ticks of 55ms
0000h if timeout disabled
CF set on error
AX = error code
SeeAlso: AX=5FD1h
--------N-215FD1-----------------------------
INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
AX = 5FD1h
CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
Return: CF clear if successful
CF set on error
AX = error code
SeeAlso: AX=5FD0h
--------N-215FE0-----------------------------
INT 21 C - LANtastic - GET DOS SERVICE VECTOR
AX = 5FE0h
Return: CF clear if successful
ES:BX -> current FAR service routine
CF set on error
AX = error code
Note: the service routine is called by the LANtastic redirector whenever DOS
may safely be called, permitting external TSRs and drivers to hook
into LANtastic's DOS busy flag checking
SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
--------N-215FE1-----------------------------
INT 21 - LANtastic - SET DOS SERVICE VECTOR
AX = 5FE1h
ES:BX -> FAR routine to call when DOS services are available
Return: CF clear if successful
CF set on error
AX = error code
Note: new handler must chain to previous handler as its first action
SeeAlso: AX=5FE0h
--------N-215FE2-----------------------------
INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
AX = 5FE2h
Return: CF clear if successful
ES:BX -> current FAR message service routine
CF set on error
AX = error code
SeeAlso: AX=5FE0h,AX=5FE3h
--------N-215FE3-----------------------------
INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
AX = 5FE3h
ES:BX -> FAR routine for processing network messages
Return: CF clear if successful
CF set on error
AX = error code
Notes: handler must chain to previous handler as its first action
on invocation, ES:BX -> just-received message
SeeAlso: AX=5FE2h
--------D-2160-------------------------------
INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
AH = 60h
DS:SI -> ASCIZ filename or path
ES:DI -> 128-byte buffer for canonicalized name
Return: CF set on error
AX = error code
02h invalid component in directory path or drive letter only
03h malformed path or invalid drive letter
ES:DI buffer unchanged
CF clear if successful
AH = 00h
AL = destroyed (00h or 5Ch or last char of current dir on drive)
buffer filled with qualified name of form D:\PATH\FILE.EXT or
\\MACHINE\PATH\FILE.EXT
Desc: determine the canonical name of the specified filename or path,
corresponding to the undocumented TRUENAME command in COMMAND.COM
Notes: the input path need not actually exist
letters are uppercased, forward slashes converted to backslashes,
asterisks converted to appropriate number of question marks, and
file and directory names are truncated to 8.3 if necessary. (DR-DOS
3.41 and 5.0 do not expand asterisks)
'.' and '..' in the path are resolved
filespecs on local drives always start with "d:", those on network
drives always start with "\\"
if path string is on a JOINed drive, the returned name is the one that
would be needed if the drive were not JOINed; similarly for a
SUBSTed, ASSIGNed, or network drive letter. Because of this, it is
possible to get a qualified name that is not legal under the current
combination of SUBSTs, ASSIGNs, JOINs, and network redirections
under DOS 3.3 through 6.00, a device name is translated differently if
the device name does not have an explicit directory or the directory
is \DEV (relative directory DEV from the root directory works
correctly). In these cases, the returned string consists of the
unchanged device name and extension appended to the string X:/
(forward slash instead of backward slash as in all other cases) where
X is the default or explicit drive letter.
functions which take pathnames require canonical paths if invoked via
INT 21/AX=5D00h
supported by OS/2 v1.1 compatibility box
NetWare 2.1x does not support characters with the high bit set; early
versions of NetWare 386 support such characters except in this call.
In addition, NetWare returns error code 3 for the path "X:\"; one
should use "X:\." instead.
for DOS 3.3-6.0, the input and output buffers may be the same, as the
canonicalized name is built in an internal buffer and copied to the
specified output buffer as the very last step
for DR DOS 6.0, this function is not automatically called when on a
network. Device drivers reportedly cannot make this call from their
INIT function. Using the same pointer for both input and output
buffers is not supported in the April 1992 and earlier versions of
DR DOS
Corel's CORELCDX and MSCDEX without the /S switch return canonical
names of the form "\\D.\A.\path", where "D" is the CD-ROM drive
letter and "A" appears to indicate the first physical CD-ROM drive;
MSCDEX with the /S switch returns a canonical name with embedded
blanks
SeeAlso: AX=5FB3h,INT 2F/AX=1123h,INT 2F/AX=1221h
--------D-2161-------------------------------
INT 21 - DOS 3+ - UNUSED
AH = 61h
Return: AL = 00h
Note: this function does nothing and returns immediately
--------O-2161--BP6467-----------------------
INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
AH = 61h
BP = 6467h ("dg")
AL = function
00h list
01h add
02h delete
BX = drive number
CX = size of buffer
SI = type (0002h JOIN, 0003h SUBST)
ES:DI -> buffer
Return: ???
Notes: used by JOIN and SUBST to communicate with the OS/2 file system
also supported by OS/2 v2.0+ Virtual DOS Machines
--------D-2162-------------------------------
INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
AH = 62h
Return: BX = segment of PSP for current process
Notes: under DOS 3+, this function does not use any of the DOS-internal stacks
and may thus be called at any time, even during another INT 21h call
the current PSP is not necessarily the caller's PSP
identical to the undocumented AH=51h
SeeAlso: AH=50h,AH=51h
--------D-216300-----------------------------
INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
AX = 6300h
Return: CF clear if successful
DS:SI -> lead byte table (see #0951)
CF set on error
AX = error code (01h) (see #0885 at AH=59h)
Notes: does not preserve any registers other than SS:SP
the US version of MS-DOS 3.30 treats this as an unused function,
setting AL=00h and returning immediately
SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh

Format of double-byte character set lead byte table entry:
Offset Size Description (Table 0951)
00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
...
N 2 BYTEs 00h,00h end flag
--------D-216300-----------------------------
INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
AX = 6300h
Return: AL = error code
00h successful
DS:SI -> DBCS table (see #0952)
all other registers except CS:IP and SS:SP destroyed
FFh not supported
Notes: probably identical to AH=63h/AL=00h for DOS 2.25
the US version of MS-DOS 3.30 treats this as an unused function,
setting AL=00h and returning immediately
the US version of DOS 4.0+ accepts this function, but returns an empty
list
SeeAlso: AX=6300h"DOS 2.25"

Format of DBCS table:
Offset Size Description (Table 0952)
00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
...
N 2 BYTEs 00h,00h end flag
--------D-216301-----------------------------
INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
AX = 6301h
DL = new mode
00h return only full characters on DOS keyboard input functions
01h return partially-formed (interim) characters also
Return: AL = status
00h successful
FFh invalid mode
Note: Novell DOS 7 simply stores DL in the caller's PSP (see #0603 at AH=26h)
SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
--------D-216302-----------------------------
INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
AX = 6302h
Return: AL = status
00h successful
DL = current input mode
00h return only full characters (clears interim flag)
01h return partial characters (sets interim flag)
FFh not supported
Note: Novell DOS 7 simply reads the value out of the caller's PSP, so it
can return values other than 00h or 01h if the last call to AX=6301h
used another value
SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
--------D-2164-------------------------------
INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
AH = 64h
AL = flag
00h (default) call device driver function 5 (non-dest read)
before INT 21/AH=01h,08h,0Ah
nonzero don't call driver function 5
Return: nothing (MS-DOS)
CF set, AX=error code??? (DR-DOS 5.0, which does not support this call)
Notes: this function is called by the DOS 3.3+ PRINT.COM
under MS-DOS, this function does not use any of the DOS-internal stacks
and may thus be called at any time, even during another DOS call
SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
--------O-2164--DX0000-----------------------
INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
AH = 64h
DX = 0000h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
SeeAlso: AH=64h/DX=0001h,INT 21/AH=4Bh
--------O-2164--DX0001-----------------------
INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
AH = 64h
DX = 0001h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0002h,INT 15/AH=12h/BH=05h
--------O-2164--DX0002-----------------------
INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
AH = 64h
DX = 0002h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
ES:DI -> 13-byte buffer for current title
Return: buffer filled (single 00h if title never changed)
Note: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0001h,INT 15/AH=12h/BH=05h
--------O-2164--DX0003-----------------------
INT 21 U - OS/2 v2.1 Virtual DOS Machine - GET LASTDRIVE
AH = 64h
DX = 0003h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
Return: AL = highest drive supported
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
used by WinOS2
not supported by OS/2 Warp 3.0, check list of lists instead (see #0840)
SeeAlso: AH=52h
--------O-2164--DX0004-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
AH = 64h
DX = 0004h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
Return: AX = number of entries in OS/2 JFT for VDM
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
because the OS/2 SFT can contain more than 255 entries
--------O-2164--DX0005-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
AH = 64h
DX = 0005h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
DI = DOS file handle
Return: AX = value of second flags word from OS/2 SFT entry for file
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
the OS/2 SFT has two flags words rather than DOS's one word, and this
function provides access to the word which is not present in DOS
--------O-2164--DX0006-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
AH = 64h
DX = 0006h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
ES:DI -> ASCIZ filespec
DS = base address for loading
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
this function is only supported by the kernel debugging version of
OS2KRNL
--------O-2164--DX0007-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
AH = 64h
DX = 0007h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
Return: AX = call gate address
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
of DOSKRNL
--------O-2164--DX0008-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
AH = 64h
DX = 0008h (function number)
CX = 636Ch (magic value, "cl")
BX = 0000h (indicates special request)
Return: DS:DX -> '$'-terminated message "Loading. Please wait."
Notes: if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
this function permits National Language Support for the initial message
displayed while WinOS2 starts a full-screen session
--------O-2164--CX636C-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
AH = 64h
CX = 636Ch ("cl")
BX = API ordinal (see #0953)
other registers as appropriate for API call
Return: as appropriate for API call
SeeAlso: AH=64h/BX=0025h,AH=64h/BX=00B6h,AH=64h/BX=00CBh

(Table 0953)
Values for OS/2 API ordinal:
0025h DOS32StartSession
0082h DosGetCP
00B6h DosQFSAttach
00BFh DosEditName
00CBh DosForceDelete
0144h Dos32CreateEventSem
0145h Dos32OpenEvenSem
0146h Dos32CloseEventSem
0147h Dos32ResetEventSem
0148h Dos32PostEventSem
0149h Dos32WaitEventSem
014Ah Dos32QueryEventSem
014Bh Dos32CreateMutexSem
014Ch Dos32OpenMutexSem
014Dh Dos32CloseMutexSem
014Eh Dos32RequestMutexSem
014Fh Dos32ReleaseMutexSem
0150h Dos32QueryMutexSem
0151h Dos32CreateMuxWaitSem
0152h Dos32OpenMuxWaitSem
0153h Dos32CloseMuxWaitSem
0154h Dos32WaitMuxWaitSem
0155h Dos32AddMuxWaitSem
0156h Dos32DeleteMuxWaitSem
0157h Dos32QueryMuxWaitSem
--------O-2164--BX0025-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DOS32StartSession
AH = 64h
BX = 0025h (API ordinal)
CX = 636Ch ("cl")
DS:SI -> STARTDATA structure (see #0954)
Return: AX = return code
SeeAlso: AH=64h/CX=636Ch,AH=64h/BX=00B6h

Format of OS/2 Virtual DOS Machine STARTDATA structure:
Offset Size Description (Table 0954)
00h WORD length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
02h WORD relation of new process to caller (00h independent, 01h child)
04h WORD fore/background (00h foreground, 01h background)
06h WORD trace options (00h-02h, 00h = no trace)
08h DWORD pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
0Ch DWORD pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
10h DWORD pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
14h DWORD "TermQ" (currently reserved, must be 00000000h)
18h DWORD pointer to environment (max 486 bytes) or 0000h:0000h
1Ch WORD inheritance (00h or 01h)
1Eh WORD session type
00h OS/2 session manager determines type (default)
01h OS/2 full-screen
02h OS/2 window
03h PM
04h VDM full-screen
07h VDM window
20h DWORD pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
24h DWORD "PgmHandle" (currently reserved, must be 00000000h)
28h WORD "PgmControl"
2Ah WORD initial column
2Ch WORD initial row
2Eh WORD initial width
30h WORD initial height
32h WORD reserved (0)
34h DWORD "ObjectBuffer" (currently reserved, must be 00000000h)
38h DWORD "ObjectBufferLen" (currently reserved, must be 00000000h)
--------O-2164--BX00B6-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosQFSAttach
AH = 64h
BX = 00B6h (API ordinal)
CX = 636Ch (magic value "cl")
DS = user's data segment
ES:DI -> FSQAttachStruc (see #0955)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX = 0000h
data buffer filled
SeeAlso: AH=64h/CX=636Ch

Format of OS/2 Virtual DOS Machine FSQAttachStruc:
Offset Size Description (Table 0955)
00h DWORD reserved
04h DWORD pointer to the offset of the data buffer length
08h DWORD pointer to the offset of the data buffer
0Ch WORD FSA Info level
0Eh WORD ordinal index into table
10h DWORD pointer to the offset of the device name
Notes: The segment value of the buffer, buffer length, and device
name MUST all be the same. It is defined on entry in the DS
register. The details of each info level are defined in the
OS/2 CP Reference.
--------O-2164--BX00CB-----------------------
INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosForceDelete
AH = 64h
BX = 00CBh (API ordinal)
CX = 636Ch (magic value "cl")
DS:DX -> ASCIZ filename
Return: CF clear if successful
AX destroyed
CF set on error
AX = error code (02h,03h,05h) (see #0885 at AH=59h)
Desc: delete a file without saving it to the undelete directory
SeeAlso: AH=41h,AH=64h/CX=636Ch
--------D-2165-------------------------------
INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
AH = 65h
AL = info ID
01h get general internationalization info
02h get pointer to uppercase table
04h get pointer to filename uppercase table
05h get pointer to filename terminator table
06h get pointer to collating sequence table
07h (DOS 4+) get pointer to Double-Byte Character Set table
BX = code page (FFFFh=global code page)
DX = country ID (FFFFh=current country)
ES:DI -> country information buffer (see #0956)
CX = size of buffer (>= 5)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
CX = size of country information returned
ES:DI -> country information
Notes: AL=05h appears to return same info for all countries and codepages; it
has been documented for DOS 5+, but was undocumented in ealier
versions
NLSFUNC must be installed to get info for countries other than the
default
subfunctions 02h and 04h are identical under OS/2
SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh

Format of country information:
Offset Size Description (Table 0956)
00h BYTE info ID
---if info ID = 01h---
01h WORD size
03h WORD country ID
05h WORD code page
07h 34 BYTEs country-dependent info (see AH=38h)
---if info ID = 02h---
01h DWORD pointer to uppercase table (see #0957)
---if info ID = 04h---
01h DWORD pointer to filename uppercase table (see #0958)
---if info ID = 05h---
01h DWORD pointer to filename character table (see #0959)
---if info ID = 06h---
01h DWORD pointer to collating table (see #0960)
---if info ID = 07h (DOS 4+)---
01h DWORD pointer to DBCS lead byte table (see #0961)

Format of uppercase table:
Offset Size Description (Table 0957)
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh

Format of filename uppercase table:
Offset Size Description (Table 0958)
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh

Format of filename terminator table:
Offset Size Description (Table 0959)
00h WORD table size (not counting this word)
02h BYTE ??? (01h for MS-DOS 3.30-6.00)
03h BYTE lowest permissible character value for filename
04h BYTE highest permissible character value for filename
05h BYTE ??? (00h for MS-DOS 3.30-6.00)
06h BYTE first excluded character in range \ all characters in this
07h BYTE last excluded character in range / range are illegal
08h BYTE ??? (02h for MS-DOS 3.30-6.00)
09h BYTE number of illegal (terminator) characters
0Ah N BYTEs characters which terminate a filename: ."/\[]:|<>+=;,
Note: partially documented for DOS 5+, but undocumented for earlier versions

Format of collating table:
Offset Size Description (Table 0960)
00h WORD table size
02h 256 BYTEs values used to sort characters 00h to FFh

Format of DBCS lead byte table:
Offset Size Description (Table 0961)
00h WORD length
02h 2N BYTEs start/end for N lead byte ranges
WORD 0000h (end of table)
--------D-2165-------------------------------
INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
AH = 65h
AL = function
20h capitalize character
DL = character to capitalize
Return: DL = capitalized character
21h capitalize string
DS:DX -> string to capitalize
CX = length of string
22h capitalize ASCIZ string
DS:DX -> ASCIZ string to capitalize
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
Note: these calls have been documented for DOS 5+, but were undocumented in
DOS 4.x.
--------D-216523-----------------------------
INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
AX = 6523h
DL = character
DH = second character of double-byte character (if applicable)
Return: CF set on error
CF clear if successful
AX = type
00h no
01h yes
02h neither yes nor no
--------D-2165-------------------------------
INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
AH = 65h
AL = function
A0h capitalize filename character
DL = character to capitalize
Return: DL = capitalized character
A1h capitalize counted filename string
DS:DX -> filename string to capitalize
CX = length of string
A2h capitalize ASCIZ filename
DS:DX -> ASCIZ filename to capitalize
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
Note: nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
pointer depending on the high bit of AL, but doesn't clear the
bit before branching by function number).
--------D-216601-----------------------------
INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
AX = 6601h
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
BX = active code page (see #0962)
DX = system code page (see #0962)
SeeAlso: AX=6602h
--------D-216602-----------------------------
INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
AX = 6602h
BX = active code page (see #0962)
DX = system code page (active page at boot time)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX = EB41h (Novell NWDOS v7.0 when NLSFUNC not installed and
request was for previously-active code page)
SeeAlso: AX=6601h,INT 2F/AX=14FFh

(Table 0962)
Values for code page:
437 US
850 Multilingual
852 Slavic/Latin II (DOS 5+)
857 Turkish
860 Portugal
861 Iceland
863 Canada (French)
865 Norway/Denmark
--------D-2167-------------------------------
INT 21 - DOS 3.3+ - SET HANDLE COUNT
AH = 67h
BX = size of new file handle table for process
Return: CF clear if successful
CF set on error
AX = error code (see #0885 at AH=59h)
Desc: adjust the size of the per-process open file table, thus raising or
lowering the limit on the number of files the caller can open
simultaneously
Notes: if BX <= 20, no action is taken if the handle limit has not yet been
increased, and the table is copied back into the PSP if the limit
is currently > 20 handles
for file handle tables of > 20 handles, DOS 3.30 never reuses the
same memory block, even if the limit is being reduced; this can lead
to memory fragmentation as a new block is allocated and the existing
one freed
only the first 20 handles are copied to child processes in DOS 3.3-6.0
increasing the file handles here will not, in general, increase the
number of files that can be opened using the runtime library of a
high-level language such as C
Novell DOS 7 reportedly terminates the calling program if the JFT is
being reduced in size and there are any open file handles beyond
the portion of the JFT being retained
BUGS: the original release of DOS 3.30 allocates a full 64K for the handle
table on requests for an even number of handles
DR-DOS 3.41 and 5.0 will lose track of any open file handles beyond
the portion of the JFT retained after the call; MS-DOS will indicate
error 04h if any of the JFT entries to be removed are open
SeeAlso: AH=26h,AH=86h
--------D-2168-------------------------------
INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
AH = 68h
BX = file handle
Return: CF clear if successful
all data still in DOS disk buffers is written to disk immediately,
and the file's directory entry is updated
CF set on error
AX = error code (see #0885 at AH=59h)
SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
--------D-2169-------------------------------
INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
AH = 69h
AL = subfunction
00h get serial number
01h set serial number
BL = drive (0=default, 1=A, 2=B, etc)
BH = info level (00h only for DOS; OS/2 allows other levels)
DS:DX -> disk info (see #0963)
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX destroyed
(AL = 00h) buffer filled with appropriate values from extended BPB
(AL = 01h) extended BPB on disk set to values from buffer
Notes: does not generate a critical error; all errors are returned in AX
error 0005h given if no extended BPB on disk
does not work on network drives (error 0001h)
buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
extended BPB on disk
this function is supported under Novell NetWare versions 2.0A through
3.11; the returned serial number is the one a DIR would display,
the volume label is the NetWare volume label, and the file system
is set to "FAT16".
the serial number is computed from the current date and time when the
disk is created; the first part is the sum of the seconds/hundredths
and month/day, the second part is the sum of the hours/minutes and
year
the volume label which is read or set is the one stored in the extended
BPB on disks formatted with DOS 4.0+, rather than the special root
directory entry used by the DIR command in COMMAND.COM (use AH=11h
to find that volume label)
SeeAlso: AX=440Dh

Format of disk info:
Offset Size Description (Table 0963)
00h WORD info level (zero)
02h DWORD disk serial number (binary)
06h 11 BYTEs volume label or "NO NAME " if none present
11h 8 BYTEs (AL=00h only) filesystem type--string "FAT12 " or "FAT16 "
--------O-2169-------------------------------
INT 21 - DR-DOS 5.0 - NULL FUNCTION
AH = 69h
Return: AL = 00h
SeeAlso: AH=18h
--------v-216969-----------------------------
INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
AX = 6969h
Return: AX = 0666h if resident
SeeAlso: AX=58CCh,AH=76h"VIRUS"
--------d-2169FFDX0000-----------------------
INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
AX = 69FFh
DX = 0000h
BX = CB00h (magic value)
Return: ES:BX -> CUBITR.EXE handler for INT 21
Note: the installation check consists of testing that the first eight bytes
at the returned interrupt handler are EBh 07h "CUBITR" (a short
jump around the signature followed by the signature); the byte
following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
is active (01h) or disabled (00h)
SeeAlso: AX=69FFh/DX=CFBFh
Index: installation check;CUBIT
--------d-2169FFDXCFBF-----------------------
INT 21 U - CUBIT v4.00 - UNINSTALL
AX = 69FFh
DX = CFBFh
CX = EFCFh
BX = CB00h (magic value)
Return: ES:BX -> CUBITR.EXE handler for INT 21
CX = status
2020h successful
2222h failed
Note: if DX is neither 0000h nor CFBFh on entry, some other code is executed
SeeAlso: AX=69FFh/DX=0000h
--------D-216A-------------------------------
INT 21 U - DOS 4+ - COMMIT FILE
AH = 6Ah
BX = file handle
Return: CF clear if successful
AH = 68h
CF set on error
AX = error code (06h) (see #0885 at AH=59h)
Note: identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
in DOS 4.x
SeeAlso: AH=68h
--------D-216B-------------------------------
INT 21 U - DOS 4.0 internal - IFS IOCTL
AH = 6Bh
AL = subfunction
00h ???
DS:SI -> Current Directory Structure???
CL = drive (1=A:)
01h ???
DS:SI -> ???
CL = file handle???
02h ???
DS:SI -> Current Directory Structure???
DI = ???
CX = drive (1=A:)
Return: CF set on error
AX = error code (see #0885 at INT 21/AH=59h)
CF clear if successful
Note: passed through to INT 2F/AX=112Fh with AX on top of stack
SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
--------D-216B-------------------------------
INT 21 U - DOS 5+ - NULL FUNCTION
AH = 6Bh
Return: AL = 00h
Note: this function does nothing and returns immediately
SeeAlso: AH=6Bh"DOS 4"
--------D-216C00-----------------------------
INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
AX = 6C00h
BL = open mode as in AL for normal open (see also AH=3Dh)
bit 7: inheritance
bits 4-6: sharing mode
bit 3 reserved
bits 0-2: access mode
BH = flags
bit 6 = auto commit on every write (see also AH=68h)
bit 5 = return error rather than doing INT 24h
CX = create attribute (see #0965)
DL = action if file exists/does not exist (see #0966)
DH = 00h (reserved)
DS:SI -> ASCIZ file name
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX = file handle
CX = status (see #0964)
Notes: the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
and DL=12h
DR-DOS reportedly does not support this function and does not return
an "invalid function call" error when this function is used.
the documented bits of BX are stored in the SFT when the file is opened
(see #0853,#0854)
BUG: this function has bugs (at least in DOS 5.0 and 6.2) when used with
drives handled via the network redirector (INT 2F/AX=112Eh):
- CX (attribute) is not passed to the redirector if DL=11h,
- CX does not return the status, it is returned unchanged because
DOS does a PUSH CX/POP CX when calling the redirector.
SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AH=71h,INT 2F/AX=112Eh

(Table 0964)
Values for extended open function status:
01h file opened
02h file created
03h file replaced

Bitfields for file create attribute:
Bit(s) Description (Table 0965)
6-15 reserved
5 archive
4 reserved
3 volume label
2 system
1 hidden
0 readonly

Bitfields for action:
Bit(s) Description (Table 0966)
7-4 action if file does not exist
0000 fail
0001 create
3-0 action if file exists
0000 fail
0001 open
0010 replace/open
--------O-216C01-----------------------------
INT 21 U - OS/2 v2.0 - "DosOpen2"
AX = 6C01h
BL = open mode as in AL for normal open (see also AH=3Dh)
bit 7: inheritance
bits 4-6: sharing mode
bit 3 reserved
bits 0-2: access mode
BH = flags
bit 6 = auto commit on every write (see also AH=68h)
bit 5 = return error rather than doing INT 24h
CX = create attribute (see #0965)
DL = action if file exists/does not exist (see #0966)
DH = 00h (reserved)
DS:SI -> ASCIZ file name
ES:DI -> EAOP structure
Return: CF set on error
AX = error code (see #0885 at AH=59h)
CF clear if successful
AX = file handle
CX = status (see #0964)
Note: this function is virtually identical to AX=6C00h, but supports OS/2's
extended attributes
SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
--------D-216D-------------------------------
INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
AH = 6Dh
DS:DX -> ASCIZ program name (may contain wildcrds)
Return: CF clear if found
[DTA] = ROM search structure (see #0967)
CF set if not found
AX = error code
0002h name not found in ROM
0003h name contains colon or backslash
Notes: the '*' wildcard matches all remaining characters in a ROM program's
name; any following characters in the search mask are ignored up to
another asterisk, which must be matched by an asterisk in the
found program's name.
the search mask and program names may contain multiple periods
SeeAlso: AH=1Ah,AH=4Eh,AH=6Eh,AX=6F00h,AX=6F02h

Format of ROM search structure:
Offset Size Description (Table 0967)
00h 13 BYTEs ASCIZ name of found ROM program
0Dh DWORD address at which to resume search (do not modify)
11h var ASCIZ search mask passed in (do not modify)
--------O-216D-------------------------------
INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
AH = 6Dh
???
Return: ???
Note: also supported by OS/2 v2.0+ Virtual DOS Machines
SeeAlso: AH=39h
--------O-216D-------------------------------
INT 21 U - Novell DOS 7 - NOP
AH = 6Dh
Return: AX = 0000h
Note: this function invokes the same code as other NOP functions such as
AH=18h and AH=61h
--------D-216E-------------------------------
INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
AH = 6Eh
[DTA] = result of previous FindFirst ROM (see AH=6Dh)
Return: CF clear if found
[DTA] = updated ROM search structure (see #0967)
CF set if not found
AX = 0012h (no more matches)
SeeAlso: AH=4Fh,AH=6Dh
--------O-216E-------------------------------
INT 21 U - OS/2 v1.x FAPI - "DosENumAttrib"
AH = 6Eh
???
Return: ???
Note: also supported by OS/2 v2.0+ Virtual DOS Machines
SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
--------O-216F-------------------------------
INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
AH = 6Fh
???
Return: ???
Note: also supported by OS/2 v2.0+ Virtual DOS Machines
SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
--------D-216F00-----------------------------
INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
AX = 6F00h
Return: CF clear
AL = 00h
BX = current ROM scan starting segment
SeeAlso: AH=6Dh,AX=6F01h,AX=6F02h
--------D-216F01-----------------------------
INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
AX = 6F01h
BX = new ROM scan starting address
Return: CF clear
AL = 00h
SeeAlso: AX=6F00h,AX=6F03h
--------D-216F02-----------------------------
INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
AX = 6F02h
ES:BX -> buffer for exclusion region list (see #0968)
Return: CF clear
AL = 00h
ES:BX = 0000h:0000h on error, unchanged if buffer filled
SeeAlso: AX=6F00h,AX=6F03h

Format of ROM exclusion region list:
Offset Size Description (Table 0968)
00h WORD number of entries
02h 2N WORDs start/end segments of N excluded regions
--------D-216F03-----------------------------
INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
AX = 6F03h
DS:DX -> new exclusion region list (see #0968)
Return: CF clear
AL = 00h
Notes: DOS saves only the pointer and assumes that the contents of the list
are never changed, and that regions do not overlap
if AL > 03h on entry, DOS returns CF set/AL=01h
SeeAlso: AX=6F01h,AX=6F02h
----------217070BX6060-----------------------
INT 21 - PCW Weather Card interface - GET DATA SEGMENT
AX = 7070h
BX = 6060h
CX = 7070h
DX = 7070h
SI = 7070h
DI = 7070h
Return: AX = segment of data structure (see #0969)
Notes: the data structure is at offset 516 from this segment
the update byte is at offset 514 from this segment. Updates are
once per second while this byte is nonzero and it is decremented
once per second. While this byte is 0 updates are once per minute.
SeeAlso: AX=7070h/BX=7070h

Format of PCW Weather Card data structure:
Offset Type Description (Table 0969)
00h WORD hour
02h WORD minute
04h WORD second
06h WORD day
08h WORD month
0Ah WORD year
0Ch WORD ???
0Eh WORD relative barometric pressure (in 1/100 inches)
10h WORD ???
12h WORD ???
14h WORD temperature 1 (in 1/10 degrees F)
16h WORD temperature 1 lowest (in 1/10 degrees F)
18h WORD temperature 1 highest (in 1/10 degrees F)
1Ah WORD temperature 2 (in 1/10 degrees F)
1Ch WORD temperature 2 lowest (in 1/10 degrees F)
1Eh WORD temperature 2 highest (in 1/10 degrees F)
20h WORD wind speed (in MPH)
22h WORD average of 60 wind speed samples (in MPH)
24h WORD highest wind speed (in MPH)
26h WORD wind chill factor (in 1/10 degrees F)
28h WORD lowest wind chill factor (in 1/10 degrees F)
2Ah WORD ???
2Ch WORD wind direction (in degrees)
2Eh WORD accumulated daily rainfall (in 1/10 inches)
30h WORD accumulated annual rainfall (in 1/10 inches)
----------217070BX7070-----------------------
INT 21 - PCW Weather Card interface - INSTALLATION CHECK
AX = 7070h
BX = 7070h
CX = 7070h
DX = 7070h
SI = 7070h
DI = 7070h
Return: AX = 0070h
BX = 0070h
CX = 0070h
DX = 0070h
SI = 0070h
DI = 0070h
SeeAlso: AX=7070h/BX=6060h,AX=8080h
--------D-2171-------------------------------
INT 21 - DOS 7 (Chicago) - LONG FILENAME FUNCTIONS
AH = 71h
AL = function
39h create directory
3Ah remove directory
3Bh set current directory
41h delete file
43h get file attributes (BL=00h), set file attributes (BL=01h)
47h get current directory
4Eh find first file
4Fh find next file
56h move (rename) file
6Ch create/open file
Return: CF set on error
AX = error code
7100h if function not supported
CF clear if successful
other registers as for corresponding "old" DOS function
Notes: if error 7100h is returned, the old-style function should be called
AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
when the search is complete, AH=72h must be called to terminate
the search
SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AH=43h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch
SeeAlso: AH=72h
--------D-2172-------------------------------
INT 21 - DOS 7 (Chicago) - "FindClose" - TERMINATE DIRECTORY SEARCH
AH = 72h
details not yet available
Note: this function must be called after starting a search with AX=714Eh,
to indicate that the search handle returned by that function will
no longer be used
SeeAlso: AH=4Eh,AH=71h
--------v-2176-------------------------------
INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
AH = 76h
Return: AL = 48h if resident
SeeAlso: AX=6969h,AX=7700h"VIRUS"
--------v-217700-----------------------------
INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
AX = 7700h
Return: AX = 0920h if resident
SeeAlso: AH=76h,AX=7BCEh,AH=7Fh
--------V-217734-----------------------------
INT 21 U - SCROLLit v1.7 - INSTALLATION CHECK
AX = 7734h
Return: DX = 3477h if installed
AX = segment of resident code
Program: ScrollIt is a shareware backscroll utility by Bromfield Software
Products
--------U-217761-----------------------------
INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
AX = 7761h ('wa')
Return: AX = 6177h
Note: WATCH.COM is part of the "TSR" package by TurboPower Software
SeeAlso: INT 16/AX=7761h
----------217BCE-----------------------------
INT 21 - VIRUS - "Whisper"/"Taipan" - INSTALLATION CHECK???
AX = 7BCEh
Return: ???
SeeAlso: AX=7700h,AH=7Fh"VIRUS"
--------v-217F-------------------------------
INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
AH = 7Fh
Return: AH = 80h if resident
SeeAlso: AX=7BCEh,AH=83h"VIRUS"
--------D-2180-------------------------------
INT 21 - European MS-DOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
AH = 80h
CX = mode
0000h place child in zombie mode on exit to preserve exit code
0001h discard child process and exit code on termination
DS:DX -> ASCIZ full program name
ES:BX -> parameter block (as for AX=4B00h)
Return: CF clear if successful
AX = Command Subgroup ID (CSID)
CF set on error
AX = error code (see #0885 at AH=59h)
Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
by several other European OEMs; its release falls between mainstream
versions 3.2 and 3.3
Desc: asynchronously execute a program, creating a new process for it
Notes: this function is called by the DETACH command
there is a system-wide limit of 32 processes
the CSID is used to identify all processes that have been spawned by
a given process, whether directly or indirectly
programs to be run in the background must use the new executable format
(see #0809 at AH=4Bh)
background processes may only perform asynchronous (background) EXECs,
either this function or AX=4B04h
background processes may execute INT 11, INT 12, INT 21, INT 2A, and
INT 2F at any time; they may execute INT 10 and INT 16 only while
they have opened a popup screen via INT 2F/AX=1401h; no other
interrupts may be executed from the background
background processes may not use drive B: or overlay their code
segments
see AX=8700h for an installation check
the "NE" new executable format made its first appearance in European
MS-DOS 4.0
SeeAlso: AH=4Bh,AH=87h,INT 2F/AX=1400h"POPUP"
----------218080-----------------------------
INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
AX = 8080h
Return: ???
SeeAlso: AX=7070h/BX=7070h
--------D-2181-------------------------------
INT 21 - European MS-DOS 4.0 - "FREEZE" - STOP A PROCESS
AH = 81h
BX = flag (00h freeze command subtree, 01h only specified process)
CX = Process ID of head of command subtree
Return: CF clear if successful
CF set on error
AX = error code (no such process)
Desc: temporarily suspend a process or a process and all of its children
Note: if BX=0001h, this call will not return until the process is actually
frozen, which may not be until after it unblocks from an I/O
operation
SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
--------D-2182-------------------------------
INT 21 - European MS-DOS 4.0 - "RESUME" - RESTART A PROCESS
AH = 82h
BX = flag (00h resume command subtree, 01h only specified process)
CX = Process ID of head of command subtree
Return: CF clear if successful
CF set on error
AX = error code (no such process)
Desc: restart a previously-suspended process or a process and all of its
children
SeeAlso: AH=81h,INT 15/AX=101Eh
--------D-2183-------------------------------
INT 21 - European MS-DOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
AH = 83h
AL = function
00h get size
01h set new size
BX = new size in paragraphs
Return: CF clear if successful
BX = current size (function 00h) or old size (function 01h)
CF set on error
AX = error code (01h,07h,0Dh)(see #0885 at AH=59h)
Desc: specify or determine how much memory may be allocated by the foreground
process
Note: if the partition size is set to 0000h, no partition management is done
and all memory allocation is compatible with DOS 3.2.
the partition size can be changed regardless of what use is being made
of the changed memory; subsequent allocations will follow the
partition rules (foreground processes may allocate only foreground
memory; background processes allocate background memory first, then
foreground memory)
SeeAlso: AH=48h,AH=4Ah
--------v-2183-------------------------------
INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
AH = 83h
Return: DX = 1990h if resident
SeeAlso: AH=76h,AH=84h"VIRUS"
--------v-2184-------------------------------
INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
AH = 84h
Return: DX = 1990h if resident
BH = version number (major in high nybble, minor in low)
SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
--------D-218400-----------------------------
INT 21 - European MS-DOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
AX = 8400h
BX = size in bytes (0000h = 65536)
CX = flags
bit 6: zero-initialize segment
DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
Return: CF clear if successful
AX = segment address of shared memory global object
CF set on error
AX = error code (06h,08h) (see #0885 at AH=59h)
Desc: create an area of memory which may be accessed by multiple processes
Notes: shared memory objects are created as special files (thus the
restriction on the name)
on successful creation, the reference count is set to 1
SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
--------D-218401-----------------------------
INT 21 - European MS-DOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
AX = 8401h
CX = flags
bit 7: writable segment (ignored by MS-DOS 4.0)
DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
Return: CF clear if successful
AX = segment address of shared memory global object
CX = size in bytes
CF set on error
AX = error code (invalid name)
Desc: get address of a previously-created area of memory which may be
accessed by multiple processes
Note: this call increments the reference count for the shared memory area
SeeAlso: AX=8400h,AX=8402h
--------D-218402-----------------------------
INT 21 - European MS-DOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
AX = 8402h
BX = handle (segment address of shared memory object)
Return: CF clear if successful
CF set on error
AX = error code (no such name)
Desc: indicate that the specified area of shared memory will no longer be
used by the caller
Note: the reference count is decremented and the shared memory area is
deallocated if the new reference count is zero
SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
--------D-2185-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 85h
???
Return: ???
--------D-2186-------------------------------
INT 21 - European MS-DOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
AH = 86h
BX = total number of file handles in new table
Return: CF clear if successful
CF set on error
AX = error code (06h,08h) (see #0885 at AH=59h)
Desc: adjust the size of the per-process open file table, thus raising or
lowering the limit on the number of files the caller can open
simultaneously
Notes: any currently-open files are copied to the new table
if the table is increased beyond the default 20 handles, only the
first 20 will be inherited by child processes
error 06h is returned if the requested number of handles exceeds
system limits or would require closing currently-open files
SeeAlso: AH=26h,AH=67h
--------D-2187-------------------------------
INT 21 - European MS-DOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
AH = 87h
Return: AX = PID
BX = parent process's PID
CX = Command Subgroup ID (CSID)
Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
by several other European OEMs; its release falls between mainstream
versions 3.2 and 3.3
Desc: determine an identifier by which to access the calling process
Notes: called by MS C v5.1 getpid() function
this function apparently must return AX=0001h for INT 21/AH=80h to
succeed
one possible check for European MS-DOS 4.0 is to issue this call with
AL=00h and check whether AL is nonzero on return
SeeAlso: AH=30h,AH=62h,AH=80h
Index: installation check;European MS-DOS 4.0
--------D-2188-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 88h
???
Return: ???
SeeAlso: AH=87h
--------D-2189-------------------------------
INT 21 - European MS-DOS 4.0 - SLEEP
AH = 89h
CX = time in milliseconds or 0000h to give up time slice
Return: CF clear if successful
CX = 0000h
CF set on error
AX = error code (interrupted system call)
CX = sleep time remaining
Desc: suspend the calling process for the specified duration
Notes: the sleep interval is rounded up to the next higher increment of the
scheduler clock, and may be extended further if other processes are
running
this call may be interrupted by signals (see AH=8Dh)
reportedly called by Microsoft C 4.0 startup code
background processes have higher priority than the foreground process,
and should thus periodically yield the CPU
SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
--------v-2189-------------------------------
INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
AH = 89h
Return: AX = 0123h if resident
SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
--------D-218A-------------------------------
INT 21 - European MS-DOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
AH = 8Ah
BL = range (00h command subtree, 01h any child)
BH = suspend flag
00h suspend if children exist but none are dead
01h return if no dead children
CX = Process ID of head of command subtree
Return: CF clear if successful
AH = termination type (see #0970)
AL = return code from child or aborting signal
BX = PID of child (0000h if no dead children)
CF set on error
AX = error code (no child,interrupted system call)
Desc: get return code from an asynchronously-executed child program,
optionally waiting if no return code is available
SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh

(Table 0970)
Values for termination type:
00h normal termination
01h aborted by Control-C
02h aborted by I/O error
03h terminate and stay resident
04h aborted by signal
05h aborted by program error
--------D-218B-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 8Bh
???
Return: ???
SeeAlso: AH=87h
--------D-218C-------------------------------
INT 21 - European MS-DOS 4.0 - SET SIGNAL HANDLER
AH = 8Ch
AL = signal number (see #0971)
BL = action (see #0972)
DS:DX -> signal handler (see #0973)
Return: CF clear if successful
AL = previous action
ES:BX -> previous signal handler
CF set on error
AX = error code (01h,invalid SigNumber or Action)
(see #0885 at AH=59h)
Desc: set the routine which will be invoked on a number of exceptional
conditions
Note: all signals will be sent to the most recently installed handler
SeeAlso: AH=8Dh

(Table 0971)
Values for European MS-DOS 4.0 signal number:
01h SIGINTR Control-C or user defined interrupt key
08h SIGTERM program termination
09h SIGPIPE broken pipe
0Dh SIGUSER1 reserved for user definition
0Eh SIGUSER2 reserved for user definition

(Table 0972)
Values for signal action:
00h SIG_DFL terminate process on receipt
01h SIG_IGN ignore signal
02h SIG_GET signal is accepted
03h SIG_ERR sender gets error
04h SIG_ACK acknowledge received signal and clear it, but don't
change current setting

(Table 0973)
Values signal handler is called with:
AL = signal number (see #0971)
AH = signal argument
Return: RETF, CF set: terminate process
RETF, CF clear, ZF set: abort any interrupted system call with an error
RETF, CF clear, ZF clear: restart any interrupted system call
IRET: restart any interrupted system call
Note: the signal handler may also perform a nonlocal GOTO by resetting the
stack pointer and jumping; before doing so, it should dismiss the
signal by calling this function with BL=04h
--------D-218D-------------------------------
INT 21 - European MS-DOS 4.0 - SEND SIGNAL
AH = 8Dh
AL = signal number (see #0971)
BH = signal argument
BL = action
00h send to entire command subtree
01h send only to specified process
DX = Process ID
Return: CF clear if successful
CF set on error
AX = error code (01h,06h)(see #0885 at AH=59h)
Desc: invoke the exceptional-condition handler for the specified process
Note: error 06h may be returned if one or more of the affected processes
have an error handler for the signal
SeeAlso: AH=8Ch
--------D-218E00BH00-------------------------
INT 21 - European MS-DOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
AX = 8E00h
BH = 00h
BL = action
00h set priority for command subtree
01h set priority for specified process only
CX = Process ID
DH = 00h
DL = change in priority (00h to get priority)
Return: CF clear if successful
DL = process priority
DH destroyed
CF set on error
AX = error code (01h,no such process)(see #0885 at AH=59h)
Desc: specify or determine the execution priority of the specified process
or the process and all of its children
SeeAlso: AH=81h
--------D-218F-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 8Fh
???
Return: ???
SeeAlso: AH=87h
--------D-2190-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 90h
???
Return: ???
SeeAlso: AH=87h
--------v-2190-------------------------------
INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
AH = 90h
Return: AH = 01h if resident
SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
--------D-2191-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 91h
???
Return: ???
SeeAlso: AH=87h
--------D-2192-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 92h
???
Return: ???
SeeAlso: AH=87h
--------D-2193-------------------------------
INT 21 - European MS-DOS 4.0 - "PIPE" - CREATE A NEW PIPE
AH = 93h
CX = size in bytes
Return: CF clear if successful
AX = read handle
BX = write handle
CF set on error
AX = error code (08h) (see #0885 at AH=59h)
Desc: create a communications channel which may be used for interprocess
data and command exchanges
SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
--------D-2194-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 94h
???
Return: ???
SeeAlso: AH=87h
--------D-2195-------------------------------
INT 21 - European MS-DOS 4.0 - HARD ERROR PROCESSING
AH = 95h
AL = new state
00h enabled
01h disabled, automatically fail hard errors
Return: AX = previous setting
Desc: specify whether hard (critical) errors should automatically fail the
system call or invoke an INT 24
SeeAlso: INT 24
--------D-2196-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 96h
???
Return: ???
--------D-2197-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 97h
???
Return: ???
--------v-219753-----------------------------
INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
AX = 9753h
Return: never (executes original program) if virus resident
SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
--------D-2198-------------------------------
INT 21 U - European MS-DOS 4.0 - ???
AH = 98h
???
Return: ???
--------D-2199-------------------------------
INT 21 u - European MS-DOS 4.0 - "PBLOCK" - BLOCK A PROCESS
AH = 99h
DS:BX -> memory location to block on
CX = timeout in milliseconds
DH = nonzero if interruptable
Return: CF clear if awakened by event
AX = 0000h
CF set if unusual wakeup
ZF set if timeout, clear if interrupted by signal
AX = nonzero
Desc: suspend calling process until another process sends a "restart" signal
or a timeout occurs
SeeAlso: AH=9Ah,INT 2F/AX=0802h
--------D-219A-------------------------------
INT 21 u - European MS-DOS 4.0 - "PRUN" - UNBLOCK A PROCESS
AH = 9Ah
DS:BX -> memory location processes may have blocked on
Return: AX = number of processes awakened
ZF set if no processes awakened
Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
by several other European OEMs; its release falls between mainstream
versions 3.2 and 3.3
Desc: restart all processes waiting for the specified "restart" signal
SeeAlso: AH=99h,INT 2F/AX=0802h
--------I-21A0-------------------------------
INT 21 - Attachmate Extra! - GET 3270 DISPLAY STATE
AH = A0h
Return: AL = display status (see #0974)
BX = host window status (see #0975)
Program: Attachmate Extra! is a 3270 emulator by Attachmate Corporation
SeeAlso: AH=A1h

Bitfields for Attachmate Extra! display status:
Bit(s) Description (Table 0974)
7 0=windowed, 1=enlarged
6-3 current screen profile number 0-9
2-0 active window number (0=PC, 1-4=host B-E, 5-6=notepad F-G)

Bitfields for host window status:
Bit(s) Description (Table 0975)
15 reserved
14 0=host E window installed, 1=not
13 0=host E terminal on, 1=off
12 0=host E window displayed, 1=not
11 reserved
10 0=host D window installed, 1=not
9 0=host D terminal on, 1=off
8 0=host D window displayed, 1=not
7 reserved
6 0=host C window installed, 1=not
5 0=host C terminal on, 1=off
4 0=host C window displayed, 1=not
3 reserved
2 0=host B window installed, 1=not
1 0=host B terminal on, 1=off
0 0=host B window displayed, 1=not
--------I-21A1-------------------------------
INT 21 - Attachmate Extra! - SET 3270 DISPLAY STATE
AH = A1h
AL = new display status byte (see #0974)
SeeAlso: AH=A0h,AH=A2h
--------v-21A1D5-----------------------------
INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
AX = A1D5h
Return: AX = 900Dh if resident
SeeAlso: AX=9753h,AX=A55Ah
--------I-21A2-------------------------------
INT 21 - Attachmate Extra! - SET HOST WINDOW STATE
AH = A2h
AL = new host window status byte (see #0976)
SeeAlso: AH=A1h

Bitfields for Attachmate Extra! host window status:
Bit(s) Description (Table 0976)
7 0=power off, 1=power on
6 0=not installed, 1=installed
5-3 reserved
2-0 window number 1-4=host B-E
--------I-21A3-------------------------------
INT 21 - Attachmate Extra! - SEND KEYSTROKES TO HOST WINDOW
AH = A3h
AL = window number (1-4=host B-E)
CX = 0001h
DS:BX -> keystroke buffer
DL = zero if keystroke buffer contains host function code (see #0977),
non-zero if keystroke buffer contains ASCII character
Return: CX = zero if character sent, non-zero if not
BX incremented if CX=0

(Table 0977)
Values for Attachmate Extra! host function code:
00h=reserved 10h=PF16 20h=Clear 30h=SysReq
01h=PF1 11h=PF17 21h=Print 31h=ErInp
02h=PF2 12h=PF18 22h=Left 32h=ErEof
03h=PF3 13h=PF19 23h=Right 33h=Ident
04h=PF4 14h=PF20 24h=Up 34h=Test
05h=PF5 15h=PF21 25h=Down 35h=Reset
06h=PF6 16h=PF22 26h=Home 36h=DevCncl
07h=PF7 17h=PF23 27h=Fast Left 37h=Dup
08h=PF8 18h=PF24 28h=Fast Right 38h=FldMark
09h=PF9 19h=Alt on 29h=Bksp 39h=Enter
0Ah=PF10 1Ah=Alt off 2Ah=Insert 3Ah=CrSel
0Bh=PF11 1Bh=Shift on 2Bh=Delete
0Ch=PF12 1Ch=Shift off 2Ch=Backtab
0Dh=PF13 1Dh=PA1 2Dh=Tab
0Eh=PF14 1Eh=PA2 2Eh=Newline
0Fh=PF15 1Fh=PA3 2Fh=Attn
--------I-21A4-------------------------------
INT 21 - Attachmate Extra! - GET HOST WINDOW BUFFER ADDRESS
AH = A4h
AL = window number (1-4=host B-E)
Return: DS:BX -> 3270 display buffer
SeeAlso: AH=A5h,AH=B8h
--------I-21A5-------------------------------
INT 21 - Attachmate Extra! - GET HOST WINDOW CURSOR POSITION
AH = A5h
AL = window number (1-4=host B-E)
Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
Note: if the host window is configured with the Extended Attribute (EAB)
feature, multiply the cursor position by 2 to obtain the byte offset
into the display buffer
SeeAlso: AH=A4h
--------v-21A55A-----------------------------
INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
AX = A55Ah
Return: AX = 5AA5h if resident
SeeAlso: AX=A1D5h,AX=AA00h
--------v-21AA00-----------------------------
INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
AX = AA00h
Return: AX = 00AAh if resident
SeeAlso: AX=A55Ah,AX=AA03h
--------v-21AA03-----------------------------
INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
AX = AA03h
Return: AX = 03AAh if resident
SeeAlso: AX=AA00h,AH=ABh
--------v-21AB-------------------------------
INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
AH = ABh
Return: AX = 5555h if resident
SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
--------I-21AF-------------------------------
INT 21 - Attachmate Extra! - GET TRANSLATE TABLE ADDRESS
AH = AFh
Return: DS:BX -> translate tables (see #0978)

Format of Attachmate Extra! translate tables:
Offset Size Description (Table 0978)
00h 256 BYTEs ASCII to 3270 buffer code translate table
100h 256 BYTEs 3270 buffer code to ASCII translate table
200h 256 BYTEs 3270 buffer code to EBCDIC translate table
300h 256 BYTEs EBCDIC to 3270 buffer code translate table
--------N-21B300-----------------------------
INT 21 U - Novell NetWare - CHECK LIP/PACKET SIGNING/IPX CHECKSUM SUPPORT???
AX = B300h
Return: AX = 0000h if supported???
Note: this function appeared with the packet signing/Large Internet Packets/
IPX Checksum-aware NetWare shells
SeeAlso: AX=B301h,AX=B302h
--------N-21B301-----------------------------
INT 21 U - Novell NetWare - CHECK SIGNATURE LEVEL???
AX = B301h
Return: AX = 0000h if supported???
BX:CX indicate signature level (see #0979)
Note: this function appeared with the packet signing/Large Internet Packets/
IPX Checksum-aware NetWare shells
SeeAlso: AX=B300h,AX=B304h,#1581 at INT 2F/AX=7A20h/BX=0000h

(Table 0979)
Values for signature level indicator:
0000h:0000h = signature level 0
0002h:0000h = signature level 1
0202h:0000h = signature level 2
0202h:0202h = signature level 3
--------N-21B302-----------------------------
INT 21 U - Novell NetWare - START PACKET SIGNING
AX = B302h
CX = server connection (1-8)
DS:SI -> 24-byte buffer containing ???
Return: ???
Notes: this function appeared with the packet signing/Large Internet Packets/
IPX Checksum-aware NetWare shells
if packet signing is active, this call is required if and only if the
last call successfully authenticated the workstation to the server
SeeAlso: AX=B300h,#1581
--------N-21B304-----------------------------
INT 21 U - Novell NetWare - SET SIGNATURE LEVEL
AX = B304h
BX:CX = new signature level (see AX=B301h)
Return: ???
Note: this function appeared with the packet signing/Large Internet Packets/
IPX Checksum-aware NetWare shells
SeeAlso: AX=B300h,AX=B301h,AX=B306h,#1581
--------N-21B306-----------------------------
INT 21 - Novell NetWare - RENEGOTIATE SECURITY LEVEL
AX = B306h
CX = server connection number (01h-08h)
Return: ???
Note: this function appeared with the packet signing/Large Internet Packets/
IPX Checksum-aware NetWare shells
SeeAlso: AX=B300h,AX=B304h,#1581
--------N-21B4-------------------------------
INT 21 U - Novell NetWare - "AttachHandle"
AH = B4h
DS:SI -> input buffer (see #0980)
Return: AX = DOS file handle or return code
Note: this is an interface provided by NetWare to give DOS file access to
NetWare files on non-DOS systems such as Macintosh, OS/2, and Unix
SeeAlso: AX=E909h

Format of Novell NetWare input buffer:
Offset Size Description (Table 0980)
00h BYTE "WorkFileServer"
01h BYTE access code
02h DWORD "OpenHandle"
06h WORD "OpenHandleCount"
08h DWORD "OpenFileSize"
Note: the six bytes at 02h-07h appear to be the six-byte NetWare handle
returned by AX=E909h
--------N-21B500-----------------------------
INT 21 U - Novell NetWare - VNETWARE.386 API - GET INSTANCE DATA
AX = B500h
Return: ES:BX -> data
CX = length
SeeAlso: AX=B501h,AX=B502h
--------N-21B501-----------------------------
INT 21 U - Novell NetWare - VNETWARE.386 API - END VIRTUAL MACHINE
AX = B501h
SeeAlso: AX=B500h,AX=B502h
--------N-21B502-----------------------------
INT 21 U - Novell NetWare - VNETWARE.386 API - START VIRTUAL MACHINE
AX = B502h
SeeAlso: AX=B500h,AX=B501h
--------N-21B5-------------------------------
INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
AH = B5h
AL = subfunction
03h get task mode
Return: AH = 00h
AL = current task mode byte (see #0981)
04h get task mode pointer
Return: ES:BX -> task mode byte
Notes: the task mode byte specifies how task cleanup should be performed, but
is declared to be version-dependent
allows a program to disable the automatic cleanup for programs managing
task swapping, etc.

(Table 0981)
Values for NetWare task mode byte in version 3.01:
00h-03h reserved
04h no task cleanup
--------N-21B505-----------------------------
INT 21 U - Novell NetWare - VNETWARE.386 API - SET VIRTUAL MACHINE ID
AX = B505h
???
Return: ???
SeeAlso: AX=B502h,AX=B506h
--------N-21B506-----------------------------
INT 21 U - Novell NetWare - VNETWARE.386 API - GET VIRTUAL MACH SUPPORT LEVEL
AX = B506h
Return: AX = ??? (0002h)
SeeAlso: AX=B505h
--------N-21B507-----------------------------
INT 21 - Novell NetWare - NetWare Shell - GET NUMBER OF PACKET BURST BUFFERS
AX = B507h
Return: AL = number of packet burst buffers (configured at shell load time)
--------N-21B6-------------------------------
INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
AH = B6h
AL = subfunction
00h get extended file attributes
01h set extended file attributes
CL = extended file attributes (see #0982)
DS:DX -> ASCIZ pathname (max 255 bytes)
Return: CF set on error
AL = error code
8Ch caller lacks privileges
FEh not permitted to search directory
FFh file not found
CF clear if successful
AL = 00h (success)
CL = current extended file attributes (see #0982)
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=4300h,AH=E3h/SF=0Fh

Bitfields for NetWare extended file attributes:
Bit(s) Description (Table 0982)
2-0 search mode (executables only)
000 none (use shell's default search)
001 search on all opens without path
010 do not search
011 search on read-only opens without path
100 reserved
101 search on all opens
110 reserved
111 search on all read-only opens
3 reserved
4 transactions on file tracked
5 file's FAT indexed
6 read audit (to be implemented)
7 write audit (to be implemented)
--------N-21B7-------------------------------
INT 21 U - Novell NetWare - "HoldFileModeSet" (obsolete)
AH = B7h
AL = new value for HoldFileFlag
Return: AL = previous value of HoldFileFlag
Note: this function provided backward compatibility with a bug in early
DOS versions and CP/M, but is no longer used or supported
--------I-21B8-------------------------------
INT 21 - Attachmate Extra! - DISABLE HOST BUFFER UPDATES
AH = B8h
AL = window number (1-4=host B-E)
DL = 01h
Notes: only valid in CUT mode
next AID keystroke (eg Enter) enables host buffer updates
SeeAlso: AH=A4h
--------N-21B800-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
AX = B800h
CX = size of reply buffer (01h-3Fh)
ES:BX -> reply buffer for capture flags table (see #0983)
Return: AL = status
00h successful
Note: this function is supported by Advanced NetWare 2.0+
SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h

Format of NetWare capture flags table:
Offset Size Description (Table 0983)
00h BYTE status (used internally, should be set to 00h)
01h BYTE print flags (see #0984)
02h BYTE tab size (01h-12h, default 08h)
03h BYTE printer number on server (00h-04h, default 00h)
04h BYTE number of copies to print (00h-FFh, default 01h)
05h BYTE form type required in printer (default 00h)
06h BYTE reserved
07h 13 BYTEs text to be placed on banner page
14h BYTE reserved
15h BYTE default local printer (00h = LPT1)
16h WORD (big-endian) timeout in clock ticks for flushing capture file
on inactivity, or 0000h to disable timeout
18h BYTE flush capture file on LPT close if nonzero
19h WORD (big-endian) maximum lines per page
1Bh WORD (big-endian) maximum characters per line
1Dh 13 BYTEs name of form required in printer
2Ah BYTE LPT capture flag
00h inactive, FFh LPT device is being captured
2Bh BYTE file capture flag
00h if no file specified, FFh if capturing to file
2Ch BYTE timing out (00h if no timeout in effect, FFh if timeout counter
running)
2Dh DWORD (big-endian) address of printer setup string
31h DWORD (big-endian) address of printer reset string
35h BYTE target connection ID
36h BYTE capture in progress if FFh
37h BYTE job queued for printing if FFh
38h BYTE print job valid if FFh
39h DWORD bindery object ID of print queue if previous byte FFh
3Dh WORD (big-endian) print job number (1-999)

Bitfields for NetWare print flags:
Bit(s) Description (Table 0984)
2 print capture file if interrupted by loss of connection
3 no automatic form feed after print job
6 printing control sequences interpreted by print service
7 print banner page before capture file
--------N-21B801-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
AX = B801h
CX = size of buffer (01h-3Fh)
ES:BX -> buffer containing capture flags table (see #0983)
Return: AL = status
00h successful
Note: this function is supported by Advanced NetWare 2.0+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
--------N-21B802-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
AX = B802h
CX = size of reply buffer (01h-3Fh)
DH = LPT port (00h-02h)
ES:BX -> reply buffer for capture flags table (see #0983)
Return: AL = status
00h successful
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h

--------N-21B803-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
AX = B803h
CX = size of buffer (01h-3Fh)
DH = LPT port (00h-02h)
ES:BX -> buffer containing capture flags table (see #0983)
Return: AL = status
00h successful
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
--------N-21B804-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
AX = B804h
Return: DH = default LPT port (00h-02h)
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
--------N-21B805-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
AX = B805h
DH = new default LPT port (00h-02h)
Return: AL = status
00h successful
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
--------N-21B806-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
AX = B806h
DH = LPT port (00h-02h)
BX:CX = print queue's object ID
Return: AL = status
00h successful
FFh job already set
Desc: specify the print queue on which a print job is to be placed the next
time a capture is started on the given printer port
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B801h,AX=B807h,AH=E0h/SF=09h
--------N-21B807-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
AX = B807h
DH = LPT port (00h-02h)
BX = job number (see AH=E3h/SF=68h)
SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
Return: AL = status
00h successful
FFh job already queued
Desc: specify the capture file and print job to be used for subsequent
output to the given printer port
Note: this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B801h,AX=B806h,AH=E0/SF=09h,AH=E3h/SF=68h
--------N-21B808-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
AX = B808h
ES:BX -> 12-byte buffer for user name
Return: AL = status
00h successful
Desc: get the user name which is printed on the banner page
Notes: this function is supported by Advanced NetWare 2.1+
the default name is the login name of the user
SeeAlso: AX=B809h
--------N-21B809-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET BANNER USER NAME
AX = B809h
ES:BX -> 12-byte buffer containing user name
Return: AL = status
00h successful
Desc: specify the user name which is printed on the banner page
Notes: this function is supported by Advanced NetWare 2.1+
the default name is the login name of the user
SeeAlso: AX=B808h
--------N-21B9-------------------------------
INT 21 U - Novell NetWare - "SpecialAttachableFunction"
AH = B9h
AL = FFh to hook this function
ES:BX -> function to invoke on AH=B9h when AL<>FFh
Note: this function is no longer used or supported by current versions of
NetWare
--------N-21BA-------------------------------
INT 21 U - Novell NetWare - "ReturnCommandComPointers"
AH = BAh
Return: DX = environment segment
ES:DI -> COMMAND.COM drive
Desc: used to edit the COMSPEC and PATH variables in the master environment
when mapping network drives
Note: this function was documented in older Novell documents which are no
longer available
--------N-21BB-------------------------------
INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
AH = BBh
AL = new EOJ flag
00h disable EOJs
01h enable EOJs
Return: AL = old EOJ flag
Desc: specify whether the network shell should automatically generate an
End of Job call when the root command processor regains control
Note: this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
Alloy NTNX
SeeAlso: AH=19h,AH=D6h
--------v-21BBBB-----------------------------
INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
AX = BBBBh
Return: AX = 6969h
SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
--------N-21BC-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
AH = BCh
AL = flags (see #0986)
BX = file handle
CX:DX = starting offset in file
SI:DI = length of region to lock
BP = timeout in timer ticks (1/18 sec)
0000h = don't wait if already locked
Return: AL = status (see #0985)
Desc: add the specified physical record to the log table, optionally locking
it
Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
Alloy NTNX
SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h

(Table 0985)
Values for NetWare status:
00h successful
96h no dynamic memory for file
FEh timed out
FFh failed

Bitfields for NetWare flags:
Bit(s) Description (Table 0986)
0 lock as well as log record
1 non-exclusive lock
--------N-21BD-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
AH = BDh
BX = file handle
CX:DX = starting offset in file
SI:DI = length of record
Return: AL = status
00h successful
FFh record not locked
Desc: unlock the specified physical record but do not remove it from log
table
Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
Alloy NTNX
SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
--------N-21BE-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
AH = BEh
BX = file handle
CX:DX = starting offset within file
SI:DI = record length in bytes
Return: AL = status
00h successful
FFh specified record not locked
Desc: unlock the physical record and remove it from the log table
Note: this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
Alloy NTNX
SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
--------v-21BE-------------------------------
INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
AH = BEh
Return: AX = 1234h if resident
SeeAlso: AX=BBBBh,AX=BE00h
--------v-21BE00-----------------------------
INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
AX = BE00h
CF set
Return: CF clear if resident
SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
--------N-21BF-------------------------------
INT 21 O - Novell NetWare, Alloy NTNX - LOG/LOCK RECORD (FCB)
AH = BFh
AL = flags (see #0986)
DS:DX -> opened FCB (see #0574 at AH=0Fh)
BX:CX = offset
BP = lock timeout in timer ticks (1/18 sec) if AL nonzero
SI:DI = length
Return: AL = error code (see #0985)
Note: this function was added in NetWare 4.6, but was removed some time prior
to Advanced NetWare 2.15, and is no longer listed in current Novell
documentation
SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
--------!---Section--------------------------


  3 Responses to “Category : Recently Uploaded Files
Archive   : INTER45B.ZIP
Filename : INTERRUP.E

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/