home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 24 / CD_ASCQ_24_0995.iso / dos / tools / inter47 / interrup.e < prev    next >
Text File  |  1995-08-13  |  358KB  |  9,467 lines

  1. Interrupt List, part 5 of 13
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------D-214400-----------------------------
  4. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  5.     AX = 4400h
  6.     BX = handle
  7. Return: CF clear if successful
  8.         DX = device information word (see #0646)
  9.         AX destroyed
  10.     CF set on error
  11.         AX = error code (01h,05h,06h) (see #0885 at AH=59h)
  12. Notes:    value in DH corresponds to high byte of device driver's attribute word
  13.       if handle refers to a character device
  14.     Novell NetWare reportedly does not return a drive number in bits 5-0
  15.       for a disk file
  16. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  17.  
  18. Bitfields for device information word:
  19. Bit(s)    Description    (Table 0646)
  20.  character device
  21.   14    device driver can process IOCTL requests (see AX=4402h)
  22.   13    output until busy supported
  23.   11    driver supports OPEN/CLOSE calls
  24.    7    set (indicates device)
  25.    6    EOF on input
  26.    5    raw (binary) mode
  27.    4    device is special (uses INT 29)
  28.    3    clock device
  29.    2    NUL device
  30.    1    standard output
  31.    0    standard input
  32.  disk file
  33.   15    file is remote (DOS 3.0+)
  34.   14    don't set file date/time on closing (DOS 3.0+)
  35.   11    media not removable
  36.    8    (DOS 4 only) generate INT 24 if no disk space on write or read past
  37.       end of file
  38.    7    clear (indicates file)
  39.    6    file has not been written
  40.   5-0    drive number (0 = A:)
  41. --------D-214401-----------------------------
  42. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  43.     AX = 4401h
  44.     BX = handle (must refer to character device)
  45.     DX = device information word (see #0646)
  46.         (DH must be zero)
  47. Return: CF clear if successful
  48.     CF set on error
  49.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  50. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  51. --------D-214402-----------------------------
  52. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  53.     AX = 4402h
  54.     BX = file handle referencing character device
  55.     CX = number of bytes to read
  56.     DS:DX -> buffer
  57. Return: CF clear if successful
  58.         AX = number of bytes actually read
  59.     CF set on error
  60.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  61. Note:    format of data is driver-specific (see below for some specific cases)
  62. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  63. --------N-214402-----------------------------
  64. INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
  65.     AX = 4402h
  66.     BX = file handle for device "PROTMAN$"
  67.     CX = 000Eh (size of request block)
  68.     DS:DX -> request block (see #0647,#0648,#0649,#0650,#0651,#0655,#0656)
  69. Return: CF clear if successful
  70.         AX = number of bytes actually read
  71.     CF set on error
  72.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  73. SeeAlso: AX=4402h"FTPSOFT"
  74.  
  75. Format of NDIS request block for GetProtocolManagerInfo:
  76. Offset    Size    Description    (Table 0647)
  77.  00h    WORD    01h
  78.  02h    WORD    returned status (see #0657)
  79.  04h    DWORD    returned pointer to structure representing parsed user config
  80.  08h    DWORD    unused
  81.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  82. SeeAlso: #0648,#0649,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  83.  
  84. Format of NDIS request block for RegisterModule:
  85. Offset    Size    Description    (Table 0648)
  86.  00h    WORD    02h
  87.  02h    WORD    returned status (see #0657)
  88.  04h    DWORD    pointer to module's common characteristics table (see #0658)
  89.  08h    DWORD    pointer to list of modules to which the module is to be bound
  90.  0Ch    WORD    unused
  91. SeeAlso: #0647,#0649,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  92.  
  93. Format of NDIS request block for BindAndStart:
  94. Offset    Size    Description    (Table 0649)
  95.  00h    WORD    03h
  96.  02h    WORD    returned status (see #0657)
  97.  04h    DWORD    caller's virtual address in FailingModules structure
  98.  08h    DWORD    unused
  99.  0Ch    WORD    unused
  100. SeeAlso: #0647,#0648,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  101.  
  102. Format of NDIS request block for GetProtocolManagerLinkage:
  103. Offset    Size    Description    (Table 0650)
  104.  00h    WORD    04h
  105.  02h    WORD    returned status (see #0657)
  106.  04h    DWORD    returned dispatch point
  107.  08h    DWORD    unused
  108.  0Ch    WORD    returned protocol manager DS
  109. Note:    the dispatch point may be called as follows instead of using this IOCTL
  110.     STACK: WORD  protocol manager DS
  111.            DWORD pointer to request block
  112.     Return: AX = returned status
  113.         STACK popped
  114. SeeAlso: #0647,#0648,#0649,#0651,#0652,#0653,#0654,#0655,#0656
  115.  
  116. Format of NDIS request block for GetProtocolIniPath:
  117. Offset    Size    Description    (Table 0651)
  118.  00h    WORD    05h
  119.  02h    WORD    returned status (see #0657)
  120.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  121.  08h    DWORD    unused
  122.  0Ch    WORD    buffer length
  123. SeeAlso: #0647,#0648,#0649,#0650,#0652,#0653,#0654,#0655,#0656
  124.  
  125. Format of NDIS request block for RegisterProtocolManagerInfo:
  126. Offset    Size    Description    (Table 0652)
  127.  00h    WORD    06h
  128.  02h    WORD    returned status (see #0657)
  129.  04h    DWORD    pointer to structure containing parsed user config file
  130.  08h    DWORD    unused
  131.  0Ch    WORD    length of structure
  132. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0653,#0654,#0655,#0656
  133.  
  134. Format of NDIS request block for InitAndRegister:
  135. Offset    Size    Description    (Table 0653)
  136.  00h    WORD    07h
  137.  02h    WORD    returned status (see #0657)
  138.  04h    DWORD    unused
  139.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  140.  0Ch    WORD    unused
  141. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0654,#0655,#0656
  142.  
  143. Format of NDIS request block for UnbindAndStop:
  144. Offset    Size    Description    (Table 0654)
  145.  00h    WORD    08h
  146.  02h    WORD    returned status (see #0657)
  147.  04h    DWORD    failing modules as for BindAndStart
  148.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  149.         if 0000h:0000h, terminate a set of previously dynamically
  150.           bound protocol modules
  151.  0Ch    WORD    unused
  152. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0655,#0656
  153.  
  154. Format of NDIS request block for BindStatus:
  155. Offset    Size    Description    (Table 0655)
  156.  00h    WORD    09h
  157.  02h    WORD    returned status (see #0657)
  158.  04h    DWORD    must be 0000h:0000h
  159.         on return, points to root tree
  160.  08h    DWORD    0000h:0000h
  161.  0Ch    WORD    unused under DOS
  162. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0654,#0656
  163.  
  164. Format of NDIS request block for RegisterStatus:
  165. Offset    Size    Description    (Table 0656)
  166.  00h    WORD    0Ah
  167.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see #0657)
  168.  04h    DWORD    0000h:0000h
  169.  08h    DWORD    pointer to 16-byte ASCIZ module name
  170.  0Ch    WORD    0000h
  171. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  172. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0654,#0655
  173.  
  174. (Table 0657)
  175. Values for NDIS status code:
  176.  0000h    success
  177.  0001h    wait for release--protocol has retained control of the data buffer
  178.  0002h    request queued
  179.  0003h    frame not recognized
  180.  0004h    frame rejected
  181.  0005h    frame should be forwarded
  182.  0006h    out of resource
  183.  0007h    invalid parameter
  184.  0008h    invalid function
  185.  0009h    not supported
  186.  000Ah    hardware error
  187.  000Bh    transmit error
  188.  000Ch    unrecognized destination
  189.  000Dh    buffer too small
  190.  0020h    already started
  191.  0021h    binding incomplete
  192.  0022h    driver not initialized
  193.  0023h    hardware not found
  194.  0024h    hardware failure
  195.  0025h    configuration failure
  196.  0026h    interrupt conflict
  197.  0027h    MAC incompatible
  198.  0028h    initialization failed
  199.  0029h    no binding
  200.  002Ah    network may be disconnected
  201.  002Bh    incompatible OS version
  202.  002Ch    already registered
  203.  002Dh    path not found
  204.  002Eh    insufficient memory
  205.  002Fh    info not found
  206.  00FFh    general failure
  207.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  208.  
  209. Format of NDIS common characteristics table:
  210. Offset    Size    Description    (Table 0658)
  211.  00h    WORD    size of table in bytes
  212.  02h    BYTE    NDIS major version
  213.  03h    BYTE    NDIS minor version
  214.  04h    WORD    reserved
  215.  06h    BYTE    module major version
  216.  07h    BYTE    module minor version
  217.  08h    DWORD    module function flag bits
  218.         bit 0: binding at upper boundary supported
  219.         bit 1: binding at lower boundary supported
  220.         bit 2: dynamically bound
  221.         bits 3-31 reserved, must be 0
  222.  0Ch 16 BYTEs    ASCIZ module name
  223.  1Ch    BYTE    upper boundary protocol level (see #0659)
  224.  1Dh    BYTE    upper boundary interface type
  225.         for MACs: 1 = MAC
  226.         for data links and transports: to be defined
  227.         for session: 1 = NCB
  228.         any level: 0 = private (ISV-defined)
  229.  1Eh    BYTE    lower boundary protocol level (see #0659)
  230.  1Fh    BYTE    lower boundary interface type
  231.         same as offset 1Dh
  232.  20h    WORD    module ID filled in by protocol manager
  233.  22h    WORD    module DS
  234.  24h    DWORD    system request entry point
  235.  28h    DWORD    pointer to service-specific characteristics (see #0661,#0663)
  236.         0000h:0000h if none
  237.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  238.           (see #0664)
  239.  30h    DWORD    pointer to upper dispatch table (see #0660)
  240.         0000h:0000h if none
  241.  34h    DWORD    pointer to lower dispatch table (see #0660)
  242.         0000h:0000h if none
  243.  38h  2 DWORDs    reserved, must be 0
  244. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  245.       interpreted as 01h
  246.  
  247. (Table 0659)
  248. Values for NDIS boundary protocol level:
  249.  00h    physical
  250.  01h    Media Access Control
  251.  02h    Data link
  252.  03h    network
  253.  04h    transport
  254.  05h    session
  255.  FFh    not specified
  256.  
  257. Format of NDIS dispatch table:
  258. Offset    Size    Description    (Table 0660)
  259.  00h    DWORD    -> common characteristics table (see #0658)
  260.  04h  4 BYTEs    ???
  261.  08h    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  262.  0Ch    DWORD    -> ??? function (called with 10 bytes of stack arguments)
  263.  10h    DWORD    -> ??? function (called with 16 bytes of stack arguments)
  264.  14h    DWORD    -> ??? function (called with 4 bytes of stack arguments)
  265.  18h    DWORD    -> ??? function (called with 18 bytes of stack arguments)
  266.  1Ch    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  267.  
  268. Format of MAC Service-Specific Characteristics Table:
  269. Offset    Size    Description    (Table 0661)
  270.  00h    WORD    length of table in bytes
  271.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  272.           "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  273.           "HDLC", or "ISDN"
  274.  12h    WORD    length of station addresses in bytes
  275.  14h 16 BYTEs    permanent station address
  276.  24h 16 BYTEs    current station address
  277.  34h    DWORD    current functional adapter address (00000000h if none)
  278.  38h    DWORD    pointer to multicast address list
  279.  3Ch    DWORD    link speed in bits/sec
  280.  40h    DWORD    service flags (see #0662)
  281.  44h    WORD    maximum frame size which may be both sent and received
  282.  46h    DWORD    total transmit buffer capacity in bytes
  283.  4Ah    WORD    transmit buffer allocation block size in bytes
  284.  4Ch    DWORD    total receive buffer capacity in bytes
  285.  50h    WORD    receive buffer allocation block size in bytes
  286.  52h  3 BYTEs    IEEE vendor code
  287.  55h    BYTE    vendor adapter code
  288.  56h    DWORD    pointer to ASCIZ vendor adapter description
  289.  5Ah    WORD    IRQ used by adapter
  290.  5Ch    WORD    transmit queue depth
  291.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  292.  60h  N BYTEs    vendor-specific info
  293. SeeAlso: #0663
  294.  
  295. Bitfields for service flags:
  296. Bit(s)    Description    (Table 0662)
  297.  0    supports broadcast
  298.  1    supports multicast
  299.  2    supports functional/group addressing
  300.  3    supports promiscuous mode
  301.  4    station address software settable
  302.  5    statistics always current
  303.  6    supports InitiateDiagnostics
  304.  7    supports loopback
  305.  8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  306.     indications
  307.  9    supports IBM source routing
  308.  10    supports MAC reset
  309.  11    supports Open/Close adapter
  310.  12    supports interrupt request
  311.  13    supports source routing bridge
  312.  14    supports GDT virtual addresses (OS/2 version)
  313.  15    multiple TransferDatas allowed durign a single indication
  314.  16    MAC normally sets FrameSize = 0 in ReceiveLookahead
  315.  17-31    reserved, must be 0
  316.  
  317. Format of NetBIOS Service-Specific Characteristics Table:
  318. Offset    Size    Description    (Table 0663)
  319.  00h    WORD    length of table in bytes
  320.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  321.  12h    WORD    NetBIOS module code
  322.  14h  N BYTEs    vendor-specific info
  323. SeeAlso: #0661
  324.  
  325. Format of MAC Service-Specific Status Table:
  326. Offset    Size    Description    (Table 0664)
  327.  00h    WORD    length of table in bytes
  328.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  329.         (FFFFFFFFh = never)
  330.  06h    DWORD    MAC status bits (see #0665)
  331.  0Ah    WORD    current packet filter flags (see #0666)
  332.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  333.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  334.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  335.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  336.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  337.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  338.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  339.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  340.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  341.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  342.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  343.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  344.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  345.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  346.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  347.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  348.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  349.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  350.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  351.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  352.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  353.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  354.  64h  N BYTEs    vendor-specific info
  355.  
  356. Bitfields for MAC status bits:
  357. Bit(s)    Description    (Table 0665)
  358.  0-2    operational status
  359.     000 hardware not installed
  360.     001 hardware failed startup diagnostics
  361.     010 hardware configuration problem
  362.     011 hardware fault
  363.     100 operating marginally due to soft faults
  364.     101 reserved
  365.     110 reserved
  366.     111 hardware fully operational
  367.  3    MAC bound
  368.  4    MAC open
  369.  5    diagnostics in progress
  370.  6-31    reserved
  371.  
  372. Bitfields for packet filter flags:
  373. Bit(s)    Description    (Table 0666)
  374.  0    directed/multicast or group/functional
  375.  1    broadcast
  376.  2    promiscuous
  377.  3    all source routing
  378.  4-15    reserved, must be zero
  379. --------I-214402-----------------------------
  380. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  381.     AX = 4402h
  382.     BX = handle for character device "GDMS"
  383.     CX = number of bytes to read (>= 4)
  384.     DS:DX -> buffer (see #0667)
  385. Return: CF set on error
  386.         AX = error code (see #0885 at AH=59h)
  387.     CF clear if successful
  388.         AX = number of bytes read
  389.  
  390. Format of System 36/38 emulator returned data:
  391. Offset    Size    Description    (Table 0667)
  392.  00h  4 BYTEs    ???
  393.  04h    DWORD    pointer to ???
  394.  08h  4 BYTEs    ???
  395. --------m-214402-----------------------------
  396. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  397.     AX = 4402h
  398.     BX = handle for device "LA$TBYTE"
  399.     CX = 0004h
  400.     DS:DX -> DWORD to hold address of 39-byte table of ???
  401. Return: CF set on error
  402.         AX = error code (see #0885 at AH=59h)
  403.     CF clear if successful
  404.         AX = number of bytes read
  405. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  406.       management package by Key Software Products
  407. SeeAlso: AX=4402h"HIGHUMM"
  408. --------m-214402-----------------------------
  409. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  410.     AX = 4402h
  411.     BX = handle for device "KSP$UMM"
  412.     CX = 0004h
  413.     DS:DX -> DWORD to hold entry point (see #0668)
  414. Return: CF set on error
  415.         AX = error code (see #0885 at AH=59h)
  416.     CF clear if successful
  417.         AX = number of bytes read
  418. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  419.       package by Key Software Products
  420. SeeAlso: AX=4402h"LASTBYTE"
  421.  
  422. (Table 0668)
  423. Call HIGHUMM.SYS entry point with:
  424.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  425.         DX = size in paragraphs
  426.         Return: BX = segment number (if successful)
  427.             DX = size of requested block/size of largest block
  428.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  429.         DX = segment number of UMB
  430.     AH = 02h request a bank-switched memory block
  431.         DX = size in paragraphs
  432.         Return: BX = segment number (if successful)
  433.             DX = size of requested block/size of largest block
  434.     AH = 03h release a bank-switched memory block
  435.         DX = segment number
  436.     AH = 04h transfer data to/from high memory
  437.         DS:SI -> source
  438.         ES:DI -> destination
  439.         CX = length in bytes
  440.         Note: enables bank-switched memory, does the copy, then disables
  441.         bank-switched memory
  442.     AH = 05h get a word from bank-switched memory
  443.         ES:DI -> word to read
  444.         Return: DX = word
  445.     AH = 06h put a word to bank-switched memory
  446.         ES:DI -> word to write
  447.         DX = word
  448.     AH = 07h put a byte to bank-switched memory
  449.         ES:DI -> byte to write
  450.         DL = byte
  451.     AH = 08h enable bank-switched memory
  452.         DS:SI -> 6-byte status save area
  453.     AH = 09h disable bank-switched memory
  454.         DS:SI -> 6-byte save area from enable call (AH=08h)
  455.     AH = 0Ah assign name to UMB or high bank-switched block
  456.         DX = segment number
  457.         DS:SI -> 8-byte blank-padded name
  458.     AH = 0Bh locate UMB block by name
  459.         DS:SI -> 8-byte blank-padded name
  460.         Return: BX = segment number (if successful)
  461.             DX = size of block
  462.     AH = 0Ch locate bank-switched block by name
  463.         DS:SI -> 8-byte blank-padded name
  464.         Return: BX = segment number (if successful)
  465.             DX = size of block
  466. Return: AX = status code
  467.         0001h successful
  468.         0000h failed
  469.         BL = error code
  470.             80h not implemented
  471.             B0h insufficient memory, smaller block available
  472.             B1h insufficient memory, no blocks available
  473.             B2h invalid segment number
  474. Note:    only functions 00h and 01h are always available; the remaining
  475.       functions are only enabled if the proper commandline switch is given
  476. --------c-214402-----------------------------
  477. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
  478.     AX = 4402h
  479.     BX = file handle for device "SMARTAAR"
  480.     CX = number of bytes to read (min 28h)
  481.     DS:DX -> buffer for status record (see #0669)
  482. Return: CF clear if successful
  483.         AX = number of bytes actually read
  484.     CF set on error
  485.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  486. Note:    NCache2 (from the Norton Utilities v8.0) attempts to support this
  487.       interface, but does not do so correctly, often hanging the system;
  488.       one should use the SmartDrive v4.x or NCache private interfaces
  489.       (see INT 2F/AX=4A10h/BX=0000h,INT 2F/AX=FE00h/DI=4E55h)
  490. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  491.  
  492. Format of SMARTDRV status record:
  493. Offset    Size    Description    (Table 0669)
  494.  00h    BYTE    write-through flag (always 01h)
  495.  01h    BYTE    writes should be buffered (always 00h)
  496.  02h    BYTE    cache enabled if 01h
  497.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  498.  04h    WORD    clock ticks between cache flushes (currently unused)
  499.  06h    BYTE    cache contains locked tracks if nonzero
  500.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  501.  08h    BYTE    cache full track writes if nonzero
  502.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  503.  0Ah    DWORD    original INT 13 vector
  504.  0Eh    BYTE    minor version number
  505.  0Fh    BYTE    major version number
  506.  10h    WORD    unused
  507.  12h    WORD    sectors read            \
  508.  14h    WORD    sectors already in cache     > may be scaled rather than
  509.  16h    WORD    sectors already in track buffer /  absolute counts
  510.  18h    BYTE    cache hit rate in percent
  511.  19h    BYTE    track buffer hit rate in percent
  512.  1Ah    WORD    total tracks in cache
  513.  1Ch    WORD    number of tracks in use
  514.  1Eh    WORD    number of locked tracks
  515.  20h    WORD    number of dirty tracks
  516.  22h    WORD    current cache size in 16K pages
  517.  24h    WORD    original (maximum) cache size in 16K pages
  518.  26h    WORD    minimum cache size in 16K pages
  519.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  520. --------d-214402-----------------------------
  521. INT 21 - CD-ROM device driver - IOCTL INPUT
  522.     AX = 4402h
  523.     BX = file handle referencing character device for CD-ROM driver
  524.     CX = number of bytes to read
  525.     DS:DX -> control block (see #0671)
  526. Return: CF clear if successful
  527.         AX = number of bytes actually read
  528.     CF set on error
  529.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  530. Note:    the data returned depends on the first byte of the control block; the
  531.       remainder of the control block is filled by the driver
  532. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  533.  
  534. (Table 0670)
  535. Values for CD-ROM data being requested:
  536.  00h    device driver header address
  537.  01h    drive head location
  538.  02h    reserved
  539.  03h    error statistics
  540.  04h    audio channel info
  541.  05h    raw drive bytes (uninterpreted and device-specific)
  542.  06h    device status
  543.  07h    sector size
  544.  08h    volume size
  545.  09h    media change status
  546.  0Ah    audio disk info
  547.  0Bh    audio track info
  548.  0Ch    audio Q-Channel info
  549.  0Dh    audio sub-channel info
  550.  0Eh    UPC code
  551.  0Fh    audio status info
  552.  
  553. Format of CD-ROM control block:
  554. Offset    Size    Description    (Table 0671)
  555.  00h    BYTE    data being requested (see #0670)
  556. ---function 00h---
  557.  01h    DWORD    device driver header address (see also AH=52h)
  558. ---function 01h---
  559.  01h    BYTE    addressing mode
  560.         00h HSG
  561.         01h Red Book
  562.  02h    DWORD    current location of drive's head
  563.         logical sector number in HSG mode
  564.         frame/second/minute/unused in Red Book mode
  565.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  566. ---function 03h---
  567.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  568. ---function 04h---
  569.  01h    BYTE    input channel (0-3) for output channel 0
  570.  02h    BYTE    volume for output channel 0
  571.  03h    BYTE    input channel (0-3) for output channel 1
  572.  04h    BYTE    volume for output channel 1
  573.  05h    BYTE    input channel (0-3) for output channel 2
  574.  06h    BYTE    volume for output channel 2
  575.  07h    BYTE    input channel (0-3) for output channel 3
  576.  08h    BYTE    volume for output channel 3
  577. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  578.       right prime; a volume of 00h is off
  579.     the default setting is for each input channel to be assigned to the
  580.       same-numbered output channel at full (FFh) volume
  581. ---function 05h---
  582.  01h    BYTE    number of bytes read
  583.  02h 128 BYTEs    buffer for drive bytes
  584. ---function 06h---
  585.  01h    DWORD    device parameters (see #0672)
  586. ---function 07h---
  587.  01h    BYTE    read mode
  588.         00h cooked
  589.         01h raw
  590.  02h    WORD    sector size in bytes
  591. ---function 08h---
  592.  01h    DWORD    volume size in sectors
  593. ---function 09h---
  594.  01h    BYTE    media change status
  595.         00h don't know
  596.         01h media unchanged
  597.         FFh media has been changed
  598. ---function 0Ah---
  599.  01h    BYTE    lowest audio track number
  600.  02h    BYTE    highest audio track number
  601.  03h    DWORD    start address of lead-out track (Red Book format)
  602. --function 0Bh---
  603.  01h    BYTE    track number (set by caller)
  604.  02h    DWORD    starting point of track (Red Book format)
  605.  06h    BYTE    track control info
  606.         bits 15,14,12: track type (notice: bits not contiguous!)
  607.             000 two audio channels, no pre-emphasis
  608.             001 two audio channels with pre-emphasis
  609.             010 data track
  610.             100 four audio channels, no pre-emphasis
  611.             101 four audio channels with pre-emphasis
  612.             other reserved
  613.         bit 13: digital copy permitted
  614. ---function 0Ch---
  615.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  616.  02h    BYTE    track number
  617.  03h    BYTE    point or index
  618.  04h    BYTE    minute    \
  619.  05h    BYTE    second     > running time within track
  620.  06h    BYTE    frame    /
  621.  07h    BYTE    zero
  622.  08h    BYTE    "AMIN" or "PMIN"     \
  623.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  624.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  625. ---function 0Dh---
  626.  01h    DWORD    starting frame address (Red Book format)
  627.  05h    DWORD    transfer address
  628.  09h    DWORD    number of sectors to read
  629. Note:    copies 96 bytes of sub-channel info per sector into buffer
  630. ---function 0Eh---
  631.  01h    BYTE    CONTROL and ADR byte
  632.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  633.  09h    BYTE    zero
  634.  0Ah    BYTE    "AFRAME"
  635. ---function 0Fh---
  636.  ??? documentation not yet available
  637.  01h    WORD    pause status (0000h not paused, 0001h paused)
  638.  03h    DWORD    audio play start address
  639.  07h    DWORD    ??? audio play length or end address
  640.  
  641. Bitfields for CD-ROM device parameters:
  642. Bit(s)    Description    (Table 0672)
  643.  0    door open
  644.  1    door unlocked
  645.  2    supports raw reading in addition to cooked
  646.  3    writable
  647.  4    can play audio/video tracks
  648.  5    supports interleaving
  649.  6    reserved
  650.  7    supports prefetch requests
  651.  8    supports audio channel control
  652.  9    supports Red Book addressing in addition to HSG
  653.  10    audio is playing
  654.  11    no disk in drive
  655.  12    supports R-W subchannels
  656. --------m-214402-----------------------------
  657. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  658.     AX = 4402h
  659.     BX = file handle for device "QEMM386$"
  660.     CX = 0004h
  661.     DS:DX -> DWORD buffer for API entry point
  662. Return: CF clear if successful
  663.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  664.     CF set on error
  665.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  666. Note:    Quarterdeck recently (June 1993) documented this function, but the
  667.       documentation incorrectly states that it is only available for
  668.       QEMM 6+
  669. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  670. --------Q-214402-----------------------------
  671. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  672.     AX = 4402h
  673.     BX = file handle for device "HOOKROM$"
  674.     CX = 0004h
  675.     DS:DX -> DWORD buffer for address of hooked vector table (see #0673)
  676. Return: CF clear if successful
  677.         DS:DX buffer filled
  678.     CF set on error
  679.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  680. SeeAlso: AX=4402h/SF=01h
  681.  
  682. Format of HOOKROM.SYS hooked vector table entry:
  683. Offset    Size    Description    (Table 0673)
  684.  00h  5 BYTEs    FAR jump to actual interrupt handler
  685.         (end of table if first byte is not EAh)
  686.  05h    BYTE    interrupt vector number
  687. --------d-214402-----------------------------
  688. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  689.     AX = 4402h
  690.     BX = file handle for device "SCSIMGR$"
  691.     CX = 0004h or 0005h (see notes)
  692.     DS:DX -> buffer for result (see #0674), set to zeros before call
  693. Return: CF clear if successful
  694.         AX = 0004h or 0005h (see notes)
  695.     CF set on error
  696.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  697. Note:    the variant of the call requesting five bytes is an UNDOCUMENTED
  698.       extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
  699.       ASPI7DOS.SYS; if made of a host manager which does not support the
  700.       variant, only four bytes will be returned.  If the variant is
  701.       supported, Adaptec's WINASPI.DLL assumes that the host manager is
  702.       an "advanced" one which operates in either real or protected mode
  703.       (and thus does not require a DPMI INT 31/AX=0301h call to be invoked
  704.       from protected mode).     Support of the five-byte variant also appears
  705.       to imply that an advanced ASPI host manager uses no temporary
  706.       storage space except the SRB (see #0676) and the stack, and that it
  707.       is fully reentrant.
  708.     if called with a standard request for four bytes, even Adaptec's
  709.       advanced drivers return only the requested four bytes containing the
  710.       ASPI entry point address
  711.     the function address is called with the address of a SCSI Request
  712.       Block (see #0676) on the stack and the caller must clean up the
  713.       stack
  714. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  715.  
  716. Format of ASPI IOCTL result:
  717. Offset    Size    Description    (Table 0674)
  718.  00h    DWORD    function address
  719.  04h    BYTE    number of SCSI host adapters supported by host manager
  720.  
  721. (Table 0675)
  722. Values for ASPI request number:
  723.  00h    "HA_INQ"    host adapter inquiry
  724.  01h    "GET_TYPE"    get device type
  725.  02h    "EXEC_SIO"    execute SCSI I/O
  726.  03h    "ABORT_SRB"    abort SRB
  727.  04h    "RESET_DEV"    reset SCSI device
  728.  05h    "SET_HAPRMS"    set host adapter parameters
  729.  06h    get disk drive information
  730.  
  731. Format of SCSI Request Block (64 bytes):
  732. Offset    Size    Description    (Table 0676)
  733.  00h    BYTE    request number (see #0675)
  734.  01h    BYTE    request status (see #0677)
  735.  02h    BYTE    host adapter ID
  736.  03h    BYTE    request flags (see #0678)
  737.  04h    DWORD    reserved
  738. ---request 00h---
  739.  08h    BYTE    (ret) number of host adapters
  740.  09h    BYTE    (ret) target adapter ID
  741.  0Ah 16 BYTEs    (ret) SCSI manager ID
  742.  1Ah 16 BYTEs    (ret) host adapter ID
  743.  2Ah 16 BYTEs    (ret) host adapter-unique parameters
  744. ---request 01h---
  745.  08h    BYTE    target ID
  746.  09h    BYTE    logical unit number
  747.  0Ah    BYTE    (ret) device type (see #0681)
  748. ---request 02h---
  749.  08h    BYTE    target ID
  750.  09h    BYTE    logical unit number
  751.  0Ah    DWORD    data allocation length
  752.  0Eh    BYTE    sense allocation length
  753.  0Fh    DWORD    data buffer pointer
  754.  13h    DWORD    next request pointer (for linking)
  755.  17h    BYTE    CDB length
  756.  18h    BYTE    (ret) host adapter status (see #0676)
  757.  19h    BYTE    (ret) target status (see #0680)
  758.  1Ah    DWORD    post routine address
  759.  1Eh    WORD    real mode Post DS
  760.  20h    DWORD    SRB pointer
  761.  24h    WORD    reserved
  762.  26h    DWORD    SRB physical address
  763.  2Ah 22 BYTEs    SCSIMGR$ workspace
  764.  40h  N BYTEs    CCB, including sense data (20-24 bytes)
  765. ---request 03h---
  766.  08h    DWORD    address of SRB to abort
  767. ---request 04h---
  768.  08h    BYTE    target ID
  769.  09h    BYTE    logical unit number
  770.  0Ah 14 BYTEs    reserved
  771.  18h    BYTE    (ret) host adapter status (see #0679)
  772.  19h    BYTE    (ret) target status (see #0680)
  773.  1Ah    DWORD    post routine address
  774.  1Eh 34 BYTEs    workspace
  775. ---request 05h---
  776.  08h 16 BYTEs    host adapter-unique parameters
  777. ---request 06h---
  778.  08h    BYTE    target ID
  779.  09h    BYTE    logical unit number
  780.  0Ah    BYTE    disk drive flags (see #0682)
  781.  0Bh    BYTE    INT 13h drive number
  782.  0Ch    BYTE    preferred head number translation
  783.  0Dh    BYTE    preferred sector size translation
  784.  0Eh 10 BYTEs    reserved
  785. SeeAlso: #0683
  786.  
  787. (Table 0677)
  788. Values for ASPI request status:
  789.  00h    not done yet
  790.  01h    completed successfully
  791.  02h    aborted by host
  792.  04h    SCSI I/O error
  793.  80h    invalid
  794.  81h    no adapter
  795.  82h    no device attached
  796.  else    status
  797.  
  798. Bitfields for ASPI request flags:
  799. Bit(s)    Description    (Table 0678)
  800.  0    posting enabled
  801.  1    linking enabled
  802.  2    direction
  803.  3    transfer from SCSI target to host
  804.  4    transfer from host to SCSI target
  805. Note:    no data is transferred if both bits 3 and 4 are set
  806.  
  807. (Table 0679)
  808. Values for host adapter status:
  809.  00h    no error detected
  810.  11h    select timeout
  811.  12h    data overrun
  812.  13h    bus error
  813.  14h    bus failure
  814.  
  815. (Table 0680)
  816. Values for target status:
  817.  00h    no status
  818.  02h    sense data stored in SRB
  819.  08h    target busy
  820.  18h    reservation error
  821.  
  822. (Table 0681)
  823. Values for device type:
  824.  00h    disk drive
  825.  01h    tape drive (streamer)
  826.  02h    printer
  827.  03h    processor
  828.  04h    WORM drive
  829.  05h    CD-ROM drive
  830.  06h    scanner
  831.  07h    optical drive
  832.  08h    autochanger
  833.  09h    communications device
  834.  
  835. (Table 0682)
  836. Values for disk drive flags:
  837.  00h    no INT 13 access
  838.  01h    INT 13 with DOS access
  839.  02h    INT 13 without DOS access
  840.  03h    invalid flags
  841.  
  842. Format of CCB:
  843. Offset    Size    Description    (Table 0683)
  844.  00h    BYTE    command code (see #0684)
  845.  01h    BYTE    flags
  846.         bits 4-0: vary by function
  847.         bits 7-5: logical unit number
  848.  02h    BYTE    "adr_1"
  849.  03h    BYTE    "adr_0"
  850.  04h    BYTE    length
  851.  05h    BYTE    control
  852.     ...
  853.  06h/0Ah 14 BYTEs buffer for sense data (see #0685)
  854. SeeAlso: #0676
  855.  
  856. (Table 0684)
  857. Values for CCB command code:
  858.  00h    test unit ready
  859.  01h    rewind
  860.  03h    request sense data
  861.  05h    get block size limits
  862.  08h    Group 0 read
  863.  0Ah    Group 0 write
  864.  10h    write file marks
  865.  11h    SCSI Space (set position?)
  866.  12h    SCSI Inquire
  867.  15h    set mode information
  868.  16h    reserve SCSI device
  869.  17h    release SCSI device
  870.  19h    erase
  871.  1Ah    request mode information
  872.  1Bh    load/unload media
  873.  1Dh    request target self-check
  874.  24h    set window parameters
  875.  25h    get window parameters
  876.  28h    Group 1 read
  877.  2Ah    Group 1 write
  878.  31h    document feeder control
  879.  34h    get scan data status
  880. ---vendor-specific commands---
  881.  D3h    get document feeder status
  882.  D4h    set document feeder mode
  883.  
  884. Format of sense data:
  885. Offset    Size    Description    (Table 0685)
  886.  00h    BYTE    error code (bit 7 set if valid)
  887.  01h    BYTE    segment number
  888.  02h    BYTE    sense key
  889.         bit 6: EOM
  890.         bit 5: ILI
  891.         bits 0-3: sense key (see #0686)
  892.  03h  4 BYTEs    information bytes
  893.  07h    BYTE    additional sense length (0Ah)
  894.  08h  4 BYTEs    command-specific information
  895.  0Ch    BYTE    additional sense code
  896.  0Dh    BYTE    additional sense code qualifier
  897.  0Eh    BYTE    field replaceable unit code
  898.  0Fh  3 BYTEs    sense key specific bytes
  899.  
  900. (Table 0686)
  901. Values for sense key:
  902.  00h    no sense data
  903.  02h    SCSI unit not ready
  904.  03h    media error
  905.  04h    unrecoverable hardware error
  906.  05h    illegal parameter in CDB
  907.  06h    target has been reset
  908.  0Bh    target aborted command
  909. --------m-214402-----------------------------
  910. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  911.     AX = 4402h
  912.     BX = file handle for device "386MAX$$"
  913.     CX = number of bytes to read
  914.     DS:DX -> BYTE 03h followed by 386MAX state buffer (see #0687)
  915. Return: CF clear if successful
  916.         buffer at DS:DX+1 filled
  917.         AX = number of bytes actually copied
  918.     CF set on error
  919.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  920. Notes:    if the value given in CX is less than the size of the state record
  921.       (5Ah for v6.01, 66h for v7.00), only a partial state record will be
  922.       returned
  923.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  924.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  925.       56h bytes for v5.11.
  926.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  927.       the word at offset 25h in the returned state, load all other
  928.       registers as needed for the desired function, and execute an
  929.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  930.       if it is not otherwise modified by the API function.    For safety,
  931.       in case a function is not supported or 386MAX is not present, SP
  932.       should be saved and restored around the API call.
  933.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  934.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  935.       make some calls incorrectly
  936. SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
  937.  
  938. Format of 386MAX v6.01+ state:
  939. Offset    Size    Description    (Table 0687)
  940.  -1    BYTE    (call) 03h
  941.  00h  6 BYTEs    signature "386MAX"
  942.  06h  4 BYTEs    version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01)
  943.         (';' by default; apparently changed to a period when 386MAX
  944.         has linked high RAM into DOS's memory chain)
  945.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  946.  0Ch  2 BYTEs    ???
  947.  0Eh    WORD    segment of ??? memory block or 0000h
  948.  10h    WORD    bit flags 1 (see #0688)
  949.  12h    WORD    starting address of video memory in KB
  950.  14h  2 BYTEs    ???
  951.  16h    WORD    total high DOS memory in KB
  952.  18h  2 BYTEs    ???
  953.  1Ah    WORD    available shared memory in KB
  954.  1Ch    WORD    KBytes extended memory used by 386MAX
  955.  1Eh  2 BYTEs    ???
  956.  20h    WORD    total extended memory in KB
  957.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  958.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  959.           (see #0701)
  960.  26h    WORD    ??? (depends on DOS version)
  961.  28h    WORD    size of ??? in paragraphs
  962.  2Ah    DWORD    machine type (see #0696)
  963.  2Eh    DWORD    -> first DOS memory control block
  964.  32h    WORD    system configuration flags (see #0689)
  965.  34h    WORD    debugging flags 1 (see #0690)
  966.  36h    WORD    debugging flags 2 (see #0691)
  967.  38h  2 BYTEs    ???
  968.  3Ah    WORD    segment of first MCB in high memory chain
  969.  3Ch    WORD    feature flags 1 (see #0693)
  970.  3Eh    WORD    feature flags 2 (see #0694)
  971.  40h    WORD    feature flags 3 (see #0695)
  972.  42h    WORD    segment of first 386MAX control block??? (see #0697)
  973.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  974.  46h  4 BYTEs    ???
  975.  4Ah    WORD    number of K at start of address space swapped with fast
  976.           extended memory (SWAP= parameter)
  977.  4Ch  2 BYTEs    ???
  978.  4Eh    WORD    segment address of ???
  979.  50h    WORD    debugging flags 3 (see #0692)
  980.  52h    DWORD    old INT 21h
  981.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  982. ---386MAX v7.00---
  983.  5Ah    DWORD    KB of extended memory managed by 386MAX
  984.  5Eh    DWORD    bytes of extended memory (EXT= parameter)
  985.  62h  4 BYTEs    ???
  986.  
  987. Bitfields for 386MAX bit flags 1:
  988. Bit(s)    Description    (Table 0688)
  989.  1    ???
  990.  2    allow A20 to be enabled/disabled???
  991.  3    ??? (cleared by calling INT 67 functions or starting MSWindows)
  992.  4    high RAM present???
  993.  5    386MAX in AUTO mode
  994.  6    386MAX enabled
  995.  7    386MAX is providing EMS services
  996.  8    ??? (affects API function 08h)
  997.  9    A20 gate closed (A20 disabled) (see INT 15/AX=2402h)
  998.  10    Weitek support enabled
  999.  11    ???
  1000.  12    ROMs not shadowed???
  1001.  13    QPMS has been used
  1002.  14    ???
  1003.  15    ???
  1004.  
  1005. Bitfields for 386MAX system configuration flags:
  1006. Bit(s)    Description    (Table 0689)
  1007.  1    ROM compressed???
  1008.  3    ???
  1009.  5    386MAX loaded into high memory
  1010.  6    Microchannel bus
  1011.  7    Weitek math coprocessor detected
  1012.  9    ??? (also generates INT 01 on ??? and INT 03 on ???)
  1013.  11    PC/XT (thus only single 8259 interrupt controller present, DMA only
  1014.         in 1st megabyte, etc)
  1015.  13    LMLTOP= specified
  1016.  14    enable A20 control???
  1017.  15    ???
  1018.  
  1019. Bitfields for 386MAX debugging flags 1:
  1020. Bit(s)    Description    (Table 0690)
  1021.  0    DEBUG=LED
  1022.  1    DEBUG=X67
  1023.  2    DEBUG=INV
  1024.  3    DEBUG=EMSPTED
  1025.  4    DEBUG=JMP
  1026.  5    DEBUG=CALL
  1027.  6    DEBUG=HLT
  1028.  7    DEBUG=PMR
  1029.  8    DEBUG=CR3
  1030.  9    DEBUG=CAPS or DEBUG=INT
  1031.  10    DEBUG=RC
  1032.  11    DEBUG=ROM
  1033.  12    DEBUG=XM
  1034.  13    DEBUG=SOR
  1035.  14    DEBUG=XR
  1036.  15    DEBUG=EMSERR (generate INT 01 on returning error from EMS call)
  1037.  
  1038. Bitfields for 386MAX debugging flags 2:
  1039. Bit(s)    Description    (Table 0691)
  1040.  0    DEBUG=ROMSWAP
  1041.  1    DEBUG=UNSHADOWROM
  1042.  2    DEBUG=COMPROM
  1043.  3    DEBUG=DPMIPHYS
  1044.  4    DEBUG=ALLROM
  1045.  5    DEBUG=VMS
  1046.  6    DEBUG=XMS (generate INT 01 on XMS calls)
  1047.  7    DEBUG=I06
  1048.  8    DEBUG=VCPI
  1049.  9    DEBUG=XDMA
  1050.  10    DEBUG=X09
  1051.  13    DEBUG=I67 (generate INT 01 on every INT 67 call)
  1052.  14    DEBUG=EVM (generate INT 01 on entering V86 mode)
  1053.  15    DEBUG=EMSSAVE or DEBUG=VDS
  1054.  
  1055. Bitfields for 386MAX debugging flags 3:
  1056. Bit(s)    Description    (Table 0692)
  1057.  10    DEBUG=EPM
  1058.  12    DEBUG=ABIOS
  1059.  13    DEBUG=XMSPTED
  1060.  14    DEBUG=TIME
  1061.  15    DEBUG=SCRUB
  1062.  
  1063. Bitfields for 386MAX feature flags 1:
  1064. Bit(s)    Description    (Table 0693)
  1065.  1    Weitek present
  1066.  2    no DPMI services
  1067.  3    NODMA
  1068.  4    TERSE
  1069.  5    NOROM
  1070.  6    NOPARITY
  1071.  8    NOFLEX (IGNOREFLEXFRAME)
  1072.  11    don't create UMBs
  1073.  12    don't backfill below video memory (NOLOW)
  1074.  13    FRAME= specified
  1075.  14    EXT= specified
  1076.  15    NOEMS, allow prior expanded memory manager to provide EMS
  1077.  
  1078. Bitfields for 386MAX feature flags 2:
  1079. Bit(s)    Description    (Table 0694)
  1080.  0    UNSHIFT specified (FORCEA20 disabled)
  1081.  1    NOXRAM
  1082.  2    NOSCSI specified
  1083.  3    SCREEN specified
  1084.  4    enabled EISADMA
  1085.  5    slow DMA
  1086.  6    RESETKEYB specified
  1087.  7    ???
  1088.  9    TOP384
  1089.  10    ???
  1090.  11    NOWARMBOOT
  1091.  12    USE= specified
  1092.  13    ROM= specified
  1093.  
  1094. Bitfields for 386MAX feature flags 3:
  1095. Bit(s)    Description    (Table 0695)
  1096.  0    Windows3 support enabled
  1097.  1    SHADOWROM
  1098.  2    don't compress ROM (NOCOMPROM)
  1099.  3    ??? (related to PRGREG=)
  1100.  4    ??? (related to PRGREG=)
  1101.  5    SHADOWRAM
  1102.  6    DOS4 specified
  1103.  7    NOLOADHIGH
  1104.  8    NOPULSE
  1105.  11    FORCEA20
  1106.  12    DMA buffer enabled
  1107.  13    NOSCRUB
  1108.  15    NOFRAME
  1109.  
  1110. Bitfields for 386MAX machine type:
  1111. Bit(s)    Description    (Table 0696)
  1112.  12    Amstrad
  1113.  13    Epson
  1114.  14    Zenith Data Systems
  1115.  15    "ASEM"
  1116.  16    NEC
  1117.  17    "HPRS" model codes 69h and 6Ah
  1118.  18    Dell
  1119.  19    "CA"
  1120.  20    ITT (Xtra Business Systems/Alcatel)
  1121.  21    Toshiba 5100
  1122.  22    Olivetti
  1123.  23    Quadram Quad386 (BIOS model FEh, submodel A6h)
  1124.  24    Tandy???
  1125.  25    AST 386
  1126.  26    INBOARD, ??? version
  1127.  27    INBOARD, ??? version
  1128.  28    INBOARD, ??? version
  1129.  29    "HPRS"
  1130.  30    Compaq 386
  1131.  31    JET386
  1132.  
  1133. Format of 386MAX control block:
  1134. Offset    Size    Description    (Table 0697)
  1135.  00h    WORD    segment of next block (FFFFh if last)
  1136.  02h    WORD    segment of previous block (FFFFh if first)
  1137.  04h 12 BYTEs    filename
  1138.  10h    WORD    resident size in paragraphs
  1139.  12h    WORD    environment size???
  1140.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  1141.  16h  2 BYTEs    ???
  1142.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  1143.  1Ch    DWORD    SIZE=-1 ???
  1144.  20h    DWORD    SIZE= ???
  1145.  24h    BYTE    PRGREG= if specified, else FFh
  1146.  25h    BYTE    ENVREG= if specified, else FFh
  1147.  26h    BYTE    FlexFrame (00h not present, 01h present)
  1148.  27h  3 BYTEs    ???
  1149.  2Ah    BYTE    GROUP= or 00h if not present
  1150.  2Bh    BYTE    ???
  1151.  2Ch    WORD    PSP
  1152.  
  1153. Format of 386MAX high memory info record:
  1154. Offset    Size    Description    (Table 0698)
  1155.  00h    WORD    segment address of memory region
  1156.  02h    WORD    size of memory region in paragraphs
  1157.  04h    BYTE    type or flags???
  1158.         00h if locked out
  1159.         02h if EMS page frame
  1160.         04h if high RAM
  1161.         42h if ROM
  1162.  05h    BYTE    ???
  1163.  
  1164. Format of 386MAX ROM shadowing record:
  1165. Offset    Size    Description    (Table 0699)
  1166.  00h    WORD    logical start segment of ROM??? (may be used by BlueMAX when it
  1167.           squeezes together the ROMs to make room)
  1168.  02h    WORD    physical start segment of ROM
  1169.  04h  2 BYTEs    ???
  1170.  06h    WORD    size of shadowed ROM in paragraphs
  1171.  08h  2 BYTEs    ???
  1172.  0Ah    WORD    flags
  1173.         bit 15: shadowing enabled for this ROM???
  1174.         bit 14: ???
  1175.         bit 13: ???
  1176.         bit 12: ???
  1177.         bit 10: ???
  1178.  
  1179. (Table 0700)
  1180. Values for 386MAX memory type:
  1181.  00h    unused by EMS
  1182.  01h    DOS
  1183.  04h    page frame overlapping ROM???
  1184.  80h    high memory
  1185.  84h    page frame???
  1186.  87h    video ROM???
  1187. Note:    the type may be 00h (unused) if the 16K page is split among different
  1188.       uses (such as ROM and high RAM)
  1189.  
  1190. (Table 0701)
  1191. Call 386MAX API (via OUT DX,AL) with:
  1192.     STACK: WORD value for DX
  1193.     AH = 00h unused
  1194.         Return: AH = 84h (unsupported function)
  1195.     AH = 01h get high memory information
  1196.         ES:DI -> buffer for array of high memory info records
  1197.             (see #0698)
  1198.         Return: CX = number of records placed in buffer
  1199.     AH = 02h get shadowed ROM info
  1200.         ES:DI -> buffer for array of ROM shadowing records (see #0699)
  1201.         Return: CX = number of records placed in buffer
  1202.     AH = 03h get 386MAX state
  1203.         ES:DI -> 90-byte buffer for state (see #0687)
  1204.         Return: AH = 00h (successful)
  1205.             buffer filled
  1206.     AH = 04h get memory types???
  1207.         ES:DI -> buffer for memory type info (array of bytes, one per
  1208.             16K page) (see #0700)
  1209.         Return:    CX = number of bytes placed in buffer
  1210.     AH = 05h get page table entries
  1211.         AL = A20 control (00h enable A20 first, 01h leave unchanged)
  1212.         CX = buffer size in bytes (0000h = enough for all memory from
  1213.             given start to end of memory managed by 386MAX)
  1214.         SI = first K to report (rounded down to 4K page)
  1215.         ES:DI -> buffer for returned page table entries
  1216.         Return: CX = number of bytes returned (four per 4K page)
  1217.             ES:DI buffer filled
  1218.     AH = 06h get memory speed info
  1219.         ES:DI -> buffer for memory speed records (see #0702)
  1220.         Return: AH = 00h (successful)
  1221.             CX = number of bytes placed in buffer
  1222.         Note:    this function can take over a second to execute
  1223.     AH = 07h map/unmap multiple handle pages
  1224.         DX = EMS handle (on stack)
  1225.         STACK: DWORD -> EMS mapping record
  1226.         Return:    AH = status (00h,80h,83h,8Ah,8Bh)
  1227.         Format of EMS mapping record:
  1228.         Offset    Size    Description
  1229.          00h    WORD    function
  1230.                 0000h use physical page numbers
  1231.                 0001h use segment addresses
  1232.          02h    WORD    EMS handle
  1233.          04h    WORD    number of mapping entries following
  1234.          06h 2N WORDs    logical page number and physical page/segment
  1235.                 logical page FFFFh means unmap physical page
  1236.         SeeAlso: INT 67/AH=50h
  1237.     AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
  1238.         AL = ??? (00h or nonzero)
  1239.         Return: AH = status (00h OK, A4h not possible at this time)
  1240.         Note:    if AL=00h, this function always returns success
  1241.     AH = 09h toggle Bit Flags 1 flags
  1242.         BX = bitmask of bit flags 1's flags to toggle (see #0688)
  1243.         Return: AH = 00h (successful)
  1244.         Note:    enables A20 first
  1245.     AH = 0Ah toggle Debugging Flags 1 flags
  1246.         BX = bitmask of Debugging Flags 1's bits to toggle (see #0690)
  1247.         Return: AH = 00h (successful)
  1248.         Notes:    enables A20 first
  1249.             does ??? if bit 3 on after specified bits are toggled
  1250.     AH = 0Bh toggle Debugging Flags 2 flags
  1251.         BX = bitmask of Debugging Flags 2's bits to toggle (see #0691)
  1252.         Return: AH = 00h (successful)
  1253.         Note:    enables A20 first
  1254.     AH = 0Ch toggle feature flags 3
  1255.         BX = bitmask of feature flags 3's bits to toggle (see #0695)
  1256.         Return: AH = 00h (successful)
  1257.         Note:    enables A20 first
  1258.     AH = 0Dh specify 386MAX high-memory location
  1259.         BX = segment address of high-memory real-mode portion of 386MAX
  1260.         CX = current segment of real-mode stub???
  1261.         Return: AH = status (00h successful)
  1262.             ???
  1263.     AH = 0Eh CRT controller register virtualization
  1264.         AL = subfunction
  1265.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  1266.             01h trap accesses to CRTC I/O ports
  1267.     AH = 0Fh reboot system
  1268.         Return: never
  1269.     AH = 10h unused
  1270.         Return: AH = 84h (unsupported function)
  1271.     AH = 11h get high memory information
  1272.         ES:DI -> 96-byte buffer for high memory info
  1273.         Return: AH = 00h (successful)
  1274.             ES:DI buffer filled
  1275.         Notes:    each byte in buffer contains bit flags for a 4K page in
  1276.               the A000h-FFFFh region
  1277.                 bit 0: page is writeable
  1278.                 bit 1: physical address same as linear address
  1279.                 bit 2: EMS page frame
  1280.                 bit 6: page is part of the QPMS window
  1281.             this function can take over a second to execute,
  1282.               because it does a 128K read for each page in an
  1283.               attempt to flush any RAM cache the system may have
  1284.     AH = 12h shadow RAM mapping
  1285.         AL = subfunction
  1286.             00h unshadow ROMs (except page FFh if NOWARMBOOT set)
  1287.             01h map shadow RAM into ROM regions???
  1288.         Return: AH = 00h (successful) if AL=00h or 01h
  1289.             AH = 8Fh otherwise
  1290.     AH = 13h shadow RAM page protection
  1291.         AL = subfunction
  1292.             00h set all shadowed ROM 4K pages to read-only
  1293.             01h set all shadowed ROM 4K pages to read-write
  1294.         Return: AH = 00h (successful) if AL=00h or 01h
  1295.             AH = 8Fh otherwise
  1296.     AH = 14h get Programmable Option Select info???
  1297.         ES:DI -> 54-byte buffer for POS data???
  1298.         Return: AH = 00h if successful
  1299.             AH = A4h on error
  1300.         Note:    the buffer consists of nine 6-byte fields; the first
  1301.               eight for slots 1-8, the last for the system board
  1302.     AH = 15h ???
  1303.         ???
  1304.         Return: ???
  1305.     AH = 16h get 386MAX memory usage screen
  1306.         ES:DI -> buffer for memory info display
  1307.         CX = size of buffer in bytes
  1308.         Return:    ES:DI buffer filled with '$'-terminated string (if
  1309.                 large enough to hold entire usage screen)
  1310.         Note:    the screen is 0303h bytes in v7.00
  1311.     AH = 17h Windows 3 startup/termination
  1312.         AL = subfunction
  1313.             00h Windows3 initializing
  1314.             DX (on stack) = Windows startup flags
  1315.             DI = Windows version number (major in upper byte)
  1316.             ES:BX = 0000h:0000h
  1317.             DS:SI = 0000h:0000h
  1318.             Return: CX = 0000h if OK for Windows to load
  1319.                    <> 0 if Windows should not load
  1320.                 ES:BX -> startup info structure
  1321.                 DS:SI -> Virtual86 mode enable/disable callback
  1322.             01h Windows3 terminating
  1323.             ES:BX -> ???
  1324.             DX (on stack) = Windows exit flags
  1325.             Return: ???
  1326.     AH = 18h QPMS (Qualitas Protected Memory Services)
  1327.         AL = subfunction
  1328.             00h get QPMS configuration
  1329.             Return: BX = starting segment of QPMS memory window
  1330.                 CX = number of 4K pages reserved for QPMS???
  1331.                 DX = number of 4K pages in QPMS window???
  1332.             01h map QPMS memory page???
  1333.             BX = 4K page number within memory reserved for QPMS???
  1334.             CL = 4K page number within QPMS memory window???
  1335.             02h mark all QPMS memory read-only
  1336.             03h mark all QPMS memory read-write
  1337.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  1338.     AH = 19h get linear address for physical address
  1339.         EDX = physical address (low word on stack)
  1340.         Return: AH = status
  1341.                 00h successful
  1342.                 EDX = linear address at which physical address
  1343.                     may be accessed
  1344.                 8Bh physical address currently not addressable
  1345.         Note:    enables A20 first
  1346.     AH = 1Ah set page table entry
  1347.         EDX = new page table entry (low word on stack)
  1348.         ESI = linear address of page to map (bits 0-11 clear)
  1349.         Return: AH = status (00h,8Bh)
  1350.         Note:    enables A20 first
  1351.     AH = 1Bh get ???
  1352.         Return: AH = status
  1353.             BX = ???
  1354.             CX = number of ???
  1355.             EDX = physical address of ???
  1356.     AH = 1Ch get original interrupt vector
  1357.         AL = interrupt vector (00h-7Fh)
  1358.         Return: AH = 00h (successful)
  1359.             EDX = original vector before 386MAX loaded (segment in
  1360.                 high word, offset in low word)
  1361.         Note:    no range checking is performed; requests for INTs 80h-
  1362.               FFh will return random values
  1363.     AH = 1Dh display string???
  1364.         SI = ???
  1365.         Return: AH = 00h (successful)
  1366.             ???
  1367.         Note:    this function appears to be broken in v7.00
  1368.     AH = 1Eh get memory info
  1369.         ES:DI -> memory info (see #0703)
  1370.         Return: ???
  1371.     AH = 1Fh get DPMI host information
  1372.         Return: AX = 0000h if successful
  1373.             BX = DPMI flags (see #1819 at INT 31/AX=0400h)
  1374.             CL = CPU type (02h = 80286, 03h = 80386, etc.)
  1375.             DX = DPMI ver supported (DH=major, DL=2-digit minor)
  1376.             SI = ???
  1377.             ES???:DI -> ???
  1378.         Note:    NOP if NODPMI switch specified
  1379.     AH = 20h (v7.00) get ???
  1380.         AL = index of ???
  1381.         Return: EDX = ??? for specified ???
  1382.     AH = 21h (v7.00) STACKS support
  1383.         AL = 00h get STACKS parameters
  1384.         Return: BX = ??? (0060h for v7.00)
  1385.             CX = number of stacks for hardware interrupts
  1386.             DX = size of each stack in bytes
  1387.             SI = ??? (low and high bytes are separate values)
  1388.             DI = ??? (low and high bytes are separate values)
  1389.                 low byte = logical page number set by subfn 02h
  1390.             ES = ???
  1391.         AL = 01h set ??? "EMM2_DSTKS"
  1392.         EBX = ???
  1393.         ECX = ???
  1394.         AL = 02h set ???
  1395.         BL = logical page number for ??? (00h-03h)
  1396.         Return: AH = status (00h,8Ah)
  1397.     AH = 22h (v7.00) call ??? for every load module
  1398.         AL = which function to call
  1399.         00h call ???
  1400.         else call ????
  1401.         Return: AH = 00h
  1402.         Note: if AL=00h, calls the protected-mode function pointed at by
  1403.         the DWORD at offset 22h from the start of each module installed
  1404.         by a LOAD= directive; if AL<>00h, it calls the function
  1405.         pointed at by the DWORD at offset 28h of the load module
  1406.     AH = 23h (v7.00) ???
  1407.         AL = 00h set ???
  1408.         BL = ???
  1409.         Return:    AH = 00h or unchanged (depending on ???)
  1410.         AL = 01h set ???
  1411.         BL = ???
  1412.         BH = ???
  1413.         CX = ???
  1414.         DX = ??? (on top of stack)
  1415.         Return: AH = status (00h if successful, 8Fh once table full)
  1416.         Note:    this call adds one entry to an internal table on each
  1417.               call, until the table is full
  1418.         AL = 02h get ???
  1419.         CX = size of buffer
  1420.         ES:DI -> buffer for ??? (60 bytes total data)
  1421.         Return: CX = number of bytes actually returned
  1422.         Note:    returns the array storing the values set with AX=2301h
  1423.         Format of one entry in array:
  1424.         Offset    Size    Description
  1425.          00h    BYTE    ??? (BL from subfn 01h)
  1426.          01h    WORD    ??? (CX from subfn 01h)
  1427.          03h    BYTE    ??? (BH from subfn 01h)
  1428.          04h    WORD    ??? (DX from subfn 01h)
  1429.         AL = 03h set ??? name/path
  1430.         ES:DI -> buffer containing ASCIZ ???
  1431.         AL = 04h get ???
  1432.         ES:DI -> buffer for ASCIZ ???
  1433.         Note: the ASCIZ string for subfunctions 03h and 04h does not appear
  1434.         to be used by 386MAX, and may serve merely for communication
  1435.         between two other Qualitas programs
  1436.     AH = 24h (v7.00) high memory control
  1437.         AL = 00h get high memory state
  1438.         Return: BX = current state
  1439.                 00h high memory removed from DOS memory chain
  1440.                 01h high memory included in DOS memory chain
  1441.         AL = 01h set high memory state
  1442.         BX = new state
  1443.             00h high memory removed from DOS memory chain
  1444.             01h high memory included in DOS memory chain
  1445.             else
  1446.             Return: ??? (error, but return varies according to ???)
  1447.     AH = 25h (v7.00) remove high RAM from DOS memory chain
  1448.     AH = 26h (v7.00) ???
  1449.         BX = ???
  1450.         CX = ???
  1451.         SI = ???
  1452.         DI = ???
  1453.         Return: AH = status
  1454.             BX = ???
  1455.             CX = ???
  1456.     AH = 27h (v7.00) ???
  1457.         AL = 00h get ???
  1458.         Return: BX = number of paragraphs for ???
  1459.         AL = 01h ???
  1460.         BX = ???
  1461.         ES??? = ???
  1462.         AL = 02h ???
  1463.         ???
  1464.         AL = 03h ???
  1465.         CX = ???
  1466.         DX = ???
  1467.         ES??? = ???
  1468.         Return: ???
  1469.     AH = 28h (v7.00) get ???
  1470.         Return: AH = status (00h,8Fh) (see #2253 at INT 67/AH=40h)
  1471.             if AH=00h,
  1472.                 CX = ???
  1473.                 DX = ???
  1474.     AH = 29h (v7.00) get ???
  1475.         Return: AX = ???
  1476.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  1477.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  1478. Return: AH = status (as for EMS INT 67 calls)
  1479.         00h successful
  1480.         80h internal error
  1481.         81h hardware malfunction
  1482.         83h invalid handle
  1483.         84h    undefined function
  1484.         8Ah invalid logical page nuber
  1485.         8Bh illegal physical page number
  1486.         8Fh undefined subfunction
  1487.         A4h access denied
  1488.         etc.
  1489.     STACK popped (value placed in DX if no specific return value for DX)
  1490.  
  1491. Format of 386MAX memory speed record:
  1492. Offset    Size    Description    (Table 0702)
  1493.  00h    DWORD    page table entry for 4K page
  1494.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  1495.           entire 4K page
  1496.  
  1497. Format of 386MAX memory info [array]:
  1498. Offset    Size    Description    (Table 0703)
  1499.  00h    DWORD    linear start address
  1500.  04h    DWORD    size in bytes
  1501.  08h    WORD    XMS handle (if next byte = 04h)
  1502.         ??? (if next byte = 05h)
  1503.         ??? (if next byte = 06h)
  1504.         ??? (if next byte = 13h)
  1505.         ??? (if next byte = 14h)
  1506.         ??? (if next byte = 15h)
  1507.         ??? (if next byte = 23h)
  1508.         ??? (if next byte = 24h)
  1509.         ??? (if next byte = 26h)
  1510.         else unused
  1511.  0Ah    BYTE    type
  1512.         00h = ???, 01h = VDISK,
  1513.         02h = INT 15h extended memory, 03h = ??? extended,
  1514.         04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???,
  1515.         08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???,
  1516.         11h = ???, 12h = ???, 14h = ???, 15h = ???,
  1517.         19h = ???, 1Ah = ???, 1Bh = ???,
  1518.         1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???,
  1519.         20h = ???, 21h = ???, 23h = ???, 24h = ???,
  1520.         26h = ???
  1521.  0Bh    BYTE    ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h;
  1522.              80h for types 04h/13h-15h/23h-26h;
  1523.             ??? for type 05h)
  1524. --------V-214402-----------------------------
  1525. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  1526.     AX = 4402h
  1527.     BX = file handle for device "PGS1600$"
  1528.     CX = 0018h (size of buffer)
  1529.     DS:DX -> configuration buffer (see #0704)
  1530. Return: CF clear if successful
  1531.         buffer filled
  1532.         AX = number of bytes actually copied
  1533.     CF set on error
  1534.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1535. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  1536.       display adapter, which provides a 1600x1200 monochrome display as
  1537.       well as one of two emulations, MDA or CGA.
  1538. SeeAlso: AX=4403h"PGS1600"
  1539.  
  1540. Format of PGS1600.DEV configuration information:
  1541. Offset    Size    Description    (Table 0704)
  1542.  00h    WORD    version (high byte = major, low byte = minor)
  1543.  02h    WORD    board initialisation mode
  1544.  04h    WORD    board I/O address
  1545.         03D0h CGA emulation
  1546.         03B0h MDA emulation
  1547.         0390h no emulation
  1548.         0350h no emulation, alternate
  1549.  06h    WORD    emulation buffer segment
  1550.         B800h    CGA emulation
  1551.         B000h    MDA emulation
  1552.         0000h    no emulation
  1553.  08h    WORD    PG1600 graphics buffer segment
  1554.  0Ah    WORD    number of bytes between consecutive graphic rows
  1555.  0Ch    WORD    horizontal pixel size
  1556.  0Eh    WORD    vertical pixel size
  1557.  10h    WORD    horizontal dots per inch
  1558.  12h    WORD    vertical dots per inch
  1559.  14h    WORD    graphics buffer bits per pixel
  1560.  16h    WORD    monitor bits per pixel
  1561. --------N-214402-----------------------------
  1562. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  1563.     AX = 4402h
  1564.     BX = file handle referencing device "$IPCUST"
  1565.     CX, DS:DX ignored
  1566. Return: CF clear if successful
  1567.         AX destroyed
  1568.     CF set on error
  1569.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1570. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  1571.       version 2.05.     If less than the entire data is read or written,
  1572.       the next read/write continues where the previous one ended; this
  1573.       call and AX=4403h both reset the location at which the next
  1574.       operation starts to zero
  1575.     v2.1+ uses a new configuration method, but allows the installation
  1576.       of IPCUST.SYS for backward compatibility with other software which
  1577.       must read the PC/TCP configuration
  1578. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  1579. --------N-214402-----------------------------
  1580. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  1581.     AX = 4402h
  1582.     BX = file handle for device "NET$HLP$"
  1583.     CX = 0008h
  1584.     DS:DX -> buffer for entry point record (see #0705)
  1585. Return: CF clear if successful
  1586.         AX = number of bytes actually read
  1587.     CF set on error
  1588.         AX = error code
  1589. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  1590.       permits communication with PCs running Windows for Workgroups or
  1591.       LAN Manager
  1592. SeeAlso: AH=3Fh"WORKGRP.SYS"
  1593.  
  1594. Format of WORKGRP.SYS entry point record:
  1595. Offset    Size    Description    (Table 0705)
  1596.  00h    WORD    3633h  \ signature???
  1597.  02h    WORD    EF6Fh  /
  1598.  04h    DWORD    address of entry point (see #0706)
  1599. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  1600.       IOCTL rather than READ to get the entry point record
  1601.  
  1602. (Table 0706)
  1603. Call WORKGRP entry point with:
  1604.     STACK:    WORD    function number (0000h-0009h)
  1605. Return: STACK unchanged
  1606. SeeAlso: #0707,#0708,#0709,#0710,#0711,#0712,#0713,#0714
  1607.  
  1608. (Table 0707)
  1609. Call WORKGRP function 00h with:
  1610.     STACK:    WORD    0000h (function "get ???")
  1611. Return: DX:AX -> data table
  1612.  
  1613. (Table 0708)
  1614. Call WORKGRP function 01h with:
  1615.     STACK:    WORD    0001h (function "hook ???")
  1616. Return: STACK:    DWORD    pointer to ???
  1617.         WORD    0001h (function number)
  1618.  
  1619. (Table 0709)
  1620. Call WORKGRP function 02h with:
  1621.     STACK:    WORD    0002h (function "unhook ???")
  1622.     ???
  1623. Return: ???
  1624.  
  1625. (Table 0710)
  1626. Call WORKGRP function 03h with:
  1627.     STACK:    WORD    0003h (function "reenable printer port")
  1628.         WORD    LPT port number
  1629. Return: ???
  1630.  
  1631. (Table 0711)
  1632. Call WORKGRP function 04h with:
  1633.     STACK:    WORD    0004h (function "disable printer port")
  1634.         WORD    LPT port number
  1635. Return: ???
  1636.  
  1637. (Table 0712)
  1638. Call WORKGRP function 05h with:
  1639.     STACK:    WORD    0005h (function "???")
  1640.         ???
  1641. Return: ???
  1642.  
  1643. (Table 0713)
  1644. Call WORKGRP function 06h with:
  1645.     STACK:    WORD    0006h (function "???")
  1646. Return: STACK unchanged
  1647.     AX = 0000h
  1648.     DX = 0000h
  1649.  
  1650. (Table 0714)
  1651. Call WORKGRP functions 07h-09h with:
  1652.     STACK:    WORD    0007h-0009h (NOP functions)
  1653. Return: STACK unchanged
  1654.     AX = 0001h
  1655.     DX = 0000h
  1656. --------N-214402-----------------------------
  1657. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  1658.     AX = 4402h
  1659.     BX = file handle referencing device "10BEUI$"
  1660.     DS:DX -> parameter record (see #0715)
  1661.     CX ignored
  1662. Return: CF clear if successful
  1663.         AX destroyed
  1664.     CF set on error
  1665.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1666. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  1667.  
  1668. Format of 10NET 10BEUI.DOS parameter record:
  1669. Offset    Size    Description    (Table 0715)
  1670.  00h    WORD    000Ah (function number???)
  1671.  02h    WORD    ???
  1672.  04h    DWORD    pointer to buffer for ???
  1673.  08h  4 BYTEs    ???
  1674.  0Ch    WORD    transfer size
  1675. --------N-214402-----------------------------
  1676. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  1677.     AX = 4402h
  1678.     BX = file handle referencing device "MEMMGR0$"
  1679.     DS:DX -> 6-byte buffer for interface info (see #0716)
  1680.     CX ignored
  1681. Return: CF clear if successful
  1682.         AX destroyed
  1683.     CF set on error
  1684.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1685. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  1686.  
  1687. Format of 10NET 10MEMMGR.SYS interface info:
  1688. Offset    Size    Description    (Table 0716)
  1689.  00h    DWORD    address of entry point (see #0717)
  1690.  04h    WORD    version (0500h for v5.00)
  1691.  
  1692. (Table 0717)
  1693. Call 10NET 10MEMMGR.SYS entry point with:
  1694.     AL = 01h ???
  1695.         BX = ???
  1696.         Return: CF clear if successful
  1697.             CF set on error
  1698.             AX = error code
  1699.     AL = 02h ???
  1700.         ???
  1701.     AL = 03h ???
  1702.         ???
  1703.     AL = 04h set/restore memory allocation strategy
  1704.         BX = subfunction
  1705.         0000h set strategy
  1706.         0001h restore strategy
  1707.         Return: CF clear if successful
  1708.             CF set on error (if function disabled)
  1709.             various registers destroyed
  1710.     AL = other
  1711.         Return: CF set
  1712.             AX = 0000h
  1713.             BL = 01h
  1714. --------V-214402-----------------------------
  1715. INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
  1716.     AX = 4402h
  1717.     BX = file handle for device "$$$$RGDI"
  1718.     CX = 0006h (size of returned data)
  1719.     DS:DX -> location record (see #0718)
  1720. Return: CF clear if successful
  1721.         buffer filled
  1722.     CF set on error
  1723.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1724. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  1725. SeeAlso: AX=4403h"RGDI"
  1726.  
  1727. Format of Compaq AG1024.SYS location record:
  1728. Offset    Size    Description    (Table 0718)
  1729.  00h    WORD    signature 55AAh
  1730.  02h    WORD    segment of ???
  1731.  04h    WORD    segment of device driver's code
  1732. --------N-214402-----------------------------
  1733. INT 21 - FTPSOFT.DOS v3.1 - GET ???
  1734.     AX = 4402h
  1735.     BX = file handle for device "FTPSOFT$"
  1736.     CX = size of buffer
  1737.     DS:DX -> buffer for data (see #0719)
  1738. Return: CF clear if successful
  1739.         buffer filled
  1740.     CF set on error
  1741.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1742. Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
  1743.        FTP Software, Inc.
  1744. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
  1745.  
  1746. Format of FTPSOFT.DOS data:
  1747. Offset    Size    Description    (Table 0719)
  1748.  00h    WORD    (call) BA98h (if different, no data returned)
  1749.  02h    DWORD    -> NDIS common characteristics table
  1750.           (see #0658 at AX=4402h"NDIS")
  1751.  06h    DWORD    (call) -> new dispatch table (see #0660 at AX=4402h"NDIS")
  1752.  0Ah    DWORD    -> 28-byte buffer for ??? data
  1753.  0Eh    DWORD    ???
  1754.  12h    DWORD    -> FAR function to reset dispatch jump table to defaults
  1755.  16h    BYTE    ???
  1756. Note:    the addresses in the new dispatch table are copied into an internal
  1757.       jump table which may be reset by calling the function pointed at by
  1758.       offset 12h
  1759. --------n-214402-----------------------------
  1760. INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
  1761.     AX = 4402h
  1762.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  1763.     CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
  1764.     DS:DX -> buffer for entry point record (see #0720)
  1765. Return: CF clear if successful
  1766.         buffer filled
  1767.     CF set on error
  1768.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1769. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  1770.       which provides pen capability to keyboard-based programs, is bundled
  1771.       with IBM DOS 6.1
  1772. SeeAlso: AX=4403h"PENDEV.SYS"
  1773.  
  1774. Format of PENDEV.SYS entry point record:
  1775. Offset    Size    Description    (Table 0720)
  1776.  00h    DWORD    -> array of jumps
  1777.  04h    WORD    offset of function to retrieve entry point (see #0721)
  1778.  06h  2 BYTEs    signature "Pe"
  1779.  08h    WORD    offset of function to set entry point (see #0722)
  1780.  0Ah  2 BYTEs    signature "nD"
  1781.  0Ch    WORD    offset of function to clear entry point (see #0723)
  1782.  0Eh    WORD    signature "OS"
  1783.  
  1784. (Table 0721)
  1785. Call PENDEV.SYS function to retrieve entry point with:
  1786.     AX = index of entry point (0-9)
  1787. Return: CF clear if successful
  1788.         DX:AX -> desired entry point
  1789.     CF set on error (AX out of range)
  1790.  
  1791. (Table 0722)
  1792. Call PENDEV.SYS function to set entry point with:
  1793.     AX = index of entry point (0-9)
  1794.     DX:SI -> new handler
  1795. Return: CF clear if successful
  1796.     CF set on error (AX out of range)
  1797.  
  1798. (Table 0723)
  1799. Call PENDEV.SYS function to clear entry point with:
  1800.     AX = index of entry point (0-9)
  1801. Return: CF clear if successful
  1802.     CF set on error (AX out of range)
  1803. Note:    resets the jump at the specified entry point to its default target,
  1804.       which simply returns
  1805. --------N-214402-----------------------------
  1806. INT 21 U - LAN Manager - TCPDRV.DOS - API
  1807.     AX = 4402h
  1808.     BX = file handle referencing device "TCPDRV$"
  1809.     CX = 0019h
  1810.     DS:DX -> buffer containing request block (see #0724)
  1811. Return: CF clear if successful
  1812.         buffer filled
  1813.     CF set on error
  1814.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1815. Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
  1816.       TCP/IP protocol stack
  1817.  
  1818. Format of TCPDRV.DOS request block:
  1819. Offset    Size    Description    (Table 0724)
  1820.  00h    BYTE    (call) function number
  1821.         00h initialize ???
  1822.         06h get ???
  1823.         07h get ???
  1824.  01h    BYTE    (call) 00h
  1825.         (ret) error code if error, unchanged if successful
  1826.  02h    WORD    signature 4354h ('CT')
  1827. ---function 00h---
  1828.  04h    DWORD    (call) pointer to ??? FAR function
  1829.         function is called with ES:BX -> device driver request used to
  1830.           invoke this function
  1831.  08h  4 BYTEs    ???
  1832.  0Ch    DWORD    (call) pointer to ??? record, WORD at offset 22h is read
  1833.  10h    DWORD    (ret) -> ??? buffer if 0000h:0000h on call
  1834. ---function 06h---
  1835.  04h  4 BYTEs    ???
  1836.  08h    DWORD    (ret) pointer to ???
  1837. ---function 07h---
  1838.  04h    DWORD    (ret) pointer to ??? record
  1839. --------y-214402-----------------------------
  1840. INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
  1841.     AX = 4402h
  1842.     BX = file handle referencing device "RECLOWLD"
  1843.     DS:DX -> buffer for address list (see #0725)
  1844.     CX ignored
  1845. Return: CF clear if successful
  1846.         buffer filled
  1847.     CF set on error
  1848.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1849.  
  1850. Format of CPRLOW address list:
  1851. Offset    Size    Description    (Table 0725)
  1852.  00h    WORD    segment of CPRLOW code
  1853.  02h    WORD    offset in code segment of ??? entry point
  1854.         (switches into protected mode)
  1855.  04h    WORD    offset in code segment of jump array (see #0726)
  1856.  06h    WORD    segment of copy of interrupt vector table at CPRLOW load time
  1857. Note:    neither the entry point nor the jump array is valid until after a
  1858.       CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
  1859.  
  1860. Format of CPRLOW jump array:
  1861. Offset    Size    Description    (Table 0726)
  1862.  00h  3 BYTEs    initialize CPRLOW interrupt hooks
  1863.  03h  3 BYTEs    reset timers and enable CPR (hotkey enable)
  1864.  06h  3 BYTEs    disable CPR (hotkey disable)
  1865.  09h  3 BYTEs    clear ??? flag, hotkey disable, and ???
  1866.  0Ch  3 BYTEs    initialize delay loop counter (destroys AX,BX,CX,DX)
  1867.  0Fh  3 BYTEs    disable CPR completely (commandline /DISABLE)
  1868.  12h  3 BYTEs    enable ??? if CPR enabled by both cmdline and hotkey
  1869.  15h  3 BYTEs    enable CPR (commandline /ENABLE)
  1870. --------s-214402-----------------------------
  1871. INT 21 U - Creative Technology CTMMSYS.SYS v1.00.01 - API
  1872.     AX = 4402h
  1873.     BX = file handle for device "CTMMSYS$"
  1874.     CX = 0004h (size of data)
  1875.     DS:DX -> buffer for entry point (see #0727)
  1876. Return: CF clear if successful
  1877.         buffer updated
  1878.     CF set on error
  1879.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1880. Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
  1881.       driver
  1882. SeeAlso: AX=4402h"CTSB2",INT 80/BX=0000h"SBFM"
  1883.  
  1884. Format of CTMMSYS.SYS entry point record:
  1885. Offset    Size    Description    (Table 0727)
  1886.  00h    DWORD    (call) signature 4D6D7443h (ASCII "CtmM")
  1887.         (ret) pointer to CTMMSYS entry point (see #0728)
  1888. SeeAlso: #0729
  1889.  
  1890. (Table 0728)
  1891. Call CTMMSYS.SYS entry point with:
  1892.     AX = ???
  1893.     STACK:    WORD    ???
  1894.         WORD    ???
  1895.         WORD    ??? (0001h,0002h,0005h,0006h)
  1896.         WORD    ???
  1897.         DWORD    -> ???
  1898.         WORD    ???
  1899.         WORD    ???
  1900. Return: DX:AX = ??? or error code
  1901.         0000h:000Bh invalid value for ???
  1902.         0000h:000Fh API call already in progress
  1903. SeeAlso: #0727
  1904. --------s-214402-----------------------------
  1905. INT 21 U - Creative Technology CTSB2.SYS v1.01.01 - API
  1906.     AX = 4402h
  1907.     BX = file handle for device "CTSOUND0"
  1908.     CX = 0004h (size of data)
  1909.     DS:DX -> buffer for entry point (see #0729)
  1910. Return: CF clear if successful
  1911.         buffer updated
  1912.     CF set on error
  1913.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1914. Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
  1915.       driver
  1916. SeeAlso: AX=4402h"CTMMSYS",INT 80/BX=0000h"SBFM"
  1917.  
  1918. Format of CTSB2.SYS entry point record:
  1919. Offset    Size    Description    (Table 0729)
  1920.  00h    DWORD    (call) signature 4D6D7443h (ASCII "CtmM")
  1921.         (ret) pointer to CTSB2 entry point (see #0730)
  1922. SeeAlso: #0727
  1923.  
  1924. (Table 0730)
  1925. Call CTSB2.SYS entry point with:
  1926.     AX = ???
  1927.     STACK:    DWORD    -> ???
  1928.         WORD    function number
  1929.             (0100h,0200h,0300h,0400h,0500h,0600h,0701h)
  1930.         DWORD    -> ???
  1931.         WORD    ???
  1932.         WORD    ???
  1933. Return: DX:AX = ??? or error code
  1934.         0000h:0004h invalid subfunction???
  1935.         0000h:000Bh invalid value for ???
  1936.         0000h:000Fh API call already in progress
  1937. SeeAlso: #0729
  1938. --------m-214402-----------------------------
  1939. INT 21 U - Novell DOS 7 EMM386.EXE - GET STATE RECORD???
  1940.     AX = 4402h
  1941.     BX = file handle for device "EMMXXXX0"
  1942.     CX = 003Eh (size of state record)
  1943.     DS:DX -> buffer for state record (see #0731)
  1944. Return: CF clear if successful
  1945.         buffer filled (see #2208 at INT 67/AH=3Fh)
  1946.     CF set on error
  1947.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1948.  
  1949. Format of Novell DOS 7 EMM386.EXE state record:
  1950. Offset    Size    Description    (Table 0731)
  1951.  00h    WORD    signature EDC0h
  1952.  02h 60 BYTEs    ???
  1953. --------m-214402SF00-------------------------
  1954. INT 21 U - Memory Managers - GET API ENTRY POINT
  1955.     AX = 4402h subfn 00h
  1956.     BX = file handle for device "EMMXXXX0"
  1957.     CX = 0006h (size of buffer in bytes)
  1958.     DS:DX -> buffer for API entry point record (see #0732)
  1959.         first byte must be 00h on entry
  1960. Return: CF clear if successful
  1961.         buffer filled (see #2208 at INT 67/AH=3Fh)
  1962.     CF set on error
  1963.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  1964. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  1965.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  1966.     if no other program has hooked INT 67, an alternate installation
  1967.       check for CEMM is testing for the string
  1968.       "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  1969.       handler's segment; if present, the word at offset 12h contains the
  1970.       offset of the API entry point
  1971. SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
  1972.  
  1973. Format of memory manager API entry point record:
  1974. Offset    Size    Description    (Table 0732)
  1975.  00h    WORD    ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
  1976.  02h    DWORD    manager's private API entry point
  1977.         (see #0733,#2271 at INT 67/AX=FFA5h)
  1978.  
  1979. (Table 0733)
  1980. Call CEMM v5.10+ entry point with:
  1981.     AH = 00h get memory manager's state
  1982.         Return: AH = state
  1983.             bit 0: turned OFF
  1984.             bit 1: AUTO mode enabled
  1985.     AH = 01h set memory manager's state
  1986.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  1987.         Return: CF clear if successful
  1988.             CF set on error
  1989.     AH = 02h Weitek coprocessor support
  1990.         AL = subfunction
  1991.         00h get Weitek support state
  1992.             Return: AL = status
  1993.                 bit 0: Weitek coprocessor is present
  1994.                 bit 1: Weitek support is enabled
  1995.         01h turn on Weitek support
  1996.         02h turn off Weitek support
  1997.         Return: CF clear if successful
  1998.             CF set on error
  1999.             AH = error code (01h invalid subfunc, 02h no Weitek)
  2000.     AH = 05h get statistics
  2001.         ???
  2002.     AH > 06h
  2003.         Return: CF set
  2004.             AH = 01h (invalid function)
  2005. Notes:    AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
  2006.       compatibility with earlier versions of CEMM
  2007.     in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
  2008.       stating that a different version of CEMM is installed and it is
  2009.       therefore not possible to display the statistics
  2010. --------m-214402SF01-------------------------
  2011. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  2012.     AX = 4402h subfn 01h
  2013.     BX = file handle for device "EMMXXXX0"
  2014.     CX = 0006h (size of buffer in bytes)
  2015.     DS:DX -> buffer for EMM import structure record (see #0734)
  2016.         first byte must be 01h on entry
  2017. Return: CF clear if successful
  2018.         buffer filled (see also #2208 at INT 67/AH=3Fh)
  2019.     CF set on error
  2020.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2021. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  2022.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  2023.       as it starts up
  2024.     for QEMM-386, this call always returns an error if Windows3 support
  2025.       has been disabled with the NW3 switch
  2026. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  2027. SeeAlso: INT 67/AH=3Fh
  2028.  
  2029. Format of EMM import structure record:
  2030. Offset    Size    Description    (Table 0734)
  2031.  00h    DWORD    physical address of EMM import structure (see #0735)
  2032.  04h    BYTE    EMM import structure major version
  2033.  05h    BYTE    EMM import structure minor version
  2034. Note:    version 1.00 contains only EMS information (Windows 3.0+)
  2035.     version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
  2036.     version 1.11 is version 1.10 plus memory manager maker/product name
  2037. SeeAlso: #2248
  2038.  
  2039. Format of Global EMM Import record:
  2040. Offset    Size    Description    (Table 0735)
  2041.  00h    BYTE    bit flags
  2042.         bit 2: ???
  2043.         bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
  2044.         bit 4: no UMB???
  2045.  01h    BYTE    reserved (0)
  2046.  02h    WORD    size of structure in bytes
  2047.  04h    WORD    structure version
  2048.  06h    DWORD    reserved
  2049.  0Ah 384 BYTEs    64 EMS frame status records (see #0736), one per 16K of
  2050.           real-mode 1M address space
  2051. 18Ah    BYTE    ??? (must be at least 3*number_of_EMS_frames+4)
  2052. 18Bh    BYTE    number of UMB frame descriptors following
  2053. 18Ch 4N DWORDs    UMB frame descriptors
  2054.         each is 4 DWORDs giving physical page numbers for the four
  2055.           4K pages of a 16K EMS frame (00000000h if non-UMB page)
  2056. var    BYTE    number of EMS handle info records following
  2057.     16N BYTEs    EMS handle info records (see #0738)
  2058. ---version 1.10+ ---
  2059.     DWORD    realmode INT 67 vector (used by Windows to set breakpoints)
  2060.     DWORD    physical address of HMA page table values
  2061.     BYTE    number of free page entries following
  2062.      2N DWORDs    free page entries
  2063.         each is:
  2064.             DWORD    physical page number
  2065.             DWORD    number of consecutive physical pages
  2066.     BYTE    number of XMS handle info records following
  2067.         00h if memory manager does not emulate XMS or has real mode
  2068.           XMS code which can execute in the Windows environment
  2069.     12N BYTEs    XMS handle info records (see #0739)
  2070.     BYTE    number of free UMB info records following
  2071.      2N WORDs    free UMB info records
  2072.         each is:
  2073.             WORD    real mode start segment
  2074.             WORD    size in paragraphs
  2075. ---version 1.11---
  2076.      20 BYTEs    blank-padded maker name
  2077.      20 BYTEs    blank-padded product name
  2078.  
  2079. Format of EMS frame status record:
  2080. Offset    Size    Description    (Table 0736)
  2081.  00h    BYTE    frame type (see #0737)
  2082.  01h    BYTE    owner handle (00h/FFh = none) from frame including UMB
  2083.         index to UMB frame descriptors
  2084.  02h    WORD    logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
  2085.  04h    BYTE    EMS physical page number (FFh for non-EMS = don't care???)
  2086.  05h    BYTE    flags for non-EMS frames (00h for EMS frame)
  2087.         bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
  2088.           10: direct mapping (linear address = physical address)
  2089.           01: UMB mapping
  2090.  
  2091. Bitfields for EMS frame type:
  2092. Bit(s)    Description    (Table 0737)
  2093.  0    EMS frame
  2094.  1    (if EMS frame) in standard 64K page frame
  2095.  2    first 4K of frame is UMB
  2096.  3    second 4K of frame is UMB
  2097.  4    third 4K of frame is UMB
  2098.  5    last 4K of frame is UMB
  2099.  
  2100. Format of EMS handle info record:
  2101. Offset    Size    Description    (Table 0738)
  2102.  00h    BYTE    handle number (00h = system handle)
  2103.  01h    BYTE    flags
  2104.         bit 0: normal handle rather than system handle
  2105.         bit 2: ??? (set by some EMS managers)
  2106.  02h  8 BYTEs    EMS handle's name
  2107.  0Ah    WORD    number of 16K pages for handle
  2108.  0Ch    DWORD    physical address of page table entries forming page map
  2109. Note:    all values should be zero for the system handle if no large frame
  2110.       support is present
  2111.  
  2112. Format of XMS handle info record:
  2113. Offset    Size    Description    (Table 0739)
  2114.  00h    WORD    handle
  2115.  02h    WORD    flags
  2116.         bit 0: handle usable by Windows
  2117.             (already in use when Windows started if clear)
  2118.         bit 1: reserved (0)
  2119.  04h    DWORD    size in KB (may be zero, used only if flags bit 0 set)
  2120.  08h    DWORD    physical address (only if flags bit 0 set)
  2121. --------m-214402SF02-------------------------
  2122. INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
  2123.     AX = 4402h subfn 02h
  2124.     BX = file handle for device "EMMXXXX0"
  2125.     CX = 0002h (size of buffer in bytes)
  2126.     DS:DX -> buffer for memory manager version (see #0740)
  2127.         first byte must be 02h on entry
  2128. Return: CF clear if successful
  2129.         buffer filled
  2130.     CF set on error
  2131.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2132. Note:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  2133.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  2134. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
  2135.  
  2136. Format of memory manager version:
  2137. Offset    Size    Description    (Table 0740)
  2138.  00h    BYTE    major version
  2139.  01h    BYTE    minor version (binary)
  2140. --------m-214402-----------------------------
  2141. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  2142.     AX = 4402h
  2143.     BX = file handle for device "EMMXXXX0"
  2144.     CX = size of buffer in bytes (varies, see #0741)
  2145.     DS:DX -> buffer for returned data (see #0741)
  2146.         first byte must be set on entry to indicate desired data
  2147. Return: CF clear if successful
  2148.         buffer filled
  2149.     CF set on error
  2150.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2151. Notes:    an error is returned if the number of bytes to be read does not match
  2152.       the number of bytes returned for the specified data item
  2153.     this function is part of the interface which allows MS Windows to
  2154.       cooperate with memory managers
  2155. SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
  2156.  
  2157. Format of EMM386.EXE data buffer:
  2158. Offset    Size    Description    (Table 0741)
  2159.  00h    BYTE    (call) function
  2160.         03h get ???
  2161.         04h get ???
  2162. ---function 03h---
  2163.  00h    WORD    ???
  2164.  02h    WORD    ???
  2165. ---function 04h---
  2166.  00h    WORD    segment of UMB containing EMM386 code/data
  2167.  02h    WORD    number of paragraphs of EMM386 code/data in UMB
  2168.  04h    WORD    ???
  2169. ----------214402-----------------------------
  2170. INT 21 U - IFSHLP.SYS - GET ENTRY POINT
  2171.     AX = 4402h
  2172.     BX = file handle for device "IFS$HLP$"
  2173.     CX = 0008h (size of buffer in bytes)
  2174.     DS:DX -> buffer for entry point record (see #0639 at AH=3Fh"IFSHLP")
  2175. Return: CF clear if successful
  2176.         buffer filled
  2177.     CF set on error
  2178.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2179. SeeAlso: AH=3Fh"IFSHLP"
  2180. --------D-214403-----------------------------
  2181. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  2182.     AX = 4403h
  2183.     BX = file handle referencing character device
  2184.     CX = number of bytes to write
  2185.     DS:DX -> data to write
  2186. Return: CF clear if successful
  2187.         AX = number of bytes actually written
  2188.     CF set on error
  2189.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2190. Notes:    format of data is driver-specific (see below for some specific cases)
  2191.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  2192.       KEYSTACK.SYS driver will push the specified characters on the
  2193.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  2194.       driver will push the characters onto the keyboard stack
  2195. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  2196. SeeAlso: INT 2F/AX=D44Fh
  2197. --------c-214403-----------------------------
  2198. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
  2199.     AX = 4403h
  2200.     BX = handle for device "SMARTAAR"
  2201.     CX = number of bytes to write
  2202.     DS:DX -> SMARTDRV control block (see #0743)
  2203. Return: CF clear if successful
  2204.         AX = number of bytes actually written
  2205.         0000h if control block too small for given command
  2206.     CF set on error
  2207.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2208. Note:    NCache2 (from the Norton Utilities v8.0) attempts to support this
  2209.       interface, but does not do so correctly, often hanging the system;
  2210.       one should use the SmartDrive v4.x or NCache private interfaces
  2211.       (see INT 2F/AX=4A10h/BX=0000h,INT 2F/AX=FE00h/DI=4E55h)
  2212. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  2213.  
  2214. (Table 0742)
  2215. Values for SMARTDRV function code:
  2216.  00h    flush cache
  2217.  01h    flush and discard cache
  2218.  02h    disable caching (flushes and discards cache first)
  2219.  03h    enable caching
  2220.  04h    control write caching
  2221.  05h    set flushing tick count
  2222.  06h    lock cache contents
  2223.  07h    unlock cache contents
  2224.  08h    set flush-on-reboot flag
  2225.  09h    unused
  2226.  0Ah    control full-track caching
  2227.  0Bh    reduce cache size
  2228.  0Ch    increase cache size
  2229.  0Dh    set INT 13 chain address
  2230.  
  2231. Format of SMARTDRV control block:
  2232. Offset    Size    Description    (Table 0743)
  2233.  00h    BYTE    function code (see #0742)
  2234. ---functions 00h-03h,06h,07h---
  2235.  no additional fields
  2236. ---function 04h---
  2237.  01h    BYTE    write caching control action
  2238.         00h turn off write-through
  2239.         01h turn on write-through
  2240.         02h turn off write buffering (also flushes cache)
  2241.         03h turn on write buffering (also flushes cache)
  2242. ---function 05h---
  2243.  01h    WORD    number of timer ticks between cache flushes
  2244. ---function 08h---
  2245.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  2246. ---function 0Ah---
  2247.  01h    BYTE    full-track writes are
  2248.         00h not cached
  2249.         01h cached
  2250. ---functions 0Bh,0Ch---
  2251.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  2252. ---function 0Dh---
  2253.  01h    DWORD    new address to which to chain on INT 13
  2254. Note:    the previous address is not preserved
  2255. --------d-214403-----------------------------
  2256. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  2257.     AX = 4403h
  2258.     BX = file handle referencing character device for CD-ROM driver
  2259.     CX = number of bytes to write
  2260.     DS:DX -> control block (see #0744)
  2261. Return: CF clear if successful
  2262.         AX = number of bytes actually written
  2263.     CF set on error
  2264.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2265. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  2266.  
  2267. Format of CR-ROM control block:
  2268. Offset    Size    Description    (Table 0744)
  2269.  00h    BYTE    function code
  2270.         00h eject disk
  2271.         01h lock/unlock door
  2272.         02h reset drive
  2273.         03h control audio channel
  2274.         04h write device control string
  2275.         05h close tray
  2276. ---functions 00h,02h,05h---
  2277.  no further fields
  2278. ---function 01h---
  2279.  01h    BYTE    lock function
  2280.         00h unlock door
  2281.         01h lock door
  2282. ---function 03h---
  2283.  01h    BYTE    input channel (0-3) for output channel 0
  2284.  02h    BYTE    volume for output channel 0
  2285.  03h    BYTE    input channel (0-3) for output channel 1
  2286.  04h    BYTE    volume for output channel 1
  2287.  05h    BYTE    input channel (0-3) for output channel 2
  2288.  06h    BYTE    volume for output channel 2
  2289.  07h    BYTE    input channel (0-3) for output channel 3
  2290.  08h    BYTE    volume for output channel 3
  2291. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  2292.       right prime; a volume of 00h is off
  2293. ---function 04h---
  2294.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  2295.           interpretation
  2296. --------d-214403-----------------------------
  2297. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2298.     AX = 4403h
  2299.     BX = handle for device "SCSITAPE"
  2300.     CX = number of bytes to write
  2301.     DS:DX -> SCSITAPE control block (see #0745)
  2302. Return: CF clear if successful
  2303.         AX = number of bytes actually written
  2304.     CF set on error
  2305.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2306. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  2307.  
  2308. Format of SCSITAPE control block:
  2309. Offset    Size    Description    (Table 0745)
  2310.  00h    WORD    command type
  2311.         'F' Format (argument 1 = interleave, argument 2 = format type)
  2312.         'E' Erase
  2313.         'R' Rewind
  2314.         'L' Load
  2315.         'N' No Load
  2316.         'S' Space (argument 1 = count, argument 2 = type)
  2317.         'M' File Mark (argument 1 = count)
  2318.         'A' Reassign
  2319.  02h    WORD    argument 1
  2320.  04h    WORD    argument 2
  2321.  06h    WORD    segment of command buffer
  2322.  08h    WORD    offset of command buffer
  2323.  0Ah    WORD    length of command buffer
  2324. --------E-214403-----------------------------
  2325. INT 21 U - AI Architects - OS/x86??? - API
  2326.     AX = 4403h
  2327.     BX = handle for device "AIA_OS"
  2328.     CX = number of bytes to write (ignored)
  2329.     DS:DX -> 12-byte buffer (see #0746), first byte is command:
  2330.           81h installation check
  2331.           82h get API entry point
  2332.           84h uninstall
  2333. Return: CF clear if successful
  2334.         AX = number of bytes actually written
  2335.         DS:DX buffer filled
  2336.     CF set on error
  2337.         AX = error code (01h,05h,06h,0Ch,0Dh) (see #0885 at AH=59h)
  2338. Notes:    these functions are only available if the DOS extender was loaded as a
  2339.       device driver in CONFIG.SYS
  2340.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  2341. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  2342. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  2343.  
  2344. Format of buffer on return:
  2345. Offset    Size    Description    (Table 0746)
  2346.  00h  4 BYTEs    signature "IABH"
  2347. ---if function 81h---
  2348.  (no additional fields)
  2349. ---if function 82h---
  2350.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  2351. ---if function 84h---
  2352.  04h    WORD    success indicator
  2353.  06h    WORD    segment of ???
  2354.  08h    WORD    segment of ??? memory block to free if nonzero
  2355.  0Ah    WORD    segment of ??? memory block to free if nonzero
  2356. --------V-214403-----------------------------
  2357. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  2358.     AX = 4403h
  2359.     BX = file handle for device "PGS1600$"
  2360.     CX = 0018h (size of buffer)
  2361.     DS:DX -> configuration buffer (see #0704 at AX=4402h"PGS1600")
  2362. Return: CF clear if successful
  2363.         AX = number of bytes actually written
  2364.     CF set on error
  2365.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2366. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  2367.       display adapter, which provides a 1600x1200 monochrome display as
  2368.       well as one of two emulations, MDA or CGA.
  2369. SeeAlso: AX=4402h"PGS1600"
  2370. --------N-214403-----------------------------
  2371. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  2372.     AX = 4403h
  2373.     BX = file handle referencing device "$IPCUST"
  2374.     CX, DS:DX ignored
  2375. Return: CF clear if successful
  2376.         AX destroyed
  2377.     CF set on error
  2378.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2379. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  2380.       version 2.05.     If less than the entire data is read or written,
  2381.       the next read/write continues where the previous one ended; this
  2382.       call and AX=4402h both reset the location at which the next
  2383.       operation starts to zero
  2384.     v2.1+ uses a new configuration method, but allows the installation
  2385.       of IPCUST.SYS for backward compatibility with other software which
  2386.       must read the PC/TCP configuration
  2387. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  2388. --------V-214403-----------------------------
  2389. INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
  2390.     AX = 4403h
  2391.     BX = file handle referencing device "CPQ_MGES"
  2392.     DS:DX -> request packet (see #0747)
  2393.     CX ignored
  2394. Return: CF clear if successful
  2395.         AX destroyed
  2396.         data buffer filled (if applicable)
  2397.         first word of request packet set to number of bytes of data
  2398.           available (amount returned is smaller of this and requested
  2399.           amount)
  2400.     CF set on error
  2401.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2402. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  2403. SeeAlso: AX=4403h"RGDI"
  2404.  
  2405. Format of Compaq AG1024.SYS request packet:
  2406. Offset    Size    Description    (Table 0747)
  2407.  00h    WORD    function
  2408.         0000h get ??? (26h bytes)
  2409.         0001h get ??? (36h bytes)
  2410.         0002h set ??? (same as returned by function 0001h)
  2411.         0003h get ??? (6 bytes)
  2412.         0004h get ???
  2413.         0005h get ???
  2414.         0006h get ??? (10h bytes)
  2415.         0007h set ??? (same as returned by function 0006h)
  2416. ---functions 00h-03h,06h,07h---
  2417.  02h    WORD    size of data buffer
  2418.  04h    DWORD    -> buffer for function's data
  2419.  ---functions 04h,05h---
  2420.  02h    WORD    ???
  2421.  04h    WORD    size of data buffer
  2422.  06h    DWORD    -> buffer to receive data
  2423. --------V-214403-----------------------------
  2424. INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
  2425.     AX = 4403h
  2426.     BX = file handle referencing device "$$$$RGDI"
  2427.     DS:DX -> request packet (see #0748)
  2428.     CX ignored
  2429. Return: CF clear if successful
  2430.         AX destroyed
  2431.         data buffer filled (if applicable)
  2432.         first word of request packet set to number of bytes of data
  2433.           available (amount returned is smaller of this and requested
  2434.           amount)
  2435.     CF set on error
  2436.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2437. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  2438. SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
  2439.  
  2440. Format of Compaq AG1024.SYS request packet:
  2441. Offset    Size    Description    (Table 0748)
  2442.  00h    WORD    function
  2443.         0000h get entry points
  2444.         0001h get ???
  2445.  02h    DWORD    address of buffer for returned data
  2446. --------m-214403SF01-------------------------
  2447. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
  2448.     AX = 4403h subfn 01h
  2449.     BX = handle for device "386MAX$$"
  2450.     DS:DX -> BYTE 01h
  2451.     CX ignored
  2452. Return: DS:DX -> BYTE status (00h = successful)
  2453.     CF clear if successful
  2454.         AX destroyed
  2455.     CF set on error
  2456.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2457. Note:    this function will fail if any EMS or UMBs are in use
  2458. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2459. --------m-214403SF02-------------------------
  2460. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
  2461.     AX = 4403h subfn 02h
  2462.     BX = handle for device "386MAX$$"
  2463.     DS:DX -> BYTE 02h
  2464.     CX ignored
  2465. Return: DS:DX -> BYTE status (00h = successful)
  2466.     CF clear if successful
  2467.         AX destroyed
  2468.     CF set on error
  2469.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2470. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2471. --------m-214403SF03-------------------------
  2472. INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
  2473.     AX = 4403h subfn 03h
  2474.     BX = handle for device "386MAX$$"
  2475.     CX = number of bytes to copy (up to size of state buffer)
  2476.     DS:DX -> BYTE 03h followed by state buffer
  2477.           (see #0687 at AX=4402h"386MAX")
  2478. Return: CF clear if successful
  2479.         AX = number of bytes actually written
  2480.     CF set on error
  2481.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2482. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  2483.       (specifying the version of the state record) and the buffer must
  2484.       contain CX bytes AFTER the initial byte
  2485. SeeAlso: AX=4402h"386MAX"
  2486. --------m-214403SF05-------------------------
  2487. INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
  2488.     AX = 4403h subfn 05h
  2489.     BX = handle for device "386MAX$$"
  2490.     DS:DX -> BYTE 05h
  2491.     CX ignored
  2492. Return: CF clear if successful
  2493.         AX destroyed
  2494.     CF set on error
  2495.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2496. Desc:    specifies that 386MAX will only shift from AUTO to ON mode on standard
  2497.       EMS calls INT 67/AH=40h-5Dh
  2498. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
  2499. --------m-214403SF06-------------------------
  2500. INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
  2501.     AX = 4403h subfn 06h
  2502.     BX = handle for device "386MAX$$"
  2503.     DS:DX -> BYTE 06h
  2504.     CX ignored
  2505. Return: CF clear if successful
  2506.         AX destroyed
  2507.     CF set on error
  2508.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2509. Desc:    specified that 386MAX should shift from AUTO to ON mode on any INT 67
  2510.       call other than INT 67/AH=3Fh
  2511. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2512. --------n-214403-----------------------------
  2513. INT 21 U - PenDOS PENDEV.SYS - ???
  2514.     AX = 4403h
  2515.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  2516.     CX = size of buffer
  2517.     DS:DX -> buffer containing ???
  2518. Return: CF clear if successful
  2519.         buffer filled
  2520.     CF set on error
  2521.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2522. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  2523.       which provides pen capability to keyboard-based programs, is bundled
  2524.       with IBM DOS 6.1
  2525. Note:    this call sets the WORD at offset 1Ah into the device driver request
  2526.       header used to call the driver to 0000h.
  2527. SeeAlso: AX=4402h"PENDEV.SYS"
  2528. --------D-214404-----------------------------
  2529. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  2530.     AX = 4404h
  2531.     BL = drive number (00h = default, 01h = A:, etc.)
  2532.     CX = number of bytes to read
  2533.     DS:DX -> buffer
  2534. Return: CF clear if successful
  2535.         AX = number of bytes actually read
  2536.     CF set on error
  2537.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2538. Note:    format of data is driver-specific
  2539. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  2540. --------k-214404-----------------------------
  2541. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  2542.     AX = 4404h
  2543.     BL = drive number (00h = default, 01h = A:, etc.)
  2544.     CX = 0004h
  2545.     DS:DX -> DWORD buffer to receive device driver address
  2546. Return: buffer filled with pointer into Stacker device driver (see #1341):
  2547.       driver + 19h if Stacker Anywhere controls this drive
  2548.       driver + 1Ah if Stacker controls this drive
  2549.       unchanged else
  2550. Notes:    in addition to returning the address of the Stacker device driver,
  2551.       this call also sets the volume number at offset 58h in the device
  2552.       driver (see #1341 at INT 25/AX=CDCDh)
  2553.     Stacker Anywhere does not link its built-in device driver into
  2554.       the standard device driver chain, but it can be found via CDS/DPB
  2555.     this call can be used as an installation check for all versions of
  2556.       Stacker and Stacker Anywhere to avoid the INT 25 call
  2557. SeeAlso: AX=4408h,AX=440Eh,AH=52h,INT 25/AX=CDCDh
  2558. --------k-214404-----------------------------
  2559. INT 21 - Stacker - GET STACVOL FILE SECTORS
  2560.     AX = 4404h
  2561.     BL = drive number (0 is current drive)
  2562.     CX = byte count (i.e., 200h = 1 sector)
  2563.     DS:DX -> buffer (see #0749)
  2564. Return: Data Buffer contains the number of sectors requested from the
  2565.       STACVOL physical file for the drive specified.
  2566.  
  2567. Format of Stacker buffer:
  2568. Offset    Size    Description    (Table 0749)
  2569.  00h    WORD    01CDh
  2570.  02h    WORD    sector count
  2571.  04h    DWORD    number of starting sector
  2572.  08h    DWORD    far pointer to Data Buffer
  2573. --------k-214404-----------------------------
  2574. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  2575.     AX = 4404h
  2576.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  2577.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  2578.     DS:DX -> data record (see #0750)
  2579. Return: CF clear if successful
  2580.         AX = number of bytes read
  2581.     CF set on error
  2582.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2583. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  2584.       expander by Vertisoft Systems, Inc.
  2585. Note:    the installation check for v2.6 consists of scanning memory for the
  2586.       signature "FAT 2.6  byte:", which is immediately followed by a data
  2587.       table (see #0751)
  2588. BUG:    VOPT (a disk optimizer by Golden Bow Software) assumes that any driver
  2589.       which returns the "correct" number of bytes when the first word of
  2590.       the buffer for the data record contains the signature value 4444h is
  2591.       DoubleDisk; a workaround is for the non-DoubleDisk driver to return
  2592.       no data if the signature is present
  2593. SeeAlso: AX=440Dh
  2594. Index:    installation check;DUBLDISK.SYS
  2595.  
  2596. Format of DUBLDISK data record:
  2597. Offset    Size    Description    (Table 0750)
  2598.  00h    WORD    (call) signature 4444h
  2599.  02h    BYTE    (call) function
  2600.             00h ???
  2601.             01h ???
  2602. ---function 00h---
  2603.  02h    BYTE    (ret) ???
  2604.  03h    BYTE    (ret) ???
  2605. ---function 01h---
  2606.  02h    WORD    (ret) 4444h
  2607.  04h    WORD    allocation unit size???
  2608.  06h    WORD    ???
  2609.  08h    WORD    ???
  2610.  0Ah    BYTE    ???
  2611.  
  2612. Format of DUBLDISK signature data table:
  2613. Offset    Size    Description    (Table 0751)
  2614.  00h  5 BYTEs    ???
  2615.  05h    BYTE    first drive number
  2616.  06h    BYTE    number of drives
  2617.  07h    ???
  2618. --------k-214404-----------------------------
  2619. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2620.     AX = 4404h
  2621.     BL = drive number (00h = default, 01h = A:, etc)
  2622.     CX = 000Ah (size of DSPACKET structure)
  2623.     DS:DX -> DSPACKET structure (see #0752)
  2624. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2625.         AX = number of bytes actually transferred
  2626.     CF set on error
  2627.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2628. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2629.  
  2630. Format of DoubleSpace DSPACKET structure:
  2631. Offset    Size    Description    (Table 0752)
  2632.  00h    WORD    signature 444Dh ("DM")
  2633.  02h    BYTE    command code
  2634.         46h ('F') flush internal caches
  2635.         49h ('I') flush and invalidate internal caches
  2636.  03h    WORD    result code
  2637.         (ret) 4F4Bh ("OK") if successful, else unchanged
  2638.  05h  5 BYTEs    padding
  2639. --------k-214404-----------------------------
  2640. INT 21 - DBLSPACE.BIN v6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
  2641.     AX = 4404h
  2642.     BL = drive number (00h = default, 01h = A:, etc)
  2643.     CX = size of DSPACKET structure (ignored in DOS 6.2)
  2644.     DS:DX -> DSPACKET structure (see #0753)
  2645. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2646.         AX = number of bytes actually transferred
  2647.     CF set on error
  2648.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2649. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2650.  
  2651. Format of DoubleSpace DSPACKET structure:
  2652. Offset    Size    Description    (Table 0753)
  2653.  00h    WORD    signature 444Dh ("DM")
  2654.  02h    BYTE    command code
  2655.         53h ('S') get ??? for specified drive
  2656.  03h    WORD    result code
  2657.         (ret) 4F4Bh ("OK") if successful, else unchanged
  2658.  05h    DWORD    (ret) pointer to 96-byte ??? data
  2659.  09h    DWORD    (ret) pointer to ??? data
  2660.  0Dh  3 BYTEs    reserved
  2661. --------k-214404-----------------------------
  2662. INT 21 U - DoubleTools v1.0 - GET ???
  2663.     AX = 4404h
  2664.     BL = drive number (00h = default, 01h = A:, etc)
  2665.     CX = 0006h
  2666.     DS:DX -> DoubleTools structure (see #0754)
  2667. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2668.         AX = number of bytes actually transferred
  2669.     CF set on error
  2670.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2671. Note:    the Transporter device driver has the signature 55h 61h 50h 74h
  2672.       ("DaPt") twelve bytes after it beginning
  2673.  
  2674. Format of DoubleTools structure:
  2675. Offset    Size    Description    (Table 0754)
  2676.  00h    WORD    (call) signature 55h AAh
  2677.         (ret) signature 78h 70h ("xp")
  2678.  02h    WORD    (call) signature 52h 16h
  2679.         (ret) ???
  2680.  04h    WORD    (ret) segment of driver's DS (same as its PSP)
  2681. --------d-214404-----------------------------
  2682. INT 21 U - xDISK v3.31 - CONFIGURE
  2683.     AX = 4404h
  2684.     BL = drive number (00h = default, 01h = A:, etc)
  2685.     CX = 0047h (length of version string)
  2686.     DS:DX -> 79-byte buffer for version string and ???
  2687.     DS:0081h = commandline containing new switches for driver
  2688. Return: CF clear if successful
  2689.         AX = number of bytes actually transferred
  2690.     CF set on error
  2691.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2692. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2693. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  2694. --------c-214404-----------------------------
  2695. INT 21 - COMBI-disk v1.13 - GET DATA RECORD
  2696.     AX = 4404h
  2697.     BL = drive number (00h = default, 01h = A:, etc)
  2698.     CX = 0032h (length of data packet)
  2699.     DS:DX -> buffer for data packet (see #0755)
  2700. Return: CF clear if successful
  2701.         AX = number of bytes actually transferred
  2702.     CF set on error
  2703.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2704. Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
  2705.       single pool of memory by Vadim V. Vlasov
  2706. Note:    the installation check consists of scanning the valid drives for one
  2707.       which returns a correctly-sized data packet with the proper
  2708.       signature in the first field
  2709. SeeAlso: AX=4405h"COMBI"
  2710. Index:    installation check;COMBI-disk
  2711.  
  2712. Format of COMBI-disk data packet:
  2713. Offset    Size    Description    (Table 0755)
  2714.  00h  6 BYTEs    ASCIZ signature "COMBI"
  2715.  06h    WORD    version (high byte = major, low = decimal minor version)
  2716.  08h    BYTE    current options (see below)
  2717.  09h    BYTE    sectors per allocation block
  2718.  0Ah    WORD    maximum buffer in KB
  2719.  0Ch    WORD    current buffer in KB (less than max if XMS memory being lent)
  2720.  0Eh    WORD    total number of allocation blocks
  2721.  10h    WORD    current number of allocation blocks
  2722.  12h    WORD    number of blocks being used by RAM disk
  2723.  14h    WORD    number of blocks being used by cache or unused
  2724.  16h    WORD    number of dirty cache blocks
  2725.  18h    WORD    number of blocks which could not be written out due to errors
  2726.  1Ah    WORD    total number of read requests
  2727.  1Ch    WORD    total number of sectors read
  2728.  1Eh    WORD    number of BIOS read requests (cache misses)
  2729.  20h    WORD    number of sectors read via BIOS (cache misses)
  2730.  22h    WORD    total number of write requests
  2731.  24h    WORD    total number of sectors written
  2732.  26h    WORD    number of BIOS write requests
  2733.  28h    WORD    number of sectors written via BIOS
  2734.  2Ah    WORD    number of RAM disk read requests
  2735.  2Ch    WORD    number of sectors read from RAM disk
  2736.  2Eh    WORD    number of RAM disk write requests
  2737.  30h    WORD    number of sectors written to RAM disk
  2738. --------d-214404-----------------------------
  2739. INT 21 - SFS v1.00 - GET CONFIGURATION INFORMATION
  2740.     AX = 4404h
  2741.     BL = drive number (00h = default, 01h = A:, etc)
  2742.     CX = 001Ah (length of data packet)
  2743.     DS:DX -> buffer for data packet (see #0756)
  2744. Return: CF clear if successful
  2745.         AX = number of bytes actually transferred
  2746.     CF set on error
  2747.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2748. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  2749.       Peter C. Gutmann
  2750. SeeAlso: AX=4405h"SFS"
  2751.  
  2752. Format of SFS data packet:
  2753. Offset    Size    Description    (Table 0756)
  2754.  00h  4 BYTEs    signature string "SFS1"
  2755.  04h    WORD    SFS unit number (0-based)
  2756.  06h    WORD    drive on which the SFS volume is mounted
  2757.  08h    DWORD    sector offset of logical volume from start of physical volume
  2758.         0 if logical volume = physical volume
  2759.  0Ch    WORD    flag: 00h = no disk mounted, 01h = disk mounted
  2760.  0Eh    WORD    flag: 00h read/write, 01h read-only
  2761.  10h    WORD    quick-unmount hotkey (high byte = shift state, low = scan code)
  2762.  12h    WORD    auto-unmount time in minutes, or 0000h if already expired, or
  2763.         FFFFh if not set
  2764.  14h    WORD    time in minutes remaining before auto-unmount
  2765.  16h    WORD    internal driver check code
  2766.         0000h no error
  2767.         0001h driver consistency check failed
  2768.         0002h unit consistency check failed
  2769.  18h    WORD    disk access mode
  2770.         0000h BIOS
  2771.         0001h IDE direct access
  2772.         0002h SCSI direct access
  2773. --------D-214405-----------------------------
  2774. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  2775.     AX = 4405h
  2776.     BL = drive number (00h = default, 01h = A:, etc)
  2777.     CX = number of bytes to write
  2778.     DS:DX -> data to write
  2779. Return: CF clear if successful
  2780.         AX = number of bytes actually written
  2781.     CF set on error
  2782.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2783. Note:    format of data is driver-specific
  2784. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2785. --------d-214405-----------------------------
  2786. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2787.     AX = 4405h
  2788.     BX = drive number (00h = default, 01h = A:, etc)
  2789.     CX = number of bytes to write
  2790.     DS:DX -> SCSIDISK control block (see also #0745 at AX=4403h"ST-01")
  2791. Return: CF clear if successful
  2792.         AX = number of bytes actually written
  2793.     CF set on error
  2794.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2795. SeeAlso: AX=4403h"ST-01"
  2796. --------k-214405-----------------------------
  2797. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2798.     AX = 4405h
  2799.     BL = drive number (00h = default, 01h = A:, etc)
  2800.     CX = 000Ah (size of DSPACKET structure)
  2801.     DS:DX -> DSPACKET structure (see #0757)
  2802. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2803.         AX = number of bytes actually transferred
  2804.     CF set on error
  2805.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2806. Note:    this call is identical to the documented AX=4404h
  2807. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2808.  
  2809. Format of DoubleSpace DSPACKET structure:
  2810. Offset    Size    Description    (Table 0757)
  2811.  00h    WORD    signature 444Dh ("DM")
  2812.  02h    BYTE    command code
  2813.         46h ('F') flush internal caches
  2814.         49h ('I') flush and invalidate internal caches
  2815.  03h    WORD    result code
  2816.         (ret) 4F4Bh ("OK") if successful, else unchanged
  2817.  05h  5 BYTEs    padding
  2818. --------d-214405-----------------------------
  2819. INT 21 U - xDISK v3.31 - ???
  2820.     AX = 4405h
  2821.     BL = drive number (00h = default, 01h = A:, etc)
  2822.     CX = number of bytes to write
  2823.     DS:DX -> buffer containing version string
  2824.     ???
  2825. Return: CF clear if successful
  2826.         AX = number of bytes actually transferred
  2827.     CF set on error
  2828.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2829. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2830. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  2831. --------d-214405-----------------------------
  2832. INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
  2833.     AX = 4405h
  2834.     BL = drive number (00h = default, 01h = A:, etc) for RAM disk
  2835.     CX = number of bytes to write
  2836.     DS:DX -> buffer containing command packet (see #0759)
  2837. Return: CF clear if successful
  2838.         AX = number of bytes actually transferred
  2839.     CF set on error
  2840.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2841. SeeAlso: AX=4404h"COMBI"
  2842.  
  2843. (Table 0758)
  2844. Values for COMBI-disk command code:
  2845.  80h    flush cache
  2846.  81h    change options byte
  2847.  82h    shrink memory
  2848.  83h    expand memory
  2849.  84h    get dirty block information
  2850.  85h    reset write errors
  2851.  86h    reset counters
  2852.  
  2853. Format of COMBI-disk command packet:
  2854. Offset    Size    Description    (Table 0759)
  2855.  00h    WORD    version
  2856.  02h    BYTE    command code (see #0758)
  2857. ---command code 80h---
  2858.  no additional fields
  2859. ---command code 81h---
  2860.  03h    BYTE    new options byte (see #0760)
  2861. ---command code 82h---
  2862.  03h    WORD    number of KB to release
  2863. ---command code 83h---
  2864.  03h    WORD    number of KB to expand
  2865. ---command code 84h---
  2866.  03h    DWORD    -> buffer for block info (see #0761)
  2867. ---command code 85h---
  2868.  03h    DWORD    block ID
  2869. ---command code 86h---
  2870.  03h    BYTE    which counters to reset
  2871.         bit 0: hard disk read counts
  2872.         bit 1: hard disk write counts
  2873.         bit 2: RAM disk read/write counts
  2874. Note:    multiple commands may be placed in a single packet by stringing
  2875.       together as many command/argument pairs as desired
  2876.  
  2877. Bitfields for COMBI-disk options byte:
  2878. Bit(s)    Description    (Table 0760)
  2879.  0    cache off
  2880.  1    cache frozen
  2881.  2    write caching enabled
  2882.  3    delayed writing disabled
  2883.  5    fix memory allocation (no XMS lending)
  2884.  6    no 'sector not found' error
  2885.  
  2886. Format of COMBI-disk block info:
  2887. Offset    Size    Description    (Table 0761)
  2888.  00h    DWORD    block ID
  2889.  04h    BYTE    bitmask of valid sectors in block
  2890.  05h    BYTE    bitmask of dirty sectors in block
  2891.  06h    BYTE    last error returned by BIOS
  2892.  07h    BYTE    number of errors
  2893. --------D-214405-----------------------------
  2894. INT 21 - SFS v1.00 - DRIVER CONTROL
  2895.     AX = 4405h
  2896.     BL = drive number (00h = default, 01h = A:, etc)
  2897.     CX = number of bytes to write
  2898.     DS:DX -> data to write (see #0763)
  2899. Return: CF clear if successful
  2900.         AX = number of bytes actually written
  2901.     CF set on error
  2902.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2903. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  2904.       Peter C. Gutmann
  2905. SeeAlso: AX=4404h"SFS"
  2906.  
  2907. (Table 0762)
  2908. Values for SFS control function:
  2909.  00h    "PACKET_SET_DISKINFO"     set disk parameters
  2910.  01h    "PACKET_SET_KEYINFO"     set keying information
  2911.  02h    "PACKET_SET_READONLY"     select read/write or read-only
  2912.  03h    "PACKET_SET_DRIVENO"     set drive number to mount
  2913.  04h    "PACKET_SET_MOUNTSTATUS" set mount status
  2914.  05h    "PACKET_SET_UNMOUNT"     set/clear quick-unmount hotkey
  2915.  06h    "PACKET_SET_TIMEOUT"     set/clear auto-unmount timeout
  2916.  
  2917. Format of SFS control data packet:
  2918. Offset    Size    Description    (Table 0763)
  2919.  00h    WORD    signature 4330h ('C0')
  2920.  02h    WORD    function (see #0762)
  2921. ---function 00h---
  2922.  04h    WORD    sector size in bytes
  2923.  06h    BYTE    sectors per cluster
  2924.  07h    WORD    number of boot sectors
  2925.  09h    BYTE    number of copies of FAT
  2926.  0Ah    WORD    size of root directory in entries
  2927.  0Ch    WORD    number of sectors on disk, 16-bit
  2928.  0Eh    BYTE    media descriptor byte
  2929.  0Fh    WORD    sectors per FAT
  2930.  11h    WORD    sectors per track
  2931.  13h    WORD    number of heads
  2932.  15h    DWORD    number of hidden sectors
  2933.  19h    DWORD    number of sectors on disk, 32-bit
  2934. ---function 01h---
  2935.  04h 20 BYTEs    master IV for encrypted disk
  2936.  18h 64 BYTEs    NDC/SHS keying information
  2937. ---function 02h---
  2938.  04h    WORD    read-only state: 00h read-only, 01h read/write
  2939. ---function 03h---
  2940.  04h    WORD    drive number (see #0764)
  2941.  06h    DWORD    sector offset of logical volume from start of physical volume
  2942.         0 if logical volume = physical volume
  2943. ---function 04h---
  2944.  04h    WORD    mount status (00h unmounted, 01h mounted)
  2945. ---function 05h---
  2946.  04h    WORD    hotkey (high byte = shift state, low byte = scan code or 00h)
  2947.         0000h to disable hotkey
  2948. ---function 06h---
  2949.  04h    WORD    timeout in minutes before automatic unmount
  2950.         0000h to disable auto-unmount
  2951. Notes:    the data for function 00h corresponds to a DOS BPB (see AH=53h)
  2952.     functions 00h, 01h, and 03h automatically unmount the encrypted drive
  2953.     unmounting a drive with function 04h also destroys the encryption
  2954.       information in the driver and forces all dirty buffers to be flushed
  2955.  
  2956. Bitfields for SFS drive number:
  2957. Bit(s)    Description    (Table 0764)
  2958.  15-12    drive access mode
  2959.     0000 BIOS access
  2960.     0001 direct IDE access
  2961.     0010 direct SCSI access
  2962. ---if BIOS access---
  2963.  11-8    unused (0)
  2964.  7-0    BIOS drive number
  2965. ---if IDE access---
  2966.  11-8    unused (0)
  2967.  7-0    IDE drive number
  2968. ---if SCSI access---
  2969.  11-8    SCSI host number
  2970.  7-4    SCSI target ID
  2971.  3-0    SCSI logical unit number
  2972. --------D-214406-----------------------------
  2973. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  2974.     AX = 4406h
  2975.     BX = file handle
  2976. Return: CF clear if successful
  2977.         AL = input status
  2978.         00h not ready (device) or at EOF (file)
  2979.         FFh ready
  2980.     CF set on error
  2981.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2982. Note:    files may not register as being at EOF if positioned there by AH=42h
  2983. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  2984. --------D-214407-----------------------------
  2985. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  2986.     AX = 4407h
  2987.     BX = file handle
  2988. Return: CF clear if successful
  2989.         AL = input status
  2990.         00h not ready
  2991.         FFh ready
  2992.     CF set on error
  2993.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  2994. Note:    for DOS 2+, files are always ready for output, even if the disk is
  2995.       full or no media is in the drive
  2996. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  2997. --------D-214408-----------------------------
  2998. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  2999.     AX = 4408h
  3000.     BL = drive number (00h = default, 01h = A:, etc)
  3001. Return: CF clear if successful
  3002.         AX = media type (0000h removable, 0001h fixed)
  3003.     CF set on error
  3004.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  3005. Note:    in addition to the normal operation, if Stacker is installed, this
  3006.       call also sets the volume number at offset 58h in the Stacker
  3007.       device driver (except under DR-DOS 3.41-5.0, which do not pass
  3008.       through this call to the driver; use AX=440Eh instead)
  3009.       (see AX=4404h"Stacker",AX=440Eh,INT 25/AX=CDCDh)
  3010. SeeAlso: AX=4400h,AX=4404h"Stacker",AX=4409h,INT 2F/AX=122Bh
  3011. --------D-214409-----------------------------
  3012. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  3013.     AX = 4409h
  3014.     BL = drive number (00h = default, 01h = A:, etc)
  3015. Return: CF clear if successful
  3016.         DX = device attribute word
  3017.         bit 15: drive is SUBSTituted
  3018.         bit 12: drive is remote
  3019.         bit  9: direct I/O not allowed
  3020.     CF set on error
  3021.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  3022. Note:    on local drives, DX bits not listed above are the attribute word from
  3023.       the device driver header (see #0858 at AH=52h); for remote drives,
  3024.       the other bits appear to be undefined for DOS versions prior to 5.0
  3025.       (they are all cleared in DOS 5+)
  3026.     checking whether DX=0800h on return appears to be a fairly reliable
  3027.       method for detecting Microsoft's RAMDRIVE, though not for other
  3028.       ramdisks (there appears to be no simple yet foolproof method for
  3029.       detecting ramdisks, although the presence of only a single copy of
  3030.       the FAT and only a single head on non-removable devices is a fairly
  3031.       good indicator)
  3032. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  3033. --------D-21440A-----------------------------
  3034. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  3035.     AX = 440Ah
  3036.     BX = handle
  3037. Return: CF clear if successful
  3038.         DX = attribute word (as stored in SFT)
  3039.         bit 15: set if remote
  3040.         bit 14: date/time not set on close
  3041.     CF set on error
  3042.         AX = error code (01h,06h) (see #0885 at AH=59h)
  3043. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  3044.       the file server on which the handle is located in CX
  3045.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  3046. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  3047. --------D-21440B-----------------------------
  3048. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  3049.     AX = 440Bh
  3050.     CX = pause between retries (default 1)
  3051.     DX = number of retries (default 3)
  3052. Return: CF clear if successful
  3053.     CF set on error
  3054.         AX = error code (01h) (see #0885 at AH=59h)
  3055. Notes:    delay is dependent on processor speed (value in CX specifies number of
  3056.       64K-iteration empty loops to execute)
  3057.     if DX=0000h on entry, the retry count is left unchanged
  3058. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  3059. --------D-21440C-----------------------------
  3060. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  3061.     AX = 440Ch
  3062.     BX = device handle
  3063.     CH = category code (see #0765)
  3064.     CL = function number (see #0766)
  3065.     DS:DX -> parameter block (see #0767,#0768,#0769,#0770,#0771,#0772)
  3066.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  3067.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  3068. Return: CF set on error
  3069.         AX = error code (see #0885 at AH=59h)
  3070.     CF clear if successful
  3071.         DS:DX -> iteration count if CL=65h
  3072.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  3073.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  3074. Note:    DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  3075.       does not support a retry counter
  3076. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  3077. SeeAlso: INT 2F/AX=1A01h
  3078.  
  3079. (Table 0765)
  3080. Values for IOCTL category code:
  3081.  00h    unknown (DOS 3.3+)
  3082.  01h    COMn: (DOS 3.3+)
  3083.  03h    CON (DOS 3.3+)
  3084.  05h    LPTn:
  3085.  9Eh    Media Access Control driver (STARLITE)
  3086.  00h-7Fh reserved for Microsoft
  3087.  80h-FFh reserved for OEM/user-defined
  3088.  
  3089. (Table 0766)
  3090. Values for generic character IOCTL function:
  3091.  00h    MAC driver Bind (STARLITE) (see #0767)
  3092.  45h    set iteration (retry) count (see #0768)
  3093.  4Ah    select code page (see #0769)
  3094.  4Ch    start code-page preparation (see #0770)
  3095.  4Dh    end code-page preparation (see #0771)
  3096.  5Fh    set display information (DOS 4.0+) (see #0772)
  3097.  65h    get iteration (retry) count
  3098.  6Ah    query selected code page (see #0769)
  3099.  6Bh    query prepare list (see #0773)
  3100.  7Fh    get display information (DOS 4.0+) (see #0772)
  3101. Note:    bit assignments for function code:
  3102.         bit 7: set to ignore if unsupported, clear to return error
  3103.         bit 6: set if passed to driver, clear if intercepted by DOS
  3104.         bit 5: set if queries data from device, clear if sends command
  3105.         bits 4-0: subfunction
  3106.  
  3107. Format of parameter block for function 00h:
  3108. Offset    Size    Description    (Table 0767)
  3109.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  3110.  08h    WORD    version
  3111.  0Ah    WORD    flags
  3112.         bit 0: media requires connect or listen request before use
  3113.         bit 1: network is a LAN (broadcast/multicast supported)
  3114.         bit 2: point-to-point network
  3115.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  3116.         by MAC driver)
  3117.  0Eh    WORD    context
  3118.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  3119.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  3120.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  3121.  16h    WORD    addressing format (filled in by MAC driver)
  3122.         0000h general addressing
  3123.         0001h Ethernet addressing
  3124.         0002h Token Ring addressing
  3125.         0003h Token Bus addressing
  3126.  18h    DWORD    Send entry point (filled in by MAC driver)
  3127.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  3128.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  3129.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  3130.  
  3131. Format of parameter block for function 45h:
  3132. Offset    Size    Description    (Table 0768)
  3133.  00h    WORD    number of times output is attempted before driver assumes
  3134.           device is busy
  3135.  
  3136. Format of parameter block for functions 4Ah and 6Ah:
  3137. Offset    Size    Description    (Table 0769)
  3138.  00h    WORD    length of data
  3139.  02h    WORD    code page ID
  3140.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  3141.           start/end for each of N ranges (DOS 4.0)
  3142.     WORD    0000h  end of data (DOS 4.0)
  3143.  
  3144. Format of parameter block for function 4Ch:
  3145. Offset    Size    Description    (Table 0770)
  3146.  00h    WORD    flags
  3147.         DISPLAY.SYS = 0000h
  3148.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  3149.             prepare cartridge selection
  3150.  02h    WORD    length of remainder of parameter block
  3151.  04h    WORD    number of code pages following
  3152.  06h  N WORDs    code page 1,...,N
  3153.  
  3154. Format of parameter block for function 4Dh:
  3155. Offset    Size    Description    (Table 0771)
  3156.  00h    WORD    length of data
  3157.  02h    WORD    code page ID
  3158.  
  3159. Format of parameter block for functions 5Fh and 7Fh:
  3160. Offset    Size    Description    (Table 0772)
  3161.  00h    BYTE    level (0 for DOS 4.x-6.0)
  3162.  01h    BYTE    reserved (0)
  3163.  02h    WORD    length of following data (14)
  3164.  04h    WORD    control flags
  3165.         bit 0 set for blink, clear for intensity
  3166.         bits 1-15 reserved
  3167.  06h    BYTE    mode type (1=text, 2=graphics)
  3168.  07h    BYTE    reserved (0)
  3169.  08h    WORD    colors
  3170.         0000h = monochrome
  3171.         else N bits per pixel
  3172.  0Ah    WORD    pixel columns
  3173.  0Ch    WORD    pixel rows
  3174.  0Eh    WORD    character columns
  3175.  10h    WORD    character rows
  3176.  
  3177. Format of parameter block for function 6Bh:
  3178. Offset    Size    Description    (Table 0773)
  3179.  00h    WORD    length of following data
  3180.  02h    WORD    number of hardware code pages
  3181.  04h  N WORDs    hardware code pages 1,...,N
  3182.     WORD    number of prepared code pages
  3183.       N WORDs    prepared code pages 1,...,N
  3184. --------d-21440C-----------------------------
  3185. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  3186.     AX = 440Ch
  3187.     BX = device handle
  3188.     CH = category code
  3189.         07h tape (ASPITAPE.SYS)
  3190.     CL = function
  3191.         01h "mtop" - perform tape operation
  3192.         02h "mtget" - get tape status
  3193.         03h ignore end-of-tape errors
  3194.         04h enable end-of-tape errors
  3195.     DS:DX -> parameter block (see #0774,#0775)
  3196. Return: CF set on error
  3197.         AX = error code (see #0885 at AH=59h)
  3198.     CF clear if successful
  3199.         DS:DX -> data block
  3200. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  3201.       SCSI Programming Interface (ASPI).  It provides the following device
  3202.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  3203.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  3204.       also be the following names 'MTx' and 'NMTx' which default to 1024
  3205.       byte blocks.    The names may also have a '$' appended to try and make
  3206.       them unique from file names of 'RMT0' etc.
  3207.     once opend these devices must be put into RAW mode
  3208. SeeAlso: AX=4402h"ASPI"
  3209.  
  3210. Format of ASPITAPE.SYS mtop parameter block:
  3211. Offset    Size    Description    (Table 0774)
  3212.  00h    WORD    operation code
  3213.         00h "MTWEOF" - write an end-of-file record
  3214.         01h "MTFSF" - forward space file
  3215.         02h "MTBSF" - backward space file
  3216.         03h "MTFSR" - forward space record
  3217.         04h "MTBSR" - backward space record
  3218.         05h "MTREW" - rewind
  3219.         06h "MTOFFL" - rewind and unload
  3220.         07h "MTNOP" - perform TEST UNIT READY
  3221.  02h    DWORD    repetition count
  3222.  
  3223. Format of ASPITAPE.SYS mtget parameter block:
  3224. Offset    Size    Description    (Table 0775)
  3225.  00h    BYTE    ASPI host ID
  3226.  01h    BYTE    SCSI target ID
  3227.  02h    BYTE    SCSI logical unit number
  3228.  03h    BYTE    device parameters
  3229.         bit 0: drive must use fixed-block read and write
  3230.         bit 7: drive is an ASPI device
  3231.  04h    BYTE    current device state (see #0776)
  3232.  05h    BYTE    unit number within driver
  3233.  06h    WORD    fixed block blocksize
  3234.  08h    BYTE    last SCSI status
  3235.  09h    BYTE    last SCSI sense key
  3236.  0Ah    WORD    last SCSI opcode (packed) (see #0777)
  3237.  0Ch    WORD    residual bytes from SCSI opcode
  3238.  
  3239. Bitfields for ASPITAPE.SYS current device state:
  3240. Bit(s)    Description    (Table 0776)
  3241.  0    device currently opened in buffered mode
  3242.  1    drive currently opened in nonbuffered mode
  3243.  2    rewind drive on last close
  3244.  3    drive has been written on
  3245.  4    drive has been read from
  3246.  5    next read will return 0 bytes
  3247.  6    EOM will resemble EOF
  3248.  7    drive may be busy rewinding
  3249.  
  3250. Bitfields for SCSI opcode:
  3251. Bit(s)    Description    (Table 0777)
  3252.  0-7    SCSI operation (SCSI packet byte 0)
  3253.  8-10    SCSI flags (SCSI packet byte 1)
  3254.  11-12    ASPI "Direction Bits" (ASPI SRB byte 3)
  3255. --------D-21440D-----------------------------
  3256. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  3257.     AX = 440Dh
  3258.     BL = drive number (00h=default,01h=A:,etc)
  3259.     CH = category code (see #0778)
  3260.     CL = minor code (function) (see #0779)
  3261.     DS:DX -> (DOS) parameter block (see #0780,#0782,#0783,#0784,#0785)
  3262.     SI:DI -> (OS/2 comp box) parameter block (see #0786,#0788,#0789,#0790)
  3263. Return: CF set on error
  3264.         AX = error code (01h,02h) (see #0885 at AH=59h)
  3265.     CF clear if successful
  3266.         DS:DX -> data block if CL=60h or CL=61h
  3267. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  3268.       entries in the BPB for diskettes.
  3269.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  3270.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  3271.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  3272.       other minor codes return error code 16h
  3273.     some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions
  3274.       prior to 5.0
  3275.     minor code 60h normally produces no I/O except with AutoMount=1 for
  3276.       DBLSPACE/DRVSPACE
  3277. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  3278.  
  3279. (Table 0778)
  3280. Values for block device IOCTL category code:
  3281.  08h    disk drive
  3282.  00h-7Fh reserved for Microsoft
  3283.  80h-FFh reserved for OEM/user-defined
  3284.  
  3285. (Table 0779)
  3286. Values for generic block IOCTL minor code:
  3287.  00h    (OS/2)    \ used to lock/unlock a drive
  3288.  01h    (OS/2)    /
  3289.  40h    set device parameters (see #0780)
  3290.  41h    write logical device track (see #0782)
  3291.  42h    format and verify logical device track (see #0783)
  3292.  46h    (DOS 4.0+) set volume serial number (see #0785,AH=69h)
  3293.  47h    (DOS 4.0+) set access flag (see #0786)
  3294.  48h    (Enh. Disk Drive Spec) set media lock state (see #0787,INT 13/AH=45h)
  3295.  49h    (Enh. Disk Drive Spec) eject media in drive (see INT 13/AH=49h)
  3296.  50h    (PCMCIA) attribute memory write
  3297.  51h    (PCMCIA) common memory write
  3298.  52h    (PCMCIA) force media change (DOS 5+ ???) (see #0788)
  3299.  53h    (PCMCIA) erase drive
  3300.  54h    (PCMCIA) erase media
  3301.  56h    (PCMCIA) set erase status callback
  3302.  57h    (PCMCIA) append Card Information Structure (CIS) tuple
  3303.  58h    (PCMCIA) erase CIS tuples
  3304.  60h    get device parameters (see #0780)
  3305.  61h    read logical device track (see #0782)
  3306.  62h    verify logical device track (see #0784)
  3307.  66h    (DOS 4.0+) get volume serial number (see #0785,AH=69h)
  3308.  67h    (DOS 4.0+) get access flag (see #0786)
  3309.  68h    (DOS 5.0+) sense media type (see #0789)
  3310.  70h    (PCMCIA) attribute memory read
  3311.  73h    (PCMCIA) get memory media information (DOS 5+ ???) (see #0790)
  3312.  76h    (PCMCIA) get erase status callback
  3313.  77h    (PCMCIA) get first Card Information Structure (CIS) tuple
  3314.  78h    (PCMCIA) get next CIS tuple
  3315.  7Fh    (PCMCIA) get ??? information (see #0791,#0792)
  3316.  
  3317. Format of parameter block for functions 40h, 60h:
  3318. Offset    Size    Description    (Table 0780)
  3319.  00h    BYTE    special functions
  3320.         bit 0 set if function to use current BPB, clear if Device
  3321.               BIOS Parameter Block field contains new default BPB
  3322.         bit 1 set if function to use track layout fields only
  3323.             must be clear if CL=60h
  3324.         bit 2 set if all sectors in track same size (should be set)
  3325.         bits 3-7 reserved
  3326.  01h    BYTE    device type (see #0781)
  3327.  02h    WORD    device attributes
  3328.         bit 0 set if nonremovable medium
  3329.         bit 1 set if door lock ("changeline") supported
  3330.         bits 2-15 reserved
  3331.  04h    WORD    number of cylinders
  3332.  06h    BYTE    media type
  3333.         for 1.2M drive
  3334.             00h 1.2M disk (default)
  3335.             01h 320K/360K disk
  3336.         F8h for DUBLDISK.SYS v2.6 expanded drives
  3337.         always 00h for other drive types
  3338.  07h 31 BYTEs    device BPB (see #0875 at AH=53h), bytes after BPB offset 1Eh
  3339.           omitted
  3340. ---function 40h only---
  3341.  26h    WORD    number of sectors per track (start of track layout field)
  3342.         (maximum 63)
  3343.  28h  N word pairs: number,size of each sector in track
  3344.  
  3345. (Table 0781)
  3346. Values for device type:
  3347.  00h    320K/360K disk
  3348.  01h    1.2M disk
  3349.  02h    720K disk
  3350.  03h    single-density 8-inch disk
  3351.  04h    double-density 8-inch disk
  3352.  05h    fixed disk
  3353.  06h    tape drive
  3354.  07h    (DOS 3.3+) other type of block device, normally 1.44M floppy
  3355.  08h    read/write optical disk
  3356.  09h    (DOS 5+) 2.88M floppy
  3357.  
  3358. Format of parameter block for functions 41h, 61h:
  3359. Offset    Size    Description    (Table 0782)
  3360.  00h    BYTE    special functions (reserved, must be zero)
  3361.  01h    WORD    number of disk head
  3362.  03h    WORD    number of disk cylinder
  3363.  05h    WORD    number of first sector to read/write
  3364.  07h    WORD    number of sectors
  3365.  09h    DWORD    transfer address
  3366.  
  3367. Format of parameter block for function 42h:
  3368. Offset    Size    Description    (Table 0783)
  3369.  00h    BYTE    reserved, must be zero (DOS <3.2)
  3370.           bit 0=0: format/verify track
  3371.             1: format status call (DOS 3.2+), don't actually format
  3372.           bits 1-7 reserved, must be zero
  3373.         value on return (DOS 3.3+):
  3374.           00h    specified tracks, sectors/track supported by BIOS
  3375.           01h    function not supported by BIOS
  3376.           02h    specified tracks, sectors/track not allowed for drive
  3377.           03h    no disk in drive
  3378.  01h    WORD    number of disk head
  3379.  03h    WORD    number of disk cylinder
  3380.  
  3381. Format of parameter block for function 62h:
  3382. Offset    Size    Description    (Table 0784)
  3383.  00h    BYTE    reserved, must be zero (DOS <3.2)
  3384.           bit 0=0: verify single track
  3385.             1: verify multiple tracks
  3386.           bits 1-7 reserved, must be zero
  3387.         value on return (DOS 3.3+):
  3388.           00h    specified tracks, sectors/track supported by BIOS
  3389.           01h    function not supported by BIOS
  3390.           02h    specified tracks, sectors/track not allowed for drive
  3391.           03h    no disk in drive
  3392.  01h    WORD    number of disk head
  3393.  03h    WORD    number of disk cylinder
  3394.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  3395.  
  3396. Format of parameter block for functions 46h, 66h:
  3397. Offset    Size    Description    (Table 0785)
  3398.  00h    WORD    (call) info level (should be 0000h)
  3399.  02h    DWORD    disk serial number (binary)
  3400.  06h 11 BYTEs    volume label or "NO NAME    "
  3401.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  3402.  
  3403. Format of parameter block for functions 47h, 67h:
  3404. Offset    Size    Description    (Table 0786)
  3405.  00h    BYTE    special-function field (must be zero)
  3406.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  3407.  
  3408. Format of parameter block for function 48h:
  3409. Offset    Size    Description    (Table 0787)
  3410.  00h    BYTE    (call) locking operation
  3411.         00h lock media in drive
  3412.         01h unlock media
  3413.         02h get locking status
  3414.  01h    BYTE    (ret) drive's lock status
  3415.  
  3416. Format of parameter block for function 52h:
  3417.  00h    BYTE    (call) unused???    (Table 0788)
  3418.         (ret) 00h if flash/ATA drive but no card inserted
  3419.             unchanged otherwise
  3420. Notes:    the absense of a flash card should be tested by checking the DOS error
  3421.       code rather than the returned byte
  3422.     the parameter byte is cleared to 00h erroneously by the Award
  3423.       PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted
  3424.       (bug corrected in PCDISK.EXE v1.02h and later)
  3425.     not supported by the SystemSoft ATADRV.EXE and the Phoenix PCMATA.SYS
  3426.       PCMCIA/ATA drivers
  3427.  
  3428. Format of parameter block for function 68h:
  3429. Offset    Size    Description    (Table 0789)
  3430.  00h    BYTE    01h for default media type, 00h for any other media type
  3431.         (see also INT 13/AH=20h"Compaq")
  3432.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  3433.  
  3434. Format of parameter block for function 73h:
  3435. Offset    Size    Description    (Table 0790)
  3436.  00h    BYTE    ???
  3437.         00h ATA card inserted ???
  3438.         80h ATA card not inserted ???
  3439.  01h    BYTE    length of parameter block ???
  3440.         apparently always 40h
  3441.  02h    BYTE    ???
  3442.         00h ATA card not inserted ???
  3443.         0Dh ATA card inserted ???
  3444.  03h  2 BYTEs    ??? (apparently always 00h)
  3445.  05h    BYTE    drive number (0=first) ???
  3446.  06h    BYTE    total number of drives ???
  3447.  07h    BYTE    ???
  3448.         00h ATA card not inserted ???
  3449.         01h ATA card inserted ???
  3450.  08h 17 BYTEs    ???
  3451.  19h    BYTE    ???
  3452.         00h ATA card not inserted ???
  3453.         01h ATA card inserted ???
  3454.  1Ah    BYTE    ??? (apparently always 01h)
  3455.  1Bh    BYTE    ???
  3456.         00h ATA card not inserted ???
  3457.         01h ATA card inserted ???
  3458.  1Ch  2 BYTEs    ??? (apparently always 0015h)
  3459.  1Eh  2 BYTEs    ???
  3460.  20h  2 BYTEs    ??? (apparently always 0110h)
  3461.  22h 15 BYTEs    ???
  3462.  31h  2 BYTEs    ??? (apparently always 7000h)
  3463.  33h 11 BYTEs    driver signature
  3464.         "AWARD PDISK" for Award PCDISK.EXE PCMCIA/ATA driver
  3465.         "MS-BIOS    " for HP 200LX generic ATA driver
  3466.  3Eh  2 BYTEs    ???
  3467. Notes:    parameter structure possibly depends on driver
  3468.     this function is not supported by the SystemSoft ATADRV.EXE and the
  3469.       Phoenix PCMATA.SYS PCMCIA/ATA drivers
  3470.  
  3471. Format of parameter block for function 7Fh for SystemSoft ATADRV.EXE:
  3472. Offset    Size    Description    (Table 0791)
  3473.  00h    DWORD    -> unknown location within driver
  3474. Note:    function supported by the SystemSoft ATADRV.EXE PCMCIA/ATA driver
  3475.       but not by the Award PCDISK.EXE PCMCIA/ATA driver
  3476. SeeAlso: #0792
  3477.  
  3478. Format of parameter block for function 7Fh for Phoenix PCMATA.SYS:
  3479. Offset    Size    Description    (Table 0792)
  3480.  00h  8 BYTEs    ???
  3481. Note:    this function supported by the Phoenix PCMATA.SYS PCMCIA/ATA driver
  3482.       but not by the Award PCDISK.EXE PCMCIA/ATA driver
  3483. SeeAlso: #0791
  3484. --------D-21440E-----------------------------
  3485. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  3486.     AX = 440Eh
  3487.     BL = drive number (00h=default,01h=A:,etc)
  3488. Return: CF set on error
  3489.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  3490.     CF clear if successful
  3491.         AL = 00h block device has only one logical drive assigned
  3492.          1..26 the last letter used to reference the drive (1=A:,etc)
  3493. Notes:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3494.       always returns AL=00h
  3495.     in addition to the normal operation, if Stacker is installed, this
  3496.       call also sets the volume number at offset 58h in the Stacker
  3497.       device driver (DR-DOS 3.41-5.0 only; use AX=4408h otherwise)
  3498.       (see AX=4404h"Stacker",INT 25/AX=CDCDh)
  3499. SeeAlso: AX=4408h,AX=440Fh,INT 2F/AX=122Bh
  3500. --------D-21440F-----------------------------
  3501. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  3502.     AX = 440Fh
  3503.     BL = physical drive number (00h=default,01h=A:,etc))
  3504. Return: CF set on error
  3505.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  3506.     CF clear if successful
  3507.         drive now responds to next logical drive number
  3508. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  3509.       a single physical floppy drive as both A: and B:
  3510.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3511.       always returns an error on this function
  3512. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  3513. --------D-214410-----------------------------
  3514. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  3515.     AX = 4410h
  3516.     BX = handle for device
  3517.     CH = category code (see #0765)
  3518.     CL = function code (see #0766)
  3519. Return: CF clear if successful
  3520.         AX = 0000h    specified IOCTL function is supported
  3521.     CF set on error
  3522.         AL = 01h    IOCTL capability not available
  3523. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3524.       standard DOS 3.2 set may use this call first to see whether a
  3525.       particular call is supported
  3526. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  3527. --------d-214410BXFFFF-----------------------
  3528. INT 21 U - NewSpace - ENABLE DRIVER
  3529.     AX = 4410h
  3530.     BX = FFFFh
  3531. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3532.       all files as they are written and decompresses them as they are read
  3533. Note:    compressed files are not accessible unless the driver is enabled
  3534. SeeAlso: AX=4411h/BX=FFFFh
  3535. --------D-214411-----------------------------
  3536. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  3537.     AX = 4411h
  3538.     BL = drive number
  3539.     CH = category code (see #0778)
  3540.     CL = function code (see #0779)
  3541. Return: CF clear if successful
  3542.         AX = 0000h    specified IOCTL function is supported
  3543.     CF set on error
  3544.         AL = 01h    IOCTL capability not available
  3545. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3546.       standard DOS 3.2 set may use this call first to see whether a
  3547.       particular call is supported
  3548. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  3549. --------d-214411BXFFFF-----------------------
  3550. INT 21 U - NewSpace - DISABLE DRIVER
  3551.     AX = 4411h
  3552.     BX = FFFFh
  3553. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3554.       all files as they are written and decompresses them as they are read
  3555. Note:    compressed files are not accessible unless the driver is enabled
  3556. SeeAlso: AX=4410h/BX=FFFFh
  3557. --------O-214412-----------------------------
  3558. INT 21 O - DR-DOS 5.0-6.0 - DETERMINE DOS TYPE
  3559.     AX = 4412h
  3560.     CF set
  3561. Return: CF set if not DR-DOS
  3562.         AX = error code (see #0885 at AH=59h)
  3563.     CF clear if DR-DOS
  3564.         DX = AX = version code (see #0794)
  3565. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  3566.       identical to AX=4452h
  3567. SeeAlso: AX=4452h
  3568. --------d-214412BXFFFF-----------------------
  3569. INT 21 U - NewSpace - INSTALLATION CHECK???
  3570.     AX = 4412h
  3571.     BX = FFFFh
  3572. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  3573.     BX:DX -> ???
  3574.     CX = ???
  3575. SeeAlso: AX=4411h/BX=FFFFh
  3576. --------d-214413BXFFFF-----------------------
  3577. INT 21 U - NewSpace - GET ???
  3578.     AX = 4413h
  3579.     BX = FFFFh
  3580. Return: AX = code segment of NewRes (resident driver for NewSpace)
  3581.     BX = offset of ???
  3582. SeeAlso: AX=4412h/BX=FFFFh
  3583. --------O-214414-----------------------------
  3584. INT 21 OU - DR-DOS 5.0-6.0 - SET GLOBAL PASSWORD
  3585.     AX = 4414h
  3586.     DS:DX -> password string (blank-padded to 8 characters)
  3587. Desc:    Specify the master password for accessing files.
  3588. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  3589.       identical to AX=4454h
  3590. SeeAlso: AX=4454h
  3591. --------d-214414BXFFFF-----------------------
  3592. INT 21 U - NewSpace - DEBUGGING DUMP
  3593.     AX = 4414h
  3594.     BX = FFFFh
  3595. Return: debugging dump written to X:\NEWSPACE.SMP
  3596. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  3597. --------O-2144-------------------------------
  3598. INT 21 OU - DR-DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  3599.     AH = 44h
  3600.     AL = 16h to 18h
  3601. Note:    these obsolete subfunctions (which are no longer supported in Novell
  3602.       DOS 7) are identical to AX=4456h through 4458h
  3603. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  3604. --------O-214451-----------------------------
  3605. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  3606.     AX = 4451h
  3607. Return: CF set if not Concurrent DOS
  3608.         AX = error code (see #0885 at AH=59h)
  3609.     CF clear if successful
  3610.         AH = single-user/multiuser nature
  3611.         10h single-user
  3612.             AL = operating system version ID (see #0794)
  3613.         14h multiuser
  3614.             AL = operating system version ID (see #0793)
  3615. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  3616.       in the environment variable VER
  3617.     use this function if you are looking for multiuser capabilities,
  3618.       AX=4452h for single-user
  3619.     this function should never return the single-user values
  3620. SeeAlso: AX=4452h,AX=4459h
  3621.  
  3622. (Table 0793)
  3623. Values for Digital Research operating system version ID:
  3624.  32h    Concurrent PC DOS 3.2
  3625.  41h    Concurrent DOS 4.1
  3626.  50h    Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  3627.  60h    Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  3628.  62h    Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  3629.  66h    DR Multiuser DOS 5.1
  3630.  67h    Concurrent DOS 5.1
  3631. --------O-214452-----------------------------
  3632. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  3633.     AX = 4452h ("DR")
  3634.     CF set
  3635. Return: CF set if not DR-DOS
  3636.         AX = error code (see #0885 at AH=59h)
  3637.     CF clear if DR-DOS
  3638.         AX = version code
  3639.         AH = single-user/multiuser nature
  3640.         10h single-user
  3641.             AL = operating system version ID (see #0794)
  3642.         14h multiuser
  3643.             AL = operating system version ID (see #0793)
  3644.         DX modified (see note)
  3645. Notes:    the DR-DOS version is stored in the environment variable VER
  3646.     use this function if looking for single-user capabilities, AX=4451h
  3647.       if looking for multiuser; this call should never return multiuser
  3648.       values
  3649.     in DR-DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
  3650.       (reportedly, DH=00h when booting NWDOS7 from installation disks)
  3651.     Novell DOS 7 returns error code 0001h if SETVER 255.x is in effect for
  3652.       the calling program
  3653. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  3654.  
  3655. (Table 0794)
  3656. Values for Digital Research operating system version ID:
  3657.  60h    DOS Plus
  3658.  63h    DR-DOS 3.41
  3659.  64h    DR-DOS 3.42
  3660.  65h    DR-DOS 5.00
  3661.  67h    DR-DOS 6.00
  3662.  70h    PalmDOS
  3663.  71h    DR-DOS 6.0 March 1993 "business update"
  3664.  72h    Novell DOS 7.0
  3665. --------O-214454-----------------------------
  3666. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  3667.     AX = 4454h
  3668.     DS:DX -> password string (blank-padded to 8 characters)
  3669. Desc:    Specify the master password for accessing files.
  3670. SeeAlso: AX=4303h,AX=4414h
  3671. --------O-214456-----------------------------
  3672. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  3673.     AX = 4456h
  3674.     DL = control flags (see #0795)
  3675. Return: AL = previous value of state flags (see #0796)
  3676. Note:    DR-DOS 6.0 only checks bit 0 and ignores the rest of DL
  3677. SeeAlso: #0797
  3678.  
  3679. Bitfields for control flags:
  3680. Bit(s)    Description    (Table 0795)
  3681.  0    whose buffer: 0=application, 1=COMMAND.COM
  3682. ---Novell DOS 7---
  3683.  1    toggle HISTORY usage
  3684.  2    toggle INSERT state
  3685. Note:    only one bit at a time may be used
  3686.  
  3687. Bitfields for state flags:
  3688. Bit(s)    Description    (Table 0796)
  3689.  0    HISTORY buffer enabled
  3690.  1    INSERT enabled
  3691.  2-5    unused
  3692.  7    whose buffer: 0=application, 1=COMMAND.COM
  3693. --------O-214457-----------------------------
  3694. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  3695.     AX = 4457h
  3696.     DH = subfunction
  3697.         00h enable/disable SHARE
  3698.         DL = 00h disable
  3699.            = 01h enable
  3700.            else Return: AX = ???
  3701.         01h get HILOAD status
  3702.         Return: AX = status
  3703.                 0000h off
  3704.                 0001h on
  3705.         02h set HILOAD status
  3706.         DL = new state (00h off, 01h on)
  3707.         Return: AX = ???
  3708.         other
  3709.         Return: AX = ???
  3710. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0; it does not seem
  3711.       to be supported by Novell DOS 7
  3712. SeeAlso: AX=4457h/DX=FFFFh
  3713. --------O-214457DXFFFF-----------------------
  3714. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  3715.     AX = 4457h
  3716.     DX = FFFFh
  3717. Return: AX = SHARE status
  3718. SeeAlso: INT 2F/AX=1000h
  3719. --------O-214458-----------------------------
  3720. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  3721.     AX = 4458h
  3722. Return: ES:BX -> internal variable table (see #0797,#0798)
  3723.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0, 0FE4h for
  3724.           Novell DOS 7)
  3725. SeeAlso: AX=4452h
  3726.  
  3727. Format of DR-DOS 5.0-6.0 internal variable table:
  3728. Offset    Size    Description    (Table 0797)
  3729.  00h    WORD    ???
  3730.  02h    WORD    segment of ???
  3731.  04h    WORD    offset within DOS data segment of history control structure
  3732.           for COMMAND.COM history buffer (see #0799)
  3733.  06h    WORD    offset within DOS data segment of history control structure
  3734.           for application history buffer (see #0799)
  3735.  08h    BYTE    initial history state flags (see #0796)
  3736.  09h  2 BYTEs    ???
  3737.  0Bh    WORD    KB of extended memory at startup
  3738.  0Dh    BYTE    number of far jump entry points
  3739.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see #0800)
  3740.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  3741.           memory block (see #0801) or 0000h if none; segment is FFFFh
  3742.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  3743.           or 0000h if already used
  3744. ---DR-DOS 6.0---
  3745.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  3746.         memory block (see #0801) or 0000h if none; segment is FFFFh
  3747.  16h  8 BYTEs    ???
  3748.  1Eh    WORD    offset in DOS data segment of full COUNTRY.SYS filename
  3749.  20h  8 BYTEs    ???
  3750.  28h    WORD    offset in DOS data segment of SHARE hook table
  3751.  2Ah  2 BYTEs    ???
  3752.  2Ch    WORD    offset in DOS data segment of far pointer to INT 2F/AX=1000h
  3753.           handler
  3754. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  3755.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  3756.       called from CONFIG.SYS. The word is set to zero later when the area
  3757.       is copied to the COMMAND.COM environment space.  This allows
  3758.       CONFIG.SYS to pass information to AUTOEXEC.BAT.
  3759.  
  3760. Format of Novell DOS 7 internal variable table:
  3761. Offset    Size    Description    (Table 0798)
  3762.  00h    ???
  3763.  1Eh    WORD    offset of COUNTRY.SYS filename
  3764.  42h 16 DWORDs    pointers to ??? entry points
  3765.     ???
  3766.  
  3767. Format of history control structure:
  3768. Offset    Size    Description    (Table 0799)
  3769.  00h    WORD    segment of buffer
  3770.  02h    WORD    size of buffer in bytes
  3771.  04h    WORD    ???
  3772.  
  3773. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  3774. Offset    Size    Description    (Table 0800)
  3775.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  3776.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  3777.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  3778.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22 (RETF)
  3779.  14h  5 BYTEs    far jump to kernel entry point for INT 23 (RETF)
  3780.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  3781.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  3782.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  3783.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  3784.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  3785.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  3786.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  3787.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  3788.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  3789.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  3790.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  3791. Notes:    all of these entry points are indirected through this jump table
  3792.       to allow the kernel to be relocated into high memory while leaving
  3793.       the actual entry addresses in low memory for maximum compatibility
  3794.     some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
  3795.       as COMMAND.COM is loaded, and return immediately to the caller, some
  3796.       returning an error code (the original handler for INT 2F returns
  3797.       AL=03h [fail]).
  3798.  
  3799. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  3800. Offset    Size    Description    (Table 0801)
  3801.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  3802.  02h    WORD    size of this block in bytes (at least 10h)
  3803.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  3804.         00h system
  3805.         01h KEYB
  3806.         02h NLSFUNC
  3807.         03h SHARE
  3808.         04h TaskMAX
  3809.         05h COMMAND
  3810.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  3811.           hooks interrupts using segment FFFEh instead FFFFh.
  3812. --------O-214459-----------------------------
  3813. INT 21 - DR MultiUser DOS 5.0 - API
  3814.     AX = 4459h
  3815.     CL = function (see #2602 at INT E0"CP/M")
  3816.     DS,DX = parameters
  3817. Notes:    DR-DOS 5.0 and Novell DOS 7 return CF set and AX=0001h
  3818.     this API is also available on INT E0
  3819. SeeAlso: AX=4452h,INT E0"CP/M"
  3820. --------N-2144E0-----------------------------
  3821. INT 21 U - Sun PC-NFS - API???
  3822.     AX = 44E0h
  3823.     DS:DX -> ???
  3824.     SS:BP -> stack frame (see #0802)
  3825. Return: ???
  3826. Note:    this function is also supported by Beame&Whiteside's BWPCNFS shim; the
  3827.       description presented here was derived from that shim
  3828.  
  3829. Format of PC-NFS stack frame:
  3830. Offset    Size    Description    (Table 0802)
  3831.  00h    WORD    -> previous stack frame
  3832.  02h    DWORD    return address
  3833. --------d-2144FFBXFFFF-----------------------
  3834. INT 21 U - NewSpace - ???
  3835.     AX = 44FFh
  3836.     BX = FFFFh
  3837.     DX = ???
  3838. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3839.       all files as they are written and decompresses them as they are read
  3840. SeeAlso: AX=4414h/BX=FFFFh
  3841. --------D-2145-------------------------------
  3842. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  3843.     AH = 45h
  3844.     BX = file handle
  3845. Return: CF clear if successful
  3846.         AX = new handle
  3847.     CF set on error
  3848.         AX = error code (04h,06h) (see #0885 at AH=59h)
  3849. Notes:    moving file pointer for either handle will also move it for the other,
  3850.       because both will refer to the same system file table
  3851.     for DOS versions prior to 3.3, file writes may be forced to disk by
  3852.       duplicating the file handle and closing the duplicate
  3853. SeeAlso: AH=3Dh,AH=46h
  3854. --------D-2146-------------------------------
  3855. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  3856.     AH = 46h
  3857.     BX = file handle
  3858.     CX = file handle to become duplicate of first handle
  3859. Return: CF clear if successful
  3860.     CF set on error
  3861.         AX = error code (04h,06h) (see #0885 at AH=59h)
  3862. Notes:    closes file with handle CX if it is still open
  3863.     DOS 3.30 hangs if BX=CX on entry
  3864.     moving file pointer for either handle will also move it for the other,
  3865.       because both will refer to the same system file table
  3866. SeeAlso: AH=3Dh,AH=45h
  3867. --------D-2147-------------------------------
  3868. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  3869.     AH = 47h
  3870.     DL = drive number (00h = default, 01h = A:, etc)
  3871.     DS:SI -> 64-byte buffer for ASCIZ pathname
  3872. Return: CF clear if successful
  3873.         AX = 0100h (undocumented)
  3874.     CF set on error
  3875.         AX = error code (0Fh) (see #0885 at AH=59h)
  3876. Notes:    the returned path does not include a drive or the initial backslash
  3877.     many Microsoft products for Windows rely on AX being 0100h on success
  3878.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  3879. SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
  3880. --------D-2148-------------------------------
  3881. INT 21 - DOS 2+ - ALLOCATE MEMORY
  3882.     AH = 48h
  3883.     BX = number of paragraphs to allocate
  3884. Return: CF clear if successful
  3885.         AX = segment of allocated block
  3886.     CF set on error
  3887.         AX = error code (07h,08h) (see #0885 at AH=59h)
  3888.         BX = size of largest available block
  3889. Notes:    DOS 2.1-6.0 coalesces free blocks while scanning for a block to
  3890.       allocate
  3891.     .COM programs are initially allocated the largest available memory
  3892.       block, and should free some memory with AH=49h before attempting any
  3893.       allocations
  3894.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  3895.       near pointer to the allocated block on a successful return
  3896. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  3897. --------D-2149-------------------------------
  3898. INT 21 - DOS 2+ - FREE MEMORY
  3899.     AH = 49h
  3900.     ES = segment of block to free
  3901. Return: CF clear if successful
  3902.     CF set on error
  3903.         AX = error code (07h,09h) (see #0885 at AH=59h)
  3904. Notes:    apparently never returns an error 07h, despite official docs; DOS 2.1+
  3905.       code contains only an error 09h exit
  3906.     DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
  3907.       freed, only when a block is allocated or resized
  3908.     the code for this function is identical in DOS 2.1-6.0 except for
  3909.       calls to start/end a critical section in DOS 3.0+
  3910. SeeAlso: AH=48h,AH=4Ah
  3911. --------D-214A-------------------------------
  3912. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  3913.     AH = 4Ah
  3914.     BX = new size in paragraphs
  3915.     ES = segment of block to resize
  3916. Return: CF clear if successful
  3917.     CF set on error
  3918.         AX = error code (07h,08h,09h) (see #0885 at AH=59h)
  3919.         BX = maximum paragraphs available for specified memory block
  3920. Notes:    under DOS 2.1-6.0, if there is insufficient memory to expand the block
  3921.       as much as requested, the block will be made as large as possible
  3922.     DOS 2.1-6.0 coalesces any free blocks immediately following the block
  3923.       to be resized
  3924. SeeAlso: AH=48h,AH=49h,AH=83h
  3925. --------v-214A--BX00B6-----------------------
  3926. INT 21 - VIRUS???
  3927.     AH = 4Ah
  3928.     BX = 00B6h
  3929.     ES = CX
  3930. Return: ???
  3931. Note:    this call is intercepted by the Search&Destroy SDRes v27.03 bundled
  3932.       with Novell DOS 7, and is presumably some virus's installation check
  3933. SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=FFFFh,AH=D2h"VIRUS"
  3934. --------v-214A--BXFFFF-----------------------
  3935. INT 21 - VIRUS???
  3936.     AH = 4Ah
  3937.     BX = FFFFh
  3938.     CX = 0568h
  3939.     SI = 0129h
  3940.     DI = 0000h
  3941.     ES = BP
  3942. Return: ???
  3943. Note:    this call is intercepted by the Search&Destroy SDRes v27.03 bundled
  3944.       with Novell DOS 7, and is presumably some virus's installation check
  3945. SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=00B6h
  3946. --------D-214B-------------------------------
  3947. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  3948.     AH = 4Bh
  3949.     AL = type of load
  3950.         00h load and execute
  3951.         01h load but do not execute
  3952.         03h load overlay (see #0804)
  3953.         04h load and execute in background (European MS-DOS 4.0 only)
  3954.         "Exec & Go" (see also AH=80h)
  3955.     DS:DX -> ASCIZ program name (must include extension)
  3956.     ES:BX -> parameter block (see #0803,#0804,#0805)
  3957.     CX = mode (subfunction 04h only)
  3958.         0000h child placed in zombie mode after termination
  3959.         0001h child's return code discarded on termination
  3960. Return: CF clear if successful
  3961.         BX,DX destroyed
  3962.         if subfunction 01h, process ID set to new program's PSP; get with
  3963.         INT 21/AH=62h
  3964.     CF set on error
  3965.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see #0885 at AH=59h)
  3966. Notes:    DOS 2.x destroys all registers, including SS:SP
  3967.     under ROM-based DOS, if no disk path characters (colons or slashes)
  3968.       are included in the program name, the name is searched for in the
  3969.       ROM module headers (see #0808) before searching on disk
  3970.     for functions 00h and 01h, the calling process must ensure that there
  3971.       is enough unallocated memory available; if necessary, by releasing
  3972.       memory with AH=49h or AH=4Ah
  3973.     for function 01h, the AX value to be passed to the child program is put
  3974.       on top of the child's stack
  3975.     for function 03h, DOS assumes that the overlay is being loaded into
  3976.       memory allocated by the caller
  3977.     function 01h was undocumented prior to the release of DOS 5.0
  3978.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  3979.       block and return an error if an invalid value (such as an offset of
  3980.       FFFFh) is found
  3981.     background programs under European MS-DOS 4.0 must use the new
  3982.       executable format
  3983.     this function ignores the filename extension, instead checking the
  3984.       first two bytes of the file to determine whether there is a valid
  3985.       .EXE header (see #0807); if not, the file is assumed to be in .COM
  3986.       format.  If present, the file may be in any of several formats which
  3987.       are extensions of the original .EXE format (see #0806)
  3988.     .COM-format executables begin running with the following register
  3989.       values:
  3990.         AL = 00h if first FCB has valid drive letter, FFh if not
  3991.         AH = 00h if second FCB has valid drive letter, FFh if not
  3992.         CS,DS,ES,SS = PSP segment
  3993.         SP = offset of last word available in first 64K segment
  3994.         (note: AX is always 0000h under DESQview)
  3995.     old-format executables begin running with the following register
  3996.       values:
  3997.         AL = 00h if first FCB has valid drive letter, FFh if not
  3998.         AH = 00h if second FCB has valid drive letter, FFh if not
  3999.         DS,ES = PSP segment
  4000.         SS:SP as defined in .EXE header
  4001.         (note: AX is always 0000h under DESQview)
  4002.     new executables begin running with the following register values
  4003.         AX = environment segment
  4004.         BX = offset of command tail in environment segment
  4005.         CX = size of automatic data segment (0000h = 64K)
  4006.         ES,BP = 0000h
  4007.         DS = automatic data segment
  4008.         SS:SP = initial stack
  4009.       the command tail corresponds to an old executable's PSP:0081h and
  4010.       following, except that the 0Dh is turned into a NUL (00h); new
  4011.       format executables have no PSP
  4012.     under the FlashTek X-32 DOS extender, only function 00h is supported
  4013.       and the pointers are passed in DS:EDX and ES:EBX
  4014.     DR-DOS 6 always loads .EXE-format programs with no fixups and
  4015.       .COM-format programs starting with 9Ch 55h (PUSHF/PUSH BP) above the
  4016.       64K mark to avoid the EXEPACK bug, by extending the memory block
  4017.       containing the program's environment; this code is disabled if the
  4018.       name of the parent program as stored in the MCB is 'WIN'.
  4019. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  4020.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  4021.       file contains additional data after the actual overlay
  4022. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E,INT 60/DI=0604h
  4023.  
  4024. Format of EXEC parameter block for AL=00h,01h,04h:
  4025. Offset    Size    Description    (Table 0803)
  4026.  00h    WORD    segment of environment to copy for child process (copy caller's
  4027.           environment if 0000h)
  4028.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4029.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4030.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4031.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  4032.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  4033. SeeAlso: #0804,#0805
  4034.  
  4035. Format of EXEC parameter block for AL=03h:
  4036. Offset    Size    Description    (Table 0804)
  4037.  00h    WORD    segment at which to load overlay
  4038.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  4039. SeeAlso: #0803,#0805
  4040.  
  4041. Format of EXEC parameter block for FlashTek X-32:
  4042. Offset    Size    Description    (Table 0805)
  4043.  00h    PWORD    48-bit far pointer to environment string
  4044.  06h    PWORD    48-bit far pointer to command tail string
  4045. SeeAlso: #0803,#0804
  4046.  
  4047. (Table 0806)
  4048. Values for the executable types understood by various environments:
  4049.  MZ    old-style DOS executable (see #0807)
  4050.  NE    Windows or OS/2 1.x segmented ("new") executable (see #0809)
  4051.  LE    Windows virtual device driver (VxD) linear executable (see #0822)
  4052.  LX    variant of LE used in OS/2 2.x (see #0822)
  4053.  W3    Windows WIN386.EXE file; a collection of LE files
  4054.  PE    Win32 (Windows NT and Win32s) portable executable based on Unix COFF
  4055.  DL    HP 100LX/200LX system manager compliant executable (.EXM)
  4056.  MP    old PharLap .EXP (see #0832)
  4057.  P2    PharLap 286 .EXP (see #0833)
  4058.  P3    PharLap 386 .EXP (see #0833)
  4059.  
  4060. Format of .EXE file header:
  4061. Offset    Size    Description    (Table 0807)
  4062.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  4063.           (see also #0806)
  4064.  02h    WORD    number of bytes in last 512-byte page of executable
  4065.  04h    WORD    total number of 512-byte pages in executable (includes any
  4066.         partial last page)
  4067.  06h    WORD    number of relocation entries
  4068.  08h    WORD    header size in paragraphs
  4069.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  4070.         executable's size
  4071.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  4072.  0Eh    WORD    initial SS relative to start of executable
  4073.  10h    WORD    initial SP
  4074.  12h    WORD    checksum (one's complement of sum of all words in executable)
  4075.  14h    DWORD    initial CS:IP relative to start of executable
  4076.  18h    WORD    offset within header of relocation table
  4077.         40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  4078.  1Ah    WORD    overlay number (normally 0000h = main program)
  4079. ---new executable---
  4080.  1Ch  4 BYTEs    ???
  4081.  20h    WORD    behavior bits
  4082.  22h 26 BYTEs    reserved for additional behavior info
  4083.  3Ch    DWORD    offset of new executable (NE,LE,etc) header within disk file,
  4084.         or 00000000h if plain MZ executable
  4085. ---Borland TLINK---
  4086.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  4087.  1Eh    BYTE    signature FBh
  4088.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  4089.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  4090. ---ARJ self-extracting archive---
  4091.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  4092.         the first 1000 bytes of the file)
  4093. ---LZEXE 0.90 compressed executable---
  4094.  1Ch  4 BYTEs    signature "LZ09"
  4095. ---LZEXE 0.91 compressed executable---
  4096.  1Ch  4 BYTEs    signature "LZ91"
  4097. ---PKLITE compressed executable---
  4098.  1Ch    BYTE    minor version number
  4099.  1Dh    BYTE    bits 0-3: major version
  4100.         bit 4: extra compression
  4101.         bit 5: huge (multi-segment) file
  4102.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  4103. ---LHarc 1.x self-extracting archive---
  4104.  1Ch  4 BYTEs    unused???
  4105.  20h  3 BYTEs    jump to start of extraction code
  4106.  23h  2 BYTEs    ???
  4107.  25h 12 BYTEs    signature "LHarc's SFX "
  4108. ---LHA 2.x self-extracting archive---
  4109.  1Ch  8 BYTEs    ???
  4110.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  4111. ---TopSpeed C 3.0 CRUNCH compressed file---
  4112.  1Ch    DWORD    018A0001h
  4113.  20h    WORD    1565h
  4114. ---PKARCK 3.5 self-extracting archive---
  4115.  1Ch    DWORD    00020001h
  4116.  20h    WORD    0700h
  4117. ---BSA (Soviet archiver) self-extracting archive---
  4118.  1Ch    WORD    000Fh
  4119.  1Eh    BYTE    A7h
  4120. ---LARC self-extracting archive---
  4121.  1Ch  4 BYTEs    ???
  4122.  20h 11 BYTEs    "SFX by LARC "
  4123. ---LH self-extracting archive---
  4124.  1Ch  8 BYTEs    ???
  4125.  24h  8 BYTEs    "LH's SFX "
  4126. ---other linkers---
  4127.  1Ch    var    optional information
  4128. ---
  4129.   N   N DWORDs    relocation items
  4130. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  4131.       versions of the MS linker set it that way
  4132.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  4133.       program is loaded as high in memory as possible (DOS only checks
  4134.       the maximum allocation, however)
  4135.     the maximum allocation is set to FFFFh by default
  4136.     additional data may be contained in the file beyond the end of the
  4137.       load image described by the .EXE header; this data may be overlays,
  4138.       the actual executable for newer-format executables, or debugging
  4139.       information (see #0813,#0837)
  4140.  
  4141. Format of ROM Module Header:
  4142. Offset    Size    Description    (Table 0808)
  4143.  00h  2 BYTEs    ROM signature 55h, AAh
  4144.  02h    BYTE    size of ROM in 512-byte blocks
  4145.  03h  3 BYTEs    POST initialization entry point (near JMP instruction)
  4146.  06h    ROM Program Name List [array]
  4147.     Offset    Size    Description
  4148.      00h    BYTE    length of ROM program's name (00h if end of name list)
  4149.      01h  N BYTEs    program name
  4150.      N+1  3 BYTEs    program entry point (near JMP instruction)
  4151.  
  4152. Format of new executable header:
  4153. Offset    Size    Description    (Table 0809)
  4154.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  4155.  02h  2 BYTEs    linker version (major, then minor)
  4156.  04h    WORD    offset from start of this header to entry table (see #0816)
  4157.  06h    WORD    length of entry table in bytes
  4158.  08h    DWORD    file load CRC (0 in Borland's TPW)
  4159.  0Ch    BYTE    program flags (see #0810)
  4160.  0Dh    BYTE    application flags (see #0811)
  4161.  0Eh    WORD    auto data segment index
  4162.  10h    WORD    initial local heap size
  4163.  12h    WORD    initial stack size (added to data seg, 0000h if SS <> DS)
  4164.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  4165.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  4166.         if SS=automatic data segment and SP=0000h, the stack pointer is
  4167.           set to the top of the automatic data segment, just below the
  4168.           local heap
  4169.  1Ch    WORD    segment count
  4170.  1Eh    WORD    module reference count
  4171.  20h    WORD    length of nonresident names table in bytes
  4172.  22h    WORD    offset from start of this header to segment table (see #0814)
  4173.  24h    WORD    offset from start of this header to resource table
  4174.  26h    WORD    offset from start of this header to resident names table
  4175.  28h    WORD    offset from start of this header to module reference table
  4176.  2Ah    WORD    offset from start of this header to imported names table
  4177.         (array of counted strings, terminated with a string of length
  4178.           00h)
  4179.  2Ch    DWORD    offset from start of file to nonresident names table
  4180.  30h    WORD    count of moveable entry point listed in entry table
  4181.  32h    WORD    file alignment size shift count
  4182.         0 is equivalent to 9 (default 512-byte pages)
  4183.  34h    WORD    number of resource table entries
  4184.  36h    BYTE    target operating system
  4185.         00h unknown
  4186.         01h OS/2
  4187.         02h Windows
  4188.         03h European MS-DOS 4.x
  4189.         04h Windows 386
  4190.         05h BOSS (Borland Operating System Services)
  4191.         81h PharLap 286|DOS-Extender, OS/2
  4192.         82h PharLap 286|DOS-Extender, Windows
  4193.  37h    BYTE    other EXE flags (see #0812)
  4194.  38h    WORD    offset to return thunks or start of gangload area
  4195.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  4196.  3Ch    WORD    minimum code swap area size
  4197.  3Eh  2 BYTEs    expected Windows version (minor version first)
  4198. Note:    this header is documented in detail in the Windows 3.1 SDK Programmer's
  4199.       Reference, Vol 4.
  4200.  
  4201. Bitfields for new executable program flags:
  4202. Bit(s)    Description    (Table 0810)
  4203.  0-1    DGROUP type
  4204.       0 = none
  4205.       1 = single shared
  4206.       2 = multiple (unshared)
  4207.       3 = (null)
  4208.  2    global initialization
  4209.  3    protected mode only
  4210.  4    8086 instructions
  4211.  5    80286 instructions
  4212.  6    80386 instructions
  4213.  7    80x87 instructions
  4214.  
  4215. Bitfields for new executable application flags:
  4216. Bit(s)    Description    (Table 0811)
  4217.  0-2    application type
  4218.     001 full screen (not aware of Windows/P.M. API)
  4219.     010 compatible with Windows/P.M. API
  4220.     011 uses Windows/P.M. API
  4221.  3    is a Family Application (OS/2)
  4222.  5    0=executable, 1=errors in image
  4223.  6    non-conforming program (valid stack is not maintained)
  4224.  7    DLL or driver rather than application
  4225.     (SS:SP info invalid, CS:IP points at FAR init routine called with
  4226.       AX=module handle which returns AX=0000h on failure, AX nonzero on
  4227.       successful initialization)
  4228.  
  4229. Bitfields for other new .EXE flags:
  4230. Bit(s)    Description    (Table 0812)
  4231.  0    supports long filenames
  4232.  1    2.X protected mode
  4233.  2    2.X proportional font
  4234.  3    gangload area
  4235.  
  4236. Format of Codeview trailer (at end of executable):
  4237. Offset    Size    Description    (Table 0813)
  4238.  00h    WORD    signature 4E42h ('NB')
  4239.  02h    WORD    Microsoft debug info version number
  4240.  04h    DWORD    Codeview header offset
  4241. SeeAlso: #0837
  4242.  
  4243. Format of new executable segment table record:
  4244. Offset    Size    Description    (Table 0814)
  4245.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  4246.  02h    WORD    length of image in file (0000h = 64K)
  4247.  04h    WORD    segment attributes (see #0815)
  4248.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  4249. Note:    the first segment table entry is entry number 1
  4250. SeeAlso: #0817
  4251.  
  4252. Bitfields for segment attributes:
  4253. Bit(s)    Description    (Table 0815)
  4254.  0    data segment rather than code segment
  4255.  1    unused???
  4256.  2    real mode
  4257.  3    iterated
  4258.  4    movable
  4259.  5    sharable
  4260.  6    preloaded rather than demand-loaded
  4261.  7    execute-only (code) or read-only (data)
  4262.  8    relocations (directly following code for this segment)
  4263.  9    debug info present
  4264.  10,11    80286 DPL bits
  4265.  12    discardable
  4266.  13-15    discard priority
  4267.  
  4268. Format of new executable entry table item (list):
  4269. Offset    Size    Description    (Table 0816)
  4270.  00h    BYTE    number of entry points (00h if end of entry table list)
  4271.  01h    BYTE    segment number (00h if end of entry table list)
  4272.  02h 3N BYTEs    entry records
  4273.         Offset    Size    Description
  4274.          00h    BYTE    flags
  4275.                 bit 0: exported
  4276.                 bit 1: single data
  4277.                 bits 2-7: unused???
  4278.          01h    WORD    offset within segment
  4279.  
  4280. Format of new executable relocation data (immediately follows segment image):
  4281. Offset    Size    Description    (Table 0817)
  4282.  00h    WORD    number of relocation items
  4283.  02h 8N BYTEs    relocation items
  4284.         Offset    Size    Description
  4285.          00h    BYTE    relocation type
  4286.                 00h LOBYTE
  4287.                 02h BASE
  4288.                 03h PTR
  4289.                 05h OFFS
  4290.                 0Bh PTR48
  4291.                 0Dh OFFS32
  4292.          01h    BYTE    flags
  4293.                 bit 2: additive
  4294.          02h    WORD    offset within segment
  4295.          04h    WORD    target address segment
  4296.          06h    WORD    target address offset
  4297. SeeAlso: #0814,#0818
  4298.  
  4299. Format of new executable resource data:
  4300. Offset    Size    Description    (Table 0818)
  4301.  00h    WORD    alignment shift count for resource data
  4302.  02h  N RECORDs resources
  4303.     Format of resource record:
  4304.     Offset    Size    Description
  4305.      00h    WORD    type ID
  4306.             0000h if end of resource records
  4307.             >= 8000h if integer type
  4308.             else offset from start of resource table to type string
  4309.      02h    WORD    number of resources of this type
  4310.      04h    DWORD    reserved for runtime use
  4311.      08h  N Resources (see #0819)
  4312. Note:    resource type and name strings are stored immediately following the
  4313.       resource table, and are not null-terminated
  4314. SeeAlso: #0819
  4315.  
  4316. Format of new executable resource entry:
  4317. Offset    Size    Description    (Table 0819)
  4318.  00h    WORD    offset in alignment units from start of file to contents of
  4319.         the resource data
  4320.  02h    WORD    length of resource image in bytes
  4321.  04h    WORD    flags
  4322.         bit 4: moveable
  4323.         bit 5: shareable
  4324.         bit 6: preloaded
  4325.  06h    WORD    resource ID
  4326.         >= 8000h if integer resource
  4327.         else offset from start of resource table to resource string
  4328.  08h    DWORD    reserved for runtime use
  4329. Notes:    resource type and name strings are stored immediately following the
  4330.       resource table, and are not null-terminated
  4331.     strings are counted strings, with a string of length 0 indicating the
  4332.       end of the resource table
  4333. SeeAlso: #0818,#0820
  4334.  
  4335. Format of new executable module reference table [one bundle of entries]:
  4336. Offset    Size    Description    (Table 0820)
  4337.  00h    BYTE    number of records in this bundle (00h if end of table)
  4338.  01h    BYTE    segment indicator
  4339.         00h unused
  4340.         FFh movable segment, segment number is in entry
  4341.         else segment number of fixed segment
  4342.  02h  N RECORDs
  4343.     Format of segment record
  4344.     Offset    Size    Description
  4345.      00h    BYTE    flags
  4346.             bit 0: entry is exported
  4347.             bit 1: entry uses global (shared) data
  4348.             bits 7-3: number of parameter words
  4349.     ---fixed segment---
  4350.      01h    WORD    offset
  4351.     ---moveable segment---
  4352.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  4353.      03h    BYTE    segment number
  4354.      05h    WORD    offset
  4355. Note:    table entries are numbered starting from 1
  4356. SeeAlso: #0821
  4357.  
  4358. Format of new executable resident/nonresident name table entry:
  4359. Offset    Size    Description    (Table 0821)
  4360.  00h    BYTE    length of string (00h if end of table)
  4361.  01h  N BYTEs    ASCII text of string
  4362.  N+1    WORD    ordinal number (index into entry table)
  4363. Notes:    the first string in the resident name table is the module name; the
  4364.       first entry in the nonresident name table is the module description
  4365.     the strings are case-sensitive; if the executable was linked with
  4366.       /IGNORECASE, all strings are in uppercase
  4367. SeeAlso: #0820
  4368.  
  4369. Format of Linear Executable (enhanced mode executable) header:
  4370. Offset    Size    Description    (Table 0822)
  4371.  00h  2 BYTEs    "LE" (4Ch 45h) signature (Windows)
  4372.         "LX" (4Ch 58h) signature (OS/2)
  4373.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  4374.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  4375.  04h    DWORD    executable format level
  4376.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  4377.         01h Intel 80286 or upwardly compatible
  4378.         02h Intel 80386 or upwardly compatible
  4379.         03h Intel 80486 or upwardly compatible
  4380.         04h Intel Pentium (80586) or upwardly compatible
  4381.         20h Intel i860 (N10) or compatible
  4382.         21h Intel "N11" or compatible
  4383.         40h MIPS Mark I (R2000, R3000) or compatible
  4384.         41h MIPS Mark II (R6000) or compatible
  4385.         42h MIPS Mark III (R4000) or compatible
  4386.  0Ah    WORD    target operating system
  4387.         01h OS/2
  4388.         02h Windows
  4389.         03h European DOS 4.0
  4390.         04h Windows 386
  4391.  0Ch    DWORD    module version
  4392.  10h    DWORD    module type (see #0823)
  4393.  14h    DWORD    number of memory pages
  4394.  18h    Initial CS:EIP
  4395.     DWORD    object number
  4396.     DWORD    offset
  4397.  20h    Initial SS:ESP
  4398.     DWORD    object number
  4399.     DWORD    offset
  4400.  28h    DWORD    memory page size
  4401.  2Ch    DWORD    (Windows LE) bytes on last page
  4402.         (OS/2 LX) page offset shift count
  4403.  30h    DWORD    fixup section size
  4404.  34h    DWORD    fixup section checksum
  4405.  38h    DWORD    loader section size
  4406.  3Ch    DWORD    loader section checksum
  4407.  40h    DWORD    offset of object table (see #0824)
  4408.  44h    DWORD    object table entries
  4409.  48h    DWORD    object page map table offset (see #0826)
  4410.  4Ch    DWORD    object iterate data map offset
  4411.  50h    DWORD    resource table offset
  4412.  54h    DWORD    resource table entries
  4413.  58h    DWORD    resident names table offset (see #0827)
  4414.  5Ch    DWORD    entry table offset (see #0828,#0829)
  4415.  60h    DWORD    module directives table offset
  4416.  64h    DWORD    Module Directives entries
  4417.  68h    DWORD    Fixup page table offset
  4418.  6Ch    DWORD    Fixup record table offset (see #0831)
  4419.  70h    DWORD    imported modules name table offset
  4420.  74h    DWORD    imported modules count
  4421.  78h    DWORD    imported procedures name table offset
  4422.  7Ch    DWORD    per-page checksum table offset
  4423.  80h    DWORD    data pages offset
  4424.  84h    DWORD    preload page count
  4425.  88h    DWORD    non-resident names table offset
  4426.  8Ch    DWORD    non-resident names table length
  4427.  90h    DWORD    non-resident names checksum
  4428.  94h    DWORD    automatic data object
  4429.  98h    DWORD    debug information offset
  4430.  9Ch    DWORD    debug information length
  4431.  A0h    DWORD    preload instance pages number
  4432.  A4h    DWORD    demand instance pages number
  4433.  A8h    DWORD    extra heap allocation
  4434.  ACh 12 BYTEs    reserved
  4435.  B8h    DWORD    offset of VERSIONINFO resource (MS-Windows VxD only)
  4436.  BCh    DWORD    pointer to ??? (dynamically-loadable VxDs only???)
  4437.  C0h    WORD    device ID (MS-Windows VxD only)
  4438.  C2h    WORD    DDK version (MS-Windows VxD only)
  4439. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  4440.  
  4441. Bitfields for Linear Executable module type:
  4442. Bit(s)    Description    (Table 0823)
  4443.  2    initialization (only for DLLs) 0 = global, 1 = per-process
  4444.  4    no internal fixups in executable image
  4445.  5    no external fixups in executable image
  4446.  8-10    API compatibility
  4447.     0 = unknown
  4448.     1 = incompatible with PM windowing \
  4449.     2 = compatible with PM windowing    > (only for
  4450.     3 = uses PM windowing API       /    programs)
  4451.  13    module not loadable (only for programs)
  4452.  15-17    module type
  4453.     000 program
  4454.     001 library (DLL)
  4455.     011 protected memory library module
  4456.     100 physical device driver
  4457.     110 virtual device driver
  4458.  30    per-process library termination
  4459.     (requires valid CS:EIP, can't be set for .EXE)
  4460.  
  4461. Format of object table entry:
  4462. Offset    Size    Description    (Table 0824)
  4463.  00h    DWORD    virtual size in bytes
  4464.  04h    DWORD    relocation base address
  4465.  08h    DWORD    object flags (see #0825)
  4466.  0Ch    DWORD    page map index
  4467.  10h    DWORD    page map entries (see #0826)
  4468.  14h  4 BYTEs    reserved??? (apparently always zeros)
  4469.  
  4470. Bitfields for object flags:
  4471. Bit(s)    Description    (Table 0825)
  4472.  0    readable
  4473.  1    writable
  4474.  2    executable
  4475.  3    resource
  4476.  4    discardable
  4477.  5    shared
  4478.  6    preloaded
  4479.  7    invalid
  4480.  8-9    type
  4481.     00 normal
  4482.     01 zero-filled
  4483.     10 resident
  4484.     11 resident and contiguous
  4485.  10    resident and long-lockable
  4486.  11    reserved
  4487.  12    16:16 alias required
  4488.  13    "BIG" (Huge: 32-bit)
  4489.  14    conforming
  4490.  15    "OBJECT_I/O_PRIVILEGE_LEVEL"
  4491.  16-31    reserved
  4492.  
  4493. Format of object page map table entry:
  4494. Offset    Size    Description    (Table 0826)
  4495.  00h    BYTE    ??? (usually 00h)
  4496.  01h    WORD    (big-endian) index to fixup table
  4497.         0000h if no relocation info
  4498.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  4499.  
  4500. Format of resident names table entry:
  4501. Offset    Size    Description    (Table 0827)
  4502.  00h    BYTE    length of name
  4503.  01h  N BYTEs    name
  4504.  N+1  3 BYTEs    ???
  4505.  
  4506. Format of LE linear executable entry table:
  4507. Offset    Size    Description    (Table 0828)
  4508.  00h    BYTE    number of entries in table
  4509.  01h 10 BYTEs per entry
  4510.         Offset    Size    Description
  4511.          00h    BYTE    bit flags
  4512.                 bit 0: non-empty bundle
  4513.                 bit 1: 32-bit entry
  4514.          01h    WORD    object number
  4515.          03h    BYTE    entry type flags
  4516.                 bit 0: exported
  4517.                 bit 1: uses single data rather than instance
  4518.                 bit 2: reserved
  4519.                 bits 3-7: number of stack parameters
  4520.          04h    DWORD    offset of entry point
  4521.          08h  2 BYTEs    ???
  4522. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  4523.       and do not contain the remaining nine bytes
  4524.  
  4525. Format of LX linear executable entry table [array]:
  4526. Offset    Size    Description    (Table 0829)
  4527.  00h    BYTE    number of bundles following (00h = end of entry table)
  4528.  01h    BYTE    bundle type
  4529.         00h empty
  4530.         01h 16-bit entry
  4531.         02h 286 callgate entry
  4532.         03h 32-bit entry
  4533.         04h forwarder entry
  4534.         bit 7 set if additional parameter typing information is present
  4535. ---bundle type 00h---
  4536.  no additional fields
  4537. ---bundle type 01h---
  4538.  02h    WORD    object number
  4539.  04h    BYTE    entry flags
  4540.         bit 0: exported
  4541.         bits 7-3: number of stack parameters
  4542.  05h    WORD    offset of entry point in object (shifted by page size shift)
  4543. ---bundle type 02h---
  4544.  02h    WORD    object number
  4545.  04h    BYTE    entry flags
  4546.         bit 0: exported
  4547.         bits 7-3: number of stack parameters
  4548.  05h    WORD    offset of entry point in object
  4549.  07h    WORD    reserved for callgate selector (used by loader)
  4550. ---bundle type 03h---
  4551.  02h    WORD    object number
  4552.  04h    BYTE    entry flags
  4553.         bit 0: exported
  4554.         bits 7-3: number of stack parameters
  4555.  05h    DWORD    offset of entry point in object
  4556. ---bundle type 04h---
  4557.  02h    WORD    reserved
  4558.  04h    BYTE    forwarder flags
  4559.         bit 0: import by ordinal
  4560.         bits 7-1 reserved
  4561.  05h    WORD    module ordinal
  4562.         (forwarder's index into Import Module Name table)
  4563.  07h    DWORD    procedure name offset or import ordinal number
  4564. Note:    all fields after the first two bytes are repeated N times
  4565.  
  4566. Bitfields for linear executable fixup type:
  4567. Bit(s)    Description    (Table 0830)
  4568.  7    ordinal is BYTE rather than WORD
  4569.  6    16-rather than 8-object number/module ordinal
  4570.  5    addition with DWORD rather than WORD
  4571.  4    relocation info has size with new two bytes at end
  4572.  3    reserved (0)
  4573.  2    set if add to destination, clear to replace destination
  4574.  1-0    type
  4575.     00 internal fixup
  4576.     01 external fixup, imported by ordinal
  4577.     10 external fixup, imported by name
  4578.     11 internal fixup via entry table
  4579.  
  4580. Format of linear executable fixup record:
  4581. Offset    Size    Description    (Table 0831)
  4582.  00h    BYTE    type
  4583.         bits 7-4: modifier (0001 single, 0011 multiple)
  4584.         bits 3-0: type
  4585.             0000 byte offset
  4586.             0010 word segment
  4587.             0011 16-bit far pointer (DWORD)
  4588.             0101 16-bit offset
  4589.             0110 32-bit far pointer (PWORD)
  4590.             0111 32-bit offset
  4591.             1000 near call or jump, WORD/DWORD based on seg attrib
  4592.  01h    BYTE    linear executable fixup type (see #0830)
  4593. ---if single type---
  4594.  02h    WORD    offset within page
  4595.  04h    relocation information
  4596.     ---internal fixup---
  4597.     BYTE    object number
  4598.     ---external,ordinal---
  4599.     BYTE    one-based module number in Import Module table
  4600.     BYTE/WORD ordinal number
  4601.     WORD/DWORD value to add (only present if modifier bit 4 set)
  4602.     ---external,name---
  4603.     BYTE    one-based module number in Import Module table
  4604.     WORD    offset in Import Procedure names
  4605.     WORD/DWORD value to add (only present if modifier bit 4 set)
  4606. ---if multiple type---
  4607.  02h    BYTE    number of items
  4608.  03h    var    relocation info as for "single" type (see above)
  4609.       N WORDs    offsets of items to relocate
  4610.  
  4611. Format of old Phar Lap .EXP file header:
  4612. Offset    Size    Description    (Table 0832)
  4613.  00h  2 BYTEs    "MP" (4Dh 50h) signature
  4614.  02h    WORD    remainder of image size / page size (page size = 512h)
  4615.  04h    WORD    size of image in pages
  4616.  06h    WORD    number of relocation items
  4617.  08h    WORD    header size in paragraphs
  4618.  0Ah    WORD    minimum number of extra 4K pages to be allocated at the end
  4619.           of program, when it is loaded
  4620.  0Ch    WORD    maximum number of extra 4K pages to be allocated at the end
  4621.           of program, when it is loaded
  4622.  0Eh    DWORD    initial ESP
  4623.  12h    WORD    word checksum of file
  4624.  14h    DWORD    initial EIP
  4625.  18h    WORD    offset of first relocation item
  4626.  1Ah    WORD    overlay number
  4627.  1Ch    WORD    ??? (wants to be 1)
  4628. SeeAlso: #0833
  4629.  
  4630. Format of new Phar Lap .EXP file header:
  4631. Offset    Size    Description    (Table 0833)
  4632.  00h  2 BYTEs    signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
  4633.  02h    WORD    level (01h flat-model file, 02h multisegmented file)
  4634.  04h    WORD    header size
  4635.  06h    DWORD    file size in bytes
  4636.  0Ah    WORD    checksum
  4637.  0Ch    DWORD    offset of run-time parameters within file (see #0835)
  4638.  10h    DWORD    size of run-time parameters in bytes
  4639.  14h    DWORD    offset of relocation table within file
  4640.  18h    DWORD    size of relocation table in bytes
  4641.  1Ch    DWORD    offset of segment information table within file (see #0834)
  4642.  20h    DWORD    size of segment information table in bytes
  4643.  24h    WORD    size of segment information table entry in bytes
  4644.  26h    DWORD    offset of load image within file
  4645.  2Ah    DWORD    size of load image on disk
  4646.  2Eh    DWORD    offset of symbol table within file
  4647.  32h    DWORD    size of symbol table in bytes
  4648.  36h    DWORD    offset of GDT within load image
  4649.  3Ah    DWORD    size of GDT in bytes
  4650.  3Eh    DWORD    offset of LDT within load image
  4651.  42h    DWORD    size of LDT in bytes
  4652.  46h    DWORD    offset of IDT within load image
  4653.  4Ah    DWORD    size of IDT in bytes
  4654.  4Eh    DWORD    offset of TSS within load image
  4655.  52h    DWORD    size of TSS in bytes
  4656.  56h    DWORD    minimum number of extra bytes to be allocated at end of program
  4657.         (level 1 executables only)
  4658.  5Ah    DWORD    maximum number of extra bytes to be allocated at end of program
  4659.         (level 1 executables only)
  4660.  5Eh    DWORD    base load offset (level 1 executables only)
  4661.  62h    DWORD    initial ESP
  4662.  66h    WORD    initial SS
  4663.  68h    DWORD    initial EIP
  4664.  6Ch    WORD    initial CS
  4665.  6Eh    WORD    initial LDT
  4666.  70h    WORD    initial TSS
  4667.  72h    WORD    flags
  4668.         bit 0: load image is packed
  4669.         bit 1: 32-bit checksum is present
  4670.         bits 4-2: type of relocation table
  4671.  74h    DWORD    memory requirements for load image
  4672.  78h    DWORD    32-bit checksum (optional)
  4673.  7Ch    DWORD    size of stack segment in bytes
  4674.  80h 256 BYTEs    reserved (0)
  4675. SeeAlso: #0832,#0836
  4676.  
  4677. Format of Phar Lap segment information table entry:
  4678. Offset    Size    Description    (Table 0834)
  4679.  00h    WORD    selector number
  4680.  02h    WORD    flags
  4681.  04h    DWORD    base offset of selector
  4682.  08h    DWORD    minimum number of extra bytes to be allocated to the segment
  4683.  
  4684. Format of 386|DOS-Extender run-time parameters:
  4685. Offset    Size    Description    (Table 0835)
  4686.  00h  2 BYTEs    signature "DX" (44h 58h)
  4687.  02h    WORD    minimum number of real-mode params to leave free at run time
  4688.  04h    WORD    maximum number of real-mode params to leave free at run time
  4689.  06h    WORD    minimum interrupt buffer size in KB
  4690.  08h    WORD    maximum interrupt buffer size in KB
  4691.  0Ah    WORD    number of interrupt stacks
  4692.  0Ch    WORD    size in KB of each interrupt stack
  4693.  0Eh    DWORD    offset of byte past end of real-mode code and data
  4694.  12h    WORD    size in KB of call buffers
  4695.  14h    WORD    flags
  4696.         bit 0: file is virtual memory manager
  4697.         bit 1: file is a debugger
  4698.  16h    WORD    unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
  4699.  18h 104 BYTEs    reserved (0)
  4700.  
  4701. Format of Phar Lap repeat block header:
  4702. Offset    Size    Description    (Table 0836)
  4703.  00h    WORD    byte count
  4704.  02h    BYTE    repeat string length
  4705.  
  4706. Format of Borland debugging information header (following load image):
  4707. Offset    Size    Description    (Table 0837)
  4708.  00h    WORD    signature 52FBh
  4709.  02h    WORD    version ID
  4710.  04h    DWORD    size of name pool in bytes
  4711.  08h    WORD    number of names in name pool
  4712.  0Ah    WORD    number of type entries
  4713.  0Ch    WORD    number of structure members
  4714.  0Eh    WORD    number of symbols
  4715.  10h    WORD    number of global symbols
  4716.  12h    WORD    number of modules
  4717.  14h    WORD    number of locals (optional)
  4718.  16h    WORD    number of scopes in table
  4719.  18h    WORD    number of line-number entries
  4720.  1Ah    WORD    number of include files
  4721.  1Ch    WORD    number of segment records
  4722.  1Eh    WORD    number of segment/file correlations
  4723.  20h    DWORD    size of load image after removing uninitialized data and debug
  4724.           information
  4725.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  4726.           depends on program flags
  4727.  28h    BYTE    program flags
  4728.         bit 0: case-sensitive link
  4729.         bit 1: pascal overlay program
  4730.  29h    WORD    no longer used
  4731.  2Bh    WORD    size of data pool in bytes
  4732.  2Dh    BYTE    padding
  4733.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  4734.  30h    WORD    number of classes
  4735.  32h    WORD    number of parents
  4736.  34h    WORD    number of global classes (currently unused)
  4737.  36h    WORD    number of overloads (currently unused)
  4738.  38h    WORD    number of scope classes
  4739.  3Ah    WORD    number of module classes
  4740.  3Ch    WORD    number of coverage offsets
  4741.  3Eh    DWORD    offset relative to symbol base of name pool
  4742.  42h    WORD    number of browser information records
  4743.  44h    WORD    number of optimized symbol records
  4744.  46h    WORD    debugging flags
  4745.  48h  8 BYTEs    padding
  4746. Note:    additional information on the Borland debugging info may be found in
  4747.       Borland's Open Architecture Handbook
  4748. SeeAlso: #0813
  4749. --------U-214B-------------------------------
  4750. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  4751.     AH = 4Bh
  4752.     DS:DX = 0000h:0000h
  4753. Return: ES:BX -> ELRES history structure (see #0606 at AH=2Bh/CX=454Ch)
  4754.     DX = DABEh (signature, DAve BEnnett)
  4755. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4756.       Bennett
  4757. SeeAlso: AH=2Bh/CX=454Ch
  4758. --------v-214B04-----------------------------
  4759. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  4760.     AX = 4B04h
  4761. Return: CF clear if "MG" resident
  4762.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  4763. SeeAlso: AX=4243h,AH=4Ah/BX=FFFFh,AX=4B21h
  4764. --------D-214B05-----------------------------
  4765. INT 21 - DOS 5+ - SET EXECUTION STATE
  4766.     AX = 4B05h
  4767.     DS:DX -> execution state structure (see #0838)
  4768. Return: CF clear if successful
  4769.         AX = 0000h
  4770.     CF set on error
  4771.         AX = error code (see #0885 at AH=59h)
  4772. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  4773.       execution (including setting the DOS version number).     No DOS, BIOS
  4774.       or other software interrupt may be called after return from this call
  4775.       before commencement of the child process.  If DOS is running in the
  4776.       HMA, A20 is turned off on return from this call.
  4777. SeeAlso: AH=4Bh
  4778.  
  4779. Format of execution state structure:
  4780. Offset    Size    Description    (Table 0838)
  4781.  00h    WORD    reserved (00h)
  4782.  02h    WORD    type flags
  4783.         bit 0: program is an .EXE
  4784.         bit 1: program is an overlay
  4785.  04h    DWORD    pointer to ASCIZ name of program file
  4786.  08h    WORD    PSP segment of new program
  4787.  0Ah    DWORD    starting CS:IP of new program
  4788.  0Eh    DWORD    program size including PSP
  4789. --------v-214B20-----------------------------
  4790. INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
  4791.     AX = 4B20h
  4792. SeeAlso: AX=4B04h,AX=4B21h
  4793. --------v-214B21-----------------------------
  4794. INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
  4795.     AX = 4B21h
  4796. Note:    called at completion of virus installation
  4797. SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
  4798. --------v-214B25-----------------------------
  4799. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  4800.     AX = 4B25h
  4801. Return: DI = 1234h if resident
  4802. SeeAlso: AX=4B21h,AX=4B40h
  4803. --------v-214B40-----------------------------
  4804. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  4805.     AX = 4B40h
  4806. Return: AX = 5678h if resident
  4807. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  4808. --------v-214B41-----------------------------
  4809. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  4810.     AX = 4B41h
  4811.     ???
  4812. Return: ???
  4813. SeeAlso: AX=4B40h
  4814. --------v-214B4A-----------------------------
  4815. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  4816.     AX = 4B4Ah
  4817. Return: AL = 57h if resident
  4818. SeeAlso: AX=4B40h,AX=4B4Bh
  4819. --------v-214B4B-----------------------------
  4820. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  4821.     AX = 4B4Bh
  4822. Return: CF clear if resident
  4823. SeeAlso: AX=4B4Ah,AX=4B4Dh
  4824. --------v-214B4D-----------------------------
  4825. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  4826.     AX = 4B4Dh
  4827. Return: CF clear if resident
  4828. SeeAlso: AX=4B4Ah,AX=4B50h
  4829. --------v-214B50-----------------------------
  4830. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  4831.     AX = 4B50h
  4832. Return: AX = 1234h if resident
  4833. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  4834. --------v-214B53-----------------------------
  4835. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  4836.     AX = 4B53h
  4837. Return: CF clear if resident
  4838. SeeAlso: AX=4B50h,AX=4B53h/BX=2121h,AX=4B55h
  4839. --------v-214B53BX2121-----------------------
  4840. INT 21 - VIRUS - "One Half" - INSTALLATION CHECK
  4841.     AX = 4B53h
  4842.     BX = 2121h
  4843.     CX = 1212h
  4844.     DX = 0236h
  4845. Return: AX = 454Bh if installed
  4846. SeeAlso: AX=4B50h,AX=4B53h,AX=4B55h
  4847. --------v-214B55-----------------------------
  4848. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  4849.     AX = 4B55h
  4850. Return: AX = 1231h if resident
  4851. SeeAlso: AX=4B53h,AX=4B59h
  4852. --------v-214B59-----------------------------
  4853. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  4854.     AX = 4B59h
  4855. Return: CF clear if resident
  4856. SeeAlso: AX=4B50h,AX=4B5Eh
  4857. --------v-214B5E-----------------------------
  4858. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  4859.     AX = 4B5Eh
  4860. Return: CF clear if resident
  4861. SeeAlso: AX=4B59h,AX=4B87h
  4862. --------v-214B60-----------------------------
  4863. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  4864.     AX = 4B60h
  4865.     ???
  4866. Return: ???
  4867. SeeAlso: AX=4B50h
  4868. --------v-214B87-----------------------------
  4869. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  4870.     AX = 4B87h
  4871. Return: AX = 6663h if resident
  4872. SeeAlso: AX=4B5Eh,AX=4B95h
  4873. --------v-214B95-----------------------------
  4874. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  4875.     AX = 4B95h
  4876. Return: AX = 1973h if resident
  4877. SeeAlso: AX=4B87h,AX=4BA7h
  4878. --------v-214BA7-----------------------------
  4879. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  4880.     AX = 4BA7h
  4881. Return: AX = B459h if resident
  4882. SeeAlso: AX=4B95h,AX=4BAAh
  4883. --------v-214BAA-----------------------------
  4884. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  4885.     AX = 4BAAh
  4886. Return: CF clear if resident
  4887. SeeAlso: AX=4BA7h,AX=4BAFh
  4888. --------v-214BAF-----------------------------
  4889. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  4890.     AX = 4BAFh
  4891. Return: AL = AFh if "Magnitogorsk" resident
  4892.     AL = FAh if "948"/"Screenplus1" resident
  4893. SeeAlso: AX=4BAAh,AX=4BDDh
  4894. --------v-214BDD-----------------------------
  4895. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  4896.     AX = 4BDDh
  4897. Return: AX = 1234h
  4898. SeeAlso: AX=4BAFh,AX=4BFEh
  4899. --------v-214BEE-----------------------------
  4900. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  4901.     AX = 4BEEh
  4902. Return: AX = status
  4903.         1234h grab was successful
  4904.         2345h failed (INT 21 grabbed previously)
  4905. Program: F-DRIVER.SYS is part of the shareware F-PROT virus/trojan protection
  4906.       package by Fridrik Skulason
  4907. Note:    when called the first time, this function moves the INT 21 monitoring
  4908.       code from its original location in the INT 21 chain to be the first
  4909.       thing called by INT 21.  This is the mechanism used by F-NET.
  4910. SeeAlso: INT 2F/AX=4653h
  4911. --------k-214BF0-----------------------------
  4912. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  4913.     AX = 4BF0h
  4914. Return: CF clear if installed
  4915.         AX = 899Dh
  4916. Program: DIET is an executable-compression program by Teddy Matsumoto
  4917. SeeAlso: AX=37D0h,AX=4BF1h
  4918. --------k-214BF1-----------------------------
  4919. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  4920.     AX = 4BF1h
  4921. Return: ???
  4922. SeeAlso: AX=37D0h,AX=4BF0h
  4923. --------v-214BFE-----------------------------
  4924. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  4925.     AX = 4BFEh
  4926. Return: AX = 1234h if "Hitchcock" resident
  4927.     AX = ABCDh if "1193"/"Copyright" resident
  4928.     DI = 55BBh if "Dark Avenger-1028" resident
  4929. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  4930. --------v-214BFF-----------------------------
  4931. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  4932.     AX = 4BFFh
  4933. Return: BL = FFh if "USSR-707" resident
  4934.     DI = 55AAh if "Justice" resident
  4935.     CF clear if "Europe 92" resident
  4936. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  4937. --------v-214BFFSI0000-----------------------
  4938. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  4939.     AX = 4BFFh
  4940.     SI = 0000h
  4941.     DI = 0000h
  4942. Return: DI = 55AAh if installed
  4943. SeeAlso: AX=4BFFh"Justice",AX=5252h
  4944. --------D-214C-------------------------------
  4945. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  4946.     AH = 4Ch
  4947.     AL = return code
  4948. Return: never returns
  4949. Notes:    unless the process is its own parent (see #0603 at AH=26h, offset 16h
  4950.       in PSP), all open files are closed and all memory belonging to the
  4951.       process is freed
  4952.     all network file locks should be removed before calling this function
  4953. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  4954. SeeAlso: INT 60/DI=0601h
  4955. ----------214C57-----------------------------
  4956. INT 21 - Headroom - ???
  4957.     AX = 4C57h
  4958.     DS:DX -> target address
  4959. Note:    jumps to target address instead of terminating program
  4960. SeeAlso: AX=5758h
  4961. --------D-214D-------------------------------
  4962. INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
  4963.     AH = 4Dh
  4964. Return: AH = termination type
  4965.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  4966.         01h control-C abort
  4967.         02h critical error abort
  4968.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  4969.     AL = return code
  4970. Notes:    the word in which DOS stores the return code is cleared after being
  4971.       read by this function, so the return code can only be retrieved once
  4972.     COMMAND.COM stores the return code of the last external command it
  4973.       executed as ERRORLEVEL
  4974.     this call should not be used if the child was started with AX=4B04h;
  4975.       use AH=8Ah instead
  4976.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  4977.       MOV    AH,4Dh
  4978.       INT    21h
  4979.       HLT
  4980.       DB    02h,0FDh
  4981.       This sequence is the only way to close a specific VDM which was
  4982.       booted from floppy or a disk image.
  4983. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  4984. --------D-214E-------------------------------
  4985. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  4986.     AH = 4Eh
  4987.     AL = special flag for use by APPEND (see note below)
  4988.     CX = file attribute mask (see #0643 at AX=4301h) (bits 0 and 5 ignored)
  4989.         0088h (Novell DOS 7) find first deleted file
  4990.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  4991. Return: CF clear if successful
  4992.         [DTA] = FindFirst data block (see #0839)
  4993.     CF set on error
  4994.         AX = error code (02h,03h,12h) (see #0885 at AH=59h)
  4995. Notes:    for search attributes other than 08h, all files with at MOST the
  4996.       specified combination of hidden, system, and directory attributes
  4997.       will be returned.  Under DOS 2.x, searching for attribute 08h
  4998.       (volume label) will also return normal files, while under DOS 3.0+
  4999.       only the volume label (if any) will be returned.
  5000.     this call also returns successfully if given the name of a character
  5001.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  5002.       and the current date and time.  DOS 3.0+ returns attribute 40h and
  5003.       the current date and time.
  5004.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  5005.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  5006.       found pathname will be stored, otherwise, the actual found path
  5007.       will be prepended to the original filespec without a path.
  5008.     under LANtastic, this call may be used to obtain a list of a server's
  5009.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  5010.       resources may be obtained by searching for "\\SERVER\@*.*"
  5011.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  5012. BUGS:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  5013.       with a character device name (no wildcards) and search attributes
  5014.       which include the volume-label bit (08h) will fail unless there is
  5015.       an intervening DOS call which implicitly or explicity performs a
  5016.       directory search without the volume-label bit.  Such implicit
  5017.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  5018.       (AH=41h), and RENAME (AH=56h)
  5019.     DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  5020. SeeAlso: AH=11h,AH=4Fh,AX=4301h,AX=714Eh,AX=71A1h,INT 2F/AX=111Bh
  5021. SeeAlso: INT 2F/AX=B711h
  5022.  
  5023. Format of FindFirst data block:
  5024. Offset    Size    Description    (Table 0839)
  5025. ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  5026.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  5027.  01h 11 BYTEs    search template
  5028.  0Ch    BYTE    search attributes
  5029. ---DOS 2.x (and some DOS 3.x???)---
  5030.  00h    BYTE    search attributes
  5031.  01h    BYTE    drive letter
  5032.  02h 11 BYTEs    search template
  5033. ---WILDUNIX.COM---
  5034.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  5035.  0Ch    BYTE    search attributes
  5036. ---DOS 2.x and most 3.x---
  5037.  0Dh    WORD    entry count within directory
  5038.  0Fh    DWORD    pointer to DTA???
  5039.  13h    WORD    cluster number of start of parent directory
  5040. ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  5041.  0Dh    WORD    entry count within directory
  5042.  0Fh    WORD    cluster number of start of parent directory
  5043.  11h  4 BYTEs    reserved
  5044. ---all versions, documented fields---
  5045.  15h    BYTE    attribute of file found
  5046.  16h    WORD    file time (see #0876 at AX=5700h)
  5047.  18h    WORD    file date (see #0877 at AX=5700h)
  5048.  1Ah    DWORD    file size
  5049.  1Eh 13 BYTEs    ASCIZ filename+extension
  5050. --------f-214E-------------------------------
  5051. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  5052.     AH = 4Eh
  5053.     DS:DX = 0000h:0000h
  5054. Return: AH = 99h if installed
  5055. Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  5056.       Hosgood and Terry Barnaby
  5057. --------D-214F-------------------------------
  5058. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  5059.     AH = 4Fh
  5060.     [DTA] = data block from previous FindFirst or FindNext call
  5061. Return: CF clear if successful
  5062.     CF set on error
  5063.         AX = error code (12h) (see #0885 at AH=59h)
  5064. Note:    under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
  5065.       the next matching deleted file will be returned
  5066. BUG:    DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  5067. SeeAlso: AH=12h,AH=4Eh,AX=714Fh,AX=71A1h
  5068. --------D-2150-------------------------------
  5069. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  5070.     AH = 50h
  5071.     BX = segment of PSP for new process
  5072. Notes:    DOS uses the current PSP address to determine which processes own files
  5073.       and memory; it corresponds to process identifiers used by other OSs
  5074.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  5075.       handler without setting the Critical Error flag
  5076.     under MS-DOS 3.0+ and DR-DOS 3.41+, this function does not use any of
  5077.       the DOS-internal stacks and may thus be called at any time, even
  5078.       during another INT 21h call
  5079.     some Microsoft applications such as Quick C 2.51 use segments of 0000h
  5080.       and FFFFh and direct access to the SDA (see #0892 at AX=5D06h) to
  5081.       test whether they are running under MS-DOS rather than a compatible
  5082.       OS; although one should only call this function with valid PSP
  5083.       addresses, any program hooking it should be prepared to handle
  5084.       invalid addresses
  5085.     this function is supported by the OS/2 compatibility box
  5086.     this call was undocumented prior to the release of DOS 5.0
  5087. SeeAlso: AH=26h,AH=51h,AH=62h
  5088. --------D-2151-------------------------------
  5089. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  5090.     AH = 51h
  5091. Return: BX = segment of PSP for current process
  5092. Notes:    DOS uses the current PSP address to determine which processes own files
  5093.       and memory; it corresponds to process identifiers used by other OSs
  5094.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  5095.       handler without setting the Critical Error flag
  5096.     under DOS 3.0+, this function does not use any of the DOS-internal
  5097.       stacks and may thus be called at any time, even during another
  5098.       INT 21h call
  5099.     supported by OS/2 compatibility box
  5100.     identical to the documented AH=62h
  5101.     this call was undocumented prior to the release of DOS 5.0
  5102. SeeAlso: AH=26h,AH=50h,AH=62h
  5103. --------D-2152-------------------------------
  5104. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  5105.     AH = 52h
  5106. Return: ES:BX -> DOS list of lists (see #0840)
  5107. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  5108.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  5109.       pointer is FFFFh:FFFFh).
  5110.     partially supported by the Windows NT DOS box; contains only a
  5111.       rudimentary Current Directory Structure (see #0857)
  5112.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  5113.     Quarterdeck's suggested check for the use of its DOSDATA.SYS or
  5114.       DOS-UP.SYS is to test whether the list-of-lists segment is greater
  5115.       than the segment of the first memory block; a better check for
  5116.       DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
  5117. SeeAlso: INT 2F/AX=1203h
  5118.  
  5119. Format of List of Lists:
  5120. Offset    Size    Description    (Table 0840)
  5121.  -24    WORD    (DOS 3.1+) contents of CX from INT 21/AX=5E01h
  5122.  -22    WORD    (DOS ???+) LRU counter for FCB caching
  5123.  -20    WORD    (DOS ???+) LRU counter for FCB opens
  5124.  -18    DWORD    (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
  5125.             FFFFh:FFFFh if not installed or not available
  5126.  -14    WORD    (DOS ???+) offset in DOS CS of code to return from INT 21 call
  5127.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  5128.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  5129.  -8    DWORD    (DOS 3.0+) pointer to current disk buffer
  5130.  -4    WORD    (DOS 3.0+) pointer in DOS data segment of unread CON input
  5131.         when CON is read via a handle, DOS reads an entire line,
  5132.           and returns the requested portion, buffering the rest
  5133.           for the next read.  0000h indicates no unread input
  5134.  -2    WORD    segment of first memory control block (see #0841)
  5135.  00h    DWORD    pointer to first Drive Parameter Block (see #0620 at AH=32h)
  5136.  04h    DWORD    -> first System File Table (see #0851,#0852,#0853,#0854)
  5137.  08h    DWORD    pointer to active CLOCK$ device's header (most recently loaded
  5138.           driver with CLOCK bit set)
  5139.  0Ch    DWORD    pointer to active CON device's header (most recently loaded
  5140.           driver with STDIN bit set)
  5141. ---DOS 2.x---
  5142.  10h    BYTE    number of logical drives in system
  5143.  11h    WORD    maximum bytes/block of any block device
  5144.  13h    DWORD    pointer to first disk buffer (see #0861,#0862)
  5145.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5146.         NUL is always the first device on DOS's linked list of device
  5147.           drivers. (see #0858)
  5148. ---DOS 3.0---
  5149.  10h    BYTE    number of block devices
  5150.  11h    WORD    maximum bytes/block of any block device
  5151.  13h    DWORD    pointer to first disk buffer (see #0862,#0864)
  5152.  17h    DWORD    pointer to array of current directory structures (see #0855)
  5153.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  5154.  1Ch    DWORD    pointer to STRING= workspace area
  5155.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  5156.  22h    DWORD    pointer to FCB table
  5157.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  5158.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5159.         NUL is always the first device on DOS's linked list of device
  5160.           drivers. (see #0858)
  5161. ---DOS 3.1-3.3---
  5162.  10h    WORD    maximum bytes per sector of any block device
  5163.  12h    DWORD    pointer to first disk buffer in buffer chain (see #0862)
  5164.  16h    DWORD    pointer to array of current directory structures (see #0855)
  5165.  1Ah    DWORD    pointer to system FCB tables (see #0852,#0853,#0854)
  5166.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  5167.  20h    BYTE    number of block devices installed
  5168.  21h    BYTE    number of available drive letters (largest of 5, installed
  5169.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  5170.           current directory structure array.
  5171.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5172.         NUL is always the first device on DOS's linked list of device
  5173.           drivers. (see #0858)
  5174.  34h    BYTE    number of JOIN'ed drives
  5175. ---DOS 4.x---
  5176.  10h    WORD    maximum bytes per sector of any block device
  5177.  12h    DWORD    pointer to disk buffer info record (see #0864,#0865)
  5178.         Note: although the initialization code in IO.SYS uses this
  5179.           pointer, MSDOS.SYS does not, instead using the hardcoded
  5180.           address of the info record
  5181.  16h    DWORD    pointer to array of current directory structures
  5182.         (see #0855,#0856)
  5183.  1Ah    DWORD    pointer to system FCB tables (see #0852,#0853,#0854)
  5184.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  5185.         (always 00h for DOS 5.0)
  5186.  20h    BYTE    number of block devices installed
  5187.  21h    BYTE    number of available drive letters (largest of 5, installed
  5188.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  5189.           current directory structure array.
  5190.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5191.         NUL is always the first device on DOS's linked list of device
  5192.           drivers. (see #0858)
  5193.  34h    BYTE    number of JOIN'ed drives
  5194.  35h    WORD    pointer within IBMDOS code segment to list of special program
  5195.           names (see #0874)
  5196.         (always 0000h for DOS 5.0)
  5197.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  5198.         (see #0870)
  5199.         may be called by any IFS driver which does not wish to
  5200.           service functions 20h or 24h-28h itself
  5201.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  5202.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  5203.  41h    WORD    number of lookahead buffers (the y in BUFFERS x,y)
  5204.  43h    BYTE    boot drive (1=A:)
  5205.  44h    BYTE    flag: 01h to use DWORD moves (80386+), 00h otherwise
  5206.  45h    WORD    extended memory size in KB
  5207. ---DOS 5.0-6.0---
  5208.  10h 39 BYTEs    as for DOS 4.x (see above)
  5209.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  5210.  3Bh    WORD    (DOS=HIGH) offset in DOS CS of function to fix A20 control
  5211.           when executing special .COM format
  5212.  3Dh    WORD    PSP of most-recently EXECed program if DOS in HMA, 0000h if low
  5213.         used for maintaining count of INT 21 calls which disable A20
  5214.           on return
  5215.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  5216. ---Windows NT DOS Box---
  5217.  10h  6 BYTEs    ???
  5218.  16h    DWORD    pointer to array of current directory structures (see #0857)
  5219.  1Ah  6 BYTEs    ???
  5220.  20h    BYTE    number of block devices installed
  5221.  21h    BYTE    number of local drive letters (= installed block devices)
  5222.         Also size of current directory structure array.
  5223.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  5224.         NUL is always the first device on DOS's linked list of device
  5225.           drivers. (see #0858)
  5226.  
  5227. Format of DOS memory control block (see also below):
  5228. Offset    Size    Description    (Table 0841)
  5229.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  5230.  01h    WORD    PSP segment of owner or special flag value (see #0842)
  5231.  03h    WORD    size of memory block in paragraphs
  5232.  05h  3 BYTEs    unused by MS-DOS
  5233.         (386MAX) if locked-out block, region start/prev region end
  5234. ---DOS 2.x,3.x---
  5235.  08h  8 BYTEs    unused
  5236. ---DOS 4.0+ ---
  5237.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  5238.           else garbage
  5239.         null-terminated if less than 8 characters
  5240. Notes:    the next MCB is at segment (current + size + 1)
  5241.     under DOS 3.1+, the first memory block is the DOS data segment,
  5242.       containing installable drivers, buffers, etc.     Under DOS 4.0+ it is
  5243.       divided into subsegments, each with its own memory control block
  5244.       (see #0845), the first of which is at offset 0000h.
  5245.     for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
  5246.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  5247.       "SD" is system data, device drivers, etc.
  5248.     Some versions of DR-DOS use only seven characters of the program name,
  5249.       placing a NUL in the eighth byte.
  5250. SeeAlso: #0843,#0844,#0845
  5251.  
  5252. (Table 0842)
  5253. Values for special flag PSP segments:
  5254.  0000h    free
  5255.  0006h    DR-DOS XMS UMB
  5256.  0007h    DR-DOS excluded upper memory ("hole")
  5257.  0008h    belongs to DOS
  5258.  FFF7h    386MAX v6.01+ ???
  5259.  FFFAh    386MAX UMB control block (see #0697 at AX=4402h"386MAX")
  5260.  FFFDh    386MAX locked-out memory
  5261.  FFFEh    386MAX UMB (normally immediately follows its control block)
  5262.  FFFFh    386MAX v6.01+ device driver
  5263.  
  5264. Format of MS-DOS 5+ UMB control block:
  5265. Offset    Size    Description    (Table 0843)
  5266.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  5267.  01h    WORD    first available paragraph in UMB if control block at start
  5268.           of UMB, 000Ah if control block at end of UMB
  5269.  03h    WORD    length in paragraphs of following UMB or locked-out region
  5270.  05h  3 BYTEs    unused
  5271.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  5272.  
  5273. Format of STARLITE (General Software's Embedded DOS) memory control block:
  5274. Offset    Size    Description    (Table 0844)
  5275.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  5276.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  5277.  03h    WORD    size of memory block in paragraphs
  5278.  05h    BYTE    unused
  5279.  06h    WORD    segment address of next memory control block (0000h if last)
  5280.  08h    WORD    segment address of previous memory control block or 0000h
  5281.  0Ah  6 BYTEs    reserved
  5282.  
  5283. Format of DOS 4.0+ data segment subsegment control blocks:
  5284. Offset    Size    Description    (Table 0845)
  5285.  00h    BYTE    subsegment type (blocks typically appear in this order)
  5286.         "D"  device driver
  5287.         "E"  device driver appendage
  5288.         "I"  IFS (Installable File System) driver
  5289.         "F"  FILES=  control block storage area (for FILES>5)
  5290.         "X"  FCBS=   control block storage area, if present
  5291.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  5292.         "B"  BUFFERS=  storage area
  5293.         "L"  LASTDRIVE=     current directory structure array storage area
  5294.         "S"  STACKS=  code and data area, if present (see #0846,#0847)
  5295.         "T"  INSTALL= transient code
  5296.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  5297.  03h    WORD    size of subsegment in paragraphs
  5298.  05h  3 BYTEs    unused
  5299.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  5300.           was loaded (unused for other types)
  5301.  
  5302. Format of data at start of STACKS code segment (if present):
  5303. Offset    Size    Description    (Table 0846)
  5304.  00h    WORD    ???
  5305.  02h    WORD    number of stacks (the x in STACKS=x,y)
  5306.  04h    WORD    size of stack control block array (should be 8*x)
  5307.  06h    WORD    size of each stack (the y in STACKS=x,y)
  5308.  08h    DWORD    pointer to STACKS data segment
  5309.  0Ch    WORD    offset in STACKS data segment of stack control block array
  5310.  0Eh    WORD    offset in STACKS data segment of last element of that array
  5311.  10h    WORD    offset in STACKS data segment of the entry in that array for
  5312.           the next stack to be allocated (initially same as value in
  5313.           0Eh and works its way down in steps of 8 to the value in
  5314.           0Ch as hardware interrupts pre-empt each other)
  5315. Note:    the STACKS code segment data may, if present, be located as follows:
  5316.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  5317.           in the IBMBIO segment (seen at 0070:0190h)
  5318.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  5319.           segment, which may be determined by inspecting the segment
  5320.           pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  5321.           70h, 72-77h which have not been redirected by device drivers
  5322.           or TSRs.
  5323.     DOS 4.0+    Identified by sub-segment control block type "S" within the DOS
  5324.           data segment.
  5325. SeeAlso: #0848,INT B4"STACKMAN"
  5326.  
  5327. Format of array elements in STACKS data segment:
  5328. Offset    Size    Description    (Table 0847)
  5329.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  5330.           higher stack.
  5331.  01h    BYTE    not used
  5332.  02h    WORD    previous SP
  5333.  04h    WORD    previous SS
  5334.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  5335.           top of the stack is preset to point back to this control
  5336.           block.
  5337.  
  5338. Format of SHARE.EXE hooks (DOS 3.1-6.00):
  5339. Offset    Size    Description    (Table 0848)
  5340. (offsets from first system file table--pointed at by ListOfLists+04h)
  5341. -3Ch    DWORD    pointer to FAR routine for ???
  5342.         Note: not called by MS-DOS 3.3, set to 0000h:0000h by
  5343.             SHARE 3.3+
  5344. -38h    DWORD    pointer to FAR routine called on opening file
  5345.         on call, internal DOS location points at filename
  5346.           (see #0892 at AX=5D06h)
  5347.         Return: CF clear if successful
  5348.             CF set on error
  5349.                 AX = DOS error code (24h) (see #0885 at AH=59h)
  5350.         Note: SHARE directly accesses DOS-internal data to get name of
  5351.             file just opened
  5352. -34h    DWORD    pointer to FAR routine called on closing file
  5353.         ES:DI -> system file table
  5354.         Note: does something to every Record Lock Record for file
  5355. -30h    DWORD    pointer to FAR routine to close all files for given computer
  5356.         (called by AX=5D03h)
  5357. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  5358.         (called by AX=5D04h)
  5359. -28h    DWORD    pointer to FAR routine to close file by name
  5360.         (called by AX=5D02h)
  5361.         DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
  5362.            DPL's DS:DX -> name of file to close
  5363.         Return: CF clear if successful
  5364.             CF set on error
  5365.                 AX = DOS error code (03h) (see #0885 at AH=59h)
  5366. -24h    DWORD    pointer to FAR routine to lock region of file
  5367.         call with BX = file handle
  5368.               ---DOS 3.x---
  5369.               CX:DX = starting offset
  5370.               SI:AX = size
  5371.               ---DOS 4.0+ ---
  5372.               DS:DX -> lock range
  5373.                     DWORD start offset
  5374.                     DWORD size in bytes
  5375.         Return: CF set on error
  5376.                 AL = DOS error code (21h) (see #0885 at AH=59h)
  5377.         Note: not called if file is marked as remote
  5378. -20h    DWORD    pointer to FAR routine to unlock region of file
  5379.         call with BX = file handle
  5380.               ---DOS 3.x---
  5381.               CX:DX = starting offset
  5382.               SI:AX = size
  5383.               ---DOS 4.0+ ---
  5384.               DS:DX -> lock range
  5385.                     DWORD start offset
  5386.                     DWORD size in bytes
  5387.         Return: CF set on error
  5388.                 AL = DOS error code (21h) (see #0885 at AH=59h)
  5389.         Note: not called if file is marked as remote
  5390. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  5391.         call with ES:DI -> system file table entry for file
  5392.             CX = length of region from current position in file
  5393.         Return: CF set if any portion of region locked
  5394.                 AX = 0021h
  5395. -18h    DWORD    pointer to FAR routine to get open file list entry
  5396.         (called by AX=5D05h)
  5397.         call with DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
  5398.             DPL's BX = index of sharing record
  5399.             DPL's CX = index of SFT in SFT chain of sharing rec
  5400.         Return: CF set on error or not loaded
  5401.                 AX = DOS error code (12h) (see #0885 at AH=59h)
  5402.             CF clear if successful
  5403.                 ES:DI -> filename
  5404.                 CX = number of locks owned by specified SFT
  5405.                 BX = network machine number
  5406.                 DX destroyed
  5407. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  5408.         call with DS:SI -> unopened FCB
  5409.               ES:DI -> system file table entry
  5410.         Return: BL = C0h???
  5411.         Note: copies following fields from SFT to FCB:
  5412.            starting cluster of file      0Bh     1Ah
  5413.            sharing record offset      33h     1Ch
  5414.            file attribute          04h     1Eh
  5415. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  5416.         call with ES:DI -> system file table entry
  5417.               DS:SI -> FCB
  5418.         Return: CF set if SFT closed or sharing record offsets
  5419.                 mismatched
  5420.             CF clear if successful
  5421.                 BX = starting cluster number from FCB
  5422. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  5423.         DS:SI -> system file table
  5424.         Return: AX = number of handle in JFT which already uses SFT
  5425.         Note: called during open/create of a file
  5426.         Note: if SFT was opened with inheritance enabled and sharing
  5427.             mode 111, does something to all other SFTs owned by
  5428.             same process which have the same file open mode and
  5429.             sharing record
  5430. -08h    DWORD    pointer to FAR routine for closing file
  5431.         Note: closes various handles referring to file most-recently
  5432.             opened
  5433. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  5434.           entries
  5435.         call with ES:DI -> system file table entry for file (see #0853)
  5436.               AX = subfunction (apply to each related SFT)
  5437.                 00h: update time stamp (offset 0Dh) and date
  5438.                      stamp (offset 0Fh)
  5439.                 01h: update file size (offset 11h) and starting
  5440.                      cluster (offset 0Bh).  Sets last-accessed
  5441.                      cluster fields to start of file if file
  5442.                      never accessed
  5443.                 02h: as function 01h, but last-accessed fields
  5444.                      always changed
  5445.                 03h: do both functions 00h and 02h
  5446.         Note: follows ptr at offset 2Bh in system file table entries
  5447.         Note: NOP if opened with no-inherit or via FCB
  5448. Notes:    most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
  5449.       either that SS=DOS DS or SS=DS=DOS DS and directly access
  5450.       DOS-internal data
  5451.     sharing hooks are not supported by DR-DOS 5-6; they appear to be
  5452.       supported by Novell DOS 7, with a segment of 0000h indicating the
  5453.       DOS data segment
  5454. SeeAlso: #0849,#0850
  5455.  
  5456. Format of sharing record:
  5457. Offset    Size    Description    (Table 0849)
  5458.  00h    BYTE    flag
  5459.         00h free block
  5460.         01h allocated block
  5461.         FFh end marker
  5462.  01h    WORD    size of block
  5463.  03h    BYTE    checksum of pathname (including NUL)
  5464.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  5465.  04h    WORD    offset in SHARE's DS of first Record Lock Record (see #0850)
  5466.  06h    DWORD    pointer to start of system file table chain for file
  5467.  0Ah    WORD    unique sequence number
  5468.  0Ch    var    ASCIZ full pathname
  5469. Note:    not supported by DR-DOS SHARE 1.1 and 2.0; will reportedly be
  5470.       supported by Novell DOS 7
  5471. SeeAlso: #0848,#0850
  5472.  
  5473. Format of SHARE.EXE Record Lock Record:
  5474. Offset    Size    Description    (Table 0850)
  5475.  00h    WORD    offset in SHARE's DS of next lock table in list or 0000h
  5476.  02h    DWORD    offset in file of start of locked region
  5477.  06h    DWORD    offset in file of end of locked region
  5478.  0Ah    DWORD    pointer to System File Table entry for this file
  5479.  0Eh    WORD    PSP segment of lock's owner
  5480. ---DOS 5+ ---
  5481.  10h    WORD    lock type: (00h lock all, 01h lock writes only)
  5482. SeeAlso: #0848,#0849,#0851,#0854
  5483.  
  5484. Format of DOS 2.x system file tables:
  5485. Offset    Size    Description    (Table 0851)
  5486.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  5487.  04h    WORD    number of files in this table
  5488.  06h  28h bytes per file
  5489.     Offset    Size    Description
  5490.      00h    BYTE    number of file handles referring to this file
  5491.      01h    BYTE    file open mode (see #0627 at AH=3Dh)
  5492.      02h    BYTE    file attribute
  5493.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  5494.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  5495.      0Fh    WORD    ???
  5496.      11h    WORD    ???
  5497.      13h    DWORD    file size???
  5498.      17h    WORD    file date in packed format (see #0877 at AX=5700h)
  5499.      19h    WORD    file time in packed format (see #0876 at AX=5700h)
  5500.      1Bh    BYTE    device attribute (see #0646 at AX=4400h)
  5501.     ---character device---
  5502.      1Ch    DWORD    pointer to device driver
  5503.     ---block device---
  5504.      1Ch    WORD    starting cluster of file
  5505.      1Eh    WORD    relative cluster in file of last cluster accessed
  5506.     ------
  5507.      20h    WORD    absolute cluster number of current cluster
  5508.      22h    WORD    ???
  5509.      24h    DWORD    current file position???
  5510. SeeAlso: #0852,#0853,#0854
  5511.  
  5512. Format of DOS 3.0 system file tables and FCB tables:
  5513. Offset    Size    Description    (Table 0852)
  5514.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  5515.  04h    WORD    number of files in this table
  5516.  06h  38h bytes per file
  5517.     Offset    Size    Description
  5518.      00h-1Eh as for DOS 3.1+ (see #0853)
  5519.      1Fh    WORD    byte offset of directory entry within sector
  5520.      21h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5521.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5522.      30h    WORD    (SHARE.EXE) network machine number which opened file
  5523.             (Windows Enhanced mode DOSMGR uses the virtual machine
  5524.               ID as the machine number; see INT 2F/AX=1683h)
  5525.      32h    WORD    PSP segment of file's owner (first three entries for
  5526.               AUX/CON/PRN contain segment of IO.SYS startup code)
  5527.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  5528.      36h    WORD    ??? apparently always 0000h
  5529. SeeAlso: #0851,#0853,#0854
  5530.  
  5531. Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
  5532. Offset    Size    Description    (Table 0853)
  5533.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  5534.  04h    WORD    number of files in this table
  5535.  06h  35h bytes per file
  5536.     Offset    Size    Description
  5537.      00h    WORD    number of file handles referring to this file
  5538.      02h    WORD    file open mode (see AX=6C00h, #0627 at AH=3Dh)
  5539.             bit 15 set if this file opened via FCB
  5540.      04h    BYTE    file attribute (see #0643 at AX=4301h)
  5541.      05h    WORD    device info word (see #0646 at AX=4400h)
  5542.             bit 15 set if remote file
  5543.             bit 14 set means do not set file date/time on closing
  5544.             bit 12 set means don't inherit on EXEC
  5545.             bits 5-0 drive number for disk files
  5546.      07h    DWORD    pointer to device driver header if character device
  5547.             else pointer to DOS Drive Parameter Block
  5548.               (see #0620 at AH=32h)
  5549.      0Bh    WORD    starting cluster of file
  5550.      0Dh    WORD    file time in packed format (see #0876 at AX=5700h)
  5551.             not used for character devices in DR-DOS
  5552.      0Fh    WORD    file date in packed format (see #0877 at AX=5700h)
  5553.             not used for character devices in DR-DOS
  5554.      11h    DWORD    file size
  5555.     ---system file table---
  5556.      15h    DWORD    current offset in file (may be larger than size of
  5557.               file; INT 21/AH=42h does not check new position)
  5558.     ---FCB table---
  5559.      15h    WORD    counter for last I/O to FCB
  5560.      17h    WORD    counter for last open of FCB
  5561.             (these are separate to determine the times of the
  5562.               latest I/O and open)
  5563.     ---
  5564.      19h    WORD    relative cluster within file of last cluster accessed
  5565.      1Bh    WORD    absolute cluster number of last cluster accessed
  5566.             0000h if file never read or written???
  5567.      1Dh    WORD    number of sector containing directory entry
  5568.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  5569.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5570.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5571.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  5572.             (Windows Enhanced mode DOSMGR uses the virtual machine
  5573.               ID as the machine number; see INT 2F/AX=1683h)
  5574.      31h    WORD    PSP segment of file's owner (see #0603 at AH=26h)
  5575.               (first three entries for AUX/CON/PRN contain segment
  5576.               of IO.SYS startup code)
  5577.      33h    WORD    offset within SHARE.EXE code segment of
  5578.               sharing record (see #0849)  0000h = none
  5579. SeeAlso: #0851,#0852,#0854
  5580.  
  5581. Format of DOS 4.0-6.0 system file tables and FCB tables:
  5582. Offset    Size    Description    (Table 0854)
  5583.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  5584.  04h    WORD    number of files in this table
  5585.  06h  3Bh bytes per file
  5586.     Offset    Size    Description
  5587.      00h    WORD    number of file handles referring to this file
  5588.             FFFFh if in use but not referenced
  5589.      02h    WORD    file open mode (see AX=6C00h,#0627 at AH=3Dh)
  5590.             bit 15 set if this file opened via FCB
  5591.      04h    BYTE    file attribute (see #0643 at AX=4301h)
  5592.      05h    WORD    device info word (see also #0646 at AX=4400h)
  5593.             bit 15 set if remote file
  5594.             bit 14 set means do not set file date/time on closing
  5595.             bit 13 set if named pipe
  5596.             bit 12 set if no inherit
  5597.             bit 11 set if network spooler
  5598.             bit 7  set if device, clear if file (only if local)
  5599.             bits 6-0 as for AX=4400h
  5600.      07h    DWORD    pointer to device driver header if character device
  5601.             else pointer to DOS Drive Parameter Block
  5602.               (see #0620 at AH=32h) or REDIR data
  5603.      0Bh    WORD    starting cluster of file (local files only)
  5604.      0Dh    WORD    file time in packed format (see #0876)
  5605.      0Fh    WORD    file date in packed format (see #0877)
  5606.      11h    DWORD    file size
  5607.      15h    DWORD    current offset in file (SFT)
  5608.             LRU counters (FCB table, two WORDs)
  5609.     ---local file---
  5610.      19h    WORD    relative cluster within file of last cluster accessed
  5611.      1Bh    DWORD    number of sector containing directory entry
  5612.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  5613.     ---network redirector---
  5614.      19h    DWORD    pointer to REDIRIFS record
  5615.      1Dh  3 BYTEs    ???
  5616.     ------
  5617.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  5618.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  5619.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  5620.             (Windows Enhanced mode DOSMGR uses the virtual machine
  5621.               ID as the machine number; see INT 2F/AX=1683h)
  5622.      31h    WORD    PSP segment of file's owner (see #0603 at AH=26h)
  5623.               (first three entries for AUX/CON/PRN contain segment
  5624.               of IO.SYS startup code)
  5625.      33h    WORD    offset within SHARE.EXE code segment of
  5626.             sharing record (see #0808)  0000h = none
  5627.      35h    WORD    (local) absolute cluster number of last clustr accessed
  5628.             (redirector) ???
  5629.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  5630. Note:    the OS/2 2.0 DOS Boot Session does not properly fill in the filename
  5631.       field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
  5632.       does not appear to support SFTs at all
  5633. SeeAlso: #0851,#0852,#0853
  5634.  
  5635. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  5636. Offset    Size    Description    (Table 0855)
  5637.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or UNC form
  5638.           \\SERVER\PATH (network, see notes below)
  5639.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  5640.         bit 15: uses network redirector     \ invalid if 00, installable
  5641.         bit 14: physical drive         / file system if 11
  5642.         bit 13: JOIN'ed      \ path above is true path that would be
  5643.         bit 12: SUBST'ed  / needed if not under SUBST or JOIN
  5644.         bit  7: remote drive hidden from redirector's assign-list and
  5645.               exempt from network connection make/break commands;
  5646.               set for CD-ROM drives
  5647.  45h    DWORD    pointer to Drive Parameter Block for drive
  5648.           (see #0620 at AH=32h)
  5649. ---local drives---
  5650.  49h    WORD    starting cluster of current directory
  5651.         0000h = root, FFFFh = never accessed
  5652.  4Bh    WORD    ??? seems to be FFFFh always
  5653.  4Dh    WORD    ??? seems to be FFFFh always
  5654. ---network drives---
  5655.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  5656.         (DOS 4 only) available for use by IFS driver
  5657.  4Dh    WORD    stored user data from INT 21/AX=5F03h
  5658. ------
  5659.  4Fh    WORD    offset in current directory path of backslash corresponding to
  5660.           root directory for drive
  5661.         this value specifies how many characters to hide from the
  5662.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  5663.           drive letter and colon, SUBST, JOIN, and networks change it
  5664.           so that only the appropriate portion of the true path is
  5665.           visible to the user
  5666. ---DOS 4.0+ ---
  5667.  51h    BYTE    (DOS 4 only, remote drives) device type
  5668.         04h network drive
  5669.  52h    DWORD    pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
  5670.           this drive, 00000000h if native DOS
  5671.  56h    WORD    available for use by IFS driver
  5672. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  5673.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  5674.     normally, only one of bits 13&12 may be set together with bit 14, but
  5675.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  5676.       0001 SUBST, 0101 ASSIGN (see #0856)
  5677.     Windows for Workgroups 3.11 network sets the path to the local
  5678.       drive and directory even for network drives; in that case the
  5679.       UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h
  5680.       or INT 21/AX=5F46h. LapLink RemoteAccess does the same even for
  5681.       INT 21/AX=5F02h
  5682.     SoftWindows on the Macintosh PowerPC sets \\E for the host drive
  5683. SeeAlso: #0856
  5684.  
  5685. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  5686. Offset    Size    Description    (Table 0856)
  5687.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  5688.  43h    WORD    drive attributes
  5689.         1000h SUBSTed drive
  5690.         3000h??? JOINed drive
  5691.         4000h physical drive
  5692.         5000h ASSIGNed drive
  5693.         7000h JOINed drive
  5694.         8000h network drive
  5695.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  5696.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  5697.  47h    WORD    cluster number of start of parent directory (0000h = root)
  5698.  49h    WORD    entry number of current directory in parent directory
  5699.  4Bh    WORD    cluster number of start of current directory
  5700.  4Dh    WORD    used for media change detection (details not available)
  5701.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  5702.         0000h if physical root directory
  5703. SeeAlso: #0855
  5704.  
  5705. Format of Windows NT Current Directory Structure (CDS) (array):
  5706. Offset    Size    Description    (Table 0857)
  5707.  00h 67 BYTEs    ASCIZ path in form X:\ (does not show either current directory
  5708.           or network path)
  5709.  43h  4 BYTEs    ???
  5710. Note:    the WinNT CDS contains only as many entries as there are local drives,
  5711.       not LASTDRIVE entries.
  5712.  
  5713. Format of DOS device driver header:
  5714. Offset    Size    Description    (Table 0858)
  5715.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  5716.  04h    WORD    device attributes (see #0859,#0860)
  5717.  06h    WORD    device strategy entry point
  5718.         call with ES:BX -> request header
  5719.           (see #1382 at INT 2F/AX=0802h)
  5720.  08h    WORD    device interrupt entry point
  5721. ---character device---
  5722.  0Ah  8 BYTEs    blank-padded character device name
  5723. ---block device---
  5724.  0Ah    BYTE    number of subunits (drives) supported by driver
  5725.  0Bh  7 BYTEs    normally unused; sometimes contains signature to indicate
  5726.           specific drivers:
  5727.         "GFS    "   LapLink III device driver DD.BIN
  5728.         "STAC-CD"   Stacker/Stacker Anywhere (see AX=4404h"Stacker")
  5729.         "SIDExxx"   PCMCIA driver ATADRV.EXE (see AX=440Dh)
  5730.         "$PCMATA"   PCMCIA driver PCMATA.SYS (see AX=440Dh)
  5731.         "DSKREET"   NortonUtils v5+ Diskreet (see INT 2F/AX=FE00h)
  5732.         "DBLSPAC"   MS DoubleSpace or DriveSpace
  5733. ---DoubleSpace/DriveSpace---
  5734.  12h  2 BYTEs    signature ",." (2Ch 2Eh)
  5735.  14h    var    preloading API entry point
  5736. ---CD-ROM---
  5737.  12h    WORD    reserved, must be 0000h
  5738.         appears to be another device chain
  5739.  14h    BYTE    drive letter (must initially be 00h; this byte is set by
  5740.           MSCDEX when it loads)
  5741.  15h    BYTE    number of units
  5742.  16h  6 BYTEs    signature 'MSCDnn' where 'nn' is version (currently '00')
  5743. SeeAlso: #1341 at INT 25/AX=CDCDh,#1557 at INT 2F/AX=5600h
  5744.  
  5745. Bitfields for device attributes (character device):
  5746. Bit(s)    Description    (Table 0859)
  5747.  15    set (indicates character device)
  5748.  14    IOCTL supported (see AH=44h)
  5749.  13    (DOS 3.0+) output until busy supported
  5750.  12    reserved
  5751.  11    (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
  5752.  10-8    reserved
  5753.  7    (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
  5754.     (see AX=4410h,AX=4411h)
  5755.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  5756.     (see AX=440Ch,AX=440Dh)
  5757.  5    reserved
  5758.  4    device is special (use INT 29 "fast console output")
  5759.  3    device is CLOCK$ (all reads/writes use transfer record described
  5760.       below)
  5761.  2    device is NUL
  5762.  1    device is standard output
  5763.  0    device is standard input
  5764. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  5765.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  5766.       010 = European DOS 4.0)
  5767. SeeAlso: #0860,#0858
  5768.  
  5769. Bitfields for device attributes (block device):
  5770. Bit(s)    Description    (Table 0860)
  5771.  15    clear (indicates block device)
  5772.  14    IOCTL supported
  5773.  13    non-IBM format
  5774.  12    network device (device is remote)
  5775.  11    (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
  5776.  10    reserved
  5777.  9    direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
  5778.  8    ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  5779.  7    (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
  5780.     (see AX=4410h,AX=4411h)
  5781.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  5782.     implies support for commands 17h and 18h
  5783.       (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  5784.  5-2    reserved
  5785.  1    driver supports 32-bit sector addressing (DOS 3.31+)
  5786.  0     reserved
  5787. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  5788.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  5789.       010 = European DOS 4.0)
  5790. SeeAlso: #0859,#0858
  5791.  
  5792. Format of DOS 2.x disk buffer:
  5793. Offset    Size    Description    (Table 0861)
  5794.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5795.         least-recently used buffer is first in chain
  5796.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  5797.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  5798.  08h    WORD    logical sector number
  5799.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  5800.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  5801.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  5802.  10h        buffered data
  5803. SeeAlso: #0862,#0864,#0865,#0867
  5804.  
  5805. Format of DOS 3.x disk buffer:
  5806. Offset    Size    Description    (Table 0862)
  5807.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5808.         least-recently used buffer is first in chain
  5809.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5810.  05h    BYTE    buffer flags (see #0863)
  5811.  06h    WORD    logical sector number
  5812.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  5813.  09h    BYTE    sector offset between copies if multiple copies to be written
  5814.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  5815.  0Eh    WORD    unused??? (almost always 0)
  5816.  10h        buffered data
  5817. SeeAlso: #0861,#0864,#0865,#0867
  5818.  
  5819. Bitfields for DOS 3.x disk buffer flags:
  5820. Bit(s)    Description    (Table 0863)
  5821.  7    ???
  5822.  6    buffer dirty
  5823.  5    buffer has been referenced
  5824.  4    ???
  5825.  3    sector in data area
  5826.  2    sector in a directory, either root or subdirectory
  5827.  1    sector in FAT
  5828.  0    boot sector??? (guess)
  5829. SeeAlso: #0868
  5830.  
  5831. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  5832. Offset    Size    Description    (Table 0864)
  5833.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0866)
  5834.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5835.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5836.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5837.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  5838.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  5839.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  5840.  11h    WORD    ??? seems always to be 0001h
  5841.  13h    WORD    segment of EMS physical page frame
  5842.  15h    WORD    ??? seems always to be zero
  5843.  17h  4 WORDs    EMS partial page mapping information???
  5844. SeeAlso: #0861,#0862,#0865,#0869
  5845.  
  5846. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  5847. Offset    Size    Description    (Table 0865)
  5848.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0866)
  5849.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5850.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5851.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5852.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  5853.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  5854.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  5855.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  5856.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  5857.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  5858.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  5859.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  5860.           into EMS
  5861.  18h    WORD    EMS handle for buffers, zero if not in EMS
  5862.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  5863.  1Ch    WORD    ??? appears always to be 0001h
  5864.  1Eh    WORD    segment of EMS physical page frame
  5865.  20h    WORD    ??? appears always to be zero
  5866.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  5867. SeeAlso: #0861,#0862,#0864,#0869
  5868.  
  5869. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  5870. Offset    Size    Description    (Table 0866)
  5871.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  5872.           in EMS
  5873.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  5874.           this chain are in the same segment.
  5875.  06h    BYTE    number of dirty buffers on this chain
  5876.  07h    BYTE    reserved (00h)
  5877. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  5878.       address modulo NDBCH,     0 <= N <= NDBCH-1
  5879.     each chain resides completely within one EMS page
  5880.     this structure is in main memory even if buffers are in EMS
  5881.  
  5882. Format of DOS 4.0-6.0 disk buffer:
  5883. Offset    Size    Description    (Table 0867)
  5884.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  5885.  02h    WORD    backward pointer, offset only
  5886.  04h    BYTE    drive (0=A,1=B, etc) if bit 7 clear
  5887.         SFT index if bit 7 set
  5888.         FFh if not in use
  5889.  05h    BYTE    buffer flags (see #0868)
  5890.  06h    DWORD    logical sector number (local buffers only)
  5891.  0Ah    BYTE    number of copies to write
  5892.         for FAT sectors, same as number of FATs
  5893.         for data and directory sectors, usually 1
  5894.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  5895.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  5896.  11h    WORD    size of data in buffer if remote buffer (see flags above)
  5897.  13h    BYTE    reserved (padding)
  5898.  14h        buffered data
  5899. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  5900.       (computed as the sum of high and low words of the logical sector
  5901.       number divided by the number of disk buffer chains) are on the same
  5902.       doubly-linked circular chain; for DOS 5+, only a single circular
  5903.       chain exists.
  5904.     the links consist of offset addresses only, the segment being the same
  5905.       for all buffers in the chain.
  5906. SeeAlso: #0861,#0862,#0864
  5907.  
  5908. Bitfields for DOS 4.0-6.0 disk buffer flags:
  5909. Bit(s)    Description    (Table 0868)
  5910.  7    remote buffer
  5911.  6    buffer dirty
  5912.  5    buffer has been referenced (reserved in DOS 5+)
  5913.  4    search data buffer (only valid if remote buffer)
  5914.  3    sector in data area
  5915.  2    sector in a directory, either root or subdirectory
  5916.  1    sector in FAT
  5917.  0    reserved
  5918. SeeAlso: #0863
  5919.  
  5920. Format of DOS 5.0-6.0 disk buffer info:
  5921. Offset    Size    Description    (Table 0869)
  5922.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  5923.         (see #0867)
  5924.  04h    WORD    number of dirty disk buffers
  5925.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5926.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5927.  0Ch    BYTE    buffer location
  5928.         00h base memory, no workspace buffer
  5929.         01h HMA, workspace buffer in base memory
  5930.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  5931.  11h  3 BYTEs    unused
  5932.  14h    WORD    ???
  5933.  16h    BYTE    flag: INT 24 fail while making an I/O status call
  5934.  17h    BYTE    temp storage for user memory allocation strategy during EXEC
  5935.  18h    BYTE    counter: number of INT 21 calls for which A20 is off
  5936.  19h    BYTE    bit flags
  5937.         bit 0: ???
  5938.         bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
  5939.             WINA20.SYS when MS Windows 3.0 starts)
  5940.         bit 2: in EXEC state (INT 21/AX=4B05h)
  5941.  1Ah    WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
  5942.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  5943.  1Dh    WORD    minimum paragraphs of memory required by program being EXECed
  5944.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  5945.           memory chain in base 640K only (first UMB MCB usually at
  5946.           9FFFh, locking out video memory with a DOS-owned memory
  5947.           block)
  5948.         the MCB this word points at contains a valid link into high
  5949.           memory even if it is marked with a 'Z' indicating the last
  5950.           memory block
  5951.  21h    WORD    paragraph from which to start scanning during memory allocation
  5952. SeeAlso: #0864,#0865
  5953.  
  5954. (Table 0870)
  5955. Call IFS utility function entry point with:
  5956.     AH = 20h miscellaneous functions
  5957.         AL = 00h get date
  5958.         Return: CX = year
  5959.             DH = month
  5960.             DL = day
  5961.         AL = 01h get process ID and computer ID
  5962.         Return: BX = current PSP segment
  5963.             DX = active network machine number
  5964.         AL = 05h get file system info
  5965.         ES:DI -> 16-byte info buffer
  5966.         Return: buffer filled
  5967.             Offset    Size    Description
  5968.              00h  2 BYTEs    unused
  5969.              02h    WORD    number of SFTs (actually counts only
  5970.                     the first two file table arrays)
  5971.              04h    WORD    number of FCB table entries
  5972.              06h    WORD    number of proctected FCBs
  5973.              08h  6 BYTEs    unused
  5974.              0Eh    WORD    largest sector size supported
  5975.         AL = 06h get machine name
  5976.         ES:DI -> 18-byte buffer for name
  5977.         Return: buffer filled with name starting at offset 02h
  5978.         AL = 08h get sharing retry count
  5979.         Return: BX = sharing retry count
  5980.         AL = other
  5981.         Return: CF set
  5982.     AH = 21h get redirection state
  5983.         BH = type (03h disk, 04h printer)
  5984.         Return: BH = state (00h off, 01h on)
  5985.     AH = 22h ??? some sort of time calculation
  5986.         AL = 00h ???
  5987.             nonzero ???
  5988.     AH = 23h ??? some sort of time calculation
  5989.     AH = 24h compare filenames
  5990.         DS:SI -> first ASCIZ filename
  5991.         ES:DI -> second ASCIZ filename
  5992.         Return: ZF set if files are same ignoring case and / vs \
  5993.     AH = 25h normalize filename
  5994.         DS:SI -> ASCIZ filename
  5995.         ES:DI -> buffer for result
  5996.         Return: filename uppercased, forward slashes changed to backslashes
  5997.     AH = 26h get DOS stack
  5998.         Return: DS:SI -> top of stack
  5999.             CX = size of stack in bytes
  6000.     AH = 27h increment InDOS flag
  6001.     AH = 28h decrement InDOS flag
  6002. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  6003.       pass them on to the default handler pointed at by [LoL+37h]
  6004. SeeAlso: #0871,#0872
  6005.  
  6006. Format of IFS driver list:
  6007. Offset    Size    Description    (Table 0871)
  6008.  00h    DWORD    pointer to next driver header
  6009.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  6010.  0Ch  4 BYTEs    ???
  6011.  10h    DWORD    pointer to IFS utility function entry point (see #0870)
  6012.         call with ES:BX -> IFS request (see #0872)
  6013.  14h    WORD    offset in header's segment of driver entry point
  6014.     ???
  6015. SeeAlso: #0870,#0872
  6016.  
  6017. Format of IFS request block:
  6018. Offset    Size    Description    (Table 0872)
  6019.  00h    WORD    total size in bytes of request
  6020.  02h    BYTE    class of request
  6021.         02h ???
  6022.         03h redirection
  6023.         04h ???
  6024.         05h file access
  6025.         06h convert error code to string
  6026.         07h ???
  6027.  03h    WORD    returned DOS error code
  6028.  05h    BYTE    IFS driver exit status
  6029.         00h success
  6030.         01h ???
  6031.         02h ???
  6032.         03h ???
  6033.         04h ???
  6034.         FFh internal failure
  6035.  06h 16 BYTEs    ???
  6036. ---request class 02h---
  6037.  16h    BYTE    function code
  6038.         04h ???
  6039.  17h    BYTE    unused???
  6040.  18h    DWORD    pointer to ???
  6041.  1Ch    DWORD    pointer to ???
  6042.  20h  2 BYTEs    ???
  6043. ---request class 03h---
  6044.  16h    BYTE    function code
  6045.  17h    BYTE    ???
  6046.  18h    DWORD    pointer to ???
  6047.  1Ch    DWORD    pointer to ???
  6048.  22h    WORD    returned ???
  6049.  24h    WORD    returned ???
  6050.  26h    WORD    returned ???
  6051.  28h    BYTE    returned ???
  6052.  29h    BYTE    unused???
  6053. ---request class 04h---
  6054.  16h    DWORD    pointer to ???
  6055.  1Ah    DWORD    pointer to ???
  6056. ---request class 05h---
  6057.  16h    BYTE    function code
  6058.         01h flush disk buffers
  6059.         02h get disk space
  6060.         03h MKDIR
  6061.         04h RMDIR
  6062.         05h CHDIR
  6063.         06h delete file
  6064.         07h rename file
  6065.         08h search directory
  6066.         09h file open/create
  6067.         0Ah LSEEK
  6068.         0Bh read from file
  6069.         0Ch write to file
  6070.         0Dh lock region of file
  6071.         0Eh commit/close file
  6072.         0Fh get/set file attributes
  6073.         10h printer control
  6074.         11h ???
  6075.         12h process termination
  6076.         13h ???
  6077.     ---class 05h function 01h---
  6078.      17h  7 BYTEs    ???
  6079.      1Eh    DWORD    pointer to ???
  6080.      22h  4 BYTEs    ???
  6081.      26h    BYTE    ???
  6082.      27h    BYTE    ???
  6083.     ---class 05h function 02h---
  6084.      17h  7 BYTEs    ???
  6085.      1Eh    DWORD    pointer to ???
  6086.      22h  4 BYTEs    ???
  6087.      26h    WORD    returned total clusters
  6088.      28h    WORD    returned sectors per cluster
  6089.      2Ah    WORD    returned bytes per sector
  6090.      2Ch    WORD    returned available clusters
  6091.      2Eh    BYTE    returned ???
  6092.      2Fh    BYTE    ???
  6093.     ---class 05h functions 03h,04h,05h---
  6094.      17h  7 BYTEs    ???
  6095.      1Eh    DWORD    pointer to ???
  6096.      22h  4 BYTEs    ???
  6097.      26h    DWORD    pointer to directory name
  6098.     ---class 05h function 06h---
  6099.      17h  7 BYTEs    ???
  6100.      1Eh    DWORD    pointer to ???
  6101.      22h  4 BYTEs    ???
  6102.      26h    WORD    attribute mask
  6103.      28h    DWORD    pointer to filename
  6104.     ---class 05h function 07h---
  6105.      17h  7 BYTEs    ???
  6106.      1Eh    DWORD    pointer to ???
  6107.      22h  4 BYTEs    ???
  6108.      26h    WORD    attribute mask
  6109.      28h    DWORD    pointer to source filespec
  6110.      2Ch    DWORD    pointer to destination filespec
  6111.     ---class 05h function 08h---
  6112.      17h  7 BYTEs    ???
  6113.      1Eh    DWORD    pointer to ???
  6114.      22h  4 BYTEs    ???
  6115.      26h    BYTE    00h FINDFIRST
  6116.             01h FINDNEXT
  6117.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  6118.      2Ch    WORD    search attribute if FINDFIRST
  6119.      2Eh    DWORD    pointer to filespec if FINDFIRST
  6120.     ---class 05h function 09h---
  6121.      17h  7 BYTEs    ???
  6122.      1Eh    DWORD    pointer to ???
  6123.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6124.      26h    WORD    ???  \ together, specify open vs. create, whether or
  6125.      28h    WORD    ???  / not to truncate
  6126.      2Ah  4 BYTEs    ???
  6127.      2Eh    DWORD    pointer to filename
  6128.      32h  4 BYTEs    ???
  6129.      36h    WORD    file attributes on call
  6130.             returned ???
  6131.      38h    WORD    returned ???
  6132.     ---class 05h function 0Ah---
  6133.      17h  7 BYTEs    ???
  6134.      1Eh    DWORD    pointer to ???
  6135.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6136.      26h    BYTE    seek type (02h = from end)
  6137.      28h    DWORD    offset on call
  6138.             returned new absolute position
  6139.     ---class 05h functions 0Bh,0Ch---
  6140.      17h  7 BYTEs    ???
  6141.      1Eh    DWORD    pointer to ???
  6142.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6143.      28h    WORD    number of bytes to transfer
  6144.             returned bytes actually transferred
  6145.      2Ah    DWORD    transfer address
  6146.     ---class 05h function 0Dh---
  6147.      17h  7 BYTEs    ???
  6148.      1Eh    DWORD    pointer to ???
  6149.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6150.      26h    BYTE    file handle???
  6151.      27h    BYTE    unused???
  6152.      28h    WORD    ???
  6153.      2Ah    WORD    ???
  6154.      2Ch    WORD    ???
  6155.      2Eh    WORD    ???
  6156.     ---class 05h function 0Eh---
  6157.      17h  7 BYTEs    ???
  6158.      1Eh    DWORD    pointer to ???
  6159.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6160.      26h    BYTE    00h commit file
  6161.             01h close file
  6162.      27h    BYTE    unused???
  6163.     ---class 05h function 0Fh---
  6164.      17h  7 BYTEs    ???
  6165.      1Eh    DWORD    pointer to ???
  6166.      22h  4 BYTEs    ???
  6167.      26h    BYTE    02h GET attributes
  6168.             03h PUT attributes
  6169.      27h    BYTE    unused???
  6170.      28h 12 BYTEs    ???
  6171.      34h    WORD    search attributes???
  6172.      36h    DWORD    pointer to filename
  6173.      3Ah    WORD    (GET) returned ???
  6174.      3Ch    WORD    (GET) returned ???
  6175.      3Eh    WORD    (GET) returned ???
  6176.      40h    WORD    (GET) returned ???
  6177.      42h    WORD    (PUT) new attributes
  6178.             (GET) returned attributes
  6179.     ---class 05h function 10h---
  6180.      17h  7 BYTEs    ???
  6181.      1Eh    DWORD    pointer to ???
  6182.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6183.      26h    WORD    ???
  6184.      28h    DWORD    pointer to ???
  6185.      2Ch    WORD    ???
  6186.      2Eh    BYTE    ???
  6187.      2Fh    BYTE    subfunction
  6188.             01h get printer setup
  6189.             03h ???
  6190.             04h ???
  6191.             05h ???
  6192.             06h ???
  6193.             07h ???
  6194.             21h set printer setup
  6195.     ---class 05h function 11h---
  6196.      17h  7 BYTEs    ???
  6197.      1Eh    DWORD    pointer to ???
  6198.      22h    DWORD    pointer to IFS open file structure (see #0873)
  6199.      26h    BYTE    subfunction
  6200.      27h    BYTE    unused???
  6201.      28h    WORD    ???
  6202.      2Ah    WORD    ???
  6203.      2Ch    WORD    ???
  6204.      2Eh    BYTE    ???
  6205.      2Fh    BYTE    ???
  6206.     ---class 05h function 12h---
  6207.      17h 15 BYTEs    unused???
  6208.      26h    WORD    PSP segment
  6209.      28h    BYTE    type of process termination
  6210.      29h    BYTE    unused???
  6211.     ---class 05h function 13h---
  6212.      17h 15 BYTEs    unused???
  6213.      26h    WORD    PSP segment
  6214. ---request class 06h---
  6215.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  6216.  1Ah    BYTE    returned ???
  6217.  1Bh    BYTE    unused
  6218. ---request class 07h---
  6219.  16h    DWORD    pointer to IFS open file structure (see #0873)
  6220.  1Ah    BYTE    ???
  6221.  1Bh    BYTE    unused???
  6222. SeeAlso: #0871,#0870,#0873
  6223.  
  6224. Format of IFS open file structure:
  6225. Offset    Size    Description    (Table 0873)
  6226.  00h    WORD    ???
  6227.  02h    WORD    device info word
  6228.  04h    WORD    file open mode
  6229.  06h    WORD    ???
  6230.  08h    WORD    file attributes
  6231.  0Ah    WORD    owner's network machine number
  6232.  0Ch    WORD    owner's PSP segment
  6233.  0Eh    DWORD    file size
  6234.  12h    DWORD    current offset in file
  6235.  16h    WORD    file time
  6236.  18h    WORD    file date
  6237.  1Ah 11 BYTEs    filename in FCB format
  6238.  25h    WORD    ???
  6239.  27h    WORD    hash value of SFT address
  6240.         (low word of linear address + segment&F000h)
  6241.  29h  3 WORDs    network info from SFT
  6242.  2Fh    WORD    ???
  6243.  
  6244. Format of one item in DOS 4.0+ list of special program names:
  6245. Offset    Size    Description    (Table 0874)
  6246.  00h    BYTE    length of name (00h = end of list)
  6247.  01h  N BYTEs    name in format name.ext
  6248.  N    2 BYTEs    DOS version to return for program (major,minor)
  6249.         (see AH=30h,INT 2F/AX=122Fh)
  6250. ---DOS 4 only---
  6251.  N+2    BYTE    number of times to return fake version number (FFh = always)
  6252. Note:    if the name of the executable for the program making the DOS "get
  6253.       version" call matches one of the names in this list, DOS returns the
  6254.       specified version rather than the true version number
  6255. --------v-215252-----------------------------
  6256. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  6257.     AX = 5252h
  6258. Return: BX = FFEEh if resident
  6259. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  6260. --------D-2153-------------------------------
  6261. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  6262.     AH = 53h
  6263.     DS:SI -> BIOS Parameter Block (see #0875)
  6264.     ES:BP -> buffer for Drive Parameter Block (see #0620 at AH=32h)
  6265. Return: ES:BP buffer filled
  6266. Notes:    for DOS 3.0+, the cluster at which to start searching is set to 0000h
  6267.       and the number of free clusters is set to FFFFh (unknown)
  6268.     if the number of sectors per cluster is set to zero, MS-DOS will hang
  6269.       at startup because it computes the internally-used shift count by
  6270.       shifting this value right until the carry flag is set; since this
  6271.       will never happen when the field is zero, MS-DOS hangs
  6272.  
  6273. Format of BIOS Parameter Block:
  6274. Offset    Size    Description    (Table 0875)
  6275.  00h    WORD    number of bytes per sector
  6276.  02h    BYTE    number of sectors per cluster
  6277.  03h    WORD    number of reserved sectors at start of disk
  6278.  05h    BYTE    number of FATs
  6279.  06h    WORD    number of entries in root directory
  6280.  08h    WORD    total number of sectors
  6281.         for DOS 4.0+, set to zero if partition >32M, then set DWORD at
  6282.           15h to actual number of sectors
  6283.  0Ah    BYTE    media ID byte (see #0581)
  6284.  0Bh    WORD    number of sectors per FAT
  6285. ---DOS 2.13---
  6286.  0Dh    WORD    number of sectors per track
  6287.  0Fh    WORD    number of heads
  6288.  11h    WORD    number of hidden sectors
  6289. ---DOS 3.0+ ---
  6290.  0Dh    WORD    number of sectors per track
  6291.  0Fh    WORD    number of heads
  6292.  11h    DWORD    number of hidden sectors
  6293.  15h 11 BYTEs    reserved
  6294. ---DOS 4.0+ ---
  6295.  15h    DWORD    total number of sectors if word at 08h contains zero
  6296.  19h  6 BYTEs    ???
  6297.  1Fh    WORD    number of cylinders
  6298.  21h    BYTE    device type
  6299.  22h    WORD    device attributes (removable or not, etc)
  6300. ---DR-DOS 5+ ---
  6301.  15h    DWORD    total number of sectors if word at 08h contains zero
  6302.  19h  6 BYTEs    reserved
  6303. ---European MS-DOS 4.00---
  6304.  15h    DWORD    total number of sectors if word at 08h contains zero
  6305.         (however, this DOS does not actually implement >32M partitions)
  6306. SeeAlso: #0620
  6307. --------D-2154-------------------------------
  6308. INT 21 - DOS 2+ - GET VERIFY FLAG
  6309.     AH = 54h
  6310. Return: AL = verify flag
  6311.         00h off
  6312.         01h on (all disk writes verified after writing)
  6313. SeeAlso: AH=2Eh
  6314. --------D-2155-------------------------------
  6315. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  6316.     AH = 55h
  6317.     DX = segment at which to create new PSP
  6318.     SI = (DOS 3.0+) value to place in memory size field at DX:[0002h]
  6319. Return: CF clear if successful
  6320. Notes:    creates a "child" PSP rather than making an exact copy of the current
  6321.       PSP; the new PSP's parent pointer is set to the current PSP and the
  6322.       reference count for each inherited file is incremented
  6323.     (DOS 2.0+) sets current PSP to DX
  6324.     (DOS 3.0+) marks "no inherit" file handles as closed in child PSP
  6325. BUG:    OS/2 Warp's DOS box does not clear CF on success, instead leaving it
  6326.       in its former state; to work around this, ensure that CF is clear
  6327.       before calling
  6328. SeeAlso: AH=26h,AH=50h
  6329. --------D-2156-------------------------------
  6330. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  6331.     AH = 56h
  6332.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  6333.     ES:DI -> ASCIZ new filename (no wildcards)
  6334.     CL = attribute mask (server call only, see below)
  6335. Return: CF clear if successful
  6336.     CF set on error
  6337.         AX = error code (02h,03h,05h,11h) (see #0885)
  6338. Notes:    allows move between directories on same logical volume
  6339.     this function does not set the archive attribute
  6340.       (see #0643 at AX=4301h), which results in incremental backups not
  6341.       backing up the file under its new name
  6342.     open files should not be renamed
  6343.     (DOS 3.0+) allows renaming of directories
  6344.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  6345.       error 12h (no more files) is returned on success, and both source and
  6346.       destination specs must be canonical (as returned by AH=60h).
  6347.       Wildcards in the destination are replaced by the corresponding char
  6348.       of each source file being renamed.  Under DOS 3.x, the call will fail
  6349.       if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
  6350.       the call will fail if any wildcards are used.     When invoked via
  6351.       AX=5D00h, only those files matching the attribute mask in CL are
  6352.       renamed.
  6353.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  6354.       and the new-name pointer is in ES:EDI (DS must equal ES)
  6355.     (DOS 2.x only) this function renames file by creating a new directory
  6356.       entry with the new name,then marking the old entry deleted
  6357. BUG:    under DR-DOS 3.41, this function will generate a new directory entry
  6358.       with the new name (including any wildcards) which can only be removed
  6359.       with a sector editor when invoked via AX=5D00h
  6360. SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h
  6361. --------v-215643------------------------
  6362. INT 21 - VIRUS - "PS-MPC.Gold" - INSTALLATION CHECK
  6363.     AX = 5643h  ('VC')
  6364. Return: AX = 5053h  ('PS') if resident
  6365. SeeAlso: AX=33E0h"VIRUS",AX=6303h"VIRUS"
  6366. --------D-215700-----------------------------
  6367. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  6368.     AX = 5700h
  6369.     BX = file handle
  6370. Return: CF clear if successful
  6371.         CX = file's time (see #0876)
  6372.         DX = file's date (see #0877)
  6373.     CF set on error
  6374.         AX = error code (01h,06h) (see #0885)
  6375. Note:    under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
  6376.       character devices; MS-DOS returns date and time of opening
  6377. SeeAlso: AX=5701h
  6378.  
  6379. Bitfields for file time:
  6380. Bit(s)    Description    (Table 0876)
  6381.  15-11    hours (0-23)
  6382.  10-5    minutes
  6383.  4-0    seconds/2
  6384.  
  6385. Bitfields for file date:
  6386. Bit(s)    Description    (Table 0877)
  6387.  15-9    year - 1980
  6388.  8-5    month
  6389.  4-0    day
  6390. --------D-215701-----------------------------
  6391. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  6392.     AX = 5701h
  6393.     BX = file handle
  6394.     CX = new time (see #0876)
  6395.     DX = new date (see #0877)
  6396. Return: CF clear if successful
  6397.     CF set on error
  6398.         AX = error code (01h,06h) (see #0885)
  6399. SeeAlso: AX=5700h
  6400. --------D-215702-----------------------------
  6401. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
  6402.     AX = 5702h
  6403.     BX = file handle
  6404.     CX = size of result buffer or 0000h
  6405.     DS:SI -> EAP list (see #0878)
  6406.     ES:DI -> buffer for returned EAV list (see #0881)
  6407. Return: CF clear if successful
  6408.         CX = size of returned data
  6409.     CF set on error
  6410.         AX = error code (see #0885)
  6411. Desc:    get the current value of one or more extended attributes
  6412. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  6413.       returned, only the amount of data which is available
  6414.     the default DOS 4 behavior is to return a single word of 0000h (no
  6415.       structures) in the result buffer if CX>=0002h on entry
  6416. SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  6417.  
  6418. Format of EAP (extended attribute properties) list:
  6419. Offset    Size    Description    (Table 0878)
  6420.  00h    WORD    number of EAP structures following
  6421.  02h    var    array of EAP structures (see #0879)
  6422. SeeAlso: #0881
  6423.  
  6424. Format of EAP (extended attribute property) structure:
  6425. Offset    Size    Description    (Table 0879)
  6426.  00h    BYTE    attribute type
  6427.         01h boolean (either 00h or 01h)
  6428.         02h number (BYTE, WORD, or DWORD)
  6429.         03h string
  6430.         04h date stamp
  6431.         05h time stamp
  6432.  01h    WORD    EAP flags (see #0880)
  6433.  03h    BYTE    size of reference string (name)
  6434.  04h  N BYTEs    reference string
  6435.  
  6436. Bitfields for EAP flags:
  6437. Bit(s)    Description    (Table 0880)
  6438.  12    unchangeable
  6439.  13    ignore
  6440.  14    unchangeable
  6441.  15    used by COMMAND.COM for code page, but not understood by ATTRIB
  6442.  
  6443. Format of EAV (extended attribute value) list:
  6444. Offset    Size    Description    (Table 0881)
  6445.  00h    WORD    number of EAV structures following
  6446.  02h    var    array of Extended Attribute Value structures (see #0882)
  6447. SeeAlso: #0878
  6448.  
  6449. Format of Extended Attribute Value structures:
  6450. Offset    Size    Description    (Table 0882)
  6451.  00h  4 BYTEs    ???
  6452.  04h    BYTE    size of reference string
  6453.  05h    WORD    size of value
  6454.  07h    var    reference string
  6455.     var    value
  6456. --------O-215702-----------------------------
  6457. INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
  6458.     AX = 5702h
  6459.     BX = file handle
  6460.     CX = size of buffer for information
  6461.     DX = level of information
  6462.     ES:DI -> buffer for information
  6463. Return: CF clear if successful
  6464.     CF set on error
  6465.         AX = error code
  6466. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  6467. --------O-215702BXFFFF-----------------------
  6468. INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
  6469.     AX = 5702h
  6470.     BX = FFFFh
  6471.     CX = size of buffer for information
  6472.     DX = level of information (0002h)
  6473.     DS:SI -> filename
  6474.     ES:DI -> buffer for FAPI path information (see #0883)
  6475. Return: CF clear if successful
  6476.         AL = 00h
  6477.     CF set on error
  6478.         AX = error code
  6479. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  6480.  
  6481. Format of FAPI path information:
  6482. Offset    Size    Description    (Table 0883)
  6483.  00h 22 BYTEs    ???
  6484.  16h    DWORD    extended attribute size (none present if less than 5)
  6485. --------D-215703-----------------------------
  6486. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
  6487.     AX = 5703h
  6488.     BX = file handle
  6489.     CX = size of result buffer or 0000h
  6490.     ES:DI -> result buffer
  6491. Return: CF clear if successful
  6492.         CX = size of returned data
  6493.     CF set on error
  6494.         AX = error code (see #0885)
  6495.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  6496. Desc:    get a list of the extended attributes which are defined for the
  6497.       specified file
  6498. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  6499.       returned, only the amount of data which is available
  6500.     the default DOS 4 behavior is to return a trivial EAP list consisting
  6501.       of the single word 0000h (no EAP structures) if CX>=0002h on entry
  6502. SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  6503. --------O-215703-----------------------------
  6504. INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
  6505.     AX = 5703h
  6506.     BX = file handle
  6507.     CX = size of information buffer
  6508.     DX = level of information
  6509.     ES:DI -> information buffer
  6510. Return: CF clear if successful
  6511.     CF set on error
  6512.         AX = error code
  6513. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  6514. --------O-215703BXFFFF-----------------------
  6515. INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
  6516.     AX = 5703h
  6517.     BX = FFFFh
  6518.     CX = size of information buffer
  6519.     DX = level of information
  6520.     DS:SI -> filename
  6521.     ES:DI -> information buffer
  6522. Return: CF clear if successful
  6523.     CF set on error
  6524.         AX = error code
  6525. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  6526. --------D-215704-----------------------------
  6527. INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
  6528.     AX = 5704h
  6529.     BX = file handle
  6530.     ES:DI -> EAV list (see #0881)
  6531. Return: CF clear if successful
  6532.     CF set on error
  6533.         AX = error code (see #0885)
  6534. Note:    the default DOS 4 behavior is to do nothing and return successfully
  6535. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  6536. --------U-215757BX5757-----------------------
  6537. INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
  6538.     AX = 5757h
  6539.     BX = 5757h
  6540. Return: AX = 0000h if installed
  6541.         BX = ???
  6542.         DX = ???
  6543.         DS:SI -> list of 27 DWORD entry point addresses
  6544. Program: IBM Genie is a set of utility TSRs by Helix Software
  6545. Note:    other functions possible if BX <> 5757h, but details not yet available
  6546. ----------215758-----------------------------
  6547. INT 21 U - Headroom - API
  6548.     AX = 5758h
  6549.     BL = function
  6550.         00h ???
  6551.         01h get Headroom location
  6552.         Return: CF clear if installed
  6553.                 AX = PSP segment of Headroom TSR
  6554.                 BX = paragraphs of memory used by Headroom
  6555.             CF set if not (normal DOS return)
  6556.         Note:    this function is also used as an installation check
  6557.         02h get INT 21 handler
  6558.         Return: CF clear
  6559.             ES:BX -> Headroom's INT 21 handler
  6560.         Note: also sets unknown flag
  6561.         03h launch application???
  6562.         DS:SI -> 233-byte application record
  6563.         Return: ???
  6564.         04h ???
  6565.         ???
  6566.         Return: CF clear
  6567.         05h get swap directory
  6568.         Return: CF clear
  6569.             DX:AX -> ASCIZ swap directory name
  6570.         06h ???
  6571.         DX = ???
  6572.         Return: CF clear
  6573.         07h ???
  6574.         08h ???
  6575.         09h get current application
  6576.         Return: BX = application number
  6577.         0Ah ???
  6578.         DX = application number
  6579.         DS:SI = ???
  6580.         Return: ???
  6581.         0Bh ???
  6582.         0Ch ???
  6583.         DX = application number
  6584.         ???
  6585.         Return: ???
  6586.         0Dh ???
  6587.         DX = application number
  6588.         ???
  6589.         Return: ???
  6590.         0Eh get ???
  6591.         Return: CF clear
  6592.             AX = ???
  6593.         0Fh set ??? flag
  6594.         10h clear ??? flag
  6595.         11h find application by name
  6596.         DS:SI -> ASCIZ application name
  6597.         Return: CF clear
  6598.             AX = application number or FFFFh if not loaded
  6599.         12h ???
  6600.         DX = application number
  6601.         Return: CF clear
  6602.             ???
  6603.         13h ???
  6604.         Return: CF clear
  6605.         14h ???
  6606.         same as function 13h
  6607.         15h set ???
  6608.         DX = ???
  6609.         16h get ???
  6610.         Return: AX = ??? set by function 15h
  6611.         17h get ???
  6612.         Return: BX = ???
  6613.             CX = ??? (may be pointer in BX:CX)
  6614.         18h BUG: branches incorrectly due to fencepost error
  6615. Program: Headroom is a TSR/task switcher by Helix Software
  6616. SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
  6617. --------D-2158-------------------------------
  6618. INT 21 - DOS 2.11+ - GET OR SET MEMORY ALLOCATION STRATEGY
  6619.     AH = 58h
  6620.     AL = subfunction
  6621.         00h get allocation strategy
  6622.         Return: AX = current strategy (see #0884)
  6623.         01h set allocation strategy
  6624.         BL = new allocation strategy (see #0884)
  6625.         BH = 00h (DOS 5+)
  6626. Return: CF clear if successful
  6627.     CF set on error
  6628.         AX = error code (01h) (see #0885)
  6629. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  6630.       2 or greater means last fit
  6631.     the Get subfunction returns the last value set
  6632.     setting an allocation strategy involving high memory does not
  6633.       automatically link in the UMB memory chain; this must be done
  6634.       explicitly with AX=5803h in order to actually allocate high memory
  6635.     a program which changes the allocation strategy should restore it
  6636.       before terminating
  6637.     Toshiba MS-DOS v2.11 supports subfunctions 00h and 01h, as does the
  6638.       TI Professional MS-DOS v2.13
  6639.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  6640. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  6641.  
  6642. (Table 0884)
  6643. Values for DOS memory allocation strategy:
  6644.  00h low memory first fit
  6645.  01h low memory best fit
  6646.  02h low memory last fit
  6647. ---DOS 5+ ---
  6648.  40h high memory first fit
  6649.  41h high memory best fit
  6650.  42h high memory last fit
  6651.  80h first fit, try high then low memory
  6652.  81h best fit, try high then low memory
  6653.  82h last fit, try high then low memory
  6654. --------D-2158-------------------------------
  6655. INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
  6656.     AH = 58h
  6657.     AL = subfunction
  6658.         02h get UMB link state
  6659.         Return: AL = current link state
  6660.                 00h UMBs not part of DOS memory chain
  6661.                 01h UMBs in DOS memory chain
  6662.         03h set UMB link state
  6663.         BX = new link state
  6664.             0000h remove UMBs from DOS memory chain
  6665.             0001h add UMBs to DOS memory chain
  6666. Return: CF clear if successful
  6667.     CF set on error
  6668.         AX = error code (01h) (see #0885)
  6669. Notes:    a program which changes the UMB link state should restore it before
  6670.       terminating
  6671.     UMBs will only be available if CONFIG.SYS contains the line DOS=UMB,
  6672.       the UMBs have been linked into the memory chain with AX=5803h, and
  6673.       the allocation strategy has been set to include high memory with
  6674.       AX=5801h
  6675. SeeAlso: #1485 at INT 2F/AX=4310h
  6676. --------v-2158CC-----------------------------
  6677. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  6678.     AX = 58CCh
  6679. Return: CF clear if resident
  6680. SeeAlso: AX=5643h,AX=5252h,AX=58DDh,AX=6303h"VIRUS",AX=6969h
  6681. --------v-2158DD-----------------------------
  6682. INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
  6683.     AX = 58DDh
  6684. Return: CX = code segment of virus
  6685.     ES:BX = old INT 21h vector
  6686. SeeAlso: AX=5252h,AX=58CCh,AX=6969h
  6687. --------D-2159--BX0000-----------------------
  6688. INT 21 - DOS 3.0+ - GET EXTENDED ERROR INFORMATION
  6689.     AH = 59h
  6690.     BX = 0000h
  6691. Return: AX = extended error code (see #0885)
  6692.     BH = error class (see #0887)
  6693.     BL = recommended action (see #0888)
  6694.     CH = error locus (see #0889)
  6695.     ES:DI may be pointer (see #0886, error code list below)
  6696.     CL, DX, SI, BP, and DS destroyed
  6697. Notes:    functions available under DOS 2.x map the true DOS 3.0+ error code into
  6698.       one supported under DOS 2.x
  6699.     you should call this function to retrieve the true error code when an
  6700.       FCB or DOS 2.x call returns an error
  6701.     under DR-DOS 5.0, this function does not use any of the DOS-internal
  6702.       stacks and may thus be called at any time
  6703. SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
  6704.  
  6705. (Table 0885)
  6706. Values for DOS extended error code:
  6707.  00h (0)   no error
  6708.  01h (1)   function number invalid
  6709.  02h (2)   file not found
  6710.  03h (3)   path not found
  6711.  04h (4)   too many open files (no handles available)
  6712.  05h (5)   access denied
  6713.  06h (6)   invalid handle
  6714.  07h (7)   memory control block destroyed
  6715.  08h (8)   insufficient memory
  6716.  09h (9)   memory block address invalid
  6717.  0Ah (10)  environment invalid (usually >32K in length)
  6718.  0Bh (11)  format invalid
  6719.  0Ch (12)  access code invalid
  6720.  0Dh (13)  data invalid
  6721.  0Eh (14)  reserved
  6722.  0Fh (15)  invalid drive
  6723.  10h (16)  attempted to remove current directory
  6724.  11h (17)  not same device
  6725.  12h (18)  no more files
  6726. ---DOS 3.0+ ---
  6727.  13h (19)  disk write-protected
  6728.  14h (20)  unknown unit
  6729.  15h (21)  drive not ready
  6730.  16h (22)  unknown command
  6731.  17h (23)  data error (CRC)
  6732.  18h (24)  bad request structure length
  6733.  19h (25)  seek error
  6734.  1Ah (26)  unknown media type (non-DOS disk)
  6735.  1Bh (27)  sector not found
  6736.  1Ch (28)  printer out of paper
  6737.  1Dh (29)  write fault
  6738.  1Eh (30)  read fault
  6739.  1Fh (31)  general failure
  6740.  20h (32)  sharing violation
  6741.  21h (33)  lock violation
  6742.  22h (34)  disk change invalid (ES:DI -> media ID structure)(see #0886)
  6743.  23h (35)  FCB unavailable
  6744.  24h (36)  sharing buffer overflow
  6745.  25h (37)  (DOS 4.0+) code page mismatch
  6746.  26h (38)  (DOS 4.0+) cannot complete file operation (out of input)
  6747.  27h (39)  (DOS 4.0+) insufficient disk space
  6748.  28h-31h   reserved
  6749.  32h (50)  network request not supported
  6750.  33h (51)  remote computer not listening
  6751.  34h (52)  duplicate name on network
  6752.  35h (53)  network name not found
  6753.  36h (54)  network busy
  6754.  37h (55)  network device no longer exists
  6755.  38h (56)  network BIOS command limit exceeded
  6756.  39h (57)  network adapter hardware error
  6757.  3Ah (58)  incorrect response from network
  6758.  3Bh (59)  unexpected network error
  6759.  3Ch (60)  incompatible remote adapter
  6760.  3Dh (61)  print queue full
  6761.  3Eh (62)  queue not full
  6762.  3Fh (63)  not enough space to print file
  6763.  40h (64)  network name was deleted
  6764.  41h (65)  network: Access denied
  6765.  42h (66)  network device type incorrect
  6766.  43h (67)  network name not found
  6767.  44h (68)  network name limit exceeded
  6768.  45h (69)  network BIOS session limit exceeded
  6769.  46h (70)  temporarily paused
  6770.  47h (71)  network request not accepted
  6771.  48h (72)  network print/disk redirection paused
  6772.  49h (73)  network software not installed
  6773.         (LANtastic) invalid network version
  6774.  4Ah (74)  unexpected adapter close
  6775.         (LANtastic) account expired
  6776.  4Bh (75)  (LANtastic) password expired
  6777.  4Ch (76)  (LANtastic) login attempt invalid at this time
  6778.  4Dh (77)  (LANtastic v3+) disk limit exceeded on network node
  6779.  4Eh (78)  (LANtastic v3+) not logged in to network node
  6780.  4Fh (79)  reserved
  6781.  50h (80)  file exists
  6782.  51h (81)  reserved
  6783.  52h (82)  cannot make directory
  6784.  53h (83)  fail on INT 24h
  6785.  54h (84)  (DOS 3.3+) too many redirections
  6786.  55h (85)  (DOS 3.3+) duplicate redirection
  6787.  56h (86)  (DOS 3.3+) invalid password
  6788.  57h (87)  (DOS 3.3+) invalid parameter
  6789.  58h (88)  (DOS 3.3+) network write fault
  6790.  59h (89)  (DOS 4.0+) function not supported on network
  6791.  5Ah (90)  (DOS 4.0+) required system component not installed
  6792.  64h (100) (MSCDEX) unknown error
  6793.  65h (101) (MSCDEX) not ready
  6794.  66h (102) (MSCDEX) EMS memory no longer valid
  6795.  67h (103) (MSCDEX) not High Sierra or ISO-9660 format
  6796.  68h (104) (MSCDEX) door open
  6797.  
  6798. Format of media ID structure:
  6799. Offset    Size    Description    (Table 0886)
  6800.  00h 12 BYTEs    ASCIZ volume label of required disk
  6801.  0Ch    DWORD    serial number (DOS 4.0+)
  6802.  
  6803. (Table 0887)
  6804. Values for DOS Error Class:
  6805.  01h    out of resource (storage space or I/O channels)
  6806.  02h    temporary situation (file or record lock)
  6807.  03h    authorization (denied access)
  6808.  04h    internal (system software bug)
  6809.  05h    hardware failure
  6810.  06h    system failure (configuration file missing or incorrect)
  6811.  07h    application program error
  6812.  08h    not found
  6813.  09h    bad format
  6814.  0Ah    locked
  6815.  0Bh    media error
  6816.  0Ch    already exists
  6817.  0Dh    unknown
  6818.  
  6819. (Table 0888)
  6820. Values for DOS Suggested Action:
  6821.  01h    retry
  6822.  02h    delayed retry
  6823.  03h    prompt user to reenter input
  6824.  04h    abort after cleanup
  6825.  05h    immediate abort
  6826.  06h    ignore
  6827.  07h    retry after user intervention
  6828.  
  6829. (Table 0889)
  6830. Values for DOS Error Locus:
  6831.  01h    unknown or not appropriate
  6832.  02h    block device (disk error)
  6833.  03h    network related
  6834.  04h    serial device (timeout)
  6835.  05h    memory related
  6836. --------D-2159--BX0001-----------------------
  6837. INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
  6838.     AH = 59h
  6839.     BX = 0001h
  6840. Return: ES:DI -> hard error information packet (see #0890) for most recent
  6841.         hard (critical) error
  6842. SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
  6843.  
  6844. Format of European MS-DOS 4.0 hard error information packet:
  6845. Offset    Size    Description    (Table 0890)
  6846.  00h    WORD    contents of AX at system entry
  6847.  02h    WORD    Process ID which encountered error
  6848.  04h    WORD    contents of AX at time of error
  6849.  06h    BYTE    error type
  6850.         00h physical I/O error
  6851.         01h disk change request
  6852.         02h file sharing violation
  6853.         03h FCB problem
  6854.         04h file locking violation
  6855.         05h bad FAT
  6856.         06h network detected error
  6857.  07h    BYTE    INT 24 error code
  6858.  08h    WORD    extended error code (see #0885)
  6859.  0Ah    DWORD    pointer to associated device
  6860. --------D-215A-------------------------------
  6861. INT 21 - DOS 3.0+ - CREATE TEMPORARY FILE
  6862.     AH = 5Ah
  6863.     CX = file attribute (see #0643 at AX=4301h)
  6864.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  6865.         generated filename
  6866. Return: CF clear if successful
  6867.         AX = file handle opened for read/write in compatibility mode
  6868.         DS:DX pathname extended with generated name for temporary file
  6869.     CF set on error
  6870.         AX = error code (03h,04h,05h) (see #0885)
  6871. Desc:    creates a file with a unique name which must be explicitly deleted
  6872. BUGS:    COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  6873.       wraps around to the end of the segment
  6874.     MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
  6875.       hang the system if the specified path is the root directory and the
  6876.       root directory is full (no free directory entries)
  6877. Note:    under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  6878. SeeAlso: AH=3Ch,AH=5Bh
  6879. --------D-215B-------------------------------
  6880. INT 21 - DOS 3.0+ - CREATE NEW FILE
  6881.     AH = 5Bh
  6882.     CX = file attribute (see #0643 at AX=4301h)
  6883.     DS:DX -> ASCIZ filename
  6884. Return: CF clear if successful
  6885.         AX = file handle opened for read/write in compatibility mode
  6886.     CF set on error
  6887.         AX = error code (03h,04h,05h,50h) (see #0885)
  6888. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  6889.       rather than truncating it; this permits its use in creating semaphore
  6890.       files because it is an atomic "test and set" operation
  6891.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  6892. SeeAlso: AH=3Ch,AH=5Ah
  6893. --------D-215C-------------------------------
  6894. INT 21 - DOS 3.0+ - "FLOCK" - RECORD LOCKING
  6895.     AH = 5Ch
  6896.     AL = subfunction
  6897.         00h lock region of file
  6898.         01h unlock region of file
  6899.     BX = file handle
  6900.     CX:DX = start offset of region within file
  6901.     SI:DI = length of region in bytes
  6902. Return: CF clear if successful
  6903.     CF set on error
  6904.         AX = error code (01h,06h,21h,24h) (see #0885)
  6905. Notes:    error returned unless SHARE or network installed
  6906.     an unlock call must specify the same region as some prior lock call
  6907.     locked regions become entirely inaccessible to other processes
  6908.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  6909.       handles inherited by child processes (see AH=4Bh) do not
  6910.     under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
  6911.       inherit flag and then starts a child, any locks set by the parent
  6912.       are ignored, and the child will only get an error if it tries to
  6913.       lock an area previously locked by the parent process
  6914. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  6915. --------D-215D00-----------------------------
  6916. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  6917.     AX = 5D00h
  6918.     DS:DX -> DOS parameter list (see #0891)
  6919.     DPL contains all register values for a call to INT 21h
  6920. Return: as appropriate for function being called
  6921. Notes:    does not check AH.  Out of range values will crash the system
  6922.     executes using specified computer ID and process ID
  6923.     sharing delay loops skipped
  6924.     a special sharing mode is enabled to handle FCBs opened across network
  6925.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
  6926.       MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
  6927.       under DR-DOS 5.0-6.0, the call returns error code 03h due to improper
  6928.       support for the server function call (see below)
  6929.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  6930.       DELETE (AH=41h), and RENAME (AH=56h)
  6931.     functions which take filenames require canonical names (as returned
  6932.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  6933. BUGS:    the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
  6934.       seemingly ignoring HPFS drives
  6935.     DR-DOS 5.0-6.0 merely recursively call INT 21 after loading the
  6936.       registers from the DPL, leading to problems for peer-to-peer
  6937.       networks
  6938. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  6939.  
  6940. Format of DOS parameter list:
  6941. Offset    Size    Description    (Table 0891)
  6942.  00h    WORD    AX
  6943.  02h    WORD    BX
  6944.  04h    WORD    CX
  6945.  06h    WORD    DX
  6946.  08h    WORD    SI
  6947.  0Ah    WORD    DI
  6948.  0Ch    WORD    DS
  6949.  0Eh    WORD    ES
  6950.  10h    WORD    reserved (0)
  6951.  12h    WORD    computer ID (0 = current system)
  6952.  14h    WORD    process ID (PSP segment on specified computer)
  6953. Note:    under Windows Enhanced mode, the computer ID is normally the virtual
  6954.       machine ID (see INT 2F/AX=1683h), though this can reportedly be
  6955.       changed by setting UniqueDOSPSP= in SYSTEM.INI
  6956. --------D-215D01-----------------------------
  6957. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  6958.     AX = 5D01h
  6959.     DS:DX -> DOS parameter list (see #0891), only computer ID and
  6960.           process ID fields used
  6961. Return: CF set on error
  6962.         AX = error code (see #0885)
  6963.     CF clear if successful
  6964. Notes:    flushes buffers and updates directory entries for each file which has
  6965.       been written to; if remote file, calls INT 2F/AX=1107h
  6966.     the computer ID and process ID are stored but ignored under DOS 3.3
  6967.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6968. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  6969. --------D-215D02-----------------------------
  6970. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  6971.     AX = 5D02h
  6972.     DS:DX -> DOS parameter list (see #0891), only fields DX, DS,
  6973.           computer ID, and process ID used
  6974.     DPL's DS:DX -> ASCIZ name of file to close
  6975. Return: CF set on error
  6976.         AX = error code (see #0885)
  6977.     CF clear if successful
  6978. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h])
  6979.       (see #0848 at AH=52h)
  6980.     name must be canonical fully-qualified, such as returned by AH=60h
  6981.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6982.     not supported by Novell DOS 7
  6983. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  6984. --------D-215D03-----------------------------
  6985. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  6986.     AX = 5D03h
  6987.     DS:DX -> DOS parameter list (see #0891), only computer ID used
  6988. Return: CF set on error
  6989.         AX = error code (see #0885)
  6990.     CF clear if successful
  6991. Notes:    error unless SHARE is loaded (calls [SysFileTable-30h])
  6992.       (see #0848 at AH=52h)
  6993.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6994.     not supported by Novell DOS 7
  6995. SeeAlso: AX=5D02h,AX=5D04h
  6996. --------D-215D04-----------------------------
  6997. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  6998.     AX = 5D04h
  6999.     DS:DX -> DOS parameter list (see #0891), only computer ID and
  7000.           process ID fields used
  7001. Return: CF set on error
  7002.         AX = error code (see #0885)
  7003.     CF clear if successful
  7004. Notes:    error unless SHARE is loaded (calls [SysFileTable-2Ch])
  7005.        (see #0848 at AH=52h)
  7006.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  7007.     not supported by Novell DOS 7
  7008. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  7009. --------D-215D05-----------------------------
  7010. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  7011.     AX = 5D05h
  7012.     DS:DX -> DOS parameter list (see #0891)
  7013.     DPL's BX = index of sharing record (see #0849 at AH=52h)
  7014.     DPL's CX = index of SFT in sharing record's SFT list
  7015. Return: CF clear if successful
  7016.         ES:DI -> ASCIZ filename
  7017.         BX = network machine number of SFT's owner
  7018.         CX = number of locks held by SFT's owner
  7019.     CF set if either index out of range
  7020.         AX = 0012h (no more files)
  7021. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h])
  7022.       (see #0848 at AH=52h)
  7023.     names are always canonical fully-qualified, such as returned by AH=60h
  7024.     not supported by DR-DOS 3.41 and 5.0 and Novell DOS 7, but does not
  7025.       return an error, instead destroying AX
  7026. SeeAlso: AH=5Ch,AH=60h
  7027. --------D-215D06-----------------------------
  7028. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  7029.     AX = 5D06h
  7030. Return: CF set on error
  7031.        AX = error code (see #0885)
  7032.     CF clear if successful
  7033.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  7034.         (critical error flag is first byte) (see #0892)
  7035.         CX = size in bytes of area which must be swapped while in DOS
  7036.         DX = size in bytes of area which must always be swapped
  7037. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  7038.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  7039.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  7040.       DOS 2.x by forcing use of correct stack
  7041.     swapping the data area allows reentering DOS unless DOS is in a
  7042.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  7043.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  7044.     SHARE and other DOS utilities consult the byte at offset 04h in the
  7045.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  7046.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  7047.     DR-DOS 3.41+ supports this function, but the SDA format beyond the
  7048.       first 18h bytes is completely different from MS-DOS
  7049. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  7050.  
  7051. Format of DOS 3.10-3.30 Swappable Data Area:
  7052. Offset    Size    Description    (Table 0892)
  7053.  -34    BYTE    (DOS 3.10+) printer echo flag (00h off, FFh active)
  7054.  -31    BYTE    (DOS 3.30) current switch character
  7055.  -28    BYTE    (DOS 3.30) incremented on each INT 21/AX=5E01h call
  7056.  -27 16 BYTEs    (DOS 3.30) machine name set by INT 21/AX=5E01h
  7057.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  7058.           enable critical-section calls (see INT 2A/AH=80h)
  7059.  -1    BYTE    unused padding
  7060. ---start of actual SDA---
  7061.  00h    BYTE    critical error flag ("ErrorMode")
  7062.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  7063.  02h    BYTE    drive on which current critical error occurred, or FFh
  7064.         (DR-DOS sets to drive number during INT 24, 00h otherwise)
  7065.  03h    BYTE    locus of last error
  7066.  04h    WORD    extended error code of last error
  7067.  06h    BYTE    suggested action for last error
  7068.  07h    BYTE    class of last error
  7069.  08h    DWORD    ES:DI pointer for last error
  7070.  0Ch    DWORD    current DTA (Disk Transfer Address)
  7071.         note: may point into SDA during the DOS EXEC function
  7072.           (see AH=4Bh), so programs which swap the SDA must be
  7073.           prepared to move the DTA to a private buffer if they
  7074.           might be invoked during an EXEC
  7075.  10h    WORD    current PSP
  7076.  12h    WORD    stores SP across an INT 23
  7077.  14h    WORD    return code from last process termination (zerod after reading
  7078.           with AH=4Dh)
  7079.  16h    BYTE    current drive
  7080.  17h    BYTE    extended break flag
  7081. ---remainder need only be swapped if in DOS---
  7082.  18h    WORD    value of AX on call to INT 21
  7083.  1Ah    WORD    PSP segment for sharing/network
  7084.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  7085.  1Eh    WORD    first usable memory block found when allocating memory
  7086.  20h    WORD    best usable memory block found when allocating memory
  7087.  22h    WORD    last usable memory block found when allocating memory
  7088.  24h    WORD    memory size in paragraphs (used only during initialization)
  7089.  26h    WORD    last entry checked during directory search
  7090.  28h    BYTE    flag: INT 24 returned Fail
  7091.  29h    BYTE    flags: allowable INT 24 actions (passed to INT 24 in AH)
  7092.  2Ah    BYTE    directory flag (00h directory, 01h file)
  7093.  2Bh    BYTE    flag: FFh if Ctrl-Break termination, 00h otherwise
  7094.  2Ch    BYTE    flag: allow embedded blanks in FCB
  7095.  2Dh    BYTE    padding (unused)
  7096.  2Eh    BYTE    day of month
  7097.  2Fh    BYTE    month
  7098.  30h    WORD    year - 1980
  7099.  32h    WORD    number of days since 1-1-1980
  7100.  34h    BYTE    day of week (0 = Sunday)
  7101.  35h    BYTE    flag: console swapped during read from device
  7102.  36h    BYTE    flag: safe to call INT 28 if nonzero
  7103.  37h    BYTE    flag: if nonzero, INT 24 Abort turned into INT 24 Fail
  7104.         (set only during process termination)
  7105.  38h 26 BYTEs    device driver request header (see #1382 at INT 2F/AX=0802h)
  7106.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  7107.  56h 22 BYTEs    device driver request header for I/O calls
  7108.  6Ch 14 BYTEs    device driver request header for disk status check
  7109.  7Ah    DWORD    pointer to device I/O buffer???
  7110.  7Eh    WORD    ???
  7111.  80h    WORD    ???
  7112.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  7113.  83h    BYTE    padding (unused)
  7114.  84h  3 BYTEs    24-bit user number (see AH=30h)
  7115.  87h    BYTE    OEM number (see #0619 at AH=30h)
  7116.  88h    WORD    offset to error code conversion table for INT 25/INT 26
  7117.  8Ah  6 BYTEs    CLOCK$ transfer record (see #0893)
  7118.  90h    BYTE    device I/O buffer for single-byte I/O functions
  7119.  91h    BYTE    padding??? (unused)
  7120.  92h 128 BYTEs    buffer for filename
  7121. 112h 128 BYTEs    buffer for filename
  7122. 192h 21 BYTEs    findfirst/findnext search data block (see #0839 at AH=4Eh)
  7123. 1A7h 32 BYTEs    directory entry for found file (see #0580 at AH=11h)
  7124. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  7125. 218h 11 BYTEs    FCB-format filename for device name comparison
  7126. 223h    BYTE    terminating NUL for above filename
  7127. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  7128. 22Fh    BYTE    terminating NUL for above spec
  7129. 230h    BYTE    ???
  7130. 231h    WORD    destination file/directory starting sector
  7131. 233h  5 BYTEs    ???
  7132. 238h    BYTE    extended FCB file attribute
  7133. 239h    BYTE    type of FCB (00h regular, FFh extended)
  7134. 23Ah    BYTE    directory search attributes
  7135. 23Bh    BYTE    file open/access mode
  7136. 23Ch    BYTE    file found/delete flag
  7137.         bit 0: file found
  7138.         bit 4: file deleted
  7139. 23Dh    BYTE    flag: device name found on rename, or file not found
  7140. 23Eh    BYTE    splice flag (file name and directory name together)
  7141. 23Fh    BYTE    flag indicating how DOS function was invoked
  7142.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  7143. 240h    BYTE    sector position within cluster
  7144. 241h    BYTE    flag: translate sector/cluster (00h no, 01h yes)
  7145. 242h    BYTE    flag: 00h if read, 01h if write
  7146. 243h    BYTE    current working drive number
  7147. 244h    BYTE    cluster factor
  7148. 245h    BYTE    flag: cluster split mode
  7149. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  7150. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  7151. 248h    BYTE    volume ID flag
  7152. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  7153. 24Ah    BYTE    file create flag (00h = no, search only)
  7154. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  7155.           (normally E5h, but 00h as described under INT 21/AH=13h)
  7156. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  7157.         temp: used during process termination
  7158. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  7159. 254h    WORD    stores SP across INT 24
  7160. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  7161. 25Ah    WORD    saving partial cluster number
  7162. 25Ch    WORD    temp: sector of work current cluster
  7163. 25Eh    WORD    high part of cluster number (only low byte referenced)
  7164. 260h    WORD    ??? temp
  7165. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  7166. 263h    BYTE    padding (unused)
  7167. 264h    DWORD    pointer to device header when filename is character device
  7168. 268h    DWORD    pointer to current SFT
  7169. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  7170. 270h    DWORD    pointer to caller's FCB
  7171. 274h    WORD    number of SFT to which file being opened will refer
  7172. 276h    WORD    temporary storage for file handle
  7173. 278h    DWORD    pointer to a JFT entry in process handle table
  7174.           (see #0603 at AH=26h)
  7175. 27Ch    WORD    offset in DOS DS of first filename argument
  7176. 27Eh    WORD    offset in DOS DS of second filename argument
  7177. 280h    WORD    offset of last component in pathname or FFFFh
  7178. 282h    WORD    offset of transfer address to add
  7179. 284h    WORD    last relative cluster within file being accessed
  7180. 286h    WORD    temp: absolute cluster number being accessed
  7181. 288h    WORD    directory sector number
  7182. 28Ah    WORD    ??? current cluster number
  7183. 28Ch    WORD    current relative sector number within file
  7184. 28Eh    WORD    current sector number
  7185. 290h    WORD    current byte offset within sector
  7186. 292h    DWORD    current offset in file
  7187. 296h    DWORD    temp: file byte count
  7188. 29Ah    WORD    temp: file byte count
  7189. 29Ch    WORD    free file cluster entry
  7190. 29Eh    WORD    last file cluster entry
  7191. 2A0h    WORD    next file cluster number
  7192. 2A2h    DWORD    number of bytes appended to file
  7193. 2A6h    DWORD    pointer to current work disk buffer
  7194. 2AAh    DWORD    pointer to working SFT
  7195. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  7196. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  7197. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  7198. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  7199.         also switched to for duration of INT 24
  7200. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  7201.         (see #0839 at AH=4Eh)
  7202. 2CDh 32 BYTEs    directory entry for file being renamed (see #0580 at AH=11h)
  7203. 2EDh 331 BYTEs    critical error stack
  7204.    403h     35 BYTEs scratch SFT
  7205. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  7206. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  7207. ---DOS 3.2,3.3x only---
  7208. 738h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  7209. 739h    BYTE    volume change flag
  7210. 73Ah    BYTE    flag: virtual open
  7211. 73Bh    BYTE    ???
  7212. SeeAlso: #0895
  7213.  
  7214. Format of CLOCK$ transfer record:
  7215. Offset    Size    Description    (Table 0893)
  7216.  00h    WORD    number of days since 1-Jan-1980
  7217.  02h    BYTE    minutes
  7218.  03h    BYTE    hours
  7219.  04h    BYTE    hundredths of second
  7220.  05h    BYTE    seconds
  7221. --------D-215D07-----------------------------
  7222. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  7223.     AX = 5D07h
  7224. Return: DL = mode
  7225.         00h redirected output is combined
  7226.         01h redirected output in separate print jobs
  7227. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  7228. --------D-215D08-----------------------------
  7229. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  7230.     AX = 5D08h
  7231.     DL = mode
  7232.         00h redirected output is combined
  7233.         01h redirected output placed in separate jobs, start new print job
  7234.         now
  7235. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  7236. --------D-215D09-----------------------------
  7237. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  7238.     AX = 5D09h
  7239. Notes:    forces redirected printer output to be printed, and starts a new print
  7240.       job
  7241.     this function is also supported by 10Net, which calls it Terminate All
  7242.       Spool Jobs, and does not flush if in "combine" mode
  7243. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  7244. --------D-215D0A-----------------------------
  7245. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  7246.     AX = 5D0Ah
  7247.     DS:DX -> 11-word DOS parameter list (see #0891)
  7248. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  7249.       DX,DI, and ES in corresponding registers
  7250. Notes:    documented for DOS 5+, but undocumented in earlier versions
  7251.     the MS-DOS Programmer's Reference incorrectly states that this call was
  7252.       introduced in DOS 4, and fails to mention that the ERROR structure
  7253.       passed to this function is a DOS parameter list.
  7254. BUGS:    DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the
  7255.       DPL; fortunately, MS-DOS ignores the DS field, allowing a generic
  7256.       routine which sets both DS and ES fields to the same value
  7257.     Novell DOS 7 does not save the pointer, which is always reported as
  7258.       0000h:0000h by AH=59h
  7259. SeeAlso: AH=59h/BX=0000h
  7260. --------D-215D0B-----------------------------
  7261. INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  7262.     AX = 5D0Bh
  7263. Return: CF set on error
  7264.         AX = error code (see #0885)
  7265.     CF clear if successful
  7266.         DS:SI -> swappable data area list (see #0894)
  7267. Notes:    copying and restoring the swappable data areas allows DOS to be
  7268.       reentered unless it is in a critical section delimited by calls to
  7269.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  7270.     SHARE and other DOS utilities consult the byte at offset 04h in the
  7271.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  7272.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  7273.     DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
  7274.       call for finding the SDA (see #0892)
  7275. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
  7276.  
  7277. Format of DOS 4.x swappable data area list:
  7278. Offset    Size    Description    (Table 0894)
  7279.  00h    WORD    count of data areas
  7280.  02h  N BYTEs    "count" copies of data area record
  7281.         Offset    Size    Description
  7282.          00h    DWORD    address
  7283.          04h    WORD    length and type
  7284.                 bit 15 set if swap always, clear if swap in DOS
  7285.                 bits 14-0: length in bytes
  7286. SeeAlso: #0895
  7287.  
  7288. Format of DOS 4.0-6.0 swappable data area:
  7289. Offset    Size    Description    (Table 0895)
  7290.  -34    BYTE    printer echo flag (00h off, FFh active)
  7291.  -31    BYTE    current switch character (ignored by DOS 5+)
  7292.  -28    BYTE    incremented on each INT 21/AX=5E01h call
  7293.  -27 16 BYTEs    machine name set by INT 21/AX=5E01h
  7294.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  7295.           enable critical-section calls (see INT 2A/AH=80h)
  7296.         (all offsets are 0D0Ch, but this list is still present for
  7297.           DOS 3.x compatibility)
  7298.  -1    BYTE    unused padding
  7299. ---start of actual SDA---
  7300.  00h    BYTE    critical error flag ("ErrorMode")
  7301.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  7302.  02h    BYTE    drive on which current critical error occurred or FFh
  7303.  03h    BYTE    locus of last error
  7304.  04h    WORD    extended error code of last error
  7305.  06h    BYTE    suggested action for last error
  7306.  07h    BYTE    class of last error
  7307.  08h    DWORD    ES:DI pointer for last error
  7308.  0Ch    DWORD    current DTA (Disk Transfer Address)
  7309.         note: may point into SDA during the DOS EXEC function
  7310.           (see AH=4Bh), so programs which swap the SDA must be
  7311.           prepared to move the DTA to a private buffer if they
  7312.           might be invoked during an EXEC
  7313.  10h    WORD    current PSP
  7314.  12h    WORD    stores SP across an INT 23
  7315.  14h    WORD    return code from last process termination (zerod after reading
  7316.           with AH=4Dh)
  7317.  16h    BYTE    current drive
  7318.  17h    BYTE    extended break flag
  7319.  18h    BYTE    flag: code page switching
  7320.  19h    BYTE    flag: copy of previous byte in case of INT 24 Abort
  7321. ---remainder need only be swapped if in DOS---
  7322.  1Ah    WORD    value of AX on call to INT 21
  7323.  1Ch    WORD    PSP segment for sharing/network
  7324.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  7325.  20h    WORD    first usable memory block found when allocating memory
  7326.  22h    WORD    best usable memory block found when allocating memory
  7327.  24h    WORD    last usable memory block found when allocating memory
  7328.  26h    WORD    memory size in paragraphs (used only during initialization)
  7329.  28h    WORD    last entry checked during directory search
  7330.  2Ah    BYTE    flag: nonzero if INT 24 Fail
  7331.  2Bh    BYTE    flags: allowable INT 24 responses (passed to INT 24 in AH)
  7332.  2Ch    BYTE    flag: do not set directory if nonzero
  7333.  2Dh    BYTE    flag: program aborted by ^C
  7334.  2Eh    BYTE    flag: allow embedded blanks in FCB
  7335.         may also allow use of "*" wildcard in FCBs
  7336.  2Fh    BYTE    padding (unused)
  7337.  30h    BYTE    day of month
  7338.  31h    BYTE    month
  7339.  32h    WORD    year - 1980
  7340.  34h    WORD    number of days since 1-1-1980
  7341.  36h    BYTE    day of week (0 = Sunday)
  7342.  37h    BYTE    flag: console swapped during read from device
  7343.  38h    BYTE    flag: safe to call INT 28 if nonzero
  7344.  39h    BYTE    flag: abort currently in progress, turn INT 24 Abort into Fail
  7345.  3Ah 30 BYTEs    device driver request header (see #1382 at INT 2F/AX=0802h) for
  7346.           device calls
  7347.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  7348.  5Ch 22 BYTEs    device driver request header for I/O calls
  7349.  72h 14 BYTEs    device driver request header for disk status check
  7350.  80h    DWORD    pointer to device I/O buffer
  7351.  84h    WORD    ???
  7352.  86h    WORD    ??? (0)
  7353.  88h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  7354.  89h    DWORD    start offset of file region to lock/unlock
  7355.  8Dh    DWORD    length of file region to lock/unlock
  7356.  91h    BYTE    padding (unused)
  7357.  92h  3 BYTEs    24-bit user number (see AH=30h)
  7358.  95h    BYTE    OEM number (see #0619 at AH=30h)
  7359.  96h  6 BYTEs    CLOCK$ transfer record (see #0893 at AX=5D06h)
  7360.  9Ch    BYTE    device I/O buffer for single-byte I/O functions
  7361.  9Dh    BYTE    padding???
  7362.  9Eh 128 BYTEs    buffer for filename
  7363. 11Eh 128 BYTEs    buffer for filename
  7364. 19Eh 21 BYTEs    findfirst/findnext search data block (see #0839 at AH=4Eh)
  7365. 1B3h 32 BYTEs    directory entry for found file (see #0619 at AH=11h)
  7366. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  7367. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  7368. 236h    BYTE    terminating NUL for above filename
  7369. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  7370. 242h    BYTE    terminating NUL for above filespec
  7371. 243h    BYTE    ???
  7372. 244h    WORD    ???
  7373. 246h  5 BYTEs    ???
  7374. 24Bh    BYTE    extended FCB file attributes
  7375. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  7376. 24Dh    BYTE    directory search attributes
  7377. 24Eh    BYTE    file open/access mode
  7378. 24Fh    BYTE    ??? flag bits
  7379.         reportedly 00h when deleting a file under MSDOS 5.0
  7380. 250h    BYTE    flag: device name found on rename, or file not found
  7381. 251h    BYTE    splice flag??? (file name and directory name together)
  7382. 252h    BYTE    flag indicating how DOS function was invoked
  7383.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  7384. 253h    BYTE    sector position within cluster
  7385. 254h    BYTE    ??? (flag: translate sector/cluster)
  7386. 255h    BYTE    ??? (flag: 00h if read, 01h if write)
  7387. 256h    BYTE    current working drive number
  7388. 257h    BYTE    cluster factor
  7389. 258h    BYTE    ???
  7390. 259h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  7391. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  7392. 25Bh    BYTE    volume ID flag
  7393. 25Ch    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  7394. 25Dh    BYTE    ???
  7395. 25Eh    BYTE    ??? file create flag (00h = no, search only)
  7396. 25Fh    BYTE    ??? (value for deleted file's first byte)
  7397. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  7398. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  7399. 268h    WORD    stores SP across INT 24
  7400. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  7401. 26Eh    WORD    segment of disk buffer
  7402. 270h    WORD    ??? (saving partial cluster number)
  7403. 272h    WORD    ??? (temp: sector of work current cluster)
  7404. 274h    WORD    ??? (high part of cluster number)
  7405. 276h    WORD    ??? (temp)
  7406. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  7407. 279h    BYTE    ??? (doesn't seem to be referenced)
  7408. 27Ah    DWORD    pointer to device header if filename is character device
  7409. 27Eh    DWORD    pointer to current SFT
  7410. 282h    DWORD    pointer to current directory structure for drive being accessed
  7411. 286h    DWORD    pointer to caller's FCB
  7412. 28Ah    WORD    SFT index to which file being opened will refer
  7413. 28Ch    WORD    temporary storage for file handle
  7414. 28Eh    DWORD    pointer to a JFT entry in process handle table
  7415.           (see #0603 at AH=26h)
  7416. 292h    WORD    offset in DOS DS of first filename argument
  7417. 294h    WORD    offset in DOS DS of second filename argument
  7418. 296h    WORD    ??? (offset of last component in pathname or FFFFh)
  7419. 298h    WORD    offset of transfer address to add
  7420. 29Ah    WORD    last relative cluster within file being accessed
  7421. 29Ch    WORD    temp: absolute cluster number being accessed
  7422. 29Eh    WORD    directory sector number
  7423. 2A0h    WORD    ???
  7424. 2A2h    WORD    ??? directory cluster number
  7425. 2A4h    DWORD    current relative sector number within file
  7426. 2A8h    DWORD    ??? (current sector number)
  7427. 2ACh    WORD    ??? (current byte offset within sector)
  7428. 2AEh    DWORD    current offset in file
  7429. 2B2h    WORD    ???
  7430. 2B4h    WORD    bytes in partial sector
  7431. 2B6h    WORD    number of sectors
  7432. 2B8h    WORD    ??? (free file cluster entry)
  7433. 2BAh    WORD    ??? (last file cluster entry)
  7434. 2BCh    WORD    ??? (next file cluster number)
  7435. 2BEh    DWORD    number of bytes appended to file
  7436. 2C2h    DWORD    pointer to current work disk buffer
  7437. 2C6h    DWORD    pointer to working SFT
  7438. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  7439. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  7440. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  7441. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  7442.         also switched to for duration of INT 24
  7443. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  7444. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  7445.           performed, and 01h or 03h by INT 21/AX=6C00h)
  7446. 2D7h    WORD    ??? apparently unused
  7447. 2D9h    DWORD    stored ES:DI for AX=6C00h
  7448. 2DDh    WORD    extended file open action code (see #0966 at AX=6C00h)
  7449. 2DFh    WORD    extended file open attributes (see #0965 at AX=6C00h)
  7450. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  7451. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  7452. 2E7h    WORD    ??? temp DX storage or 0000h or temp data buffer size from
  7453.           disk buffer
  7454. 2E9h    WORD    ???
  7455. 2EBh    BYTE    ???
  7456. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  7457. 2EEh    WORD    ???
  7458. 2F0h    BYTE    ???
  7459. 2F1h    WORD    ??? bit flags
  7460. 2F3h    DWORD    pointer to user-supplied filename
  7461. 2F7h    DWORD    pointer to ???
  7462. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  7463. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  7464. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  7465. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  7466.         (see #0839 at AH=4Eh)
  7467. 315h 32 BYTEs    directory entry for file being renamed (see #0580 at AH=11h)
  7468. 335h 331 BYTEs    critical error stack
  7469. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  7470. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  7471. 780h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  7472. 781h    BYTE    volume change flag
  7473. 782h    BYTE    flag: virtual open
  7474. 783h    BYTE    ???
  7475. 784h    WORD    ???
  7476. 786h    WORD    ???
  7477. 788h    WORD    ???
  7478. 78Ah    WORD    ???
  7479. SeeAlso: #0892,#0894
  7480. --------D-215E00-----------------------------
  7481. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  7482.     AX = 5E00h
  7483.     DS:DX -> 16-byte buffer for ASCII machine name
  7484. Return: CF clear if successful
  7485.         CH = validity
  7486.         00h name invalid
  7487.         nonzero valid
  7488.             CL = NetBIOS number for machine name
  7489.             DS:DX buffer filled with blank-paded name
  7490.     CF set on error
  7491.         AX = error code (01h) (see #0885 at AH=59h)
  7492. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  7493. SeeAlso: AX=5E01h
  7494. --------N-215E00-----------------------------
  7495. INT 21 - 10NET v5.0 - GET MACHINE NAME
  7496.     AX = 5E00h
  7497. Return: CL = redirector's NetBIOS name number
  7498.     ES:DI -> network node ID
  7499. SeeAlso: AX=5E01h"10NET"
  7500. --------D-215E01CH00-------------------------
  7501. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  7502.     AX = 5E01h
  7503.     CH = 00h undefine name (make it invalid)
  7504.        <> 0     define name
  7505.     CL = name number
  7506.     DS:DX -> 15-character blank-padded ASCIZ name
  7507. SeeAlso: AX=5E00h
  7508. --------N-215E01-----------------------------
  7509. INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
  7510.     AX = 5E01h
  7511.     CX = length of buffer
  7512.     DS:DX -> buffer for 10Net configuration table (see #821)
  7513. SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h
  7514.  
  7515. Format of 10Net Configuration Table:
  7516. Offset    Size    Description    (Table 0896)
  7517.  00h  8 BYTEs    user name
  7518.  08h 15 BYTEs    node ID
  7519.  17h  3 BYTEs    unique portion of Ethernet address
  7520.  1Ah    BYTE    Who group number
  7521.  1Bh    WORD    services mask (see #0898)
  7522.  1Dh    DWORD    serial number
  7523.  21h    BYTE    maximum concurrent users with same serial number allowed on net
  7524.  22h    BYTE    chat mask (see #0899)
  7525.  23h    BYTE    internal system bits (see #0900)
  7526.  24h  9 BYTEs    version number in format MM.mm.xxx
  7527.  2Dh    BYTE    flag: 01h if machine is a PS/2
  7528.  2Eh    BYTE    flag: 03h if 80386
  7529.  2Fh    BYTE    spool termination mode: 01h concatenate, 02h truncate
  7530.         (see AX=5D09h)
  7531.  30h    WORD    autospool timeout in clock ticks
  7532.  32h    WORD    monitor timeout in clock ticks
  7533.  34h    WORD    unused
  7534.  36h    WORD    chat timeout in clock ticks
  7535.  38h    WORD    netBIOS session timeout in half-seconds
  7536.  3Ah    WORD    datagram send timeout in seconds
  7537.  3Ch    WORD    keyboard value for initiating chat mode
  7538.  3Eh    WORD    Who timeout in clock ticks
  7539.  40h    BYTE    flag: 01h if server should process rom NetBIOS Post return
  7540.  41h    BYTE    flag: 01h if FCBs should be recycled
  7541.  42h  3 BYTEs    signature "DBG"
  7542.  45h    BYTE    last interrupt (21h or 6Fh)
  7543.  46h    BYTE    last INT 21 AH value
  7544.  47h    BYTE    last INT 6F AH value
  7545.  48h    WORD    last item posted
  7546.  4Ah    WORD    last item free-posted
  7547.  4Ch    WORD    last item handled by server
  7548.  4Eh    WORD    last redirector send NCB
  7549.  50h    WORD    last redirector receive NCB
  7550.  52h  4 BYTEs    signature "TABL"
  7551.  56h    WORD    offset of datagram buffer table header (see #0897)
  7552.  58h    WORD    offset of chat buffer table header (see #0897)
  7553.  5Ah    WORD    offset of Raw buffer table header (see #0897)
  7554.  5Ch    WORD    offset of Workstation buffer table header (see #0897)
  7555.  5Eh    WORD    offset of server receive-any table header (see #0897)
  7556.  60h    WORD    offset of Tiny buffer table header (see #0897)
  7557.  62h    WORD    offset of zero-length buffer table (NCBs) (see #0897)
  7558.  64h    WORD    offset of Rdr (Redirector Mount) table header (see #0897)
  7559.  66h    WORD    offset of Ntab (Redirector Session) table header (see #0897)
  7560.  68h    WORD    offset of FCB table header (see #0897)
  7561.  6Ah    WORD    offset of user file handle table header (see #0897)
  7562.  6Ch    WORD    offset of workstation printer RDR extension table header
  7563.  6Eh    WORD    offset of server shared device table header (see #0897)
  7564.  70h    WORD    offset of server connection table header (see #0897)
  7565.  72h    WORD    offset of server login table header (see #0897)
  7566.  74h    WORD    offset of server file table header (see #0897)
  7567.  76h    WORD    offset of server shared file table header (see #0897)
  7568.  78h    WORD    offset of server record lock table header (see #0897)
  7569.  7Ah    WORD    offset of remote printer claim table header (see #0897)
  7570.  7Ch    WORD    offset of remote printer device table header (see #0897)
  7571.  7Eh    WORD    offset of print server mount table header (see #0897)
  7572.  80h    WORD    offset of print server sessions table header (see #0897)
  7573.  82h    WORD    offset of print server print job structure table header
  7574.  84h    WORD    offset of print server pooled device table header (see #0897)
  7575.  86h    WORD    size of workstation buffer
  7576.  88h    WORD    size of server receive-any buffer
  7577.  8Ah    WORD    size of server raw I/O buffer
  7578.  8Ch  6 BYTEs    reserved
  7579.  92h    DWORD    pointer to profile pathname
  7580.  96h    BYTE    datagram retry count
  7581.  97h    BYTE    NetBIOS LAN adapter number
  7582.  98h  6 BYTEs    physical Ethernet address
  7583.  9Eh    BYTE    NetBIOS server name number
  7584.  9Fh    BYTE    NetBIOS redirector name number
  7585.  A0h    BYTE    10Net interrupt number
  7586.  A1h    BYTE    flag: chat is loaded
  7587.  A2h    BYTE    flag: INT 6F APIs permanently loaded
  7588.  A3h    BYTE    flag: file security present
  7589.  A4h    WORD    reserved
  7590.  A6h    BYTE    fixed mount bitmask for drives A:-H:
  7591.  A7h    BYTE    reserved
  7592.  A8h    WORD    10Net system flags (see #0901)
  7593.  AAh    BYTE    monitor flags (see #0902)
  7594.  ABh  5 BYTEs    reserved
  7595.  B0h    WORD    offset of monitor timer block
  7596.  B2h    WORD    offset of server timer block
  7597.  B4h    WORD    offset of chat timer block
  7598.  B6h    WORD    timer chain
  7599.  B8h  4 BYTEs    signature "TALS"
  7600.  BCh    WORD    number of 10Net sends
  7601.  BEh    WORD    number of 10Net receives
  7602.  C0h    WORD    number of no-buffer conditions
  7603.  C2h    WORD    number of dropped posted messages
  7604.  C4h    WORD    number of server NCB errors
  7605.  C6h    WORD    number of redirector NCB errors
  7606.  C8h    WORD    number of datagram send/receive errors
  7607.  CAh    WORD    number of dropped Whos
  7608.  CCh    WORD    number of dropped submits
  7609.  CEh    WORD    number of session aborts
  7610.  D0h    BYTE    number of NetBIOS interface-busy errors
  7611.  D1h    BYTE    last NetBIOS bad post command
  7612.  D2h    BYTE    last NetBIOS bad redirector command
  7613.  D3h    BYTE    do send datagram send/receive error command
  7614.  D4h    DWORD    -> DOS system parameter table
  7615.  D8h    WORD    number of DOS physical drives
  7616.  DAh    WORD    offset of DOS PSP field in DOS data segment
  7617.  DCh    WORD    offset of in-DOS flag in DOS data segment
  7618.  DEh    WORD    DOS data segment
  7619.  E0h    WORD    offset of DOS SFT in DOS data segment
  7620.  E2h    WORD    offset of number-of-physical-units field in DOS data segment
  7621.  E4h    WORD    10Net code segment
  7622.  E6h    WORD    10Net data segment
  7623.  E8h    WORD    10Net common server segment
  7624.  EAh    WORD    10Net file server segment
  7625.  ECh    WORD    10Net print server segment
  7626.  EEh    WORD    10Net remote printer segment
  7627. Note:    documentation lists field at offset D0h as a WORD, but all following
  7628.       offsets are as though it were a BYTE; if it is indeed a WORD, all
  7629.       offsets after D0h must be increased by one byte
  7630.  
  7631. Format of 10Net Table Header:
  7632. Offset    Size    Description    (Table 0897)
  7633.  -16  4 BYTEs    table identifier
  7634.  -12    WORD    peak number of tables allocated
  7635.  -10    WORD    number of tables currently in use
  7636.  -8    WORD    total number of tables
  7637.  -6    WORD    size of each table
  7638.  -4    WORD    offset of first allocated table
  7639.  -2    WORD    offset of first free table
  7640.  
  7641. Bitfields for 10NET services mask:
  7642. Bit(s)    Description    (Table 0898)
  7643.  0    workstation
  7644.  1    file server
  7645.  2    print queue server
  7646.  3    de-spool server
  7647.  
  7648. Bitfields for 10NET chat mask:
  7649. Bit(s)    Description    (Table 0899)
  7650.  0    chat permitted
  7651.  1    bell enabled
  7652.  2    chat keyboard initiated
  7653.  3    in INT 16 handler
  7654.  4    in Get Input
  7655.  5    display has timed out
  7656.  6    chat is idle
  7657.  
  7658. Bitfields for 10NET internal system bits:
  7659. Bit(s)    Description    (Table 0900)
  7660.  0    submit permitted
  7661.  1    submit initiated
  7662.  2    submit executing
  7663.  3    internal client call/chat/spool/autospool
  7664.  4    in spool termination
  7665.  5    print permitted
  7666.  6    waiting for keyboard input
  7667.  
  7668. Bitfields for 10NET System Flags:
  7669. Bit(s)    Description    (Table 0901)
  7670.  0    in NetBIOS
  7671.  1    processing INT 28
  7672.  2    is server
  7673.  3    in net user-DOS function
  7674.  4    in DOS user-DOS function
  7675.  5    in net for user non-DOS function
  7676.  6    in server DOS function
  7677.  7    in server non-DOS function
  7678.  8    in terminate
  7679.  10    in user on server request
  7680.  13    in DOS for user on server
  7681.  14    disable critical error handler
  7682.  
  7683. Bitfields for Monitor Flags:
  7684. Bit(s)    Description    (Table 0902)
  7685.  0    waiting for monitor response
  7686.  4    in monitor get-input routine
  7687.  5    monitor display timeout
  7688.  6    sensing for escape key
  7689. --------D-215E02-----------------------------
  7690. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  7691.     AX = 5E02h
  7692.     BX = redirection list index (see AX=5F02h)
  7693.     CX = length of setup string
  7694.     DS:SI -> setup string
  7695. Return: CF clear if successful
  7696.     CF set on error
  7697.         AX = error code (01h) (see #0885 at AH=59h)
  7698. Note:    also supported by 10NET v5.0
  7699. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  7700. --------D-215E03-----------------------------
  7701. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  7702.     AX = 5E03h
  7703.     BX = redirection list index (see AX=5F02h)
  7704.     ES:DI -> 64-byte buffer for setup string
  7705. Return: CF clear if successful
  7706.         CX = length of setup string
  7707.         ES:DI buffer filled
  7708.     CF set on error
  7709.         AX = error code (01h) (see #0885 at AH=59h)
  7710. Note:    also supported by 10NET v5.0, but 10NET is documented as using DS:SI
  7711.       instead of ES:DI
  7712. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  7713. --------D-215E04-----------------------------
  7714. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  7715.     AX = 5E04h
  7716.     BX = redirection list index (see AX=5F02h)
  7717.     DX = mode
  7718.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  7719. Return: CF set on error
  7720.         AX = error code (see #0885 at AH=59h)
  7721.     CF clear if successful
  7722. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  7723. SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
  7724. --------N-215E04-----------------------------
  7725. INT 21 - 10NET v5.0 - INITIATE PRINT JOB
  7726.     AX = 5E04h
  7727.     BX = zero-based redirection list index (see AX=5F02h)
  7728.     DS:DX -> extended workstation printer setup structure (see #0903)
  7729. Return: CF clear if successful
  7730.     CF set on error
  7731.         AX = error code (see #0885 at AH=59h)
  7732. SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"
  7733.  
  7734. Format of 10NET extended workstation printer setup structure:
  7735. Offset    Size    Description    (Table 0903)
  7736.  00h    BYTE    notification flags (see #0904)
  7737.  01h    BYTE    job control mask (see #0905)
  7738.  02h    WORD    days to retain file
  7739.  04h    WORD    test print length
  7740.  06h    BYTE    number of copies to print
  7741.  07h    BYTE    compression algorithm
  7742.  08h    BYTE    tab width (00h = don't expand)
  7743.  09h    BYTE    initiation type (00h normal, 01h non-spooled)
  7744.  0Ah 38 BYTEs    job start operation notification instructions
  7745.  30h 32 BYTEs    comment for job
  7746.  50h 64 BYTEs    output filename or non-spooled file
  7747.  
  7748. Bitfields for 10NET notification flags:
  7749. Bit(s)    Description    (Table 0904)
  7750.  0    user at print start
  7751.  1    operator at start, with reply
  7752.  2    user at print completion
  7753.  3    operator at completion, with reply
  7754.  4    user on queue switch
  7755.  5    operator on queue switch, with reply
  7756.  6    user on print error
  7757.  
  7758. Bitfields for 10NET job control mask:
  7759. Bit(s)    Description    (Table 0905)
  7760.  0    print banner page
  7761.  1    eject page at end of job
  7762.  2    mark as "held" (queue but don't print)
  7763.  3    rush job (queue at top)
  7764.  4    overwrite file with zeros before deletion
  7765.  5    hyperspool if possible
  7766. --------D-215E05-----------------------------
  7767. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  7768.     AX = 5E05h
  7769.     BX = redirection list index (see AX=5F02h)
  7770. Return: CF set on error
  7771.         AX = error code (see #0885 at AH=59h)
  7772.     CF clear if successful
  7773.         DX = printer mode (see AX=5E04h)
  7774. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  7775. SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
  7776. --------N-215E05-----------------------------
  7777. INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
  7778.     AX = 5E05h
  7779.     BX = zero-based redirection list index (see AX=5F02h)
  7780. Return: CF clear if successful
  7781.     CF set on error
  7782.         AX = error code (see #0885 at AH=59h)
  7783. Note:    this call resets the spool termination mode to "truncate"
  7784.       (see AX=5D08h)
  7785. SeeAlso: AX=5E04h"10NET",AX=5E06h
  7786. --------N-215E06-----------------------------
  7787. INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
  7788.     AX = 5E06h
  7789.     BX = zero-based redirection list index (see AX=5F02h)
  7790.     CX = operation (06h set, 07h get)
  7791.     DS:DX -> buffer for setup structure (same as first nine bytes of
  7792.           workstation printer setup) (see #0903)
  7793. Return: CF clear if successful
  7794.         DS:DX buffer updated on get
  7795.     CF set on error
  7796.         AX = error code (see #0885 at AH=59h)
  7797. SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
  7798. --------D-215F00-----------------------------
  7799. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  7800.     AX = 5F00h
  7801.     BL = redirection type
  7802.         03h printer
  7803.         04h disk drive
  7804. Return: CF set on error
  7805.         AX = error code (see #0885 at AH=59h)
  7806.     CF clear if successful
  7807.         BH = redirection state
  7808.         00h off
  7809.         01h on
  7810. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  7811. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  7812. --------D-215F01-----------------------------
  7813. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  7814.     AX = 5F01h
  7815.     BL = redirection type
  7816.         03h printer
  7817.         04h disk drive
  7818.     BH = redirection state
  7819.         00h off
  7820.         01h on
  7821. Return: CF set on error
  7822.         AX = error code (see #0885 at AH=59h)
  7823.     CF clear if successful
  7824. Notes:    when redirection is off, the local device (if any) rather than the
  7825.       remote device is used
  7826.     calls INT 2F/AX=111Eh with AX on top of the stack
  7827. SeeAlso: AX=5F00h,INT 2F/AX=111Eh,INT 60/AX=0002h
  7828. --------D-215F02-----------------------------
  7829. INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
  7830.     AX = 5F02h
  7831.     BX = zero-based redirection list index
  7832.     CX = 0000h (LANtastic)
  7833.     DS:SI -> 16-byte buffer for ASCIZ local device name or drive letter
  7834.           followed by colon
  7835.     ES:DI -> 128-byte buffer for ASCIZ network name
  7836. Return: CF clear if successful
  7837.         BH = device status
  7838.         00h valid
  7839.         01h invalid
  7840.         02h valid (connected from inside Windows for Workgroups v3.11)
  7841.         BL = device type
  7842.         03h printer
  7843.         04h disk drive
  7844.         CX = user data previously set with AX=5F03h
  7845.         DS:SI and ES:DI buffers filled
  7846.         DX,BP destroyed
  7847.     CF set on error
  7848.         AX = error code (01h,12h) (see #0885 at AH=59h)
  7849. Notes:    this function is passed through to INT 2F/AX=111Eh by the DOS kernel
  7850.     error code 12h is returned if BX is greater than the size of the list
  7851.     also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
  7852.     supported by LapLink RemoteAccess but returns the local drive letter;
  7853.       the remote drive letter can be obtained with INT 2F/AX=Cxxxh
  7854.       (see INT 2F/AX=C000h"LapLink")
  7855.     the returned device name may or may not include a colon, depending on
  7856.       the network software
  7857. SeeAlso: AX=5F03h,AX=5F46h,INT 2F/AX=111Eh,INT 2F/AX=C000h"LapLink"
  7858. --------D-215F03-----------------------------
  7859. INT 21 - DOS 3.1+ network - REDIRECT DEVICE
  7860.     AX = 5F03h
  7861.     BL = device type
  7862.         03h printer
  7863.         04h disk drive
  7864.     CX = user data to save
  7865.         0000h for LANtastic
  7866.         4E57h ("NW") for NetWare 4.0 requester
  7867.     DS:SI -> ASCIZ local device name (16 bytes max)
  7868.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  7869. Return: CF clear if successful
  7870.     CF set on error
  7871.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
  7872. Notes:    if device type is disk drive, DS:SI must point at either a null string
  7873.       or a string consisting the drive letter followed by a colon; if a
  7874.       null string, the network attempts to access the destination without
  7875.       redirecting a local drive
  7876.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7877.     also supported by Banyan VINES, LANtastic, and 10NET
  7878. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh,INT 60/AX=0002h
  7879. --------D-215F04-----------------------------
  7880. INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
  7881.     AX = 5F04h
  7882.     DS:SI -> ASCIZ local device name or path
  7883.     CX = 4E57h ("NW") for NetWare 4.0 requester
  7884. Return: CF clear if successful
  7885.     CF set on error
  7886.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
  7887. Notes:    the DS:SI string must be either a local device name, a drive letter
  7888.       followed by a colon, or a network directory beginning with two
  7889.       backslashes
  7890.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7891.     also supported by Banyan VINES, LANtastic, and 10NET
  7892. SeeAlso: AX=5F03h,INT 2F/AX=111Eh,INT 60/AX=0003h
  7893. --------D-215F05-----------------------------
  7894. INT 21 - DOS 4.0+ network - GET EXTENDED REDIRECTION LIST ENTRY
  7895.     AX = 5F05h
  7896.     BX = redirection list index
  7897.     DS:SI -> buffer for ASCIZ source device name
  7898.     ES:DI -> buffer for destination ASCIZ network path
  7899. Return: CF set on error
  7900.         AX = error code (see #0885 at AH=59h)
  7901.     CF clear if successful
  7902.         AX = server's network process ID handle (10NET)
  7903.         BH = device status flag (bit 0 clear if valid)
  7904.         BL = device type (03h if printer, 04h if drive)
  7905.         CX = stored parameter value (user data) from AX=5F03h
  7906.         BP = NETBIOS local session number
  7907.         DS:SI buffer filled
  7908.         ES:DI buffer filled
  7909. Notes:    the local session number allows sharing the redirector's session number
  7910.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  7911.       to correctly recover from errors
  7912.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7913.     supported by DR-DOS 5.0
  7914.     also supported by 10NET v5.0
  7915. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  7916. --------O-215F05-----------------------------
  7917. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  7918.     AX = 5F05h
  7919.     DL = drive number (0=A:)
  7920.     DS:SI -> ASCIZ name of the object to map the drive to
  7921. Return: CF set on error
  7922.         AX = error code (see #0885 at AH=59h)
  7923.     CF clear if successful
  7924. SeeAlso: AX=5F06h"STARLITE",INT 60/AX=0002h
  7925. --------N-215F06-----------------------------
  7926. INT 21 U - Network - GET FULL REDIRECTION LIST
  7927.     AX = 5F06h
  7928.     ???
  7929. Return: ???
  7930. Notes:    similar to AX=5F02h and AX=5F05h, but also returns redirections
  7931.       excluded from those calls for various reasons
  7932.     calls INT 2F/AX=111Eh with AX on top of the stack
  7933. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  7934. --------O-215F06-----------------------------
  7935. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  7936.     AX = 5F06h
  7937.     DL = drive to be unmapped (0=A:)
  7938. Return: CF set on error
  7939.         AX = error code (see #0885 at AH=59h)
  7940.     CF clear if successful
  7941. SeeAlso: AX=5F05h"STARLITE",INT 60/AX=0003h
  7942. --------D-215F07-----------------------------
  7943. INT 21 - DOS 5+ - ENABLE DRIVE
  7944.     AX = 5F07h
  7945.     DL = drive number (0=A:)
  7946. Return: CF clear if successful
  7947.     CF set on error
  7948.         AX = error code (0Fh) (see #0885 at AH=59h)
  7949. Notes:    simply sets the "valid" bit in the drive's CDS
  7950.     this function is not supported by Novell DOS 7 through at least
  7951.       Update 4, but support was added by Update 13
  7952. SeeAlso: AH=52h,AX=5F08h"DOS"
  7953. --------O-215F07-----------------------------
  7954. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  7955.     AX = 5F07h
  7956.     DS:SI -> ASCIZ name of object to offer to network
  7957.     ES:DI -> ASCIZ name under which object will be known on the network
  7958.         MUST begin with three slashes
  7959. Return: CF set on error
  7960.         AX = error code (see #0885 at AH=59h)
  7961.     CF clear if successful
  7962. SeeAlso: AX=5F08h"STARLITE"
  7963. --------D-215F08-----------------------------
  7964. INT 21 - DOS 5+ - DISABLE DRIVE
  7965.     AX = 5F08h
  7966.     DL = drive number (0=A:)
  7967. Return: CF clear if successful
  7968.     CF set on error
  7969.         AX = error code (0Fh) (see #0885 at AH=59h)
  7970. Notes:    simply clears the "valid" bit in the drive's CDS
  7971.     this function is not supported by Novell DOS 7 through at least
  7972.       Update 4, but support was added by Update 13
  7973. SeeAlso: AH=52h,AX=5F07h"DOS"
  7974. --------O-215F08-----------------------------
  7975. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  7976.     AX = 5F08h
  7977.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  7978. Return: CF set on error
  7979.         AX = error code (see #0885 at AH=59h)
  7980.     CF clear if successful
  7981. SeeAlso: AX=5F07h"STARLITE"
  7982. --------O-215F09-----------------------------
  7983. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  7984.     AX = 5F09h
  7985.     DS:DX -> ASCIZ name of the device driver to attach to
  7986. Return: CF set on error
  7987.         AX = error code (see #0885 at AH=59h)
  7988.     CF clear if successful
  7989. Note:    the STARLITE distributed file system can attach to multiple networks
  7990.       simultaneously
  7991. SeeAlso: AX=5F0Ah
  7992. --------O-215F0A-----------------------------
  7993. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  7994.     AX = 5F0Ah
  7995.     DS:DX -> ASCIZ name of device driver to detach from
  7996. Return: CF set on error
  7997.         AX = error code (see #0885 at AH=59h)
  7998.     CF clear if successful
  7999. SeeAlso: AX=5F09h
  8000. --------N-215F30-----------------------------
  8001. INT 21 U - LAN Manager Enhanced DOS - GET REDIRECTOR VERSION
  8002.     AX = 5F30h
  8003. Return: AX = version (AH=major,AL=minor)
  8004. --------N-215F32-----------------------------
  8005. INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
  8006.     AX = 5F32h
  8007.     BX = handle
  8008.     CX = size of _PIPEINFO structure
  8009.     DX = level (must be 0001h)
  8010.     DS:SI -> _PIPEINFO structure (see #0906)
  8011. Return: CF clear if successful
  8012.         _PIPEINFO structure filled in
  8013.     CF set on error
  8014.         AX = error code
  8015. Note:    this function was introduced by LAN Manager but is also supported by
  8016.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8017.       Machines, and others
  8018. SeeAlso: AX=5F33h,AX=5F34h
  8019.  
  8020. Format of Named Pipes _PIPEINFO structure:
  8021. Offset    Size    Description    (Table 0906)
  8022.  00h    WORD    size of outgoing buffer
  8023.  02h    WORD    size of incoming buffer
  8024.  04h    BYTE    maximum number of instances allowed
  8025.  05h    BYTE    current number of instances
  8026.  06h    BYTE    length of the name (including terminating NUL)
  8027.  07h  N BYTEs    name
  8028. --------N-215F33-----------------------------
  8029. INT 21 u - Named Pipes - LOCAL DosQNmPHandState
  8030.     AX = 5F33h
  8031.     BX = handle
  8032. Return: CF clear if successful
  8033.         AH = pipe mode bit mask (see #0907)
  8034.         AL = maximum number of instances
  8035.     CF set on error
  8036.         AX = error code
  8037. Note:    this function was introduced by LAN Manager but is also supported by
  8038.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8039.       Machines, and others
  8040. SeeAlso: AX=5F32h,AX=5F34h
  8041.  
  8042. Bitfields for Named Pipes pipe mode:
  8043. Bit(s)    Description    (Table 0907)
  8044.  7    set if nonblocking, clear if blocking
  8045.  6    set if server end, clear if client end
  8046.  2    set if write in message mode, clear if write in byte mode
  8047.  0    set if read in message mode, clear if read in byte mode
  8048. --------N-215F34-----------------------------
  8049. INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
  8050.     AX = 5F34h
  8051.     BX = handle
  8052.     CX = pipe mode bit mask
  8053.         bit 15: set if nonblocking, clear if blocking
  8054.         bit     8: set if read in message mode, clear if read in byte mode
  8055. Return: CF clear if successful
  8056.     CF set if error
  8057.         AX = error code
  8058. Note:    this function was introduced by LAN Manager but is also supported by
  8059.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8060.       Machines, and others
  8061. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  8062. --------N-215F35-----------------------------
  8063. INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
  8064.     AX = 5F35h
  8065.     BX = handle
  8066.     CX = buffer length
  8067.     DS:SI -> buffer
  8068. Return:    CF set on error
  8069.         AX = error code
  8070.     CF clear if successful (LAN Manager v1-v2)
  8071.     AX = 0000h if successful (LAN Manager 3.x)
  8072.     ---if successful---
  8073.         CX = bytes read
  8074.         SI = bytes left in the pipe
  8075.         DX = bytes left in the current message
  8076.         AX = pipe status (v1-v2) (see #0908)
  8077.         DI = pipe status (v3.x)
  8078. Note:    this function was introduced by LAN Manager but is also supported by
  8079.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8080.       Machines, and others
  8081. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  8082.  
  8083. (Table 0908)
  8084. Values for pipe status:
  8085.  0001h    disconnected
  8086.  0002h    listening
  8087.  0003h    connected
  8088.  0004h    closing
  8089. --------N-215F36-----------------------------
  8090. INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
  8091.     AX = 5F36h
  8092.     BX = handle
  8093.     CX = in buffer length
  8094.     DS:SI -> in buffer
  8095.     DX = out buffer length
  8096.     ES:DI -> out buffer
  8097. Return: CF clear if successful
  8098.         CX = bytes read
  8099.     CF set on error
  8100.         AX = error code
  8101. Note:    this function was introduced by LAN Manager but is also supported by
  8102.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8103.       Machines, and others
  8104. SeeAlso: AX=5F34h,AX=5F37h
  8105. --------N-215F37-----------------------------
  8106. INT 21 u - Named Pipes - DosCallNmPipe
  8107.     AX = 5F37h
  8108.     DS:SI -> DosCallNmPipe stack frame (see #0909)
  8109. Return: CF clear if successful
  8110.         CX = bytes read
  8111.     CF set on error
  8112.         AX = error code
  8113. Note:    this function was introduced by LAN Manager but is also supported by
  8114.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8115.       Machines, and others
  8116. SeeAlso: AX=5F36h,AX=5F38h
  8117.  
  8118. Format of Named Pipes DosCallNmPipe stack frame:
  8119. Offset    Size    Description    (Table 0909)
  8120.  00h    DWORD    timeout
  8121.  04h    DWORD    -> bytes read WORD (not used!!)
  8122.  08h    WORD    out buffer length
  8123.  0Ah    DWORD    address of out buffer
  8124.  0Eh    WORD    in buffer length
  8125.  10h    DWORD    address of in buffer
  8126.  14h    DWORD    address of pipe name
  8127. --------N-215F38-----------------------------
  8128. INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
  8129.     AX = 5F38h
  8130.     DS:DX -> pipe name
  8131.     BX:CX = timeout value
  8132. Return: CF clear if successful
  8133.     CF set if error
  8134.         AX = error code
  8135. Notes:    when a client gets a return code of ERROR_PIPE_BUSY on attempting to
  8136.       open a pipe, it should issue this call to wait until the pipe
  8137.       instance becomes available again; on return from this call, the
  8138.       client must attempt to open the pipe once again
  8139.     this function was introduced by LAN Manager but is also supported by
  8140.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8141.       Machines, and others
  8142. SeeAlso: AX=5F37h,AX=5F39h
  8143. --------N-215F39-----------------------------
  8144. INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
  8145.     AX = 5F39h
  8146.     BX = handle
  8147.     CX = buffer length
  8148.     DS:DX -> buffer
  8149. Return: CF clear if successful
  8150.         CX = bytes read
  8151.     CF set if error
  8152.         AX = error code
  8153. Notes:    this function was introduced by LAN Manager but is also supported by
  8154.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8155.       Machines, and others
  8156.     not documented in the LAN Manager Toolkit
  8157. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  8158. --------N-215F3A-----------------------------
  8159. INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
  8160.     AX = 5F3Ah
  8161.     BX = handle
  8162.     CX = buffer length
  8163.     DS:DX -> buffer
  8164. Return: CF clear if successful
  8165.         CX = bytes written
  8166.     CF set if error
  8167.         AX = error code
  8168. Notes:    this function was introduced by LAN Manager but is also supported by
  8169.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  8170.       Machines, and others
  8171.     not documented in the LAN Manager Toolkit
  8172. SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
  8173. --------N-215F3B-----------------------------
  8174. INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
  8175.     AX = 5F3Bh
  8176.     BX = handle
  8177.     CX = handle_info_1 structure length or sizeof DWORD
  8178.     DI = parameter number to set
  8179.         0000h all
  8180.         0001h number of milliseconds
  8181.         0002h number of characters
  8182.     DS:DX -> handle_info_1 structure (DI=0000h) (see #0910)
  8183.         or DWORD (DI=0001h or 0002h)
  8184.     SI = level of information (0001h)
  8185. Return: CF clear if successful
  8186.         CX = total bytes available
  8187.     CF set if error
  8188.         AX = error code
  8189. SeeAlso: AX=5F3Ch
  8190.  
  8191. Format of LAN Manager handle_info_1 structure:
  8192. Offset    Size    Description    (Table 0910)
  8193.  00h    DWORD    number of milliseconds which workstation collects data before
  8194.           it sends the data to the named pipe
  8195.  04h    DWORD    number of characters which workstation collects before it
  8196.           sends the data to the named pipe
  8197. --------N-215F3C-----------------------------
  8198. INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
  8199.     AX = 5F3Ch
  8200.     BX = handle
  8201.     CX = length of handle_info_1 structure
  8202.     DS:DX -> handle_info_1 structure (see #0910)
  8203.     SI = level of information (must be 0001h)
  8204. Return: CF clear if successful
  8205.         CX = total bytes available
  8206.     CF set if error
  8207.         AX = error code
  8208. SeeAlso: AX=5F3Bh
  8209. --------N-215F3D-----------------------------
  8210. INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
  8211.     AX = 5F3Dh
  8212.     ???
  8213. Return: ???
  8214. --------N-215F3E-----------------------------
  8215. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
  8216.     AX = 5F3Eh
  8217.     ???
  8218. Return: ???
  8219. Note:    This function is not documented anywhere in the LAN Manager 2.x Toolkit
  8220.       but was documented in LAN Manager 1.x manuals.
  8221. --------N-215F3F-----------------------------
  8222. INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
  8223.     AX = 5F3Fh
  8224.     CX = api number
  8225.     ES:DI -> data descriptor
  8226.     ES:SI -> parameter descriptor
  8227.     ES:DX -> auxiliary descriptor (if DX <> 0)
  8228.     ???
  8229. Return: ???
  8230. --------N-215F40-----------------------------
  8231. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
  8232.     AX = 5F40h
  8233.     DS:DX -> NetMessageBufferSend parameter structure (see #0911)
  8234. Return: AX = error code
  8235.  
  8236. Format of LAN Manager NetMessageBufferSend parameter structure:
  8237. Offset    Size    Description    (Table 0911)
  8238.  00h    DWORD    -> recipient name (name for specific user, name* for domain
  8239.               wide name, * for broadcast)
  8240.  04h    DWORD    -> buffer
  8241.  08h    WORD    length of buffer
  8242. --------N-215F41-----------------------------
  8243. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
  8244.     AX = 5F41h
  8245.     BL = level of detail (0000h, 0001h or 0002h)
  8246.     CX = buffer length
  8247.     ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
  8248.         (see #0912,#0913,#0914)
  8249. Return: CF clear if successful
  8250.         CX = entries read
  8251.         DX = total available
  8252.     CF set on error
  8253.         AX = error code
  8254.  
  8255. Format of LAN Manager service_info_0 structure:
  8256. Offset    Size    Description    (Table 0912)
  8257.  00h 16 BYTEs    name
  8258. SeeAlso: #0913,#0914
  8259.  
  8260. Format of service_info_1 structure:
  8261. Offset    Size    Description    (Table 0913)
  8262.  00h 16 BYTEs    name
  8263.  10h    WORD    status bitmask (see #0915)
  8264.  12h    DWORD    status code (see #0916)
  8265.         (also see Microsoft LAN Manager Programmer's Reference)
  8266.  16h    WORD    process id
  8267. SeeAlso: #0912,#0914
  8268.  
  8269. Format of service_info_2 structure:
  8270. Offset    Size    Description    (Table 0914)
  8271.  00h 16 BYTEs    name
  8272.  10h    WORD    status bitmask (see #0915)
  8273.  12h    DWORD    status code (see #0916)
  8274.  16h    WORD    process id
  8275.  18h 64 BYTEs    text
  8276. SeeAlso: #0912,#0913
  8277.  
  8278. Bitfields for LAN Manager status bitmask:
  8279. Bit(s)    Description    (Table 0915)
  8280.  0,1    00 uninstall
  8281.         01 install pending
  8282.         10 uninstall pending
  8283.         11 installed
  8284.  2,3    00 active
  8285.         01 Continue pending
  8286.         10 Pause pending
  8287.         11 paused
  8288.  4    uninstallable
  8289.  5    pausable
  8290.  8    disk redirector paused
  8291.  9    spooled device redirector paused (printing)
  8292.  10    communication device redirector paused
  8293.  
  8294. (Table 0916)
  8295. Values for LAN Manager status code:
  8296.  high word
  8297.     3051 Bad parameter value
  8298.     3052 A parameter is missing
  8299.     3053 An unknown parameter was specified
  8300.     3054 The resource is insufficient
  8301.     3055 Configuration is faulty
  8302.     3056 An MS-DOS or MS OS/2 error occured
  8303.     3057 An internal error occured
  8304.     3058 An ambiguous parameter name was given
  8305.     3059 A duplicate parameter exists
  8306.     3060 The service was terminated by NetSeviceControl when it did not respond
  8307.     3061 The service program file could not be executed
  8308.     3062 The subservice failed to start
  8309.     3063 There is a conflict in the value or use of these parameters
  8310.     3064 There is a problem with the file
  8311.  low word
  8312.     3070 There is insufficient memory
  8313.     3071 There is insufficeient disk space
  8314.     3072 Unable to create thread
  8315.     3073 Unable to create process
  8316.     3074 A security failure occured
  8317.     3075 There is bad or missing default path
  8318.     3076 Network software is not installed
  8319.     3077 Server software is not installed
  8320.     3078 The server could not access the UAS database
  8321.     3079 The action requires user-level security
  8322.     3080 The log directory is invalid
  8323.     3081 The LAN group specificed could not be used
  8324.     3082 The computername is being used as a message alias on another computer
  8325.     3083 The workstation failed to announce the servername
  8326.     3084 The user accounts system is not configured properly
  8327. --------N-215F42-----------------------------
  8328. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
  8329.     AX = 5F42h
  8330.     DH = opcode
  8331.         00h interrogate status
  8332.         01h pause
  8333.         02h continue
  8334.         03h uninstall
  8335.     DL = argument
  8336.         01h disk resource
  8337.         02h print resource
  8338.         04h communications resource (not implemented for DOS)
  8339.     ES:BX -> NetServiceControl parameter structure (see #0917)
  8340. Return: CF clear if successful
  8341.     CF set on error
  8342.         AX = error code
  8343.  
  8344. Format of LAN Manager NetServiceControl parameter structure:
  8345. Offset    Size    Description    (Table 0917)
  8346.  00h    DWORD    -> service name
  8347.  04h    WORD    result buffer size
  8348.  06h    DWORD    -> result buffer as service_info_2 structure
  8349. --------N-215F43-----------------------------
  8350. INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
  8351.     AX = 5F43h
  8352.     BX = handle of remote print job
  8353.     CX = size of PRIDINFO struture
  8354.     ES:DI -> PRIDINFO structure (see #0918)
  8355. Return: CF clear if successful
  8356.         PRIDINFO filled in
  8357.     CF set on error
  8358.         AX = error code
  8359.  
  8360. Format of LAN Manager PRIDINFO structure:
  8361. Offset    Size    Description    (Table 0918)
  8362.  00h    WORD    job id
  8363.  02h 16 BYTEs    server name
  8364.  12h 13 BYTEs    queue name
  8365.  1Fh  1 BYTE    pad
  8366. --------N-215F44-----------------------------
  8367. INT 21 - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
  8368.     AX = 5F44h
  8369.     BX = information level (00h, 01h, or 0Ah)
  8370.     CX = buffer size
  8371.     ES:DI -> buffer in which to store info (see #2715,#2716,#2717)
  8372. Return: AX = error code
  8373.     DX = amount of buffer used (or required)
  8374. SeeAlso: AX=5F45h,AX=5F49h
  8375.  
  8376. Format of LAN Manager wksta_info_0 structure:
  8377. Offset    Size    Description    (Table 2715)
  8378.  00h    WORD     reserved (0)
  8379.  02h    DWORD    reserved (0)
  8380.  06h    DWORD    -> path to computer's LANMAN directory
  8381.  0Ah    DWORD    -> computername of the workstation
  8382.  0Eh    DWORD    -> username of user logged onto workstation
  8383.  12h    DWORD    -> domain to which workstation belongs
  8384.  16h    WORD     LAN Manager version number (2 bytes, Major, Minor)
  8385.  18h    DWORD    reserved (0)
  8386.  22h    WORD     number of seconds workstation waits for resource availability
  8387.  24h    DWORD    delay (in millsecs) before sending data to resource
  8388.  28h    WORD     reserved (0)
  8389.  2Ah    WORD     reserved (0)
  8390.  2Ch    WORD     number of seconds to maintain an inactive connection
  8391.  2Eh    WORD     number of seconds an inactive search continues
  8392.  30h    WORD     threads to dedicate to network (not supported in MSDOS)
  8393.  32h    WORD     number of simultaneous commands sent to network
  8394.  34h    WORD     reserved6 (must be 0)
  8395.  36h    WORD     number of internal buffers
  8396.  38h    WORD     size (in bytes) of each internal buffer
  8397.  3Ah    WORD     max size (in bytes) of an internal cache buffer (not MSDOS)
  8398.  3Ch    WORD     seconds before disconnecting inactive session (not MSDOS)
  8399.  3Eh    WORD     size (in bytes) of an internal error buffer (not MSDOS)
  8400.  40h    WORD     number of clients that can receive alert messages (not MSDOS)
  8401.  42h    WORD     number of services that can be started on workstation
  8402.  44h    WORD     max size (in kilobytes) of error log (not MSDOS)
  8403.  46h    WORD     number of secs before closing inactive print jobs (not MSDOS)
  8404.  48h    WORD     number of character buffers for workstation
  8405.  4Ah    WORD     max size (in bytes) of character buffer
  8406.  4Ch    DWORD    -> name of server that validated logon
  8407.  50h    DWORD    -> workstation heuristics
  8408.  52h    WORD     number of mailslots allowed
  8409. SeeAlso: #2716,#2717
  8410.  
  8411. Format of LAN Manager wksta_info_1 structure:
  8412. Offset    Size    Description    (Table 2716)
  8413.  00h 84 BYTEs    wksta_info_0 structure (see #2715)
  8414.  54h    DWORD    -> name of domain which user is logged on to
  8415.  58h    DWORD    -> all domains in which computer is enlisted
  8416.  5Ch    WORD     number of buffers to allocate for receiving datagrams
  8417. SeeAlso: #2717
  8418.  
  8419. Format of LAN Manager wksta_info_10 structure:
  8420. Offset    Size    Description    (Table 2717)
  8421.  00h    DWORD    -> computername of the workstation
  8422.  04h    DWORD    -> username of user logged onto workstation
  8423.  08h    DWORD    -> domain to which workstation belongs
  8424.  0Ch    WORD     LAN Manager version number (2 bytes, Major, Minor)
  8425.  0Eh    DWORD    -> name of domain which user is loggod on to
  8426.  12h    DWORD    -> all domains in which computer is enlisted
  8427. SeeAlso: #2715,#2716
  8428. --------N-215F45-----------------------------
  8429. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
  8430.     AX = 5F45h
  8431.     BX = level (0000h or 0001h)
  8432.     CX = buffer size
  8433.     DX = parameter to set
  8434.     ES:DI -> buffer
  8435. Return: CF clear if successful
  8436.     CF set if error
  8437.         AX = error code
  8438. SeeAlso: AX=5F44h
  8439. --------N-215F46-----------------------------
  8440. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
  8441.     AX = 5F46h
  8442.     BX = level (0000h or 0001h)
  8443.     CX = size of buffer
  8444.     ES:DI -> buffer of use_info_0 or use_info_1 structures
  8445.           (see #0919,#0920)
  8446. Return: CF clear if successful
  8447.         CX = entries read
  8448.         DX = total available entries
  8449.     CF set if error
  8450.         AX = error code
  8451. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  8452.  
  8453. Format of LAN Manager use_info_0 structure:
  8454. Offset    Size    Description    (Table 0919)
  8455.  00h  9 BYTEs    local device name
  8456.  09h    BYTE    padding
  8457.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  8458. SeeAlso: #0920
  8459.  
  8460. Format of LAN Manager use_info_1 structure:
  8461. Offset    Size    Description    (Table 0920)
  8462.  00h  9 BYTEs    Local device name
  8463.  09h    BYTE    padding
  8464.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  8465.  0Eh    DWORD    -> password
  8466.  12h    WORD    network link status
  8467.         (00h OK, 02h disconnected, else unsure)
  8468.  14h    WORD    use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
  8469.  16h    WORD    ignored
  8470.  18h    WORD    ignored
  8471. SeeAlso: #0919
  8472. --------N-215F47-----------------------------
  8473. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
  8474.     AX = 5F47h
  8475.     BX = level (0001h)
  8476.     CX = size of use_info_1 structure
  8477.     ES:DI -> use_info_1 structure (see #0920)
  8478. Return: CF clear on success
  8479.     CF set on error
  8480.         AX = error code
  8481. SeeAlso: AX=5F46h,AX=5F48h
  8482. --------N-215F48-----------------------------
  8483. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
  8484.     AX = 5F48h
  8485.     BX = force level
  8486.         0000h no force
  8487.         0001h force
  8488.         0002h lots of force
  8489.     ES:DI -> buffer as either the local device name or UNC remote name
  8490. Return: CF clear on success
  8491.     CF set on error
  8492.         AX = error code
  8493. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  8494. --------N-215F49-----------------------------
  8495. INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
  8496.     AX = 5F49h
  8497.     DS:DX -> NetUseGetInfo parameter structure (see #0921)
  8498. Return: CF clear on success
  8499.         DX = total available
  8500.     CF set on error
  8501.         AX = error code
  8502. SeeAlso: AX=5F44h,AX=5F47h
  8503.  
  8504. Format of LAN Manager NetUseGetInfo parameter structure:
  8505. Offset    Size    Description    (Table 0921)
  8506.  00h    DWORD    pointer to either the local device name or UNC remote name
  8507.  04h    WORD    level of information (0000h or 0001h)
  8508.  06h    DWORD    pointer to buffer of use_info_0 or use_info_1 structures
  8509.  0Ah    WORD    length of buffer
  8510. --------N-215F4A-----------------------------
  8511. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
  8512.     AX = 5F4Ah
  8513.     DS:DX -> NetRemoteCopy parameter structure (see #0922)
  8514. Return: CF clear if successful
  8515.     CF set on error
  8516.         AX = error code
  8517. SeeAlso: AX=5F4Bh
  8518.  
  8519. Format of LAN Manager NetRemoteCopy parameter structure:
  8520. Offset    Size    Description    (Table 0922)
  8521.  00h    DWORD    -> source name as UNC
  8522.  04h    DWORD    -> destination name as UNC
  8523.  08h    DWORD    -> source password
  8524.  0Ch    DWORD    -> destination password
  8525.  10h    WORD    destination open bitmap
  8526.         if destination path exists
  8527.             0000h open fails
  8528.             0001h file is appended
  8529.             0002h file is overwritten
  8530.         if destination path doesn't exist
  8531.             0000h open fails
  8532.             0010h file is created
  8533.  12h    WORD    copy control bitmap (see #0923)
  8534.  14h    DWORD    -> copy_info buffer
  8535.  18h    WORD    length of copy_info buffer
  8536.  
  8537. Bitfields for LAN Manager copy control:
  8538. Bit(s)    Description    (Table 0923)
  8539.  0    destination must be a file
  8540.  1    destination must be a directory
  8541.  2    destination is opened in ascii mode instead of binary
  8542.  3    source is opened in ascii mode instead of binary
  8543.  4    verify all write operations
  8544. --------N-215F4B-----------------------------
  8545. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
  8546.     AX = 5F4Bh
  8547.     DS:DX -> NetRemoteMove parameter structure (see #0924)
  8548. Return: CF clear if successful
  8549.     CF set on error
  8550.         AX = error code
  8551. SeeAlso: AX=5F4Ah
  8552.  
  8553. Format of LAN Manager NetRemoteMove parameter structure:
  8554. Offset    Size    Description    (Table 0924)
  8555.  00h    DWORD    -> source name as UNC
  8556.  04h    DWORD    -> destination name as UNC
  8557.  08h    DWORD    -> source password
  8558.  0Ch    DWORD    -> destination password
  8559.  10h    WORD    destination open bitmap
  8560.         if destination path exists
  8561.             0000h open fails
  8562.             0001h file is appended
  8563.             0002h file is overwritten
  8564.         if destination path doesn't exist
  8565.             0000h open fails
  8566.             0010h file is created
  8567.  12h    WORD    move control bitmap
  8568.             0001h destination must be a file
  8569.             0002h destination must be a directory
  8570.  14h    DWORD    -> move_info buffer
  8571.  18h    WORD    length of move_info buffer
  8572. --------N-215F4C-----------------------------
  8573. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
  8574.     AX = 5F4Ch
  8575.     BX = level (0000h or 0001h)
  8576.     CX = buffer length
  8577.     ES:DI -> buffer in which to store information
  8578. Return: CF clear if successful
  8579.         ES:DI -> server_info_X structures (depending on level)
  8580.           (see #0925,#0926)
  8581.         BX = entries read
  8582.         CX = total entries available
  8583.     CF set on error
  8584.         AX = error code
  8585. Notes:    this function is also supported by the Novell DOS Named Pipe Extender
  8586.     this function has been obseleted by NetServerEnum2
  8587. SeeAlso: AX=5F53h
  8588.  
  8589. Format of LAN Manager server_info_0 structure:
  8590. Offset    Size    Description    (Table 0925)
  8591.  00h 16 BYTEs    name
  8592. SeeAlso: #0926
  8593.  
  8594. Format of LAN Manager server_info_1 structure:
  8595. Offset    Size    Description    (Table 0926)
  8596.  00h 16 BYTEs    name
  8597.  10h    BYTE    major version in lower nibble
  8598.  11h    BYTE    minor version
  8599.  12h    DWORD    server type bitmask (see #0927)
  8600.  16h    DWORD    -> comment string
  8601. SeeAlso: #0925
  8602.  
  8603. Bitfields for LAN Manager server type:
  8604. Bit(s)    Description    (Table 0927)
  8605.  0    workstation
  8606.  1    server
  8607.  2    SQL server
  8608.  3    primary domain controller
  8609.  4    backup domain controller
  8610.  5    time server
  8611.  6    Apple File Protocol (AFP) server
  8612.  7    Novell server
  8613.  8    Domain Member (v2.1+)
  8614.  9    Print Queue server (v2.1+)
  8615.  10    Dialin server (v2.1+)
  8616.  11    Unix server (v2.1+)
  8617. --------N-215F4D-----------------------------
  8618. INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
  8619.     AX = 5F4Dh
  8620.     BX = message size
  8621.     CX = mailslot size (must be bigger than message size by at least 1)
  8622.                (minimum 1000h, maximum FFF6h)
  8623.                (buffer must be 9 bytes bigger than this)
  8624.     DS:SI -> name
  8625.     ES:DI -> memory buffer
  8626. Return: CF clear if successful
  8627.         AX = handle
  8628.     CF set on error
  8629.         AX = error code
  8630. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  8631. --------N-215F4E-----------------------------
  8632. INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
  8633.     AX = 5F4Eh
  8634.     BX = handle
  8635. Return: CF clear if successful
  8636.         ES:DI -> memory to be freed (allocated during DosMakeMailslot)
  8637.     CF set on error
  8638.         AX = error code
  8639. SeeAlso: AX=5F4Dh,AX=5F4Fh
  8640. --------N-215F4F-----------------------------
  8641. INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
  8642.     AX = 5F4Fh
  8643.     BX = handle
  8644. Return: CF clear if successful
  8645.         AX = max message size
  8646.         BX = mailslot size
  8647.         CX = next message size
  8648.         DX = next message priority
  8649.         SI = number of messages waiting
  8650.     CF set on error
  8651.         AX = error code
  8652. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  8653. --------N-215F50-----------------------------
  8654. INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
  8655.     AX = 5F50h
  8656.     BX = handle
  8657.     DX:CX = timeout
  8658.     ES:DI -> buffer
  8659. Return: CF clear if successful
  8660.         AX = bytes read
  8661.         CX = next item's size
  8662.         DX = next item's priority
  8663.     CF set on error
  8664.         AX = error code
  8665. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  8666. --------N-215F51-----------------------------
  8667. INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
  8668.     AX = 5F51h
  8669.     BX = handle
  8670.     ES:DI -> buffer
  8671. Return: CF clear if successful
  8672.         AX = bytes read
  8673.         CX = next item's size
  8674.         DX = next item's priority
  8675.     CF set on error
  8676.         AX = error code
  8677. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  8678. --------N-215F52-----------------------------
  8679. INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
  8680.     AX = 5F52h
  8681.     BX = class
  8682.     CX = length of buffer
  8683.     DX = priority
  8684.     ES:DI -> DosWriteMailslot parameter structure (see #0928)
  8685.     DS:SI -> mailslot name
  8686. Return: CF clear if successful
  8687.     CF set on error
  8688.         AX = error code
  8689. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  8690.  
  8691. Format of LAN Manager DosWriteMailslot parameter structure:
  8692. Offset    Size    Description    (Table 0928)
  8693.  00h    DWORD    timeout
  8694.  04h    DWORD    -> buffer
  8695. --------N-215F53-----------------------------
  8696. INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
  8697.     AX = 5F53h
  8698.     DS:SI -> NetServerEnum2 parameter structure (see #0929)
  8699. Return: CF clear if successful
  8700.         BX = entries read
  8701.         CX = total entries available
  8702.     CF set on error
  8703.         AX = error code
  8704. SeeAlso: AX=5F4Ch
  8705.  
  8706. Format of LAN Manager NetServerEnum2 parameter structure:
  8707. Offset    Size    Description    (Table 0929)
  8708.  00h    WORD    level (0000h or 0001h)
  8709.  02h    DWORD    -> buffer as array of server_info_??? structures (see #0931)
  8710.  06h    WORD    length of buffer
  8711.  08h    DWORD    server type bitmask (see #0930)
  8712.  0Ch    DWORD    -> Domain name (may be 0000h:0000h for all local domains)
  8713.  
  8714. Bitfields for LAN Manager server type:
  8715. Bit(s)    Description    (Table 0930)
  8716.  0    workstation
  8717.  1    server
  8718.  2    SQL server
  8719.  3    primary domain controller
  8720.  4    backup domain controller
  8721.  5    time server
  8722.  6    Apple File Protocol (AFP) server
  8723.  7    Novell server
  8724.  8    Domain Member (v2.1+)
  8725.  9    Print Queue server (v2.1+)
  8726.  10    Dialin server (v2.1+)
  8727.  11    Unix server (v2.1+)
  8728. Note:    set all (FFFFFFFFh) for All Types
  8729.  
  8730. Format of LAN Manager server_info_0 structure:
  8731. Offset    Size    Description    (Table 0931)
  8732.  00h 16 BYTEs    name
  8733. SeeAlso: #0932
  8734.  
  8735. Format of LAN Manager server_info_1 structure:
  8736. Offset    Size    Description    (Table 0932)
  8737.  00h 16 BYTEs    name
  8738.  10h    BYTE    major version in lower nibble
  8739.  11h    BYTE    minor version
  8740.  12h    DWORD    server type (bits 0-11) (see #0930)
  8741.  16h    DWORD    -> comment string
  8742. SeeAlso: #0931
  8743. --------N-215F55----------------------------
  8744. INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
  8745.     AX = 5F55h
  8746.     BX = ???
  8747. Return: CF clear if successful
  8748.     CF set on error
  8749.         AX = error code
  8750. --------N-215F80-----------------------------
  8751. INT 21 - LANtastic - GET LOGIN ENTRY
  8752.     AX = 5F80h
  8753.     BX = login entry index (0-based)
  8754.     ES:DI -> 16-byte buffer for machine name
  8755. Return: CF clear if successful
  8756.         buffer filled with machine name ("\\" prefix removed)
  8757.         DL = adapter number (v3+)
  8758.     CF set on error
  8759.         AX = error code
  8760. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  8761. SeeAlso: AX=5F83h
  8762. --------N-215F81-----------------------------
  8763. INT 21 - LANtastic - LOGIN TO SERVER
  8764.     AX = 5F81h
  8765.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  8766.     BL = adapter number
  8767.         FFh try all valid adapters
  8768.         00h-07h try only specified adapter
  8769. Return: CF clear if successful
  8770.     CF set on error
  8771.         AX = error code
  8772. Notes:    login path is of form "\\machine\username"
  8773.     if no password is used, the string at ES:DI must be terminated with
  8774.       three NULs for compatibility with LANtastic v3.0.
  8775. SeeAlso: AX=5F82h,AX=5F84h
  8776. --------N-215F82-----------------------------
  8777. INT 21 - LANtastic - LOGOUT FROM SERVER
  8778.     AX = 5F82h
  8779.     ES:DI -> ASCIZ server name (in form "\\machine")
  8780. Return: CF clear if successful
  8781.     CF set on error
  8782.         AX = error code
  8783. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  8784. --------N-215F83-----------------------------
  8785. INT 21 - LANtastic - GET USERNAME ENTRY
  8786.     AX = 5F83h
  8787.     BX = login entry index (0-based)
  8788.     ES:DI -> 16-byte buffer for username currently logged into
  8789. Return: CF clear if successful
  8790.         DL = adapter number (v3+)
  8791.     CF set on error
  8792.         AX = error code
  8793. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  8794. SeeAlso: AX=5F80h
  8795. --------N-215F84-----------------------------
  8796. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  8797.     AX = 5F84h
  8798.     BX = server index not currently logged into
  8799.     ES:DI -> 16-byte buffer for server name which is available for logging
  8800.         in to ("\\" prefix omitted)
  8801. Return: CF clear if successful
  8802.         DL = adapter number to non-logged in server is on
  8803.     CF set on error
  8804.         AX = error code
  8805. SeeAlso: AX=5F81h
  8806. --------N-215F85-----------------------------
  8807. INT 21 - LANtastic - CHANGE PASSWORD
  8808.     AX = 5F85h
  8809.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  8810. Return: CF clear if successful
  8811.     CF set on error
  8812.         AX = error code
  8813. Notes:    must be logged into the named machine
  8814.     this function is illegal for group accounts
  8815. --------N-215F86-----------------------------
  8816. INT 21 - LANtastic - DISABLE ACCOUNT
  8817.     AX = 5F86h
  8818.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  8819. Return: CF clear if successful
  8820.     CF set on error
  8821.         AX = error code
  8822. Note:    must be logged into the named machine and concurrent logins set to 1
  8823.       by NET_MGR.  Requires system manager to re-enable account.
  8824. --------N-215F87-----------------------------
  8825. INT 21 - LANtastic v3+ - GET ACCOUNT
  8826.     AX = 5F87h
  8827.     DS:SI -> 128-byte buffer for account information (see #0933)
  8828.     ES:DI -> ASCIZ machine name in form "\\machine"
  8829. Return: CF clear if successful
  8830.     CF set on error
  8831.         AX = error code
  8832.     BX destroyed
  8833. Note:    must be logged into the specified machine
  8834.  
  8835. Format of LANtastic user account structure:
  8836. Offset    Size    Description    (Table 0933)
  8837.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  8838.  10h 16 BYTEs    reserved (00h)
  8839.  20h 32 BYTEs    user description
  8840.  40h    BYTE    privilege bits (see #0934)
  8841.  41h    BYTE    maximum concurrent users
  8842.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  8843.         (bit set if half-hour not an allowed time)
  8844.  6Ch    WORD    internal (0002h)
  8845.  6Eh  2 WORDs    last login time
  8846.  72h  2 WORDs    account expiration date (MS-DOS-format year/month:day)
  8847.  76h  2 WORDs    password expiration date (0 = none)
  8848.  7Ah    BYTE    number of days to extend password after change (1-31)
  8849.         00h if no extension required
  8850. ---v3.x---
  8851.  7Bh  5 BYTEs    reserved
  8852. ---v4.x---
  8853.  7Bh    BYTE    storage for first letter of user name when deleted (first
  8854.           character is changed to 00h when deleting account)
  8855.  7Ch    BYTE    extended privileges
  8856.  7Dh  3 BYTEs    reserved
  8857.  
  8858. Bitfields for LANtastic privilege bits:
  8859. Bit(s)    Description    (Table 0934)
  8860.  7    bypass access control lists
  8861.  6    bypass queue protection
  8862.  5    treat as local process
  8863.  4    bypass mail protection
  8864.  3    allow audit entry creation
  8865.  2    system manager
  8866.  0    user cannot change password
  8867. --------N-215F88-----------------------------
  8868. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  8869.     AX = 5F88h
  8870. Return: CF clear if successful
  8871.     CF set on error
  8872.         AX = error code
  8873. SeeAlso: AX=5F82h
  8874. --------N-215F97-----------------------------
  8875. INT 21 - LANtastic - COPY FILE
  8876.     AX = 5F97h
  8877.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  8878.     SI = source file handle
  8879.     DI = destination file handle
  8880. Return: CF clear if successful
  8881.         DX:AX = number of bytes copied
  8882.     CF set on error
  8883.         AX = error code
  8884. Note:    copy is performed by server
  8885. --------N-215F98-----------------------------
  8886. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  8887.     AX = 5F98h
  8888.     DS:SI -> message buffer (see #0935)
  8889. Return: CF clear if successful
  8890.     CF set on error
  8891.         AX = error code
  8892. Note:    v4.1- return no errors
  8893. SeeAlso: AX=5F99h
  8894.  
  8895. Format of LANtastic message buffer:
  8896. Offset    Size    Description    (Table 0935)
  8897.  00h    BYTE    reserved
  8898.  01h    BYTE    message type
  8899.         00h general
  8900.         01h server warning
  8901.         02h-7Fh reserved
  8902.         80h-FFh user-defined
  8903.  02h 16 BYTEs    ASCIZ destination machine name
  8904.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  8905.  22h 16 BYTEs    ASCIZ user name
  8906.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  8907.  42h 80 BYTEs    message text
  8908. --------N-215F99-----------------------------
  8909. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  8910.     AX = 5F99h
  8911.     ES:DI -> messsage buffer (see #0935)
  8912. Return: CF clear if successful
  8913.     CF set on error
  8914.         AX = error code
  8915. SeeAlso: AX=5F98h
  8916. --------N-215F9A-----------------------------
  8917. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  8918.     AX = 5F9Ah
  8919. Return: CF clear if successful
  8920.         DL = bits describing processing of received messages (see #0936)
  8921.     CF set on error
  8922.         AX = error code
  8923. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  8924.  
  8925. Bitfields for unsolicited message processing flags:
  8926. Bit(s)    Description    (Table 0936)
  8927.  0    beep before message is delivered
  8928.  1    deliver message to message service
  8929.  2    pop up message automatically (v3+)
  8930. --------N-215F9B-----------------------------
  8931. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
  8932.     AX = 5F9Bh
  8933.     DL = bits describing processing for received unsolicited messages
  8934.          (see #0936)
  8935. Return: CF clear if successful
  8936.     CF set on error
  8937.         AX = error code
  8938. SeeAlso: AX=5F9Ah,AX=5F9Eh
  8939. --------N-215F9C-----------------------------
  8940. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  8941.     AX = 5F9Ch
  8942.     CX = time to leave on screen in clock ticks
  8943.     DH = 0-based screen line on which to place message
  8944. Return: CF clear if successful
  8945.     CF set on error
  8946.         AX = error code (0Bh)
  8947. Notes:    the original screen contents are restored when the message is removed
  8948.     the message will not appear, and an error will be returned, if the
  8949.       screen is in a graphics mode
  8950. SeeAlso: AX=5F9Ah
  8951. --------N-215F9D-----------------------------
  8952. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  8953.     AX = 5F9Dh
  8954. Return: DL = redirector control bits
  8955.         bit 7: set to notify on print job completion
  8956. SeeAlso: AX=5F9Ah,AX=5F9Eh
  8957. --------N-215F9E-----------------------------
  8958. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  8959.     AX = 5F9Eh
  8960.     DL = redirector control bits (see AX=5F9Dh)
  8961. Return: nothing
  8962. SeeAlso: AX=5F9Bh,AX=5F9Dh
  8963. --------N-215FA0-----------------------------
  8964. INT 21 - LANtastic - GET QUEUE ENTRY
  8965.     AX = 5FA0h
  8966.     BX = queue entry index (0000h is first entry)
  8967.     DS:SI -> buffer for queue entry (see #0937)
  8968.     ES:DI -> ASCIZ server name in form "\\name"
  8969. Return: CF clear if successful
  8970.     CF set on error
  8971.         AX = error code
  8972.     BX = entry index for next queue entry (BX-1 is current index)
  8973. SeeAlso: AX=5FA1h,AX=5FA2h
  8974.  
  8975. Format of LANtastic queue entry:
  8976. Offset    Size    Description    (Table 0937)
  8977.  00h    BYTE    status of entry (see #0938)
  8978.  01h    DWORD    size of spooled file
  8979.  05h    BYTE    type of entry (see #0939)
  8980.  06h    BYTE    output control (see #0940)
  8981.  07h    WORD    number of copies
  8982.  09h    DWORD    sequence number of queue entry
  8983.  0Dh 48 BYTEs    pathname of spooled file
  8984.  3Dh 16 BYTEs    user who spooled file
  8985.  4Dh 16 BYTEs    name of machine from which file was spooled
  8986.  5Dh    WORD    date file was spooled (see #0877 at AX=5700h)
  8987.  5Fh    WORD    time file was spooled (see #0876 at AX=5700h)
  8988.  61h 17 BYTEs    ASCIZ destination device or user name
  8989.  72h 48 BYTEs    comment field
  8990.  
  8991. (Table 0938)
  8992. Values for status of LANtastic queue entry:
  8993.  00h    empty
  8994.  01h    being updated
  8995.  02h    being held
  8996.  03h    waiting for despool
  8997.  04h    being despooled
  8998.  05h    canceled
  8999.  06h    spooled file could not be accessed
  9000.  07h    destination could not be accessed
  9001.  08h    rush job
  9002.  
  9003. (Table 0939)
  9004. Values for type of LANtastic queue entry:
  9005.  00h    printer queue file
  9006.  01h    message
  9007.  02h    local file
  9008.  03h    remote file
  9009.  04h    to remote modem
  9010.  05h    batch processor file
  9011.  
  9012. Bitfields for output control:
  9013. Bit(s)    Description    (Table 0940)
  9014.  6    don't delete (for mail)
  9015.  5    mail file contains voice mail (v3+)
  9016.  4    mail message has been read
  9017.  3    response has been requested for this mail
  9018. --------N-215FA1-----------------------------
  9019. INT 21 - LANtastic - SET QUEUE ENTRY
  9020.     AX = 5FA1h
  9021.     BX = handle of opened queue entry
  9022.     DS:SI -> queue entry (see #0937)
  9023. Return: CF clear if successful
  9024.     CF set on error
  9025.         AX = error code
  9026. Notes:    the only queue entry fields which may be changed are output control,
  9027.       number of copies, destination device, and comment
  9028.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  9029.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  9030.       printer queue entries)
  9031. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  9032. --------N-215FA2-----------------------------
  9033. INT 21 - LANtastic - CONTROL QUEUE
  9034.     AX = 5FA2h
  9035.     BL = control command
  9036.         00h start despooling (privileged)
  9037.         01h halt despooling (privileged)
  9038.         02h halt despooling at end of job (privileged)
  9039.         03h pause despooler at end of job (privileged)
  9040.         04h print single job (privileged)
  9041.         05h restart current job (privileged)
  9042.         06h cancel the current job
  9043.         07h hold queue entry
  9044.         08h release a held queue entry
  9045.         09h make queue entry a rushed job (privileged)
  9046.     CX:DX = sequence number to control (commands 06h-09h)
  9047.     DX = physical printer number (commands 00h-05h)
  9048.         00h-02h LPT1-LPT3
  9049.         03h,04h COM1,COM2
  9050.         other    all printers
  9051.     ES:DI -> ASCIZ server name in form "\\machine"
  9052. Return: CF clear if successful
  9053.     CF set on error
  9054.         AX = error code
  9055. --------N-215FA3-----------------------------
  9056. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  9057.     AX = 5FA3h
  9058.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  9059.     DS:SI -> buffer for printer status (see #0941)
  9060.     ES:DI -> ASCIZ server name in form "\\machine"
  9061. Return: CF clear if successful
  9062.     CF set on error
  9063.         AX = error code
  9064.     BX = next physical printer number
  9065. Note:    you must be logged in to the specified server
  9066.  
  9067. Format of LANtastic printer status:
  9068. Offset    Size    Description    (Table 0941)
  9069.  00h    BYTE    printer state (see #0942)
  9070.  01h    WORD    queue index of print job being despooled
  9071.         FFFFh if not despooling--ignore all following fields
  9072.  03h    WORD    actual characters per second being output
  9073.  05h    DWORD    number of characters actually output so far
  9074.  09h    DWORD    number of bytes read from spooled file so far
  9075.  0Dh    WORD    copies remaining to print
  9076.  
  9077. Bitfields for LANtastic printer state:
  9078. Bit(s)    Description    (Table 0942)
  9079.  7    printer paused
  9080.  0-6    0 printer disabled
  9081.     1 will stop at end of job
  9082.     2 print multiple jobs
  9083. --------N-215FA4-----------------------------
  9084. INT 21 - LANtastic v3+ - GET STREAM INFO
  9085.     AX = 5FA4h
  9086.     BX = 0-based stream index number
  9087.     DS:SI -> buffer for stream information (see #0943)
  9088.     ES:DI -> ASCIZ machine name in form "\\machine"
  9089. Return: CF clear if successful
  9090.     CF set on error
  9091.         AX = error code
  9092.     BX = next stream number
  9093. SeeAlso: AX=5FA5h
  9094.  
  9095. Format of LANtastic stream information:
  9096. Offset    Size    Description    (Table 0943)
  9097.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  9098.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  9099. --------N-215FA5-----------------------------
  9100. INT 21 - LANtastic v3+ - SET STREAM INFO
  9101.     AX = 5FA5h
  9102.     BX = 0-based stream index number
  9103.     DS:SI -> buffer containing stream information (see #0943)
  9104.     ES:DI -> ASCIZ machine name in form "\\machine"
  9105. Return: CF clear if successful
  9106.     CF set on error
  9107.         AX = error code
  9108. SeeAlso: AX=5FA4h
  9109. --------N-215FA7-----------------------------
  9110. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  9111.     AX = 5FA7h
  9112.     DS:DX -> ASCIZ reason code (max 8 bytes)
  9113.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  9114.     ES:DI -> ASCIZ machine name in form "\\machine"
  9115. Return: CF clear if successful
  9116.     CF set on error
  9117.         AX = error code
  9118. Note:    you must be logged in to the specified server and have the "U"
  9119.       privilege to execute this call
  9120. --------N-215FA9-----------------------------
  9121. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  9122.     AX = 5FA9h
  9123.     BX = handle of opened queue entry
  9124.     DS:SI -> queue entry (see #0937)
  9125. Return: CF clear if successful
  9126.     CF set on error
  9127.         AX = error code
  9128. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  9129.       also set.  This call supports direct despooling.
  9130. SeeAlso: AX=5FA1h
  9131. --------N-215FB0-----------------------------
  9132. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  9133.     AX = 5FB0h
  9134.     BX = server login entry index
  9135.     DS:SI -> buffer for active user entry (see #0944)
  9136.     ES:DI -> ASCIZ machine name in form "\\server"
  9137. Return: CF clear if successful
  9138.     CF set on error
  9139.         AX = error code
  9140.     BX = next login index
  9141. SeeAlso: AX=5FB2h
  9142.  
  9143. Format of LANtastic active user entry:
  9144. Offset    Size    Description    (Table 0944)
  9145.  00h    WORD    virtual circuit number
  9146.  02h    BYTE    login state (see #0945)
  9147.  03h    BYTE    last command issued (see #0946)
  9148.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  9149.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  9150.  0Ch 16 BYTEs    name of user who is logged in
  9151.  1Ch 16 BYTEs    name of remote logged in machine
  9152.  2Ch    BYTE    extended privileges (v4+???)
  9153.         bit 0: user cannot change his password
  9154.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  9155.  
  9156. Bitfields for login state:
  9157. Bit(s)    Description    (Table 0945)
  9158.  0    fully logged in
  9159.  1    remote program load login
  9160.  2    user has system manager privileges
  9161.  3    user can create audit entries
  9162.  4    bypass mail protection
  9163.  5    treat as local process
  9164.  6    bypass queue protection
  9165.  7    bypass access control lists
  9166.  
  9167. (Table 0946)
  9168. Values for last LANtastic command:
  9169.  00h    login
  9170.  01h    process termination
  9171.  02h    open file
  9172.  03h    close file
  9173.  04h    create file
  9174.  05h    create new file
  9175.  06h    create unique file
  9176.  07h    commit data to disk
  9177.  08h    read file
  9178.  09h    write file
  9179.  0Ah    delete file
  9180.  0Bh    set file attributes
  9181.  0Ch    lock byte range
  9182.  0Dh    unlock byte range
  9183.  0Eh    create subdirectory
  9184.  0Fh    remove subdirectory
  9185.  10h    rename file
  9186.  11h    find first matching file
  9187.  12h    find next matching file
  9188.  13h    get disk free space
  9189.  14h    get a queue entry
  9190.  15h    set a queue entry
  9191.  16h    control the queue
  9192.  17h    return login information
  9193.  18h    return link description
  9194.  19h    seek on file
  9195.  1Ah    get server's time
  9196.  1Bh    create audit entry
  9197.  1Ch    open file in multitude of modes
  9198.  1Dh    change password
  9199.  1Eh    disable account
  9200.  1Fh    local server file copy
  9201. ---v3+---
  9202.  20h    get username from account file
  9203.  21h    translate server's logical path
  9204.  22h    make indirect file
  9205.  23h    get indirect file contents
  9206.  24h    get physical printer status
  9207.  25h    get logical print stream info
  9208.  26h    set logical print stream info
  9209.  27h    get user's account record
  9210. ---v4+---
  9211.  28h    request server shutdown
  9212.  29h    cancel server shutdown
  9213.  2Ah    stuff server's keyboard
  9214.  2Bh    write then commit data to disk
  9215.  2Ch    set extended queue entry
  9216.  2Dh    terminate user from server
  9217.  2Eh    enable/disable logins
  9218.  2Fh    flush server caches
  9219.  30h    change username
  9220.  31h    get extended queue entry
  9221.     (same as get queue, but can return named fields blanked)
  9222. --------N-215FB1-----------------------------
  9223. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  9224.     AX = 5FB1h
  9225.     DS:SI -> 64-byte buffer for link description
  9226.     ES:DI -> ASCIZ machine and shared directory name in form
  9227.          "\\machine\shared-resource"
  9228. Return: CF clear if successful
  9229.         CX = access control list privileges for requesting user (see #0947)
  9230.     CF set on error
  9231.         AX = error code
  9232.  
  9233. Bitfields for LANtastic access control list:
  9234. Bit(s)    Description    (Table 0947)
  9235.  4    (I) allow expansion of indirect files
  9236.  5    (A) allow attribute changing
  9237.  6    (P) allow physical access to device
  9238.  7    (E) allow program execution
  9239.  8    (N) allow file renaming
  9240.  9    (K) allow directory deletion
  9241.  10    (D) allow file deletion
  9242.  11    (L) allow file/directory lookups
  9243.  12    (M) allow directory creation
  9244.  13    (C) allow file creation
  9245.  14    (W) allow open for write and writing
  9246.  15    (R) allow open for read and reading
  9247. --------N-215FB2-----------------------------
  9248. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  9249.     AX = 5FB2h
  9250.     BX = username entry index (0 for first)
  9251.     DS:SI -> 16-byte buffer for username
  9252.     ES:DI -> ASCIZ server name in form "\\machine"
  9253. Return: CF clear if successful
  9254.     CF set on error
  9255.         AX = error code
  9256.     BX = next queue entry index
  9257. SeeAlso: AX=5FB0h
  9258. --------N-215FB3-----------------------------
  9259. INT 21 - LANtastic v3+ - TRANSLATE PATH
  9260.     AX = 5FB3h
  9261.     DS:SI -> 128-byte buffer for ASCIZ result
  9262.     ES:DI -> full ASCIZ path, including server name
  9263.     DX = types of translation to be performed
  9264.         bit 0: expand last component as indirect file
  9265.         bit 1: return actual path relative to server's physical disk
  9266. Return: CF clear if successful
  9267.     CF set on error
  9268.         AX = error code
  9269. Note:    always expands any indirect files along the path
  9270. SeeALso: AX=5FB4h,INT 21/AH=60h
  9271. --------N-215FB4-----------------------------
  9272. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  9273.     AX = 5FB4h
  9274.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  9275.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  9276. Return: CF clear if successful
  9277.     CF set on error
  9278.         AX = error code
  9279. Note:    the contents of the indirect file may be any valid server-relative path
  9280. SeeAlso: AX=5FB3h,AX=5FB5h
  9281. --------N-215FB5-----------------------------
  9282. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  9283.     AX = 5FB5h
  9284.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  9285.     ES:DI -> full ASCIZ path of indirect file
  9286. Return: CF clear if successful
  9287.     CF set on error
  9288.         AX = error code
  9289. SeeAlso: AX=5FB4h
  9290. --------N-215FB6-----------------------------
  9291. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  9292.     AX = 5FB6h
  9293.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  9294.         ASCIZ password
  9295.     BL = adapter number to use for default login attempt
  9296.         FFh try all valid adapters
  9297.         00h-05h try adapter 0-5 explicitly
  9298. Return: CF clear if successful
  9299.     CF set on error
  9300.         AX = error code
  9301. Notes:    call with ES:DI -> two nulls to disable auto-login
  9302. SeeAlso: AX=5FB7h
  9303. --------N-215FB7-----------------------------
  9304. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  9305.     AX = 5FB7h
  9306.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  9307. Return: CF clear if successful
  9308.         DL = adapter number used for default login attempt
  9309.         FFh all valid adapters will be tried
  9310.         00h-05h specified adapter will be tried explicitly
  9311.     CF set on error
  9312.         AX = error code
  9313. SeeAlso: AX=5F81h,AX=5FB6h
  9314. --------N-215FC0-----------------------------
  9315. INT 21 - LANtastic - GET TIME FROM SERVER
  9316.     AX = 5FC0h
  9317.     DS:SI -> time block (see #0948)
  9318.     ES:DI -> ASCIZ server name to get time from
  9319. Return: CF clear if successful
  9320.     CF set on error
  9321.         AX = error code
  9322. SeeAlso: AH=E7h
  9323.  
  9324. Format of LANtastic time block:
  9325. Offset    Size    Description    (Table 0948)
  9326.  00h    WORD    year
  9327.  02h    BYTE    day
  9328.  03h    BYTE    month
  9329.  04h    BYTE    minutes
  9330.  05h    BYTE    hour
  9331.  06h    BYTE    hundredths of second
  9332.  07h    BYTE    second
  9333. --------N-215FC8-----------------------------
  9334. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  9335.     AX = 5FC8h
  9336.     ES:DI -> ASCIZ server name in form "\\machine"
  9337.     DS:SI -> ASCIZ reason string (80 characters)
  9338.     CX = number of minutes until shutdown (0 = immediate)
  9339.     DX = option flags (see #0949)
  9340. Return: CF clear if successful
  9341.     CF set on error
  9342.         AX = error code
  9343. SeeAlso: AX=5FC9h
  9344.  
  9345. Bitfields for LANtastic option flags:
  9346. Bit(s)    Description    (Table 0949)
  9347.  0    auto reboot
  9348.  1    do not notify users
  9349.  2    halt after shutdown
  9350.  3    shutdown due to power fail (used by UPS)
  9351.  4-7    reserved
  9352.  8-14    user definable
  9353.  15    reserved
  9354. --------N-215FC9-----------------------------
  9355. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  9356.     AX = 5FC9h
  9357.     ES:DI -> ASCIZ server name in form "\\machine"
  9358. Return: CF clear if successful
  9359.     CF set on error
  9360.         AX = error code
  9361. Note:    you must have the "S" privilege to use this call
  9362. SeeAlso: AX=5FC8h
  9363. --------N-215FCA-----------------------------
  9364. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  9365.     AX = 5FCAh
  9366.     ES:DI -> ASCIZ server name in form "\\machine"
  9367.     DS:SI -> ASCIZ string to stuff (128 bytes)
  9368. Return: CF clear if successful
  9369.     CF set on error
  9370.         AX = error code
  9371. Note:    you must have the "S" privilege to use this call
  9372.     maximum number of characters that can be stuffed is determined by the
  9373.       server's RUN BUFFER SIZE.
  9374. SeeAlso: INT 16/AH=05h
  9375. --------N-215FCB-----------------------------
  9376. INT 21 - LANtastic v4.1+ - TERMINATE USER
  9377.     AX = 5FCBh
  9378.     ES:DI -> ASCIZ server name in form "\\machine"
  9379.     DS:SI -> blank-padded username.     A null char = wildcard.
  9380.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  9381.     CX = minutes until termination (0 = immediate)
  9382. Return: CF clear if successful
  9383.     CF set on error
  9384.         AX = error code
  9385. Note:    you must have the "S" privilege to use this call
  9386.     you cannot log yourself out using this call
  9387. SeeAlso: AX=5F82h
  9388. --------N-215FCC-----------------------------
  9389. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  9390.     AX = 5FCCh
  9391.     ES:DI -> ASCIZ server name in form "\\machine"
  9392.     CX = bit values (value of bits you want to set) (see #0950)
  9393.     DX = bit mask (bits you are interested in, 0 = get only) (see #0950)
  9394. Return: CF clear if successful
  9395.         CX = control bits after call (see #0950)
  9396.     CF set on error
  9397.         AX = error code
  9398. Note:    you must have the "S" privilege to SET, anyone can GET.
  9399.  
  9400. Bitfields for control bits:
  9401. Bit(s)    Description    (Table 0950)
  9402.  0    disable logins
  9403. --------N-215FCD-----------------------------
  9404. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  9405.     AX = 5FCDh
  9406.     ES:DI -> ASCIZ server name in form "\\machine"
  9407. Return: CF clear if successful
  9408.     CF set on error
  9409.         AX = error code
  9410. Note:    you must have the "S" privilege to use this call.
  9411. --------N-215FD0-----------------------------
  9412. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  9413.     AX = 5FD0h
  9414. Return: CF clear if successful
  9415.         CX = redirected printer timeout in clock ticks of 55ms
  9416.         0000h if timeout disabled
  9417.     CF set on error
  9418.         AX = error code
  9419. SeeAlso: AX=5FD1h
  9420. --------N-215FD1-----------------------------
  9421. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  9422.     AX = 5FD1h
  9423.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  9424. Return: CF clear if successful
  9425.     CF set on error
  9426.         AX = error code
  9427. SeeAlso: AX=5FD0h
  9428. --------N-215FE0-----------------------------
  9429. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  9430.     AX = 5FE0h
  9431. Return: CF clear if successful
  9432.         ES:BX -> current FAR service routine
  9433.     CF set on error
  9434.         AX = error code
  9435. Note:    the service routine is called by the LANtastic redirector whenever DOS
  9436.       may safely be called, permitting external TSRs and drivers to hook
  9437.       into LANtastic's DOS busy flag checking
  9438. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  9439. --------N-215FE1-----------------------------
  9440. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  9441.     AX = 5FE1h
  9442.     ES:BX -> FAR routine to call when DOS services are available
  9443. Return: CF clear if successful
  9444.     CF set on error
  9445.         AX = error code
  9446. Note:    new handler must chain to previous handler as its first action
  9447. SeeAlso: AX=5FE0h
  9448. --------N-215FE2-----------------------------
  9449. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  9450.     AX = 5FE2h
  9451. Return: CF clear if successful
  9452.         ES:BX -> current FAR message service routine
  9453.     CF set on error
  9454.         AX = error code
  9455. SeeAlso: AX=5FE0h,AX=5FE3h
  9456. --------N-215FE3-----------------------------
  9457. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  9458.     AX = 5FE3h
  9459.     ES:BX -> FAR routine for processing network messages
  9460. Return: CF clear if successful
  9461.     CF set on error
  9462.         AX = error code
  9463. Notes:    handler must chain to previous handler as its first action
  9464.     on invocation, ES:BX -> just-received message
  9465. SeeAlso: AX=5FE2h
  9466. --------!---Section--------------------------
  9467.