home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / DOS_HELP / INTER191.ZIP / INTERRUP.B < prev    next >
Encoding:
Text File  |  1991-01-05  |  229.5 KB  |  6,504 lines

  1. Interrupt List, part 2 of 4
  2. This compilation is Copyright (c) 1989,1990,1991 Ralf Brown
  3. ----------20---------------------------------
  4. INT 20 - Minix - SEND/RECEIVE MESSAGE
  5.     AX = process ID of other process
  6.     BX -> message
  7.     CX = 1 send
  8.          2 receive
  9.          3 send&receive
  10. Note:    the message contains the system call number (numbered as in V7 
  11.       Unix(tm)) and the call parameters
  12. ----------20---------------------------------
  13. INT 20 - DOS - PROGRAM TERMINATION
  14. returns to DOS--identical to INT 21/AH=00h
  15. Note:    IBM and Microsoft recommend using INT 21/AH=4Ch for DOS 2+
  16. SeeAlso: INT 21/AH=00h, INT 21/AH=4Ch
  17. ----------2100-------------------------------
  18. INT 21 - DOS - PROGRAM TERMINATION
  19.     AH = 00h
  20. Return: never
  21. Note:    execution continues at address pointed to by INT 22 after DOS performs
  22.       whatever cleanup it needs to do
  23. SeeAlso: AH=31h,AH=4Ch,INT 20,INT 22
  24. ----------2101-------------------------------
  25. INT 21 - DOS - KEYBOARD INPUT
  26.     AH = 01h
  27. Return: AL = character read
  28. Note:    ^C/^Break are checked, and INT 23h executed if read
  29.     character is echoed to standard output
  30. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  31. ----------2102-------------------------------
  32. INT 21 - DOS - DISPLAY OUTPUT
  33.     AH = 02h
  34.     DL = character to send to standard output
  35. Note:    ^C/^Break are checked, and INT 23h executed if pressed
  36. SeeAlso: AH=06h,AH=09h
  37. ----------2103-------------------------------
  38. INT 21 - DOS - AUX INPUT
  39.     AH = 03h
  40. Return: AL = character read
  41. SeeAlso: AH=04h,INT 14/AH=02h
  42. ----------2104-------------------------------
  43. INT 21 - DOS - AUX OUTPUT
  44.     AH = 04h
  45.     DL = character to send
  46. SeeAlso: AH=03h,INT 14/AH=01h
  47. ----------2105-------------------------------
  48. INT 21 - DOS - PRINTER OUTPUT
  49.     AH = 05h
  50.     DL = character to print
  51. SeeAlso: INT 17/AH=00h
  52. ----------2106-------------------------------
  53. INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT
  54.     AH = 06h
  55.     DL = character <> FFh
  56. SeeAlso: AH=02h,AH=09h
  57. ----------2106--DLFF-------------------------
  58. INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER INPUT
  59.     AH = 06h
  60.     DL = FFh
  61. Return: ZF set     = no character
  62.     ZF clear = character recieved
  63.           AL = character
  64. Notes:    character is echoed to STDOUT if received.
  65.     ^C/^Break are NOT checked
  66. SeeAlso: AH=0Bh
  67. ----------2107-------------------------------
  68. INT 21 - DOS - DIRECT STDIN INPUT, NO ECHO
  69.     AH = 07h
  70. Note:    same as function 06h for input but char not echoed
  71. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  72. ----------2108-------------------------------
  73. INT 21 - DOS - KEYBOARD INPUT, NO ECHO
  74.     AH = 08h
  75. Return: AL = character
  76. Note:    same as function 07h, but ^C/^Break are checked
  77. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  78. ----------2109-------------------------------
  79. INT 21 - DOS - PRINT STRING
  80.     AH = 09h
  81.     DS:DX -> string terminated by "$"
  82. Note:    ^C/^Break checked, and INT 23h called if pressed
  83. SeeAlso: AH=02h,AH=06h"OUTPUT"
  84. ----------210A-------------------------------
  85. INT 21 - DOS - BUFFERED KEYBOARD INPUT
  86.     AH = 0Ah
  87.     DS:DX -> buffer
  88. Notes:    first byte of buffer must contain maximum length
  89.     on entry, second byte contains actual length of previous line which may
  90.       be recalled with the DOS line-editing commands
  91.     on return the second byte contains actual length, third and
  92.       subsequent bytes contain the input line
  93. ----------210B-------------------------------
  94. INT 21 - DOS - CHECK STANDARD INPUT STATUS
  95.     AH = 0Bh
  96. Return: AL = FFh if character available
  97.          00h if no character
  98. Note:    ^C/^Break checked, and INT 23h called if pressed
  99. SeeAlso: AH=06h"INPUT"
  100. ----------210C-------------------------------
  101. INT 21 - DOS - CLEAR KEYBOARD BUFFER
  102.     AH = 0Ch
  103.     AL must be 01h, 06h, 07h, 08h, or 0Ah.
  104. Notes:    flushes all typeahead input, then executes function specified by AL
  105.       (effectively moving it to AH and repeating the INT 21 call).
  106.     if AL contains a value not in the list above, the keyboard buffer is
  107.       flushed and no other action is taken.
  108. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  109. ----------210D-------------------------------
  110. INT 21 - DOS - DISK RESET
  111.     AH = 0Dh
  112. Note:    flushes all disk buffers
  113. SeeAlso: INT 13/AH=00h, INT 2F/AX=1120h
  114. ----------210E-------------------------------
  115. INT 21 - DOS - SELECT DISK
  116.     AH = 0Eh
  117.     DL = new default drive number (0 = A, 1 = B, etc.)
  118. Return: AL = number of logical drives
  119. Notes:    under Novell NetWare, the return value is always 32, the number of
  120.       drives that NetWare supports
  121.     under DOS 3+, the return value is the greatest of 5, the value of
  122.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  123.     otherwise, the return value is the highest drive actually present
  124. SeeAlso: AH=19h, AH=DBh
  125. ----------210F-------------------------------
  126. INT 21 - DOS - OPEN DISK FILE
  127.     AH = 0Fh
  128.     DS:DX -> FCB (see below)
  129. Return: AL = 00h file found
  130.          FFh file not found
  131. Note:    (DOS 3+) file opened in compatibility mode
  132. SeeAlso: AH=3Dh
  133.  
  134. Format of File Control Block:
  135. Offset    Size    Description
  136.  -7    BYTE    extended FCB if FFh
  137.  -6   5 BYTEs    reserved
  138.  -1    BYTE    file attribute if extended FCB
  139.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  140.  01h  8 BYTEs    blank-padded file name 
  141.  09h  3 BYTEs    blank-padded file extension
  142.  0Ch    WORD    current block number
  143.  0Eh    WORD    logical record size
  144.  10h    DWORD    file size
  145.  14h    WORD    date of last write (see AX=5700h)
  146.  16h    WORD    time of last write (see AX=5700h)
  147.  18h  8 BYTEs    reserved (see below)
  148.  20h    BYTE    record within current block
  149.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  150.         byte is omitted)
  151. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  152.       offset -7, rather than the address of the drive number field
  153.  
  154. Format of reserved field for DOS 1.x:
  155. Offset    Size    Description
  156.  18h    BYTE    bit 7: set if logical device
  157.         bit 6: set if open???
  158.         bits 5-0: disk number or logical device ID
  159.  19h    WORD    absolute current cluster number
  160.  1Bh    WORD    starting cluster number
  161.  1Dh    WORD    relative current cluster number
  162.  1Fh    BYTE    unused???
  163.  
  164. Format of reserved field for DOS 2.x:
  165. Offset    Size    Description
  166.  18h    BYTE    bit 7: set if logical device
  167.         bit 6: set if open???
  168.         bits 5-0: ???
  169.  19h    WORD    starting cluster number
  170.  1Bh    WORD    ???
  171.  1Dh    BYTE    ???
  172.  1Eh    BYTE    ???
  173.  1Fh    BYTE    ???
  174.  
  175. Format of reserved field for DOS 3.x:
  176. Offset    Size    Description
  177.  18h    BYTE    number of system file table entry for file
  178.  19h    BYTE    attributes
  179.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  180.               01 = SHARE.EXE not loaded, character device
  181.               10 = SHARE.EXE loaded, remote file
  182.               11 = SHARE.EXE loaded, local file
  183.         bits 5-0: low six bits of device attribute word
  184. ---SHARE.EXE loaded, local file---
  185.  1Ah    WORD    starting cluster of file
  186.  1Ch    WORD    offset within SHARE of sharing record (see AH=52h)
  187.  1Eh    BYTE    file attribute
  188.  1Fh    BYTE    ???
  189. ---SHARE.EXE loaded, remote file---
  190.  1Ah    WORD    number of sector containing directory entry
  191.  1Ch    WORD    relative cluster within file of last cluster accessed
  192.  1Eh    BYTE    absolute cluster number of last cluster accessed
  193.  1Fh    BYTE    ???
  194. ---SHARE.EXE not loaded---
  195.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  196.  1Bh    WORD    starting cluster of file
  197.  1Dh    WORD    number of sector containing directory entry
  198.  1Fh    BYTE    number of directory entry within sector
  199. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  200.       of the device driver header, then the BYTE at 1Ah is overwritten.
  201. ----------2110-------------------------------
  202. INT 21 - DOS - CLOSE DISK FILE
  203.     AH = 10h
  204.     DS:DX -> FCB (see AH=0Fh)
  205. Return: AL = 00h directory update successful
  206.          FFh file not found in directory
  207. SeeAlso: AH=3Eh
  208. ----------2111-------------------------------
  209. INT 21 - DOS - SEARCH FIRST USING FCB
  210.     AH = 11h
  211.     DS:DX -> FCB (see AH=0Fh)
  212. Return: AL = status
  213.         00h file found
  214.         [DTA] = unopened FCB for file that was found
  215.         FFh file not found
  216. SeeAlso: AH=1Ah,AH=4Eh, INT 2F/AX=111Bh
  217. ----------2112-------------------------------
  218. INT 21 - DOS - SEARCH NEXT USING FCB
  219.     AH = 12h
  220.     DS:DX -> FCB (see AH=0Fh)
  221. Return: AL = status
  222.         00h file found
  223.         [DTA] = unopened FCB for file that was found
  224.         FFh file not found
  225. SeeAlso: AH=1Ah,AH=4Fh, INT 2F/AX=111Ch
  226. ----------2113-------------------------------
  227. INT 21 - DOS - DELETE FILE via FCB
  228.     AH = 13h
  229.     DS:DX -> FCB (see AH=0Fh) with filename field filled with template for
  230.          deletion ('?' wildcard allowed, but not '*')
  231. Return: AL = status
  232.         00h file found
  233.         FFh file not found
  234. Note:    deletes everything in the current directory (including subdirectories)
  235.       and sets the first byte of the name to 00h (entry never used)
  236.       instead of E5h if called on an extended FCB with filename
  237.       '???????????' and bits 0-4 of the attribute set (bits 1 and 2 for
  238.       DOS 1).  This may have originally been an optimization to minimize
  239.       directory searching after a mass deletion, but can corrupt the
  240.       filesystem under DOS 2+ because subdirectories are removed without
  241.       deleting the files they contain.
  242. SeeAlso: AH=41h, INT 2F/AX=1113h
  243. ----------2114-------------------------------
  244. INT 21 - DOS - SEQUENTIAL DISK FILE READ
  245.     AH = 14h
  246.     DS:DX -> FCB (see AH=0Fh)
  247. Return: AL = status
  248.         00h successful read
  249.         01h end of file
  250.         02h data transfer area too small
  251.         03h partial record, EOF
  252. SeeAlso: AH=3Fh, INT 2F/AX=1108h
  253. ----------2115-------------------------------
  254. INT 21 - DOS - SEQUENTIAL DISK RECORD WRITE
  255.     AH = 15h
  256.     DS:DX -> FCB (see AH=0Fh)
  257. Return: AL = status
  258.         00h successful write
  259.         01h disk full
  260.         02h data transfer area too small
  261. SeeAlso: AH=40h, INT 2F/AX=1109h
  262. ----------2116-------------------------------
  263. INT 21 - DOS - CREATE A DISK FILE
  264.     AH = 16h
  265.     DS:DX -> FCB (see AH=0Fh)
  266. Return: AL = status
  267.         00h successful creation
  268.         FFh directory full
  269. Note:    if file already exists, it is truncated to zero length
  270. SeeAlso: AH=3Ch
  271. ----------2117-------------------------------
  272. INT 21 - DOS - RENAME FILE via FCB
  273.     AH = 17h
  274.     DS:DX -> FCB (see AH=0Fh)
  275.     FCB contains new name starting at byte 17h.
  276. Return: AL = status
  277.         00h file found
  278.         FFh file not found
  279. SeeAlso: AH=56h, INT 2F/AX=1111h
  280. ----------2118-------------------------------
  281. INT 21 - DOS internal - UNUSED
  282.     AH = 18h
  283. Return: AL = 00h
  284. ----------2119-------------------------------
  285. INT 21 - DOS - GET DEFAULT DISK NUMBER
  286.     AH = 19h
  287. Return: AL = current drive number (letter - 'A')
  288. SeeAlo: AH=0Eh
  289. ----------211A-------------------------------
  290. INT 21 - DOS - SET DISK TRANSFER AREA ADDRESS
  291.     AH = 1Ah
  292.     DS:DX -> disk transfer buffer
  293. SeeAlso: AH=2Fh
  294. ----------211B-------------------------------
  295. INT 21 - DOS - GET ALLOCATION TABLE INFORMATION FOR DEFAULT DRIVE
  296.     AH = 1Bh
  297. Return: DS:BX -> FAT ID byte for default drive
  298.     DX = number of allocation units on disk
  299.     AL = number of sectors per allocation unit (cluster)
  300.     CX = number of bytes per sector
  301. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT
  302. SeeAlso: AH=1Ch,AH=36h
  303. ----------211C-------------------------------
  304. INT 21 - DOS - GET ALLOCATION TABLE INFORMATION FOR SPECIFIC DRIVE
  305.     AH = 1Ch
  306.     DL = drive number to check (0=default, 1=A, etc)
  307. Return: DS:BX -> FAT ID byte for specified drive
  308.     DX = number of allocation units on disk
  309.     AL = number of sectors per allocation unit (cluster)
  310.     CX = number of bytes per sector
  311. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT
  312. SeeAlso: AH=1Bh,AH=36h
  313. ----------211D-------------------------------
  314. INT 21 - DOS internal - UNUSED
  315.     AH = 1Dh
  316. Return: AL = 00h
  317. ----------211E-------------------------------
  318. INT 21 - DOS internal - UNUSED
  319.     AH = 1Eh
  320. Return: AL = 00h
  321. ----------211F-------------------------------
  322. INT 21 - DOS internal - GET DEFAULT DRIVE PARAMETER BLOCK
  323.     AH = 1Fh
  324. Return: AL = 00h No Error
  325.          FFh Error
  326.     DS:BX -> drive parameter block (see below for DOS 1.x, AH=32h others)
  327. Note:    for DOS 2+, this just invokes function 32h with DL = 00h
  328. SeeAlso: AH=32h
  329.  
  330. Format of Eagle MSDOS 1.25 drive parameter block:
  331. Offset    Size    Description
  332.  00h    BYTE    entry number
  333.  01h    BYTE    physical drive number
  334.  02h    WORD    bytes per sector
  335.  04h    BYTE    number of sectors per cluster - 1
  336.  05h    BYTE    ???
  337.  06h    WORD    starting sector number of first FAT
  338.  08h    BYTE    number of copies of FAT
  339.  09h    WORD    number of directory entries
  340.  0Bh    WORD    number of first data sector
  341.  0Dh    WORD    number of clusters on disk
  342.  0Fh    BYTE    sectors per FAT
  343.  10h    WORD    starting sector of directory
  344.  12h    WORD    address of allocation table
  345. ----------2120-------------------------------
  346. INT 21 - DOS internal - UNUSED
  347.     AH = 20h
  348. Return: AL = 00h
  349. ----------2121-------------------------------
  350. INT 21 - DOS - RANDOM DISK RECORD READ
  351.     AH = 21h
  352.     DS:DX -> FCB (see AH=0Fh)
  353. Return: AL = status
  354.         00h successful read
  355.         01h end of file
  356.         02h data transfer area too small
  357.         03h partial record, EOF
  358. SeeAlso: AH=3Fh
  359. ----------2122-------------------------------
  360. INT 21 - DOS - RANDOM DISK RECORD WRITE
  361.     AH = 22h
  362.     DS:DX -> FCB (see AH=0Fh)
  363. Return: AL = status
  364.         00h successful write
  365.         01h disk full
  366.         02h data transfer area too small
  367. SeeAlso: AH=40h
  368. ----------2123-------------------------------
  369. INT 21 - DOS - GET FILE SIZE
  370.     AH = 23h
  371.     DS:DX -> unopened FCB (see AH=0Fh) with filename and record size
  372.          fields initialized
  373. Return: AL = status
  374.         00h file found
  375.         FFh file not found
  376. Note:    FCB's random-record field set to number of records (rounded up)
  377. SeeAlso: AH=42h
  378. ----------2124-------------------------------
  379. INT 21 - DOS - SET RANDOM RECORD FIELD
  380.     AH = 24h
  381.     DS:DX -> open FCB (see AH=0Fh)
  382. Return: Random Record Field of FCB is set to be same as Current Block
  383.     and Current Record.
  384. SeeAlso: AH=42h
  385. ----------2125-------------------------------
  386. INT 21 - DOS - SET INTERRUPT VECTOR
  387.     AH = 25h
  388.     AL = interrupt number
  389.     DS:DX = new vector to be used for specified interrupt
  390. SeeAlso: AH=35h
  391. ----------212501-----------------------------
  392. INT 21 - Phar Lap 386/DOS-Extender - RESET 386/DOS-EXTENDER DATA STRUCTURES 
  393.     AX = 2501h
  394. Return: CF clear
  395. Note:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  396.       system calls.  Only available when directly using 386/DOS-Extender,
  397.       or when using a product that was created using 386-DOS/Extender
  398. ----------212502-----------------------------
  399. INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  400.     AX = 2502h
  401.     CL = interrupt number
  402. Return: ES:EBX -> 48-bit address of protected-mode interrupt handler
  403.     CF clear
  404. ----------212503-----------------------------
  405. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  406.     AX = 2503h
  407.     CL = interrupt number
  408. Return: EBX = 32-bit address of real-mode interrupt handler
  409.     CF clear
  410. SeeAlso: AX=2502h,2504h
  411. ----------212504-----------------------------
  412. INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  413.     AX = 2504h
  414.     CL = interrupt number
  415.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  416. Return: CF clear
  417. SeeAlso: AX=2502h,2505h
  418. ----------212505-----------------------------
  419. INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  420.     AX = 2505h
  421.     CL = interrupt number
  422.     EBX = 32-bit address of real-mode interrupt handler
  423. Return: CF clear
  424. SeeAlso: AX=2503h,2504h
  425. ----------212506-----------------------------
  426. INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
  427.     AX = 2506h
  428.     CL = interrupt number
  429.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  430. Return: CF clear
  431. Note:    This function modifies both the real-mode low-memory interrupt
  432.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  433.     Interrupts occurring in real mode are resignaled in protected mode.
  434. ----------212507-----------------------------
  435. INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  436.     AX = 2507h
  437.     CL = interrupt number
  438.     DS:EDX -> 48-bit address of protected-mode interrupt handler
  439.     EBX = 32-bit address of real-mode interrupt handler
  440. Return: CF clear
  441. Note:    interrupts are disabled until both vectors have been modified
  442. SeeAlso: AX=2504h,2505h
  443. ----------212508-----------------------------
  444. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  445.     AX = 2508h
  446.     BX = segment selector
  447. Return: CF clear if successful
  448.         ECX = linear base address of segment
  449.     CF set if invalid segment selector
  450. ----------212509-----------------------------
  451. INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  452.     AX = 2509h
  453.     EBX = linear address to convert
  454. Return: CF clear if successful
  455.         ECX = physical address (carry flag clear)
  456.     CF set if linear address not mapped in page tables
  457. ----------21250A-----------------------------
  458. INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  459.     AX = 250Ah
  460.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  461.          to modify
  462.     EBX = physical base address of memory to map (multiple of 4K)
  463.     ECX = number of physical 4K pages to map
  464. Return: CF clear if successful
  465.         EAX = 32-bit offset in segment of mapped memory
  466.     CF set on error
  467.         EAX = error code
  468.         08h insufficient memory to create page tables
  469.         09h invalid segment selector
  470. ----------21250C-----------------------------
  471. INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  472.     AX = 250Ch
  473. Return: CF clear
  474.     AL = base interrupt vector for IRQ0-IRQ7
  475.     AH = base interrupt vector for IRQ8-IRQ15
  476.     BL = interrupt vector for BIOS print screen function
  477. ----------21250D-----------------------------
  478. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  479.     AX = 250Dh
  480. Return: CF clear
  481.     EAX = 32-bit address of real-mode 386/DOS-Extender proc that will call
  482.           through from real mode to a protected-mode routine
  483.     EBX = 32-bit real-mode address of intermode call data buffer
  484.     ECX = size in bytes of intermode call data buffer
  485.     ES:EDX -> protected-mode address of intermode call data buffer
  486. ----------21250E-----------------------------
  487. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  488.     AX = 250Eh
  489.     EBX = 32-bit address of real-mode procedure to call
  490.     ECX = number of two-byte words to copy from protected-mode stack
  491.           to real-mode stack
  492. Return: CF clear if successful
  493.         all segment registers unchanged
  494.         all general registers contain values set by real-mode procedure
  495.         all other flags set as they were left by real-mode procedure
  496.     CF set on error
  497.         EAX = error code
  498.         01h not enough real-mode stack space
  499. ----------21250F-----------------------------
  500. INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  501.     AX = 250Fh
  502.     ES:EBX -> 48-bit protected-mode address to convert
  503.     ECX = length of data, in bytes
  504. Return: CF clear if successful
  505.         ECX = 32-bit MS-DOS address
  506.     CF set on error
  507.         ECX destroyed
  508. SeeAlso: AX=2510h
  509. ----------212510-----------------------------
  510. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  511.     AX = 2510h
  512.     EBX = 32-bit address of real-mode procedure to call
  513.     ECX = number of two-byte words to copy to protected-mode stack to
  514.           real-mode stack
  515.     DS:EDX -> pointer to parameter block (see below)
  516. Return: CF clear if successful
  517.         all segment registers unchanged,
  518.         EDX unchanged
  519.         all other general registers contain values set by real-mode proc
  520.         all other flags are set as they were left by real-mode procedure
  521.         real-mode register values are returned in the parameter block
  522.     CF set on error
  523.         EAX = error code
  524.         01h not enough real-mode stack space
  525. SeeAlso: AX=250Fh
  526.  
  527. Format of parameter block:
  528. Offset    Size    Description
  529.  00h    WORD    real-mode DS value
  530.  02h    WORD    real-mode ES value
  531.  04h    WORD    real-mode FS value
  532.  06h    WORD    real-mode GS value
  533.  08h    DWORD    real-mode EAX value
  534.  0Ch    DWORD    real-mode EBX value
  535.  10h    DWORD    real-mode ECX value
  536.  14h    DWORD    real-mode EDX value
  537. ----------212511-----------------------------
  538. INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  539.     AX = 2511h
  540.     DS:EDX -> pointer to parameter block (see below)
  541. Return: all segment registers unchanged
  542.     EDX unchanged
  543.     all other registers contain values set by the real-mode int handler
  544.     the flags are set as they were left by the real-mode interrupt handler
  545.     real-mode register values are returned in the parameter block
  546. SeeAlso: AX=2503h,2505h
  547.  
  548. Format of parameter block:
  549. Offset    Size    Description
  550.  00h    WORD    interrupt number
  551.  02h    WORD    real-mode DS value
  552.  04h    WORD    real-mode ES value
  553.  06h    WORD    real-mode FS value
  554.  08h    WORD    real-mode GS value
  555.  0Ah    DWORD    real-mode EAX value
  556.  0Eh    DWORD    real-mode EDX value
  557. Note: all other real-mode values set from protected-mode registers
  558. ----------212512-----------------------------
  559. INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  560.     AX = 2512h
  561.     DS:EDX -> pointer to ASCIIZ program name
  562.     ES:EBX -> pointer to parameter block (see below)
  563.     ECX = size in bytes of LDT buffer
  564. Return: CF clear if successful
  565.         EAX = number of segment descriptors in LDT
  566.     CF set on error
  567.         EAX = error code
  568.         02h file not found or path invalid
  569.         05h access denied
  570.         08h insufficient memory
  571.         0Ah environment invalid
  572.         0Bh invalid file format
  573.         80h LDT too small
  574.  
  575. Format of parameter block:
  576. Offset    Size    Description
  577. Input:
  578.  00h    DWORD    32-bit offset of environment string
  579.  04h    WORD    segment of environment string
  580.  06h    DWORD    32-bit offset of command-tail string
  581.  0Ah    WORD    segment of command-tail string
  582.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  583.  10h    WORD    segment of LDT buffer
  584. Output:
  585.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  586.  14h    WORD    real/protected mode flag
  587.         0000h  real mode
  588.         0001h  protected mode
  589.  16h    DWORD    initial EIP value
  590.  1Ah    WORD    initial CS value
  591.  1Ch    DWORD    initial ESP value
  592.  20h    WORD    initial SS value
  593.  22h    WORD    initial DS value
  594.  24h    WORD    initial ES value
  595.  26h    WORD    initial FS value
  596.  28h    WORD    initial GS value
  597. ----------212513-----------------------------
  598. INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  599.     AX = 2513h
  600.     BX = segment selector of descriptor in GDT or LDT
  601.     CL = access-rights byte for alias descriptor
  602.     CH = use-type bit (USE16 or USE32) for alias descriptor
  603. Return: CF clear if successful
  604.         AX = segment selector for created alias
  605.     CF set on error
  606.         EAX = error code
  607.         08h insufficient memory (can't grow LDT)
  608.         09h invalid segment selector in BX
  609. ----------212514-----------------------------
  610. INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  611.     AX = 2514h
  612.     BX = segment selector of descriptor in GDT or LDT
  613.     CL = new access-rights byte 
  614.     CH = new use-type bit (USE16 or USE32)
  615. Return: CF clear if successful
  616.     CF set on error
  617.         EAX = error code
  618.         09h invalid selector in BX
  619. SeeAlso: AX=2515h
  620. ----------212515-----------------------------
  621. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  622.     AX = 2515h
  623.     BX = segment selector of descriptor in GDT or LDT
  624. Return: CF clear if successful
  625.         CL = access-rights byte for segment
  626.         CH = use-type bit (USE16 or USE32)
  627.     ECX<16-31> destroyed
  628.     CF set on error
  629.         EAX = error code
  630.         09h invalid segment selector in BX
  631. SeeAlso: AX=2514h
  632. ----------212516-----------------------------
  633. INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
  634.     AX = 2516h
  635.     ???
  636. Return: ???
  637. ----------212517-----------------------------
  638. INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
  639.     AX = 2517h
  640.     ???
  641. Return: ???
  642. ----------212518-----------------------------
  643. INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
  644.     AX = 2518h
  645.     ???
  646. Return: ???
  647. ----------212519-----------------------------
  648. INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  649.     AX = 2519h
  650. Return: CF clear
  651.     EAX = error code
  652.         0000h  no error
  653.         0001h  out of physical memory
  654.         0002h  out of swap space (unable to grow swap file)
  655.         0003h  out of LDT entries and unable to grow LDT
  656.         0004h  unable to change extended memory allocation mark
  657.         FFFFFFFFh    paging disabled
  658. Note:    VMM is the Virtual Memory Manager option
  659. ----------21251A-----------------------------
  660. INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  661.     AX = 251Ah
  662.     EDX = number of 4k pages to lock
  663.     if BL = 00h
  664.         ECX = linear address of first page to lock
  665.     if BL = 01h
  666.         ES:ECX -> pointer to first page to lock
  667. Return: CF clear if successful
  668.     CF set on error
  669.         EAX = error code
  670.         08h insufficient memory
  671.         09h invalid address range
  672. SeeAlso: AX=251Bh
  673. ----------21251B-----------------------------
  674. INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  675.     AX = 251Bh
  676.     EDX = number of pages to unlock
  677.     if BL = 00h
  678.         ECX = linear address of first page to unlock
  679.     if BL = 01h
  680.         ES:ECX -> pointer to first page to unlock
  681. Return: CF clear if successful
  682.     CF set on error
  683.         EAX = error code
  684.         09h invalid address range
  685. SeeAlso: AX=251Ah
  686. ----------21251D-----------------------------
  687. INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
  688.     AX = 251Dh
  689.     ???
  690. Return: ???
  691. ----------21251E-----------------------------
  692. INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
  693.     AX = 251Eh
  694.     ???
  695. Return: ???
  696. ----------21251F-----------------------------
  697. INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  698.     AX = 251Fh
  699.     ???
  700. Return: ???
  701. ----------212520-----------------------------
  702. INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  703.     AX = 2520h
  704.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  705.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  706. Return: carry flag clear    
  707.  
  708. Format of VM stats buffer:
  709. Offset    Size    Description
  710.  00h    DWORD    VM status
  711.         0001h VM subsystem is present
  712.         0000h VM not present
  713.  04h    DWORD    "nconvpg" number of conventional memory pages available
  714.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  715.  0Ch    DWORD    "nextpg" total number of extended memory pages
  716.  10h    DWORD    "extlim" extender memory pages limit
  717.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  718.  18h    DWORD    "alockpg" number of locked pages owned by application
  719.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  720.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  721.  24h    DWORD    linear address of beginning of application address space
  722.  28h    DWORD    linear address of end of application address space
  723.  2Ch    DWORD    number of seconds since last time VM stats were reset
  724.  30h    DWORD    number of page faults since last time
  725.  34h    DWORD    number of pages written to swap file since last time
  726.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  727.  3Ch    DWORD    number of virtual pages allocated to the application
  728.  40h    DWORD    size in pages of swap file
  729.  44h    DWORD    number of system pages allocated with EMS calls
  730.  48h    DWORD    minimum number of conventional memory pages
  731.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  732.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  733.  54h 16 BYTEs    reserved for future expansion (set to zero)
  734. ----------212521-----------------------------
  735. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE
  736.     AX = 2521h
  737.     EBX = max 4k pages of physical extended memory which program may use
  738. Return: CF clear if successful
  739.        EBX = maximum limit in pages
  740.        ECX = minimum limit in pages
  741.     CF set on error
  742.         EAX = error code
  743.         08h insufficient memory or -nopage switch used
  744. SeeAlso: AX=2522h
  745. ----------212522-----------------------------
  746. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
  747.     AX = 2522h
  748.     ???
  749. Return: ???
  750. ----------212523-----------------------------
  751. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  752.     AX = 2523h
  753.     ???
  754. Return: ???
  755. ----------212524-----------------------------
  756. INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
  757.     AX = 2524h
  758.     ???
  759. Return: ???
  760. ----------212525-----------------------------
  761. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE
  762.     AX = 2525h
  763.     EBX = limit in 4k pages of physical conventional memory which program 
  764.           may use
  765. Return: CF clear if successful
  766.         EBX = maximum limit in pages
  767.         ECX = minimum limit in pages
  768.     CF set on error
  769.         EAX = error code
  770.         08h insufficient memory or -nopage switch used
  771. SeeAlso: AX=2521h
  772. ----------212526-----------------------------
  773. INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  774.     AX = 2526h
  775.     ???
  776. Return: ???
  777. ----------2125C0-----------------------------
  778. INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  779.     AX = 25C0h
  780.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  781. Return: CF clear if successful
  782.         AX = real-mode paragraph address of memory
  783.     CF set on error
  784.         AX = error code
  785.         07h MS-DOS memory control blocks destroyed
  786.         08h insufficient memory
  787.         BX = size in paragraphs of largest available memory block
  788. SeeAlso: AX=25C1h,25C2h
  789. ----------2125C1-----------------------------
  790. INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  791.     AX = 25C1h
  792.     CX = real-mode paragraph address of memory block to free
  793. Return: CF clear if successful
  794.         EAX destroyed
  795.     CF set on error
  796.         AX = error code
  797.         07h MS-DOS memory control blocks destroyed
  798.         09h invalid memory block address in CX
  799. SeeAlso: AX=25C0h,25C2h
  800. ----------2125C2-----------------------------
  801. INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  802.     AX = 25C2h
  803.     BX = new requested block size in paragraphs
  804.     CX = real-mode paragraph address of memory block to modify
  805. Return: CF clear if successful
  806.         EAX destroyed
  807.     CF set on error
  808.         AX = error code
  809.         07h MS-DOS memory control blocks destroyed
  810.         08h insufficient memory
  811.         09h invalid memory block address in CX
  812.         BX = size in paragraphs of largest available memory block
  813. SeeAlso: AX=25C0h,25C1h
  814. ----------2125C3-----------------------------
  815. INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  816.     AX = 25C3h
  817.     ES:EBX -> pointer to parameter block (see below)
  818.     DS:EDX -> pointer to ASCIIZ program filename
  819. Return: CF clear if successful
  820.         all registers unchanged
  821.     CF set on error
  822.         EAX = error code
  823.         01h function code in AL is invalid ???
  824.         02h file not found or path invalid
  825.         05h access denied
  826.         08h insufficient memory to load program
  827.         0Ah environment invalid
  828.         0Bh invalid file format
  829.  
  830. Format of parameter block:
  831. Offset    Size    Description
  832.  00h    DWORD    32-bit offset of environment string
  833.  04h    WORD    segment selector of environment string
  834.  06h    DWORD    32-bit offset of command-tail string
  835.  0Ah    WORD    segment selector of command-tail string
  836. ----------2126-------------------------------
  837. INT 21 - DOS - CREATE PSP
  838.     AH = 26h
  839.     DX = segment number at which to set up PSP
  840. Return: current PSP is copied to specified segment
  841. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  842.       taken from interrupt vector table
  843.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  844.       copy
  845. SeeAlso: AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  846.  
  847. Format of PSP:
  848. Offset    Size    Description
  849.  00h  2 BYTEs    program exit point (INT 20h instruction)
  850.  02h      WORD    memory size in paragraphs
  851.  04h    BYTE    unused
  852.  05h  5 BYTEs    CP/M entry point (FAR jump to 000C0h)
  853.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  854.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  855.  0Ah    DWORD    terminate address (old INT 22h)
  856.  0Eh    DWORD    break address (old INT 23h)
  857.  12h    DWORD    critical error handler (old INT 24h)
  858.  16h    WORD    parent PSP segment
  859.  18h 20 BYTEs    DOS 2+ open file table, FFh = unused
  860.  2Ch    WORD    DOS 2+ environment segment (see below)
  861.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  862.  32h    WORD    DOS 3+ max open files
  863.  34h    DWORD    DOS 3+ open file table address
  864.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  865.         used by SHARE in DOS 3.3
  866.  3Ch 20 BYTEs    unused by DOS versions <= 4.01
  867.  50h  3 BYTEs    DOS function dispatcher (FAR routine)--CDh 21h CBh
  868.  53h  9 BYTEs    unused
  869.  5Ch 16 BYTEs    FCB #1 (see AH=0Fh), filled in from first commandline argument
  870.         (when opened, overwrites following FCB)
  871.  6Ch 20 BYTEs    FCB #2 (see AH=0Fh), filled in from second commandline argument
  872.         (when opened, overwrites part of command tail)
  873.  80h 128 BYTEs    command tail / default DTA buffer
  874.         command tail is BYTE for length of tail, N BYTEs for the tail,
  875.         followed by a BYTE containing 0Dh
  876. Notes:    in DOS versions 3.0 and up, the limit on simultaneously open files may
  877.       be increased by allocating memory for a new open file table, filling
  878.       it with FFh, copying the first 20 bytes from the default table, and
  879.       adjusting the pointer and count at 34h and 32h.  However, DOS
  880.       versions through  at least 3.30 will only copy the first 20 file
  881.       handles into a child PSP (including the one created on EXEC).
  882.     network redirectors based on the original MS-Net implementation use
  883.       values of 80h-FEh in the open file table to indicate remote files
  884.  
  885. Format of environment block:
  886. Offset    Size    Description
  887.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  888.       N BYTEs    second environment variable, ASCIZ string
  889.     ...
  890.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  891.     BYTE    00h
  892. ---DOS 3+---
  893.     WORD    number of strings following environment (normally 1)
  894.       N BYTEs    ASCIZ full pathname of program owning this environment
  895.         other strings may follow
  896. ----------2127-------------------------------
  897. INT 21 - DOS - RANDOM BLOCK READ
  898.     AH = 27h
  899.     DS:DX -> FCB (see AH=0Fh)
  900.     CX = number of records to be read
  901. Return: AL = status
  902.         00h successful read
  903.         01h end of file
  904.         02h data transfer area too small
  905.         03h partial record, EOF
  906. SeeAlso: AH=3Fh
  907. ----------2128-------------------------------
  908. INT 21 - DOS - RANDOM BLOCK WRITE
  909.     AH = 28h
  910.     DS:DX -> FCB (see AH=0Fh)
  911.     CX = number of records to be written
  912.          if zero, truncate file to current random file position
  913. Return: AL = status
  914.         00h successful write
  915.         01h disk full
  916.         02h data transfer area too small
  917. SeeAlso: AH=40h
  918. ----------2129-------------------------------
  919. INT 21 - DOS - PARSE FILENAME
  920.     AH = 29h
  921.     DS:SI -> string to parse
  922.     ES:DI -> buffer to fill with unopened FCB (see AH=0Fh)
  923.     AL = bit mask to control parsing
  924.         0 = 0: parsing stops if file separator found
  925.         1: leading separators ignored
  926.         1 = 0: drive number in FCB set to default drive if not present
  927.            in string
  928.         1: drive number in FCB not changed
  929.         2 = 0: filename in FCB set to blanks if no filename in string
  930.         1: filename in FCB not changed if string does not contain
  931.            a filename
  932.         3 = 0: extension in FCB set to blanks if no extension in string
  933.         1: extension left unchanged
  934. Return: AL = 00h no wildcards in name or extension
  935.          01h wildcards appeared
  936.          FFh drive specifier invalid
  937.     DS:SI -> first byte after parsed string
  938.     ES:DI buffer filled with unopened FCB
  939. Notes:    asterisks expanded to question marks in the FCB
  940.     all processing stops when a filename terminator is encountered
  941.     cannot be used with filespecs which include a path (DOS 2+)
  942. ----------212A-------------------------------
  943. INT 21 - DOS - GET CURRENT DATE
  944.     AH = 2Ah
  945. Return: DL = day
  946.     DH = month
  947.     CX = year
  948.     AL = day of the week (0=Sunday, 1=Monday, etc.)
  949. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h
  950. ----------212B-------------------------------
  951. INT 21 - DOS - SET CURRENT DATE
  952.     AH = 2Bh
  953.     DL = day
  954.     DH = month
  955.     CX = year
  956. Return: AL = 00h if no error
  957.        = FFh if bad value sent to routine
  958. Note:    DOS 3.3+ also sets CMOS clock
  959. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  960. ----------212B--CX4445-----------------------
  961. INT 21 - DESQview - INSTALLATION CHECK
  962.     AH = 2Bh
  963.     AL = subfunction (DV v2.00+)
  964.         01h get version
  965.         Return: BX = version (BH = major, BL = minor)
  966.         Note: early copies of v2.00 return 0002h
  967.         02h get shadow buffer info, and start shadowing
  968.         Return: BH = rows in shadow buffer
  969.             BL = columns in shadow buffer
  970.             DX = segment of shadow buffer
  971.         04h get shadow buffer info
  972.         Return: BH = rows in shadow buffer
  973.             BL = columns in shadow buffer
  974.             DX = segment of shadow buffer
  975.         05h stop shadowing
  976.     CX = 4445h ('DE')
  977.     DX = 5351h ('SQ')
  978. Return: AL = FFh if DESQview not installed
  979. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  980.     whether or not DESQview was loaded
  981. SeeAlso: INT 10/AH=FEh,FFh
  982. ----------212B--CX4358-----------------------
  983. INT 21 - PC Tools v5.1 PC-CACHE - INSTALLATION CHECK
  984.     AH = 2Bh
  985.     CX = 4358h ('CX')
  986. Return: AL = FFh if PC-CACHE not installed
  987.     AL = 00h if installed
  988.         CX = 6378h ('cx')
  989.         BX = ???
  990.         DX = ???
  991. ----------212B01CX5441-----------------------
  992. INT 21 - TAME v2.10 - INSTALLATION CHECK
  993.     AX = 2B01h
  994.     CX = 5441h ('TA')
  995.     DX = 4D45h ('ME')
  996. Return: AL = 02h if installed
  997.     ES:DX -> data area in TAME-RES (see below)
  998. Note:    TAME is a shareware program by David G. Thomas which gives up CPU time
  999.       to other partitions under a multitasker when the current partition's
  1000.       program incessantly polls the keyboard or system time
  1001.  
  1002. Format of TAME 2.10-2.20 data area:
  1003. Offset    Size    Description
  1004.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  1005.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  1006.  02h    DWORD    number of task switches
  1007.  06h    DWORD    number of keyboard polls
  1008.  0Ah    DWORD    number of time polls
  1009.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1010.  12h    DWORD    original INT 10h
  1011.  16h    DWORD    original INT 14h
  1012.  1Ah    DWORD    original INT 15h
  1013.  1Eh    DWORD    original INT 16h
  1014.  22h    DWORD    original INT 17h
  1015.  26h    DWORD    original INT 21h
  1016.  2Ah    DWORD    original INT 28h
  1017.  2Eh    WORD    offset of TAME INT 10h handler
  1018.  30h    WORD    offset of TAME INT 14h handler
  1019.  32h    WORD    offset of TAME INT 15h handler
  1020.  34h    WORD    offset of TAME INT 16h handler
  1021.  36h    WORD    offset of TAME INT 17h handler
  1022.  38h    WORD    offset of TAME INT 21h handler
  1023.  3Ah    WORD    offset of TAME INT 28h handler
  1024.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  1025.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1026.  40h    WORD    number of polls remaining before next task switch
  1027.  42h    WORD    /KEYIDLE value
  1028.  44h    BYTE    flags for interrupts already grabbed by TAME
  1029.         bit 0: INT 10h
  1030.             1: INT 14h
  1031.             2: INT 15h
  1032.             3: INT 16h
  1033.             4: INT 17h
  1034.             5: INT 21h
  1035.             6: INT 28h
  1036.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  1037.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  1038.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  1039.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  1040.  49h    BYTE    window or task number for this task
  1041.  4Ah    BYTE    multitasker type ???
  1042.         01h DESQview
  1043.         02h DoubleDOS
  1044.         03h TopView
  1045.         ???
  1046.  4Bh    BYTE    type of task switching selected
  1047.         bit 0: DESQview???
  1048.             1: DoubleDOS???
  1049.             2: TopView???
  1050.             3: KeySwitch
  1051.             4: HLT instruction
  1052.  4Ch    BYTE    ???
  1053.  4Dh    BYTE    flags
  1054.         bit 1: /FREQ instead of /MAX
  1055.  4Eh    BYTE    /FG: value
  1056.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  1057.  50h    BYTE    ???
  1058.  
  1059. Format of TAME 2.30 data area:
  1060. Offset    Size    Description
  1061.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  1062.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  1063.  02h    DWORD    number of task switches
  1064.  06h    DWORD    number of keyboard polls
  1065.  0Ah    DWORD    number of time polls
  1066.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  1067.  12h    DWORD    time of last /CLEAR or TAME-RES load
  1068.  16h    DWORD    time yielded
  1069.  1Ah    DWORD    time spent polling
  1070.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  1071.  22h    DWORD    original INT 10h
  1072.  26h    DWORD    original INT 14h
  1073.  2Ah    DWORD    original INT 15h
  1074.  2Eh    DWORD    original INT 16h
  1075.  32h    DWORD    original INT 17h
  1076.  36h    DWORD    original INT 21h
  1077.  3Ah    DWORD    original INT 28h
  1078.  3Eh    WORD    offset of TAME INT 10h handler
  1079.  40h    WORD    offset of TAME INT 14h handler
  1080.  42h    WORD    offset of TAME INT 15h handler
  1081.  44h    WORD    offset of TAME INT 16h handler
  1082.  46h    WORD    offset of TAME INT 17h handler
  1083.  48h    WORD    offset of TAME INT 21h handler
  1084.  4Ah    WORD    offset of TAME INT 28h handler
  1085.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  1086.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  1087.  50h    WORD    number of polls remaining before next task switch
  1088.  52h    WORD    /KEYIDLE value
  1089.  54h    WORD    /FG: value
  1090.  56h    WORD    task switches left until next FGONLY DESQview API call
  1091.  58h    WORD    multitasker version
  1092.  5Ah    WORD    virtual screen segment
  1093.  5Ch    BYTE    flags for interrupts already grabbed by TAME
  1094.         bit 0: INT 10h
  1095.             1: INT 14h
  1096.             2: INT 15h
  1097.             3: INT 16h
  1098.             4: INT 17h
  1099.             5: INT 21h
  1100.             6: INT 28h
  1101.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  1102.  5Eh    BYTE    window or task number for this task
  1103.  5Fh    BYTE    multitasker type
  1104.         01h DESQview
  1105.         02h DoubleDOS
  1106.         03h TopView
  1107.         04h OmniView
  1108.         05h VM/386
  1109.  60h    BYTE    type of task switching selected (bit flags)
  1110.         bit 0: DESQview
  1111.             1: DoubleDOS
  1112.             2: TopView
  1113.             3: OmniView
  1114.             4: KeySwitch
  1115.             5: HLT instruction
  1116.  61h    BYTE    watch_DOS
  1117.  62h    BYTE    bit flags
  1118.         bit 0: TAME enabled
  1119.             1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  1120.             2: /TIMEPOLL
  1121.             3: /KEYPOLL
  1122.             4: inhibit timer
  1123.             5: enable status monitoring
  1124.  63h    BYTE    old status
  1125.  64h    WORD    signature DA34h
  1126. ----------212C-------------------------------
  1127. INT 21 - DOS - GET CURRENT TIME
  1128.     AH = 2Ch
  1129. Return: CH = hours
  1130.     CL = minutes
  1131.     DH = seconds
  1132.     DL = hundredths of seconds
  1133. Note:    time is updated approximately every 5/100 second
  1134. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,02h,FEh
  1135. ----------212D-------------------------------
  1136. INT 21 - DOS - SET CURRENT TIME
  1137.     AH = 2Dh
  1138.     CH = hours
  1139.     CL = minutes
  1140.     DH = seconds
  1141.     DL = hundredths of seconds
  1142. Return: AL = 00h if no error
  1143.        = FFh if bad value sent to routine
  1144. Note:    DOS 3.3+ also sets CMOS clock
  1145. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,03h,FFh
  1146. ----------212E-------------------------------
  1147. INT 21 - DOS - SET VERIFY FLAG
  1148.     AH = 2Eh
  1149.     DL = 00h
  1150.     AL = 01h VERIFY on
  1151.          00h VERIFY off
  1152. Note:    when ON, all disk writes are verified
  1153. SeeAlso: AH=54h
  1154. ----------212F-------------------------------
  1155. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  1156.     AH = 2Fh
  1157. Return: ES:BX -> DTA
  1158. SeeAlso: AH=1Ah
  1159. ----------2130-------------------------------
  1160. INT 21 - DOS 2+ - GET DOS VERSION
  1161.     AH = 30h
  1162. Return: AL = major version number (00h for DOS 1.x)
  1163.     AH = minor version number
  1164.     BH = OEM number
  1165.         00h IBM
  1166.         16h DEC
  1167.         99h    STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS)
  1168.         FFh Phoenix
  1169.     BL:CX = 24-bit user number
  1170. Notes:    the OS/2 Compatibility Box returns 0Ah for the major version
  1171.     DOS 4.01 and 4.02 identify themselves as version 4.00
  1172. ----------2130-------------------------------
  1173. INT 21 - Phar Lap 386/DOS-Extender - GET VERSION
  1174.     AH = 30h
  1175.     EBX = 50484152h ("PHAR")
  1176. Return: ???
  1177. ----------213000BX1234-----------------------
  1178. INT 21 - CTask 2.0 - INSTALLATION CHECK
  1179.     AX = 3000h
  1180.     BX = 1234h
  1181.     DS:DX -> version string??? (8 bytes)
  1182. Return: AL = DOS major version
  1183.     AH = DOS minor version
  1184.     CX:BX -> ???
  1185. Notes:    if first eight bytes of returned data block equal eight bytes passed
  1186.       in, CTask is resident
  1187.     CTask is a multitasking kernel for C written by Thomas Wagner
  1188. ----------2131-------------------------------
  1189. INT 21 - DOS 2+ - TERMINATE BUT STAY RESIDENT
  1190.     AH = 31h
  1191.     AL = exit code
  1192.     DX = program size, in paragraphs
  1193. Note:    most TSRs can save some memory by releasing their environment block
  1194.       before terminating (see AH=26h,AH=49h)
  1195. SeeAlso: AH=00h,AH=4Ch,INT 20, INT 22, INT 27
  1196. ----------2132-------------------------------
  1197. INT 21 - DOS 2+ internal - GET DRIVE PARAMETER BLOCK
  1198.     AH = 32h
  1199.     DL = drive number
  1200.         0 = default, 1 = A, etc.
  1201. Return: AL = FFh if invalid drive number, else
  1202.     DS:BX -> drive parameter block (see below)
  1203. Note:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  1204.       except for the DWORD at offset 12h
  1205. SeeAlso: AH=1Fh
  1206.  
  1207. Format of DOS Drive Parameter Block:
  1208. Offset    Size    Description
  1209.  00h    BYTE    drive number (0 = A, etc.)
  1210.  01h    BYTE    unit number within device driver
  1211.  02h    WORD    number of bytes per sector
  1212.  04h    BYTE    largest sector number in cluster (one less than sect/clust)
  1213.  05h    BYTE    log base two of the cluster size
  1214.  06h    WORD    number of reserved (boot) sectors
  1215.  08h    BYTE    number of copies of the FAT
  1216.  09h    WORD    number of root directory entries
  1217.  0Bh    WORD    first data sector on medium
  1218.  0Dh    WORD    largest possible cluster number (one more than # data clust)
  1219. ---DOS 2.x---
  1220.  0Fh    BYTE    number of sectors in one FAT copy
  1221.  10h    WORD    first sector of root directory
  1222.  12h    DWORD    address of device driver for this drive
  1223.  16h    BYTE    media descriptor byte for medium
  1224.  17h    BYTE    FFh indicates block must be rebuilt
  1225.  18h    DWORD    address of next device block, offset = FFFFh indicates last
  1226.  1Ch    WORD    starting cluster of current directory (0 = root directory)
  1227.  1Eh 64 BYTEs    ASCIZ current directory path string
  1228. ---DOS 3.x---
  1229.  0Fh    BYTE    number of sectors in one FAT copy
  1230.  10h    WORD    first sector of root directory
  1231.  12h    DWORD    address of device driver for this drive
  1232.  16h    BYTE    media descriptor byte for medium
  1233.  17h    BYTE    FFh = block must be rebuilt, 00h indicates block accessed
  1234.  18h    DWORD    address of next device block, offset = FFFFh indicates last
  1235.  1Ch    WORD    cluster at which to start search for free space when writing
  1236.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  1237. ---DOS 4.0---
  1238.  0Fh    WORD    number of sectors in one FAT copy
  1239.  11h    WORD    first sector of root directory
  1240.  13h    DWORD    address of device driver for this drive
  1241.  17h    BYTE    media descriptor byte for medium
  1242.  18h    BYTE    FFh = block must be rebuilt, 00h indicates block accessed
  1243.  19h    DWORD    address of next device block, offset = FFFFh indicates last
  1244.  1Dh    WORD    cluster at which to start search for free space when writing
  1245.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  1246. ----------2133-------------------------------
  1247. INT 21 - DOS 2+ - EXTENDED CONTROL-BREAK CHECKING
  1248.     AH = 33h
  1249.     AL = subfunction
  1250.         00h get state
  1251.         Return: DL = current BREAK setting
  1252.                 00h BREAK=OFF
  1253.                 01h BREAK=ON
  1254.         01h set state
  1255.         DL = 00h for OFF or 01h for ON
  1256. Return:    AL = FFh if error
  1257. Note:    under DOS 3+, this function does not use any of the DOS-internal stacks
  1258.       and is thus fully reentrant
  1259. SeeAlso: AX=3302h
  1260. ----------213302-----------------------------
  1261. INT 21 - DOS 3.x internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  1262.     AX = 3302h
  1263.     DL = new state
  1264.          00h for OFF or 01h for ON
  1265. Return: DL = old state of extended BREAK checking
  1266. Note:    this function does not use any of the DOS-internal stacks and is thus
  1267.       fully reentrant
  1268. SeeAlso: AH=33h
  1269. ----------213305-----------------------------
  1270. INT 21 - DOS 4.0 - GET BOOT DRIVE
  1271.     AX = 3305h
  1272. Return: DL = boot drive (1=A:,...)
  1273. ----------2134-------------------------------
  1274. INT 21 - DOS 2+ internal - RETURN CritSectFlag (InDOS) POINTER
  1275.     AH = 34h
  1276. Return: ES:BX -> 1-byte DOS "Critical Section Flag", also known as InDOS flag
  1277. Notes:    when the critical section flag is nonzero, code within DOS is being
  1278.       executed.  It is safe to enter DOS when both the critical section
  1279.       flag and the critical error flag are zero.
  1280.     The critical error flag is the byte after the critical section flag in
  1281.       DOS 2.x, and the byte BEFORE the critical section flag in DOS 3.x 
  1282.       (except COMPAQ DOS 3.0, where the critical error flag is located 1AAh
  1283.       bytes BEFORE the critical section flag)
  1284.     For DOS 3.1+, an undocumented call exists to get the address of the
  1285.       critical error flag (see AX=5D06h)
  1286. SeeAlso: AX=5D06h, AX=5D0Bh
  1287. ----------2135-------------------------------
  1288. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  1289.     AH = 35h
  1290.     AL = interrupt number
  1291. Return: ES:BX = value of interrupt vector
  1292. SeeAlso: AH=25h
  1293. ----------2136-------------------------------
  1294. INT 21 - DOS 2+ - GET DISK SPACE
  1295.     AH = 36h
  1296.     DL = drive code (0 = default, 1 = A, 2 = B, etc.)
  1297. Return: AX = number of sectors per cluster
  1298.          or FFFFh if invalid drive
  1299.     BX = number of available clusters
  1300.     CX = bytes per sector
  1301.     DX = total clusters
  1302. Notes:    multiply AX * CX * BX for free space on disk
  1303.     multiply AX * CX * DX for total disk space
  1304.     according to Dave Williams' MSDOS reference, the value in DX is
  1305.       incorrect for non-default drives after ASSIGN is run
  1306. SeeAlso: AH=1Bh,AH=1Ch
  1307. ----------213700-----------------------------
  1308. INT 21 - DOS 2+ internal - GET SWITCHAR
  1309.     AX = 3700h
  1310. Return: AL = FFh unsupported subfunction
  1311.     DL = current switch character
  1312. Notes:    documented in some OEM versions of some releases of DOS
  1313.     supported by OS/2 compatibility box
  1314. SeeAlso: AX=3701h
  1315. ----------213701-----------------------------
  1316. INT 21 - DOS 2+ internal - SET SWITCHAR
  1317.     AX = 3701h
  1318.     DL = new switch character
  1319. Return: AL = FFh unsupported subfunction
  1320. Notes:    documented in some OEM versions of some releases of DOS
  1321.     supported by OS/2 compatibility box
  1322. SeeAlso: AX=3700h
  1323. ----------2137-------------------------------
  1324. INT 21 - DOS 2.x and 3.3+ internal - AVAILDEV
  1325.     AH = 37h
  1326.     AL = subfunction
  1327.        02h read device availability (as set by AL=03h)
  1328.         Return: DL = device availability (always FFh under DOS 4.0)
  1329.        03h set device availability, where:
  1330.         DL = 00h means \DEV\ must preceed device names
  1331.         DL <> 00h means \DEV\ need not preceed device names
  1332. Return: AL = FFh if invalid subfunction
  1333. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  1334.       names without generating an error even if the directory \DEV does
  1335.       not actually exist (other paths generate an error if they do not
  1336.       exist).
  1337.     although DOS 3.3+ accepts these calls, they have no effect
  1338. ----------2138-------------------------------
  1339. INT 21 - DOS 2+ - GET COUNTRY-DEPENDENT INFORMATION
  1340.     AH = 38h
  1341. --DOS 2.x--
  1342.     AL = 00h get current-country info
  1343.     DS:DX -> buffer for returned info (see below)
  1344. Return: AX = country code (MSDOS 2.11 only)
  1345.     buffer at DS:DX filled
  1346. --DOS 3+--
  1347.     AL = 00h for current country
  1348.     AL = 01h thru 0FEh for specific country with code <255
  1349.     AL = 0FFh for specific country with code >= 255
  1350.        BX = 16-bit country code
  1351.     DS:DX -> buffer for returned info (see below)
  1352. Return:    CF set on error
  1353.         AX = error code (02h)
  1354.     CF clear if successful
  1355.         BX = country code
  1356.         DS:DX buffer filled
  1357. SeeAlso: AH=65h, INT 2F/AX=110Ch,1404h
  1358.  
  1359. Format of PCDOS 2.x country info:
  1360. Offset    Size    Description
  1361.  00h    WORD    date format  0 = USA    mm dd yy
  1362.                  1 = Europe dd mm yy
  1363.                  2 = Japan    yy mm dd
  1364.  02h    BYTE    currency symbol
  1365.  03h    BYTE    00h
  1366.  04h    BYTE    thousands separator char
  1367.  05h    BYTE    00h
  1368.  06h    BYTE    decimal separator char
  1369.  07h    BYTE    00h
  1370.  08h 24 BYTEs    reserved
  1371.  
  1372. Format of MSDOS 2.x, DOS 3+ country info:
  1373. Offset    Size    Description
  1374.  00h    WORD    date format (see above)
  1375.  02h  5 BYTEs    ASCIZ currency symbol string
  1376.  07h    BYTE    thousands separator char
  1377.  08h    BYTE    00h
  1378.  09h    BYTE    decimal separator char
  1379.  0Ah    BYTE    00h
  1380.  0Bh    BYTE    date separator char
  1381.  0Ch    BYTE    00h
  1382.  0Dh    BYTE    time separator char
  1383.  0Eh    BYTE    00h
  1384.  0Fh    BYTE    currency format
  1385.         bit 2 = set if currency symbol replaces decimal point
  1386.         bit 1 = number of spaces between value and currency symbol
  1387.         bit 0 = 0 if currency symbol precedes value
  1388.             1 if currency symbol follows value
  1389.  10h    BYTE    number of digits after decimal in currency
  1390.  11h    BYTE    time format
  1391.         bit 0 = 0 if 12-hour clock
  1392.             1 if 24-hour clock
  1393.  12h    DWORD    address of case map routine
  1394.         (FAR CALL, AL = char to map to upper case [>= 80h])
  1395.  16h    BYTE    data-list separator char
  1396.  17h    BYTE    00h
  1397.  18h 10 BYTEs    reserved
  1398. ----------2138--DXFFFF-----------------------
  1399. INT 21 - DOS 3+ - SET COUNTRY CODE
  1400.     AH = 38h
  1401.     AL = 01h thru 0FEh for specific country with code <255
  1402.     AL = FFh for specific country with code >= 255
  1403.        BX = 16-bit country code
  1404.     DX = FFFFh
  1405. Return: CF set on error
  1406.         AX = error code (see AH=59h)
  1407.     CF clear if successful
  1408. SeeAlso: INT 2F/AX=1403h
  1409. ----------2139-------------------------------
  1410. INT 21 - DOS 2+ - CREATE A SUBDIRECTORY (MKDIR)
  1411.     AH = 39h
  1412.     DS:DX -> ASCIZ pathname (may include drive)
  1413. Return: CF set on error
  1414.         AX = error code (03h,05h) (see AH=59h)
  1415.     CF clear if successful
  1416.         AX destroyed
  1417. Note:    all directories in the given path except the last must exist
  1418. SeeAlso: AH=3Ah,AH=3Bh, INT 2F/AX=1103h
  1419. ----------213A-------------------------------
  1420. INT 21 - DOS 2+ - REMOVE A DIRECTORY ENTRY (RMDIR)
  1421.     AH = 3Ah
  1422.     DS:DX -> ASCIZ pathname (may include drive)
  1423. Return: CF set on error
  1424.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  1425.     CF clear if successful
  1426.         AX destroyed
  1427. SeeAlso: AH=39h,AH=3Bh, INT 2F/AX=1101h
  1428. ----------213B-------------------------------
  1429. INT 21 - DOS 2+ - CHANGE THE CURRENT DIRECTORY (CHDIR)
  1430.     AH = 3Bh
  1431.     DS:DX -> ASCIZ directory name (may include drive)
  1432. Return: CF set on error
  1433.         AX = error code (03h) (see AH=59h)
  1434.     CF clear if successful
  1435.         AX destroyed
  1436. Note:    if new directory name includes a drive letter, the default drive is
  1437.       not changed, only the current directory on that drive
  1438. SeeAlso: AH=47h, INT 2F/AX=1105h
  1439. ----------213C-------------------------------
  1440. INT 21 - DOS 2+ - CREATE A FILE WITH HANDLE (CREAT)
  1441.     AH = 3Ch
  1442.     CX = attributes for file
  1443.         bit 0: read-only
  1444.         1: hidden
  1445.         2: system
  1446.         3: volume label (ignored)
  1447.         4: reserved, must be zero (directory)
  1448.         5: archive bit
  1449.         7: if set, file is shareable under Novell NetWare
  1450.     DS:DX -> ASCIZ filename (may include drive and path)
  1451. Return: CF set on error
  1452.         AX = error code (03h,04h,05h) (see AH=59h)
  1453.     CF clear if successful
  1454.         AX = file handle
  1455. Note:    if a file with the given name exists, it is truncated to zero length
  1456. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh
  1457. ----------213D-------------------------------
  1458. INT 21 - DOS 2+ - OPEN DISK FILE WITH HANDLE
  1459.     AH = 3Dh
  1460.     AL = access mode
  1461.         00h read only
  1462.         01h write only
  1463.         02h read/write
  1464.     AL bits 7-3 = file-sharing modes (DOS 3+)
  1465.         bit 7    = inheritance flag, set for no inheritance
  1466.         bits 4-6 = sharing mode
  1467.               000 compatibility mode
  1468.               001 exclusive (deny all)
  1469.               010 write access denied (deny write)
  1470.               011 read access denied (deny read)
  1471.               100 full access permitted (deny none)
  1472.               111 used internally by SHARE
  1473.         bit 3    = reserved, should be zero
  1474.     DS:DX -> ASCIZ filename
  1475. Return: CF set on error
  1476.         AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
  1477.     CF clear if successful
  1478.         AX = file handle
  1479. Notes:    file pointer is set to start of file
  1480.     file handles which are inherited from a parent also inherit sharing
  1481.       and access restrictions
  1482. SeeAlso: AH=0Fh,AH=3Ch,INT 2F/AX=1226h
  1483.  
  1484. File sharing behavior:
  1485.       |    Second and subsequent Opens
  1486.  First      |Compat  Deny      Deny     Deny    Deny
  1487.  Open      |       All      Write     Read    None
  1488.       |R W RW R W RW R W RW R W RW R W RW
  1489.  - - - - -| - - - - - - - - - - - - - - - - -
  1490.  Compat    R |Y Y Y  N N N  1 N N    N N N  1 N N
  1491.     W |Y Y Y  N N N  N N N    N N N  N N N
  1492.     RW|Y Y Y  N N N  N N N    N N N  N N N
  1493.  - - - - -|
  1494.  Deny    R |C C C  N N N  N N N    N N N  N N N
  1495.  All    W |C C C  N N N  N N N    N N N  N N N
  1496.     RW|C C C  N N N  N N N    N N N  N N N
  1497.  - - - - -|
  1498.  Deny    R |2 C C  N N N  Y N N    N N N  Y N N 
  1499.  Write    W |C C C  N N N  N N N    Y N N  Y N N 
  1500.     RW|C C C  N N N  N N N    N N N  Y N N
  1501.  - - - - -|
  1502.  Deny    R |C C C  N N N  N Y N    N N N  N Y N
  1503.  Read    W |C C C  N N N  N N N    N Y N  N Y N
  1504.     RW|C C C  N N N  N N N    N N N  N Y N
  1505.  - - - - -|
  1506.  Deny    R |2 C C  N N N  Y Y Y    N N N  Y Y Y
  1507.  None    W |C C C  N N N  N N N    Y Y Y  Y Y Y
  1508.     RW|C C C  N N N  N N N    N N N  Y Y Y
  1509. Legend: Y = open succeeds, N = open fails with error code 05h
  1510.     C = open fails, INT 24 generated
  1511.     1 = open succeeds if file read-only, else fails with error code
  1512.     2 = open succeeds if file read-only, else fails with INT 24
  1513. ----------213E-------------------------------
  1514. INT 21 - DOS 2+ - CLOSE A FILE WITH HANDLE
  1515.     AH = 3Eh
  1516.     BX = file handle
  1517. Return: CF set on error
  1518.         AX = error code (06h) (see AH=59h)
  1519.     CF clear if successful
  1520.         AX destroyed
  1521. Note:    if the file was written to, the time and date stamps are set to the
  1522.       current time
  1523. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,1227h
  1524. ----------213F-------------------------------
  1525. INT 21 - DOS 2+ - READ FROM FILE WITH HANDLE
  1526.     AH = 3Fh
  1527.     BX = file handle
  1528.     CX = number of bytes to read
  1529.     DS:DX -> buffer
  1530. Return: CF set on error
  1531.         AX = error code (05h,06h) (see AH=59h)
  1532.     CF clear if successful
  1533.         AX = number of bytes read (0 if at EOF before call)
  1534. Notes:    the returned AX may be smaller than the request in CX if a partial
  1535.       read occurred
  1536.     if reading from CON, read stops at first CR
  1537. SeeAlso: AH=27h,AH=40h,INT 2F/AX=1108h,1229h
  1538. ----------2140-------------------------------
  1539. INT 21 - DOS 2+ - WRITE TO FILE WITH HANDLE
  1540.     AH = 40h
  1541.     BX = file handle
  1542.     CX = number of bytes to write
  1543.     DS:DX -> buffer
  1544. Return: CF set on error
  1545.         AX = error code (05h,06h) (see AH=59h)
  1546.     CF clear if successful
  1547.         AX = number of bytes actually written
  1548. Notes:    if CX is zero, no data is written, and the file is truncated or
  1549.       extended to the current position
  1550.     the usual cause for AX < CX on return is a full disk
  1551. SeeAlso: AH=28h,AH=3Fh,INT 2F/AX=1109h
  1552. ----------2141-------------------------------
  1553. INT 21 - DOS 2+ - DELETE A FILE (UNLINK)
  1554.     AH = 41h
  1555.     DS:DX -> ASCIZ pathname of file to delete (no wildcards allowed)
  1556. Return: CF set on error
  1557.         AX = error code (02h,05h) (see AH=59h)
  1558.     CF clear if successful
  1559.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  1560. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  1561.       the filespec must be canonical (as returned by AH=60h)
  1562.     deleting a file which is currently open may lead to filesystem
  1563.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  1564.       referencing the deleted file, thus allowing writes to a nonexistent
  1565.       file.
  1566. SeeAlso: AH=13h,AX=5D00h,AH=60h,INT 2F/AX=1113h
  1567. ----------2142-------------------------------
  1568. INT 21 - DOS 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
  1569.     AH = 42h
  1570.     AL = method
  1571.         00h offset from beginning of file
  1572.         01h offset from present location
  1573.         02h offset from end of file
  1574.     BX = file handle
  1575.     CX:DX = offset in bytes
  1576. Return: CF set on error
  1577.         AX = error code (01h,06h) (see AH=59h)
  1578.     CF clear if successful
  1579.         DX:AX = new absolute offset from beginning of file
  1580. SeeAlso: AH=24h,INT 2F/AX=1228h
  1581. ----------214300-----------------------------
  1582. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  1583.     AX = 4300h
  1584.     DS:DX -> ASCIZ file name or directory name without trailing slash
  1585. Return: CF set on error
  1586.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  1587.     CF clear if successful
  1588.         CX = file attributes (see AX=4301h)
  1589. SeeAlso: AX=4301h,AH=B6h,INT 2F/AX=110Fh
  1590. ----------214301-----------------------------
  1591. INT 21 - DOS 2+ - PUT FILE ATTRIBUTES (CHMOD)
  1592.     AX = 4301h
  1593.     CX = file attribute bits
  1594.         bit 0 = read only
  1595.         1 = hidden file
  1596.         2 = system file
  1597.         3 = volume label
  1598.         4 = subdirectory
  1599.         5 = written since backup ("archive" bit)
  1600.         8 = shareable (Novell NetWare)
  1601.     DS:DX -> ASCIZ file name
  1602. Return: CF set on error
  1603.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  1604.     CF clear if successful
  1605. Note:    will not change volume label or directory attributes
  1606. SeeAlso: AX=4300h,INT 2F/AX=110Eh
  1607. ----------214400-----------------------------
  1608. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  1609.     AX = 4400h
  1610.     BX = file or device handle
  1611. Return: CF set on error
  1612.        AX = error code (see AH=59h)
  1613.     CF clear if successful
  1614.        DX = device info
  1615.        If bit 7 set: (character device)
  1616.            bit 0: console input device
  1617.            1: console output device
  1618.            2: NUL device
  1619.            3: CLOCK$ device
  1620.            4: device is special (uses INT 29)
  1621.            5: binary (raw) mode
  1622.            6: Not EOF
  1623.           11: media not removable???
  1624.           12: network device (DOS 3+)
  1625.           14: can process IOCTL control strings (see AL = 02h-05h)
  1626.        If bit 7 clear: (file)
  1627.            bits 0-5 are block device number
  1628.            6: file has not been written
  1629.           11: media not removable
  1630.           12: network device (DOS 3+)
  1631.           14: don't set file date/time on closing (DOS 3+)
  1632.           15: file is remote (DOS 3+)
  1633. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  1634. ----------214401-----------------------------
  1635. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  1636.     AX = 4401h
  1637.     BX = device handle
  1638.     DH = 0
  1639.     DL = device information to set (bits 0-7 from function 0)
  1640. Return: CF set on error
  1641.         AX = error code (see AH=59h)
  1642.     CF clear if successful
  1643. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  1644. ----------214402-----------------------------
  1645. INT 21 - DOS 2+ - IOCTL - READ CHARACTER DEVICE CONTROL STRING
  1646.     AX = 4402h
  1647.     BX = device handle
  1648.     CX = number of bytes to read
  1649.     DS:DX -> buffer
  1650. Return: CF set on error
  1651.         AX = error code (see AH=59h)
  1652.     CF clear if successful
  1653.         AX = number of bytes read
  1654. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  1655. ----------214402-----------------------------
  1656. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  1657.     AX = 4402h
  1658.     BX = file handle for device "PROTMAN$"
  1659.     DS:DX -> request block (see below)
  1660.     CX = 000Eh (size of request block)
  1661.  
  1662. Format of request block for GetProtocolManagerInfo:
  1663. Offset    Size    Description
  1664.  00h    WORD    01h
  1665.  02h    WORD    returned status (see below)
  1666.  04h    DWORD    returned pointer to structure representing parsed user config
  1667.  08h    DWORD    unused
  1668.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  1669.  
  1670. Format of request block for RegisterModule:
  1671. Offset    Size    Description
  1672.  00h    WORD    02h
  1673.  02h    WORD    returned status (see below)
  1674.  04h    DWORD    pointer to module's common characteristics table (see below)
  1675.  08h    DWORD    pointer to list of modules to which the module is to be bound
  1676.  0Ch    WORD    unused
  1677.  
  1678. Format of request block for BindAndStart:
  1679. Offset    Size    Description
  1680.  00h    WORD    03h
  1681.  02h    WORD    returned status (see below)
  1682.  04h    DWORD    caller's virtual address in FailingModules structure
  1683.  08h    DWORD    unused
  1684.  0Ch    WORD    unused
  1685.  
  1686. Format of request block for GetProtocolManagerLinkage:
  1687. Offset    Size    Description
  1688.  00h    WORD    04h
  1689.  02h    WORD    returned status (see below)
  1690.  04h    DWORD    returned dispatch point
  1691.  08h    DWORD    unused
  1692.  0Ch    WORD    returned protocol manager DS
  1693. Note:    the dispatch point may be called as follows instead of using this IOCTL
  1694.     STACK: WORD  protocol manager DS
  1695.            DWORD pointer to request block
  1696.     Return: AX = returned status
  1697.         STACK popped
  1698.  
  1699. Format of request block for GetProtocolIniPath:
  1700. Offset    Size    Description
  1701.  00h    WORD    05h
  1702.  02h    WORD    returned status (see below)
  1703.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  1704.  08h    DWORD    unused
  1705.  0Ch    WORD    buffer length
  1706.  
  1707. Format of request block for RegisterProtocolManagerInfo:
  1708. Offset    Size    Description
  1709.  00h    WORD    06h
  1710.  02h    WORD    returned status (see below)
  1711.  04h    DWORD    pointer to structure containing parsed user config file
  1712.  08h    DWORD    unused
  1713.  0Ch    WORD    length of structure
  1714.  
  1715. Format of request block for InitAndRegister:
  1716. Offset    Size    Description
  1717.  00h    WORD    07h
  1718.  02h    WORD    returned status (see below)
  1719.  04h    DWORD    unused
  1720.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  1721.  0Ch    WORD    unused
  1722.  
  1723. Format of request block for UnbindAndStop:
  1724. Offset    Size    Description
  1725.  00h    WORD    08h
  1726.  02h    WORD    returned status (see below)
  1727.  04h    DWORD    failing modules as for BindAndStart
  1728.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  1729.         if 0000h:0000h, terminate a set of previously dynamically
  1730.           bound protocol modules
  1731.  0Ch    WORD    unused
  1732.  
  1733. Format of request block for BindStatus:
  1734. Offset    Size    Description
  1735.  00h    WORD    09h
  1736.  02h    WORD    returned status (see below)
  1737.  04h    DWORD    must be 0000h:0000h
  1738.         on return, points to root tree
  1739.  08h    DWORD    0000h:0000h
  1740.  0Ch    WORD    unused under DOS
  1741.  
  1742. Format of request block for RegisterStatus:
  1743. Offset    Size    Description
  1744.  00h    WORD    0Ah
  1745.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  1746.  04h    DWORD    0000h:0000h
  1747.  08h    DWORD    pointer to 16-byte ASCIZ module name
  1748.  0Ch    WORD    0000h
  1749.  
  1750. Values of status code:
  1751.  0000h success
  1752.  0001h wait for release--protocol has retained control of the data buffer
  1753.  0002h request queued
  1754.  0003h frame not recognized
  1755.  0004h frame rejected
  1756.  0005h frame should be forwarded
  1757.  0006h out of resource
  1758.  0007h invalid parameter
  1759.  0008h invalid function
  1760.  0009h not supported
  1761.  000Ah hardware error
  1762.  000Bh transmit error
  1763.  000Ch unrecognized destination
  1764.  000Dh buffer too small
  1765.  0020h already started
  1766.  0021h binding incomplete
  1767.  0022h driver not initialized
  1768.  0023h hardware not found
  1769.  0024h hardware failure
  1770.  0025h configuration failure
  1771.  0026h interrupt conflict
  1772.  0027h MAC incompatible
  1773.  0028h initialization failed
  1774.  0029h no binding
  1775.  002Ah network may be disconnected
  1776.  002Bh incompatible OS version
  1777.  002Ch already registered
  1778.  002Dh path not found
  1779.  002Eh insufficient memory
  1780.  002Fh info not found
  1781.  00FFh general failure
  1782.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  1783.  
  1784. Format of common characteristics table:
  1785. Offset    Size    Description
  1786.  00h    WORD    size of table in bytes
  1787.  02h    BYTE    NDIS major version
  1788.  03h    BYTE    NDIS minor version
  1789.  04h    WORD    reserved
  1790.  06h    BYTE    module major version
  1791.  07h    BYTE    module minor version
  1792.  08h    DWORD    module function flag bits
  1793.         bit 0: binding at upper boundary supported
  1794.         bit 1: binding at lower boundary supported
  1795.         bit 2: dynamically bound
  1796.         bits 3-31 reserved, must be 0
  1797.  0Ch 16 BYTEs    ASCIZ module name
  1798.  1Ch    BYTE    upper boundary protocol level
  1799.         01h Media Access Control
  1800.         02h Data link
  1801.         03h network
  1802.         04h transport
  1803.         05h session
  1804.         FFh not specified
  1805.  1Dh    BYTE    upper boundary interface type
  1806.         for MACs: 1 = MAC
  1807.         for data links and transports: to be defined
  1808.         for session: 1 = NCB
  1809.         any level: 0 = private (ISV-defined)
  1810.  1Eh    BYTE    lower boundary protocol level
  1811.         00h physical
  1812.         01h Media Access Control
  1813.         02h Data link
  1814.         03h network
  1815.         04h transport
  1816.         05h session
  1817.         FFh not specified
  1818.  1Fh    BYTE    lower boundary interface type
  1819.         same as offset 1Dh
  1820.  20h    WORD    module ID filled in by protocol manager
  1821.  22h    WORD    module DS
  1822.  24h    DWORD    system request entry point
  1823.  28h    DWORD    pointer to service-specific characteristics
  1824.         0000h:0000h if none
  1825.  2Ch    DWORD    pointer to service-specific status
  1826.         0000h:0000h if none
  1827.  30h    DWORD    pointer to upper dispatch table (see below)
  1828.         0000h:0000h if none
  1829.  34h    DWORD    pointer to lower dispatch table (see below)
  1830.         0000h:0000h if none
  1831.  38h    DWORD    reserved, must be 0
  1832.  3Ch    DWORD    reserved, must be 0
  1833. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  1834.       interpreted as 01h
  1835.  
  1836. Format of MAC Service-Specific Characteristics Table:
  1837. Offset    Size    Description
  1838.  00h    WORD    length of table in bytes
  1839.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  1840.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  1841.         "HDLC", or "ISDN"
  1842.  12h    WORD    length of station addresses in bytes
  1843.  14h 16 BYTEs    permanent station address
  1844.  24h 16 BYTEs    current station address
  1845.  34h    DWORD    current functional adapter address (00000000h if none)
  1846.  38h    DWORD    pointer to multicast address list
  1847.  3Ch    DWORD    link speed in bits/sec
  1848.  40h    DWORD    service flags
  1849.         bit 0: supports broadcast
  1850.             1: supports multicast
  1851.             2: supports functional/group addressing
  1852.             3: supports promiscuous mode
  1853.             4: station address software settable
  1854.             5: statistics always current
  1855.             6: supports InitiateDiagnostics
  1856.             7: supports loopback
  1857.             8: MAC does primarily ReceiveChain indications instead of
  1858.                ReceiveLookahead indications
  1859.             9: supports IBM source routing
  1860.            10: supports MAC reset
  1861.            11: supports Open/Close adapter
  1862.            12: supports interrupt request
  1863.            13: supports source routing bridge
  1864.            14: supports GDT virtual addresses (OS/2 version)
  1865.            15: multiple TransferDatas allowed durign a single
  1866.                indication
  1867.            16: MAC normally sets FrameSize = 0 in ReceiveLookahead
  1868.            17-31: reserved, must be 0
  1869.  44h    WORD    maximum frame size which may be both sent and received
  1870.  46h    DWORD    total transmit buffer capacity in bytes
  1871.  4Ah    WORD    transmit buffer allocation block size in bytes
  1872.  4Ch    DWORD    total receive buffer capacity in bytes
  1873.  50h    WORD    receive buffer allocation block size in bytes
  1874.  52h  3 BYTEs    IEEE vendor code
  1875.  55h    BYTE    vendor adapter code
  1876.  56h    DWORD    pointer to ASCIZ vendor adapter description
  1877.  5Ah    WORD    IRQ used by adapter
  1878.  5Ch    WORD    transmit queue depth
  1879.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  1880.  60h  N BYTEs    vendor-specific info
  1881.  
  1882. Format of NetBIOS Service-Specific Characteristics Table
  1883. Offset    Size    Description
  1884.  00h    WORD    length of table in bytes
  1885.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  1886.  12h    WORD    NetBIOS module code
  1887.  14h  N BYTEs    vendor-specific info
  1888.  
  1889. Format of MAC Service-Specific Status Table:
  1890. Offset    Size    Description
  1891.  00h    WORD    length of table in bytes
  1892.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  1893.         (FFFFFFFFh = never)
  1894.  06h    DWORD    MAC status bits
  1895.         bits 0-2: 000 hardware not installed
  1896.               001 hardware failed startup diagnostics
  1897.               010 hardware configuration problem
  1898.               011 hardware fault
  1899.               100 operating marginally due to soft faults
  1900.               101 reserved
  1901.               110 reserved
  1902.               111 hardware fully operational
  1903.         bit 3:      MAC bound
  1904.             4:      MAC open
  1905.             5:      diagnostics in progress
  1906.             6-31: reserved
  1907.  0Ah    WORD    current packet filter flags
  1908.         bit 0: directed/multicast or group/functional
  1909.             1: broadcast
  1910.             2: promiscuous
  1911.             3: all source routing
  1912.             4-15: reserved, must be zero
  1913.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  1914.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  1915.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  1916.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  1917.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  1918.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  1919.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  1920.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  1921.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  1922.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  1923.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  1924.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  1925.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  1926.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  1927.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  1928.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  1929.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  1930.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  1931.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  1932.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  1933.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  1934.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  1935.  64h  N BYTEs    vendor-specific info
  1936. ----------214402-----------------------------
  1937. INT 21 - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  1938.     AX = 4402h
  1939.     BX = handle for character device "GDMS"
  1940.     CX = number of bytes to read (>= 4)
  1941.     DS:DX -> buffer (see below)
  1942. Return: CF set on error
  1943.         AX = error code (see AH=59h)
  1944.     CF clear if successful
  1945.         AX = number of bytes read
  1946.  
  1947. Format of returned data:
  1948. Offset    Size    Description
  1949.  00h  4 BYTEs    ???
  1950.  04h    DWORD    pointer to ???
  1951.  08h  4 BYTEs    ???
  1952. ----------214402-----------------------------
  1953. INT 21 - HIGHUMM.SYS - IOCTL - GET API ADDRESS
  1954.     AX = 4402h
  1955.     BX = handle for device "KSP$UMM"
  1956.     CX = 0004h
  1957.     DS:DX -> DWORD to hold entry point
  1958. Return: CF set on error
  1959.         AX = error code (see AH=59h)
  1960.     CF clear if successful
  1961.         AX = number of bytes read
  1962. Note:    HIGHUMM.SYS is part of "The Last Byte" by Key Software Products
  1963.  
  1964. Call HIGHUMM.SYS entry point with:
  1965.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  1966.         DX = size in paragraphs
  1967.         Return: BX = segment number (if successful)
  1968.                 DX = size of requested block/size of largest block
  1969.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  1970.         DX = segment number of UMB
  1971.     AH = 02h request a bank-switched memory block
  1972.         DX = size in paragraphs
  1973.         Return: BX = segment number (if successful)
  1974.                 DX = size of requested block/size of largest block
  1975.     AH = 03h release a bank-switched memory block
  1976.         DX = segment number
  1977.     AH = 04h transfer data to/from high memory
  1978.         DS:SI -> source
  1979.         ES:DI -> destination
  1980.         CX = length in bytes
  1981.         Note: enables bank-switched memory, does the copy, then disables
  1982.             bank-switched memory
  1983.     AH = 05h get a word from bank-switched memory
  1984.         ES:DI -> word to read
  1985.         Return: DX = word
  1986.     AH = 06h put a word to bank-switched memory
  1987.         ES:DI -> word to write
  1988.         DX = word
  1989.     AH = 07h put a byte to bank-switched memory
  1990.         ES:DI -> byte to write
  1991.         DL = byte
  1992.     AH = 08h enable bank-switched memory
  1993.         DS:SI -> 6-byte status save area
  1994.     AH = 09h disable bank-switched memory
  1995.         DS:SI -> 6-byte save area from enable call (AH=08h)
  1996.     AH = 0Ah assign name to UMB of bank-switched block
  1997.         DX = segment number
  1998.         DS:SI -> 8-byte blank-padded name
  1999.     AH = 0Bh locate UMB block by name
  2000.         DS:SI -> 8-byte blank-padded name
  2001.         Return: BX = segment number (if successful)
  2002.                 DX = size of block
  2003.     AH = 0Ch locate bank-switched block by name
  2004.         DS:SI -> 8-byte blank-padded name
  2005.         Return: BX = segment number (if successful)
  2006.                 DX = size of block
  2007. Return: AX = status code
  2008.         0001h successful
  2009.         0000h failed
  2010.             BL = error code
  2011.             80h not implemented
  2012.             B0h insufficient memory, smaller block available
  2013.             B1h insufficient memory, no blocks available
  2014.             B2h invalid segment number
  2015. ----------214403-----------------------------
  2016. INT 21 - DOS 2+ - IOCTL - WRITE CHARACTER DEVICE CONTROL STRING
  2017.     AX = 4403h
  2018.     BX = device handle
  2019.     CX = number of bytes to write
  2020.     DS:DX -> buffer
  2021. Return: CF set on error
  2022.         AX = error code (see AH=59h)
  2023.     CF clear if successful
  2024.         AX = number of bytes written
  2025. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  2026. ----------214404-----------------------------
  2027. INT 21 - DOS 2+ - IOCTL - READ BLOCK DEVICE CONTROL STRING
  2028.     AX = 4404h
  2029.     BL = drive number (0=default)
  2030.     CX = number of bytes to read
  2031.     DS:DX -> buffer
  2032. Return: CF set on error
  2033.         AX = error code (see AH=59h)
  2034.     CF clear if successful
  2035.         AX = number of bytes read
  2036. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  2037. ----------214405-----------------------------
  2038. INT 21 - DOS 2+ - IOCTL - WRITE BLOCK DEVICE CONTROL STRING
  2039.     AX = 4405h
  2040.     BL = drive number (0=default)
  2041.     CX = number of bytes to write
  2042.     DS:DX -> buffer
  2043. Return: CF set on error
  2044.         AX = error code (see AH=59h)
  2045.     CF clear if successful
  2046.         AX = number of bytes written
  2047. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2048. ----------214406-----------------------------
  2049. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  2050.     AX = 4406h
  2051.     BX = file or device handle
  2052. Return: AL = FFh device ready
  2053.          00h device not ready (or file at EOF)
  2054. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  2055. ----------214407-----------------------------
  2056. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  2057.     AX = 4407h
  2058.     BX = file or device handle
  2059. Return: AL = FFh device ready
  2060.          00h device not ready
  2061. Note:    for DOS 2.x, files are always ready for output
  2062. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  2063. ----------214408-----------------------------
  2064. INT 21 - DOS 3+ - IOCTL - BLOCK DEVICE CHANGEABLE
  2065.     AX = 4408h
  2066.     BL = drive number (0=default)
  2067. Return:    CF set on error
  2068.         AX = error code (0Fh invalid drive) (see AH=59h)
  2069.     CF clear if successful
  2070.         AX = 00h removable
  2071.          01h fixed
  2072. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  2073. ----------214409-----------------------------
  2074. INT 21 - DOS 3+ - IOCTL - BLOCK DEVICE LOCAL
  2075.     AX = 4409h
  2076.     BL = drive number (0=default)
  2077. Return: DX = attribute word, bit 12 set if device is remote
  2078. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  2079. ----------21440A-----------------------------
  2080. INT 21 - DOS 3+ - IOCTL - HANDLE LOCAL
  2081.     AX = 440Ah
  2082.     BX = file handle
  2083. Return: DX = attribute word, bit 15 set if file is remote
  2084. Note:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  2085.       the file server on which the handle is located in CX
  2086. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  2087. ----------21440B-----------------------------
  2088. INT 21 - DOS 3+ - IOCTL - SET SHARING RETRY COUNT
  2089.     AX = 440Bh
  2090.     CX = delay (default 1)
  2091.     DX = retry count (default 3)
  2092. Return: CF set on error
  2093.         AX = error code (see AH=59h)
  2094.     CF clear if successful
  2095. Note:    delay is dependent on processor speed (value in CX specifies number of
  2096.       64K-iteration empty loops to execute)
  2097. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  2098. ----------21440C-----------------------------
  2099. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  2100.     AX = 440Ch
  2101.     BX = device handle
  2102.     CH = category code
  2103.         00h unknown (DOS 3.3+)
  2104.         01h COMn: (DOS 3.3+)
  2105.         03h CON (DOS 3.3+)
  2106.         05h LPTn:
  2107.         9Eh Media Access Control driver (STARLITE)
  2108.     CL = function
  2109.         00h MAC driver Bind (STARLITE)
  2110.         45h set iteration count
  2111.         4Ah select code page
  2112.         4Ch start code-page preparation
  2113.         4Dh end code-page preparation
  2114.         5Fh set display information (DOS 4.0)
  2115.         65h get iteration count
  2116.         6Ah query selected code page
  2117.         6Bh query prepare list
  2118.         7Fh get display information (DOS 4.0)
  2119.     DS:DX -> (DOS) parameter block (see below)
  2120.     SI:DI -> (OS/2 comp box) parameter block (see below)
  2121. Return: CF set on error
  2122.         AX = error code (see AH=59h)
  2123.     DS:DX -> (OS/2 comp box) data block
  2124. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
  2125.  
  2126. Format of parameter block for function 00h:
  2127. Offset    Size    Description
  2128.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  2129.  08h    WORD    version
  2130.  0Ah    WORD    flags
  2131.          bit 0: media requires connect or listen request before use
  2132.         bit 1: network is a LAN (broadcast/multicast supported)
  2133.         bit 2: point-to-point network
  2134.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  2135.          by MAC driver)
  2136.  0Eh    WORD    context
  2137.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  2138.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  2139.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  2140.  16h    WORD    addressing format (filled in by MAC driver)
  2141.          0000h general addressing
  2142.         0001h Ethernet addressing
  2143.         0002h Token Ring addressing
  2144.         0003h Token Bus addressing
  2145.  18h    DWORD    Send entry point (filled in by MAC driver)
  2146.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  2147.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  2148.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  2149.  
  2150. Format of parameter block for function 45h:
  2151. Offset    Size    Description
  2152.  00h    WORD    number of times output is attempted before driver assumes
  2153.         device is busy
  2154.  
  2155. Format of parameter block for functions 4Ah and 6Ah:
  2156. Offset    Size    Description
  2157.  00h    WORD    length of data
  2158.  02h    WORD    code page ID
  2159.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  2160.           start/end for each of N ranges (DOS 4.0)
  2161.     WORD    0000h  end of data (DOS 4.0)
  2162.  
  2163. Format of parameter block for function 4Dh:
  2164. Offset    Size    Description
  2165.  00h    WORD    length of data
  2166.  02h    WORD    code page ID
  2167.  
  2168. Format of parameter block for function 4Ch:
  2169. Offset    Size    Description
  2170.  00h    WORD    flags
  2171.         DISPLAY.SYS = 0000h
  2172.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  2173.             prepare cartridge selection
  2174.  02h    WORD    length of remainder of parameter block
  2175.  04h    WORD    number of code pages following
  2176.  06h  N WORDs    code page 1,...,N
  2177.  
  2178. Format of parameter block for functions 5Fh and 7Fh:
  2179. Offset    Size    Description
  2180.  00h    BYTE    level (0 for DOS 4.0)
  2181.  01h    BYTE    reserved (0)
  2182.  02h    WORD    length of following data (14)
  2183.  04h    WORD    control flags
  2184.           bit 0 set for blink, clear for intensity
  2185.           bits 1 to 15 reserved
  2186.  06h    BYTE    mode type (1=text, 2=graphics)
  2187.  07h    BYTE    reserved (0)
  2188.  08h    WORD    colors
  2189.            0 = monochrome
  2190.            else N bits per pixel
  2191.  0Ah    WORD    pixel columns
  2192.  0Ch    WORD    pixel rows
  2193.  0Eh    WORD    character columns
  2194.  10h    WORD    character rows
  2195.  
  2196. Format of parameter block for function 6Bh:
  2197. Offset    Size    Description
  2198.  00h    WORD    length of following data
  2199.  02h    WORD    number of hardware code pages
  2200.  04h  N WORDs    hardware code pages 1,...,N
  2201.     WORD    number of prepared code pages
  2202.       N WORDs    prepared code pages 1,...,N
  2203. ----------21440D-----------------------------
  2204. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  2205.     AX = 440Dh
  2206.     BL = drive number (0=default)
  2207.     CH = category code
  2208.         08h disk drive
  2209.     CL = function
  2210.          40h set device parameters
  2211.         41h write logical device track
  2212.         42h format and verify logical device track
  2213.         46h (DOS 4.0) set volume serial number (see also AH=69h)
  2214.         47h (DOS 4.0) set access flag
  2215.         60h get device parameters
  2216.         61h read logical device track
  2217.         62h verify logical device track
  2218.         66h (DOS 4.0) get volume serial number (see also AH=69h)
  2219.         67h (DOS 4.0) get access flag
  2220.     DS:DX -> (DOS) parameter block (see below)
  2221.     SI:DI -> (OS/2 comp box) parameter block (see below)
  2222. Return: CF set on error
  2223.        AX = error code (see AH=59h)
  2224.     DS:DX -> (OS/2 comp box) data block
  2225. Note:    DOS 4.01 seems to ignore the high byte of the number of directory
  2226.       entries in the BPB for diskettes.
  2227. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  2228.  
  2229. Format of parameter block for functions 40h, 60h:
  2230. Offset    Size    Description
  2231.  00h    BYTE    special functions
  2232.         bit 0 set if function to use current BPB, clear if Device BIOS
  2233.             Parameter Block field contains new default BPB
  2234.         bit 1 set if function to use track layout fields only
  2235.             must be clear if CL=60h
  2236.         bit 2 set if all sectors in track same size (should be set)
  2237.         bits 3-7 reserved
  2238.  01h    BYTE    device type
  2239.         00h  320K/360K disk
  2240.         01h  1.2M disk
  2241.         02h  720K disk
  2242.         03h  single-density 8-inch disk
  2243.         04h  double-density 8-inch disk
  2244.         05h  fixed disk
  2245.         06h  tape drive
  2246.         07h  1.44M disk
  2247.         08h  other type of block device
  2248.  02h    WORD    device attributes
  2249.         bit 0 set if nonremovable medium
  2250.         bit 1 set if door lock supported
  2251.         bits 2-15 reserved
  2252.  04h    WORD    number of cylinders
  2253.  06h    BYTE    media type
  2254.         00h 1.2M disk (default)
  2255.         01h 320K/360K disk
  2256.  07h 31 BYTEs    device BPB (see AH=53h)
  2257.  26h    WORD    number of sectors per track (start of track layout field)
  2258.  28h  N word pairs: number,size of each sector in track
  2259.  
  2260. Format of parameter block for functions 41h, 61h:
  2261. Offset    Size    Description
  2262.  00h    BYTE    reserved, must be zero
  2263.  01h    WORD    number of disk head
  2264.  03h    WORD    number of disk cylinder
  2265.  05h    WORD    number of first sector to read/write
  2266.  07h    WORD    number of sectors
  2267.  09h    DWORD    transfer address
  2268.  
  2269. Format of parameter block for functions 42h, 62h:
  2270. Offset    Size    Description
  2271.  00h    BYTE    reserved, must be zero (DOS <3.2)
  2272.           bit 0=0: format/verify track
  2273.             1: format status call (DOS 3.2+)
  2274.           bits 1-7 reserved, must be zero
  2275.         on return (DOS 4.0):
  2276.           bit 0: set if specified tracks, sectors/track supported
  2277.           bit 1: set if function not supported by BIOS
  2278.           bit 2: set if specified tracks, sectors/track not supported
  2279.           bit 3: set if no disk in drive
  2280.  01h    WORD    number of disk head
  2281.  03h    WORD    number of disk cylinder
  2282.  
  2283. Format of parameter block for functions 46h, 66h:
  2284. Offset    Size    Description
  2285.  00h    WORD    info level (00h)
  2286.  02h    DWORD    disk serial number (binary)
  2287.  06h 11 BYTEs    volume label or "NO NAME    "
  2288.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  2289.  
  2290. Format of parameter block for functions 47h, 67h:
  2291. Offset    Size    Description
  2292.  00h    BYTE    special-function field (must be zero)
  2293.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  2294. ----------21440E-----------------------------
  2295. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  2296.     AX = 440Eh
  2297.     BL = drive number (0=default)
  2298. Return: CF set on error
  2299.         AX = error code (see AH=59h)
  2300.     CF clear if successful
  2301.         AL = 00h block device has only one logical drive assigned
  2302.          1..26 the last letter used to reference the drive (1=A:,etc)
  2303. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  2304. ----------21440F-----------------------------
  2305. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  2306.     AX = 440Fh
  2307.     BL = physical drive number (0=default)
  2308. Return: CF set on error
  2309.         AX = error code (see AH=59h)
  2310.     CF clear if successful
  2311. Note:    maps logical drives to physical drives, similar to DOS's treatment of
  2312.       a single physical floppy drive as both A: and B:
  2313. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  2314. ----------214451-----------------------------
  2315. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  2316.     AX = 4451h
  2317. Return: CF set if not Concurrent DOS
  2318.         AX = error code (see AH=59h)
  2319.     CF clear if successful
  2320.         AH = 14h
  2321.         AL = version (high nybble = major version, low nybble = minor ver)
  2322. SeeAlso: AX=4452h
  2323. ----------214452-----------------------------
  2324. INT 21 - DR DOS 3.41-5.0 - IOCTL - DETERMINE DOS TYPE
  2325.     AX = 4452h
  2326.     CF set
  2327. Return: CF set if not DR DOS
  2328.         AX = error code (see AH=59h)
  2329.     CF clear if DR DOS
  2330. Notes:    the DR DOS version is stored in the environment variable VER
  2331.     Digital Research indicates that this call may change in future
  2332.       versions, making the installation check unreliable.  DR DOS 3.41+ is
  2333.       supposedly sufficiently compatible with MSDOS that programs need not
  2334.       decide which of the two they are running under.
  2335. SeeAlso: AX=4451h
  2336. ----------2145-------------------------------
  2337. INT 21 - DOS 2+ - CREATE DUPLICATE HANDLE (DUP)
  2338.     AH = 45h
  2339.     BX = file handle to duplicate
  2340. Return: CF set on error
  2341.         AX = error code (04h,06h) (see AH=59h)
  2342.     CF clear if successful
  2343.         AX = new file handle
  2344. Note:    moving file pointer for either handle will also move it for the other,
  2345.       because both will refer to the same system file table
  2346. SeeAlso: AH=3Dh,AH=46h
  2347. ----------2146-------------------------------
  2348. INT 21 - DOS 2+ - FORCE DUPLICATE HANDLE (FORCDUP,DUP2)
  2349.     AH = 46h
  2350.     BX = existing file handle
  2351.     CX = new file handle
  2352. Return: CF set on error
  2353.         AX = error code (04h,06h) (see AH=59h)
  2354.     CF clear if successful
  2355.         AX = new file handle (undocumented)
  2356. Notes:    closes file with handle BX if it is still open
  2357.     DOS 3.30 hangs if BX=CX on entry
  2358.     moving file pointer for either handle will also move it for the other,
  2359.       because both will refer to the same system file table
  2360. SeeAlso: AH=3Dh,AH=45h
  2361. ----------2147-------------------------------
  2362. INT 21 - DOS 2+ - GET CURRENT DIRECTORY
  2363.     AH = 47h
  2364.     DL = drive (0=default, 1=A, etc.)
  2365.     DS:SI points to 64-byte buffer area
  2366. Return: CF set on error
  2367.         AX = error code (0Fh) (see AH=59h)
  2368.     CF clear if successful
  2369.         AX destroyed (0100h)
  2370. Notes:    the returned path does not include a drive or the initial backslash
  2371.     many Microsoft products for Windows rely on AX being 0100h on success
  2372. SeeAlso: AH=3Bh
  2373. ----------2148-------------------------------
  2374. INT 21 - DOS 2+ - ALLOCATE MEMORY
  2375.     AH = 48h
  2376.     BX = number of 16-byte paragraphs desired
  2377. Return: CF set on error
  2378.         AX = error code (07h,08h) (see AH=59h)
  2379.         BX = size of largest available block
  2380.     CF clear if successful
  2381.         AX = segment of allocated memory block
  2382. Note:    DOS 3.30 coalesces free blocks while scanning for a block to allocate
  2383. SeeAlso: AH=49h,AH=4Ah,AH=58h
  2384. ----------2149-------------------------------
  2385. INT 21 - DOS 2+ - FREE MEMORY
  2386.     AH = 49h
  2387.     ES = segment address of area to be freed
  2388. Return: CF set on error
  2389.         AX = error code (07h,09h) (see AH=59h)
  2390.     CF clear if successful
  2391. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  2392.       code contains only an error 09h exit
  2393.     DOS 3.30 does not coalesce adjacent free blocks when a block is freed,
  2394.       only when a block is allocated or resized
  2395. SeeAlso: AH=48h,AH=4Ah
  2396. ----------214A-------------------------------
  2397. INT 21 - DOS 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
  2398.     AH = 4Ah
  2399.     ES = segment address of block to change
  2400.     BX = new size in paragraphs
  2401. Return: CF set on error
  2402.         AX = error code (07h,08h,09h) (see AH=59h)
  2403.         BX = maximum size possible for the block (if AX=08h)
  2404.     CF clear if successful
  2405. Notes:    under PCDOS 2.1 and 3.1 and MSDOS 3.2 and 3.3, if there is insufficient
  2406.       memory to expand the block as much as requested, the block will be
  2407.       made as large as possible
  2408.     DOS 3.30 coalesces any free blocks immediately following the block to
  2409.       be resized
  2410. SeeAlso: AH=48h,AH=49h
  2411. ----------214B-------------------------------
  2412. INT 21 - DOS 2+ - LOAD OR EXECUTE (EXEC)
  2413.     AH = 4Bh
  2414.     AL = subfunction
  2415.         00h load and execute program
  2416.         01h load but do not execute (internal)
  2417.         03h load overlay; do not create PSP
  2418.         04h called by MSC spawn(P_NOWAIT,...) when running DOS 4.x.
  2419.         returns unsuccessfully under DOS 4.0 (but may be successful
  2420.           in the original European OEM MSDOS 4.0, which has limited
  2421.           multitasking built in)
  2422.     DS:DX -> ASCIZ filename
  2423.     ES:BX -> parameter block (see below)
  2424. Return: CF set on error
  2425.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  2426.     CF clear if successful
  2427.         if subfunction 01h, process ID set to new program's PSP; get with
  2428.         INT 21/AH=62h
  2429. Notes:    DOS 2.x destroys all registers, including SS:SP
  2430.     for functions 00h and 01h, the calling process must ensure that there
  2431.       is enough unallocated memory available; if necessary, by releasing
  2432.       memory with AH=49h or AH=4Ah
  2433. BUG:    DOS 2.00 assumes that DS points at the current program's PSP
  2434. SeeAlso: AH=4Ch,AH=4Dh,INT 2E
  2435.  
  2436. Format of EXEC parameter block for AL=00h,01h:
  2437. Offset    Size    Description
  2438.  00h    WORD    segment of environment (0 = use current) (see AH=26h)
  2439.  02h    DWORD    pointer to command line
  2440.  06h    DWORD    pointer to first FCB (see AH=0Fh)
  2441.  0Ah    DWORD    pointer to second FCB (see AH=0Fh)
  2442.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  2443.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  2444.  
  2445. Format of EXEC parameter block for AL=03h:
  2446. Offset    Size    Description
  2447.  00h    WORD    segment load address
  2448.  02h    WORD    segment relocation factor
  2449.  
  2450. Format of .EXE file header:
  2451. Offset    Size  Description
  2452.  00h    WORD  4Dh, 5Ah signature (sometimes 5Ah, 4Dh)
  2453.  02h    WORD  image size remainder (program size mod 512, not including header)
  2454.  04h    WORD  number of 512-byte pages needed to hold .EXE file (incl header)
  2455.  06h    WORD  number of relocation items
  2456.  08h    WORD  header size in paragraphs
  2457.  0Ah    WORD  minimum extra paragraphs needed
  2458.  0Ch    WORD  maximum extra paragraphs needed
  2459.  0Eh    WORD  stack segment
  2460.  10h    WORD  stack offset
  2461.  12h    WORD  word checksum of entire file
  2462.  14h    DWORD initial CS:IP
  2463.  18h    WORD  offset of relocation table 
  2464.  1Ah    WORD  overlay number
  2465. Note:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  2466.       versions of the MS linker set it that way
  2467. ----------214C-------------------------------
  2468. INT 21 - DOS 2+ - QUIT WITH EXIT CODE (EXIT)
  2469.     AH = 4Ch
  2470.     AL = exit code
  2471. Return: never returns
  2472. Note:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  2473.       all open files are closed
  2474. SeeAlso: AH=26h,AH=4Bh,AH=4Dh, INT 22
  2475. ----------214D-------------------------------
  2476. INT 21 - DOS 2+ - GET EXIT CODE OF SUBPROGRAM (WAIT)
  2477.     AH = 4Dh
  2478. Return: AL = exit code of subprogram (from AH=31h or AH=4Ch)
  2479.     AH = circumstance which caused termination
  2480.         00h Terminate/abort
  2481.         01h Control-C/Control-Break
  2482.         02h Hard error
  2483.         03h Terminate and stay resident
  2484. SeeAlso: AH=4Bh,AH=4Ch
  2485. ----------214E-------------------------------
  2486. INT 21 - DOS 2+ - FIND FIRST ASCIZ (FINDFIRST)
  2487.     AH = 4Eh
  2488.     CX = search attributes (see AX=4301h)
  2489.     DS:DX -> ASCIZ filespec (drive, path, and wildcards allowed)
  2490. Return: CF set on error
  2491.         AX = error code (02h,12h) (see AH=59h)
  2492.     CF clear if successful
  2493.         [DTA] = data block (see below)
  2494. Notes:    for search attributes other than 08h, all files with at MOST the
  2495.       specified attribute bits, the archive (20h) bit, and the read-only
  2496.       (01h) bits set will be returned.  Under DOS 2.x, searching for
  2497.       attribute 08h (volume label) will also return normal files, while
  2498.       under DOS 3+ only the volume label (if any) will be returned.
  2499.     this call also returns successfully if given the name of a character
  2500.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  2501.       and the current date and time.  DOS 3+ returns attribute 40h and the
  2502.       current date and time.
  2503.     under LANtastic, this call may be used to obtain a list of a server's
  2504.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  2505.       resources may be obtained by searching for "\\SERVER\@*.*"
  2506. BUG:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  2507.       with a character device name (no wildcards) and search attributes
  2508.       which include the volume-label bit (08h) will fail unless there is
  2509.       an intervening DOS call which implicitly or explicity performs a
  2510.       directory search without the volume-label bit.  Such implicit
  2511.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  2512.       (AH=41h), and RENAME (AH=56h)
  2513. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh
  2514.  
  2515. Format of FindFirst data block:
  2516. Offset    Size    Description
  2517. ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3---
  2518.  00h    BYTE    drive letter
  2519.  01h 11 BYTEs    search template
  2520.  0Ch    BYTE    search attributes
  2521. ---DOS 2.x (and some DOS 3.x???)---
  2522.  00h    BYTE    search attributes
  2523.  01h    BYTE    drive letter
  2524.  02h 11 BYTEs    search template
  2525. ---WILDUNIX.COM---
  2526.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  2527.  0Ch    BYTE    search attributes
  2528. ---DOS 2.x and most 3.x---
  2529.  0Dh    WORD    entry count within directory
  2530.  0Fh    DWORD    pointer to DTA???
  2531.  13h    WORD    cluster number of start of parent directory
  2532. ---PCDOS 4.01, MSDOS 3.2/3.3---
  2533.  0Dh    WORD    entry count within directory
  2534.  0Fh    WORD    cluster number of start of parent directory
  2535.  11h  4 BYTEs    reserved
  2536. ---all versions, documented fields---
  2537.  15h    BYTE    attribute of file found
  2538.  16h    WORD    file time
  2539.             bits 11-15: hour
  2540.             bits 5-10:    minute
  2541.             bits 0-4:    seconds/2
  2542.  18h    WORD    file date
  2543.             bits 9-15:    year-1980
  2544.             bits 5-8:    month
  2545.             bits 0-4:    day
  2546.  1Ah    DWORD    file size
  2547.  1Eh 13 BYTEs    ASCIZ filename+extension
  2548. ----------214E--DS0000-----------------------
  2549. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  2550.     AH = 4Eh
  2551.     DS:DX = 0000h:0000h
  2552. Return:    AH = 99h if installed
  2553. Note:    WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  2554.       Hosgood and Terry Barnaby
  2555. ----------214F-------------------------------
  2556. INT 21 - DOS 2+ - FIND NEXT ASCIZ (FINDNEXT)
  2557.     AH = 4Fh
  2558.     [DTA] = data block from last AH = 4Eh/4Fh call
  2559. Return: CF set on error
  2560.         AX = error code (12h) (see AH=59h)
  2561.     CF clear if successful
  2562.         [DTA] = data block (see AH=4Eh)
  2563. SeeAlso: AH=12h,AH=4Eh
  2564. ----------2150-------------------------------
  2565. INT 21 - DOS 2+ internal - SET PSP SEGMENT
  2566.     AH = 50h
  2567.     BX = segment address of new PSP (see AH=26h for format)
  2568. Notes:    under DOS 2.x, this function cannot be invoked inside an INT 28h
  2569.       handler without setting the Critical Error flag
  2570.     under DOS 3+, this function does not use any of the DOS-internal stacks
  2571.       and is thus fully reentrant
  2572.     supported by OS/2 compatibility box
  2573. SeeAlso: AH=26h,AH=51h,AH=62h
  2574. ----------2151-------------------------------
  2575. INT 21 - DOS 2+ internal - GET PSP SEGMENT
  2576.     AH = 51h
  2577. Return: BX = current PSP segment (see AH=26h for format)
  2578. Notes:    under DOS 2.x, this function cannot be invoked inside an INT 28h
  2579.       handler without setting the Critical Error flag
  2580.     under DOS 3+, this function does not use any of the DOS-internal stacks
  2581.       and is thus fully reentrant
  2582.     supported by OS/2 compability box
  2583.     identical to the documented AH=62h
  2584. SeeAlso: AH=26h,AH=50h,AH=62h
  2585. ----------2152-------------------------------
  2586. INT 21 - DOS 2+ internal - GET LIST OF LISTS
  2587.     AH = 52h
  2588. Return: ES:BX -> DOS list of lists
  2589. Note:    partially supported by OS/2 v1.1 compatibility box (however, most
  2590.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  2591.       pointer is FFFFh:FFFFh).
  2592.  
  2593. Format of List of Lists:
  2594. Offset    Size    Description
  2595.  -12    WORD    (DOS 3.1-3.3) sharing retry count (see AX=440Bh)
  2596.  -10    WORD    (DOS 3.1-3.3) sharing retry delay (see AX=440Bh)
  2597.  -8    DWORD    (DOS 3.x) pointer to current disk buffer
  2598.  -4    WORD    (DOS 3.x) pointer in DOS code segment of unread CON input
  2599.         when CON is read via a handle, DOS reads an entire line,
  2600.           and returns the requested portion, buffering the rest
  2601.           for the next read.  0000h indicates no unread input
  2602.  -2    WORD    segment of first memory control block
  2603.  00h    DWORD    pointer to first DOS Drive Parameter Block (see AH=32h)
  2604.  04h    DWORD    pointer to list of DOS file tables (see below)
  2605.  08h    DWORD    pointer to CLOCK$ device driver, resident or installable
  2606.  0Ch    DWORD    pointer to actual CON device driver, resident or installable
  2607. ---DOS 2.x---
  2608.  10h    BYTE    number of logical drives in system
  2609.  11h    WORD    maximum bytes/block of any block device
  2610.  13h    DWORD    pointer to first disk buffer (see below)
  2611.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  2612.         This is the first device on DOS's linked list of device 
  2613.         drivers. (see below for format)
  2614. ---DOS 3.0---
  2615.  10h    BYTE    number of block devices
  2616.  11h    WORD    maximum bytes/block of any block device
  2617.  13h    DWORD    pointer to first disk buffer (see below)
  2618.  17h    DWORD    pointer to array of current directory structures (see below)
  2619.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  2620.  1Ch    DWORD    pointer to STRING= workspace area
  2621.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  2622.  22h    DWORD    pointer to FCB table
  2623.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  2624.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  2625.         This is the first device on DOS's linked list of device 
  2626.         drivers. (see below for format)
  2627. ---DOS 3.1-3.3---
  2628.  10h    WORD    maximum bytes/block of any block device
  2629.  12h    DWORD    pointer to first disk buffer (see below)
  2630.  16h    DWORD    pointer to array of current directory structures (see below)
  2631.  1Ah    DWORD    pointer to FCB table (if CONFIG.SYS contains FCBS=)
  2632.  1Eh    WORD    number of protected FCBs (the y in FCBS=x,y)
  2633.  20h    BYTE    number of block devices
  2634.  21h    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  2635.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  2636.         This is the first device on DOS's linked list of device 
  2637.         drivers. (see below for format) (see also INT 2F/AX=122Ch)
  2638.  34h    BYTE    number of JOIN'ed drives
  2639. ---DOS 4.x---
  2640.  10h    WORD    maximum bytes/block of any block device
  2641.  12h    DWORD    pointer to disk buffer info (see below)
  2642.  16h    DWORD    pointer to array of current directory structures (see below)
  2643.  1Ah    DWORD    pointer to FCB table (if CONFIG.SYS contains FCBS=)
  2644.  1Eh    WORD    number of protected FCBs (the y in FCBS=x,y)
  2645.  20h    BYTE    number of block devices
  2646.  21h    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  2647.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  2648.         This is the first device on DOS's linked list of device 
  2649.         drivers. (see below for format) (see also INT 2F/AX=122Ch)
  2650.  34h    BYTE    number of JOIN'ed drives???
  2651.  35h    WORD    pointer within IBMDOS code segment to list of special program
  2652.         names (see below)
  2653.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  2654.         (see below)
  2655.         may be called by any IFS driver which does not wish to
  2656.         service functions 20h or 24h-28h itself
  2657.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  2658.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  2659.  41h    WORD    the y in BUFFERS x,y
  2660.  43h    BYTE    boot drive (1=A:)
  2661.  44h    BYTE    01h if 80386+, 00h otherwise???
  2662.  45h    WORD    extended memory size in K
  2663.  
  2664. Format of memory control block (see also below):
  2665. Offset    Size    Description
  2666.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  2667.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  2668.  03h    WORD    size of memory block in paragraphs
  2669.  05h  3 BYTEs    unused
  2670. ---DOS 2.x,3.x---
  2671.  08h  8 BYTEs    unused
  2672. ---DOS 4.x---
  2673.  08h  8 BYTEs    ASCII program name if PSP memory block, else garbage
  2674.         null-terminated if less than 8 characters
  2675. Notes:    under DOS 3.1+, the first memory block is the DOS data segment,
  2676.       containing installable drivers, buffers, etc.
  2677.     under DOS 4.x it is divided into subsegments, each with its own memory
  2678.       control block (see below), the first of which is at offset 0000h
  2679.  
  2680. Format of STARLITE memory control block:
  2681. Offset    Size    Description
  2682.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  2683.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  2684.  03h    WORD    size of memory block in paragraphs
  2685.  05h    BYTE    unused
  2686.  06h    WORD    segment address of next memory control block (0000h if last)
  2687.  08h    WORD    segment address of previous memory control block or 0000h
  2688.  0Ah  6 BYTEs    reserved
  2689.  
  2690. Format of DOS 4.x data segment subsegment control blocks:
  2691. Offset    Size    Description
  2692.  00h    BYTE    subsegment type (blocks typically appear in this order)
  2693.         "D"  device driver
  2694.         "E"  device driver appendage
  2695.         "I"  IFS (Installable File System) driver
  2696.         "F"  FILES=  control block storage area (for FILES>5)
  2697.         "X"  FCBS=   control block storage area, if present
  2698.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  2699.         "B"  BUFFERS=  storage area
  2700.         "L"  LASTDRIVE=  current directory structure array storage area
  2701.         "S"  STACKS=  code and data area, if present (see below)
  2702.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  2703.  03h    WORD    size of subsegment in paragraphs
  2704.  05h  3 BYTEs    unused
  2705.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  2706.           was loaded (unused for other types)
  2707.  
  2708. Format of data at start of STACKS code segment (if present):
  2709. Offset    Size    Description
  2710.  00h    WORD    ???
  2711.  02h    WORD    number of stacks (the x in STACKS=x,y)
  2712.  04h    WORD    size of stack control block array (should be 8*x)
  2713.  06h    WORD    size of each stack (the y in STACKS=x,y)
  2714.  08h    DWORD    ptr to STACKS data segment
  2715.  0Ch    WORD    offset in STACKS data segment of stack control block array
  2716.  0Eh    WORD    offset in STACKS data segment of last element of that array
  2717.  10h    WORD    offset in STACKS data segment of the entry in that array for
  2718.         the next stack to be allocated (initially same as value in 0Eh
  2719.         and works its way down in steps of 8 to the value in 0Ch as
  2720.         hardware interrupts pre-empt each other)
  2721. Note:    the STACKS code segment data may, if present, be located as follows:
  2722.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  2723.         in the IBMBIO segment (seen at 0070:0190h)
  2724.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  2725.         segment, which may be determined by inspecting the segment
  2726.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  2727.         70h, 72-77h which have not been redirected by device drivers or
  2728.         TSRs.
  2729.     DOS 4.x:    Identified by sub-segment control block type "S" within the DOS
  2730.         data segment.
  2731.  
  2732. Format of array elements in STACKS data segment:
  2733. Offset    Size    Description
  2734.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  2735.         higher stack.
  2736.  01h    BYTE    not used
  2737.  02h    WORD    previous SP
  2738.  04h    WORD    previous SS
  2739.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  2740.         top of the stack is preset to point back to this control block.
  2741.  
  2742. SHARE.EXE hooks (DOS 3.1-4.01):
  2743. (offsets from first system file table--pointed at by ListOfLists+04h)
  2744. Offset    Size    Description
  2745. -3Ch    DWORD    pointer to FAR routine for ???
  2746.         Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3
  2747. -38h    DWORD    pointer to FAR routine called on opening file
  2748.         on call, internal DOS location points at filename(see AX=5D06h)
  2749.         Return: CF clear if successful
  2750.             CF set on error
  2751.                 AX = DOS error code (24h) (see AH=59h)
  2752.         Note: SHARE assumes DS=SS=DOS CS, direct-accesses DOS internals
  2753.             to get name of file just opened
  2754. -34h    DWORD    pointer to FAR routine called on closing file
  2755.         ES:DI -> system file table
  2756.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2757.             does something to every lock record for file
  2758. -30h    DWORD    pointer to FAR routine to close all files for given computer
  2759.         (called by AX=5D03h)
  2760.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2761. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  2762.         (called by AX=5D04h)
  2763.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2764. -28h    DWORD    pointer to FAR routine to close file by name
  2765.         (called by AX=5D02h)
  2766.         DS:SI -> DOS parameter list (see AX=5D00h)
  2767.            DPL's DS:DX -> name of file to close
  2768.         Return: CF clear if successful
  2769.             CF set on error
  2770.                 AX = DOS error code (03h) (see AH=59h)
  2771.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2772. -24h    DWORD    pointer to FAR routine to lock region of file
  2773.         call with BX = file handle
  2774.               CX:DX = starting offset
  2775.               SI:AX = size
  2776.         Return: CF set on error
  2777.                 AL = DOS error code (21h) (see AH=59h)
  2778.         Note: only called if file is marked as remote
  2779.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2780. -20h    DWORD    pointer to FAR routine to unlock region of file
  2781.         call with BX = file handle
  2782.               CX:DX = starting offset
  2783.               SI:AX = size
  2784.         Return: CF set on error
  2785.                 AL = DOS error code (21h) (see AH=59h)
  2786.         Note: only called if file is marked as remote
  2787.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2788. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  2789.         call with ES:DI -> system file table entry for file
  2790.             CX = length of region from current position in file
  2791.         Return: CF set if any portion of region locked
  2792.                 AX = 0021h
  2793.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2794. -18h    DWORD    pointer to FAR routine to get open file list entry
  2795.         (called by AX=5D05h)
  2796.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  2797.             DPL's BX = index of sharing record
  2798.             DPL's CX = index of SFT in SFT chain of sharing rec
  2799.         Return: CF set on error or not loaded
  2800.                 AX = DOS error code (12h) (see AH=59h)
  2801.             CF clear if successful
  2802.                 ES:DI -> filename
  2803.                 CX = number of locks owned by specified SFT
  2804.                 BX = network machine number
  2805.                 DX destroyed
  2806.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2807. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  2808.         call with DS:SI -> unopened FCB
  2809.               ES:DI -> system file table entry
  2810.         Return: BL = C0h???
  2811.         Note: copies following fields from SFT to FCB:
  2812.            starting cluster of file      0Bh     1Ah
  2813.            sharing record offset      33h     1Ch
  2814.            file attribute          04h     1Eh
  2815. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  2816.         call with ES:DI -> system file table entry
  2817.               DS:SI -> FCB
  2818.         Return: CF set if SFT closed or sharing record offsets
  2819.                 mismatched
  2820.             CF clear if successful
  2821.                 BX = starting cluster number from FCB
  2822. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  2823.         DS:SI -> system file table
  2824.         Return: AX = number of handle in JFT which already uses SFT
  2825.         Note: called during open/create of a file
  2826.         Note: SHARE assumes SS=DOS CS, directly accesses DOS internals
  2827.         Note: if SFT was opened with inheritance enabled and sharing
  2828.             mode 111, does something to all other SFTs owned by
  2829.             same process which have the same file open mode and
  2830.             sharing record
  2831. -08h    DWORD    pointer to FAR routine for ???
  2832.         Note: SHARE assumes SS=DS=DOS CS, direct-accesses DOS internals
  2833.         Note: closes various handles referring to file most-recently
  2834.             opened
  2835. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  2836.           entries
  2837.         call with ES:DI -> system file table entry for file (see below)
  2838.               AX = subfunction (apply to each related SFT)
  2839.                 00h: update time stamp (offset 0Dh) and date
  2840.                      stamp (offset 0Fh)
  2841.                 01h: update file size (offset 11h) and starting
  2842.                      cluster (offset 0Bh).  Sets last-accessed
  2843.                      cluster fields to start of file if file
  2844.                      never accessed
  2845.                 02h: as function 01h, but last-accessed fields
  2846.                      always changed
  2847.                 03h: do both functions 00h and 02h
  2848.         Note: follows ptr at offset 2Bh in system file table entries
  2849.         Note: NOP if opened with no-inherit or via FCB
  2850.  
  2851. Format of sharing record:
  2852. Offset    Size    Description
  2853.  00h    BYTE    flag
  2854.         00h free block
  2855.         01h allocated block
  2856.         FFh end marker
  2857.  01h    WORD    size of block
  2858.  03h    BYTE    checksum of pathname (including NUL)
  2859.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  2860.  04h    WORD    offset in SHARE's DS of lock record (see below)
  2861.  06h    DWORD    pointer to start of system file table chain for file
  2862.  0Ah    WORD    unique sequence number
  2863.  0Ch    var    ASCIZ full pathname
  2864.  
  2865. Format of SHARE.EXE lock record:
  2866. Offset    Size    Description
  2867.  00h    WORD    offset in SHARE's DS of next lock table in list
  2868.  02h    DWORD    offset in file of start of locked region
  2869.  06h    DWORD    offset in file of end of locked region
  2870.  0Ah    DWORD    pointer to System File Table entry for this file
  2871.  0Eh    WORD    PSP segment of lock's owner
  2872.  
  2873. Format of DOS 2.x system file tables:
  2874. Offset    Size    Description
  2875.  00h    DWORD    pointer to next file table
  2876.  04h    WORD    number of files in this table
  2877.  06h  28h bytes per file
  2878.     Offset    Size    Description
  2879.      00h    BYTE    number of file handles referring to this file
  2880.      01h    BYTE    file open mode (see AH=3Dh)
  2881.      02h    BYTE    file attribute
  2882.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  2883.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  2884.      0Fh    WORD    ???
  2885.      11h    WORD    ???
  2886.      13h    DWORD    file size???
  2887.      17h    WORD    file date in packed format (see AX=5700h)
  2888.      19h    WORD    file time in packed format (see AX=5700h)
  2889.      1Bh    BYTE    device attribute (see AX=4400h)
  2890.     ---character device---
  2891.      1Ch    DWORD    pointer to device driver
  2892.     ---block device---
  2893.      1Ch    WORD    starting cluster of file
  2894.      1Eh    WORD    relative cluster in file of last cluster accessed
  2895.     ------
  2896.      20h    WORD    absolute cluster number of current cluster
  2897.      22h    WORD    ???
  2898.      24h    DWORD    current file position???
  2899.  
  2900. Format of DOS 3.x system file tables and FCB tables:
  2901. Offset    Size    Description
  2902.  00h    DWORD    pointer to next file table
  2903.  04h    WORD    number of files in this table
  2904.  06h  35h bytes per file
  2905.     Offset    Size    Description
  2906.      00h    WORD    number of file handles referring to this file
  2907.      02h    WORD    file open mode (see AH=3Dh)
  2908.             bit 15 set if this file opened via FCB
  2909.      04h    BYTE    file attribute
  2910.      05h    WORD    device info word (see AX=4400h)
  2911.             bit 15 set if remote file
  2912.             bit 14 set means do not set file date/time on closing
  2913.      07h    DWORD    pointer to device driver header if character device
  2914.             else pointer to DOS Drive Parameter Block (see AH=32h)
  2915.      0Bh    WORD    starting cluster of file
  2916.      0Dh    WORD    file time in packed format (see AX=5700h)
  2917.      0Fh    WORD    file date in packed format (see AX=5700h)
  2918.      11h    DWORD    file size
  2919.      15h    DWORD    current offset in file
  2920.      19h    WORD    relative cluster within file of last cluster accessed
  2921.      1Bh    WORD    absolute cluster number of last cluster accessed
  2922.             0000h if file never read or written???
  2923.      1Dh    WORD    number of sector containing directory entry
  2924.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  2925.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  2926.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  2927.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  2928.      31h    WORD    PSP segment of file's owner (see AH=26h)
  2929.      33h    WORD    offset within SHARE.EXE code segment of 
  2930.             sharing record (see below)  0000h = none
  2931.  
  2932. Format of DOS 4+ system file tables and FCB tables:
  2933. Offset    Size    Description
  2934.  00h    DWORD    pointer to next file table
  2935.  04h    WORD    number of files in this table
  2936.  06h  3Bh bytes per file
  2937.     Offset    Size    Description
  2938.      00h    WORD    number of file handles referring to this file
  2939.      02h    WORD    file open mode (see AH=3Dh)
  2940.             bit 15 set if this file opened via FCB
  2941.      04h    BYTE    file attribute
  2942.      05h    WORD    device info word (see AX=4400h)
  2943.             bit 15 set if remote file
  2944.             bit 14 set means do not set file date/time on closing
  2945.      07h    DWORD    pointer to device driver header if character device
  2946.             else pointer to DOS Drive Parameter Block (see AH=32h)
  2947.             or REDIR data
  2948.      0Bh    WORD    starting cluster of file
  2949.      0Dh    WORD    file time in packed format (see AX=5700h)
  2950.      0Fh    WORD    file date in packed format (see AX=5700h)
  2951.      11h    DWORD    file size
  2952.      15h    DWORD    current offset in file
  2953.     ---local file---
  2954.      19h    WORD    relative cluster within file of last cluster accessed
  2955.      1Bh    DWORD    number of sector containing directory entry
  2956.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  2957.     ---network redirector---
  2958.      19h    DWORD    pointer to REDIRIFS record
  2959.      1Dh  3 BYTEs    ???
  2960.     ------
  2961.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  2962.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  2963.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  2964.      31h    WORD    PSP segment of file's owner (see AH=26h)
  2965.      33h    WORD    offset within SHARE.EXE code segment of 
  2966.             sharing record (see below)  0000h = none
  2967.      35h    WORD    (local) absolute cluster number of last clustr accessed
  2968.             (redirector) ???
  2969.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  2970.  
  2971. Format of current directory structure (array, 51h bytes [58h for DOS 4.x] per
  2972. drive):
  2973. Offset    Size    Description
  2974.  00h 67 BYTEs    current path as ASCIZ, starting with 'x:\'
  2975.  43h    WORD    bit flags
  2976.         bit 15: network drive    \ installable file system if both set
  2977.         bit 14: physical drive    / invalid drive if neither bit set
  2978.         bit 13: JOIN'ed, current path is actual path without JOIN
  2979.             drive letter in path may differ from logical drive name
  2980.         bit 12: SUBST'ed, current path is actual path without SUBST
  2981.             drive letter in path may differ from logical drive name
  2982.  45h    DWORD    pointer to DOS Disk Block for this drive
  2983. ---local drives---
  2984.  49h    WORD    starting cluster of current directory
  2985.         0000h = root, FFFFh never accessed
  2986.  4Bh    WORD    ??? seems always to be FFFFh
  2987.  4Dh    WORD    ??? seems always to be FFFFh
  2988. ---network drives---
  2989.  49h    DWORD    pointer to a redirector/REDIRIFS record, else FFFFFFFFh
  2990.  4Dh    WORD    stored parameter from INT 21/AX=5F03h???
  2991. ------
  2992.  4Fh    WORD    Offset of '\' in current path field representing root directory 
  2993.         of logical drive (2 if not SUBST'ed or JOIN'ed, otherwise 
  2994.         number of bytes in SUBST/JOIN path)
  2995. ---DOS 4.x---
  2996.  51h    BYTE    ??? used by network
  2997.  52h    DWORD    pointer to IFS driver for this drive, 00000000h if native DOS
  2998.  56h    WORD    ???
  2999.  
  3000. Format of device driver header:
  3001. Offset    Size    Description
  3002.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  3003.  04h    WORD    device attributes
  3004.         Character device:
  3005.            bit 15  set
  3006.            bit 14  IOCTL supported (see AH=44h)
  3007.            bit 13  (DOS 3+) output until busy supported
  3008.            bit 12  reserved
  3009.            bit 11  (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  3010.            bits 10-7 reserved
  3011.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  3012.                 (see AX=440Ch,440Dh)
  3013.            bit 5  reserved
  3014.            bit 4  device is special (use INT 29 "fast console output")
  3015.            bit 3  device is CLOCK$ (all reads/writes use transfer
  3016.                 record described below)
  3017.            bit 2  device is NUL
  3018.            bit 1  device is standard output
  3019.            bit 0  device is standard input
  3020.         Block device:
  3021.            bit 15  clear
  3022.            bit 14  IOCTL supported
  3023.            bit 13  non-IBM format
  3024.            bit 12  reserved
  3025.            bit 11  (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  3026.            bit 10  reserved
  3027.            bit 9   ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  3028.            bit 8   ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  3029.            bit 7   reserved
  3030.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  3031.                 implies support for commands 17h and 18h
  3032.                 (see AX=440Ch,440Dh,440Eh,440Fh)
  3033.            bits 5-2 reserved
  3034.            bit 1   driver supports 32-bit sector addressing
  3035.            bit 0   reserved
  3036.  06h    WORD    device strategy entry point
  3037.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  3038.  08h    WORD    device interrupt entry point
  3039. ---character device---
  3040.  0Ah  8 BYTEs    blank-padded character device name
  3041. ---block device---
  3042.  0Ah    BYTE    number of subunits (drives) supported by driver
  3043.  0Bh  7 BYTEs    unused
  3044. ---
  3045.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  3046.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  3047.  15h    BYTE    (CD-ROM driver) number of units
  3048.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  3049.             (currently '00')
  3050.  
  3051. Format of CLOCK$ transfer record:
  3052. Offset    Size    Description
  3053.  00h    WORD    number of days since 1-Jan-1980
  3054.  02h    BYTE    minutes
  3055.  03h    BYTE    hours
  3056.  04h    BYTE    hundredths of second
  3057.  05h    BYTE    seconds
  3058.  
  3059. Format of DOS 2.x disk buffer:
  3060. Offset    Size    Description
  3061.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  3062.         least-recently used buffer is first in chain
  3063.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  3064.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  3065.  08h    WORD    logical sector number
  3066.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  3067.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  3068.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  3069.  10h        buffered data
  3070.  
  3071. Format of DOS 3.x disk buffer:
  3072. Offset    Size    Description
  3073.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  3074.         least-recently used buffer is first in chain
  3075.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  3076.  05h    BYTE    flags
  3077.         bit 7: ???
  3078.         bit 6: buffer dirty
  3079.         bit 5: buffer has been referenced
  3080.         bit 4: ???
  3081.         bit 3: sector in data area
  3082.         bit 2: sector in a directory, either root or subdirectory
  3083.         bit 1: sector in FAT
  3084.         bit 0: boot sector??? (guess)
  3085.  06h    WORD    logical sector number
  3086.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  3087.  09h    BYTE    sector offset between copies if multiple copies to be written
  3088.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  3089.  0Eh    WORD    unused??? (almost always 0)
  3090.  10h        buffered data
  3091.  
  3092. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  3093. Offset    Size    Description
  3094.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  3095.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  3096.  06h    DWORD    pointer to lookahead buffer, zero if not present
  3097.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  3098.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  3099.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  3100.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  3101.  11h    WORD    ??? seems always to be 0001h
  3102.  13h    WORD    segment of EMS physical page frame
  3103.  15h    WORD    ??? seems always to be zero
  3104.  17h  4 WORDs    EMS partial page mapping information???
  3105.  
  3106. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  3107. Offset    Size    Description
  3108.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  3109.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  3110.  06h    DWORD    pointer to lookahead buffer, zero if not present
  3111.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  3112.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  3113.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  3114.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  3115.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  3116.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  3117.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  3118.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  3119.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  3120.           into EMS
  3121.  18h    WORD    EMS handle for buffers, zero if not in EMS
  3122.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  3123.  1Ch    WORD    ??? appears always to be 0001h
  3124.  1Eh    WORD    segment of EMS physical page frame
  3125.  20h    WORD    ??? appears always to be zero
  3126.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  3127.  
  3128. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  3129. Offset    Size    Description
  3130.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  3131.         in EMS
  3132.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  3133.         this chain are in the same segment.
  3134.  06h    BYTE    number of dirty buffers on this chain
  3135.  07h    BYTE    reserved (00h)
  3136. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  3137.       address modulo NDBCH,  0 <= N <= NDBCH-1
  3138.     each chain resides completely within one EMS page
  3139.     this structure is in main memory even if buffers are in EMS
  3140.  
  3141. Format of DOS 4.x disk buffer:
  3142. Offset    Size    Description
  3143.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  3144.  02h    WORD    backward ptr, offset only
  3145.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  3146.  05h    BYTE    flags
  3147.         bit 7: remote buffer
  3148.         bit 6: buffer dirty
  3149.         bit 5: buffer has been referenced
  3150.         bit 4: search data buffer (only valid if remote buffer)
  3151.         bit 3: sector in data area
  3152.         bit 2: sector in a directory, either root or subdirectory
  3153.         bit 1: sector in FAT
  3154.         bit 0: reserved
  3155.  06h    DWORD    logical sector number
  3156.  0Ah    BYTE    number of copies to write
  3157.         for FAT sectors, same as number of FATs
  3158.         for data and directory sectors, usually 1
  3159.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  3160.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  3161.  11h    WORD    buffer use count if remote buffer (see flags above)
  3162.  13h    BYTE    reserved
  3163.  14h        buffered data
  3164. Note:    all buffered sectors which have the same hash value (computed as the
  3165.       sum of high and low words of the logical sector number divided by
  3166.       NDBCH) are on the same doubly-linked circular chain
  3167.     the links consist of offset addresses only, the segment being the same
  3168.       for all buffers in the chain.
  3169.  
  3170. Format of IFS driver list:
  3171. Offset    Size    Description
  3172.  00h    DWORD    pointer to next driver header
  3173.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  3174.  0Ch  4 BYTEs    ???
  3175.  10h    DWORD    pointer to IFS utility function entry point (see below)
  3176.         call with ES:BX -> IFS request (see below)
  3177.  14h    WORD    offset in header's segment of driver entry point
  3178.     ???
  3179.  
  3180. Call IFS utility function entry point with:
  3181.     AH = 20h miscellaneous functions
  3182.         AL = 00h get date
  3183.         Return: CX = year
  3184.             DH = month
  3185.             DL = day
  3186.         AL = 01h get process ID and computer ID
  3187.         Return: BX = current PSP segment
  3188.             DX = active network machine number
  3189.         AL = 05h get file system info
  3190.         ES:DI -> 16-byte info buffer
  3191.         Return: buffer filled
  3192.             Offset    Size    Description
  3193.              00h  2 BYTEs    unused
  3194.              02h    WORD    number of SFTs (actually counts only
  3195.                     the first two file table arrays)
  3196.              04h    WORD    number of FCB table entries
  3197.              06h    WORD    number of proctected FCBs
  3198.              08h  6 BYTEs    unused
  3199.              0Eh    WORD    largest sector size supported
  3200.         AL = 06h get machine name
  3201.         ES:DI -> 18-byte buffer for name
  3202.         Return: buffer filled with name starting at offset 02h
  3203.         AL = 08h get sharing retry count
  3204.         Return: BX = sharing retry count
  3205.         AL = other
  3206.         Return: CF set
  3207.     AH = 21h get redirection state
  3208.         BH = type (03h disk, 04h printer)
  3209.         Return: BH = state (00h off, 01h on)
  3210.     AH = 22h ??? some sort of time calculation
  3211.         AL = 00h ???
  3212.             nonzero ???
  3213.     AH = 23h ??? some sort of time calculation
  3214.     AH = 24h compare filenames
  3215.         DS:SI -> first ASCIZ filename
  3216.         ES:DI -> second ASCIZ filename
  3217.         Return: ZF set if files are same ignoring case and / vs \
  3218.     AH = 25h normalize filename
  3219.         DS:SI -> ASCIZ filename
  3220.         ES:DI -> buffer for result
  3221.         Return: filename uppercased, forward slashes changed to backslashes
  3222.     AH = 26h get DOS stack
  3223.         Return: DS:SI -> top of stack
  3224.             CX = size of stack in bytes
  3225.     AH = 27h increment InDOS flag
  3226.     AH = 28h decrement InDOS flag
  3227. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  3228.       pass them on to the default handler pointed at by [LoL+37h]
  3229.  
  3230. Format of IFS request block:
  3231. Offset    Size    Description
  3232.  00h    WORD    total size in bytes of request
  3233.  02h    BYTE    class of request
  3234.         02h ???
  3235.         03h redirection
  3236.         04h ???
  3237.         05h file access
  3238.         06h convert error code to string
  3239.         07h ???
  3240.  03h    WORD    returned DOS error code
  3241.  05h    BYTE    IFS driver exit status
  3242.         00h success
  3243.         01h ???
  3244.         02h ???
  3245.         03h ???
  3246.         04h ???
  3247.         FFh internal failure
  3248.  06h 16 BYTEs    ???
  3249. ---request class 02h---
  3250.  16h    BYTE    function code
  3251.         04h ???
  3252.  17h    BYTE    unused???
  3253.  18h    DWORD    pointer to ???
  3254.  1Ch    DWORD    pointer to ???
  3255.  20h  2 BYTEs    ???
  3256. ---request class 03h---
  3257.  16h    BYTE    function code
  3258.  17h    BYTE    ???
  3259.  18h    DWORD    pointer to ???
  3260.  1Ch    DWORD    pointer to ???
  3261.  22h    WORD    returned ???
  3262.  24h    WORD    returned ???
  3263.  26h    WORD    returned ???
  3264.  28h    BYTE    returned ???
  3265.  29h    BYTE    unused???
  3266. ---request class 04h---
  3267.  16h    DWORD    pointer to ???
  3268.  1Ah    DWORD    pointer to ???
  3269. ---request class 05h---
  3270.  16h    BYTE    function code
  3271.         01h flush disk buffers
  3272.         02h get disk space
  3273.         03h MKDIR
  3274.         04h RMDIR
  3275.         05h CHDIR
  3276.         06h delete file
  3277.         07h rename file
  3278.         08h search directory
  3279.         09h file open/create
  3280.         0Ah LSEEK
  3281.         0Bh read from file
  3282.         0Ch write to file
  3283.         0Dh lock region of file
  3284.         0Eh commit/close file
  3285.         0Fh get/set file attributes
  3286.         10h printer control
  3287.         11h ???
  3288.         12h process termination
  3289.         13h ???
  3290.     ---class 05h function 01h---
  3291.      17h  7    BYTEs    ???
  3292.      1Eh    DWORD    pointer to ???
  3293.      22h  4 BYTEs    ???
  3294.      26h    BYTE    ???
  3295.      27h    BYTE    ???
  3296.     ---class 05h function 02h---
  3297.      17h  7 BYTEs    ???
  3298.      1Eh    DWORD    pointer to ???
  3299.      22h  4 BYTEs    ???
  3300.      26h    WORD    returned total clusters
  3301.      28h    WORD    returned sectors per cluster
  3302.      2Ah    WORD    returned bytes per sector
  3303.      2Ch    WORD    returned available clusters
  3304.      2Eh    BYTE    returned ???
  3305.      2Fh    BYTE    ???
  3306.     ---class 05h functions 03h,04h,05h---
  3307.      17h  7 BYTEs    ???
  3308.      1Eh    DWORD    pointer to ???
  3309.      22h  4 BYTEs    ???
  3310.      26h    DWORD    pointer to directory name
  3311.     ---class 05h function 06h---
  3312.      17h  7 BYTEs    ???
  3313.      1Eh    DWORD    pointer to ???
  3314.      22h  4 BYTEs    ???
  3315.      26h    WORD    attribute mask
  3316.      28h    DWORD    pointer to filename
  3317.     ---class 05h function 07h---
  3318.      17h  7 BYTEs    ???
  3319.      1Eh    DWORD    pointer to ???
  3320.      22h  4 BYTEs    ???
  3321.      26h    WORD    attribute mask
  3322.      28h    DWORD    pointer to source filespec
  3323.      2Ch    DWORD    pointer to destination filespec
  3324.     ---class 05h function 08h---
  3325.      17h  7 BYTEs    ???
  3326.      1Eh    DWORD    pointer to ???
  3327.      22h  4 BYTEs    ???
  3328.      26h    BYTE    00h FINDFIRST
  3329.             01h FINDNEXT
  3330.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  3331.      2Ch    WORD    search attribute if FINDFIRST
  3332.      2Eh    DWORD    pointer to filespec if FINDFIRST
  3333.     ---class 05h function 09h---
  3334.      17h  7 BYTEs    ???
  3335.      1Eh    DWORD    pointer to ???
  3336.      22h    DWORD    pointer to IFS open file structure (see below)
  3337.      26h    WORD    ???  \ together, specify open vs. create, whether or
  3338.      28h    WORD    ???  / not to truncate
  3339.      2Ah  4 BYTEs    ???
  3340.      2Eh    DWORD    pointer to filename
  3341.      32h  4 BYTEs    ???
  3342.      36h    WORD    file attributes on call
  3343.             returned ???
  3344.      38h    WORD    returned ???
  3345.     ---class 05h function 0Ah---
  3346.      17h  7 BYTEs    ???
  3347.      1Eh    DWORD    pointer to ???
  3348.      22h    DWORD    pointer to IFS open file structure (see below)
  3349.      26h    BYTE    seek type (02h = from end)
  3350.      28h    DWORD    offset on call
  3351.             returned new absolute position
  3352.     ---class 05h functions 0Bh,0Ch---
  3353.      17h  7 BYTEs    ???
  3354.      1Eh    DWORD    pointer to ???
  3355.      22h    DWORD    pointer to IFS open file structure (see below)
  3356.      28h    WORD    number of bytes to transfer
  3357.             returned bytes actually transferred
  3358.      2Ah    DWORD    transfer address
  3359.     ---class 05h function 0Dh---
  3360.      17h  7 BYTEs    ???
  3361.      1Eh    DWORD    pointer to ???
  3362.      22h    DWORD    pointer to IFS open file structure (see below)
  3363.      26h    BYTE    file handle???
  3364.      27h    BYTE    unused???
  3365.      28h    WORD    ???
  3366.      2Ah    WORD    ???
  3367.      2Ch    WORD    ???
  3368.      2Eh    WORD    ???
  3369.     ---class 05h function 0Eh---
  3370.      17h  7 BYTEs    ???
  3371.      1Eh    DWORD    pointer to ???
  3372.      22h    DWORD    pointer to IFS open file structure (see below)
  3373.      26h    BYTE    00h commit file
  3374.             01h close file
  3375.      27h    BYTE    unused???
  3376.     ---class 05h function 0Fh---
  3377.      17h  7 BYTEs    ???
  3378.      1Eh    DWORD    pointer to ???
  3379.      22h  4 BYTEs    ???
  3380.      26h    BYTE    02h GET attributes
  3381.             03h PUT attributes
  3382.      27h    BYTE    unused???
  3383.      28h 12 BYTEs    ???
  3384.      34h    WORD    search attributes???
  3385.      36h    DWORD    pointer to filename
  3386.      3Ah    WORD    (GET) returned ??? 
  3387.      3Ch    WORD    (GET) returned ???
  3388.      3Eh    WORD    (GET) returned ???
  3389.      40h    WORD    (GET) returned ???
  3390.      42h    WORD    (PUT) new attributes
  3391.             (GET) returned attributes
  3392.     ---class 05h function 10h---
  3393.      17h  7 BYTEs    ???
  3394.      1Eh    DWORD    pointer to ???
  3395.      22h    DWORD    pointer to IFS open file structure (see below)
  3396.      26h    WORD    ???
  3397.      28h    DWORD    pointer to ???
  3398.      2Ch    WORD    ???
  3399.      2Eh    BYTE    ???
  3400.      2Fh    BYTE    subfunction
  3401.             01h get printer setup
  3402.             03h ???
  3403.             04h ???
  3404.             05h ???
  3405.             06h ???
  3406.             07h ???
  3407.             21h set printer setup
  3408.     ---class 05h function 11h---
  3409.      17h  7 BYTEs    ???
  3410.      1Eh    DWORD    pointer to ???
  3411.      22h    DWORD    pointer to IFS open file structure (see below)
  3412.      26h    BYTE    subfunction
  3413.      27h    BYTE    unused???
  3414.      28h    WORD    ???
  3415.      2Ah    WORD    ???
  3416.      2Ch    WORD    ???
  3417.      2Eh    BYTE    ???
  3418.      2Fh    BYTE    ???
  3419.     ---class 05h function 12h---
  3420.      17h 15 BYTEs    unused???
  3421.      26h    WORD    PSP segment
  3422.      28h    BYTE    type of process termination
  3423.      29h    BYTE    unused???
  3424.     ---class 05h function 13h---
  3425.      17h 15 BYTEs    unused???
  3426.      26h    WORD    PSP segment
  3427. ---request class 06h---
  3428.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  3429.  1Ah    BYTE    returned ???
  3430.  1Bh    BYTE    unused
  3431. ---request class 07h---
  3432.  16h    DWORD    pointer to IFS open file structure (see below)
  3433.  1Ah    BYTE    ???
  3434.  1Bh    BYTE    unused???
  3435.  
  3436. Format of IFS open file structure:
  3437. Offset    Size    Description
  3438.  00h    WORD    ???
  3439.  02h    WORD    device info word
  3440.  04h    WORD    file open mode
  3441.  06h    WORD    ???
  3442.  08h    WORD    file attributes
  3443.  0Ah    WORD    owner's network machine number
  3444.  0Ch    WORD    owner's PSP segment
  3445.  0Eh    DWORD    file size
  3446.  12h    DWORD    current offset in file
  3447.  16h    WORD    file time
  3448.  18h    WORD    file date
  3449.  1Ah 11 BYTEs    filename in FCB format
  3450.  25h    WORD    ???
  3451.  27h    WORD    hash value of SFT address
  3452.         (low word of linear address + segment&F000h)
  3453.  29h  3 WORDs    network info from SFT
  3454.  2Fh    WORD    ???
  3455.  
  3456. Format of one item in DOS 4 list of special program names:
  3457. Offset    Size    Description
  3458.  00h    BYTE    length of name (00h = end of list)
  3459.  01h  N BYTEs    name in format name.ext
  3460.  N    3 BYTEs    ???
  3461. ----------2153-------------------------------
  3462. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK
  3463.     AH = 53h
  3464.     DS:SI -> BPB (BIOS Parameter Block)
  3465.     ES:BP -> buffer for DOS Drive Parameter Block (see below)
  3466. Note:    translates BPB into a DOS Drive Parameter Block (see AH=32h)
  3467.  
  3468. Format of BIOS Parameter Block:
  3469. Offset    Size    Description
  3470.  00h    WORD    bytes/sector
  3471.  02h    BYTE    sectors/cluster. Get from (DPB byte 4) + 1
  3472.  03h    WORD    number of reserved sectors
  3473.  05h    BYTE    number of FATs
  3474.  06h    WORD    number of root directory entries
  3475.  08h    WORD    total number of sectors. Get from:
  3476.           ((DPB bytes 0Dh-0Eh) - 1) * (sectors/cluster (BPB byte 2))
  3477.             + (DPB Bytes 0Bh-0Ch)
  3478.         for DOS 4.0, set to zero if partition >32M, then set DWORD at
  3479.           15h to actual number of sectors
  3480.  0Ah    BYTE    media descriptor byte
  3481.  0Bh    WORD    number of sectors per FAT
  3482. ---DOS 3+---
  3483.  0Dh    WORD    number of sectors per track
  3484.  0Fh    WORD    number of heads
  3485.  11h    DWORD    number of hidden sectors
  3486.  15h 11 BYTEs    reserved    
  3487. ---DOS 4.0---
  3488.  15h    DWORD    total number of sectors if word at 08h contains zero
  3489.  19h  6 BYTEs    ???
  3490.  1Fh    WORD    number of cylinders
  3491.  21h    BYTE    device type
  3492.  22h    WORD    device attributes (removable or not, etc)
  3493. ----------2154-------------------------------
  3494. INT 21 - DOS 2+ - GET VERIFY FLAG
  3495.     AH = 54h
  3496. Return: AL = 00h if flag OFF
  3497.     AL = 01h if flag ON
  3498. SeeAlso: AH=2Eh
  3499. ----------2155-------------------------------
  3500. INT 21 - DOS 2+ internal - CREATE PSP
  3501.     AH = 55h
  3502.     DX = segment number at which to set up PSP (see AH=26h)
  3503.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  3504. Notes:    like AH=26h but creates "child" PSP rather than copying existing one,
  3505.       incrementing the reference count for each inherited file
  3506.     (DOS 2+) sets current PSP to DX
  3507.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  3508. SeeAlso: AH=26h,AH=50h
  3509. ----------2156-------------------------------
  3510. INT 21 - DOS 2+ - RENAME A FILE
  3511.     AH = 56h
  3512.     DS:DX -> ASCIZ old name (drive and path allowed, no wildcards)
  3513.     ES:DI -> ASCIZ new name
  3514. Return: CF set on error
  3515.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  3516.     CF clear if successful
  3517. Notes:    allows move between directories on same logical volume
  3518.     does not set the archive attribute (see AX=4300h), which results in
  3519.       incremental backups not backing up the file under its new name
  3520.     (DOS 3+) allows renaming of directories
  3521.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  3522.       error 12h (no more files) is returned on success, and both source and
  3523.       destination specs must be canonical (as returned by AH=60h).
  3524.       Wildcards in the destination are replaced by the corresponding char
  3525.       of each source file being renamed.  Under DOS 3.x, the call will fail
  3526.       if the destination wildcard is *.* or equivalent.
  3527. SeeAlso: AH=17h,AH=60h,AX=5D00h
  3528. ----------215700-----------------------------
  3529. INT 21 - DOS 2+ - GET FILE'S DATE/TIME
  3530.     AX = 5700h
  3531.     BX = file handle
  3532. Return: CF set on error
  3533.         AX = error code (01h,06h) (see AH=59h)
  3534.     CF clear if successful
  3535.         CX = time of last write
  3536.         bits 11-15: hour
  3537.              5-10:  minute
  3538.              0-4:   seconds/2
  3539.         DX = date of last write
  3540.         bits 9-15:   year-1980 (max 119 = 2099)
  3541.              5-8:    month
  3542.              0-4:    day
  3543. SeeAlso: AX=5701h
  3544. ----------215701-----------------------------
  3545. INT 21 - DOS 2+ - SET FILE'S DATE/TIME
  3546.     AX = 5701h
  3547.     BX = file handle
  3548.     CX = time to be set (see AX=5700h)
  3549.     DX = date to be set (see AX=5700h)
  3550. Return: CF set on error
  3551.         AX = error code (01h,06h) (see AH=59h)
  3552.     CF clear if successful
  3553. SeeAlso: AX=5700h
  3554. ----------215702-----------------------------
  3555. INT 21 - DOS 4.0 - GET ???
  3556.     AX = 5702h
  3557.     BX = ??? (0000h through 0004h)
  3558.     DS:SI -> ???
  3559.     ES:DI -> result buffer
  3560.     CX = size of result buffer
  3561. Return: CX = size of returned data
  3562. SeeAlso: AX=5703h,AX=5704h
  3563. ----------215703-----------------------------
  3564. INT 21 - DOS 4.0 - GET ???
  3565.     AX = 5703h
  3566.     BX = ??? (0000h through 0004h)
  3567.     DS:SI -> ???
  3568.     ES:DI -> result buffer
  3569.     CX = size of result buffer
  3570. Return: CX = size of returned data
  3571. SeeAlso: AX=5702h,AX=5704h
  3572. ----------215704-----------------------------
  3573. INT 21 - DOS 4.0 - ???
  3574.     AX = 5704h
  3575.     BX = ??? (0000h through 0004h)
  3576.     DS:SI -> ???
  3577.     ES:DI -> result buffer
  3578.     CX = size of result buffer
  3579. Return: nothing???
  3580. SeeAlso: AX=5702h,AX=5703h
  3581. ----------2158-------------------------------
  3582. INT 21 - DOS 3+ - GET/SET MEMORY ALLOCATION STRATEGY
  3583.     AH = 58h
  3584.     AL = function code
  3585.         00h get allocation strategy
  3586.         01h set allocation strategy
  3587.            BL = strategy code
  3588.            00h first fit (use first memory block large enough)
  3589.            01h best fit (use smallest memory block large enough)
  3590.            02h last fit (use high part of last usable memory block)
  3591.            bit 7 set (DOS 5beta) to allow use of upper memory blocks
  3592.         02h (DOS 5beta) get UMB link state
  3593.         Return: AL = 00h UMBs not part of DOS memory chain
  3594.                = 01h UMBs in DOS memory chain
  3595.         03h (DOS 5beta) set UMB link state
  3596.         BX = 0000h remove UMBs from DOS memory chain
  3597.            = 0001h add UMBs to DOS memory chain
  3598. Return: CF set on error
  3599.         AX = error code (01h) (see AH=59h)
  3600.     CF clear if successful
  3601.         AX = strategy code if AL was 00h
  3602.            = UMB link state if AL was 02h
  3603. Note:     the Set subfunction accepts any value in BL; 2 or greater means last
  3604.       fit under DOS 2 through DOS 4.x
  3605.     the Get subfunction returns the last value set, so programs should
  3606.       check whether the value is >= 2, not just equal to 2.
  3607.     a program which changes the allocation strategy should restore it
  3608.       before terminating
  3609. SeeAlso: AH=48h,AH=49h,AH=4Ah
  3610. ----------2159-------------------------------
  3611. INT 21 - DOS 3+ - GET EXTENDED ERROR CODE
  3612.     AH = 59h
  3613.     BX = version code (0000h for DOS 3.x)
  3614. Return: AX = extended error code (see below)
  3615.     BH = class of error (see below)
  3616.     BL = suggested action (see below)
  3617.     CH = locus (where error occurred) (see below)
  3618.     CL, DX, SI, DI, BP, DS, and ES destroyed
  3619. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  3620.       one supported under DOS 2.x
  3621.     you should call this function to retrieve the true error code when an
  3622.       FCB or DOS 2.x call returns an error
  3623. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  3624.  
  3625. Values for extended error code:
  3626.     01h function number invalid
  3627.     02h file not found
  3628.     03h path not found
  3629.     04h too many open files (no handles available)
  3630.     05h access denied
  3631.     06h invalid handle
  3632.     07h memory control block destroyed
  3633.     08h insufficient memory
  3634.     09h memory block address invalid
  3635.     0Ah environment invalid (usually >32K in length)
  3636.     0Bh format invalid
  3637.     0Ch access code invalid
  3638.     0Dh data invalid
  3639.     0Fh invalid drive
  3640.     10h attempted to remove current directory
  3641.     11h not same device
  3642.     12h no more files
  3643. ---DOS 3+---
  3644.     13h disk write-protected
  3645.     14h unknown unit
  3646.     15h drive not ready
  3647.     16h unknown command
  3648.     17h data error (CRC)
  3649.     18h bad request structure length
  3650.     19h seek error
  3651.     1Ah unknown media type (non-DOS disk)
  3652.     1Bh sector not found
  3653.     1Ch printer out of paper
  3654.     1Dh write fault
  3655.     1Eh read fault
  3656.     1Fh general failure
  3657.     20h sharing violation
  3658.     21h lock violation
  3659.     22h disk change invalid
  3660.         ES:DI -> ASCIZ volume label of required disk
  3661.     23h FCB unavailable
  3662.     24h sharing buffer overflow
  3663.     25h reserved
  3664.     26h (LANtastic) cannot complete file operation
  3665.     27h-31h reserved
  3666.     32h network request not supported
  3667.     33h remote computer not listening
  3668.     34h duplicate name on network
  3669.     35h network name not found
  3670.     36h network busy
  3671.     37h network device no longer exists
  3672.     38h network BIOS command limit exceeded
  3673.     39h network adapter hardware error
  3674.     3Ah incorrect response from network
  3675.     3Bh unexpected network error
  3676.     3Ch incompatible remote adapter
  3677.     3Dh print queue full
  3678.     3Eh queue not full
  3679.     3Fh not enough space to print file
  3680.     40h network name was deleted
  3681.     41h network: Access denied
  3682.     42h network device type incorrect
  3683.     43h network name not found
  3684.     44h network name limit exceeded
  3685.     45h network BIOS session limit exceeded
  3686.     46h temporarily paused
  3687.     47h network request not accepted
  3688.     48h network print/disk redirection paused
  3689.     49h (LANtastic) invalid network version
  3690.     4Ah (LANtastic) account expired
  3691.     4Bh (LANtastic) password expired
  3692.     4Ch (LANtastic) login attempt invalid at this time
  3693.     4Dh (LANtastic v3+) disk limit exceeded on network node
  3694.     4Eh (LANtastic v3+) not logged in to network node
  3695.     4Fh reserved
  3696.     50h file exists
  3697.     51h reserved
  3698.     52h cannot make directory
  3699.     53h fail on INT 24h
  3700.     54h (DOS 3.3+) too many redirections
  3701.     55h (DOS 3.3+) duplicate redirection
  3702.     56h (DOS 3.3+) invalid password
  3703.     57h (DOS 3.3+) invalid parameter
  3704.     58h (DOS 3.3+) network write fault
  3705.     59h (LANtastic) function not supported on network
  3706.     5Ah (LANtastic) required system component not installed
  3707.  
  3708. Values for Error Class:
  3709.     01h out of resource (storage space or I/O channels)
  3710.     02h temporary situation (file or record lock)
  3711.     03h authorization (denied access)
  3712.     04h internal (system software bug)
  3713.     05h hardware failure
  3714.     06h system failure (configuration file missing or incorrect)
  3715.     07h application program error
  3716.     08h not found
  3717.     09h bad format
  3718.     0Ah locked
  3719.     0Bh media error
  3720.     0Ch already exists
  3721.     0Dh unknown
  3722.  
  3723. Values for Suggested Action:
  3724.     01h retry
  3725.     02h delayed retry
  3726.     03h prompt user to reenter input
  3727.     04h abort after cleanup
  3728.     05h immediate abort
  3729.     06h ignore
  3730.     07h retry after user intervention
  3731.  
  3732. Values for Error Locus:
  3733.     01h unknown or not appropriate
  3734.     02h block device (disk error)
  3735.     03h network related
  3736.     04h serial device (timeout)
  3737.     05h memory related
  3738. ----------215A-------------------------------
  3739. INT 21 - DOS 3+ - CREATE UNIQUE FILE
  3740.     AH = 5Ah
  3741.     DS:DX -> ASCIZ directory path name ending with a '\' + 13 bytes to
  3742.          receive generated filename
  3743.     CX = file attributes (only bits 0,1,2,5 may be set)
  3744. Return: CF set on error
  3745.         AX = error code (03h,05h) (see AH=59h)
  3746.     CF clear if successful
  3747.         AX = file handle
  3748.     DS:DX -> path name
  3749. Notes:    the file created is not truly temporary; it MUST be removed by the user
  3750.     COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  3751.       wraps around to the end of the segment
  3752. SeeAlso: AH=3Ch,AH=5Bh
  3753. ----------215B-------------------------------
  3754. INT 21 - DOS 3+ - CREATE NEW FILE
  3755.     AH = 5Bh
  3756.     DS:DX -> ASCIZ directory path name
  3757.     CX = file attribute (see AX=4301h)
  3758. Return: CF set on error
  3759.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  3760.     CF clear if successful
  3761.         AX = file handle
  3762. Note:    unlike function 3Ch, function 5Bh will fail if the file already exists
  3763. SeeAlso: AH=3Ch,AH=5Ah
  3764. ----------215C-------------------------------
  3765. INT 21 - DOS 3+ - LOCK/UNLOCK FILE ACCESS
  3766.     AH = 5Ch
  3767.     AL = 00h lock
  3768.          01h unlock
  3769.     BX = file handle
  3770.     CX:DX = starting offset of region to lock
  3771.     SI:DI = size of region to lock
  3772. Return: CF set on error
  3773.         AX = error code (01h,06h,21h) (see AH=59h)
  3774.     CF clear if successful
  3775. Note:    error returned unless SHARE or network installed
  3776. SeeAlso: AX=440Bh, INT 2F/AX=110Ah,110Bh
  3777. ----------215D00-----------------------------
  3778. INT 21 - DOS 3.1+ internal - SERVER FUNCTION CALL
  3779.     AX = 5D00h
  3780.     DS:DX -> DOS parameter list (see below)
  3781.     DPL contains all register values for a call to INT 21h
  3782. Return: as appropriate for function being called
  3783. Notes:    does not check AH.  Out of range values will crash the system
  3784.     executes using specified computer ID and process ID
  3785.     sharing delay loops skipped
  3786.     a special sharing mode is enabled
  3787.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h)
  3788.     functions which take filenames require canonical names (as returned by
  3789.       AH=60h); this is apparently to prevent multi-hop file forwarding
  3790. SeeAlso: AH=60h
  3791.  
  3792. Format of DOS parameter list:
  3793. Offset    Size    Description
  3794.  00h    WORD    AX 
  3795.  02h    WORD    BX
  3796.  04h    WORD    CX
  3797.  06h    WORD    DX
  3798.  08h    WORD    SI
  3799.  0Ah    WORD    DI
  3800.  0Ch    WORD    DS
  3801.  0Eh    WORD    ES
  3802.  10h    WORD    reserved (0)
  3803.  12h    WORD    computer ID (0 = current system)
  3804.  14h    WORD    process ID (PSP segment on specified computer)
  3805. ----------215D01-----------------------------
  3806. INT 21 - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  3807.     AX = 5D01h
  3808.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  3809.         process ID fields used
  3810. Return: CF set on error
  3811.         AX = error code (see AH=59h)
  3812.     CF clear if successful
  3813. Notes:    flushes buffers and updates directory entries for each file which has
  3814.       been written to; if remote file, calls INT 2F/AX=1107h
  3815.     the computer ID and process ID are stored but ignored under DOS 3.3
  3816. SeeAlso: AH=68h, INT 2F/AX=1107h
  3817. ----------215D02-----------------------------
  3818. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  3819.     AX = 5D02h
  3820.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  3821.         computer ID, and process ID used
  3822.     DPL's DS:DX -> ASCIZ name of file to close
  3823. Return: CF set on error
  3824.         AX = error code (see AH=59h)
  3825.     CF clear if successful
  3826. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  3827.     name must be canonical fully-qualified, such as returned by AH=60h
  3828. SeeAlso: AX=5D03h,5D04h,AH=3Eh,60h
  3829. ----------215D03-----------------------------
  3830. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  3831.     AX = 5D03h
  3832.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  3833. Return: CF set on error
  3834.         AX = error code (see AH=59h)
  3835.     CF clear if successful
  3836. Note:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  3837. SeeAlso: AX=5D02h,5D04h
  3838. ----------215D04-----------------------------
  3839. INT 21 - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  3840.     AX = 5D04h
  3841.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  3842.         process ID fields used
  3843. Return: CF set on error
  3844.         AX = error code (see AH=59h)
  3845.     CF clear if successful
  3846. Note:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  3847. SeeAlso: AX=5D02h,AX=5D03h
  3848. ----------215D05-----------------------------
  3849. INT 21 - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  3850.     AX = 5D05h
  3851.     DS:DX -> DOS parameter list (see AX=5D00h)
  3852.     DPL's BX = index of sharing record
  3853.     DPL's CX = index of SFT in sharing record's SFT list
  3854. Return: CF clear if successful
  3855.         ES:DI -> ASCIZ filename
  3856.         BX = network machine number of SFT's owner
  3857.         CX = number of locks held by SFT's owner
  3858.     CF set if either index out of range
  3859.         AX = 0012h (no more files)
  3860. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  3861.     names are always canonical fully-qualified, such as returned by AH=60h
  3862. SeeAlso: AH=5Ch,AH=60h 
  3863. ----------215D06-----------------------------
  3864. INT 21 - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  3865.     AX = 5D06h
  3866. Return: CF set on error
  3867.        AX = error code (see AH=59h)
  3868.     CF clear if successful
  3869.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  3870.         (critical error flag is first byte)
  3871.         CX = size in bytes of area which must be swapped while in DOS
  3872.         DX = size in bytes of area which must always be swapped
  3873. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  3874.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  3875.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  3876.       DOS 2.x by forcing use of correct stack
  3877.     swapping the data area allows reentering DOS unless DOS is in a
  3878.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  3879.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  3880. SeeAlso: AX=5D0Bh, INT 2A/AH=80h,81h,82h
  3881.  
  3882. Format of DOS 3.10-3.30 Swappable Data Area:
  3883. Offset    Size    Description
  3884.  00h    BYTE    critical error flag
  3885.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  3886.  02h    BYTE    drive on which current critical error occurred, or FFh
  3887.  03h    BYTE    locus of last error
  3888.  04h    WORD    extended error code of last error
  3889.  06h    BYTE    suggested action for last error
  3890.  07h    BYTE    class of last error
  3891.  08h    DWORD    ES:DI pointer for last error
  3892.  0Ch    DWORD    current DTA
  3893.  10h    WORD    current PSP
  3894.  12h    WORD    stores SP across an INT 23
  3895.  14h    WORD    return code from last process termination (zerod after reading
  3896.         with AH=4Dh)
  3897.  16h    BYTE    current drive
  3898.  17h    BYTE    extended break flag
  3899. ---remainder need only be swapped if in DOS---
  3900.  18h    WORD    value of AX on call to INT 21
  3901.  1Ah    WORD    PSP segment for sharing/network
  3902.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  3903.  1Eh    WORD    first usable memory block found when allocating memory
  3904.  20h    WORD    best usable memory block found when allocating memory
  3905.  22h    WORD    last usable memory block found when allocating memory
  3906.  24h    WORD     memory size in paragraphs (used only during initialization)
  3907.  26h    WORD    ???
  3908.  28h    BYTE    ???
  3909.  29h    BYTE    ???
  3910.  2Ah    BYTE    ???
  3911.  2Bh    BYTE    FFh if Ctrl-Break termination, 00h otherwise
  3912.  2Ch    BYTE    ??? flag of some kind
  3913.  2Dh    BYTE    ??? (doesn't seem to be referenced)
  3914.  2Eh    BYTE    day of month
  3915.  2Fh    BYTE    month
  3916.  30h    WORD    year - 1980
  3917.  32h    WORD    number of days since 1-1-1980
  3918.  34h    BYTE    day of week (0 = Sunday)
  3919.  35h    BYTE    ???
  3920.  36h    BYTE    ??? flag
  3921.  37h    BYTE    ??? flag
  3922.  38h 26 BYTEs    device driver request header
  3923.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  3924.  56h 22 BYTEs    device driver request header
  3925.  6Ch 22 BYTEs    device driver request header
  3926.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  3927.  83h    BYTE    ??? apparently not reference by kernel
  3928.  84h  3 BYTEs    24-bit user number (see AH=30h)
  3929.  87h    BYTE    OEM number (see AH=30h)
  3930.  88h  2 BYTEs    ???
  3931.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  3932.  90h  2 BYTEs    ???
  3933.  92h 128 BYTEs    buffer for filename
  3934. 112h 128 BYTEs    buffer for filename
  3935. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  3936. 1A7h 32 BYTEs    directory entry for found file
  3937. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  3938. 218h 11 BYTEs    ??? FCB-format filename
  3939. 223h    BYTE    unused???
  3940. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  3941. 22Fh  2 BYTEs    ???
  3942. 231h    WORD    ???
  3943. 233h  5 BYTEs    ???
  3944. 238h    BYTE    directory search attributes
  3945. 239h    BYTE    type of FCB (00h regular, FFh extended)
  3946. 23Ah    BYTE    extended FCB file attribute
  3947. 23Bh    BYTE    file open mode???
  3948. 23Ch    BYTE    ??? flag bits
  3949. 23Dh    BYTE    ??? flag or counter
  3950. 23Eh    BYTE    ??? flag
  3951. 23Fh    BYTE    flag indicating how DOS function was invoked
  3952.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  3953. 240h    WORD    ???
  3954. 242h    BYTE    ???
  3955. 243h    BYTE    ???
  3956. 244h    BYTE    ???
  3957. 245h    BYTE    ??? flag or counter
  3958. 246h    BYTE    ??? flag
  3959. 247h    BYTE    ??? flag
  3960. 248h    BYTE    ??? flag
  3961. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  3962. 24Ah    BYTE    ??? flag
  3963. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  3964.         (normally E5h, but 00h as described under INT 21/AH=13h)
  3965. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  3966. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  3967. 254h    WORD    stores SP???
  3968. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  3969. 25Ah    WORD    ???
  3970. 25Ch    WORD    ???
  3971. 25Eh    WORD    ??? flag
  3972. 260h    WORD    ???
  3973. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  3974. 263h    BYTE    ??? (doesn't seem to be referenced)
  3975. 264h    DWORD    pointer to ???
  3976. 268h    DWORD    pointer to current SFT
  3977. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  3978. 270h    DWORD    pointer to caller's FCB
  3979. 274h    WORD    ???
  3980. 276h    WORD    temporary storage for file handle
  3981. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  3982. 27Ch    WORD    offset in DOS CS of first filename argument
  3983. 27Eh    WORD    offset in DOS CS of second filename argument
  3984. 280h    WORD    ???
  3985. 282h    WORD    ???
  3986. 284h    WORD    ???
  3987. 286h    WORD    ???
  3988. 288h    WORD    ???
  3989. 28Ah    WORD    ???
  3990. 28Ch    WORD    ???
  3991. 28Eh  2 BYTEs    ???
  3992. 290h    WORD    ???
  3993. 292h    DWORD    current offset in file
  3994. 296h    WORD    ???
  3995. 298h    WORD    ???
  3996. 29Ah    WORD    ???
  3997. 29Ch    WORD    ???
  3998. 29Eh    WORD    ???
  3999. 2A0h    WORD    ???
  4000. 2A2h    DWORD    number of bytes appended to file
  4001. 2A6h    DWORD    pointer to ??? disk buffer
  4002. 2AAh    DWORD    pointer to ??? SFT
  4003. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  4004. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  4005. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  4006. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  4007.         also switched to for duration of INT 24
  4008. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  4009.         (see AH=4Eh)
  4010. 2CDh 32 BYTEs    directory entry for file being renamed
  4011. 2EDh 331 BYTEs    critical error stack
  4012. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25, INT 26)
  4013. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  4014. ---DOS 3.3 only---
  4015. 738h    BYTE    flag affecting AH=08h (see AH=64h)
  4016. 739h    BYTE    ??? looks like a drive number
  4017. 73Ah    BYTE    ??? flag of some kind
  4018. 73Ah    BYTE    ???
  4019. ----------215D07-----------------------------
  4020. INT 21 - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  4021.     AX = 5D07h
  4022. Return: DL = mode
  4023.         00h redirected output is combined
  4024.         01h redirected output in separate print jobs
  4025. SeeAlso: AX=5D08h,AX=5D09h, INT 2F/AX=1125h
  4026. ----------215D08-----------------------------
  4027. INT 21 - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  4028.     AX = 5D08h
  4029.     DL = mode
  4030.         00h redirected output is combined
  4031.         01h redirected output placed in separate jobs, start new print job
  4032.         now
  4033. SeeAlso: AX=5D07h,AX=5D09h, INT 2F/AX=1125h
  4034. ----------215D-------------------------------
  4035. INT 21 - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  4036.     AH = 5D09h
  4037. Note:    forces redirected printer output to be printed, and starts a new print
  4038.       job
  4039. SeeAlso: AX=5D07h,AX=5D08h, INT 2F/AX=1125h
  4040. ----------215D0A-----------------------------
  4041. INT 21 - DOS 3.1+ internal - SET EXTENDED ERROR INFORMATION
  4042.     AX = 5D0Ah
  4043.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  4044. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  4045.       DX,DI, and ES in corresponding registers
  4046. SeeAlso: AH=59h
  4047. ----------215D0B-----------------------------
  4048. INT 21 - DOS 4.x internal - GET DOS SWAPPABLE DATA AREAS
  4049.     AX = 5D0Bh
  4050. Return: CF set on error
  4051.         AX = error code (see AH=59h)
  4052.     CF clear if successful
  4053.         DS:SI -> swappable data area list (see below)
  4054. Note:    copying and restoring the swappable data areas allows DOS to be
  4055.       reentered unless it is in a critical section delimited by calls to
  4056.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  4057. SeeAlso: AX=5D06h, INT 2A/AH=80h,81h,82h
  4058.  
  4059. Format of swappable data area list:
  4060. Offset    Size    Description
  4061.  00h    WORD    count of data areas
  4062.  02h  N BYTEs    "count" copies of data area record
  4063.         Offset    Size    Description
  4064.          00h    DWORD    address
  4065.          04h    WORD    length and type
  4066.                 bit 15 set if swap always, clear if swap in DOS
  4067.                 bits 14-0: length in bytes
  4068.  
  4069. Format of PCDOS 4.01 swappable data area:
  4070. Offset    Size    Description
  4071.  00h    BYTE    critical error flag
  4072.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  4073.  02h    BYTE    ??? drive number or FFh
  4074.  03h    BYTE    locus of last error
  4075.  04h    WORD    extended error code of last error
  4076.  06h    BYTE    suggested action for last error
  4077.  07h    BYTE    class of last error
  4078.  08h    DWORD    ES:DI pointer for last error
  4079.  0Ch    DWORD    current DTA
  4080.  10h    WORD    current PSP
  4081.  12h    WORD    stores SP across an INT 23
  4082.  14h    WORD    return code from last process termination (zerod after reading
  4083.         with AH=4Dh)
  4084.  16h    BYTE    current drive
  4085.  17h    BYTE    extended break flag
  4086.  18h  2 BYTEs    ???
  4087. ---remainder need only be swapped if in DOS---
  4088.  1Ah    WORD    value of AX on call to INT 21
  4089.  1Ch    WORD    PSP segment for sharing/network
  4090.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  4091.  20h    WORD    first usable memory block found when allocating memory
  4092.  22h    WORD    best usable memory block found when allocating memory
  4093.  24h    WORD    last usable memory block found when allocating memory
  4094.  26h  2 BYTEs    ??? (don't seem to be referenced)
  4095.  28h    WORD    ???
  4096.  2Ah    BYTE    ???
  4097.  2Bh    BYTE    ???
  4098.  2Ch    BYTE    ???
  4099.  2Dh    BYTE    ???
  4100.  2Eh    BYTE    ???
  4101.  2Fh    BYTE    ??? (doesn't seem to be referenced)
  4102.  30h    BYTE    day of month
  4103.  31h    BYTE    month
  4104.  32h    WORD    year - 1980
  4105.  34h    WORD    number of days since 1-1-1980
  4106.  36h    BYTE    day of week (0 = Sunday)
  4107.  37h    BYTE    ???
  4108.  38h    BYTE    ???
  4109.  39h    BYTE    ???
  4110.  38h 30 BYTEs    device driver request header
  4111.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  4112.  5Ch 22 BYTEs    device driver request header
  4113.  72h 30 BYTEs    device driver request header
  4114.  90h  6    BYTEs    ???
  4115.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  4116.  9Ch  2 BYTEs    ???
  4117.  9Eh 128 BYTEs    buffer for filename
  4118. 11Eh 128 BYTEs    buffer for filename
  4119. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  4120. 1B3h 32 BYTEs    directory entry for found file
  4121. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  4122. 22Bh 11 BYTEs    ??? FCB-format filename
  4123. 236h    BYTE    ???
  4124. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  4125. 242h  2 BYTEs    ???
  4126. 244h    WORD    ???
  4127. 246h  5 BYTEs    ???
  4128. 24Bh    BYTE    ???
  4129. 24Ch    BYTE    ???
  4130. 24Dh    BYTE    attribute mask for directory search???
  4131. 24Eh    BYTE    ???
  4132. 24Fh    BYTE    ??? flag bits
  4133. 250h    BYTE    ???
  4134. 251h    BYTE    ???
  4135. 252h    BYTE    flag indicating how DOS function was invoked
  4136.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  4137. 253h    BYTE    ???
  4138. 254h    BYTE    ???
  4139. 255h    BYTE    ???
  4140. 256h    BYTE    ???
  4141. 257h    BYTE    ???
  4142. 258h    BYTE    ???
  4143. 259h    BYTE    ???
  4144. 25Ah    BYTE    ???
  4145. 25Bh    BYTE    ???
  4146. 25Ch    BYTE    type of process termination (00h-03h)
  4147. 25Dh    BYTE    ???
  4148. 25Eh    BYTE    ???
  4149. 25Fh    BYTE    ???
  4150. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  4151. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  4152. 268h    WORD    stores SP???
  4153. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  4154. 26Eh    WORD    segment of disk buffer
  4155. 270h    WORD    ???
  4156. 272h    WORD    ???
  4157. 274h    WORD    ???
  4158. 276h    WORD    ???
  4159. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  4160. 279h    BYTE    ??? (doesn't seem to be referenced)
  4161. 27Ah    DWORD    pointer to ???
  4162. 27Eh    DWORD    pointer to current SFT
  4163. 282h    DWORD    pointer to current directory structure for drive being accessed
  4164. 286h    DWORD    pointer to caller's FCB
  4165. 28Ah    WORD    ???
  4166. 28Ch    WORD    ???
  4167. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  4168. 292h    WORD    offset in DOS CS of first filename argument
  4169. 294h    WORD    offset in DOS CS of second filename argument
  4170. 296h    WORD    ???
  4171. 298h    WORD    ???
  4172. 29Ah    WORD    ???
  4173. 29Ch    WORD    ???
  4174. 29Eh    WORD    ???
  4175. 2A0h    WORD    ???
  4176. 2A2h    WORD    ??? directory cluster number???
  4177. 2A4h    DWORD    ???
  4178. 2A8h    DWORD    ???
  4179. 2ACh    WORD    ???
  4180. 2AEh    DWORD    offset in file???
  4181. 2B2h    WORD    ???
  4182. 2B4h    WORD    bytes in partial sector
  4183. 2B6h    WORD    number of sectors
  4184. 2B8h    WORD    ???
  4185. 2BAh    WORD    ???
  4186. 2BCh    WORD    ???
  4187. 2BEh    DWORD    number of bytes appended to file
  4188. 2C2h    DWORD    pointer to ??? disk buffer
  4189. 2C6h    DWORD    pointer to ??? SFT
  4190. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  4191. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  4192. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  4193. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  4194.         also switched to for duration of INT 24
  4195. 2D4h    WORD    ???
  4196. 2D6h    BYTE    ???
  4197. 2D7h    WORD    ???
  4198. 2D9h    DWORD    pointer to ???
  4199. 2DDh    WORD    ???
  4200. 2DFh    WORD    ???
  4201. 2E1h    WORD    ???
  4202. 2E3h    DWORD    ???
  4203. 2E7h    WORD    ???
  4204. 2E9h    WORD    ???
  4205. 2EBh    BYTE    ???
  4206. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  4207. 2EEh    WORD    ???
  4208. 2F0h    BYTE    ???
  4209. 2F1h    WORD    ??? bit flags
  4210. 2F3h    DWORD    pointer to user-supplied filename
  4211. 2F7h    DWORD    pointer to ???
  4212. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  4213. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  4214. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  4215. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  4216.         (see AH=4Eh)
  4217. 315h 32 BYTEs    directory entry for file being renamed
  4218. 335h 331 BYTEs    critical error stack
  4219. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25, INT 26)
  4220. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  4221. 780h    BYTE    flag affecting AH=08h (see AH=64h)
  4222. 781h    BYTE    ??? looks like a drive number
  4223. 782h    BYTE    ??? flag of some kind
  4224. 783h    BYTE    ???
  4225. 784h    WORD    ???
  4226. 786h    WORD    ???
  4227. 788h    WORD    ???
  4228. 78Ah    WORD    ???
  4229. ----------215E00-----------------------------
  4230. INT 21 - DOS 3.1 + Microsoft Networks - GET MACHINE NAME
  4231.     AX = 5E00h
  4232.     DS:DX -> buffer for blank-padded ASCIZ name (16 bytes)
  4233. Return: CF set on error
  4234.         AX = error code (01h) (see AH=59h)
  4235.     CH = 00h if name not defined
  4236.       <> 00h defined
  4237.         CL = NETBIOS name number
  4238.         DS:DX buffer filled with ASCIZ machine name
  4239. SeeAlso: AX=5E01h
  4240. ----------215E01-----------------------------
  4241. INT 21 - DOS 3.1 + Microsoft Networks - SET MACHINE NAME
  4242.     AX = 5E01h
  4243.     CH = 00h undefine name
  4244.        <> 0  define name
  4245.     CL = name number
  4246.     DS:DX -> 15-character blank-padded ASCIZ name
  4247. SeeAlso: AX=5E00h
  4248. ----------215E02-----------------------------
  4249. INT 21 - DOS 3.1 + Microsoft Networks - SET PRINTER SETUP
  4250.     AX = 5E02h
  4251.     BX = redirection list index
  4252.     CX = length of setup string (<= 64)
  4253.     DS:SI -> string buffer
  4254. Return: CF set on error
  4255.         AX = error code (01h) (see AH=59h)
  4256.     CF clear if successful
  4257. SeeAlso: AX=5E03h, INT 2F/AX=111Fh
  4258. ----------215E03-----------------------------
  4259. INT 21 - DOS 3.1 + Microsoft Networks - GET PRINTER SETUP
  4260.     AX = 5E03h
  4261.     BX = redirection list index
  4262.     ES:DI -> string buffer
  4263. Return: CF set on error
  4264.         AX = error code (01h) (see AH=59h)
  4265.     CX = length of setup string (<= 64)
  4266. SeeAlso: AX=5E02h, INT 2F/AX=111Fh
  4267. ----------215E04-----------------------------
  4268. INT 21 - DOS 3.1 + Microsoft Networks - SET PRINTER MODE
  4269.     AX = 5E04h
  4270.     BX = redirection list index
  4271.     DX = mode
  4272.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  4273. Return: CF set on error
  4274.         AX = error code (see AH=59h)
  4275.     CF clear if successful
  4276. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  4277. SeeAlso: AX=5E05h, INT 2F/AX=111Fh
  4278. ----------215E05-----------------------------
  4279. INT 21 - DOS 3.1 + Microsoft Networks - GET PRINTER MODE
  4280.     AX = 5E05h
  4281.     BX = redirection list index
  4282. Return: CF set on error
  4283.         AX = error code (see AH=59h)
  4284.     CF clear if successful
  4285.         DX = printer mode (see AX=5E04h)
  4286. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  4287. SeeAlso: AX=5E04h, INT 2F/AX=111Fh
  4288. ----------215F00-----------------------------
  4289. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  4290.     AX = 5F00h
  4291.     BL = redirection type
  4292.         03h printer
  4293.         04h disk drive
  4294. Return: CF set on error
  4295.         AX = error code (see AH=59h)
  4296.     CF clear if successful
  4297.         BH = redirection state
  4298.         00h off
  4299.         01h on
  4300. SeeAlso: AX=5F01h
  4301. ----------215F01-----------------------------
  4302. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  4303.     AX = 5F01h
  4304.     BL = redirection type
  4305.         03h printer
  4306.         04h disk drive
  4307.     BH = redirection state
  4308.         00h off
  4309.         01h on
  4310. Return: CF set on error
  4311.         AX = error code (see AH=59h)
  4312.     CF clear if successful
  4313. Note:    when redirection is off, the local device (if any) rather than the
  4314.       remote device is used
  4315. SeeAlso: AX=5F00h, INT 2F/AX=111Eh
  4316. ----------215F02-----------------------------
  4317. INT 21 - DOS 3.1 + Microsoft Networks, VINES - GET REDIRECTION LIST ENTRY
  4318.     AX = 5F02h
  4319.     BX = redirection list index
  4320.     DS:SI -> 16 char local device name buffer
  4321.     ES:DI -> 128 char network name buffer
  4322. Return: CF set on error
  4323.         AX = error code (01h,12h) (see AH=59h)
  4324.     CF clear if successful
  4325.         BH = device status flag (bit 0 = 0 if valid)
  4326.         BL = device type (03h if printer, 04h if drive)
  4327.         CX = stored parameter value (user data)
  4328.         DS:SI and ES:DI buffers filled
  4329. Notes:    DX and BP are destroyed by this call!
  4330.     error code 12h is returned if BX is greater than the size of the list
  4331. SeeAlso: AX=5F03h, INT 2F/AX=111Eh
  4332. ----------215F03-----------------------------
  4333. INT 21 - DOS 3.1 + Microsoft Networks, Banyan VINES - REDIRECT DEVICE
  4334.     AX = 5F03h
  4335.     BL = device type
  4336.         03h = printer device
  4337.         04h = file device
  4338.     CX = stored parameter value
  4339.     DS:SI -> ASCIZ source device name
  4340.     ES:DI -> destination ASCIZ network path + ASCIZ password
  4341. Return: CF set on error
  4342.         AX = error code (01h,03h,05h,08h,54h,55h,57h) (see AH=59h)
  4343.     CF clear if successful
  4344. SeeAlso: AX=5F02h,AX=5F04h, INT 2F/AX=111Eh
  4345. ----------215F04-----------------------------
  4346. INT 21 - DOS 3.1 + Microsoft Networks, Banyan VINES - CANCEL REDIRECTION
  4347.     AX = 5F04h
  4348.     DS:SI -> ASCIZ device name or network path
  4349. Return: CF set on error
  4350.         AX = error code (01h,0Fh,57h) (see AH=59h)
  4351.     CF clear if successful
  4352. SeeAlso: AX=5F03h, INT 2F/AX=111Eh
  4353. ----------215F05-----------------------------
  4354. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  4355.     AX = 5F05h
  4356.     BX = redirection list index
  4357.     DS:SI -> buffer for ASCIZ source device name
  4358.     ES:DI -> buffer for destination ASCIZ network path
  4359. Return: CF set on error
  4360.         AX = error code (see AH=59h)
  4361.     CF clear if successful
  4362.         BH = device status flag (bit 0 clear if valid)
  4363.         BL = device type (03h if printer, 04h if drive)
  4364.         CX = stored parameter value (user data)
  4365.         BP = NETBIOS local session number
  4366.         DS:SI buffer filled
  4367.         ES:DI buffer filled
  4368. Notes:    the local session number allows sharing the redirector's session number
  4369.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  4370.       to correctly recover from errors
  4371. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  4372. ----------215F05-----------------------------
  4373. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  4374.     AX = 5F05h
  4375.     DL = drive number (0=A:)
  4376.     DS:SI -> ASCIZ name of the object to map the drive to
  4377. Return: CF set on error
  4378.         AX = error code (see AH=59h)
  4379.     CF clear if successful
  4380. SeeAlso: AX=5F06h"STARLITE"
  4381. ----------215F06-----------------------------
  4382. INT 21 - Network - GET REDIRECTION LIST???
  4383.     AX = 5F06h
  4384.     ???
  4385. Return: ???
  4386. Note:    appears to be similar to AX=5F02h and AX=5F05h
  4387. SeeAlso: AX=5F05h"DOS", INT 2F/AX=111Eh
  4388. ----------215F06-----------------------------
  4389. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  4390.     AX = 5F06h
  4391.     DL = drive to be unmapped (0=A:)
  4392. Return: CF set on error
  4393.         AX = error code (see AH=59h)
  4394.     CF clear if successful
  4395. SeeAlso: AX=5F05h"STARLITE"
  4396. ----------215F07-----------------------------
  4397. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  4398.     AX = 5F07h
  4399.     DS:SI -> ASCIZ name of object to offer to network
  4400.     ES:DI -> ASCIZ name under which object will be known on the network
  4401.         MUST begin with three slashes
  4402. Return: CF set on error
  4403.         AX = error code (see AH=59h)
  4404.     CF clear if successful
  4405. SeeAlso: AX=5F08h
  4406. ----------215F08-----------------------------
  4407. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  4408.     AX = 5F08h
  4409.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  4410. Return: CF set on error
  4411.         AX = error code (see AH=59h)
  4412.     CF clear if successful
  4413. SeeAlso: AX=5F07h
  4414. ----------215F09-----------------------------
  4415. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  4416.     AX = 5F09h
  4417.     DS:DX -> ASCIZ name of the device driver to attach to
  4418. Return: CF set on error
  4419.         AX = error code (see AH=59h)
  4420.     CF clear if successful
  4421. Note:    the STARLITE distributed file system can attach to multiple networks
  4422.       simultaneously
  4423. SeeAlso: AX=5F0Ah
  4424. ----------215F0A-----------------------------
  4425. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  4426.     AX = 5F0Ah
  4427.     DS:DX -> ASCIZ name of device driver to detach from
  4428. Return: CF set on error
  4429.         AX = error code (see AH=59h)
  4430.     CF clear if successful
  4431. SeeAlso: AX=5F09h
  4432. ----------215F80-----------------------------
  4433. INT 21 - LANtastic - GET LOGIN ENTRY
  4434.     AX = 5F80h
  4435.     BX = login entry index (0-based)
  4436.     ES:DI -> 16-byte buffer for machine name
  4437. Return: CF clear if successful
  4438.         buffer filled with machine name ("\\" prefix removed)
  4439.         DL = adapter number (v3+)
  4440.     CF set on error
  4441.         AX = error code
  4442.     BX = next login entry index (BX-1 is current index)
  4443. ----------215F81-----------------------------
  4444. INT 21 - LANtastic - LOGIN TO SERVER
  4445.     AX = 5F81h
  4446.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  4447.     BL = adapter number
  4448.         FFh try all valid adapters
  4449.         00h-03h try only specified adapter
  4450. Return: CF clear if successful
  4451.     CF set on error
  4452.         AX = error code
  4453. Note:    login path is of form "\\machine\username"
  4454. SeeAlso: AX=5F82h,AX=5F84h
  4455. ----------215F82-----------------------------
  4456. INT 21 - LANtastic - LOGOUT FROM SERVER
  4457.     AX = 5F82h
  4458.     ES:DI -> ASCIZ server name (in form "\\machine")
  4459. Return: CF clear if successful
  4460.     CF set on error
  4461.         AX = error code
  4462. SeeAlso: AX=5F81h
  4463. ----------215F83-----------------------------
  4464. INT 21 - LANtastic - GET USERNAME ENTRY
  4465.     AX = 5F83h
  4466.     BX = login entry index (0-based)
  4467.     ES:DI -> 16-byte buffer for username currently logged into
  4468. Return: CF clear if successful
  4469.         DL = adapter number (v3+)
  4470.     CF set on error
  4471.         AX = error code
  4472.     BX = next login entry index (BX-1 is current index)
  4473. ----------215F84-----------------------------
  4474. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  4475.     AX = 5F84h
  4476.     BX = server index not currently logged into
  4477.     ES:DI -> 16-byte buffer for server name which is available for logging
  4478.         in to ("\\" prefix omitted)
  4479. Return: CF clear if successful
  4480.         DL = adapter number to non-logged in server is on
  4481.     CF set on error
  4482.         AX = error code
  4483. SeeAlso: AX=5F81h
  4484. ----------215F85-----------------------------
  4485. INT 21 - LANtastic - CHANGE PASSWORD
  4486.     AX = 5F85h
  4487.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  4488. Return: CF clear if successful
  4489.     CF set on error
  4490.         AX = error code
  4491. Note:    must be logged into the named machine
  4492. ----------215F86-----------------------------
  4493. INT 21 - LANtastic - DISABLE ACCOUNT
  4494.     AX = 5F86h
  4495.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  4496. Return: CF clear if successful
  4497.     CF set on error
  4498.         AX = error code
  4499. Note:    must be logged into the named machine and concurrent logins set to 1
  4500.       by NET_MGR.  Requires system manager to re-enable account.
  4501. ----------215F87-----------------------------
  4502. INT 21 - LANtastic v3+ - GET ACCOUNT
  4503.     AX = 5F87h
  4504.     DS:SI -> 128-byte buffer for account information (see below)
  4505.     ES:DI -> ASCIZ machine name in form "\\machine"
  4506. Return:    CF clear if successful
  4507.     CF set on error
  4508.         AX = error code
  4509.     BX destroyed
  4510. Note:    must be logged into the specified machine
  4511.  
  4512. Format of user account structure:
  4513. Offset    Size    Description
  4514.  00h 16 BYTEs    blank-padded username
  4515.  10h 16 BYTEs    reserved (00h)
  4516.  20h 32 BYTEs    user description
  4517.  40h    BYTE    privilege bits
  4518.         bit 7: bypass access control lists
  4519.             6: bypass queue protection
  4520.             5: treat as local process
  4521.             4: bypass mail protection
  4522.             3: allow audit entry creation
  4523.             2: system manager
  4524.  41h    BYTE    maximum concurrent users
  4525.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  4526.         (bit set if half-hour not an allowed time)
  4527.  6Ch    WORD    internal (0002h)
  4528.  6Eh  2 WORDs    last login time
  4529.  72h  2 WORDs    account expiration date (MSDOS-format year/month:day)
  4530.  76h  2 WORDs    password expiration date (0 = none)
  4531.  7Ah    BYTE    number of days to extend password after change (1-31)
  4532.  7Bh  5 BYTEs    reserved
  4533. ----------215F97-----------------------------
  4534. INT 21 - LANtastic - COPY FILE
  4535.     AX = 5F97h
  4536.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  4537.     SI = source file handle
  4538.     DI = destination file handle
  4539. Return: CF clear if successful
  4540.         AX:DX = number of bytes copied
  4541.     CF set on error
  4542.         AX = error code
  4543. Note:    copy is performed by server
  4544. ----------215F98-----------------------------
  4545. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  4546.     AX = 5F98h
  4547.     DS:SI -> message buffer (see below)
  4548. Return: CF clear if successful
  4549.     CF set on error
  4550.         AX = error code
  4551. SeeAlso: AX=5F99h
  4552.  
  4553. Format of message buffer:
  4554. Offset    Size    Description
  4555.  00h    BYTE    reserved
  4556.  01h    BYTE    message type
  4557.         00h general 
  4558.         01h server warning
  4559.         02h-7Fh reserved
  4560.         80h-FFh user-defined
  4561.  02h 16 BYTEs    ASCIZ destination machine name
  4562.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  4563.  22h 16 BYTEs    ASCIZ user name
  4564.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  4565.  42h 80 BYTEs    message text
  4566. ----------215F99-----------------------------
  4567. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  4568.     AX = 5F99h
  4569.     ES:DI -> messsage buffer (see AX=5F98h for format)
  4570. Return: CF clear if successful
  4571.     CF set on error
  4572.         AX = error code
  4573. SeeAlso: AX=5F98h
  4574. ----------215F9A-----------------------------
  4575. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAG
  4576.     AX = 5F9Ah
  4577. Return: CF clear if successful
  4578.         DL = bits describing processing for received unsolicited messages
  4579.         bit 0: beep before message is delivered
  4580.             1: deliver message to message service
  4581.             2: pop up message automatically (v3+)
  4582.     CF set on error
  4583.         AX = error code
  4584. SeeAlso: AX=5F9Bh,AX=5F9Ch
  4585. ----------215F9B-----------------------------
  4586. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  4587.     AX = 5F9Bh
  4588.     DL = bits describing processing for received unsolicited messages
  4589.          (see AX=5F9Ah)
  4590. Return: CF clear if successful
  4591.     CF set on error
  4592.         AX = error code
  4593. SeeAlso: AX=5F9Ah
  4594. ----------215F9C-----------------------------
  4595. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  4596.     AX = 5F9Ch
  4597.     CX = time to leave on screen in clock ticks
  4598.     DH = 0-based screen line on which to place message
  4599. Return:    CF clear if successful
  4600.     CF set on error
  4601.         AX = error code (0Bh)
  4602. Note:    the original screen contents are restored when the message is removed
  4603. SeeAlso: AX=5F9Ah
  4604. ----------215FA0-----------------------------
  4605. INT 21 - LANtastic - GET QUEUE ENTRY
  4606.     AX = 5FA0h
  4607.     BX = queue entry index (0000h is first entry)
  4608.     DS:SI -> buffer for queue entry (see below)
  4609.     ES:DI -> ASCIZ server name in form "\\name"
  4610. Return: CF clear if successful
  4611.     CF set on error
  4612.         AX = error code
  4613.     BX = entry index for next queue entry (BX-1 is current index)
  4614. SeeAlso: AX=5FA1h,5FA2h
  4615.  
  4616. Format of queue entry:
  4617. Offset    Size    Description
  4618.  00h    BYTE    status of entry
  4619.         00h empty
  4620.         01h being updated
  4621.         02h being held
  4622.         03h waiting for despool
  4623.         04h being despooled
  4624.         05h canceled
  4625.         06h spooled file could not be accessed
  4626.         07h destination could not be accessed
  4627.         08h rush job
  4628.  01h    DWORD    size of spooled file
  4629.  05h    BYTE    type of entry
  4630.         00h printer queue file
  4631.         01h message
  4632.         02h local file
  4633.         03h remote file
  4634.         04h to remote modem
  4635.         05h batch processor file
  4636.  06h    BYTE    output control
  4637.         bit 6: don't delete (for mail)
  4638.         bit 5: mail file contains voice mail (v3+)
  4639.  07h    WORD    number of copies
  4640.  09h    DWORD    sequence number of queue entry
  4641.  0Dh 48 BYTEs    pathname of spooled file
  4642.  3Dh 16 BYTEs    user who spooled file
  4643.  4Dh 16 BYTEs    name of machine from which file was spooled
  4644.  5Dh    WORD    date file was spooled (see AX=5700h)
  4645.  5Fh    WORD    time file was spooled (see AX=5700h)
  4646.  61h 17 BYTEs    ASCIZ destination device or user name
  4647.  72h 48 BYTEs    comment field
  4648. ----------215FA1-----------------------------
  4649. INT 21 - LANtastic - SET QUEUE ENTRY
  4650.     AX = 5FA1h
  4651.     BX = handle of opened queue entry
  4652.     DS:SI -> queue entry (see AX=5FA0h)
  4653. Return: CF clear if successful
  4654.     CF set on error
  4655.         AX = error code
  4656. Note:    the only queue entry fields which may be changed are output control,
  4657.       number of copies, destination device, and comment
  4658. SeeAlso: AX=5FA0h,5FA2h
  4659. ----------215FA2-----------------------------
  4660. INT 21 - LANtastic - CONTROL QUEUE
  4661.     AX = 5FA2h
  4662.     BL = control command
  4663.         00h start despooling (privileged)
  4664.         01h halt despooling (privileged)
  4665.         02h halt despooling at end of job (privileged)
  4666.         03h pause despooler at end of job (privileged)
  4667.         04h print single job (privileged)
  4668.         05h restart current job (privileged)
  4669.         06h cancel the current job
  4670.         07h hold queue entry
  4671.         08h release a held queue entry
  4672.         09h make queue entry a rushed job (privileged)
  4673.     CX:DX = sequence number to control (commands 06h-09h)
  4674.     DX = physical printer number (commands 00h-05h)
  4675.         00h-02h LPT1-LPT3
  4676.         03h,04h COM1,COM2
  4677.         other    all printers
  4678.     ES:DI -> ASCIZ computer name
  4679. Return: CF clear if successful
  4680.     CF set on error
  4681.         AX = error code
  4682. ----------215FA3-----------------------------
  4683. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  4684.     AX = 5FA3h
  4685.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  4686.     DS:SI -> buffer for printer status (see below)
  4687.     ES:DI -> ASCIZ server name in form "\\machine"
  4688. Return: CF clear if successful
  4689.     CF set on error
  4690.         AX = error code
  4691.     BX = next physical printer number
  4692.  
  4693. Format of printer status:
  4694. Offset    Size    Description
  4695.  00h    BYTE    printer state
  4696.         bit 7: printer paused
  4697.         bits 0-6: 0 printer disabled
  4698.               1 will stop at end of job
  4699.               2 print multiple jobs
  4700.  01h    WORD    queue index of print job being despooled
  4701.         FFFFh if not despooling--ignore all following fields
  4702.  03h    WORD    actual characters per second being output
  4703.  05h    DWORD    number of characters actually output so far
  4704.  09h    DWORD    number of bytes read from spooled file so far
  4705.  0Dh    WORD    copies remaining to print
  4706. ----------215FA4-----------------------------
  4707. INT 21 - LANtastic v3+ - GET STREAM INFO
  4708.     AX = 5FA4h
  4709.     BX = 0-based stream index number
  4710.     DS:SI -> buffer for stream information (see below)
  4711.     ES:DI -> ASCIZ machine name in form "\\machine"
  4712. Return: CF clear if successful
  4713.     CF set on error
  4714.         AX = error code
  4715.     BX = next stream number
  4716. SeeAlso: AX=5FA5h
  4717.  
  4718. Format of stream information:
  4719. Offset    Size    Description
  4720.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  4721.  01h 11 BYTEs    logical printer resourse template (may contain ? wildcards)
  4722. ----------215FA5-----------------------------
  4723. INT 21 - LANtastic v3+ - SET STREAM INFO
  4724.     AX = 5FA5h
  4725.     BX = 0-based stream index number
  4726.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  4727.     ES:DI -> ASCIZ machine name in form "\\machine"
  4728. Return: CF clear if successful
  4729.     CF set on error
  4730.         AX = error code
  4731. SeeAlso: AX=5FA4h
  4732. ----------215FA7-----------------------------
  4733. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  4734.     AX = 5FA7h
  4735.     DS:DX -> ASCIZ reason code (max 8 bytes)
  4736.     DS:SI -> ASCIZ variable reason code (max 128 bytes)
  4737.     ES:DI -> ASCIZ machine name in form "\\machine"
  4738. Return: CF clear if successful
  4739.     CF set on error
  4740.         AX = error code
  4741. ----------215FB0-----------------------------
  4742. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  4743.     AX = 5FB0h
  4744.     BX = server login entry index
  4745.     DS:SI -> buffer for active user entry (see below)
  4746.     ES:DI -> ASCIZ machine name in form "\\server"
  4747. Return: CF clear if successful
  4748.     CF set on error
  4749.         AX = error code
  4750.     BX = next login index
  4751.  
  4752. Format of active user entry:
  4753. Offset    Size    Description
  4754.  00h    WORD    virtual circuit number
  4755.  02h    BYTE    login state
  4756.         bit 0: fully logged in
  4757.             1: remote program load login
  4758.             3: user can create audit entries
  4759.             4: bypass mail protection
  4760.             5: treat as local process
  4761.             6: bypass queue protection
  4762.             7: bypass access control lists
  4763.  03h    BYTE    last command issued (see below)
  4764.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  4765.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  4766.  0Ch 16 BYTEs    name of user who is logged in
  4767.  1Ch 16 BYTEs    name of remote logged in machine
  4768.  
  4769. Values for last command:
  4770.  00h    login
  4771.  01h    process termination
  4772.  02h    open file
  4773.  03h    close file
  4774.  04h    create file
  4775.  05h    create new file
  4776.  06h    create unique file
  4777.  07h    commit data to disk
  4778.  08h    read file
  4779.  09h    write file
  4780.  0Ah    delete file
  4781.  0Bh    set file attributes
  4782.  0Ch    lock byte range
  4783.  0Dh    unlock byte range
  4784.  0Eh    create subdirectory
  4785.  0Fh    remove subdirectory
  4786.  10h    rename file
  4787.  11h    find first matching file
  4788.  12h    find next matching file
  4789.  13h    get disk free space
  4790.  14h    get a queue entry
  4791.  15h    set a queue entry
  4792.  16h    control the queue
  4793.  17h    return login information
  4794.  18h    return link description
  4795.  19h    seek on file
  4796.  1Ah    get server's time
  4797.  1Bh    create audit entry
  4798.  1Ch    open file in multitude of modes
  4799.  1Dh    change password
  4800.  1Eh    disable account
  4801.  1Fh    local server file copy
  4802. ---v3+---
  4803.  20h    get username from account file
  4804.  21h    translate server's logical path
  4805.  22h    make indirect file
  4806.  23h    get indirect file contents
  4807.  24h    get physical printer status
  4808.  25h    get logical print stream info
  4809.  26h    set logical print stream info
  4810.  27h    get user's account record
  4811. ----------215FB1-----------------------------
  4812. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  4813.     AX = 5FB1h
  4814.     DS:SI -> 64-byte buffer for link description
  4815.     ES:DI -> ASCIZ machine and shared directory name in form
  4816.          "\\machine\shared-resource"
  4817. Return: CF clear if successful
  4818.         CX = access control list privilege bits for requesting user
  4819.         bit 5: allow attribute changing
  4820.             6: allow physical access to device
  4821.             7: allow program execution
  4822.             8: allow file renaming
  4823.             9: allow directory deletion
  4824.            10: allow file deletion
  4825.            11: allow file/directory lookups
  4826.            12: allow directory creation
  4827.            13: allow file creation
  4828.            14: allow open for write and writing
  4829.            15: allow open for read and reading
  4830.     CF set on error
  4831.         AX = error code
  4832. ----------215FB2-----------------------------
  4833. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  4834.     AX = 5FB2h
  4835.     BX = username entry index (0 for first)
  4836.     DS:SI -> 16-byte buffer for username
  4837.     ES:DI -> ASCIZ server name in form "\\machine"
  4838. Return: CF clear if successful
  4839.     CF set on error
  4840.         AX = error code
  4841.     BX = next queue entry index
  4842. ----------215FB3-----------------------------
  4843. INT 21 - LANtastic v3+ - TRANSLATE PATH
  4844.     AX = 5FB3h
  4845.     DS:SI -> 128-byte buffer for ASCIZ result
  4846.     ES:DI -> full ASCIZ path, including server name
  4847.     DX = types of translation to be performed
  4848.         bit 0: expand last component as indirect file
  4849.         1: return actual path relative to server's physical disk
  4850. Return: CF clear if successful
  4851.     CF set on error
  4852.         AX = error code
  4853. Note:    always expands any indirect files along the path
  4854. SeeALso: AX=5FB4h
  4855. ----------215FB4-----------------------------
  4856. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  4857.     AX = 5FB4h
  4858.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  4859.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  4860. Return: CF clear if successful
  4861.     CF set on error
  4862.         AX = error code
  4863. Note:    the contents of the indirect file may be any valid server-relative path
  4864. ----------215FB5-----------------------------
  4865. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  4866.     AX = 5FB5h
  4867.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  4868.     ES:DI -> full ASCIZ path of indirect file
  4869. Return: CF clear if successful
  4870.     CF set on error
  4871.         AX = error code
  4872. ----------215FC0-----------------------------
  4873. INT 21 - LANtastic - GET TIME FROM SERVER
  4874.     AX = 5FC0h
  4875.     DS:SI -> time block (see below)
  4876.     ES:DI -> ASCIZ server name to get time from
  4877. Return: CF clear if successful
  4878.     CF set on error
  4879.         AX = error code
  4880.  
  4881. Format of time block:
  4882. Offset    Size    Description
  4883.  00h    WORD    year
  4884.  02h    BYTE    day
  4885.  03h    BYTE    month
  4886.  04h    BYTE    minutes
  4887.  05h    BYTE    hour
  4888.  06h    BYTE    hundredths of second
  4889.  07h    BYTE    second
  4890. ----------215FD0-----------------------------
  4891. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  4892.     AX = 5FD0h
  4893. Return: CF clear if successful
  4894.         CX = redirected printer timeout in clock ticks of 55ms
  4895.         0000h if timeout disabled
  4896.     CF set on error
  4897.         AX = error code
  4898. SeeAlso: AX=5FD1h
  4899. ----------215FD1-----------------------------
  4900. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  4901.     AX = 5FD1h
  4902.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  4903. Return: CF clear if successful
  4904.     CF set on error
  4905.         AX = error code
  4906. SeeAlso: AX=5FD0h
  4907. ----------215FE0-----------------------------
  4908. INT 21 - LANtastic - GET DOS SERVICE VECTOR
  4909.     AX = 5FE0h
  4910. Return: CF clear if successful
  4911.         ES:BX -> current FAR service routine
  4912.     CF set on error
  4913.         AX = error code
  4914. SeeAlso: AX=5FE1h
  4915. ----------215FE1-----------------------------
  4916. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  4917.     AX = 5FE1h
  4918.     ES:BX -> FAR routine to call for DOS service
  4919. Return: CF clear if successful
  4920.     CF set on error
  4921.         AX = error code
  4922. Note:    new handler must chain to previous handler as its first action
  4923. SeeAlso: AX=5FE0h
  4924. ----------215FE2-----------------------------
  4925. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  4926.     AX = 5FE2h
  4927. Return: CF clear if successful
  4928.         ES:BX -> current FAR message service routine
  4929.     CF set on error
  4930.         AX = error code
  4931. SeeAlso: AX=5FE3h
  4932. ----------215FE3-----------------------------
  4933. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  4934.     AX = 5FE3h
  4935.     ES:BX -> FAR routine for processing network messages
  4936. Return: CF clear if successful
  4937.     CF set on error
  4938.         AX = error code
  4939. Notes:    handler must chain to previous handler as its first action
  4940.     on invocation, ES:BX -> Network Control Block
  4941. SeeAlso: AX=5FE2h
  4942. ----------2160-------------------------------
  4943. INT 21 - DOS 3+ internal - RESOLVE PATH STRING TO CANONICAL PATH STRING
  4944.     AH = 60h
  4945.     DS:SI -> ASCIZ relative path string or directory name
  4946.     ES:DI -> 128-byte buffer for ASCIZ canonical fully qualified name
  4947. Return: CF set on error
  4948.         AX = error code 
  4949.         02h invalid source name
  4950.         03h invalid drive or malformed path
  4951.         others???
  4952.     CF clear if successful
  4953.         AH = 00h
  4954.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  4955.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  4956.           \\MACHINE\PATH\FILE.EXT
  4957. Notes:    the input path need not actually exist
  4958.     letters are uppercased, forward slashes converted to backslashes,
  4959.       asterisks converted to appropriate number of question marks, and
  4960.       file and directory names are truncated to 8.3 if necessary.
  4961.     '.' and '..' in the path are resolved
  4962.     filespecs on local drives always start with "d:", those on network
  4963.       drives always start with "\\"
  4964.     if path string is on a JOINed drive, the returned name is the one that
  4965.       would be needed if the drive were not JOINed; similarly for a
  4966.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  4967.       possible to get a qualified name that is not legal under the current
  4968.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  4969.     functions which take pathnames require canonical paths if invoked via
  4970.       INT 21/AX=5D00h
  4971.     supported by OS/2 v1.1 compatibility box
  4972. SeeAlso: INT 2F/AX=1123h,1221h
  4973. ----------2161-------------------------------
  4974. INT 21 - DOS 3+ internal - UNUSED
  4975.     AH = 61h
  4976. Return: AL = 00h
  4977. ----------2162-------------------------------
  4978. INT 21 - DOS 3+ - GET PSP ADDRESS
  4979.     AH = 62h
  4980. Return: BX = current PSP segment address (see AH=26h for format)
  4981. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  4982.       and is thus fully reentrant
  4983.     identical to the undocumented AH=51h
  4984. SeeAlso: AH=50h, AH=51h
  4985. ----------2163-------------------------------
  4986. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE (2-BYTE CHARACTER SUPPORT)
  4987.     AH = 63h
  4988.     AL = subfunction
  4989.          00h get system lead byte table
  4990.         Return:    DS:SI -> lead byte table
  4991.          01h set/clear interim console flag (determine whether interim
  4992.             bytes are returned on some console functions)
  4993.         DL = 01h/00h to set/clear interim console flag
  4994.          02h get interim console flag
  4995.         Return:    DL = interim console flag
  4996. Return: CF set on error
  4997.         AX = error code (01h) (see AH=59h)
  4998.     CF clear if successful
  4999. Note:    does not preserve any registers other than SS:SP
  5000. ----------216300-----------------------------
  5001. INT 21 - Asian DOS 3.2+ only - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
  5002.     AX = 6300h
  5003. Return: AL = error code
  5004.         00h successful
  5005.         DS:SI -> DBCS table (see below)
  5006.         BX, CX, DX, BP, DI, and ES destroyed
  5007.         FFh not supported
  5008. Notes:    probably identical to AX=6300h for DOS 2.25
  5009.     The US version of DOS 4.0 accepts this function, but returns an empty
  5010.       list
  5011.  
  5012. Format of DBCS table:
  5013. Offset    Size    Description
  5014.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5015.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5016.     ...
  5017.   N   2 BYTEs    00h,00h end flag
  5018. ----------216301-----------------------------
  5019. INT 21 - Asian DOS 3.2+ only - SET KOREAN (HONGEUL) INPUT MODE
  5020.     AX = 6301h
  5021.     DL = new mode
  5022.         00h return only full characters on DOS keyboard input functions
  5023.         01h    return partially-formed characters also
  5024. Return: AL = status
  5025.         00h successful
  5026.         FFh invalid mode
  5027. SeeAlso: AX=6302h
  5028. ----------216302-----------------------------
  5029. INT 21 - Asian DOS 3.2+ only - GET KOREAN (HONGEUL) INPUT MODE
  5030.     AX = 6302h
  5031. Return: AL = status
  5032.         00h successful
  5033.         DL = current input mode
  5034.             00h return only full characters
  5035.             01h return partial characters
  5036.         FFh not supported
  5037. SeeAlso: AX=6301h
  5038. ----------2164-------------------------------
  5039. INT 21 - DOS 3.2 internal - GET/SET ???
  5040.     AH = 64h
  5041.     AL = subfunction
  5042.         00h get ???
  5043.         Return: DL = ???
  5044.         01h set ???
  5045.         DL = ???
  5046.         02h get and set ???
  5047.         DL = new ???
  5048.         Return: DL = old ???
  5049. ----------2164-------------------------------
  5050. INT 21 - DOS 3.3+ internal - SET ???
  5051.     AH = 64h
  5052.     AL = flag
  5053.         00h  ??? 
  5054.         nonzero  ??? 
  5055. Return: nothing
  5056. Notes:    affects operation of AH=08h
  5057.     called by DOS 3.3+ PRINT.COM
  5058. ----------2165-------------------------------
  5059. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  5060.     AH = 65h
  5061.     AL = info ID
  5062.         01h get general internationalization info
  5063.         02h get pointer to uppercase table
  5064.         04h get pointer to filename uppercase table
  5065.         05h (DOS 3.3+ internal) get pointer to filename terminator table
  5066.         06h get pointer to collating sequence table
  5067.         07h (DOS 4.x) get pointer to Double-Byte Character Set table
  5068.     BX = code page (-1=global code page)
  5069.     DX = country ID (-1=current country)
  5070.     ES:DI -> country information buffer (see below)
  5071.     CX = size of buffer (>= 5)
  5072. Return: CF set on error
  5073.         AX = error code (see AH=59h)
  5074.     CF clear if succesful
  5075.         CX = size of country information returned
  5076.         ES:DI -> country information
  5077. Notes:    AL=05h appears to return same info for all countries and codepages
  5078.     NLSFUNC must be installed to get info for countries other than the
  5079.       default
  5080. SeeAlso: AH=38h,INT 2F/AX=1401h,1402h
  5081.  
  5082. Format of country information:
  5083. Offset    Size    Description
  5084.  00h    BYTE    info ID
  5085. ---if info ID = 01h---
  5086.  01h    WORD    size
  5087.  03h    WORD    country ID
  5088.  05h    WORD    code page
  5089.  07h 34 BYTEs    country-dependent info (see AH=38h)
  5090. ---if info ID = 02h---
  5091.  01h    DWORD    pointer to uppercase table (see below)
  5092. ---if info ID = 04h---
  5093.  01h    DWORD    pointer to filename uppercase table (see below)
  5094. ---if info ID = 05h---
  5095.  01h    DWORD    pointer to filename character table (see below)
  5096. ---if info ID = 06h---
  5097.  01h    DWORD    pointer to collating table (see below)
  5098. ---if info ID = 07h (DOS 4.x)---
  5099.  01h    DWORD    pointer to DBCS lead byte table (see below)
  5100.  
  5101. Format of uppercase table:
  5102. Offset    Size    Description
  5103.  00h    WORD    table size
  5104.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5105.  
  5106. Format of collating table:
  5107. Offset    Size    Description
  5108.  00h    WORD    table size
  5109.  02h 256 BYTEs    values used to sort characters 00h to FFh
  5110.  
  5111. Format of filename terminator table:
  5112. Offset    Size    Description
  5113.  00h    WORD    table size
  5114.  02h  7 BYTEs    ???  (01h 00h FFh 00h 00h 20h 02h in MSDOS 3.30)
  5115.  09h    BYTE    length of following data
  5116.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  5117.  
  5118. Format of filename uppercase table:
  5119. Offset    Size    Description
  5120.  00h    WORD    table size
  5121.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5122.  
  5123. Format of DBCS lead byte table:
  5124. Offset    Size    Description
  5125.  00h    WORD    length
  5126.  02h 2N BYTEs    start/end for N lead byte ranges
  5127.     WORD    0000h    (end of table)
  5128. ----------2165-------------------------------
  5129. INT 21 - DOS 4.x internal - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  5130.     AH = 65h
  5131.     AL = function
  5132.         20h capitalize character
  5133.         DL = character to capitalize
  5134.         Return: DL = capitalized character
  5135.         21h capitalize string
  5136.         DS:DX -> string to capitalize
  5137.         CX = length of string
  5138.         22h capitalize ASCIZ string
  5139.         DS:DX -> ASCIZ string to capitalize
  5140. Return: CF set on error
  5141.         AX = error code (see AH=59h)
  5142.     CF clear if successful
  5143. ----------216523-----------------------------
  5144. INT 21 - DOS 4.x internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  5145.     AX = 6523h
  5146.     DL = character
  5147.     DH = second character of double-byte character (if applicable)
  5148. Return: CF set on error
  5149.     CF clear if successful
  5150.         AX = type
  5151.         00h no
  5152.         01h yes
  5153.         02h neither yes nor no
  5154. ----------2165-------------------------------
  5155. INT 21 - DOS 4.x internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  5156.     AH = 65h
  5157.     AL = function
  5158.         A0h capitalize filename character
  5159.         DL = character to capitalize
  5160.         Return: DL = capitalized character
  5161.         A1h capitalize counted filename string
  5162.         DS:DX -> filename string to capitalize
  5163.         CX = length of string
  5164.         A2h capitalize ASCIZ filename
  5165.         DS:DX -> ASCIZ filename to capitalize
  5166. Return: CF set on error
  5167.         AX = error code (see AH=59h)
  5168.     CF clear if successful
  5169. Note:    nonfunctional in DOS 4.00 and 4.01 due to a bug
  5170. ----------216601-----------------------------
  5171. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  5172.     AX = 6601h
  5173. Return: CF set on error
  5174.         AX = error code (see AH=59h)
  5175.     CF clear if successful
  5176.         BX = active code page
  5177.         DX = system code page
  5178. SeeAlso: AX=6602h
  5179. ----------216602-----------------------------
  5180. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  5181.     AX = 6602h
  5182.     BX = active code page
  5183.         437  US
  5184.         850  Multilingual
  5185.         860  Portugal
  5186.         863  Canada (French)
  5187.         865  Norway/Denmark
  5188.     DX = system code page (active page at boot time)
  5189. Return: CF set on error
  5190.         AX = error code (see AH=59h)
  5191.     CF clear if successful
  5192. SeeAlso: AX=6601h
  5193. ----------2167-------------------------------
  5194. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  5195.     AH = 67h
  5196.     BX = desired number of handles (max 255)
  5197. Return: CF set on error
  5198.         AX = error code (see AH=59h)
  5199.     CF clear if successful
  5200. Notes:    if BX <= 20, no action is taken
  5201.     only the first 20 handles are copied to child processes in DOS 3.3
  5202. BUG:    the original release of DOS 3.30 allocates a full 64K for the handle
  5203.       table on requests for an even number of handles
  5204. SeeAlso: AH=26h
  5205. ----------2168-------------------------------
  5206. INT 21 - DOS 3.3+ - COMMIT FILE, WRITE ALL BUFFERED DATA TO DISK
  5207.     AH = 68h
  5208.     BX = file handle
  5209. Return: CF set on error 
  5210.         AX = error code (see AH=59h)
  5211.     CF clear if successful
  5212. SeeAlso: AX=5D01h, INT 2F/AX=1107h
  5213. ----------2169-------------------------------
  5214. INT 21 - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
  5215.     AH = 69h
  5216.     AL = subfunction
  5217.         00h    get serial number
  5218.         01h set serial number
  5219.     BL = drive (0=default, 1=A, 2=B, etc)
  5220.     DS:DX -> disk info (see below)
  5221. Return: CF set on error
  5222.         AX = error code (see AH=59h)
  5223.     CF clear if successful
  5224.         AX destroyed
  5225.         (AL = 00h) buffer filled with appropriate values from extended BPB
  5226.         (AL = 01h) extended BPB on disk set to values from buffer
  5227. Notes:    does not generate a critical error; all errors are returned in AX
  5228.     error 0005h given if no extended BPB on disk
  5229.     does not work on network drives (error 0001h)
  5230.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  5231.        extended BPB on disk
  5232. SeeAlso: AX=440Dh
  5233.  
  5234. Format of disk info:
  5235. Offset    Size    Description
  5236.  00h    WORD    info level (zero)
  5237.  02h    DWORD    disk serial number (binary)
  5238.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  5239.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  5240. ----------216A-------------------------------
  5241. INT 21 - DOS 4.0 internal - ???
  5242.     AH = 6Ah
  5243.     ???
  5244. Return: ???
  5245. Note:    may be equivalent to INT 21/AH=48h
  5246. ----------216B-------------------------------
  5247. INT 21 - DOS 4.0 internal - ???
  5248.     AH = 6Bh
  5249.     AL = subfunction
  5250.         00h ???
  5251.         DS:SI -> Current Directory Structure???
  5252.         CL = drive (1=A:)
  5253.         01h ???
  5254.         DS:SI -> ???
  5255.         CL = file handle???
  5256.         02h ???
  5257.         DS:SI -> Current Directory Structure???
  5258.         DI = ???
  5259.         CX = drive (1=A:)
  5260.     ???
  5261. Return: CF set on error
  5262.         AX = error code (see INT 21/AH=59h)
  5263.     CF clear if successful
  5264. Return: ???
  5265. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  5266. SeeAlso: INT 2F/AX=112Fh
  5267. ----------216C00-----------------------------
  5268. INT 21 - DOS 4.0 - EXTENDED OPEN/CREATE
  5269.     AX = 6C00h
  5270.     BL = open mode as in AL for normal open (INT 21h/AH=3Dh)
  5271.         bit 7: inheritance
  5272.         bits 4-6: sharing mode
  5273.         bit 3 reserved
  5274.         bits 0-2: access mode
  5275.     BH = flags
  5276.         bit 6 = auto commit on write
  5277.         bit 5 = return error rather than doing INT 24h
  5278.     CX = create attribute
  5279.         bits 6-15 reserved
  5280.         bit 5: archive
  5281.         bit 4: reserved
  5282.         bit 3: volume label
  5283.         bit 2: system
  5284.         bit 1: hidden
  5285.         bit 0: readonly
  5286.     DL = action if file exists/does not exists
  5287.         bits 7-4 action if file does not exist
  5288.             0000 fail
  5289.             0001 create
  5290.         bits 3-0 action if file exists
  5291.             0000 fail
  5292.             0001 open
  5293.             0010 replace/open
  5294.     DH = 00h (reserved)
  5295.     DS:SI -> ASCIZ file name
  5296. Return: CF set on error
  5297.        AX = error code (see AH=59h)
  5298.     CF clear if successful
  5299.        AX = file handle
  5300.        CX = 1 file opened
  5301.         2 file created
  5302.         3 file replaced
  5303. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  5304.       and DL=12h
  5305. SeeAlso: AH=3Ch,3Dh
  5306. ----------2189-------------------------------
  5307. INT 21 - ???
  5308.     AH = 89h
  5309.     ???
  5310. Note:    reportedly called by Microsoft C 4.0 startup code
  5311. ----------21A0-------------------------------
  5312. INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
  5313.     AH = A0h
  5314. Return: AL = display status
  5315.         bit  7  : 0=windowed, 1=enlarged
  5316.         bits 6-3: current screen profile number 0-9
  5317.         bits 2-0: active window number
  5318.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  5319.     BX = host window status
  5320.         bit 15:  reserved
  5321.         bit 14:  0=host E window installed, 1=not
  5322.         bit 13:  0=host E terminal on, 1=off
  5323.         bit 12:  0=host E window displayed, 1=not
  5324.         bit 11:  reserved
  5325.         bit 10:  0=host D window installed, 1=not
  5326.         bit  9:  0=host D terminal on, 1=off
  5327.         bit  8:  0=host D window displayed, 1=not
  5328.         bit  7:  reserved
  5329.         bit  6:  0=host C window installed, 1=not
  5330.         bit  5:  0=host C terminal on, 1=off
  5331.         bit  4:  0=host C window displayed, 1=not
  5332.         bit  3:  reserved
  5333.         bit  2:  0=host B window installed, 1=not
  5334.         bit  1:  0=host B terminal on, 1=off
  5335.         bit  0:  0=host B window displayed, 1=not
  5336. Note:    Attachmate Extra is a 3270 emulator by Attachmate Corporation
  5337. SeeAlso: AH=A1h
  5338. ----------21A1-------------------------------
  5339. INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
  5340.     AH = A1h
  5341.     AL = set status byte
  5342.         bit  7  : 0=windowed, 1=enlarged
  5343.         bits 6-3: current screen profile number 0-9
  5344.         bits 2-0: active window number
  5345.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  5346. SeeAlso: AH=A0h,AH=A2h
  5347. ----------21A2-------------------------------
  5348. INT 21 - Attachmate Extra - SET HOST WINDOW STATE
  5349.     AH = A2h
  5350.     AL = set status byte
  5351.         bit  7  : 0=power off, 1=power on
  5352.         bit  6  : 0=not installed, 1=installed
  5353.         bits 5-3: reserved
  5354.         bits 2-0: window number 1-4=host B-E
  5355. SeeAlso: AH=A1h
  5356. ----------21A3-------------------------------
  5357. INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
  5358.     AH = A3h
  5359.     AL = window number (1-4=host B-E)
  5360.     CX = 0001h
  5361.     DS:BX -> keystroke buffer
  5362.     DL = zero if keystroke buffer contains host function code,
  5363.          non-zero if keystroke buffer contains ASCII character
  5364. Return: CX = zero if character sent, non-zero if not
  5365.     BX incremented if CX=0
  5366.  
  5367. Values for host function code:
  5368.     00h=reserved    10h=PF16    20h=Clear    30h=SysRq
  5369.     01h=PF1        11h=PF17    21h=Print    31h=ErInp
  5370.     02h=PF2        12h=PF18    22h=Left    32h=ErEof
  5371.     03h=PF3        13h=PF19    23h=Right    33h=Ident
  5372.     04h=PF4        14h=PF20    24h=Up        34h=Test
  5373.     05h=PF5        15h=PF21    25h=Down    35h=Reset
  5374.     06h=PF6        16h=PF22    26h=Home    36h=DevCncl
  5375.     07h=PF7        17h=PF23    27h=Fast Left    37h=Dup
  5376.     08h=PF8        18h=PF24    28h=Fast Right    38h=FldMark
  5377.     09h=PF9        19h=Alt on    29h=Bksp    39h=Enter
  5378.     0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  5379.     0Bh=PF11    1Bh=Shift on    2Bh=Delete
  5380.     0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  5381.     0Dh=PF13    1Dh=PA1        2Dh=Tab
  5382.     0Eh=PF14    1Eh=PA2        2Eh=Newline
  5383.     0Fh=PF15    1Fh=PA3        2Fh=Attn
  5384. ----------21A4-------------------------------
  5385. INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
  5386.     AH = A4h
  5387.     AL = window number (1-4=host B-E)
  5388. Return: DS:BX -> 3270 display buffer
  5389. SeeAlso: AH=A5h,AH=B8h
  5390. ----------21A5-------------------------------
  5391. INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
  5392.     AH = A5h
  5393.     AL = window number (1-4=host B-E)
  5394. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  5395. Note:    if the host window is configured with the Extended Attribute (EAB)
  5396.       feature, multiply the cursor position by 2 to obtain the byte offset
  5397.       into the display buffer
  5398. SeeAlso: AH=A4h
  5399. ----------21AF-------------------------------
  5400. INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
  5401.     AH = AFh
  5402. Return: DS:BX -> translate tables
  5403.  
  5404. Format of translate tables:
  5405. Offset    Size    Description
  5406.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  5407. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  5408. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  5409. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  5410. ----------21B5-------------------------------
  5411. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  5412.     AH = B5h
  5413.     AL = subfunction
  5414.         03h get task mode
  5415.         Return: AH = 00h
  5416.             AL = current task mode byte
  5417.         04h get task mode pointer
  5418.         Return: ES:BX -> task mode byte
  5419. Notes:    the task mode byte specifies how task cleanup should be performed, but
  5420.       is declared to be version-dependent
  5421.     allows a program to disable the automatic cleanup for programs managing
  5422.       task swapping, etc.
  5423.  
  5424. Values for task mode byte in version 3.01:
  5425.  00h-03h reserved
  5426.  04h     no task cleanup
  5427. ----------21B6-------------------------------
  5428. INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES
  5429.     AH = B6h
  5430.     AL = subfunction
  5431.         00h get extended file attributes
  5432.         01h set extended file attributes
  5433.     CL = attributes
  5434.         bit 4: transaction tracking file
  5435.         5: indexing file (to be implemented)
  5436.         6: read audit (to be implemented)
  5437.         7: write audit (to be implemented)
  5438.     DS:DX -> ASCIZ pathname
  5439. Return: CF set on error
  5440.         AL = error code
  5441.         FFh file not found
  5442.         8Ch caller lacks privileges
  5443.     CL = current extended file attributes
  5444. SeeAlso: AX=4300h
  5445. ----------21B8-------------------------------
  5446. INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS
  5447.     AH = B8h
  5448.     AL = subfunction
  5449.         00h get default print job flags
  5450.         01h set default capture flags
  5451.         02h get specific capture flags
  5452.         03h set specific print job flags
  5453.         04h get default local printer
  5454.         05h set default local printer
  5455.         06h set capture print queue
  5456.         07h set capture print job
  5457.         08h get banner user name
  5458.         09h set banner user name
  5459.     CX = buffer size
  5460.     ES:BX -> buffer
  5461. Return: none
  5462. ----------21B8-------------------------------
  5463. INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
  5464.     AH = B8h
  5465.     AL = window number (1-4=host B-E)
  5466.     DL = 01h
  5467. Notes:    only valid in CUT mode
  5468.     next AID keystroke (eg Enter) enables host buffer updates
  5469. SeeAlso: AH=A4h
  5470. ----------21BB-------------------------------
  5471. INT 21 - Novell NetWare 4.0 - SET END OF JOB STATUS
  5472.     AH = BBh
  5473.     AL = new EOJ flag
  5474.         00h disable EOJs
  5475.         otherwise enable EOJs
  5476. Return: AL = old EOJ flag
  5477. SeeAlso: AH=D6h
  5478. ----------21BC-------------------------------
  5479. INT 21 - Novell NetWare 4.6 - LOG/LOCK PHYSICAL RECORD
  5480.     AH = BCh
  5481.     AL = flags
  5482.         bit 0: lock as well as log record
  5483.         1: non-exclusive lock
  5484.     BX = file handle
  5485.     CX:DX = offset
  5486.     BP = timeout in timer ticks (1/18 sec)
  5487.     SI:DI = length
  5488. Return: AL = error code
  5489. SeeAlso: AH=BFh
  5490. ----------21BD-------------------------------
  5491. INT 21 - Novell NetWare 4.6 - RELEASE PHYSICAL RECORD
  5492.     AH = BDh
  5493.     BX = file handle
  5494.     CX:DX = offset
  5495. Return: AL = error code
  5496. SeeAlso: AH=C0h
  5497. ----------21BE-------------------------------
  5498. INT 21 - Novell NetWare 4.6 - CLEAR PHYSICAL RECORD
  5499.     AH = BEh
  5500.     BX = file handle
  5501.     CX:DX = offset
  5502. Return: AL = error code
  5503. SeeAlso: AH=C1h
  5504. ----------21BF-------------------------------
  5505. INT 21 - Novell NetWare 4.6 - LOG/LOCK RECORD (FCB)
  5506.     AH = BFh
  5507.     AL = flags
  5508.         bit 0: lock as well as log record
  5509.         1: non-exclusive lock
  5510.     DS:DX -> FCB
  5511.     BX:CX = offset
  5512.     BP = timeout in timer ticks (1/18 sec)
  5513.     SI:DI = length
  5514. Return: AL = error code
  5515. SeeAlso: AH=BCh,C2h
  5516. ----------21C0-------------------------------
  5517. INT 21 - Novell NetWare 4.6 - RELEASE RECORD (FCB)
  5518.     AH = C0h
  5519.     DS:DX -> FCB
  5520.     BX:CX = offset
  5521. Return: AL = error code
  5522. SeeAlso: AH=BDh,C3h
  5523. ----------21C1-------------------------------
  5524. INT 21 - Novell NetWare 4.6 - CLEAR RECORD (FCB)
  5525.     AH = C1h
  5526.     DS:DX -> FCB
  5527.     BX:CX = offset
  5528. Return: AL = error code
  5529. SeeAlso: AH=BEh,C4h
  5530. ----------21C2-------------------------------
  5531. INT 21 - Novell NetWare 4.6 - LOCK PHYSICAL RECORD SET
  5532.     AH = C2h
  5533.     AL = flags
  5534.         bit 1: non-exclusive lock
  5535.     BP = timeout in timer ticks (1/18 sec)
  5536. Return: AL = error code
  5537. SeeAlso: AH=BFh
  5538. ----------21C3-------------------------------
  5539. INT 21 - Novell NetWare 4.6 - RELEASE PHYSICAL RECORD SET
  5540.     AH = C3h
  5541. Return: AL = error code
  5542. SeeAlso: AH=C0h
  5543. ----------21C4-------------------------------
  5544. INT 21 - Novell NetWare 4.6 - CLEAR PHYSICAL RECORD SET
  5545.     AH = C4h
  5546. Return: AL = error code
  5547. SeeAlso: AH=C1h
  5548. ----------21C5-------------------------------
  5549. INT 21 - Novell NetWare 4.6 - SEMAPHORES
  5550.     AH = C5h
  5551.     AL = subfunction
  5552.         00h open semaphore
  5553.         DS:DX -> semaphore name
  5554.         CL = initial value
  5555.         01h examine semaphore
  5556.         Return: CX = semaphore value (sign extended)
  5557.             DL = open count
  5558.         02h wait on semaphore
  5559.         BP = timeout in timer ticks (1/18 sec)
  5560.         03h signal semaphore
  5561.         04h close semaphore
  5562.     CX:DX = semaphore handle (except function 00h)
  5563. Return: AL = error code
  5564.     if function 00h
  5565.        CX:DX = semaphore handle
  5566.        BL = open count
  5567. ----------21C6-------------------------------
  5568. INT 21 - Novell NetWare 4.6 - GET OR SET LOCK MODE
  5569.     AH = C6h
  5570.     AL = subfunction
  5571.         00h set old "compatibility" mode
  5572.         01h set new extended locks mode 
  5573.         02h get lock mode
  5574. Return: AL = current lock mode
  5575. ----------21C7-------------------------------
  5576. INT 21 - Novell NetWare 4.0 - TTS
  5577.     AH = C7h
  5578.     AL = subfunction
  5579.         00h begin transaction (NetWare SFT level II)
  5580.         Return: AL = error code
  5581.         01h end transaction (NetWare SFT level II)
  5582.         Return: AL = error code
  5583.             CX:DX = transaction reference number
  5584.         02h TTS available (NetWare SFT level II)
  5585.         Return: AL = completion code
  5586.                 00h TTS not available
  5587.                 01h TTS available
  5588.                 FDh TTS available but disabled
  5589.         03h abort transaction (NetWare SFT level II)
  5590.         Return: AL = error code
  5591.         04h transaction status
  5592.         05h get application thresholds
  5593.         06h set application thresholds
  5594.         07h get workstation thresholds
  5595.         08h set workstation thresholds
  5596. Return: ???
  5597. ----------21C8-------------------------------
  5598. INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
  5599.     AH = C8h
  5600.     if function C6h lock mode 00h:
  5601.         DL = mode
  5602.         00h no wait
  5603.         01h wait
  5604.     if function C6h lock mode 01h:
  5605.         BP = timeout in timer ticks (1/18 sec)
  5606. Return: AL = error code
  5607. SeeAlso: AH=C9h
  5608. ----------21C9-------------------------------
  5609. INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
  5610.     AH = C9h
  5611. Return: AL = error code
  5612. SeeAlso: AH=C8h
  5613. ----------21CA-------------------------------
  5614. INT 21 - Novell NetWare 4.0 - LOG/LOCK PERSONAL FILE (FCB)
  5615.     AH = CAh
  5616.     DS:DX -> FCB
  5617.     if function C6h lock mode 01h:
  5618.         AL = log and lock flag
  5619.         00h log file only
  5620.         01h lock as well as log file
  5621.         BP = timeout in timer ticks (1/18 sec)
  5622. Return: AL = error code
  5623. SeeAlso: AH=CBh
  5624. ----------21CB-------------------------------
  5625. INT 21 - Novell NetWare 4.0 - LOCK FILE SET
  5626.     AH = CBh
  5627.     if function C6h lock mode 00h:
  5628.         DL = mode
  5629.         00h no wait
  5630.         01h wait
  5631.     if function C6h lock mode 01h:
  5632.         BP = timeout in timer ticks (1/18 sec)
  5633. Return: AL = error code
  5634. SeeAlso: AH=CAh
  5635. ----------21CC-------------------------------
  5636. INT 21 - Novell NetWare 4.0 - RELEASE FILE (FCB)
  5637.     AH = CCh
  5638.     DS:DX -> FCB
  5639. Return: none
  5640. SeeAlso: AH=CDh
  5641. ----------21CD-------------------------------
  5642. INT 21 - Novell NetWare 4.0 - RELEASE FILE SET
  5643.     AH = CDh
  5644. Return: none
  5645. SeeAlso: AH=CCh
  5646. ----------21CE-------------------------------
  5647. INT 21 - Novell NetWare 4.0 - CLEAR FILE (FCB)
  5648.     AH = CEh
  5649.     DS:DX -> FCB
  5650. Return: AL = error code
  5651. SeeAlso: AH=CFh
  5652. ----------21CF-------------------------------
  5653. INT 21 - Novell NetWare 4.0 - CLEAR FILE SET
  5654.     AH = CFh
  5655. Return: AL = 00h
  5656. SeeAlso: AH=CEh
  5657. ----------21D0-------------------------------
  5658. INT 21 - Novell NetWare 4.6, Banyan VINES - LOCK LOGICAL RECORD
  5659.     AH = D0h
  5660.     DS:DX -> record string
  5661.     if function C6h lock mode 01h: (Novell only)
  5662.         AL = flags
  5663.         bit 0: lock as well as log the record
  5664.         bit 1: non-exclusive lock
  5665.         BP = timeout in timer ticks (1/18 sec)
  5666. Return: AL = error code
  5667.         00h successful
  5668.         FFh unsuccessful
  5669. SeeAlso: AH=D1h,D2h
  5670. ----------21D1-------------------------------
  5671. INT 21 - Novell NetWare 4.6, Banyan VINES - LOCK LOGICAL RECORD SET
  5672.     AH = D1h
  5673.     if function C6h lock mode 00h:
  5674.         DL = mode
  5675.         00h no wait
  5676.         01h wait
  5677.     if function C6h lock mode 01h: (Novell only)
  5678.        BP = timeout in timer ticks (1/18 sec)
  5679. Return: AL = error code (see AH=D0h)
  5680. SeeAlso: AH=D0h,D3h
  5681. ----------21D2-------------------------------
  5682. INT 21 - Novell NetWare 4.0, Banyan VINES - UNLOCK LOGICAL RECORD
  5683.     AH = D2h
  5684.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  5685. Return: AL = error code (see AH=D0h)
  5686. SeeAlso: AH=D0h,D3h
  5687. ----------21D3-------------------------------
  5688. INT 21 - Novell NetWare 4.0, Banyan VINES - UNLOCK LOGICAL RECORD SET
  5689.     AH = D3h
  5690. Return: AL = error code (see AH=D0h)
  5691. Note:    unlocks all semaphores logged in the semaphore set of the requesting PC
  5692. SeeAlso: AH=D1h,D2h
  5693. ----------21D4-------------------------------
  5694. INT 21 - Novell NetWare 4.0, Banyan VINES - CLEAR LOGICAL RECORD
  5695.     AH = D4h
  5696.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  5697. Return: AL = error code
  5698.         00h successful
  5699.         FFh not successful
  5700. SeeAlso: AH=D5h
  5701. ----------21D5-------------------------------
  5702. INT 21 - Novell NetWare 4.0, Banyan VINES - CLEAR LOGICAL RECORD SET
  5703.     AH = D5h
  5704. Return: AL = error code (see AH=D4h)
  5705. Note:    unlocks and clears all semaphores associated with the semaphore set
  5706.       of the requesting PC
  5707. SeeAlso: AH=D4h
  5708. ----------21D6-------------------------------
  5709. INT 21 - Novell NetWare 4.0 - END OF JOB
  5710.     AH = D6h
  5711. Return: AL = error code
  5712. SeeAlso: AH=BBh
  5713. ----------21D7-------------------------------
  5714. INT 21 - Novell NetWare 4.0 - SYSTEM LOGOUT
  5715.     AH = D7h
  5716. Return: AL = error code
  5717. ----------21D8-------------------------------
  5718. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  5719.     AH = D8h
  5720.     DL = resource number
  5721. Return: AL = status
  5722.         00h successful
  5723.         FFh unsucessful
  5724. SeeAlso: AH=D9h
  5725. ----------21D9-------------------------------
  5726. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  5727.     AH = D9h
  5728.     DL = resource number
  5729. Return:    AL = status (see AH=D8h)
  5730. SeeAlso: AH=D8h
  5731. ----------21DA-------------------------------
  5732. INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
  5733.     AH = DAh
  5734.     DL = volume number
  5735.     ES:DI -> reply buffer (see below)
  5736. Return: AL = 00h
  5737. SeeAlso: AH=36h
  5738.  
  5739. Format of reply buffer:
  5740. Offset    Size    Description
  5741.  00h    WORD    sectors/block
  5742.  02h    WORD    total blocks
  5743.  04h    WORD    unused blocks
  5744.  06h    WORD    total directory entries
  5745.  08h    WORD    unused directory entries
  5746.  0Ah 16 BYTEs    volume name, null padded
  5747.  1Ah    WORD    removable flag, 0000h = not removable
  5748. ----------21DB-------------------------------
  5749. INT 21 - Novell NetWare 4.0 - GET NUMBER OF LOCAL DRIVES
  5750.     AH = DBh
  5751. Return: AL = number of local disks
  5752. SeeAlso: AH=0Eh
  5753. ----------21DC-------------------------------
  5754. INT 21 - Novell NetWare 4.0, Banyan VINES - GET STATION NUMBER
  5755.     AH = DCh
  5756. Return: AL = station number
  5757.         00h if NetWare not loaded or this machine is a non-dedicated server
  5758.     CX = station number in ASCII
  5759. Note:    station number only unique for those PCs connected to same semaphore
  5760.       service
  5761. ----------21DC-------------------------------
  5762. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  5763.     AH = DCh
  5764.     DX = state
  5765.         0000h turn on
  5766.         0001h turn off
  5767. SeeAlso: AX=FEDCh
  5768. ----------21DD-------------------------------
  5769. INT 21 - Novell NetWare 4.0 - SET ERROR MODE
  5770.     AH = DDh
  5771.     DL = error mode
  5772.         00h display critical I/O errors
  5773.         01h extended errors for all I/O in AL
  5774.         02h extended errors for critical I/O in AL
  5775. Return: AL = previous error mode
  5776. ----------21DE-------------------------------
  5777. INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
  5778.     AH = DEh
  5779.     AL = broadcast mode
  5780.         00h receive console and workstation broadcasts
  5781.         01h receive console broadcasts only
  5782.         02h receive no broadcasts
  5783.         03h store all broadcasts for retrieval
  5784.         04h get broadcast mode
  5785.         05h disable shell timer interrupt checks
  5786.         06h enable shell timer interrupt checks
  5787. Return: AL = old broadcast mode
  5788. ----------21DF-------------------------------
  5789. INT 21 - Novell NetWare 4.0 - CAPTURE
  5790.     AH = DFh
  5791.     AL = subfunction
  5792.         00h start LPT capture
  5793.         01h end LPT capture
  5794.         02h cancel LPT capture
  5795.         03h flush LPT capture
  5796.         04h start specific capture
  5797.         05h end specific capture
  5798.         06h cancel specific capture
  5799.         07h flush specific capture
  5800. Return: AL = error code
  5801. ----------21E0-------------------------------
  5802. INT 21 - Novell NetWare 4.0 - PRINT SPOOLING
  5803.     AH = E0h
  5804.     DS:SI -> request buffer
  5805.     ES:DI -> reply buffer
  5806.     subfunction in third byte of request buffer
  5807.         00h spool data to a capture file
  5808.         01h close and queue capture file
  5809.         02h set spool flags
  5810.         03h spool existing file
  5811.         04h get spool queue entry
  5812.         05h remove entry from spool queue
  5813.         06h get printer status
  5814.         09h create a disk capture file
  5815. Return: AL = error code
  5816. ----------21E0-------------------------------
  5817. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  5818.     AH = E0h
  5819.     ???
  5820. Return: ???
  5821. ----------21E1-------------------------------
  5822. INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
  5823.     AH = E1h
  5824.     DS:SI -> request buffer
  5825.     ES:DI -> reply buffer
  5826.     subfunction in third byte of request buffer
  5827.         00h send broadcast message
  5828.         01h get broadcase message
  5829.         02h disable station broadcasts
  5830.         03h enable station broadcasts
  5831.         04h send personal message
  5832.         05h get personal message
  5833.         06h open message pipe
  5834.         07h close message pipe
  5835.         08h check pipe status
  5836.         09h broadcast to console
  5837. Return: AL = error code
  5838. ----------21E1-------------------------------
  5839. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  5840.     AH = E1h
  5841.     ???
  5842. Return: ???
  5843. Note:    protected mode only???
  5844. ----------21E2-------------------------------
  5845. INT 21 - Novell NetWare 4.0 - DIRECTORY FUNCTIONS
  5846.     AH = E2h
  5847.     DS:SI -> request buffer
  5848.     ES:DI -> reply buffer
  5849.     subfunction in third byte of request buffer
  5850.         00h set directory handle
  5851.         01h get directory path
  5852.         02h scan directory information
  5853.         03h get effective directory rights
  5854.         04h modify maximum rights mask
  5855.         05h get volume number
  5856.         06h get volume name
  5857.         0Ah create directory
  5858.         0Bh delete directory
  5859.         0Ch scan directory for trustees
  5860.         0Dh add trustee to directory
  5861.         0Eh delete trustee from directory
  5862.         0Fh rename directory
  5863.         10h purge erased files
  5864.         11h restore erased file
  5865.         12h allocate permanent directory handle
  5866.         13h allocate temporary directory handle
  5867.         14h deallocate directory handle
  5868.         15h get volume info with handle
  5869.         16h allocate special temporary directory handle
  5870.         17h retrieve a short base handle (Advanced NetWare 2.0)
  5871.         18h restore a short base handle (Advanced NetWare 2.0)
  5872.         19h set directory information
  5873. Return: AL = error code
  5874. ----------21E2-------------------------------
  5875. INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
  5876.     AH = E2h
  5877.     ???
  5878. Return: ???
  5879. ----------21E3-------------------------------
  5880. INT 21 - Novell NetWare 4.0 - CONNECTION CONTROL
  5881.     AH = E3h
  5882.     DS:SI -> request buffer
  5883.     ES:DI -> reply buffer
  5884.     subfunction in third byte of request buffer
  5885.         00h login
  5886.         01h change password
  5887.         02h map user to station set
  5888.         03h map object to number
  5889.         04h map number to object
  5890.         05h get station's logged information
  5891.         06h get station's root mask (obsolete)
  5892.         07h map group name to number
  5893.         08h map number to group name
  5894.         09h get memberset M of group G
  5895.         0Ah enter login area
  5896.         0Bh ???
  5897.         0Ch ???
  5898.         0Dh log network message
  5899.         0Eh get disk utilization (Advanced NetWare 1.0)
  5900.         0Fh scan file information (Advanced NetWare 1.0)
  5901.         10h set file information (Advanced NetWare 1.0)
  5902.         11h get file server information (Advanced NetWare 1.0)
  5903.         12h ???
  5904.         13h get internet address (Advanced NetWare 1.02)
  5905.         14h login to file server (Advanced NetWare 2.0)
  5906.         15h get object connection numbers (Advanced NetWare 2.0)
  5907.         16h get connection information (Advanced NetWare 1.0)
  5908.         32h create object (Advanced NetWare 1.0)
  5909.         33h delete object (Advanced NetWare 1.0)
  5910.         34h rename object (Advanced NetWare 1.0)
  5911.         35h get object ID (Advanced NetWare 1.0)
  5912.         36h get object name (Advanced NetWare 1.0)
  5913.         37h scan object (Advanced NetWare 1.0)
  5914.         38h change object security (Advanced NetWare 1.0)
  5915.         39h create propery (Advanced NetWare 1.0)
  5916.         3Ah delete property (Advanced NetWare 1.0)
  5917.         3Bh change property security (Advanced NetWare 1.0)
  5918.         3Ch scan property (Advanced NetWare 1.0)
  5919.         3Dh read property value (Advanced NetWare 1.0)
  5920.         request buffer contains the property name in all caps
  5921.         property "IDENTIFICATION" returns the user's name
  5922.         3Eh write property value (Advanced NetWare 1.0)
  5923.         3Fh verify object password (Advanced NetWare 1.0)
  5924.         40h change object password (Advanced NetWare 1.0)
  5925.         41h add object to set (Advanced NetWare 1.0)
  5926.         42h delete object from set (Advanced NetWare 1.0)
  5927.         43h is object in set? (Advanced NetWare 1.0)
  5928.         44h close bindery (Advanced NetWare 1.0)
  5929.         45h open bindery (Advanced NetWare 1.0)
  5930.         46h get bindery access level (Advanced NetWare 1.0)
  5931.         47h scan object trustee paths (Advanced NetWare 1.0)
  5932.         C8h check console priviledges
  5933.         C9h get file server description strings
  5934.         CAh set file server date and time
  5935.         CBh disable file server login
  5936.         CCh enable file server login
  5937.         CDh get file server login status
  5938.         CEh purge all erased files
  5939.         CFh disable transaction tracking
  5940.         D0h enable transaction tracking
  5941.         D1h send console broadcast
  5942.         D2h clear connection number
  5943.         D3h down file server
  5944.         D4h get file system statistics
  5945.         D5h get transaction tracking statistics
  5946.         D6h read disk cache statistics
  5947.         D7h get drive mapping table
  5948.         D8h read physical disk statistics
  5949.         D9h get disk channel statistics
  5950.         DAh get connection's task information
  5951.         DBh get list of connection's open files
  5952.         DCh get list of connections using a file
  5953.         DDh get physical record locks by connection and file
  5954.         DEh get physical record locks by file
  5955.         DFh get logical records by connection
  5956.         E0h get logical record information
  5957.         E1h get connection's semaphores
  5958.         E2h get semaphore information
  5959.         E3h get LAN driver's configuration information
  5960.         E5h get connection's usage statistics
  5961.         E6h get object's remaining disk space
  5962.         E7h get server LAN I/O statistics
  5963.         E8h get server miscellaneous information
  5964.         E9h get volume information
  5965. Return: AL = error code
  5966. ----------21E3-------------------------------
  5967. INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
  5968.     AH = E3h
  5969.     AL = interrupt number
  5970.     ???
  5971. Return: ???
  5972. Note:    protected mode only???
  5973. ----------21E4-------------------------------
  5974. INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
  5975.     AH = E4h
  5976.     CL = file attributes
  5977.         bit 0: read only
  5978.         1: hidden
  5979.         2: system
  5980.         7: shareable
  5981.     DX:DX -> FCB
  5982. Return: AL = error code
  5983. SeeAlso: AX=4301h
  5984. ----------21E400-----------------------------
  5985. INT 21 - DoubleDos - INSTALLATION CHECK
  5986.     AX = E400h
  5987. Return: AL <> 00h if DoubleDos is active
  5988.     AL = 02h if caller is running in the invisible partition
  5989. ----------21E400-----------------------------
  5990. INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
  5991.     AX = E400h
  5992.     ???
  5993. Return: ???
  5994. Note:    protected mode only???
  5995. ----------21E402-----------------------------
  5996. INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
  5997.     AX = E402h
  5998.     ???
  5999. Return: ???
  6000. Note:    protected mode only???
  6001. ----------21E403-----------------------------
  6002. INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
  6003.     AX = E403h
  6004.     ???
  6005. Return: ???
  6006. Note:    protected mode only???
  6007. ----------21E5-------------------------------
  6008. INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
  6009.     AH = E5h
  6010.     DS:DX -> FCB
  6011. Return: AL = error code
  6012. ----------21E500-----------------------------
  6013. INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
  6014.     AX = E500h
  6015.     ???
  6016. Return: ???
  6017. ----------21E501-----------------------------
  6018. INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
  6019.     AX = E501h
  6020.     ???
  6021. Return: ???
  6022. ----------21E6-------------------------------
  6023. INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
  6024.     AH = E6h
  6025.     CX:DX = number of bytes to copy
  6026.     DS:SI -> source FCB
  6027.     ES:DI -> destination FCB
  6028. Return: AL = error code
  6029. ----------21E6-------------------------------
  6030. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
  6031.     AH = E6h
  6032.     ???
  6033. Return: ???
  6034. Note:    protected mode only???
  6035. ----------21E7-------------------------------
  6036. INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME
  6037.     AH = E7h
  6038.     DS:DX -> reply buffer
  6039.         BYTE  year - 1900
  6040.         BYTE  month
  6041.         BYTE  day
  6042.         BYTE  hours
  6043.         BYTE  minutes
  6044.         BYTE  seconds
  6045.         BYTE  day of week (0 = Sunday) (Novell only)
  6046. Return: AL = error code
  6047.         00h successful
  6048.         FFh unsuccessful
  6049. SeeAlso: AH=2Ah,2Ch
  6050. ----------21E7-------------------------------
  6051. INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
  6052.     AH = E7h
  6053.     ???
  6054. Return: ???
  6055. ----------21E8-------------------------------
  6056. INT 21 - Novell NetWare 4.6 - SET FCB RE-OPEN MODE
  6057.     AH = E8h
  6058.     DL = mode
  6059.         00h no automatic re-open
  6060.         01h auto re-open
  6061. Return: AL = error code
  6062. ----------21E8-------------------------------
  6063. INT 21 - OS/286, OS/386 - SEGMENT CREATION
  6064.     AH = E8h
  6065.     AL = type
  6066.         00h data segment
  6067.         01h data window/alias
  6068.         02h real segment
  6069.         03h real window/alias
  6070.         06h shareable segment
  6071.     ???
  6072. Return: ???
  6073. ----------21E9-------------------------------
  6074. INT 21 - OS/286, OS/386 - CHANGE SEGMENTS
  6075.     AH = E9h
  6076.     AL = function
  6077.         01h change code segment parameters
  6078.         02h    change data segment parameters
  6079.         05h adjust segment limit
  6080.         06h change segment base address
  6081.     ???
  6082. Return: ???
  6083. Note:    protected mode only???
  6084. ----------21E900-----------------------------
  6085. INT 21 - Novell NetWare 4.6 - SHELL'S "GET BASE STATUS"
  6086.     AX = E900h
  6087.     DX = drive number to check (0 = A:)
  6088. Return: AL = network pathbase
  6089.     AH = base flags
  6090.         00h drive not currently mapped to a base
  6091.         01h drive is mapped to a permanent base
  6092.         02h drive is mapped to a temporary base
  6093.         03h drive exists locally
  6094. ----------21E905-----------------------------
  6095. INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
  6096.     AX = E905h
  6097.     BL = drive number (0=default, 1=A:, ...)
  6098.     DS:DX -> ASCIZ path for fake root (may include server name or be empty)
  6099. Return: CF set on error
  6100.         AL = error code (03h,0Fh,11h) (see AH=59h)
  6101.     CF clear if successful
  6102. Note:    if drive is not currently mapped, a drive mapping will be created
  6103. SeeAlso: AX=E906h
  6104. ----------21E906-----------------------------
  6105. INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
  6106.     AX = E906h
  6107.     BL = drive number (0=default, 1=A:, ...)
  6108. Note:    drive remains mapped
  6109. SeeAlso: AX=E905h
  6110. ----------21E907-----------------------------
  6111. INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
  6112.     AX = E907h
  6113.     BL = drive number (0=default, 1=A:, ...)
  6114. Return: AL = number of directories below the fake root
  6115.         FFh if no fake root assigned
  6116. SeeAlso: AX=E905h
  6117. ----------21E908-----------------------------
  6118. INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
  6119.     AX = E908h
  6120.     BL = 00h    don't return '.' or '..' during directory scans
  6121.        = nonzero    directory scans will return '.' or '..' entries
  6122. Return: BL = previous show-dots setting
  6123. ----------21EA-------------------------------
  6124. INT 21 - Novell NetWare 4.6 - RETURN SHELL VERSION
  6125.     AH = EAh
  6126.     AL = return version environment string
  6127.         00h        don't return string
  6128.         nonzero    return string in 40-byte buffer pointed to by ES:DI
  6129.         Return: buffer filled with three null-terminated entries:
  6130.             major operating system
  6131.             version
  6132.             hardware type
  6133. Return: AH = operating system (00h = MSDOS)
  6134.     AL = hardware type
  6135.         00h IBM PC
  6136.         01h Victor 9000
  6137.     BH = major shell version
  6138.     BL = minor shell version
  6139.     CH = (v3.01+) shell type
  6140.         00h conventional memory
  6141.         01h expanded memory
  6142.         02h extended memory
  6143.     CL = shell revision number
  6144. ----------21EA-------------------------------
  6145. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  6146.     AH = EAh
  6147. Return: task switching turned off
  6148. SeeAlso: AH=EBh"DoubleDOS"
  6149. ----------21EA-------------------------------
  6150. INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
  6151.     AH = EAh
  6152.     ???
  6153. Return: ???
  6154. Note:    protected mode only???
  6155. ----------21EB-------------------------------
  6156. INT 21 - Novell NetWare 4.6 - LOG FILE
  6157.     AH = EBh
  6158.     DS:DX -> ASCIZ filename
  6159.     if function C6h lock mode 01h:
  6160.         AL = flags
  6161.         00h log file only
  6162.         01h lock as well as log file
  6163.         BP = timeout in timer ticks (1/18 second)
  6164. Return: AL = error code
  6165. ----------21EB-------------------------------
  6166. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  6167.     AH = EBh
  6168. Return: task switching turned on
  6169. SeeAlso: AH=EAh"DoubleDOS"
  6170. ----------21EB00-----------------------------
  6171. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
  6172.     AX = EB00h
  6173.     ???
  6174. Return: ???
  6175. Note:    protected mode only???
  6176. ----------21EB02-----------------------------
  6177. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
  6178.     AX = EB02h
  6179.     ???
  6180. Return: ???
  6181. Note:    protected mode only???
  6182. ----------21EB03-----------------------------
  6183. INT 21 - OS/386 VMM - FREE MAPPED PAGES
  6184.     AX = EB03h
  6185.     ???
  6186. Return: ???
  6187. Note:    protected mode only???
  6188. ----------21EB04-----------------------------
  6189. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
  6190.     AX = EB04h
  6191.     ???
  6192. Return: ???
  6193. Note:    protected mode only???
  6194. ----------21EB05-----------------------------
  6195. INT 21 - OS/386 VMM - MAP PAGES
  6196.     AX = EB05h
  6197.     ???
  6198. Return: ???
  6199. Note:    protected mode only???
  6200. ----------21EB06-----------------------------
  6201. INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
  6202.     AX = EB06h
  6203.     ???
  6204. Return: ???
  6205. Note:    protected mode only???
  6206. ----------21EB07-----------------------------
  6207. INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
  6208.     AX = EB07h
  6209.     ???
  6210. Return: ???
  6211. Note:    protected mode only???
  6212. ----------21EC-------------------------------
  6213. INT 21 - Novell NetWare 4.6 - RELEASE FILE
  6214.     AH = ECh
  6215.     DS:DX -> ASCIZ filename
  6216. Return: none
  6217. ----------21EC-------------------------------
  6218. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  6219.     AH = ECh
  6220. Return: ES = segment of virtual screen
  6221. Note:    screen address can change if task-switching is on!!
  6222. ----------21EC-------------------------------
  6223. INT 21 - OS/286, OS/386 - BLOCK TRANSFER
  6224.     AH = ECh
  6225.     ???
  6226. Return: ???
  6227. ----------21ED-------------------------------
  6228. INT 21 - Novell NetWare - CLEAR FILE
  6229.     AH = EDh
  6230.     DS:DX -> ASCIZ filename
  6231. Return: AL = error code
  6232. ----------21ED-------------------------------
  6233. INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
  6234.     AH = EDh
  6235.     ???
  6236. Return: ???
  6237. Note:    protected mode only???
  6238. ----------21EE-------------------------------
  6239. INT 21 - Novell NetWare 4.6 - GET PHYSICAL STATION NUMBER
  6240.     AH = EEh
  6241. Return: CX:BX:AX = six-byte address
  6242. ----------21EE-------------------------------
  6243. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  6244.     AH = EEh
  6245.     AL = number of 55ms time slices to give away
  6246. Return: returns after giving away time slices
  6247. ----------21EF-------------------------------
  6248. INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
  6249.     AH = EFh
  6250.     AL = subfunction
  6251.         00h get drive handle table
  6252.         01h get drive flag table
  6253.         02h get drive connection ID table
  6254.         03h get connection ID table
  6255.         04h get file server name table
  6256. Return: ES:DI -> shell status table
  6257. ----------21F0-------------------------------
  6258. INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
  6259.     AH = F0h
  6260.     AL = subfunction
  6261.         00h set preferred connection ID
  6262.         01h get preferred connection ID
  6263.         02h get default connection ID
  6264.         03h LPT capture active
  6265.         04h set primary connection ID
  6266.         05h get primary connection ID
  6267.     DL = preferred file server
  6268. Return: AL = selected file server
  6269. ----------21F1-------------------------------
  6270. INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
  6271.     AH = F1h
  6272.     AL = subfunction
  6273.         00h attach to file server
  6274.         DL = preferred file server
  6275.         01h detach from file server
  6276.         02h logout from file server
  6277. Return: AL = completion code
  6278. ----------21F2-------------------------------
  6279. INT 21 - Novell NetWare - ???
  6280.     AH = F2h
  6281.     ???
  6282. Return: ???
  6283. ----------21F3-------------------------------
  6284. INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
  6285.     AH = F3h
  6286.     ES:DI -> request string (see below)
  6287. Return: AL = status/error code
  6288.     CX:DX = number of bytes copied
  6289.  
  6290. Format of request string:
  6291. Offset    Size    Description
  6292.  00h    WORD    source file handle
  6293.  02h    WORD    destination file handle
  6294.  04h    DWORD    starting offset in source
  6295.  08h    DWORD    starting offset in destination
  6296.  0Ch    DWORD    number of bytes to copy
  6297. ----------21F8-------------------------------
  6298. INT 21 - DOS v??? - SET OEM INT 21 HANDLER
  6299.     AH = F8h
  6300.     DS:DX -> OEM INT 21 handler for functions F9h to FFh
  6301.          FFFFh:FFFFh resets to original handlers
  6302.  
  6303. Notes:    calls to AH=F9h through AH=FFH will return CF set and AX=1 (invalid
  6304.       function) if no handler set
  6305.     handler is called with all registers exactly as set by caller, and
  6306.       should exit with IRET
  6307. ----------21F9-------------------------------
  6308. INT 21 - DOS v??? - OEM FUNCTION
  6309.     AH = F9h
  6310. ----------21FA-------------------------------
  6311. INT 21 - DOS v??? - OEM FUNCTION
  6312.     AH = FAh
  6313. ----------21FB-------------------------------
  6314. INT 21 - DOS v??? - OEM FUNCTION
  6315.     AH = FBh
  6316. ----------21FC-------------------------------
  6317. INT 21 - DOS v??? - OEM FUNCTION
  6318.     AH = FCh
  6319. ----------21FD-------------------------------
  6320. INT 21 - DOS v??? - OEM FUNCTION
  6321.     AH = FDh
  6322. ----------21FE-------------------------------
  6323. INT 21 - DOS v??? - OEM FUNCTION
  6324.     AH = FEh
  6325. ----------21FEDC-----------------------------
  6326. INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
  6327.     AX = FEDCh
  6328. Return: AX = CDEFh if installed
  6329. SeeAlso: AH=DCh
  6330. ----------21FF-------------------------------
  6331. INT 21 - DOS v??? - OEM FUNCTION
  6332.     AH = FFh
  6333. ----------21FF-------------------------------
  6334. INT 21 - CED - INSTALLABLE COMMANDS
  6335.     AH = FFh
  6336.     AL = 00h add installable command
  6337.            BL = mode - bit 0 = 1 callable from DOS prompt
  6338.                bit 1 = 1 callable from application
  6339.            DS:SI -> CR-terminated command name
  6340.            ES:DI -> FAR routine entry point
  6341.     AL = 01h remove installable command
  6342.            DS:SI -> CR-terminated command name
  6343.     AL = 02h reserved, may be used to test for CED installation
  6344. Return: CF set on error
  6345.         AX = 01h invalid function
  6346.          02h command not found (subfunction 01h only)
  6347.          08h insufficient memory (subfunction 00h only)
  6348.          0Eh bad data (subfunction 00h only)
  6349.     AH = 0FFh if CED not installed
  6350. ----------21FF-------------------------------
  6351. INT 21 - Topware Network Operating System - ???
  6352.     AH = FFh
  6353.     ???
  6354. Return: ???
  6355. ----------22---------------------------------
  6356. INT 22 - DOS - TERMINATE ADDRESS
  6357.    FAR (DWORD) address to jump to when program "returns to DOS".  Normally
  6358.    points at the instruction immediately following INT 21/AH=4Bh call which
  6359.    loaded the current program.    Should NEVER be called directly.
  6360. SeeAlso: INT 20, INT 21/AH=00h,31h,4Ch
  6361. ----------23---------------------------------
  6362. INT 23 - DOS - CONTROL "C" EXIT ADDRESS
  6363.    When DOS detects Ctrl-C or Ctrl-Break, it sends the string "^C" followed by
  6364.    CRLF to the calling process's standard output, then invokes this interrupt.
  6365. ---DOS 1.x---
  6366. Return: AH = 00h abort program
  6367.     if all registers preserved, restart DOS call
  6368. ---DOS 2+---
  6369. Return: return via RETF 2 with CF set
  6370.         DOS will abort program with errorlevel 0
  6371.     else
  6372.         interrupted DOS call continues
  6373. Note:    MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  6374. SeeAlso: INT 1B
  6375. ----------24---------------------------------
  6376. INT 24 - DOS - FATAL ERROR HANDLER ADDRESS
  6377.    Automatically called upon detection of unrecoverable I/O error.
  6378.    Normally points to routine in resident part of COMMAND.COM that prints
  6379.    "Abort, Retry, Ignore?" message and takes the reply, but may be overridden
  6380.    if desired.
  6381.  
  6382. Provides the following values in registers on entry to interrupt handler:
  6383.     AH: bit 7 = 0 disk I/O error
  6384.           = 1 other error -- if block device, bad FAT
  6385.                   -- if char device, code in DI
  6386.         bit 6  unused
  6387.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  6388.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  6389.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  6390.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  6391.         bit 1 /            10 = root dir  11 = data area
  6392.         bit 0 = 1 if write, 0 if read
  6393.     AL = drive number if AH bit 7 = 1, otherwise undefined
  6394.     BP:SI -> header of device driver for which error occurred
  6395.         block device if high bit of BP:[SI+4] set
  6396.     low byte of DI:
  6397.        00h write-protect error
  6398.        01h unknown unit
  6399.        02h drive not ready
  6400.        03h unknown command
  6401.        04h data error (bad CRC)
  6402.        05h bad request structure length
  6403.        06h seek error
  6404.        07h unknown media type
  6405.        08h sector not found
  6406.        09h printer out of paper
  6407.        0Ah write fault
  6408.        0Bh read fault
  6409.        0Ch general failure
  6410.        0Dh (DOS 3+) sharing violation
  6411.        0Eh (DOS 3+) lock violation
  6412.        0Fh (DOS 3+) invalid disk change
  6413.        10h (DOS 3+) FCB unavailable
  6414.        11h (DOS 3+) sharing buffer overflow
  6415. Handler must return
  6416.     AL = 00h ignore error
  6417.        = 01h retry operation
  6418.        = 02h terminate program through INT 22h
  6419.        = 03h fail system call in progress (DOS 3+)
  6420. Notes:    for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  6421.       critical errors
  6422.     if IGNORE specified but not allowed, it is turned into FAIL
  6423.     if RETRY specified but not allowed, it is turned into FAIL
  6424.     if FAIL specified but not allowed, it is turned into ABORT
  6425. ----------25---------------------------------
  6426. INT 25 - DOS - ABSOLUTE DISK READ (except DOS 4.0/COMPAQ DOS 3.31 >32M partitn)
  6427.     AL = drive number (0=A, 1=B, etc)
  6428.     DS:BX = Disk Transfer Address (buffer)
  6429.     CX = number of sectors to read
  6430.     DX = first relative sector to read
  6431. Return: CF set on error
  6432.         AL = error code issued to INT 24h in low half of DI
  6433.         AH = 80h if attachment failed to respond
  6434.          40h if seek operation failed
  6435.          20h if controller failed
  6436.          10h if data error (bad CRC)
  6437.          08h if DMA failure
  6438.          04h if requested sector not found
  6439.          03h if write-protected disk (INT 26 only)
  6440.          02h if bad address mark
  6441.          01h if bad command
  6442.     CF clear if successful
  6443.         AL = 00h
  6444. Notes:    ORIGINAL FLAGS ON STACK!  Must be popped or discarded by adjusting SP
  6445.     May destroy all registers except segment regs
  6446. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  6447.     invalid drive number
  6448. SeeAlso: INT 26, INT 13/AH=02h
  6449. ----------25----CXFFFF-----------------------
  6450. INT 25 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK READ (>32M hard-disk partitn)
  6451.     AL = drive number (0=A, 1=B, etc)
  6452.     CX = FFFFh
  6453.     DS:BX -> disk read packet (see below)
  6454. Return: same as above
  6455. Notes:    partition is potentially >32M (and requires this form of the call) if
  6456.       bit 1 of device attribute word in device driver is set
  6457.     ORIGINAL FLAGS LEFT ON STACK! Must be popped or discarded by adj SP
  6458. SeeAlso: INT 26, INT 13/AH=02h
  6459.  
  6460. Format of disk read packet:
  6461. Offset    Size    Description
  6462.  00h    DWORD    sector number
  6463.  04h    WORD    number of sectors to read
  6464.  06h    DWORD    transfer address
  6465. ----------26---------------------------------
  6466. INT 26 - DOS - ABSOLUTE DISK WRITE (except DOS 4.0/COMPAQ DOS 3.31 >32M partn)
  6467.     AL = drive number (0=A, 1=B, etc)
  6468.     DS:BX = Disk Transfer Address (buffer)
  6469.     CX = number of sectors to write
  6470.     DX = first relative sector to write
  6471. Return: CF set on error
  6472.         AL = error code issued to INT 24h in low half of DI
  6473.         AH = same error codes as for INT 25h
  6474.     CF clear if successful
  6475.         AL = 00h
  6476. Note:    ORIGINAL FLAGS ON STACK!  Must be popped or discarded by adjusting SP
  6477. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  6478.     invalid drive number
  6479. SeeAlso: INT 25, INT 13/AH=03h
  6480. ----------26----CXFFFF-----------------------
  6481. INT 26 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK WRITE (>32M hard-disk partitn)
  6482.     AL = drive number (0=A, 1=B, etc)
  6483.     CX = FFFFh
  6484.     DS:BX -> disk write packet (see below)
  6485. Return: same as above
  6486. Notes:    partition is potentially >32M (and requires this form of the call) if
  6487.       bit 1 of device attribute word in device driver is set
  6488.     ORIGINAL FLAGS LEFT ON STACK!  Must be popped or discarded by adj SP
  6489. SeeAlso: INT 25, INT 13/AH=03h
  6490.  
  6491. Format of disk write packet:
  6492. Offset    Size    Description
  6493.  00h    DWORD    sector number
  6494.  04h    WORD    number of sectors to read
  6495.  06h    DWORD    transfer address
  6496. ----------27---------------------------------
  6497. INT 27 - DOS - TERMINATE BUT STAY RESIDENT
  6498.     CS = current program segment
  6499.     DX = last program byte + 1
  6500. Return: never
  6501. Note:    this is an obsolete call
  6502. SeeAlso: INT 21/AH=31h
  6503. ---------------------------------------------
  6504.