home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / INTER34B.ZIP / INTERRUP.E < prev    next >
Encoding:
Text File  |  1993-04-03  |  292.6 KB  |  7,968 lines

  1. Interrupt List, part 5 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-28---------------------------------
  4. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  5.     SS:SP = top of MS-DOS stack for I/O functions
  6. Return: all registers preserved
  7. Desc:    This interrupt is invoked each time one of the DOS character input
  8.       functions loops while waiting for input.  Since a DOS call is in
  9.       progress even though DOS is actually idle during such input waits,
  10.       hooking this function is necessary to allow a TSR to perform DOS
  11.       calls while the foreground program is waiting for user input.  The
  12.       INT 28h handler may invoke any INT 21h function except functions
  13.       00h through 0Ch.
  14. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  15.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  16.       the INT 28h handler without destroying the DOS stacks.
  17.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  18.       handle which refers to CON
  19.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  20.       set to 01h; if larger, DOS is truly busy and should not be reentered
  21.     the default handler is an IRET instruction
  22.     supported in OS/2 compatibility box
  23.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  24.       this interrupt as superseded
  25. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  26. --------D-29---------------------------------
  27. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  28.     AL = character to display
  29. Return: nothing
  30. Notes:    automatically called when writing to a device with bit 4 of its device
  31.       driver header set (see also INT 21/AH=52h)
  32.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  33.       vector and assume that ANSI.SYS is installed if the segment is larger
  34.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  35.     the default handler under DESQview 2.2 understands the <Esc>[2J
  36.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  37. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  38. --------N-2A00-------------------------------
  39. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  40.     AH = 00h
  41. Return: AH <> 00h if installed
  42.     CF set if NetWare v2.15 NetBIOS emulator installed
  43. SeeAlso: INT 5C
  44. --------N-2A0000-----------------------------
  45. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  46.     AX = 0000h
  47. Return: AH = DDh
  48. SeeAlso: INT 5B
  49. --------N-2A01-------------------------------
  50. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  51.     AH = 01h
  52.     ES:BX -> NCB (see INT 5C)
  53. Return: AL = NetBIOS error code
  54.     AH = 00h if no error
  55.        = 01h on error
  56. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  57. --------N-2A02-------------------------------
  58. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  59.     AH = 02h
  60.     ???
  61. Return: ???
  62. --------N-2A0300-----------------------------
  63. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  64.     AX = 0300h
  65.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  66.         must include the colon)
  67. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  68.     CF set if access via files only
  69. Notes:    do not use direct disk accesses if this function returns CF set or the
  70.       device is redirected (INT 21/AX=5F02h)
  71.     may take some time to execute
  72.     called by DOS kernel on INT 25 and INT 26
  73. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  74. --------N-2A04-------------------------------
  75. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  76.     AH = 04h
  77.     AL = error retry
  78.         00h automatically retry request on errors 09h, 12h, and 21h
  79.         01h no retry
  80.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  81. Return: AX = 0000h if successful
  82.     AH = 01h on error
  83.         AL = error code
  84. Notes:    invokes either INT 5B or INT 5C as appropriate
  85.     NetWare 2.15 NetBIOS emulator returns CF clear if succesful, set on err
  86. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  87. --------N-2A0500-----------------------------
  88. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  89.     AX = 0500h
  90. Return: AX reserved
  91.     BX = number of network names available
  92.     CX = number of network control blocks available
  93.     DX = number of network sessions available
  94. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  95. --------N-2A06-------------------------------
  96. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  97.     AH = 06h
  98.     AL = 01h set concatenation mode (all printer output put in one job)
  99.          02h set truncation mode (default)
  100.          printer open/close starts new print job
  101.          03h flush printer output and start new print job
  102. Return: CF set on error
  103.         AX = error code
  104.     CF clear if successful
  105. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  106.     LANtastic v4.x no longer supports this call
  107. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  108. --------N-2A2001-----------------------------
  109. INT 2A - MS Networks or NETBIOS - ???
  110.     AX = 2001h
  111.     ???
  112. Return: ???
  113. Note:    intercepted by DESQview 2.x
  114. --------N-2A2002-----------------------------
  115. INT 2A - NETWORK - ???
  116.     AX = 2002h
  117.     ???
  118. Return: ???
  119. Note:    called by MS-DOS 3.30-6.00 APPEND
  120. --------N-2A2003-----------------------------
  121. INT 2A - NETWORK - ???
  122.     AX = 2003h
  123.     ???
  124. Return: ???
  125. Note:    called by MS-DOS 3.30-6.00 APPEND
  126. --------N-2A7802-----------------------------
  127. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  128.     AX = 7802h
  129.     ES:DI -> 8-byte buffer to be filled
  130. Return: AL = 00h if no user logged on to Extended Services
  131.     AL <> 00h if user logged on to Extended Services
  132.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  133. --------D-2A80-------------------------------
  134. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  135.     AH = 80h
  136.     AL = critical section number (00h-0Fh)
  137.         01h DOS kernel, SHARE.EXE, DOSMGR
  138.         apparently for maintaining the integrity of DOS/SHARE/NET
  139.           data structures
  140.         02h DOS kernel, DOSMGR
  141.         ensures that no multitasking occurs while DOS is calling an
  142.           installable device driver
  143.         05h REDIR, DOS 4.x only IFSFUNC
  144.         06h DOS 4.x only IFSFUNC
  145.         08h ASSIGN.COM
  146.         0Ah MSCDEX
  147. Notes:    normally hooked to avoid interrupting a critical section, rather than
  148.       called
  149.     the handler should ensure that none of the critical sections are
  150.       reentered, usually by suspending a task which attempts to reenter
  151.       an active critical section
  152.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  153.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  154.       beginning at offset -11 from the Swappable Data Area
  155.       (see INT 21/AX=5D06h); each word contains the offset within the
  156.       DOS data segment of a byte which must be changed from C3h (RET)
  157.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  158.       DOS 4+ to enable use of critical sections.  For DOS 4+, all words in
  159.       this list point at the byte at offset 0D0Ch.
  160. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  161. --------D-2A81-------------------------------
  162. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  163.     AH = 81h
  164.     AL = critical section number (00h-0Fh) (see AH=80h)
  165. Notes:    normally hooked rather than called
  166.     the handler should reawaken any tasks which were suspended due to an
  167.       attempt to enter the specified critical section
  168. SeeAlso: AH=80h,AH=82h,AX=8700h
  169. --------D-2A82-------------------------------
  170. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  171.     AH = 82h
  172. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  173.       greater than 0Ch except 59h, and on process termination
  174.     the handler should reawaken any tasks which were suspended due to an
  175.       attempt to enter one of the critical sections 0 through 7
  176. SeeAlso: AH=81h
  177. --------N-2A84-------------------------------
  178. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  179.     AH = 84h
  180. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  181.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  182.       software to process requests
  183. SeeAlso: INT 28
  184. --------P-2A8700-----------------------------
  185. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  186.     AX = 8700h
  187.     CF clear
  188. Return: CF clear if OK to print in background now
  189.     CF set if background printing not allowed at this time
  190. Desc:    used to inform interested programs that PRINT is about to start its
  191.       background processing, and allow those programs to postpone the
  192.       processing if necessary
  193. Notes:    when PRINT gains control and want to begin printing, it calls this
  194.       function.  If CF is clear on return, PRINT begins its background
  195.       processing, and calls AX=8701h when it is done.  If CF is set on
  196.       return, PRINT will relinquish control immediately, and will not
  197.       call AX=8701h
  198.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  199.       prevent background printing while its own code is active
  200. SeeAlso: AH=80h,AH=81h,AX=8701h
  201. --------P-2A8701-----------------------------
  202. INT 2A CU - PRINT - END BACKGROUND PRINTING
  203.     AX = 8701h
  204. Desc:    used to inform interested programs that PRINT has completed its
  205.       background processing
  206. Note:    called by PRINT after it has performed some background printing; not
  207.       called if AX=8700h returned with CF set.
  208. SeeAlso: AX=8700h
  209. --------N-2A89-------------------------------
  210. INT 2A U - Network - ???
  211.     AH = 89h
  212.     AL = ???  (ASSIGN uses 08h)
  213.     ???
  214. Return: ???
  215. --------I-2A90-------------------------------
  216. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  217.     AH = 90h
  218.     ???
  219. Return: ???
  220. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  221.       03h-07h,0Ch-11h
  222. --------N-2AC2-------------------------------
  223. INT 2A U - Network - ???
  224.     AH = C2h
  225.     AL = subfunction
  226.         07h ???
  227.         08h ???
  228.     BX = 0001h
  229.     ???
  230. Return: ???
  231. Note:    called by DOS 3.30-6.00 APPEND
  232. --------N-2AD850-----------------------------
  233. INT 2A - Novell NetWare Lite??? - ???
  234.     AX = D850h
  235.     ???
  236. Return: ???
  237. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  238. SeeAlso: AX=D851h
  239. --------N-2AD851-----------------------------
  240. INT 2A - Novell NetWare Lite??? - ???
  241.     AX = D851h
  242.     ???
  243. Return: ???
  244. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  245. SeeAlso: AX=D850h
  246. --------N-2AFF90-----------------------------
  247. INT 2A - PC/TCP PREDIR.EXE - ???
  248.     AX = FF90h
  249. Return: AX = ???
  250. Note:    PREDIR.EXE is the network printer redirector included as part of the
  251.       PC/TCP system by FTP Software, Inc.
  252. --------N-2AFF91-----------------------------
  253. INT 2A - PC/TCP PREDIR.EXE - ???
  254.     AX = FF91h
  255.     BX = ???
  256. Return: AX = status???
  257. --------N-2AFF92-----------------------------
  258. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  259.     AX = FF92h
  260. Return: AX = 0000h if installed
  261.        BX = redirected printer port (FFFFh if no printers redirected)
  262.        CX = version (CH = major, CL = minor)
  263. Note:    PREDIR.EXE is the network printer redirector included as part of the
  264.       PC/TCP system by FTP Software, Inc.
  265. --------N-2AFF93-----------------------------
  266. INT 2A - PC/TCP PREDIR.EXE - ???
  267.     AX = FF93h
  268. Return: AX = ???
  269. --------N-2AFF94-----------------------------
  270. INT 2A - PC/TCP PREDIR.EXE - ???
  271.     AX = FF94h
  272.     BX = ???
  273.     CX = ???
  274.     DX = ???
  275. Return: AX = ???
  276. Note:    PREDIR.EXE is the network printer redirector included as part of the
  277.       PC/TCP system by FTP Software, Inc.
  278. --------N-2AFF95-----------------------------
  279. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  280.     AX = FF95h
  281.     CX = what to get
  282.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  283.         0001h spooling program
  284.         0002h ???
  285.         0003h spool file name
  286.         0004h swap file name
  287. Return: AX = status
  288.         0000h successful
  289.     BX:DX -> ASCIZ configuration string
  290. --------N-2AFF96-----------------------------
  291. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  292.     AX = FF96h
  293.     CX = what to set
  294.         0000h ???
  295.         0001h print-on-hotkey state
  296.         0002h print-on-exit state
  297.         0003h print job timeout in clock ticks
  298.         0004h print-on-EOF state
  299.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  300. Return: AX = ???
  301. SeeAlso: AX=FF97h
  302. Note:    PREDIR.EXE is the network printer redirector included as part of the
  303.       PC/TCP system by FTP Software, Inc.
  304. --------N-2AFF97-----------------------------
  305. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  306.     AX = FF97h
  307.     CX = what to get
  308.         0000h ???
  309.         0001h print-on-hotkey state
  310.         0002h print-on-exit state
  311.         0003h print job timeout in clock ticks
  312.         0004h print-on-EOF state
  313. Return: AX = status
  314.         0000h successful
  315.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  316. SeeAlso: AX=FF96h
  317. --------D-2B---------------------------------
  318. INT 2B - DOS 2+ - RESERVED
  319. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  320. --------D-2C---------------------------------
  321. INT 2C - DOS 2+ - RESERVED
  322. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  323. --------O-2C---------------------------------
  324. INT 2C - STARLITE architecture - KERNEL API
  325. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  326.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  327.       be released in 1991.    The interrupt number is subject to change
  328.       before the actual release.
  329. --------D-2D---------------------------------
  330. INT 2D - DOS 2+ - RESERVED
  331. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  332. --------t-2D---------------------------------
  333. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5]
  334.     AH = multiplex number
  335.     AL = function
  336.         00h installation check
  337.         Return: AL = 00h if free
  338.             AL = FFh if multiplex number in use
  339.                 CX = binary version number (CH = major, CL = minor)
  340.                 DX:DI -> signature string (see below) identifying
  341.                     the program using the multiplex number
  342.         01h get entry point
  343.         Return: AL = 00h if all API calls via INT 2D
  344.             AL = FFh if entry point supported
  345.                 DX:BX -> entry point for bypassing interrupt chain
  346.         02h uninstall
  347.         DX:BX = return address for successful uninstall (may be
  348.             ignored by TSR)
  349.         Return: AL = status
  350.                 00h not implemented
  351.                 01h unsuccessful
  352.                 02h can not uninstall yet, will do so when able
  353.                 03h safe to remove, but no resident uninstaller
  354.                 (TSR still enabled)
  355.                 BX = segment of memory block with resident code
  356.                 04h safe to remove, but no resident uninstaller
  357.                 (TSR now disabled)
  358.                 BX = segment of memory block with resident code
  359.                 05h not safe to remove now, try again later
  360.                 FFh successful
  361.             return at DX:BX with AX destroyed if successful and
  362.               TSR honors specific return address
  363.         03h request pop-up
  364.         Return: AL = status
  365.                 00h not implemented or TSR is not a pop-up
  366.                 01h can not pop up at this time, try again later
  367.                 02h can not pop up yet, will do so when able
  368.                 03h already popped up
  369.                 04h unable to pop up, user intervention required
  370.                 BX = standard reason code
  371.                     0000h unknown failure 
  372.                     0001h interrupt chain passes through memory
  373.                       which must be swapped out to pop up
  374.                     0002h swap-in failed
  375.                 CX = application's reason code if nonzero
  376.                 FFh TSR popped up and was exited by user
  377.                 BX = return value
  378.                     0000h no return value
  379.                     0001h TSR unloaded
  380.                     0002h-00FFh reserved
  381.                     0100h-FFFFh application-dependent
  382.         04h determine chained interrupts
  383.         BL = interrupt number (except 2Dh)
  384.         Return: AL = status
  385.                 00h not implemented
  386.                 01h (obsolete) unable to determine
  387.                 02h (obsolete) interrupt hooked
  388.                 03h (obsolete) interrupt hooked, address returned
  389.                 DX:BX -> TSR's interrupt BL handler
  390.                 04h list of hooked interrupts returned
  391.                 DX:BX -> interrupt hook list (see below)
  392.                 FFh interrupt not hooked
  393.         Notes:    since INT 2D is known to be hooked, the resident code
  394.               need not test for BL=2Dh (to minimize its size), and
  395.               the return value is therefore undefined in that case.
  396.             BL is ignored if the TSR returns AL=04h; in that case,
  397.               the caller needs to scan the return list rather than
  398.               making additional calls to this function.  If the
  399.               return is not 00h or 04h, then the caller must cycle
  400.               through the remaining interrupt numbers it wishes to
  401.               check.
  402.             return values 01h thru 03h are disparaged and will be
  403.               removed from the next version of this specification;
  404.               they are included for compatibility with version 3.3,
  405.               though they were probably never used in any
  406.               implementation
  407.         05h get hotkeys
  408.         Return: AL = status
  409.                 00h not implemented
  410.                 FFh supported
  411.                 DX:BX -> hotkey list (see below)
  412.         06h-0Fh reserved for future enhancements
  413.         Return: AL = 00h (not implemented)
  414.         other  application-dependent
  415. Notes:    programs should not use fixed multiplex numbers; rather, a program
  416.       should scan all multiplex numbers from 00h to FFh, remembering the
  417.       first unused multiplex in case the program is not yet installed.
  418.       For multiplex numbers which are in use, the program should compare
  419.       the first 16 bytes of the signature string to determine whether it
  420.       is already installed on that multiplex number.  If not previously
  421.       installed, it should use the first free multiplex number.
  422.     functions other than 00h are not valid unless a program is installed
  423.       on the selected multiplex number
  424.     to be considered fully compliant with version 3.5 of the specification,
  425.       programs must implement at least functions 00h, 02h (no resident
  426.       uninstall code required), and 04h (return value 04h).     TSRs that
  427.       provide hotkeys with which the user can activate them must also
  428.       implement function 05h.  The absolute minimum fully-compliant
  429.       implementation has an overhead of 64 bytes (80 bytes with function
  430.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  431.       protocol header and hook list entry).
  432.     the signature string and description may be used by memory mappers
  433.       to display the installed programs
  434.     users of this proposal should adhere to the IBM interrupt sharing
  435.       protocol (see below), which will permit removal of TSRs in
  436.       arbitrary order and interrupt handler reordering.  All TSRs
  437.       following this proposal should be removable, though they need not
  438.       keep the code for removing themselves resident; it is acceptable
  439.       for a separate program to perform the removal.
  440.     A sample implementation including example TSRs and utility programs
  441.       may be found in a separate package distributed as AMISLnnn.ZIP
  442.       (AMISL090.ZIP as of this writing).
  443.     Please let me know if you choose to follow this proposal.  The
  444.       signature and a list of the private API calls you use would be
  445.       appreciated, as well.
  446. SeeAlso: INT 2F
  447. Index:    installation check;Alternate Multiplex Interrupt Specification
  448. Index:    installation check;AMIS|installation check;FASTMOUS
  449. Index:    installation check;SPELLER|installation check;Monitor
  450. Index:    installation check;NOLPT|installation check;NOTE
  451. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  452. Index:    installation check;VGABLANK|installation check;EATMEM
  453. Index:    installation check;RECALL|installation check;XPTR2
  454. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  455. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  456.  
  457. Format of signature string:
  458. Offset    Size    Description
  459.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  460.  08h  8 BYTEs    blank-padded product name
  461.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  462. Note:    it is not necessary to reserve a full 64 bytes for the description,
  463.       just enough to store the actual ASCIZ string
  464.  
  465. Format of interrupt hook list [array]:
  466. Offset    Size    Description
  467.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  468.  01h    WORD    offset within hook list's segment of the interrupt handler
  469.         this will point at the initial short jump of the interrupt
  470.         sharing protocol header (see below)
  471.  
  472. Format of hotkey list:
  473. Offset    Size    Description
  474.  00h    BYTE    type of hotkey checking
  475.         bit 0: checks before chaining INT 09
  476.         bit 1: checks after chaining INT 09
  477.         bit 2: checks before chaining INT 15/AH=4Fh
  478.         bit 3: checks after chaining INT 15/AH=4Fh
  479.         bit 4: checks on INT 16/AH=00h,01h,02h
  480.         bit 5: checks on INT 16/AH=10h,11h,12h
  481.         bits 6,7: reserved (0)
  482.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  483.  02h 6N BYTEs    array of hotkey definitions
  484.         (one per hotkey, first should be primary hotkey)
  485.         Offset    Size    Description
  486.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  487.                 hotkey triggers on release if bit 7 set
  488.          01h    WORD    required shift states (see below)
  489.          03h    WORD    disallowed shift states (see below)
  490.          05h    BYTE    flags
  491.                 bit 0: hotkey chained before processing
  492.                 bit 1: hotkey chained after processing
  493.                 bit 2: others should pass through this hotkey
  494.                     so that it can be monitored
  495.                 bit 3: hotkey will not activate if other keys
  496.                     pressed/released before hotkey press is
  497.                     completed
  498.                 bit 4: this key is remapped into some other key
  499.                 bit 5-7: reserved (0)
  500. Notes:    except for bit 7, the shift states correspond exactly to the return
  501.       values from INT 16/AH=12h.  A set bit in the required states word
  502.       indicates that the corresponding shift state must be active when the
  503.       hotkey's scan code is received for the hotkey to be recognized; a
  504.       clear bit means that the corresponding state may be ignored.    A set
  505.       bit in the disallowed shift states word indicates that the
  506.       corresponding shift state must be inactive.
  507.     if bit 2 is set, either control key may be pressed for the hotkey; if
  508.       bits 8 and 10 are both set, then both control keys must be pressed.
  509.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  510.     for the disallowed-states word, if one of the "either" bits is set,
  511.       then both the corresponding left bit and right bit must be set
  512.     examples:
  513.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  514.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  515.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  516.  
  517. Bitfields for shift states:
  518.  bit 0    right shift pressed
  519.  bit 1    left shift pressed
  520.  bit 2    either control key pressed
  521.  bit 3    either Alt key pressed
  522.  bit 4    ScrollLock active
  523.  bit 5    NumLock active
  524.  bit 6    CapsLock active
  525.  bit 7    either shift key pressed
  526.  bit 8    left control key pressed
  527.  bit 9    left Alt key pressed
  528.  bit 10    right control key pressed
  529.  bit 11    right Alt key pressed
  530.  bit 12    ScrollLock pressed
  531.  bit 13    NumLock pressed
  532.  bit 14    CapsLock pressed
  533.  bit 15    SysRq key pressed
  534.  
  535. Format of interrupt sharing protocol interrupt handler entry point:
  536. Offset    Size    Description
  537.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  538.         following this data block (EBh 10h)
  539.  02h    DWORD    address of next handler in chain
  540.  06h    WORD    signature 424Bh
  541.  08h    BYTE    EOI flag
  542.         00h software interrupt or secondary hardware interrupt handler
  543.         80h primary hardware interrupt handler (will issue EOI)
  544.  09h  2 BYTEs    short jump to hardware reset routine
  545.         must point at a valid FAR procedure (may be just RETF)
  546.  0Bh  7 BYTEs    reserved (0)
  547.  
  548. Signatures known to be in use:
  549.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  550.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  551.  'heathh  ' 'Monitor '
  552.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  553.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  554.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  555.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  556.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  557.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  558.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  559.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  560.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  561.             testing programs (v1.1+)
  562.         'RECALL  '    public domain commandline editor and history (v1.2+)
  563.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  564. --------N-2D--10-----------------------------
  565. INT 2D - RATSR 2.0+ - GET STATUS
  566.     AL = 10h
  567.     AH = AMIS multiplex number for RATSR
  568. Return: AL = status
  569.         01h listening (no connection)
  570.         02h receiving          \
  571.         03h sending            > station being monitored
  572.         04h initializing recieve  /
  573.     AH = keyboard lock status (00h unlocked, 01h locked)
  574. Program: RATSR is a utility by James Berry provided with
  575.       RemoteAccess/Professional, a commercial bulletin board system, that
  576.       allows remote control of a station over a network
  577. SeeAlso: INT 2D"AMIS"
  578. ----------2D--10-----------------------------
  579. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  580.     AL = 10h
  581.     AH = AMIS multiplex number for dLite
  582. Return: CF clear if successful
  583.         ES:BX -> parameter block (see below)
  584.     CF set on error
  585. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  586.       expands compressed files when they are read
  587. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  588.  
  589. Format of parameter block:
  590. Offset    Size    Description
  591.  00h    BYTE    TSR flags
  592.          bit 0: deny FCB access
  593.         bit 1: dLite sleeping rather than activated
  594.         bit 2: always indicate original filesize when reading
  595.             directory entries, rather than only for specified
  596.             programs
  597.         bits 3-7 reserved
  598.  01h    WORD    maximum number of programs needing original filesize
  599.  03h    WORD    current number of programs needing original filesize
  600.  05h    WORD    maximum number of files that can be handled by dLite (should
  601.          be the same as FILES= in CONFIG.SYS)
  602.  07h    WORD    offset (in the same segment as the parameter block) of the
  603.          table of programs needing the original filesize (8 bytes each,
  604.         without path or extension, uppercase, and zero terminated if
  605.         shorter than 8 bytes)
  606. ----------2D--11-----------------------------
  607. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  608.     AL = 11h
  609.     AH = AMIS multiplex number for dLite
  610.     BX = file handle
  611. Return: CF clear if successful
  612.         DX:AX = size of uncompressed file
  613.     CF set on error (not dPressed file)
  614. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  615. ----------2D--12-----------------------------
  616. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  617.     AL = 12h
  618.     AH = AMIS multiplex number for dLite
  619.     BX = file handle
  620. Return:    CF clear if successful
  621.         DX:AX = size of compressed file
  622.     CF set on error (not dPressed file)
  623. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  624. --------l-2E---------------------------------
  625. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  626.     DS:SI -> commandline to execute (see below)
  627. Return: all registers except CS:IP destroyed
  628.     AX = status (4DOS v4.0)
  629.        0000h successful
  630.        FFFFh error before processing command (not enough memory, etc)
  631.        other error number returned by command
  632. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  633.       internal commands) without loading another copy of COMMAND.COM
  634.     if COMMAND.COM is the user's command interpreter, the primary copy
  635.       executes the command; this allows the master environment to be
  636.       modified by issuing a "SET" command, but changes in the master
  637.       environment will not become effective until all programs descended
  638.       from the primary COMMAND.COM terminate
  639.     since COMMAND.COM processes the string as if typed from the keyboard,
  640.       the transient portion needs to be present, and the calling program
  641.       must ensure that sufficient memory to load the transient portion can
  642.       be allocated by DOS if necessary
  643.     results are unpredictable if invoked by a program run from a batch file
  644.       because this call is not reentrant and COMMAND.COM uses the same
  645.       internal variables when processing a batch file
  646.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  647.       has been loaded
  648.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  649.  
  650. Format of commandline:
  651. Offset    Size    Description
  652.  00h    BYTE    length of command string, not counting trailing CR
  653.  01h    var    command string
  654.   N    BYTE    0Dh (CR)
  655. --------l-2E----BXE22E-----------------------
  656. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  657.     BX = E22Eh
  658.     DS:SI -> zero byte
  659. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  660. ----------2F---------------------------------
  661. INT 2F - Multiplex - NOTES
  662.     AH = identifier of program which is to handle the interrupt
  663.        00h-7Fh reserved for DOS
  664.        B8h-BFh reserved for networks
  665.        C0h-FFh reserved for applications
  666.     AL is the function code
  667.    This is a general mechanism for verifying the presence of a TSR and 
  668.    communicating with it.  When searching for a free identifier code for AH
  669.    using the installation check (AL=00h), the calling program should set
  670.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  671.    and SS:SP to be valid on return, since numerous programs now use additional
  672.    registers on input and/or output for the installation check.
  673. Note:    Since the multiplex chain is growing so long, and beginning to
  674.       experience multiplex number collisions, I am proposing an alternate
  675.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  676.       multiplex, please let me know.
  677. SeeAlso: INT 2D
  678. --------t-2F---------------------------------
  679. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  680.     AH = xx (dynamically assigned based upon a search for a multiplex
  681.          number which doesn't answer installed)
  682.     AL = 00h installation check
  683.     ES:DI = EBEBh:BEBEh
  684. Return: AL = 00h not installed
  685.          01h not installed, not OK to install
  686.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  687.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  688.          short form of the manufacturer's name, PPPPPPPP is a product
  689.          name and NNNN is the product's version number
  690. --------t-2F---------------------------------
  691. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  692.     AH = programmer-selected multiplex number
  693.     AL = function
  694.         00h installation check
  695.         Return: AL = FFh if installed
  696.         01h get TSR interrupt vectors
  697.         Return: DX:AX -> vector table (see below)
  698.         02h get TSR code segment
  699.         Return: AX = code segment for all interrupt handlers
  700.         03h call user exit routine and release TSR's memory
  701.         04h get signature string
  702.         Return: DX:AX -> counted string containing signature
  703.         05h get TSR's INT 2F handler
  704.         Return: DX:AX -> INT 2F handler
  705.         06h enable/disable TSR
  706.         BL = new state (00h disabled, 01h enabled)
  707.         07h activate TSR (popup if not disabled)
  708.         08h get hotkeys
  709.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  710.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  711.         09h set hotkey
  712.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  713.         CX = new hotkey (CH = keyflags, CL = scancode)
  714.         0Ah-1Fh reserved
  715. Index:    installation check;Ross Wentworth POPUP library
  716.  
  717. Format of vector table entry:
  718. Offset    Size    Description
  719.  00h    BYTE    vector number (00h = end of table)
  720.  01h    DWORD    original vector
  721.  05h    WORD    offset of interrupt handler in TSR's code segment
  722. --------t-2F---------------------------------
  723. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  724.     AH = xx (dynamically assigned based upon a search for a multiplex
  725.          number from C0h to FFh which doesn't answer installed)
  726.     AL = 00h installation check
  727.     ES:DI = 1492h:1992h
  728. Return: AL = 00h not installed
  729.          01h not installed, not OK to install
  730.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  731.          point to author_name_ver table (see below)
  732.     AH = FFh
  733. Note:    this interface permits advanced communication with TSRs: it is possible
  734.       to make a generic uninstall utility, advanced TSR relocator programs
  735.       in order to fit fragmented memory areas, etc.
  736. See also: INT 2D"AMIS",INT 2F"Compuscience"
  737. Index:    installation check;CiriSOFT TSR interface
  738. Index:    uninstall;CiriSOFT TSR interface
  739.  
  740. Format of author_name_ver table:
  741. Offset    Size    Description
  742.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  743.         with PSP, XMS upper memory segment if installed as UMB...)
  744.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  745.         in *.COM programs and 0 in upper memory TSR's).
  746.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  747.         used by TSR is possible to determine if hooked vectors are
  748.         still pointing it (and if it is safe to uninstall).
  749.  -10    BYTE    characteristics byte
  750.         bits 0-2: 000 normal program (with PSP)
  751.               001 upper XMS memory block (needed HIMEM.SYS function
  752.                   to free memory when uninstalling)
  753.               010 device driver (*.SYS)
  754.               011 device driver in EXE format
  755.               1xx others (reserved)
  756.         bits 3-6 reserved
  757.         bit 7 set if extra_table defined and supported
  758.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  759.         that the TSR must be use THIS variable in it's INT 2Fh handler.
  760.  -8    WORD    offset to vector_area table (see below)
  761.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  762.  -4   4 BYTEs    signature string "*##*"
  763.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  764.         is used in order to determine if the TSR is already resident
  765.         and it's version code; the ':' char is used as delimiter)
  766.  
  767. Format of vector_area table:
  768. Offset    Size    Description
  769.  -1    BYTE    number of vectors intercepted by TSR
  770.  00h    BYTE    first vector number
  771.  01h    DWORD    first vector pointer before installing the TSR
  772.  05h    BYTE    second vector number
  773.  06h    DWORD    second vector pointer before installing the TSR
  774.  0Ah    ...    (and so on)
  775. Note:    the TSR must use these variables to invoke the previous interrupt
  776.       handler routines
  777.  
  778. Format of extra_area table (needed only to improve relocation feature):
  779. Offset    Size    Description
  780.  00h    WORD    offset to external_ctrl table (0 if not supported)
  781.  02h    WORD    reserved for future use (0)
  782.  
  783. Format of external_ctrl table:
  784. Offset    Size    Description
  785.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  786.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  787.  ---And if bit 0 in offset 00h is off:
  788.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  789.          /SR parameter (silent installation & inhibit)
  790.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  791.         from the previous TSR still resident
  792.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  793. --------c-2F00-------------------------------
  794. INT 2F U - DOS 2.x only PRINT.COM - ???
  795.     AH = 00h
  796.     ???
  797. Return: ???
  798. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  799.     values in AH other than 00h or 01h cause PRINT to return the number of
  800.       files in the queue in AH
  801. SeeAlso: AH=01h
  802. --------c-2F0080-----------------------------
  803. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  804.     AX = 0080h
  805. Return: after PRINT executes
  806. Note:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  807. --------c-2F01-------------------------------
  808. INT 2F U - DOS 2.x only PRINT.COM - ???
  809.     AH = 01h
  810.     ???
  811. Return: ???
  812. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  813.     values in AH other than 00h or 01h cause PRINT to return the number of
  814.       files in the queue in AH
  815. SeeAlso: AH=00h
  816. --------c-2F0100-----------------------------
  817. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  818.     AX = 0100h
  819. Return: AL = status
  820.         00h not installed
  821.         01h not installed, but not OK to install
  822.         FFh installed
  823. SeeAlso: AX=0101h
  824. --------c-2F0101-----------------------------
  825. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  826.     AX = 0101h
  827.     DS:DX -> submit packet (see below)
  828. Return: CF clear if successful
  829.         AL = 01h added to queue
  830.          9Eh now printing
  831.     CF set on error
  832.         AX = error code (see also INT 21/AH=59h)
  833.         01h invalid function
  834.         02h file not found
  835.         03h path not found
  836.         04h out of file handles
  837.         05h access denied
  838.         08h print queue full
  839.         09h spooler busy
  840.         0Ch name too long
  841.         0Fh invalid drive
  842. SeeAlso: AX=0102h
  843.  
  844. Format of submit packet:
  845. Offset    Size    Description
  846.  00h    BYTE    level (must be 00h)
  847.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  848. --------c-2F0102-----------------------------
  849. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  850.     AX = 0102h
  851.     DS:DX -> ASCIZ filename (wildcards allowed)
  852. Return: CF clear if successful
  853.     CF set on error
  854.         AX = error code (see AX=0101h)
  855. SeeAlso: AX=0101h,AX=0103h
  856. --------c-2F0103-----------------------------
  857. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  858.     AX = 0103h
  859. Return: CF clear if successful
  860.     CF set on error
  861.         AX = error code (see AX=0101h)
  862. SeeAlso: AX=0102h
  863. --------c-2F0104-----------------------------
  864. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  865.     AX = 0104h
  866. Return: CF clear if successful
  867.         DX = error count
  868.         DS:SI -> print queue
  869.     CF set on error
  870.         AX = error code (see AX=0101h)
  871. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  872.       to avoid changing the list while it is being examined
  873. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  874.       an empty filename; the first name is the file currently being printed
  875.     printing is stopped until AX=0105h is called to prevent the queue
  876.       from changing while the filenames are being read
  877. SeeAlso: AX=0101h,AX=0105h
  878. --------c-2F0105-----------------------------
  879. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  880.     AX = 0105h
  881. Return: CF clear if successful
  882.     CF set on error
  883.         AX = error code (see AX=0101h)
  884. Desc:    restart PRINT's activities once an application finishes examining the
  885.       print queue
  886. SeeAlso: AX=0104h
  887. --------c-2F0106-----------------------------
  888. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  889.     AX = 0106h
  890. Return: CF set if files in print queue
  891.         AX = error code 0008h (queue full)
  892.         DS:SI -> device driver header
  893.     CF clear if print queue empty
  894.         AX = 0000h
  895. Desc:    determine which device, if any, PRINT is currently using for output
  896. Notes:    documented for DOS 5+, but not documented for prior versions
  897.     this function can be used to allow a program to avoid printing to the
  898.       printer on which PRINT is currently performing output
  899. SeeAlso: AX=0104h
  900. --------N-2F0200-----------------------------
  901. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  902.     AX = 0200h
  903. Return: AL = FFh if installed
  904. Desc:    determine whether the PC LAN Program redirector is installed
  905. --------N-2F0201-----------------------------
  906. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  907.     AX = 0201h
  908. Return: nothing???
  909. Notes:    called by DOS 3.3+ PRINT.COM
  910.     AX=0202h appears to be the opposite function
  911. SeeAlso: AX=0202h
  912. --------N-2F0202-----------------------------
  913. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  914.     AX = 0202h
  915.     ???
  916. Return: nothing???
  917. Note:    called by DOS 3.3+ PRINT.COM
  918. SeeAlso: AX=0201h
  919. --------N-2F0203-----------------------------
  920. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  921.     AX = 0203h
  922. Return: nothing???
  923. Notes:    called by DOS 3.3+ PRINT.COM
  924.     AX=0204h appears to be the opposite function
  925. SeeAlso: AX=0204h
  926. --------N-2F0204-----------------------------
  927. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  928.     AX = 0204h
  929.     ???
  930. Return: nothing???
  931. Note:    called by DOS 3.3 PRINT.COM
  932. --------N-2F---------------------------------
  933. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  934.     AX = 02xxh
  935.     ???
  936. Return: ???
  937. --------l-2F0500-----------------------------
  938. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  939.     AX = 0500h
  940. Return: AL = 00h not installed, OK to install
  941.          01h not installed, can't install
  942.          FFh installed
  943. Desc:    determine whether a critical error message override is installed
  944. Note:    this set of functions allows a user program to partially or completely
  945.       override the default critical error handler's message in COMMAND.COM
  946. SeeAlso: AH=05h,INT 24
  947. --------l-2F05-------------------------------
  948. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  949.     AH = 05h
  950. ---DOS 3.x---
  951.     AL = extended error code (not zero)
  952. ---DOS 4+ ---
  953.     AL = error type
  954.         01h DOS extended error code
  955.         02h parameter error
  956.     BX = error code
  957. Return: CF clear if successful
  958.         ES:DI -> ASCIZ error message (read-only)
  959.         AL = completion state
  960.             00h message requires completion with device name, drive, etc.
  961.         01h message is complete as returned
  962.     CF set if error code can't be converted to string
  963.         AX,DI,ES destroyed
  964.     other flags corrupted
  965. Notes:    called at start of COMMAND.COM's default critical error handler if 
  966.       installed by a user program, allowing partial or complete overriding
  967.       of the default error message
  968.     subfunction 02h is called by many DOS 4 external programs
  969. SeeAlso: AX=0500h,AX=122Eh,INT 24
  970. --------U-2F0600-----------------------------
  971. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  972.     AX = 0600h
  973. Return: AL = status
  974.         00h not installed
  975.         01h not installed, but not OK to install
  976.         FFh installed
  977. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  978.       (see INT 21/AH=52h)
  979.     undocumented prior to the release of DOS 5.0
  980. SeeAlso: AX=0601h,INT 21/AH=52h
  981. --------U-2F0601-----------------------------
  982. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  983.     AX = 0601h
  984. Return: ES = segment of ASSIGN work area and assignment table
  985. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  986.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  987. SeeAlso: AX=0600h
  988. --------D-2F0800-----------------------------
  989. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  990.     AX = 0800h
  991. Return:    AL = 00h not installed, OK to install
  992.          01h not installed, not OK to install
  993.          FFh installed
  994. Desc:    determine whether the internal support code used by DRIVER.SYS is
  995.       present
  996. Note:    supported by DR-DOS 5.0
  997. --------D-2F0801-----------------------------
  998. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  999.     AX = 0801h
  1000.     DS:DI -> drive data table (see AX=0803h)
  1001. Return: AX,BX,SI,ES destroyed
  1002. Notes:    moves down internal list of drive data tables, copying and modifying
  1003.       the drive description flags word for tables referencing same physical
  1004.       drive
  1005.     the data table is appended to the chain of tables
  1006.     supported by DR-DOS 5.0
  1007. SeeAlso: AX=0803h
  1008. --------D-2F0802-----------------------------
  1009. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  1010.     AX = 0802h
  1011.     ES:BX -> device driver request header (see below)
  1012. Return: request header updated as per requested operation
  1013. Notes:    supported by DR-DOS 5.0
  1014.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  1015.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  1016.     the command codes and structures described below apply to all drivers
  1017.       which support the appropriate commands; this call is just one of a
  1018.       number of ways in which a device driver request may be invoked
  1019. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  1020.  
  1021. Values for command code:
  1022.     00h INIT
  1023.     01h MEDIA CHECK (block devices)
  1024.     02h BUILD BPB (block devices)
  1025.     03h IOCTL INPUT
  1026.     04h INPUT
  1027.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  1028.     06h INPUT STATUS (character devices)
  1029.     07h INPUT FLUSH (character devices)
  1030.     08h OUTPUT
  1031.     09h OUTPUT WITH VERIFY
  1032.     0Ah OUTPUT STATUS (character devices)
  1033.     0Bh OUTPUT FLUSH (character devices)
  1034.     0Ch IOCTL OUTPUT
  1035.     0Dh (DOS 3+) DEVICE OPEN
  1036.     0Eh (DOS 3+) DEVICE CLOSE
  1037.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  1038.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  1039.     11h (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  1040.     12h (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  1041.     13h (DOS 3.2+) GENERIC IOCTL
  1042.     14h unused
  1043.     15h (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  1044.     16h unused
  1045.     17h (DOS 3.2+) GET LOGICAL DEVICE
  1046.     18h (DOS 3.2+) SET LOGICAL DEVICE
  1047.     19h (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  1048.     80h (CD-ROM) READ LONG
  1049.     81h (CD-ROM) reserved
  1050.     82h (CD-ROM) READ LONG PREFETCH
  1051.     83h (CD-ROM) SEEK
  1052.     84h (CD-ROM) PLAY AUDIO
  1053.     85h (CD-ROM) STOP AUDIO
  1054.     86h (CD-ROM) WRITE LONG
  1055.     87h (CD-ROM) WRITE LONG VERIFY
  1056.     88h (CD-ROM) RESUME AUDIO
  1057.  
  1058. Format of device driver request header:
  1059. Offset    Size    Description
  1060.  00h    BYTE    length of request header
  1061.  01h    BYTE    subunit within device driver
  1062.  02h    BYTE    command code (see above)
  1063.  03h    WORD    status (filled in by device driver)
  1064.         bit 15: error
  1065.         bits 14-11: reserved
  1066.         bit 10: ??? set by DOS kernel on entry to some driver calls
  1067.         bit 9: busy
  1068.         bit 8: done (may be clear on return under European MS-DOS 4.0)
  1069.         bits 7-0: error code if bit 15 set (see below)
  1070. ---DOS---
  1071.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  1072.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  1073.             device's request queue
  1074.         (other versions) reserved (unused in DOS 2.x and 3.x)
  1075. ---STARLITE architecture---
  1076.  05h    DWORD    pointer to next request header
  1077.  09h  4 BYTEs    reserved
  1078. ---command code 00h---
  1079.  0Dh    BYTE    (return) number of units
  1080.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  1081.             (European MS-DOS 4.0 only)
  1082.         (call) pointer past end of memory available to driver (DOS 5+)
  1083.         (return) address of first free byte following driver
  1084.  12h    DWORD    (call) pointer to commandline arguments
  1085.         (return) pointer to BPB array (block drivers) or
  1086.                 0000h:0000h (character drivers)
  1087.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  1088.    ---European MS-DOS 4.0---
  1089.  17h    DWORD    pointer to function to save registers on stack
  1090.    ---DOS 5+ ---
  1091.  17h    WORD    (return) error-message flag
  1092.             0001h MS-DOS should display error msg on init failure
  1093. ---command code 01h---
  1094.  0Dh    BYTE    media descriptor
  1095.  0Eh    BYTE    returned status
  1096.         00h don't know
  1097.         01h media has not changed
  1098.         FFh media has been changed
  1099.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  1100.           bit in device header is set and disk changed
  1101. ---command code 02h---
  1102.  0Dh    BYTE    media descriptor
  1103.  0Eh    DWORD    transfer address
  1104.         -> scratch sector if NON-IBM FORMAT bit in device header set
  1105.         -> first FAT sector otherwise
  1106.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  1107. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  1108.  0Dh    BYTE    media descriptor (block devices only)
  1109.  0Eh    DWORD    transfer address
  1110.  12h    WORD    (call) number of bytes to read/write
  1111.         (return) actual number of bytes read or written
  1112. ---command codes 04h,08h,09h---
  1113.  0Dh    BYTE    media descriptor (block devices only)
  1114.  0Eh    DWORD    transfer address
  1115.  12h    WORD    byte count (character devices) or sector count (block devices)
  1116.  14h    WORD    starting sector number (block devices only)
  1117.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  1118.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  1119.         device attribute word bit 1 set only) if starting sector number
  1120.         above is FFFFh (see INT 21/AH=52h)
  1121. ---command code 05h---
  1122.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  1123. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  1124.  no further fields
  1125. ---command code 10h---
  1126.  0Dh    BYTE    unused
  1127.  0Eh    DWORD    transfer address
  1128.  12h    WORD    (call) number of bytes to write
  1129.         (return) actual number of bytes written
  1130. ---command codes 11h,12h---
  1131.  0Dh    BYTE    reserved
  1132. ---command code 15h---
  1133.  no further fields
  1134. ---command codes 13h,19h---
  1135.  0Dh    BYTE    category code
  1136.         00h unknown
  1137.         01h COMn:
  1138.         03h CON
  1139.         05h LPTn:
  1140.         07h mouse (European MS-DOS 4.0)
  1141.         08h disk
  1142.         9Eh (STARLITE) Media Access Control driver
  1143.  0Eh    BYTE    function code
  1144.         00h (STARLITE) MAC Bind request
  1145.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1146.         SI contents (European MS-DOS 4.0)
  1147.  11h    WORD    offset of device driver header
  1148.         DI contents (European MS-DOS 4.0)
  1149.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1150. ---command codes 80h,82h---
  1151.  0Dh    BYTE    addressing mode
  1152.         00h HSG (default)
  1153.         01h Phillips/Sony Red Book
  1154.  0Eh    DWORD    transfer address (ignored for command 82h)
  1155.  12h    WORD    number of sectors to read
  1156.         (if 0 for command 82h, request is an advisory seek)
  1157.  14h    DWORD    starting sector number
  1158.         logical sector number in HSG mode
  1159.         frame/second/minute/unused in Red Book mode
  1160.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1161.  18h    BYTE    data read mode
  1162.         00h cooked (2048 bytes per frame)
  1163.         01h raw (2352 bytes per frame, including EDC/ECC)
  1164.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1165.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1166. ---command code 83h---
  1167.  0Dh    BYTE    addressing mode (see above)
  1168.  0Eh    DWORD    transfer address (ignored)
  1169.  12h    WORD    number of sectors to read (ignored)
  1170.  14h    DWORD    starting sector number (see also above)
  1171. ---command code 84h---
  1172.  0Dh    BYTE    addressing mode (see above)
  1173.  0Eh    DWORD    starting sector number (see also above)
  1174.  12h    DWORD    number of sectors to play
  1175. ---command codes 85h,88h---
  1176.  no further fields
  1177. ---command codes 86h,87h---
  1178.  0Dh    BYTE    addressing mode (see above)
  1179.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1180.  12h    WORD    number of sectors to write
  1181.  14h    DWORD    starting sector number (see also above)
  1182.  18h    BYTE    write mode
  1183.         00h mode 0 (write all zeros)
  1184.         01h mode 1 (default) (2048 bytes per sector)
  1185.         02h mode 2 form 1 (2048 bytes per sector)
  1186.         03h mode 2 form 2 (2336 bytes per sector)
  1187.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1188.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1189.  
  1190. Values for error code:
  1191.     00h write-protect violation
  1192.     01h unknown unit
  1193.     02h drive not ready
  1194.     03h unknown command
  1195.     04h CRC error
  1196.     05h bad drive request structure length
  1197.     06h seek error
  1198.     07h unknown media
  1199.     08h sector not found
  1200.     09h printer out of paper
  1201.     0Ah write fault
  1202.     0Bh read fault
  1203.     0Ch general failure
  1204.     0Dh reserved
  1205.     0Eh (CD-ROM) media unavailable
  1206.     0Fh invalid disk change
  1207.  
  1208. Call European MS-DOS 4.0 device helper function with:
  1209.     DL = function
  1210.         00h "SchedClock" called on each timer tick
  1211.         AL = tick interval in milliseconds
  1212.         01h "DevDone" device I/O complete
  1213.         ES:BX -> request header
  1214.         Note:    must update status word first; may be called from
  1215.               an interrupt handler
  1216.         02h "PullRequest" pull next request from queue
  1217.         DS:SI -> DWORD pointer to start of device's request queue
  1218.         Return: ZF clear if pending request
  1219.                 ES:BX -> request header
  1220.             ZF set if no more requests
  1221.         03h "PullParticular" remove specific request from queue
  1222.         DS:SI -> DWORD pointer to start of device's request queue
  1223.         ES:BX -> request header
  1224.         Return: ZF set if request header not found
  1225.         04h "PushRequest" push the request onto the queue
  1226.         DS:SI -> DWORD pointer to start of device's request queue
  1227.         ES:BX -> request header
  1228.         interrupts disabled
  1229.         05h "ConsInputFilter" keyboard input check
  1230.         AX = character (high byte 00h if PC ASCII character)
  1231.         Return: ZF set if character should be discarded
  1232.             ZF clear if character should be handled normally
  1233.         Note:    called by keyboard interrupt handler so DOS can scan
  1234.               for special input characters
  1235.         06h "SortRequest" push request in sorted order by starting sector
  1236.         DS:SI -> DWORD pointer to start of device's request queue
  1237.         ES:BX -> request header
  1238.         interrupts disabled
  1239.         07h "SigEvent" send signal on keyboard event
  1240.         AH = event identifier
  1241.         Return: AL,FLAGS destroyed
  1242.         09h "ProcBlock" block on event
  1243.         AX:BX = event identifier (typically a pointer)
  1244.         CX = timeout in ms or 0000h for never
  1245.         DH = interruptible flag (nonzero if pause may be interrupted)
  1246.         interrupts disabled
  1247.         Return:    after corresponding ProcRun call
  1248.             CF clear if event wakeup, set if unusual wakeup
  1249.             ZF set if timeout wakeup, clear if interrupted
  1250.             AL = wakeup code, nonzero if unusual wakeup
  1251.             interrupts enabled
  1252.             BX,CX,DX destroyed
  1253.         Note:    block process and schedules another to run
  1254.         0Ah "ProcRun" unblock process
  1255.         AX:BX = event identifier (typically a pointer)
  1256.         Return:    AX = number of processes awakened
  1257.             ZF set if no processes awakened
  1258.             BX,CX,DX destroyed
  1259.         0Bh "QueueInit" initialize/clear character queue
  1260.         DS:BX -> character queue structure (see below)
  1261.         Note:    the queue size field must be set before calling
  1262.         0Dh "QueueWrite" put a character in the queue
  1263.         DS:BX -> character queue (see below)
  1264.         AL = character to append to end of queue
  1265.         Return: ZF set if queue is full
  1266.             ZF clear if character stored
  1267.         0Eh "QueueRead" get a character from the queue
  1268.         DS:BX -> character queue (see below)
  1269.         Return: ZF set if queue is empty
  1270.             ZF clear if characters in queue
  1271.                 AL = first character in queue
  1272.         10h "GetDOSVar" return pointer to DOS variable
  1273.         AL = index of variable
  1274.             03h current process ID
  1275.         BX = index into variable if AL specifies an array
  1276.         CX = expected length of variable
  1277.         Return: CF clear if successful
  1278.                 DX:AX -> variable
  1279.             CF set on error
  1280.                 AX,DX destroyed
  1281.             BX,CX destroyed
  1282.         Note:    the variables may not be modified
  1283.         14h "Yield" yield CPU if higher-priority task ready to run
  1284.         Return: FLAGS destroyed
  1285.         1Bh "CritEnter" begin system critical section
  1286.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1287.         Return: AX,BX,CX,DX destroyed
  1288.         1Ch "CritLeave" end system critical section
  1289.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1290.         Return: AX,BX,CX,DX destroyed
  1291.         Note:    must be called in the context of the process which
  1292.               called CritEnter on the semaphore
  1293. Note:    the DWORD pointing at the request queue must be allocated by the driver
  1294.       and initialized to 0000h:0000h.  It always points at the next request
  1295.       to be executed
  1296.  
  1297. Format of character queue:
  1298. Offset    Size    Description
  1299.  00h    WORD    size of queue in bytes
  1300.  02h    WORD    index of next character out
  1301.  04h    WORD    count of characters in the queue
  1302.  06h  N BYTEs    queue buffer
  1303. --------D-2F0803-----------------------------
  1304. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  1305.     AX = 0803h
  1306. Return: DS:DI -> first drive data table in list
  1307. Note:    not available under DR-DOS 5.0
  1308. SeeAlso: AX=0801h
  1309.  
  1310. Format of DOS 3.30 drive data table:
  1311. Offset    Size    Description
  1312.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1313.  04h    BYTE    physical unit number (for INT 13)
  1314.  05h    BYTE    logical drive number (0=A:)
  1315.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1316.         Offset    Size    Description
  1317.          00h    WORD    bytes per sector
  1318.          02h    BYTE    sectors per cluster, FFh if unknown
  1319.          03h    WORD    number of reserved sectors
  1320.          05h    BYTE    number of FATs
  1321.          06h    WORD    number of root dir entries
  1322.          08h    WORD    total sectors
  1323.          0Ah    BYTE    media descriptor, 00h if unknown
  1324.          0Bh    WORD    sectors per FAT
  1325.          0Dh    WORD    sectors per track
  1326.          0Fh    WORD    number of heads
  1327.          11h    WORD    number of hidden sectors
  1328.  19h    BYTE    flags
  1329.         bit 6: 16-bit FAT instead of 12-bit FAT
  1330.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  1331.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1332.         fixed media)
  1333.  27h    BYTE    terminating null for volume label???
  1334.  28h    BYTE    device type (see INT 21/AX=440Dh)
  1335.  29h    WORD    bit flags describing drive
  1336.         bit 0: fixed media
  1337.         bit 1: door lock supported
  1338.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  1339.         bit 3: all sectors in a track are the same size
  1340.         bit 4: physical drive has multiple logical units
  1341.         bit 5: current logical drive for physical drive
  1342.         bit 6: ???
  1343.         bit 7: ???
  1344.         bit 8: ??? (related to disk change detection)
  1345.  2Bh    WORD    number of cylinders
  1346.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  1347.  40h  3 BYTEs    ???
  1348.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  1349.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  1350.         media and PC-DOS 3.30)
  1351.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  1352. ---removable media---
  1353.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1354. ---fixed media---
  1355.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  1356.  4Fh    WORD    absolute cylinder number of partition's start on physical
  1357.         drive (always FFFFh if primary partition)
  1358.  
  1359. Format of COMPAQ DOS 3.31 drive data table:
  1360. Offset    Size    Description
  1361.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1362.  04h    BYTE    physical unit number (for INT 13)
  1363.  05h    BYTE    logical drive number (0=A:)
  1364.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  1365.  1Fh  6 BYTEs    ??? apparently always zeros
  1366.  25h    BYTE    flags
  1367.         bit 6: 16-bit FAT instead of 12-bit FAT
  1368.         bit 5: large volume???
  1369.  26h    WORD    device-open count???
  1370.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1371.         fixed media)
  1372.  33h    BYTE    terminating null for volume label
  1373.  34h    BYTE    device type (see INT 21/AX=440Dh)
  1374.  35h    WORD    bit flags describing drive
  1375.  37h    WORD    number of cylinders
  1376.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  1377.  52h  6 BYTEs    ??? apparently always zeros
  1378.  58h    BYTE    least-significant byte of last-accessed cylinder number
  1379. ---removable media---
  1380.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1381. ---fixed media---
  1382.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  1383.  5Bh    WORD    absolute cylinder number of partition's start on physical
  1384.         drive (always FFFFh if primary partition)
  1385.  
  1386. Format of DOS 4.0-6.0 drive data table:
  1387. Offset    Size    Description
  1388.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1389.  04h    BYTE    physical unit number (for INT 13)
  1390.  05h    BYTE    logical drive number (0=A:)
  1391.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1392.         Offset    Size    Description
  1393.          00h    WORD    bytes per sector
  1394.          02h    BYTE    sectors per cluster, FFh if unknown
  1395.          03h    WORD    number of reserved sectors
  1396.          05h    BYTE    number of FATs
  1397.          06h    WORD    number of root dir entries
  1398.          08h    WORD    total sectors (see offset 15h if zero)
  1399.          0Ah    BYTE    media descriptor, 00h if unknown
  1400.          0Bh    WORD    sectors per FAT
  1401.          0Dh    WORD    sectors per track
  1402.          0Fh    WORD    number of heads
  1403.          11h    DWORD    number of hidden sectors
  1404.          15h    DWORD    total sectors if WORD at 08h is zero
  1405.  1Fh    BYTE    flags
  1406.         bit 6: 16-bit FAT instead of 12-bit
  1407.         bit 7: unsupportable disk (all accesses will return Not Ready)
  1408.  20h    WORD    device-open count
  1409.  22h    BYTE    device type (see INT 21/AX=440Dh)
  1410.  23h    WORD    bit flags describing drive
  1411.         bit 0: fixed media
  1412.         bit 1: door lock supported
  1413.         bit 2: current BPB locked
  1414.         bit 3: all sectors in a track are the same size
  1415.         bit 4: physical drive has multiple logical units
  1416.         bit 5: current logical drive for physical drive
  1417.         bit 6: disk change detected
  1418.         bit 7: set DASD before formatting
  1419.         bit 8: disk reformatted
  1420.         bit 9: read/write disabled
  1421.  25h    WORD    number of cylinders
  1422.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  1423.  40h  7 BYTEs    ???
  1424. ---removable media---
  1425.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1426. ---fixed media---
  1427.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  1428.          always 0001h for DOS 5+
  1429.  49h    WORD    absolute cylinder number of partition's start on physical drive
  1430.         (FFFFh if primary partition in DOS 4.x)
  1431. ------
  1432.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  1433.         extended boot record rather than root directory)
  1434.  56h    BYTE    terminating null for volume label
  1435.  57h    DWORD    serial number
  1436.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  1437.  63h    BYTE    terminating null for filesystem type
  1438. --------f-2F1000-----------------------------
  1439. INT 2F - SHARE - INSTALLATION CHECK
  1440.     AX = 1000h
  1441. Return: AL = 00h  not installed, OK to install
  1442.          01h  not installed, not OK to install
  1443.          FFh  installed
  1444. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  1445.       (08E9: OR  AL,AL
  1446.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  1447.     values of AL other than described here put PC-DOS 4.00 into the same
  1448.       loop (the buggy instructions are the same)
  1449. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  1450.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  1451.       inactive state (due to the undocumented /NC flag used by the autoload
  1452.       code) until this call is made
  1453.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  1454.     Windows Enhanced mode hooks this call and reports that SHARE is
  1455.       installed even when it is not
  1456. SeeAlso: AX=1080h,INT 21/AH=52h
  1457. --------d-2F1001-----------------------------
  1458. INT 2F U - SuperStor PRO SSTORDRV.SYS - SET ???
  1459.     AX = 1001h
  1460.     BX = ???
  1461.     DX = ???
  1462. Program: SuperStor is a disk-compression program by Addstor.
  1463. SeeAlso: AX=F800h
  1464. --------f-2F1040-----------------------------
  1465. INT 2F U - DOS 4 only SHARE internal - ???
  1466.     AX = 1040h
  1467.     ???
  1468. Return: AL = FFh???
  1469. SeeAlso: AX=1000h
  1470. --------f-2F1080-----------------------------
  1471. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  1472.     AX = 1080h
  1473. Return: AL = status
  1474.         F0h successful
  1475.         FFh checking was already on
  1476. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  1477.       and file sharing checks.  The undocumented commandline flag /NC can
  1478.       be used to disable the sharing code.
  1479. SeeAlso: AX=1000h,AX=1081h
  1480. --------f-2F1081-----------------------------
  1481. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  1482.     AX = 1081h
  1483. Return: AL = status
  1484.         F0h successful
  1485.         FFh checking was already off
  1486. Note:    (see AX=1080h)
  1487. SeeAlso: AX=1000h,AX=1080h
  1488. --------O-2F10FF-----------------------------
  1489. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1490.     AX = 10FFh
  1491.     ES:BX -> ???
  1492. Note:    sets pointer in kernel
  1493. --------N-2F1100-----------------------------
  1494. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1495.     AX = 1100h
  1496. Return: AL = 00h  not installed, OK to install
  1497.          01h  not installed, not OK to install
  1498.          FFh  installed
  1499. Notes:    called by DOS 3.1+ kernel
  1500.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1501.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1502.       redirector
  1503. --------d-2F1100-----------------------------
  1504. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1505.     AX = 1100h
  1506.     STACK: WORD DADAh
  1507. Return: AL = 00h not installed, OK to install
  1508.         STACK unchanged
  1509.        = 01h not installed, not OK to install
  1510.         STACK unchanged
  1511.        = FFh installed
  1512.         STACK: WORD ADADh
  1513. --------N-2F1101-----------------------------
  1514. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1515.     AX = 1101h
  1516.     SS = DOS DS
  1517.     SDA first filename pointer -> fully-qualified directory name
  1518.     SDA CDS pointer -> current directory structure for drive with dir
  1519. Return: CF set on error
  1520.         AX = DOS error code (see INT 21/AH=59h)
  1521.     CF clear if successful
  1522. Note:    called by DOS 3.1+ kernel
  1523. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1524. --------N-2F1102-----------------------------
  1525. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1526.     AX = 1102h
  1527.     SS = DOS DS
  1528.     SDA first filename pointer -> fully-qualified directory name
  1529.     SDA CDS pointer -> current directory structure for drive with dir
  1530. Return: CF set on error
  1531.         AX = DOS error code (see INT 21/AH=59h)
  1532.     CF clear if successful
  1533. Note:    appears to be identical to AX=1101h
  1534. SeeAlso: AX=1101h
  1535. --------N-2F1103-----------------------------
  1536. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1537.     AX = 1103h
  1538.     SS = DOS DS
  1539.     SDA first filename pointer -> fully-qualified directory name
  1540.     SDA CDS pointer -> current directory structure for drive with dir
  1541. Return: CF set on error
  1542.         AX = DOS error code (see INT 21/AH=59h)
  1543.     CF clear if successful
  1544. Note:    called by DOS 3.1+ kernel
  1545. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1546. --------N-2F1104-----------------------------
  1547. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1548.     AX = 1104h
  1549.     SS = DOS DS
  1550.     SDA first filename pointer -> fully-qualified directory name
  1551.     SDA CDS pointer -> current directory structure for drive with dir
  1552. Return: CF set on error
  1553.         AX = DOS error code (see INT 21/AH=59h)
  1554.     CF clear if successful
  1555. Note:    appears to be identical to AX=1103h
  1556. SeeAlso: AX=1103h
  1557. --------N-2F1105-----------------------------
  1558. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1559.     AX = 1105h
  1560.     SS = DOS DS
  1561.     SDA first filename pointer -> fully-qualified directory name
  1562.     SDA CDS pointer -> current directory structure for drive with dir
  1563. Return: CF set on error
  1564.         AX = DOS error code (see INT 21/AH=59h)
  1565.     CF clear if successful
  1566.         CDS updated with new path
  1567. Notes:    called by DOS 3.1+ kernel
  1568.     directory string in CDS should not have a terminating backslash unless
  1569.       the current directory is the root
  1570. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1571. --------N-2F1106-----------------------------
  1572. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1573.     AX = 1106h
  1574.     ES:DI -> SFT
  1575.         SFT DPB field -> DPB of drive containing file
  1576. Return: CF set on error
  1577.         AX = DOS error code (see INT 21/AH=59h)
  1578.     CF clear if successful
  1579.         SFT updated (redirector must decrement open count, which may be
  1580.             done with INT 2F/AX=1208h)
  1581. Note:    called by DOS 3.1+ kernel
  1582. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1583. --------N-2F1107-----------------------------
  1584. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1585.     AX = 1107h
  1586.     ES:DI -> SFT
  1587.         SFT DPB field -> DPB of drive containing file
  1588. Return: CF set on error
  1589.         AX = DOS error code (see INT 21/AH=59h)
  1590.     CF clear if successful
  1591.         all buffers for file flushed
  1592.         directory entry updated
  1593. Note:    called by DOS 3.1+ kernel
  1594. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1595. --------N-2F1108-----------------------------
  1596. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1597.     AX = 1108h
  1598.     ES:DI -> SFT
  1599.         SFT DPB field -> DPB of drive containing file
  1600.     CX = number of bytes
  1601.     SS = DOS DS
  1602.     SDA DTA field -> user buffer
  1603. Return: CF set on error
  1604.         AX = DOS error code (see INT 21/AH=59h)
  1605.     CF clear if successful
  1606.         CX = number of bytes read (0000h = end of file)
  1607.         SFT updated
  1608. Note:    called by DOS 3.1+ kernel
  1609. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1610. --------N-2F1109-----------------------------
  1611. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1612.     AX = 1109h
  1613.     ES:DI -> SFT
  1614.         SFT DPB field -> DPB of drive containing file
  1615.     CX = number of bytes
  1616.     SS = DOS DS
  1617.     SDA DTA field -> user buffer
  1618. Return: CF set on error
  1619.         AX = DOS error code (see INT 21/AH=59h)
  1620.     CF clear if successful
  1621.         CX = number of bytes written
  1622.         SFT updated
  1623. Note:    called by DOS 3.1+ kernel
  1624. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1625. --------N-2F110A-----------------------------
  1626. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1627.     AX = 110Ah
  1628.     BX = file handle
  1629.     CX:DX = starting offset
  1630.     SI = high word of size
  1631.     STACK: WORD low word of size
  1632.     ES:DI -> SFT
  1633.         SFT DPB field -> DPB of drive containing file
  1634.     SS = DOS DS
  1635. Return: CF set on error
  1636.        AL = DOS error code (see INT 21/AH=59h)
  1637.     STACK unchanged
  1638. Notes:    called by DOS 3.10-3.31 kernel
  1639.     the redirector is expected to resolve lock conflicts
  1640. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1641. --------N-2F110A-----------------------------
  1642. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  1643.     AX = 110Ah
  1644.     BL = function
  1645.         00h lock
  1646.         01h unlock
  1647.     DS:DX -> parameter block (see below)
  1648.     ES:DI -> SFT
  1649.         SFT DPB field -> DPB of drive containing file
  1650.     SS = DOS DS
  1651. Return: CF set on error
  1652.        AL = DOS error code (see INT 21/AH=59h)
  1653. Notes:    called by DOS 4.0+ kernel
  1654.     the redirector is expected to resolve lock conflicts
  1655. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1656.  
  1657. Format of parameter block:
  1658. Offset    Size    Description
  1659.  00h    DWORD    start offset
  1660.  04h    DWORD    size of region
  1661. --------N-2F110B-----------------------------
  1662. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  1663.     AX = 110Bh
  1664.     BX = file handle
  1665.     CX:DX = starting offset
  1666.     SI = high word of size
  1667.     STACK: WORD low word of size
  1668.     ES:DI -> SFT for file
  1669.         SFT DPB field -> DPB of drive containing file
  1670. Return: CF set on error
  1671.        AL = DOS error code (see INT 21/AH=59h)
  1672.     STACK unchanged
  1673. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  1674. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  1675. --------N-2F110C-----------------------------
  1676. INT 2F CU - NETWORK REDIRECTOR - GET DISK SPACE
  1677.     AX = 110Ch
  1678.     ES:DI -> current directory structure for desired drive
  1679. Return: AL = sectors per cluster
  1680.     AH = media ID byte
  1681.     BX = total clusters
  1682.     CX = bytes per sector
  1683.     DX = number of available clusters
  1684. Note:    called by DOS 3.1+ kernel
  1685. SeeAlso: INT 21/AH=36h
  1686. --------N-2F110D-----------------------------
  1687. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1688.     AX = 110Dh
  1689.     SDA first filename pointer -> name of file
  1690.     ???
  1691. Return: ???
  1692. Note:    appears to be similar to AX=110Fh
  1693. SeeAlso: AX=110Fh
  1694. --------N-2F110E-----------------------------
  1695. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  1696.     AX = 110Eh
  1697.     SS = DOS DS
  1698.     SDA first filename pointer -> fully-qualified name of file
  1699.     SDA CDS pointer -> current directory structure for drive with file
  1700.     STACK: WORD new file attributes
  1701. Return: CF set on error
  1702.         AX = DOS error code (see INT 21/AH=59h)
  1703.     CF clear if successful
  1704.     STACK unchanged
  1705. Note:    called by DOS 3.1+ kernel
  1706. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  1707. --------N-2F110F-----------------------------
  1708. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1709.     AX = 110Fh
  1710.     SS = DOS DS
  1711.     SDA first filename pointer -> fully-qualified name of file
  1712.     SDA CDS pointer -> current directory structure for drive with file
  1713. Return: CF set on error
  1714.         AX = DOS error code (see INT 21/AH=59h)
  1715.     CF clear if successful
  1716.         AX = file attributes
  1717.         BX:DI = file size
  1718. Note:    called by DOS 3.1+ kernel
  1719. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  1720. --------N-2F1110-----------------------------
  1721. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1722.     AX = 1110h
  1723.     SDA first filename pointer -> name of file
  1724.     ???
  1725. Return: ???
  1726. Note:    appears to be similar to AX=110Eh
  1727. SeeAlso: AX=110Eh
  1728. --------N-2F1111-----------------------------
  1729. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  1730.     AX = 1111h
  1731.     SS = DS = DOS DS
  1732.     SDA first filename pointer = offset of fully-qualified old name
  1733.     SDA second filename pointer = offset of fully-qualified new name
  1734.     SDA CDS pointer -> current directory structure for drive with file
  1735. Return: CF set on error
  1736.         AX = DOS error code (see INT 21/AH=59h)
  1737.     CF clear if successful
  1738. Note:    called by DOS 3.1+ kernel
  1739. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  1740. --------N-2F1112-----------------------------
  1741. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1742.     AX = 1112h
  1743.     SS = DS = DOS DS
  1744.     SDA first filename pointer -> name of file
  1745.     ???
  1746. Return: ???
  1747. SeeAlso: AX=1111h
  1748. --------N-2F1113-----------------------------
  1749. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  1750.     AX = 1113h
  1751.     SS = DS = DOS DS
  1752.     SDA first filename pointer -> fully-qualified filename in DOS DS
  1753.     SDA CDS pointer -> current directory structure for drive with file
  1754. Return: CF set on error
  1755.         AX = DOS error code (see INT 21/AH=59h)
  1756.     CF clear if successful
  1757. Notes:    called by DOS 3.1+ kernel
  1758.     the filespec may contain wildcards
  1759. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  1760. --------N-2F1114-----------------------------
  1761. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1762.     AX = 1114h
  1763.     SDA first filename pointer -> name of file
  1764.     ???
  1765. Return: ???
  1766. SeeAlso: AX=1113h
  1767. --------N-2F1115-----------------------------
  1768. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1769.     AX = 1115h
  1770.     SS = DOS DS
  1771.     ES:DI -> SFT ???
  1772.     ???
  1773. Return: ???
  1774. SeeAlso: AX=112Eh
  1775. --------N-2F1116-----------------------------
  1776. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  1777.     AX = 1116h
  1778.     ES:DI -> uninitialized SFT
  1779.     SS = DOS DS
  1780.     SDA first filename pointer -> fully-qualified name of file to open
  1781.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  1782. Return: CF set on error
  1783.         AX = DOS error code (see INT 21/AH=59h)
  1784.     CF clear if successful
  1785.         SFT filled (except handle count, which DOS manages itself)
  1786.     STACK unchanged
  1787. Note:    called by DOS 3.1+ kernel
  1788. SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h
  1789. --------N-2F1117-----------------------------
  1790. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  1791.     AX = 1117h
  1792.     ES:DI -> uninitialized SFT
  1793.     SS = DOS DS
  1794.     SDA first filename pointer -> fully-qualified name of file to open
  1795.     SDA CDS pointer -> current directory structure for drive with file
  1796.     STACK: WORD file creation mode
  1797.             low byte = file attributes (see INT 21/AH=3Ch)
  1798.             high byte = 00h normal create, 01h create new file
  1799. Return: CF set on error
  1800.         AX = DOS error code (see INT 21/AH=59h)
  1801.     CF clear if successful
  1802.         SFT filled (except handle count, which DOS manages itself)
  1803.     STACK unchanged
  1804. Note:    called by DOS 3.1+ kernel
  1805. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  1806. --------N-2F1118-----------------------------
  1807. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  1808.     AX = 1118h
  1809.     ES:DI -> uninitialized SFT
  1810.     SS = DOS DS
  1811.     SDA first filename pointer -> fully-qualified name of file
  1812.     STACK: WORD file creation mode
  1813.             low byte = file attributes
  1814.             high byte = 00h normal create, 01h create new file
  1815. Return: ???
  1816.     STACK unchanged
  1817. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  1818.       SDA CDS pointer has offset FFFFh
  1819. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  1820. --------N-2F1119-----------------------------
  1821. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  1822.     AX = 1119h
  1823.     SS = DS = DOS DS
  1824.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1825.     SDA first filename pointer -> fully-qualified search template
  1826.     SDA search attribute = attribute mask for search
  1827. Return: CF set on error
  1828.         AX = DOS error code (see INT 21/AH=59h)
  1829.     CF clear if successful
  1830.         [DTA] = updated findfirst search data
  1831.             (bit 7 of first byte must be set)
  1832.         [DTA+15h] = standard directory entry for file
  1833. Notes:    called by DOS 3.1+ kernel
  1834.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  1835. SeeAlso: AX=111Bh
  1836. --------N-2F111A-----------------------------
  1837. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  1838.     AX = 111Ah
  1839.     ???
  1840. Return: CF set
  1841.         AX = error code (03h for DOS 4.01 IFSFUNC)
  1842. --------N-2F111B-----------------------------
  1843. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  1844.     AX = 111Bh
  1845.     SS = DS = DOS DS
  1846.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1847.     SDA first filename pointer -> fully-qualified search template
  1848.     SDA CDS pointer -> current directory structure for drive with file
  1849.     SDA search attribute = attribute mask for search
  1850. Return: CF set on error
  1851.         AX = DOS error code (see INT 21/AH=59h)
  1852.     CF clear if successful
  1853.         [DTA] = updated findfirst search data
  1854.             (bit 7 of first byte must be set)
  1855.         [DTA+15h] = standard directory entry for file
  1856. Note:    called by DOS 3.1+ kernel
  1857. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  1858. --------N-2F111C-----------------------------
  1859. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  1860.     AX = 111Ch
  1861.     SS = DS = DOS DS
  1862.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  1863. Return: CF set on error
  1864.         AX = DOS error code (see INT 21/AH=59h)
  1865.     CF clear if successful
  1866.         [DTA] = updated findfirst search data
  1867.             (bit 7 of first byte must be set)
  1868.         [DTA+15h] = standard directory entry for file
  1869. Note:    called by DOS 3.1+ kernel
  1870. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  1871. --------N-2F111D-----------------------------
  1872. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  1873.     AX = 111Dh
  1874.     DS???
  1875.     SS = DOS DS
  1876. Return: ???
  1877. Notes:    called by DOS 3.1+ kernel
  1878.     closes all FCBs opened by process
  1879. SeeAlso: INT 21/AX=5D04h
  1880. --------N-2F111E-----------------------------
  1881. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  1882.     AX = 111Eh
  1883.     SS = DOS DS
  1884.     STACK: WORD function to execute
  1885.         5F00h  get redirection mode
  1886.             BL = type (03h printer, 04h disk)
  1887.             Return: BH = state (00h off, 01h on)
  1888.         5F01h  set redirection mode
  1889.             BL = type (03h printer, 04h disk)
  1890.             BH = state (00h off, 01h on)
  1891.         5F02h  get redirection list entry
  1892.             BX = redirection list index
  1893.             DS:SI -> 16-byte local device name buffer
  1894.             ES:DI -> 128-byte network name buffer
  1895.             Return: must set user's BX to device type and CX to
  1896.                 stored parameter value, using AX=1218h to get
  1897.                 stack frame address
  1898.         5F03h  redirect device
  1899.             BL = device type (see INT 21/AX=5F03h)
  1900.             CX = stored parameter value
  1901.             DS:SI -> ASCIZ source device name
  1902.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1903.         5F04h  cancel redirection
  1904.             DS:SI -> ASCIZ device name or network path
  1905.         5F05h  get redirection list extended entry
  1906.             BX = redirection list index
  1907.             DS:SI -> buffer for ASCIZ source device name
  1908.             ES:DI -> buffer for destination ASCIZ network path
  1909.             Return: BH = status flag
  1910.                 BL = type (03h printer, 04h disk)
  1911.                 CX = stored parameter value
  1912.                 BP = NETBIOS local session number
  1913.         5F06h  similar to 5F05h???
  1914. Return: CF set on error
  1915.         AX = error code (see INT 21/AH=59h)
  1916.     STACK unchanged
  1917. Note:    called by DOS 3.1+ kernel on INT 21/AH=5Fh (including LAN Manager
  1918.       calls)
  1919. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  1920. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  1921. --------N-2F111F-----------------------------
  1922. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  1923.     AX = 111Fh
  1924.     STACK: WORD function
  1925.         5E02h  set printer setup
  1926.         5E03h  get printer setup
  1927.         5E04h  set printer mode
  1928.         5E05h  get printer mode
  1929. Return: CF set on error
  1930.         AX = error code (see INT 21/AH=59h)
  1931.     STACK unchanged
  1932. Note:    called by DOS 3.1+ kernel
  1933. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  1934. --------N-2F1120-----------------------------
  1935. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1936.     AX = 1120h
  1937.     DS = DOS DS
  1938.     ???
  1939. Return: CF clear (successful)
  1940. Notes:    called by DOS 3.1+ kernel
  1941.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1942. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  1943. --------N-2F1121-----------------------------
  1944. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1945.     AX = 1121h
  1946.     CX:DX = offset (in bytes) from end
  1947.     ES:DI -> SFT
  1948.         SFT DPB field -> DPB of drive with file
  1949.     SS = DOS DS
  1950. Return: CF set on error
  1951.         AL = DOS error code (see INT 21/AH=59h)
  1952.     CF clear if successful
  1953.         DX:AX = new file position
  1954. Note:    called by DOS 3.1+ kernel
  1955. SeeAlso: AX=1228h,INT 21/AH=42h
  1956. --------N-2F1122-----------------------------
  1957. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1958.     AX = 1122h
  1959.     SS = DOS DS
  1960.     ???
  1961. Return: ???
  1962. Note:    called by DOS 3.1+ kernel
  1963. --------N-2F1123-----------------------------
  1964. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1965.     AX = 1123h
  1966.     DS:SI -> ASCIZ filename to canonicalize
  1967.     ES:DI -> 128-byte buffer for qualified name
  1968. Return: CF set if not resolved
  1969. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  1970.       filename matches the name of a character device
  1971.     called first when DOS attempts to resolve a filename (unless inside an
  1972.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1973. SeeAlso: AX=1221h,INT 21/AH=60h
  1974. --------N-2F1124-----------------------------
  1975. INT 2F CU - NETWORK REDIRECTOR - PRINTER OFF???
  1976.     AX = 1124h
  1977.     ES:DI -> SFT
  1978.     SS = DOS DS
  1979.     ???
  1980. Return: CX = ???
  1981. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  1982. SeeAlso: AX=1126h
  1983. --------N-2F1125-----------------------------
  1984. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1985.     AX = 1125h
  1986.     STACK: WORD subfunction
  1987.         5D07h get print stream state
  1988.             Return: DL = current state
  1989.         5D08h set print stream state
  1990.             DL = new state
  1991.         5D09h finish print job
  1992. Return: CF set on error
  1993.         AX = error code (see INT 21/AH=59h)
  1994.     STACK unchanged
  1995. Note:    called by DOS 3.1+ kernel
  1996. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  1997. --------N-2F1126-----------------------------
  1998. INT 2F CU - NETWORK REDIRECTOR - PRINTER ON/OFF???
  1999.     AX = 1126h
  2000.     ES:DI -> SFT for file handle 4???
  2001.     SS = DOS DS???
  2002.     ???
  2003. Return: CF set on error
  2004. Notes:    called by DOS 3.1+ kernel
  2005.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  2006.       bit 11 of the device information word in the SFT set
  2007. SeeAlso: AX=1124h
  2008. --------N-2F1127-----------------------------
  2009. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2010.     AX = 1127h
  2011. Return: CF set
  2012.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2013. --------N-2F1128-----------------------------
  2014. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2015.     AX = 1128h
  2016. Return: CF set
  2017.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2018. --------N-2F1129-----------------------------
  2019. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2020.     AX = 1129h
  2021. Return: CF set
  2022.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2023. --------N-2F112A-----------------------------
  2024. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  2025.     AX = 112Ah
  2026.     DS = DOS DS
  2027.     ???
  2028. Return: ???
  2029. Note:    does something to each IFS driver
  2030. --------N-2F112B-----------------------------
  2031. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL???
  2032.     AX = 112Bh
  2033.     SS = DOS DS
  2034.     CX = function/category
  2035.     DS:DX -> parameter block
  2036.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2037.     ???
  2038. Return: CF set on error
  2039.         AX = DOS error code (see INT 21/AH=59h)
  2040.     CF clear if successful
  2041. Note:    called by DOS 4.0 kernel
  2042. --------N-2F112C-----------------------------
  2043. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - ???
  2044.     AX = 112Ch
  2045.     SS = DOS DS
  2046.     SDA current SFT pointer -> SFT for file
  2047.     ???
  2048. Return: CF set on error
  2049. Note:    called by SHARE in DOS 5.0-6.0
  2050. --------N-2F112D-----------------------------
  2051. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  2052.     AX = 112Dh
  2053.     BL = subfunction (value of AL on INT 21)
  2054.         04h truncate open file to zero length
  2055.         ES:DI -> SFT for file
  2056.         Return: CF clear
  2057.         else ???
  2058.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2059.     ES:DI -> SFT
  2060.     SS = DOS DS
  2061. Return: DS = DOS DS
  2062. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  2063.       INT 21/AX=5704h
  2064. --------N-2F112E-----------------------------
  2065. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2066.     AX = 112Eh
  2067.     SS = DS = DOS DS
  2068.     ES:DI -> uninitialized SFT for file
  2069.     STACK: WORD file attribute for created/truncated file
  2070.             low byte = file attributes
  2071.             high byte = 00h normal create/open, 01h create new file
  2072.     SDA first filename pointer -> fully-qualified filename
  2073.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2074.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2075. Return: CF set on error
  2076.         AX = error code
  2077.     CF clear if successful
  2078.         CX = result code
  2079.         01h file opened
  2080.         02h file created
  2081.         03h file replaced (truncated)
  2082.         SFT initialized (except handle count, which DOS manages itself)
  2083. Note:    called by DOS 4+ kernel
  2084. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2085. --------N-2F112F-----------------------------
  2086. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - ???
  2087.     AX = 112Fh
  2088.     SS = DOS DS
  2089.     STACK: WORD function in low byte
  2090.         00h ???
  2091.             DS:SI -> Current Directory Structure???
  2092.             CL = drive (1=A:)
  2093.         01h ???
  2094.             DS:SI -> ???
  2095.             CL = file handle???
  2096.         02h ???
  2097.             DS:SI -> Current Directory Structure???
  2098.             DI = ???
  2099.             CX = drive (1=A:)
  2100.     ???
  2101. Return: CF set on error
  2102.         AX = DOS error code (see INT 21/AH=59h)
  2103.     CF clear if successful
  2104. Note:    called by DOS 4.0 kernel
  2105. SeeAlso: INT 21/AH=6Bh
  2106. --------N-2F1130-----------------------------
  2107. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2108.     AX = 1130h
  2109. Return: ES = CS of resident IFSFUNC
  2110. --------N-2F1180-----------------------------
  2111. INT 2F - LAN Manager Enhanced DOS Services - ???
  2112.     AX = 1180h
  2113.     ???
  2114. Return: ???
  2115. --------N-2F1182-----------------------------
  2116. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2117.     AX = 1182h
  2118.     ???
  2119. Return: ???
  2120. --------N-2F1184-----------------------------
  2121. INT 2F - LAN Manager Enhanced DOS - ???
  2122.     AX = 1184h
  2123.     ???
  2124. Return: ???
  2125. --------N-2F1186-----------------------------
  2126. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2127.     AX = 1186h
  2128.     DS:SI -> stack frame (see below)
  2129. Return: CF clear if successful
  2130.     CF set if error
  2131.         AX = error code
  2132. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2133.       file/printer services
  2134. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2135.  
  2136. Format of DosReadAsynchNmPipe stack frame:
  2137. Offset    Size    Description
  2138.  00h    DWORD    -> number of bytes read
  2139.  04h    WORD    size of buffer
  2140.  06h    DWORD    -> buffer
  2141.  0Ah    DWORD    -> return code
  2142.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2143.  12h    WORD    handle
  2144. --------N-2F118A-----------------------------
  2145. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2146.     AX = 118Ah
  2147.     BX = function (0000h or 0001h)
  2148. Return: CF clear if successful
  2149.         AX = 1100h success
  2150.     CF set if error
  2151.         AX = 0001h, etc.
  2152. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2153. --------N-2F118B-----------------------------
  2154. INT 2F - LAN Manager Enhanced DOS - ???
  2155.     AX = 118Bh
  2156.     ???
  2157. Return: ???
  2158. --------N-2F118C-----------------------------
  2159. INT 2F - LAN Manager Enhanced DOS - ???
  2160.     AX = 118Ch
  2161.     ???
  2162. Return: ???
  2163. --------N-2F118E-----------------------------
  2164. INT 2F - LAN Manager Enhanced DOS - ???
  2165.     AX = 118Eh
  2166.     ???
  2167. Return: ???
  2168. --------N-2F118F-----------------------------
  2169. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2170.     AX = 118Fh
  2171.     DS:SI -> stack frame (see below)
  2172. Return: CF clear if successful
  2173.     CF set if error
  2174.         AX = error code
  2175. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2176.  
  2177. Format of DosReadAsynchNmPipe stack frame:
  2178. Offset    Size    Description
  2179.  00h    DWORD    -> number of bytes read
  2180.  04h    WORD    Size of buffer
  2181.  06h    DWORD    -> buffer
  2182.  0Ah    DWORD    -> return code
  2183.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2184.  12h    WORD    handle
  2185. --------N-2F1190-----------------------------
  2186. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2187.     AX = 1190h
  2188.     DS:SI-> stack frame
  2189. Return: CF clear if successful
  2190.     CF set if error
  2191.         AX = error code
  2192. SeeAlso: AX=1186h,AX=1191h
  2193.  
  2194. Format of DosReadAsynchNmPipe2 stack frame:
  2195. Offset    Size    Description
  2196.  00h    DWORD    -> number of bytes read
  2197.  04h    WORD    size of buffer
  2198.  06h    DWORD    -> buffer
  2199.  0Ah    DWORD    -> return code
  2200.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2201.  12h    WORD    handle
  2202.  14h    DWORD    ???
  2203. --------N-2F1191-----------------------------
  2204. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2205.     AX = 1191h
  2206.     DS:SI -> stack frame (see below)
  2207. Return: CF clear if successful
  2208.     CF set if error
  2209.         AX = error code
  2210. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2211.  
  2212. Format of DosReadAsynchNmPipe2 stack frame:
  2213. Offset    Size    Description
  2214.  00h    DWORD    -> number of bytes read
  2215.  04h    WORD    size of buffer
  2216.  06h    DWORD    -> buffer
  2217.  0Ah    DWORD    -> return code
  2218.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2219.  12h    WORD    handle
  2220.  14h    DWORD    ???
  2221. --------D-2F1200-----------------------------
  2222. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2223.     AX = 1200h
  2224. Return: AL = FFh (for compatibility with other INT 2F functions)
  2225. --------D-2F1201-----------------------------
  2226. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  2227.     AX = 1201h
  2228.     SS = DOS DS (must be using a DOS internal stack)
  2229.     SDA current SFT pointer -> SFT of file to close
  2230. Return: CF set on error
  2231.     BX???
  2232.     CX new reference count of SFT
  2233.     ES:DI -> SFT for file
  2234. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  2235. --------D-2F1202-----------------------------
  2236. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  2237.     AX = 1202h
  2238.     STACK: WORD vector number
  2239. Return: ES:BX -> interrupt vector
  2240.     STACK unchanged
  2241. --------D-2F1203-----------------------------
  2242. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  2243.     AX = 1203h
  2244. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  2245. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  2246.       segment
  2247. --------D-2F1204-----------------------------
  2248. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  2249.     AX = 1204h
  2250.     STACK: WORD character to normalize
  2251. Return: AL = normalized character (forward slash turned to backslash, all
  2252.         others unchanged)
  2253.     ZF set if path separator
  2254.     STACK unchanged
  2255. --------D-2F1205-----------------------------
  2256. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  2257.     AX = 1205h
  2258.     STACK: WORD character to output
  2259. Return: STACK unchanged
  2260. Note:    can be called only from within DOS
  2261. --------D-2F1206-----------------------------
  2262. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  2263.     AX = 1206h
  2264.     DI = error code
  2265.     BP:SI -> device driver header
  2266.     SS = DOS DS (must be using a DOS internal stack)
  2267.     STACK: WORD value to be passed to INT 24 in AX
  2268. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  2269.     STACK unchanged
  2270. SeeAlso: INT 24
  2271. --------D-2F1207-----------------------------
  2272. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  2273.     AX = 1207h
  2274.     DS:DI -> disk buffer
  2275. Return: nothing
  2276. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2277.       recently used is first); under DOS 3.3, the buffer is then moved to
  2278.       the start of the disk buffer chain if it was marked unused
  2279. Notes:    can be called only from within DOS
  2280.     this function is nearly the same as AX=120Fh
  2281. SeeAlso: AX=120Fh
  2282. --------D-2F1208-----------------------------
  2283. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  2284.     AX = 1208h
  2285.     ES:DI -> SFT
  2286. Return: AX = original value of reference count
  2287. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  2288.       that the SFT is not in use).    It is the caller's responsibility to
  2289.       set the reference count to zero after cleaning up.
  2290.     used by network redirectors such as MSCDEX
  2291. SeeAlso: AX=1106h
  2292. --------D-2F1209-----------------------------
  2293. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  2294.     AX = 1209h
  2295.     DS:DI -> disk buffer
  2296. Return: disk buffer marked unused, contents written to disk if buffer dirty
  2297. Note:    can be called only from within DOS
  2298. SeeAlso: AX=120Eh,AX=1215h
  2299. --------D-2F120A-----------------------------
  2300. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  2301.     AX = 120Ah
  2302.     DS = SS = DOS DS (must be using a DOS internal stack)
  2303.     STACK: WORD extended error code
  2304. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  2305.     CF clear if retry, set otherwise
  2306.     STACK unchanged
  2307. Notes:    can only be called during a DOS function call, as it uses various
  2308.       fields in the SDA to set up the registers for the INT 24
  2309.     reportedly sets current DPB's first root directory sector to 1
  2310. SeeAlso: INT 24
  2311. --------D-2F120B-----------------------------
  2312. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  2313.     AX = 120Bh
  2314.     ES:DI -> system file table entry for previous open of file
  2315.     STACK: WORD extended error code (should be 20h--sharing violation)
  2316. Return: CF clear if operation should be retried
  2317.     CF set if operation should not be retried
  2318.         AX = error code (20h) (see INT 21/AH=59h)
  2319.     STACK unchanged
  2320. Notes:    can only be called during a DOS function call
  2321.     should only be called if an attempt was made to open an already-open
  2322.       file contrary to the sharing rules
  2323.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  2324.       inheritance allowed
  2325. --------D-2F120C-----------------------------
  2326. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???
  2327.     AX = 120Ch
  2328.     SDA current SFT pointer -> SFT for file
  2329.     DS = DOS DS
  2330.     SS = DOS DS (must be using a DOS internal stack)
  2331. Return: ES, DI, AX destroyed
  2332. Notes:    invokes "device open" call on device driver for SFT
  2333.     changes owner of last-accessed SFT to calling process if it was opened
  2334.       via FCB
  2335.     called by network redirectors such as MSCDEX
  2336. --------D-2F120D-----------------------------
  2337. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  2338.     AX = 120Dh
  2339.     SS = DOS DS (must be using a DOS internal stack)
  2340. Return: AX = current date in packed format (see INT 21/AX=5700h)
  2341.     DX = current time in packed format (see INT 21/AX=5700h)
  2342. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  2343. --------D-2F120E-----------------------------
  2344. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  2345.     AX = 120Eh
  2346.     SS = DOS DS (must be using a DOS internal stack)
  2347. Return: DS:DI -> first disk buffer
  2348. Notes:    clears "referenced" flag on all disk buffers
  2349.     in DOS 5+, this has become essentially a NOP, invoking the same code
  2350.       used by AX=1224h (SHARING DELAY)
  2351. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  2352. --------D-2F120F-----------------------------
  2353. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  2354.     AX = 120Fh
  2355.     DS:DI -> disk buffer
  2356.     SS = DOS DS (must be using a DOS internal stack)
  2357. Return: DS:DI -> next buffer in buffer list
  2358. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2359.       recently used is first); under DOS 3.3, the buffer is then moved to
  2360.       the start of the disk buffer chain if it was marked unused
  2361. Note:    this function is the same as AX=1207h except that it returns a
  2362.       pointer to the buffer following the specified buffer in the buffer
  2363.       chain
  2364. SeeAlso: AX=1207h
  2365. --------D-2F1210-----------------------------
  2366. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  2367.     AX = 1210h
  2368.     DS:DI -> first disk buffer to check
  2369. Return: ZF clear if found
  2370.         DS:DI -> first unreferenced disk buffer
  2371.     ZF set if not found
  2372. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  2373.       used by AX=1224h (SHARING DELAY)
  2374. SeeAlso: AX=120Eh
  2375. --------D-2F1211-----------------------------
  2376. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  2377.     AX = 1211h
  2378.     DS:SI -> ASCIZ filename to normalize
  2379.     ES:DI -> buffer for normalized filename
  2380. Return: destination buffer filled with uppercase filename, with slashes turned
  2381.     to backslashes
  2382. SeeAlso: AX=121Eh,AX=1221h
  2383. --------D-2F1212-----------------------------
  2384. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2385.     AX = 1212h
  2386.     ES:DI -> ASCIZ string
  2387. Return: CX = length of string
  2388. SeeAlso: AX=1225h
  2389. --------D-2F1213-----------------------------
  2390. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  2391.     AX = 1213h
  2392.     STACK: WORD character to convert to uppercase
  2393. Return: AL = uppercase character
  2394.     STACK unchanged
  2395. --------D-2F1214-----------------------------
  2396. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  2397.     AX = 1214h
  2398.     DS:SI = first pointer
  2399.     ES:DI = second pointer
  2400. Return: ZF set if pointers are equal, ZF clear if not equal
  2401. --------D-2F1215-----------------------------
  2402. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  2403.     AX = 1215h
  2404.     DS:DI -> disk buffer
  2405.     SS = DOS DS (must be using a DOS internal stack)
  2406.     STACK: WORD drives for which to skip buffer
  2407.         ignore buffer if drive same as high byte, or bytes differ and
  2408.         the buffer is for a drive OTHER than that given in low byte
  2409. Return: STACK unchanged
  2410. Note:    can be called only from within DOS
  2411. SeeAlso: AX=1209h
  2412. --------D-2F1216-----------------------------
  2413. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  2414.     AX = 1216h
  2415.     BX = system file table entry number
  2416. Return: CF clear if successful
  2417.         ES:DI -> system file table entry
  2418.     CF set if BX greater than FILES=
  2419. SeeAlso: AX=1220h
  2420. --------D-2F1217-----------------------------
  2421. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2422.     AX = 1217h
  2423.     SS = DOS DS (must be using a DOS internal stack)
  2424.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2425. Return: CF set on error
  2426.         (drive > LASTDRIVE)
  2427.     CF clear if successful
  2428.         DS:SI -> current directory structure for specified drive
  2429.     STACK unchanged
  2430. SeeAlso: AX=1219h
  2431. --------D-2F1218-----------------------------
  2432. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2433.     AX = 1218h
  2434. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2435. Note:    only valid while within DOS
  2436. --------D-2F1219-----------------------------
  2437. INT 2F U - DOS 3+ internal - SET DRIVE???
  2438.     AX = 1219h
  2439.     SS = DOS DS (must be using a DOS internal stack)
  2440.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2441. Return: ???
  2442.     STACK unchanged
  2443. Notes:    calls AX=1217h
  2444.     builds a current directory structure if inside server call
  2445.       (INT 21/AX=5D00h)
  2446. SeeAlso: AX=1217h,AX=121Fh
  2447. --------D-2F121A-----------------------------
  2448. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2449.     AX = 121Ah
  2450.     DS:SI -> filename
  2451. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2452.     DS:SI -> filename without leading X: (if present)
  2453. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2454. --------D-2F121B-----------------------------
  2455. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2456.     AX = 121Bh
  2457.     CL = year - 1980
  2458. Return: AL = number of days in February
  2459. Note:    requires DS to be set to the DOS code segment
  2460. SeeAlso: INT 21/AH=2Bh
  2461. --------D-2F121C-----------------------------
  2462. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2463.     AX = 121Ch
  2464.     DS:SI -> start of memory to checksum
  2465.     CX = number of bytes
  2466.     DX = initial checksum
  2467.     SS = DOS DS (must be using a DOS internal stack)
  2468. Return: AX, CX destroyed
  2469.     DX = checksum
  2470.     DS:SI -> first byte after checksummed range
  2471. Note:    used by DOS to determine day count since 1/1/80 given a date
  2472. SeeAlso: AX=121Dh
  2473. --------D-2F121D-----------------------------
  2474. INT 2F U - DOS 3+ internal - SUM MEMORY
  2475.     AX = 121Dh
  2476.     DS:SI -> memory to add up
  2477.     CX = 0000h
  2478.     DX = limit
  2479. Return: AL = byte which exceeded limit
  2480.     CX = number of bytes before limit exceeded
  2481.     DX = remainder after adding first CX bytes
  2482.     DS:SI -> byte beyond the one which exceeded the limit
  2483. Note:    used by DOS to determine year or month given day count since 1/1/80
  2484. SeeAlso: AX=121Ch
  2485. --------D-2F121E-----------------------------
  2486. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2487.     AX = 121Eh
  2488.     DS:SI -> first ASCIZ filename
  2489.     ES:DI -> second ASCIZ filename
  2490. Return: ZF set if filenames equivalent, ZF clear if not
  2491. SeeAlso: AX=1211h,AX=1221h
  2492. --------D-2F121F-----------------------------
  2493. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2494.     AX = 121Fh
  2495.     SS = DOS DS (must be using a DOS internal stack)
  2496.     STACK: WORD drive letter
  2497. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2498.     STACK unchanged
  2499. --------D-2F1220-----------------------------
  2500. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2501.     AX = 1220h
  2502.     BX = file handle
  2503. Return: CF set on error
  2504.         AL = 6 (invalid file handle)
  2505.     CF clear if successful
  2506.         ES:DI -> JFT entry for file handle in current process
  2507. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  2508.       file handle, or FFh if the handle is not open
  2509. SeeAlso: AX=1216h,AX=1229h
  2510. --------D-2F1221-----------------------------
  2511. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2512.     AX = 1221h
  2513.     DS:SI -> file name to be fully qualified
  2514.     ES:DI -> 128-byte buffer for resulting canonical file name
  2515.     SS = DOS DS (must be using a DOS internal stack)
  2516. Return: (see INT 21/AH=60h)
  2517. Note:    identical to INT 21/AH=60h
  2518. SeeAlso: AX=1123h,INT 21/AH=60h
  2519. --------D-2F1222-----------------------------
  2520. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2521.     AX = 1222h
  2522.     SS = DOS data segment
  2523.     SS:SI -> 4-byte records
  2524.         BYTE    error code, FFh = last record
  2525.         BYTE    error class, FFh = don't change
  2526.         BYTE    suggested action, FFh = don't change
  2527.         BYTE    error locus, FFh = don't change
  2528.     SDA error code set
  2529. Return: SI destroyed
  2530.     SDA error class, error locus, and suggested action fields set
  2531. Note:    can be called only from within DOS
  2532. SeeAlso: AX=122Dh,INT 21/AH=59h
  2533. --------D-2F1223-----------------------------
  2534. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2535.     AX = 1223h
  2536.     DS = DOS DS
  2537.     SS = DOS DS (must be using a DOS internal stack)
  2538.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2539.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2540. Return: CF set if no character device by that name found
  2541.     CF clear if found
  2542.         BH = low byte of device attribute word
  2543. Note:    can only be called from within DOS
  2544. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2545. --------D-2F1224-----------------------------
  2546. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2547.     AX = 1224h
  2548.     SS = DOS DS (must be using a DOS internal stack)
  2549. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2550.       (INT 21/AX=5D00h)
  2551. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2552.       inside a server call
  2553. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2554. --------D-2F1225-----------------------------
  2555. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2556.     AX = 1225h
  2557.     DS:SI -> ASCIZ string
  2558. Return: CX = length of string
  2559. SeeAlso: AX=1212h
  2560. --------D-2F1226-----------------------------
  2561. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2562.     AX = 1226h
  2563.     CL = access mode
  2564.     DS:DX -> ASCIZ filename
  2565.     SS = DOS DS (must be using a DOS internal stack)
  2566. Return: CF set on error
  2567.         AL = error code (see INT 21/AH=59h)
  2568.     CF clear if successful
  2569.         AX = file handle
  2570. Notes:    can only be called from within DOS
  2571.     equivalent to INT 21/AH=3Dh    
  2572.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2573. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2574. --------D-2F1227-----------------------------
  2575. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2576.     AX = 1227h
  2577.     BX = file handle
  2578.     SS = DOS DS (must be using a DOS internal stack)
  2579. Return: CF set on error
  2580.         AL = 06h invalid file handle
  2581.     CF clear if successful
  2582. Notes:    can only be called from within DOS
  2583.     equivalent to INT 21/AH=3Eh
  2584.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2585. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2586. --------D-2F1228BP4200-----------------------
  2587. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2588.     AX = 1228h
  2589.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2590.     BX = file handle
  2591.     CX:DX = offset in bytes
  2592.     SS = DOS DS (must be using a DOS internal stack)
  2593. Return: as for INT 21/AH=42h
  2594. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2595.       function call
  2596.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2597.       LSEEK, and restores frame pointer
  2598.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2599. SeeAlso: INT 21/AH=42h
  2600. --------D-2F1229-----------------------------
  2601. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2602.     AX = 1229h
  2603.     BX = file handle
  2604.     CX = number of bytes to read
  2605.     DS:DX -> buffer
  2606.     SS = DOS DS (must be using a DOS internal stack)
  2607. Return: as for INT 21/AH=3Fh
  2608. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2609.       a DOS function call
  2610.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2611. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2612. --------D-2F122A-----------------------------
  2613. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2614.     AX = 122Ah
  2615.     BX = entry point to set (0001h or 0002h)
  2616.     DS:SI -> FASTOPEN entry point
  2617.         (entry point not set if SI = FFFFh for DOS 4+)
  2618. Return: CF set if specified entry point already set
  2619. Notes:    entry point in BX is ignored under DOS 3.30
  2620.     both entry points set to same handler by DOS 4.01
  2621.     DOS 5.0 and 6.0 only set entry point 1
  2622.  
  2623. DOS 3.30+ FASTOPEN is called with:
  2624.     AL = 01h  ???
  2625.         CX = ??? seems to be offset
  2626.         DI = ??? seems to be offset
  2627.         SI = offset in DOS DS of filename
  2628.     AL = 02h  ???
  2629.     AL = 03h  open file???
  2630.         SI = offset in DOS DS of filename
  2631.     AL = 04h  ???
  2632.         AH = subfunction (00h,01h,02h)
  2633.         ES:DI -> ???
  2634.         CX = ??? (subfunctions 01h and 02h only)
  2635. Returns: CF set on error or not installed
  2636. Note: function 03h calls function 01h first
  2637.  
  2638. PC-DOS 4.01 FASTOPEN is additionally called with:
  2639.     AL = 04h ???
  2640.         AH = 03h
  2641.         ???
  2642.     AL = 05h ???
  2643.     AL = 0Bh ???
  2644.     AL = 0Ch ???
  2645.     AL = 0Dh ???
  2646.     AL = 0Eh ???
  2647.     AL = 0Fh ???
  2648.     AL = 10h ???
  2649.  
  2650. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  2651.     AL = 04h ???
  2652.         AH = 03h
  2653.         ???
  2654.     AL = 05h ???
  2655.         DL = drive (00h = A:)
  2656.         ???
  2657.     AL = 06h ???
  2658.         ???
  2659. --------D-2F122B-----------------------------
  2660. INT 2F U - DOS 3.3+ internal - IOCTL
  2661.     AX = 122Bh
  2662.     BP = 44xxh
  2663.     SS = DOS DS (must be using a DOS internal stack)
  2664.     additional registers as appropriate for INT 21/AX=44xxh
  2665. Return: as for INT 21/AH=44h
  2666. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  2667.       a DOS function call
  2668.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2669.       IOCTL, and restores frame pointer
  2670.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  2671. SeeAlso: INT 21/AH=44h
  2672. --------D-2F122C-----------------------------
  2673. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  2674.     AX = 122Ch
  2675. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  2676. SeeAlso: INT 21/AH=52h
  2677. --------D-2F122D-----------------------------
  2678. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  2679.     AX = 122Dh
  2680. Return: AX = current extended error code
  2681. SeeAlso: AX=1222h,INT 21/AH=59h
  2682. --------D-2F122E-----------------------------
  2683. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  2684.     AX = 122Eh
  2685.     DL = subfunction
  2686.         00h get standard DOS error table
  2687.         Return: ES:DI -> error table
  2688.                  (DOS 4: errors 00h-12h,50h-5Bh)
  2689.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  2690.         01h set standard DOS error table
  2691.         ES:DI -> error table
  2692.         02h get parameter error table (errors 00h-0Ah)
  2693.         Return: ES:DI -> error table
  2694.         03h set parameter error table
  2695.         ES:DI -> error table
  2696.         04h get critical/SHARE error table (errors 13h-2Bh)
  2697.         Return: ES:DI -> error table
  2698.         05h set critical/SHARE error table
  2699.         ES:DI -> error table
  2700.         06h get ??? error table
  2701.         Return: ES:DI -> error table or 0000h:0000h
  2702.         07h set ??? error table
  2703.         ES:DI -> error table
  2704.         08h get error message retriever (see below)
  2705.         Return: ES:DI -> FAR procedure to fetch error message 
  2706.         09h set ??? error table
  2707.         ES:DI -> error table
  2708. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  2709.       the offset of the error message table within COMMAND.COM, and the
  2710.       procedure returned by DL=08h should be called
  2711.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  2712.       with DL odd are ignored); they are always returned with segment 0001h
  2713.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  2714.       into a single error table
  2715. SeeAlso: AX=0500h,INT 21/AH=59h
  2716.  
  2717. Format of DOS 4.x error table:
  2718. Offset    Size    Description
  2719.  00h    BYTE    FFh
  2720.  01h  2 BYTEs    04h,00h (DOS version???)
  2721.  03h    BYTE    number of error headers following
  2722.  04h 2N WORDs    table of all error headers for table
  2723.         Offset    Size    Description
  2724.          00h    WORD    error message number
  2725.          02h    WORD    offset of error message from start of header
  2726.                 error messages are count byte followed by msg
  2727. Note:    DOS 5 error tables consist of one word per error number; each word
  2728.       contains either the offset of a counted string or 0000h
  2729.  
  2730. Call error retrieval function with:
  2731.     AX = error number
  2732.     DI = offset of error table
  2733. Return: ES:DI -> error message (counted string)
  2734. Notes:    this function needs to access COMMAND.COM if the messages were not
  2735.       loaded into memory permanently with /MSG; the caller should assume
  2736.       that the returned message will be overwritten by the next call of
  2737.       the function
  2738.     supported by DR-DOS 5.0
  2739.  
  2740. Values for parameter errors:
  2741.  01h    Too many parameters
  2742.  02h    Required Parameter missing
  2743.  03h    Invalid switch
  2744.  04h    Invalid keyword
  2745.  06h    Parameter value not in allowed range
  2746.  07h    Parameter value not allowed
  2747.  08h    Parameter value not allowed
  2748.  09h    Parameter format not correct
  2749.  0Ah    Invalid parameter
  2750.  0Bh    Invalid parameter combination
  2751. --------D-2F122F-----------------------------
  2752. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  2753.     AX = 122Fh
  2754.     DX = DOS version number (0000h = return true DOS version)
  2755. Note:    not available under DR-DOS 5.0 or 6.0
  2756. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  2757. --------D-2F13-------------------------------
  2758. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  2759.     AH = 13h
  2760.     DS:DX -> interrupt handler disk driver calls on read/write
  2761.     ES:BX = address to restore INT 13 to on system halt (exit from root
  2762.          shell) or warm boot (INT 19)
  2763. Return: DS:DX from previous invocation of this function
  2764.     ES:BX from previous invocation of this function
  2765. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  2766.       original INT 13 handler.  The first is for disk change detection
  2767.       on floppy drives, the second is for tracking formatting calls and
  2768.       correcting DMA boundary errors, the third is for working around
  2769.       problems in a particular version of IBM's ROM BIOS
  2770.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  2771.       also points there unless IO.SYS has installed a special filter for
  2772.       hard disk reads (on systems with model byte FCh and BIOS date
  2773.       "01/10/84" only), in which case it points at the special filter
  2774.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  2775.       functions are still invoked via an INT 13 instruction
  2776.     this is a dangerous security loophole for any virus-monitoring software
  2777.       which does not trap this call (many Bulgarian viruses are known to
  2778.       use it to get the original ROM entry point)
  2779. SeeAlso: INT 13/AH=01h,INT 19
  2780. --------U-2F1400-----------------------------
  2781. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  2782.     AX = 1400h
  2783. Return: AL = 00h not installed, OK to install
  2784.          01h not installed, not OK
  2785.          FFh installed
  2786. Notes:    called by DOS v3.3+ kernel
  2787.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2788.     supported by DR-DOS 5.0
  2789.     documented for MS-DOS 5+, but undocumented in prior versions
  2790. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  2791. --------D-2F1400-----------------------------
  2792. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  2793.     AX = 1400h
  2794. Return: AX = FFFFh if installed
  2795.         BX = maximum memory required to save screen and keyboard info
  2796.     CF clear if successful
  2797.     CF set on error
  2798.         AX = error code
  2799.         0002h invalid function
  2800.         0004h unknown error
  2801. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  2802.       to communicate with the user
  2803. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2804. --------U-2F1401-----------------------------
  2805. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  2806.     AX = 1401h
  2807.     DS:SI -> internal code page structure (see below)
  2808.     BX = new code page (see INT 21/AX=6602h)
  2809.     DX = country code???
  2810. Return: AL = status
  2811.          00h successful
  2812.          else DOS error code
  2813. Note:    called by DOS v3.3+ kernel
  2814. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  2815.  
  2816. Format of DOS 3.30 internal code page structure:
  2817. Offset    Size    Description
  2818.  00h  8 BYTEs    ???
  2819.  08h 64 BYTEs    name of country information file
  2820.  48h    WORD    system code page
  2821.  4Ah    WORD    number of supported subfunctions
  2822.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  2823.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  2824.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  2825.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  2826.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  2827. --------D-2F1401-----------------------------
  2828. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  2829.     AX = 1401h
  2830.     DL = function (00h open, 01h close)
  2831.     DH = wait flag
  2832.         00h block until screen opens
  2833.         01h return error if screen is not available
  2834.         02h urgent--always open screen immediately
  2835. Return: CF clear if successful
  2836.         BX = amount of memory needed to save screen and keyboard info,
  2837.         0000h if default save location can be used (only if DH was 02h)
  2838.     CF set on error
  2839. Note:    the application using the screen is frozen until the popup screen is
  2840.       closed
  2841. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2842. --------U-2F1402-----------------------------
  2843. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2844.     AX = 1402h
  2845.     BP = subfunction (same as AL for INT 21/AH=65h)
  2846.     BX = code page (see INT 21/AX=6602h)
  2847.     DX = country code (see INT 21/AH=38h)
  2848.     DS:SI -> internal code page structure (see AX=1401h)
  2849.     ES:DI -> user buffer
  2850.     CX = size of user buffer
  2851. Return: AL = status
  2852.         00h successful
  2853.         else DOS error code
  2854. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  2855.     code page structure apparently only needed for COUNTRY.SYS pathname
  2856. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  2857. --------D-2F1402-----------------------------
  2858. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  2859.     AX = 1402h
  2860.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  2861. Return: CF clear if successful
  2862.     CF set on error
  2863.         AX = error code
  2864.         0001h process does not own screen
  2865.         0004h unknown error
  2866.         0005h invalid pointer
  2867. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  2868. --------U-2F1403-----------------------------
  2869. INT 2F CU - NLSFUNC.COM - SET COUNTRY INFO
  2870.     AX = 1403h
  2871.     DS:SI -> internal code page structure (see AX=1401h)
  2872.     BX = code page (see INT 21/AX=6602h)
  2873.     DX = country code (see INT 21/AH=38h)
  2874. Return: AL = status 
  2875.          ???
  2876. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  2877. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  2878. --------D-2F1403-----------------------------
  2879. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  2880.     AX = 1403h
  2881.     ES:DI -> buffer containing saved screen
  2882.         (0000h:0000h for default buffer in POPUP)
  2883. Return: CF clear if successful
  2884.     CF set on error
  2885.         AX = error code (see AX=1402h"POPUP")
  2886. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  2887. --------U-2F1404-----------------------------
  2888. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2889.     AX = 1404h
  2890.     BX = code page (see INT 21/AX=6602h)
  2891.     DX = country code (see INT 21/AH=38h)
  2892.     DS:SI -> internal code page structure (see AX=1401h)
  2893.     ES:DI -> user buffer
  2894. Return: AL = status
  2895.          ???
  2896. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  2897.     code page structure apparently only needed for COUNTRY.SYS pathname
  2898. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  2899. --------U-2F14FE-----------------------------
  2900. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  2901.     AX = 14FEh
  2902.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  2903.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  2904.     ES:DI -> country information buffer
  2905.     CL = info ID
  2906.         01h get general internationalization info
  2907.         02h get pointer to uppercase table
  2908.         04h get pointer to filename uppercase table
  2909.         05h get pointer to filename terminator table
  2910.         06h get pointer to collating sequence table
  2911.         07h get pointer to Double-Byte Character Set table
  2912.     CF set (used to return error if not installed)
  2913. Return: CF clear if successful
  2914.         DS:SI -> requested information
  2915.     CF set on error
  2916. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2917.       or FFh on entry.
  2918.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  2919.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  2920. SeeAlso: AX=14FFh,INT 21/AH=65h
  2921.  
  2922. Format of DR-DOS COUNTRY.SYS file:
  2923. Offset    Size    Description
  2924.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  2925.  7Eh    WORD    signature EDC1h
  2926.  80h    var    country pointer records
  2927.      Offset    Size    Description
  2928.      00h    WORD    country code (0000h if end of array)
  2929.      02h    WORD    code page
  2930.      04h    WORD    ??? (0000h)
  2931.      06h  7 WORDs    offsets in file for data tables for subfunctions
  2932.              01h-07h
  2933.  var    var    country information
  2934. --------U-2F14FF-----------------------------
  2935. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  2936.     AX = 14FFh
  2937.     BX = code page
  2938. Return: AX = ???
  2939.     ZF set if AX=0000h
  2940. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2941.       or FFh on entry.
  2942.     passes codepage preparation request to each character device supporting
  2943.       the generic IOCTL call
  2944. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  2945. --------U-2F1500-----------------------------
  2946. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  2947.     AX = 1500h
  2948. Return: AX = FFFFh
  2949.     ES:DI -> ??? (graphics data?)
  2950. Note:    this installation check conflicts with the CD-ROM Extensions
  2951.       installation check; moved to AX=AC00h in later versions
  2952. SeeAlso: AX=AC00h
  2953. --------d-2F1500BX0000-----------------------
  2954. INT 2F - CD-ROM - INSTALLATION CHECK
  2955.     AX = 1500h
  2956.     BX = 0000h
  2957. Return: BX = number of CD-ROM drive letters used
  2958.     CX = starting drive letter (0=A:)
  2959. Notes:    this installation check DOES NOT follow the format used by other
  2960.       software
  2961.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  2962.       installation check
  2963. SeeAlso: INT 2F/AX=D000h"Lotus"
  2964. --------d-2F1501-----------------------------
  2965. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  2966.     AX = 1501h
  2967.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  2968. Return: buffer filled, for each drive letter
  2969.       BYTE    subunit number in driver
  2970.       DWORD address of device driver header
  2971. --------d-2F1502-----------------------------
  2972. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  2973.     AX = 1502h
  2974.     ES:BX -> 38-byte buffer for name of copyright file
  2975.     CX = drive number (0=A:)
  2976. Return: CF set if drive is not a CD-ROM drive
  2977.         AX = 15 (invalid drive)
  2978.     CF clear if successful
  2979. SeeAlso: AX=1503h
  2980. --------d-2F1503-----------------------------
  2981. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  2982.     AX = 1503h
  2983.     ES:BX -> 38-byte buffer for name of abstract file
  2984.     CX = drive number (0=A:)
  2985. Return: CF set if drive is not a CD-ROM drive
  2986.         AX = 15 (invalid drive)
  2987.     CF clear if successful
  2988. SeeAlso: AX=1502h
  2989. --------d-2F1504-----------------------------
  2990. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  2991.     AX = 1504h
  2992.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  2993.     CX = drive number (0=A:)
  2994. Return: CF set if drive is not a CD-ROM drive
  2995.         AX = 15 (invalid drive)
  2996.     CF clear if successful
  2997. --------d-2F1505-----------------------------
  2998. INT 2F - CD-ROM - READ VTOC
  2999.     AX = 1505h
  3000.     ES:BX -> 2048-byte buffer
  3001.     CX = drive number (0=A:)
  3002.     DX = sector index (0=first volume descriptor,1=second,...)
  3003. Return: CF set on error
  3004.         AX = error code (15=invalid drive,21=not ready)
  3005.     CF clear if successful
  3006.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3007. --------d-2F1506-----------------------------
  3008. INT 2F - CD-ROM - TURN DEBUGGING ON
  3009.     AX = 1506h
  3010.     BX = debugging function to enable
  3011. Note:    reserved for development
  3012. SeeAlso: AX=1507h
  3013. --------d-2F1507-----------------------------
  3014. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3015.     AX = 1507h
  3016.     BX = debugging function to disable
  3017. Note:    reserved for development
  3018. SeeAlso: AX=1506h
  3019. --------d-2F1508-----------------------------
  3020. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3021.     AX = 1508h
  3022.     ES:BX -> buffer
  3023.     CX = drive number (0=A:)
  3024.     SI:DI = starting sector number
  3025.     DX = number of sectors to read
  3026. Return: CF set on error
  3027.         AL = error code (15=invalid drive,21=not ready)
  3028.     CF clear if successful
  3029. SeeAlso: AX=1509h
  3030. --------d-2F1509-----------------------------
  3031. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3032.     AX = 1509h
  3033.     ES:BX -> buffer
  3034.     CX = drive number (0=A:)
  3035.     SI:DI = starting sector number
  3036.     DX = number of sectors to write
  3037. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3038. SeeAlso: AX=1508h
  3039. --------d-2F150A-----------------------------
  3040. INT 2F - CD-ROM - RESERVED
  3041.     AX = 150Ah
  3042. --------d-2F150B-----------------------------
  3043. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3044.     AX = 150Bh
  3045.     CX = drive number (0=A:)
  3046. Return: BX = ADADh if MSCDEX.EXE installed
  3047.         AX = 0000h if drive not supported
  3048.         nonzero if supported
  3049. SeeAlso: AX=150Dh
  3050. --------d-2F150C-----------------------------
  3051. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3052.     AX = 150Ch
  3053. Return: BH = major version
  3054.     BL = minor version
  3055. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3056. --------d-2F150D-----------------------------
  3057. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3058.     AX = 150Dh
  3059.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3060. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3061.     to the drive in the same position for function 1501h
  3062. SeeAlso: AX=150Bh
  3063. --------d-2F150E-----------------------------
  3064. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3065.     AX = 150Eh
  3066.     BX = subfunction
  3067.         00h get preference
  3068.         DX = 0000h
  3069.         Return: DX = preference settings
  3070.         01h set preference
  3071.         DH = volume descriptor preference
  3072.             01h = primary volume descriptor
  3073.             02h = supplementary volume descriptor
  3074.         DL = supplementary volume descriptor preference
  3075.             01h = shift-Kanji
  3076.     CX = drive number (0=A:)
  3077. Return: CF set on error
  3078.         AX = error code (15=invalid drive,1=invalid function)
  3079.     CF clear if successful
  3080. --------d-2F150F-----------------------------
  3081. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3082.     AX = 150Fh
  3083.     CL = drive number (0=A:)
  3084.     CH bit 0 = copy flag
  3085.         clear if direct copy
  3086.         set if copy to structure which removed ISO/High Sierra diffs
  3087.     ES:BX -> ASCIZ path name
  3088.     SI:DI -> buffer for directory entry (see below)
  3089.          minimum 255 bytes for direct copy
  3090. Return: CF set on error
  3091.         AX = error code
  3092.     CF clear if succesful
  3093.         AX = disk format (0=High Sierra,1=ISO 9660)
  3094.  
  3095. Format of directory entry (direct copy):
  3096. Offset    Size    Description
  3097.  00h    BYTE  length of directory entry
  3098.  01h    BYTE  length of XAR in Logical Block Numbers
  3099.  02h    DWORD LBN of data, Intel (little-endian) format
  3100.  06h    DWORD LBN of data, Motorola (big-endian) format
  3101.  0Ah    DWORD length of file, Intel format
  3102.  0Eh    DWORD length of file, Motorola format
  3103. ---High Sierra---
  3104.  12h  6 BYTEs date and time
  3105.  18h    BYTE  bit flags
  3106.  19h    BYTE  reserved
  3107. ---ISO 9660---
  3108.  12h  7 BYTEs date and time
  3109.  19h    BYTE  bit flags
  3110. ---both formats---
  3111.  1Ah    BYTE  interleave size
  3112.  1Bh    BYTE  interleave skip factor
  3113.  1Ch    WORD  volume set sequence number, Intel format
  3114.  1Eh    WORD  volume set sequence number, Motorola format
  3115.  20h    BYTE  length of file name
  3116.  21h  N BYTEs file name
  3117.     BYTE (optional) padding if filename is odd length
  3118.       N BYTEs system data
  3119.  
  3120. Format of directory entry (canonicalized):
  3121. Offset    Size    Description
  3122.  00h    BYTE    length of XAR in Logical Block Numbers
  3123.  01h    DWORD    Logical Block Number of file start
  3124.  05h    WORD    size of disk in logical blocks
  3125.  07h    DWORD    file length in bytes
  3126.  0Bh  7 BYTEs    date and time
  3127.  12h    BYTE    bit flags
  3128.  13h    BYTE    interleave size
  3129.  14h    BYTE    interleave skip factor
  3130.  15h    WORD    volume set sequence number
  3131.  17h    BYTE    length of file name
  3132.  18h 38 BYTEs    ASCIZ filename
  3133.  3Eh    WORD    file version number
  3134.  40h    BYTE    number of bytes of system use data
  3135.  41h 220 BYTEs    system use data
  3136. --------d-2F1510-----------------------------
  3137. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3138.     AX = 1510h
  3139.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3140.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  3141. --------W-2F1600-----------------------------
  3142. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3143.     AX = 1600h
  3144. Return: AL = status
  3145.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3146.         01h Windows/386 2.x running
  3147.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3148.              mode nor Windows/386 2.x running) (obsolete--see note)
  3149.         FFh Windows/386 2.x running
  3150.     AL = anything else
  3151.         AL = Windows major version number >= 3
  3152.         AH = Windows minor version number
  3153. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3154.       drivers, TSRs, and applications) to cooperate with multitasking
  3155.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3156.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3157.       Windows standard mode
  3158.     this function served as the installation check and AX=1610h served to
  3159.       get the driver entry point for XMS version 1, which is now obsolete.
  3160.       Use AX=4300h and AX=4310h instead
  3161. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3162. Index:    installation check;XMS version 1
  3163. --------W-2F1602-----------------------------
  3164. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3165.     AX = 1602h
  3166. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3167. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3168.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3169.         AX = 0000h
  3170.         ES:DI -> return address
  3171.         JUMP to address returned from INT 2F/AX=1602h
  3172.     After JUMP, at return address:
  3173.         BX = current VM ID.
  3174. SeeAlso: AX=C020h
  3175. --------W-2F1603-----------------------------
  3176. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3177.     AX = 1603h
  3178. Return: AX = 5248h ('RH') if supported
  3179.         DS:SI -> Windows/386 instance data (see below)
  3180. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3181.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3182.       supported, as is the case in DOS versions prior to 5.0
  3183.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3184.       this function, DOSMGR's behavior, and instancing in general
  3185. SeeAlso: AX=1607h/BX=0015h
  3186.  
  3187. Format of Windows/386 instance data:
  3188. Offset    Size    Description
  3189.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3190.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3191.          0000h if not applicable
  3192.  04h    WORD    number of instance data entries (max 32)
  3193.  06h    Array of instance data entries
  3194.      Offset    Size    Description
  3195.      00h    WORD    segment (0002h = DOS kernel)
  3196.      02h    WORD    offset
  3197.      04h    WORD    size
  3198. --------W-2F1605-----------------------------
  3199. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  3200.     AX = 1605h
  3201.     ES:BX = 0000h:0000h
  3202.     DS:SI = 0000h:0000h
  3203.     CX = 0000h
  3204.     DX = flags
  3205.         bit 0 = 0 if Windows enhanced-mode initialization
  3206.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  3207.         bits 1-15 reserved (undefined)
  3208.     DI = version number (major in upper byte, minor in lower)
  3209. Return: CX = 0000h if okay for Windows to load
  3210.     CX <> 0 if Windows should not load
  3211.     ES:BX -> startup info structure (see below)
  3212.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  3213. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  3214.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  3215.       driver or TSR can watch for this broadcast and return the appropriate
  3216.       values.  If the driver or TSR returns CX <> 0, it is also its
  3217.       responsibility to display an error message.
  3218.     each handler must first chain to the prior INT 2F handler with
  3219.       registers unchanged before processing the call
  3220.     if the handler requires local data on a per-VM basis, it must store the
  3221.       returned ES:BX in the "next" field of a startup info structure and
  3222.       return a pointer to that structure in ES:BX
  3223.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  3224.       already nonzero, the TSR must fail the initialization by setting CX
  3225.       nonzero
  3226. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  3227.  
  3228. Format of Startup Information Structure:
  3229. Offset    Size    Description
  3230.  00h  2 BYTEs    major, minor version of info structure
  3231.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3232.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  3233.  0Ah    DWORD    virtual device reference data (see below)
  3234.          (only used if above nonzero)
  3235.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  3236.  
  3237. Format of one Instance Item in array:
  3238. Offset    Size    Description
  3239.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3240.  04h    WORD    size of instance data
  3241.  
  3242. Format of Virtual Device Reference Data:
  3243. Offset    Size    Description
  3244.  00h    DWORD    physical address of ??? or 00000000h
  3245.  04h    DWORD    physical address of ??? table
  3246.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  3247.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  3248.          00000000h = end of table
  3249. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  3250.       chain, the second pointer to a field of 40h bytes followed by a
  3251.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  3252.       the start segment of the UMB area
  3253.  
  3254. Virtual mode enable/disable procedure called with:
  3255.     AX = 0000h disable V86 mode
  3256.     AX = 0001h enable V86 mode
  3257.     interrupts disabled
  3258. Return: CF set on error
  3259.     CF clear if successful
  3260.     interrupts disabled
  3261. --------W-2F1606-----------------------------
  3262. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  3263.     AX = 1606h
  3264.     DX = flags
  3265.         bit 0 = 0 if Windows enhanced-mode exit
  3266.         bit 0 = 1 if Microsoft 286 DOS extender exit
  3267.         bits 1-15 reserved (undefined)
  3268. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  3269.       broadcast will be issued immediately.
  3270.     this call will be issued in real mode
  3271. SeeAlso: AX=1605h,AX=1609h
  3272. --------W-2F1607-----------------------------
  3273. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  3274.     AX = 1607h
  3275.     BX = virtual device ID (see INT 2F/AX=1684h)
  3276.     CX = (usually) callout subfunction
  3277. Return: (usually) AX,BX,CX,DX,ES contain results
  3278. Notes:    more of a convention than an API, this call specifies a standard
  3279.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  3280.       to DOS device drivers and TSRs
  3281.     see below for details on several virtual devices
  3282. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3283. SeeAlso: AX=1684h,AX=C020h
  3284. --------W-2F1607BX0006-----------------------
  3285. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  3286.     AX = 1607h
  3287.     BX = 0006h (VxD identifier of "V86MMGR")
  3288.     CX = 0000h
  3289. Return: AX = status
  3290.         0000h if local A20 state changed
  3291.         1607h if A20 unchanged
  3292.         other if global A20 state changed
  3293. --------W-2F1607BX000C-----------------------
  3294. INT 2F - MS Windows - "VMD" VIRTUAL DEVICE API
  3295.     AX = 1607h
  3296.     BX = 000Ch (VxD identifier of "VMD")
  3297. Return: CX = nonzero if mouse driver already virtualized
  3298. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3299.       nonzero; if yes, it will not automatically virtualize the mouse
  3300.       driver.  This would be used if MOUSE.COM already virtualizes
  3301.       itself using the Windows API.
  3302. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3303. --------W-2F1607BX0014-----------------------
  3304. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3305.     AX = 1607h
  3306.     BX = 0014H (VxD identifier of "VNETBIOS")
  3307. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3308.         command code (see below)
  3309. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3310.       the NetBIOS has an extensions Windows should know about
  3311. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  3312.  
  3313. Values for action code:
  3314.  00h    "VN_Unknown" unknown command
  3315.  04h    "VN_No_Map"  no memory mapping necessary
  3316.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3317.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3318.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3319.  14h    "VN_Chain_Send"     the chain-send command
  3320.  18h    "VN_Cancel"    special case for cancel command
  3321.  1Ch    "VN_Buffer_In"    buffer is incoming
  3322.  20h    "VN_Buffer_Out" buffer is outgoing
  3323.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3324. --------D-2F1607BX0015-----------------------
  3325. INT 2F - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3326.     AX = 1607h
  3327.     BX = 0015h (VxD identifier of "DOSMGR")
  3328.     CX = function
  3329.         0000h query instance processing
  3330.             DX = 0000h
  3331.         Return: CX = state
  3332.                 0000h not instanced
  3333.                 other instanced (DOS 5+ kernel returns 0001h)
  3334.                 DX = segment of DOS drivers or 0000h for
  3335.                     default of 0070h
  3336.                 ES:BX -> patch table (see below)
  3337.         0001h set patches in DOS
  3338.         DX = bit mask of patch requests
  3339.             bit 0 enable critical sections
  3340.             bit 1 NOP setting/checking user ID
  3341.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  3342.             bit 3 trap stack fault in "SYSINIT" to WIN386
  3343.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  3344.         Return: AX = B97Ch
  3345.             BX = bit mask of patches applied
  3346.             DX = A2ABh
  3347.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3348.         DX = bit mask of patch requests (see function 0001h)
  3349.         0003h get size of DOS data structures
  3350.         DX = bit mask of request (only one bit can be set)
  3351.             bit 0: Current Directory Structure size
  3352.         Return: if supported request:
  3353.                 AX = B97Ch
  3354.                 CX = size in bytes of requested structure
  3355.                 DX = A2ABh
  3356.             else:
  3357.                 all registers preserved
  3358.         0004h determine instanced data structures
  3359.         Return: AX = B97Ch if supported
  3360.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3361.             BX = bit mask of instanced items
  3362.                 bit 0: CDS
  3363.                 bit 1: SFT
  3364.                 bit 2: device list
  3365.                 bit 3: DOS swappable data area
  3366.         0005h get device driver size
  3367.         ES = segment of device driver
  3368.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3369.             DX:AX = A2ABh:B97Ch if successful
  3370.                 BX:CX = size of device driver in bytes
  3371. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3372.       been instanced via this API and will not perform its own default
  3373.       instancing of the normal DOS/BIOS data if so; if this API is not
  3374.       supported, DOSMGR will also try to access instancing data through
  3375.       INT 2F/AX=1603h
  3376.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3377.       tables of instancing information for earlier versions of DOS
  3378.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3379.       DOSMGR's behavior and instancing in general
  3380. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3381.  
  3382. Format of patch table:
  3383. Offset    Size    Description
  3384.  00h  2 BYTEs    DOS version (major, minor)
  3385.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3386.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3387.  06h    WORD    offset in DOS data segment of InDOS flag
  3388.  08h    WORD    offset in DOS data segment of User ID word
  3389.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3390.          critical section calls (see INT 2A/AH=80h)
  3391.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3392.          containing segment of last MCB in conventional memory
  3393. --------E-2F1607BX22C0-----------------------
  3394. INT 2F - Rational Systems DOS/4GW - ???
  3395.     AX = 1607h
  3396.     BX = 22C0h
  3397.     ???
  3398. Return: ???
  3399. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3400. --------W-2F1608-----------------------------
  3401. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3402.     AX = 1608h
  3403. Notes:    called after all installable devices have been initialized
  3404.     real-mode software may be called between the Windows enhanced-mode init
  3405.       call (AX=1605h) and this call; the software must detect this
  3406.       situation
  3407. SeeAlso: AX=1605h,AX=1609h
  3408. --------W-2F1609-----------------------------
  3409. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3410.     AX = 1609h
  3411. Note:    called at the beginning of a normal exit sequence; not made in the
  3412.       event of a fatal system crash
  3413. SeeAlso: AX=1606h,AX=1608h
  3414. --------W-2F160A-----------------------------
  3415. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3416.     AX = 160Ah
  3417. Return: AX = 0000h if call supported
  3418.         BX = version (BH=major, BL=minor)
  3419.         CX = mode (0002h = standard, 0003h = enhanced)
  3420. SeeAlso: AX=1600h,AX=4680h
  3421. --------W-2F160B-----------------------------
  3422. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3423.     AX = 160Bh
  3424.     ES:DI -> communication structure (see below) or 0000h:0000h
  3425. Return: ES:DI -> communication structure
  3426. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3427.       Windows.
  3428. Note:    the TSR should allocate a communication structure, place the given
  3429.       ES:DI pointer in the first field, and return a pointer to the new
  3430.       structure
  3431. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3432.  
  3433. Format of TSR-to-Windows communication structure:
  3434. Offset    Size    Description
  3435.  00h    DWORD    pointer to next structure
  3436.  04h    WORD    PSP segment
  3437.  06h    WORD    API version ID (0100h)
  3438.  08h    WORD    EXEC flags
  3439.         bit 0: "WINEXEC"
  3440.         bit 1: "LOADLIBRARY"
  3441.         bit 2: "OPENDRIVER"
  3442.  0Ah    WORD    "exec_cmd_show"
  3443.  0Ch    DWORD    "exec_cmd"
  3444.  10h  4 BYTEs    reserved (0)
  3445.  14h    DWORD    pointer to TSR ID block (see below)
  3446.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3447.  
  3448. Format of Norton Utilities 6.0 TSR ID block:
  3449. Offset    Size    Description
  3450.  00h    WORD    length of name string
  3451.  02h  N BYTEs    name of TSR's executable
  3452. --------W-2F160C-----------------------------
  3453. INT 2F - MS Windows 3.1 - DETECT ROMs
  3454.     AX = 160Ch
  3455.     ???
  3456. Return: ???
  3457. Note:    used by ROM Windows
  3458. SeeAlso: AX=160Bh
  3459. --------m-2F1610-----------------------------
  3460. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3461.     AX = 1610h
  3462.     details unavailable
  3463. Note:    this function and AX=1600 were only used in XMS version 1 and are now
  3464.       obsolete.  Use AX=4300h and AX=4310h instead
  3465. SeeAlso: AX=1600h,AX=4310h
  3466. --------W-2F1680-----------------------------
  3467. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3468.     AX = 1680h
  3469. Return: AL = 00h if the call is supported
  3470.     AL = 80h (unchanged) if the call is not supported
  3471. Notes:    programs can use this function in idle loops to enhance performance
  3472.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3473.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  3474.       applications
  3475.     does not block the program; it just gives up the remainder of the time
  3476.       slice
  3477.     should not be used by Windows-specific programs
  3478. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3479. --------W-2F1681-----------------------------
  3480. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3481.     AX = 1681h
  3482. Notes:    used to prevent a task switch from occurring
  3483.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3484.     nested calls are allowed, and must be followed by an appropriate number
  3485.       of "end critical section" calls
  3486.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3487.       and increment by hand.
  3488. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3489. --------W-2F1682-----------------------------
  3490. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3491.     AX = 1682h
  3492. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3493.       and decrement by hand, taking care not to decrement InDOS flag
  3494.       through zero
  3495. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3496. --------W-2F1683-----------------------------
  3497. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3498.     AX = 1683h
  3499. Return: BX = current virtual machine (VM) ID
  3500. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3501.     VM IDs are reused when VMs are destroyed
  3502.     an ID of 0 will never be returned
  3503. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3504. --------W-2F1684-----------------------------
  3505. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3506.     AX = 1684h
  3507.     BX = virtual device (VxD) ID (see below)
  3508.     ES:DI = 0000h:0000h
  3509. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3510. Note:    some Windows enhanced-mode virtual devices provide services that
  3511.       applications can access.  For example, the Virtual Display Device
  3512.       (VDD) provides an API used in turn by WINOLDAP.
  3513. SeeAlso: AX=1683h
  3514.  
  3515. Values for VxD ID:
  3516.  01h    VMM        Virtual Machine Manager
  3517.  02h    Debug
  3518.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  3519.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  3520.  05h    VTD        Virtual Timer Device
  3521.  06h    V86MMGR        Virtual 8086 Mode Device
  3522.  07h    PAGESWAP    Paging Device
  3523.  08h    Parity
  3524.  09h    Reboot
  3525.  0Ah    VDD        Virtual Display Device (GRABBER)
  3526.  0Bh    VSD        Virtual Sound Device
  3527.  0Ch    VMD        Virtual Mouse Device
  3528.  0Dh    VKD        Virtual Keyboard Device
  3529.  0Eh    VCD        Virtual COMM Device
  3530.  0Fh    VPD        Virtual Printer Device
  3531.  10h    VHD        Virtual Hard Disk Device (BlockDev in Windows3.1)
  3532.  11h    VMCPD
  3533.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  3534.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  3535.  14h    VNETBIOS    Virtual NetBIOS Device
  3536.  15h    DOSMGR
  3537.  16h    WINLOAD
  3538.  17h    SHELL
  3539.  18h    VMPoll
  3540.  19h    VPROD
  3541.  1Ah    DOSNET        assures network integrity across VMs
  3542.  1Bh    VFD        Virtual Floppy Device
  3543.  1Ch    VDD2        Secondary display adapter
  3544.  1Dh    WINDEBUG
  3545.  1Eh    TSRLoad        TSR instance utility
  3546.  1Fh    BiosHook    BIOS interrupt hooker VxD
  3547.  20h    Int13
  3548.  21h    PageFile    Paging File device
  3549.  22h    SCSI
  3550.  23h    MCA_POS
  3551.  24h    SCSIFD        SCSI FastDisk device
  3552.  25h    VPEND        Pen device
  3553.  26h    APM        Advanced Power Management
  3554. 444h    VADMAD        Autoinitialize DMA (Windows 3.0)
  3555. Note:    The high bit of the VxD ID is reserved for future use. The
  3556.     next 10 bits are the OEM # which is assigned by Microsoft. The
  3557.     low 5 bits are the device number. 
  3558.  
  3559. Call VTD.386 entry point with:
  3560.     AX = 0000h get VTD version number
  3561.         Return: AH = major version
  3562.             AL = minor version
  3563.     AX = 0100h get current clock tick time
  3564.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3565.                 started
  3566.     AX = 0101h get current system time in milliseconds
  3567.         Return: EAX = time in milliseconds that Windows has been running
  3568.     AX = 0102h get current virtual machine time
  3569.         Return: EAX = cumulative amount of time the virtual machine has
  3570.             been active, in milliseconds
  3571. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  3572.       be called
  3573.  
  3574. Call VADMAD entry point with:
  3575.     DX = operation
  3576.         0000h set VADMAD mode
  3577.             AX = desired mode
  3578.         0001h set VADMAD channel
  3579.             AX = desired channel
  3580. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3581.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3582. --------W-2F1685-----------------------------
  3583. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  3584.     AX = 1685h
  3585.     BX = VM ID of virtual machine to switch to
  3586.     CX = flags
  3587.         bit 0 wait until interrupts enabled
  3588.         bit 1 wait until critical section unowned
  3589.         bits 2-15 reserved (zero)
  3590.     DX:SI = priority boost (see VMM.INC)
  3591.     ES:DI -> FAR procedure to callback
  3592. Return: CF set on error
  3593.         AX = error code
  3594.         01h invalid VM ID
  3595.         02h invalid priority boost
  3596.         03h invalid flags
  3597.     CF clear if successful
  3598.         event will be or has been called
  3599. Notes:    some DOS devices, such as networks, need to call functions in a
  3600.       specific VM. This call forces the appropriate VM to be installed.
  3601.     the callback procedure must preserve all registers and return with IRET
  3602. SeeAlso: AX=1683h,INT 15/AX=1117h
  3603. --------E-2F1686-----------------------------
  3604. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  3605.     AX = 1686h
  3606. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  3607.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  3608. SeeAlso: AX=1687h
  3609. --------E-2F1687-----------------------------
  3610. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  3611.     AX = 1687h
  3612. Return: AX = 0000h if installed
  3613.         BX = flags
  3614.         bit 0: 32-bit programs supported
  3615.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  3616.         DH = DPMI major version
  3617.         DL = two-digit DPMI minor version
  3618.         SI = number of paragraphs of DOS extender private data
  3619.         ES:DI -> DPMI mode-switch entry point
  3620.     AX nonzero if not installed
  3621. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  3622. SeeAlso: INT 31/AX=0400h,INT 38/AH=10h
  3623.  
  3624. Call mode switch entry point with:
  3625.     AX = flags
  3626.         bit 0: set if 32-bit program
  3627.     ES = real mode segment of buffer for DPMI private data (ignored if
  3628.         SI was zero)
  3629. Return: CF set on error
  3630.         program still in real mode
  3631.         AX = error code (DPMI 1.0+)
  3632.            8011h unable to allocate all necessary descriptors
  3633.            8021h 32-bit program specified, but 16-bit DPMI host
  3634.     CF clear if successful
  3635.         CS = 16-bit selector corresponding to real-mode CS
  3636.         SS = selector corresponding to real-mode SS (64K limit)
  3637.         DS = selector corresponding to real-mode DS (64K limit)
  3638.         ES = selector to program's PSP (100h byte limit)
  3639.         FS = GS = 0
  3640.         high word of ESP = 0 if 32-bit program
  3641.         program now in protected mode
  3642. Note:    this entry point is only called for the initial switch to protected
  3643.       mode
  3644. --------W-2F1688-----------------------------
  3645. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  3646.     AX = 1688h
  3647. Return: AX = status??? (0000h for 386MAX)
  3648.     BX = selector for ???
  3649. --------W-2F1689-----------------------------
  3650. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  3651.     AX = 1689h
  3652.     ???
  3653. Return: ???
  3654. --------E-2F168A-----------------------------
  3655. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  3656.     AX = 168Ah
  3657.     DS:(E)SI = selector:offset of ASCIZ vendor name
  3658. Return: AL = status
  3659.         00h successful
  3660.            ES:(E)DI -> extended API entry point
  3661.         8Ah unsuccessful
  3662. Notes:    the vendor name is used to determine which entry point to return; it is
  3663.       case-sensitive
  3664.     available in protected mode only
  3665.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  3666.     this call is present but not documented for DPMI 0.9
  3667. SeeAlso: INT 31/AX=0A00h
  3668.  
  3669. Vendor names:
  3670.  "MS-DOS"    ??? and 386MAX v6.00+
  3671.  "386MAX"    386MAX v6.00+
  3672. --------W-2F168B-----------------------------
  3673. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  3674.     AX = 168Bh
  3675.     BX = virtual machine ID (see AX=1683h)
  3676. Return: AL = 00h if focus set to specified VM
  3677. Note:    documented on the Microsoft Developer's Network CD-ROM
  3678. SeeAlso: AX=1683h
  3679. --------W-2F168C-----------------------------
  3680. INT 2F - MS Windows 3.1 - RESTART COMMAND
  3681.     AX = 168Ch
  3682.     ???
  3683. Return: ???
  3684. Note:    WIN.COM executes specified application
  3685. --------W-2F1700-----------------------------
  3686. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  3687.     AX = 1700h
  3688. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  3689.     AX <> 1700h
  3690.         AL = WINOLDAP major version
  3691.         AH = WINOLDAP minor version
  3692. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  3693.       "old" (character-mode) application access to Dynamic Data Exchange,
  3694.       menus, and the Windows clipboard.
  3695. Note:    this installation check DOES NOT follow the format used by other
  3696.       software of returning AL=FFh
  3697. Index:    installation check;WINOLDAP
  3698. --------W-2F1701-----------------------------
  3699. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  3700.     AX = 1701h
  3701. Return:    AX <> 0     success
  3702.     AX = 0     clipboard is already open
  3703. --------W-2F1702-----------------------------
  3704. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  3705.     AX = 1702h
  3706. Return: AX <> 0     clipboard has been emptied
  3707.     AX = 0     failure
  3708. --------W-2F1703-----------------------------
  3709. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  3710.     AX = 1703h
  3711.     DX = clipboard format supported by WinOldAp:
  3712.         01h text
  3713.         02h bitmap
  3714.         03h metafile picture
  3715.         04h SYLK
  3716.         05h DIF
  3717.         06h TIFF
  3718.         07h OEM text
  3719.         81h DSP text
  3720.         82h DSP bitmap
  3721.     ES:BX -> data (see below)
  3722.     SI:CX = size of data
  3723. Return: AX <> 0 data copied into the Clipboard
  3724.     AX = 0 failure
  3725.  
  3726. Format of bitmap:
  3727. Offset    Size    Description
  3728.  00h    WORD    type (0000h)
  3729.  02h    WORD    width of bitmap in pixels
  3730.  04h    WORD    height of bitmap in pixels
  3731.  06h    WORD    bytes per line
  3732.  08h    BYTE    number of color planes
  3733.  09h    BYTE    number of adjacent color bits in pixel
  3734.  0Ah    DWORD    pointer to start of data
  3735.  0Eh    WORD    width in 0.1mm units
  3736.  10h    WORD    height in 0.1mm units
  3737.  12h  N BYTEs    bitmap data
  3738.  
  3739. Format of metafile picture:
  3740. Offset    Size    Description
  3741.  00h    WORD    mapping mode
  3742.  02h    WORD    X extent
  3743.  04h    WORD    Y extent
  3744.  06h    WORD    picture data
  3745. --------W-2F1704-----------------------------
  3746. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  3747.     AX = 1704h
  3748.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  3749. Return:     DX:AX = size of data in bytes, including any headers
  3750. Failure: DX:AX = 0  no data in this format in the Clipboard
  3751. --------W-2F1705-----------------------------
  3752. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  3753.     AX = 1705h
  3754.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  3755.     ES:BX -> buffer
  3756. Return: AX <> 0     success
  3757.     AX = 0     error, or no data in this format in Clipboard
  3758. --------W-2F1708-----------------------------
  3759. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  3760.     AX = 1708h
  3761. Return: AX <> 0 success
  3762.     AX = 0 failure
  3763. --------W-2F1709-----------------------------
  3764. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  3765.     AX = 1709h
  3766.     SI:CX = desired size in bytes
  3767. Return: DX:AX = number of bytes in largest block of free memory
  3768. Note:    WinOldAp is responsible for including the size of any headers
  3769. --------W-2F170A-----------------------------
  3770. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  3771.     AX = 170Ah
  3772.     DX = GDI information index
  3773.         00h device driver version
  3774.         02h device classification
  3775.         04h width in mm
  3776.         06h height in mm
  3777.         08h width in pixels
  3778.         0Ah height in pixels
  3779.         0Ch bits per pixel
  3780.         0Eh number of bit planes
  3781.         10h number of brushes supported by device
  3782.         12h number of pens supported by device
  3783.         14h number of markers supported by device
  3784.         16h number of fonts supported by device
  3785.         18h number of colors
  3786.         1Ah size required for device descriptor
  3787.         1Ch curve capabilities
  3788.         1Eh line capabilities
  3789.         20h polygon capabilities
  3790.         22h text capabilities
  3791.         24h clipping capabilities
  3792.         26h bitblt capabilities
  3793.         28h X aspect
  3794.         2Ah Y aspect
  3795.         2Ch length of hypotenuse of aspect
  3796.         58h logical pixels per inch of width
  3797.         5Ah logical pixels per inch of height
  3798. Return:     AX = integer value of the desired item
  3799.         device classification
  3800.             00h vector plotter
  3801.             01h raster display
  3802.             02h raster printer
  3803.             03h raster camera
  3804.             04h character-stream, PLP
  3805.             05h Metafile, VDM
  3806.             06h display-file
  3807.         curve capabilities
  3808.             bit 0  circles
  3809.             bit 1  pie wedges
  3810.             bit 2  chord arcs
  3811.             bit 3  ellipses
  3812.             bit 4  wide lines
  3813.             bit 5  styled lines
  3814.             bit 6  wide styled lines
  3815.             bit 7  interiors
  3816.         line capabilities
  3817.             bit 1  polylines
  3818.             bit 2  markers
  3819.             bit 3  polymarkers
  3820.             bit 4  wide lines
  3821.             bit 5  styled lines
  3822.             bit 6  wide styled lines
  3823.             bit 7  interiors
  3824.         polygon capabilities
  3825.             bit 0  polygons
  3826.             bit 1  rectangles
  3827.             bit 2  trapezoids
  3828.             bit 3  scanlines
  3829.             bit 4  wide borders
  3830.             bit 5  styled borders
  3831.             bit 6  wide styled borders
  3832.             bit 7  interiors
  3833.         text capabilities
  3834.             bit 0  output precision character
  3835.             bit 1  output precision stroke
  3836.             bit 2  clippping precision stroke
  3837.             bit 3  90-degree character rotation
  3838.             bit 4  arbitrary character rotation
  3839.             bit 5  independent X and Y scaling
  3840.             bit 6  double-size
  3841.             bit 7  integer scaling
  3842.             bit 8  continuous scaling
  3843.             bit 9  bold
  3844.             bit 10 italic
  3845.             bit 11 underline
  3846.             bit 12 strikeout
  3847.             bit 13 raster fonts
  3848.             bit 14 vector fonts
  3849.             bit 15 reserved
  3850.         clipping capabilities
  3851.             00h none
  3852.             01h clipping to rectangles
  3853.         raster capabilities
  3854.             bit 0  simple bitBLT
  3855.             bit 1  device requires banding support
  3856.             bit 2  device requires scaling support
  3857.             bit 3  supports >64K bitmap
  3858. Note:  This function returns the device-capability bits for the given display
  3859. --------l-2F1900-----------------------------
  3860. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  3861.     AX = 1900h
  3862. Return: AL = 00h  not installed
  3863.          FFh  installed
  3864. --------l-2F1901BL00-------------------------
  3865. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  3866.     AX = 1901h
  3867.     BL = 00h if SHELLC transient
  3868.          01h if SHELLC resident
  3869.     DS:DX -> far call entry point for resident SHELLC.EXE
  3870. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  3871. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  3872. --------l-2F1902-----------------------------
  3873. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  3874.     AX = 1902h
  3875.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  3876.          final filename element uppercased
  3877.     DS:DX -> buffer for results
  3878. Return: AL = 00h  failed, either
  3879.           (a) final filename element quoted at ES:DI does not match
  3880.               identity of shell batch file quoted as parameter of most
  3881.               recent call of SHELLB command, or
  3882.           (b) no more Program Start Commands available.
  3883.     AL= FFh     success, then:
  3884.         memory at DS:[DX+1] onwards filled as:
  3885.         DX+1:    BYTE    count of bytes of PSC
  3886.         DX+2: N BYTEs    Program Start Command text
  3887.             BYTE    0Dh terminator 
  3888. Explanation: COMMAND.COM executes the result of this call in preference to 
  3889.     reading a command from a batch file. Thus the batch file does not
  3890.     advance in execution for so long as SHELLB provides PSCs from its
  3891.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  3892.     menu interface. The final PSC of a sequence is finished with a 
  3893.     GOTO COMMON, which causes a loop back in the batch file which called
  3894.     SHELLC so as to execute SHELLC again. The check on batch file name
  3895.     permits PSCs to CALL nested batch files while PSCs are still stacked
  3896.     up for subsequent execution.
  3897. --------l-2F1903-----------------------------
  3898. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  3899.     AX = 1903h
  3900.     ES:DI -> ASCIZ batch file name as for AX=1902h
  3901. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  3902.     AL = 00h if it does not
  3903. --------l-2F1904-----------------------------
  3904. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  3905.     AX = 1904h
  3906. Return: ES:DI -> name of current shell batch file:
  3907.         WORD    number of bytes of name following
  3908.         BYTEs    (8 max) uppercase name of shell batch file
  3909. --------V-2F1A00-----------------------------
  3910. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  3911.     AX = 1A00h
  3912. Return: AL = FFh if installed
  3913. Notes:    AVATAR.SYS also responds to this call
  3914.     documented for DOS 5+, but undocumented for DOS 4.x
  3915. --------V-2F1A00BX4156-----------------------
  3916. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  3917.     AX = 1A00h
  3918.     BX = 4156h ('AV')
  3919.     CX = 4154h ('AT')
  3920.     DX = 4152h ('AR')
  3921. Return: AL = FFh if installed
  3922.         CF clear
  3923.         BX = AVATAR protocol level supported
  3924.         CX = driver type
  3925.         0000h AVATAR.SYS
  3926.         4456h DVAVATAR.COM inside DESQview window
  3927.         DX = 0016h
  3928. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  3929.       interprets AVATAR command codes in the same way that ANSI interprets
  3930.       ANSI command codes
  3931. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  3932.       the magic values
  3933. --------V-2F1A01-----------------------------
  3934. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  3935.     AX = 1A01h
  3936.     CL = function
  3937.         7Fh for GET
  3938.         5Fh for SET
  3939.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  3940. Return: CF set on error
  3941.         AX = error code (many non-standard)
  3942.     CF clear if successful
  3943.         AX destroyed
  3944. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  3945. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  3946. --------V-2F1A02-----------------------------
  3947. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  3948.     AX = 1A02h
  3949.     DS:DX -> parameter block (see below)
  3950. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  3951. SeeAlso: AX=1A01h
  3952.  
  3953. Format of parameter block:
  3954. Offset    Size    Description
  3955.  00h    BYTE    subfunction
  3956.         00h set/reset interlock
  3957.         01h get /L flag
  3958.  01h    BYTE    interlock state
  3959.         00h=reset, 01h=set
  3960.           This interlock prevents some of the ANSI.SYS post-processing
  3961.           in its hook onto INT 10, AH=00h mode set
  3962.  02h    BYTE    (returned)
  3963.         00h if /L not in effect
  3964.         01h if /L in effect
  3965. --------V-2F1A21-----------------------------
  3966. INT 2F - AVATAR.SYS - SET DRIVER STATE
  3967.     AX = 1A21h (AL='!')
  3968.     DS:SI -> command string with one or more state characters
  3969.     CX = length of command string
  3970. Return: CF set on error (invalid subfunction)
  3971.     CF clear if successful
  3972. Note:    the characters in the state string are interpreted left to right, and
  3973.       need not be in any particular order
  3974. SeeAlso: AX=1A3Fh
  3975.  
  3976. Values of state characters:
  3977.  'a'    activate driver
  3978.  'd'    disable driver
  3979.  'f'    use fast screen output
  3980.  'g'    always convert gray keys (+ and -) to function keys
  3981.  'G'    never convert gray keys
  3982.  'l'    convert gray keys only when ScrollLock active
  3983.  's'    use slow screen output
  3984.  't'    Tandy 1000 keyboard (not yet implemented)
  3985. --------V-2F1A3C-----------------------------
  3986. INT 2F U - AVATAR.SYS v0.11 - ???
  3987.     AX = 1A3Ch
  3988.     ???
  3989. Return: CX = 0000h
  3990. --------V-2F1A3E-----------------------------
  3991. INT 2F U - AVATAR.SYS v0.11 - ???
  3992.     AX = 1A3Eh
  3993.     CL = ???
  3994.     CH = ???
  3995.     DL = ???
  3996.     DH = ???
  3997. Return: CL = ???
  3998.     CH = ???
  3999.     DL = ???
  4000.     DH = ???
  4001. --------V-2F1A3F-----------------------------
  4002. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4003.     AX = 1A3Fh (AL='?')
  4004.     ES:DI -> buffer
  4005.     CX = length of buffer in bytes
  4006. Return: CF clear
  4007.     CX = actual size of returned info
  4008. Note:    the returned information consists of multiple letters whose meanings
  4009.       are described under AX=1A21h
  4010. SeeAlso: AX=1A21h
  4011. --------S-2F1A42BX4156-----------------------
  4012. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4013.     AX = 1A42h
  4014.     BX = 4156h ('AV')
  4015.     ES:DI -> FAR handler for serial port using IRQ3
  4016.     DS = data segment needed by handler
  4017. Return: AX = 1A42h if ASD not installed
  4018.        = 0000h if no more room
  4019.        else handle to use when uninstalling
  4020. Notes:    the handler need not save/restore registers or signal EOI to the
  4021.       interrupt controller
  4022.     the handler should return AX=0000h if the interrupt was meant for it,
  4023.       and either leave AX unchanged or return a non-zero value otherwise
  4024.     the most recently installed handler will be called first, continuing
  4025.       to earlier handlers until one returns AX=0000h
  4026. SeeAlso: AX=1A43h,AX=1A62h
  4027. --------S-2F1A43BX4156-----------------------
  4028. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4029.     AX = 1A43h
  4030.     BX = 4156h ('AV')
  4031.     ES:DI -> FAR handler for serial port using IRQ4
  4032.     DS = data segment needed by handler
  4033. Return: AX = 1A43h if ASD not installed
  4034.        = 0000h if no more room
  4035.        else handle to use when uninstalling
  4036. Notes:    (see AX=1A42h)
  4037. SeeAlso: AX=1A42h,AX=1A63h
  4038. --------V-2F1A44BX4156-----------------------
  4039. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4040.     AX = 1A44h
  4041.     BX = 4156h ('AV')
  4042. Return: AX = 0000h
  4043.     DS = data segment
  4044.     CX = size of data segment
  4045. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4046.       process under a multitasker hooks this function and provides a
  4047.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4048. SeeAlso: AX=1A21h,AX=1A3Fh
  4049. --------V-2F1A52-----------------------------
  4050. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4051.     AX = 1A52h
  4052.     CX = size of buffer
  4053.     ES:DI -> buffer
  4054. Return: ??? copied into user buffer
  4055. Note:    the maximum size of the data which may be copied is returned by
  4056.       AX=1A72h
  4057. SeeAlso: AX=1A72h
  4058. --------V-2F1A53-----------------------------
  4059. INT 2F U - AVATAR.SYS v0.11 - ???
  4060.     AX = 1A53h
  4061.     CL = ??? (00h-05h)
  4062.     ???
  4063. Return: ???
  4064. --------S-2F1A62BX4156-----------------------
  4065. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4066.     AX = 1A62h
  4067.     BX = 4156h ('AV')
  4068.     CX = handle for IRQ routine returned by AX=1A42h
  4069. SeeAlso: AX=1A42h,AX=1A63h
  4070. --------S-2F1A63BX4156-----------------------
  4071. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4072.     AX = 1A63h
  4073.     BX = 4156h ('AV')
  4074.     CX = handle for IRQ routine returned by AX=1A43h
  4075. SeeAlso: AX=1A43h,AX=1A62h
  4076. --------V-2F1A72-----------------------------
  4077. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4078.     AX = 1A72h
  4079. Return: CX = maximum size of ???
  4080. SeeAlso: AX=1A52h
  4081. --------V-2F1A7B-----------------------------
  4082. INT 2F U - AVATAR.SYS v0.11 - ???
  4083.     AX = 1A7Bh
  4084. Return: AX = 0000h
  4085.     CX = 0000h
  4086. --------V-2F1A7D-----------------------------
  4087. INT 2F U - AVATAR.SYS v0.11 - ???
  4088.     AX = 1A7Dh
  4089. Return: AX = ???
  4090. --------V-2F1AADDX0000-----------------------
  4091. INT 2F U - AVATAR.SYS v0.11 - ???
  4092.     AX = 1AADh
  4093.     DX = 0000h
  4094.     CX = subfunction (00h-0Ch)
  4095.     ???
  4096. Return: AX = 0000h if DX was nonzero
  4097.     ???
  4098. --------m-2F1B00-----------------------------
  4099. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4100.     AX = 1B00h
  4101. Return: AL = FFh if installed
  4102. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4103.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4104.       which excludes the physical pages being used by DOS.
  4105. SeeAlso: AH=1Bh"FRAME INFO"
  4106. --------m-2F1B-------------------------------
  4107. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4108.     AH = 1Bh
  4109.     AL <> 00h
  4110.     DI = hidden physical page number
  4111. Return: AX = FFFFh if failed (no such hidden page)
  4112.     AX = 0000h if OK, then
  4113.          ES = segment of page frame
  4114.          DI = physical page number
  4115. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4116.     FASTOPEN makes this call with AL = FFh
  4117. SeeAlso: AX=1B00h
  4118. --------V-2F2300-----------------------------
  4119. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4120.     AX = 2300h
  4121. Return: AH = FFh
  4122. Note:    this installation check does not follow the usual format
  4123. SeeAlso: AH=23h
  4124. --------V-2F23-------------------------------
  4125. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4126.     AH = 23h
  4127.     AL nonzero
  4128. Return: AH = FFh
  4129.     ES:BX -> graphics data
  4130. SeeAlso: AX=2300h
  4131. --------T-2F2700-----------------------------
  4132. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4133.     AX = 2700h
  4134. Return: AL = 00h not installed
  4135.        = FFh installed
  4136. --------T-2F2701-----------------------------
  4137. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4138.     AX = 2701h
  4139. Return: AX = maximum simultaneous tasks
  4140.     BX = index into TASK_IDS of current foreground task
  4141.     CX = currently-active tasks
  4142.     DX = version number (DR-DOS 6.0 = 0001h)
  4143.     ES:SI -> TASK_IDS
  4144.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4145. Notes:    do not attempt to create a new task if CX == AX
  4146.     the task's index is its position on the task menu, while its ID is the
  4147.       position within the internal task name table
  4148. SeeAlso: AX=2714h,AX=2716h
  4149. --------T-2F2702-----------------------------
  4150. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4151.     AX = 2702h
  4152. Return: DX = maximum pages INT 67/AH=42h will report available
  4153. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4154.       amount which is reported as being available at a given time
  4155. SeeAlso: AX=2703h,INT 67/AH=42h
  4156. --------T-2F2703-----------------------------
  4157. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4158.     AX = 2703h
  4159.     DX = maximum pages INT 67/AH=42h should report available
  4160. Return: DX = new maximum for reporting
  4161. SeeAlso: AX=2702h,INT 67/AH=42h
  4162. --------T-2F2704-----------------------------
  4163. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4164.     AX = 2704h
  4165.     DL = subfunction
  4166.         00h unregister task manager
  4167.         01h register task manager
  4168. Return: DL = status
  4169.         00h registered
  4170.         01h unregistered
  4171. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4172.       interface; while one is registered, the TaskMAX hotkeys and
  4173.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4174.     unregister the task manager before terminating it
  4175. SeeAlso: AX=2705h
  4176. --------T-2F2705-----------------------------
  4177. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4178.     AX = 2705h
  4179.     DL = subfunction
  4180.         00h disable keystrokes for switching to next/prev/specified task
  4181.         01h enable
  4182. Return: nothing
  4183. Note:    should only be called by a registered task manager (see AX=2704h)
  4184. SeeAlso: AX=2704h,AX=2706h
  4185. --------T-2F2706-----------------------------
  4186. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4187.     AX = 2706h
  4188.     DX = task index (see AX=2701h) of task to be activated
  4189. Return: DX = task index of previously-active task
  4190. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4191. --------T-2F2707-----------------------------
  4192. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4193.     AX = 2707h
  4194.     DS:DX -> ASCIZ pathname of executable
  4195.     ES:BX -> parameter block (see below)
  4196.     CX = number of ticks before automatic return to task manager
  4197.         (0000h = run until termination or explicitly switched)
  4198. Return: DX = new task's task index (FFFFh if task terminated)
  4199. SeeAlso: AX=2706h,AX=2708h
  4200.  
  4201. Format of parameter block:
  4202. Offset    Size    Description
  4203.  00h    WORD    reserved, should be 0000h
  4204.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4205.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4206.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4207. --------T-2F2708-----------------------------
  4208. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4209.     AX = 2708h
  4210.     DX = task index
  4211. Return: DX = FFFFh (task deleted)
  4212. Notes:    this call should only be used for abnormal task termination, after
  4213.       first checking for open files with AX=270Ch; should not be used
  4214.       with programs that allocate EMS or XMS memory
  4215.     switches to specified task first
  4216. SeeAlso: AX=2707h
  4217. --------T-2F2709-----------------------------
  4218. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4219.     AX = 2709h
  4220.     DX = task index
  4221.     DS:SI -> 8-byte name (8 NULs = remove name)
  4222. Return: AL = task flags
  4223.         00h ID unused or task terminated
  4224.         01h ID in use, task name table entry valid
  4225.         81h ID in use, task name fixed
  4226.     BX = task ID
  4227.     ES:DI -> name in task name table (see AX=2701h)
  4228. Note:    the task retains the given name until it terminates or the name is
  4229.       removed by specifying a name of 8 NULs.
  4230. SeeAlso: AX=2701h,AX=2707h
  4231. --------T-2F270A-----------------------------
  4232. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4233.     AX = 270Ah
  4234.     DX = task index
  4235. Return: DX = task ID (FFFFh if index invalid)
  4236. Note:    task IDs stay constant, while indexes can change when other tasks are
  4237.       deleted
  4238. SeeAlso: AX=2701h,AX=270Bh
  4239. --------T-2F270B-----------------------------
  4240. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4241.     AX = 270Bh
  4242.     DX = task ID
  4243. Return: DX = task index (FFFFh if task not active)
  4244. SeeAlso: AX=270Ah
  4245. --------T-2F270C-----------------------------
  4246. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4247.     AX = 270Ch
  4248.     DX = task index
  4249. Return: AX = number of files currently open for specified task
  4250. SeeAlso: AX=2708h
  4251. --------T-2F270D-----------------------------
  4252. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4253.     AX = 270Dh
  4254.     DX = task index
  4255. Return: DX = status
  4256.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  4257.         0001h if not in root shell for task
  4258. Note:    TaskMAX will return 0001h if the specified task has spawned another
  4259.       command interpreter with AX=2707h
  4260. SeeAlso: AX=2707h,AX=270Ch
  4261. --------T-2F270E-----------------------------
  4262. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  4263.     AX = 270Eh
  4264.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4265.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4266. Return: ES:DI -> current lead-in string
  4267. Note:    the specified sequence of keystrokes is sent to the application before
  4268.       every line of a text-mode spreadsheet paste
  4269. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  4270. --------T-2F270F-----------------------------
  4271. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  4272.     AX = 270Fh
  4273.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4274.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4275. Return: ES:DI -> current lead-in string
  4276. Note:    the specified sequence of keystrokes is sent to the application before
  4277.       every number in a numeric-mode spreadsheet paste
  4278. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  4279. --------T-2F2710-----------------------------
  4280. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  4281.     AX = 2710h
  4282.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4283.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4284. Return: ES:DI -> current lead-in string
  4285. Note:    the specified sequence of keystrokes is sent to the application after
  4286.       every line of a spreadsheet paste operation
  4287. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  4288. --------T-2F2711-----------------------------
  4289. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  4290.     AX = 2711h
  4291.     DX = ASCII code for separator (FFFFh to get current)
  4292. Return: DL = current separator character
  4293. SeeAlso: AX=270Fh
  4294. --------T-2F2712-----------------------------
  4295. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  4296.     AX = 2712h
  4297.     DX = task index
  4298. --------T-2F2713-----------------------------
  4299. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  4300.     AX = 2713h
  4301.     DX = task index
  4302.     CX = past mode
  4303.         0000h alphanumeric
  4304.         0001h numeric
  4305.         0002h text
  4306. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  4307. --------T-2F2714-----------------------------
  4308. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  4309.     AX = 2714h
  4310. Return: CX = total KB of swap space
  4311.     DX = available KB of swap space
  4312. SeeAlso: AX=2701h
  4313. --------T-2F2715-----------------------------
  4314. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  4315.     AX = 2715h
  4316. Return: only after calling task is again selected
  4317. SeeAlso: AX=2706h
  4318. --------T-2F2716-----------------------------
  4319. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  4320.     AX = 2716h
  4321. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  4322.         CX = bytes in paste buffer
  4323.         DX = current generation number (updated after every copy operation)
  4324. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  4325. --------T-2F2717-----------------------------
  4326. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  4327.     AX = 2717h
  4328.     CX = bytes in destination buffer
  4329.     ES:DI -> destination buffer
  4330. Return: AX = 0000h if function supported
  4331.         CX = bytes actually copied (FFFFh if buffer too small)
  4332.         DX = current generation number for paste buffer
  4333. Note:    the destination buffer may be too small if another task adds more data
  4334.       to the paste buffer after the AX=2716h call but before this call
  4335. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  4336. --------T-2F2718-----------------------------
  4337. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  4338.     AX = 2718h
  4339.     CX = bytes in source buffer
  4340.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  4341. Return: AX = 0000h if function supported
  4342.         CX = bytes actually copied
  4343.         DX = current generation number for paste buffer
  4344. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  4345. --------F-2F2A-------------------------------
  4346. INT 2F - Gammafax DOS Dispatcher INTERFACE
  4347.     AH = 2Ah
  4348. Note:    details not available at this time
  4349. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  4350. --------t-2F3900-----------------------------
  4351. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  4352.     AX = 3900h
  4353. Return: AL = status
  4354.         00h not installed
  4355.         FFh one or more TSRs using this interface is installed
  4356. Note:    this function is provided to that the multiplex number will appear used
  4357.       to other programs
  4358. SeeAlso: AH=39h/BL=00h
  4359. --------t-2F39--BL00-------------------------
  4360. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  4361.     AH = 39h
  4362.     BL = 00h
  4363.     AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)
  4364. Return: AL = status
  4365.         00h not installed
  4366.         FFh installed
  4367.         DX = segment address of resident module
  4368. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  4369.       resident module is installed by allocating a block of upper memory,
  4370.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  4371.       field with the TSR's name.
  4372. SeeAlso: AX=3900h,AH=39h/BL=01h
  4373.  
  4374. Values for TSR ID number:
  4375.  01h TSR Windows
  4376.  02h NOBUSY
  4377.  03h CD STACK
  4378.  04h DISK WATCH
  4379.  05h PUSHBP
  4380.  06h ALIAS
  4381.  07h KEYMACRO
  4382.  08h SLOWDOWN
  4383.  09h ANSIGRAB
  4384.  0Ah TEE
  4385.  0Bh FASTMOUS
  4386.  0Ch EXTWILD
  4387.  0Dh BREAKOUT
  4388.  0Eh STOPDISK
  4389.  
  4390. Format of TSR modules:
  4391. Offset    Size    Description
  4392.  00h  4 BYTEs    signature "FTSR"
  4393.  04h    WORD    segment address of this module
  4394.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  4395.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  4396.         (usually only a PSP if file access is required)
  4397.      5N BYTEs    interrupt list (see below)
  4398.     BYTE    FFh terminator
  4399.  
  4400. Format of interrupt list entry:
  4401. Offset    Size    Description
  4402.  00h    BYTE    interrupt number (00h-FEh)
  4403.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  4404.  03h    WORD    offset within segment of begin of interrupt handler code
  4405. --------t-2F39--BL01-------------------------
  4406. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  4407.     AH = 39h
  4408.     BL = 01h
  4409.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  4410. Return: AL = status
  4411.         00h not ready to be removed
  4412.         FFh resident module may be removed by deassigning the interrupts
  4413.         hooked by the TSR and deallocating the TSR's memory block
  4414.     AH,BX,CX,DX,ES may be destroyed
  4415. SeeAlso: AX=3900h,AH=39h/BL=00h
  4416. --------t-2F39-------------------------------
  4417. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  4418.     AH = 39h
  4419.     BL = function number (02h-FFh)
  4420.     AL = TSR ID number (01h-FFh)
  4421.     CX,DX,SI,DI,DS,ES may contain parameters
  4422. Return: as appropriate for the called function
  4423. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  4424. --------r-2F3901BL02-------------------------
  4425. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  4426.     AX = 3901h
  4427.     BL = 02h
  4428. Return: AX = error code (0000h if successful)
  4429. Notes:    opens the next TSR window on top of any others.     Only three
  4430.       TSR windows can be opened at any one time.  The three windows
  4431.       are all 40x11 characters, partly overlapping.
  4432. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  4433. --------r-2F3901BL03-------------------------
  4434. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  4435.     AX = 3901h
  4436.     BL = 03h
  4437. Return: AX = error code (0000h if successful)
  4438. Notes:    Hide any visible TSR windows from view.
  4439. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  4440. --------r-2F3901BL04-------------------------
  4441. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  4442.     AX = 3901h
  4443.     BL = 04h
  4444. Return: AX = error code (0000h if successful)
  4445. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  4446. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  4447. --------r-2F3901BL05-------------------------
  4448. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  4449.     AX = 3901h
  4450.     BL = 05h
  4451. Return: AX = error code (0000h if successful)
  4452. Notes:    Close the last opened TSR window.
  4453. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4454. --------r-2F3901BL06-------------------------
  4455. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  4456.     AX = 3901h
  4457.     BL = 06h
  4458.     DS:SI -> title string
  4459. Return: AX = error code (0000h if successful)
  4460. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4461. --------r-2F3901BL07-------------------------
  4462. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  4463.     AX = 3901h
  4464.     BL = 07h
  4465.     CH = Y coordinate (0-10)
  4466.     CL = X coordinate (0-39)
  4467. Return: AX = error code (0000h if successful)
  4468. Note:    the hardware cursor is always disabled when a TSR window is opened;
  4469.       this call only sets a text position
  4470. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  4471. --------r-2F3901BL08-------------------------
  4472. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  4473.     AX = 3901h
  4474.     BL = 08h
  4475.     DS:SI -> string
  4476. Return: AX = error code (0000h if successful)
  4477. Notes:    The text is not clipped.
  4478.     This routine understands Tab, NewLine and Carriage Return
  4479. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4480. --------r-2F3901BL09-------------------------
  4481. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  4482.     AX = 3901h
  4483.     BL = 09h
  4484.     CL = scroll direction: 00h up, FFh down, 00h clear window
  4485. Return: AX = error code (0000h if successful)
  4486. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4487. --------r-2F3901BL0A-------------------------
  4488. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  4489.     AX = 3901h
  4490.     BL = 0Ah
  4491.     DX = sound divisor, or 0 for silence.
  4492.          (divide 1843200 by required frequency to get value for DX)
  4493.     CL = sound length in 18.2 Hz clock ticks
  4494. Return: AX = error code (0000h if successful)
  4495. SeeAlso: AH=39h/BL=00h
  4496. --------r-2F3901BL0B-------------------------
  4497. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  4498.     AX = 3901h
  4499.     BL = 0Bh
  4500.     CL = number of users increment: +1 if adding a new user
  4501.                     -1 if removing a user
  4502. Return: AX = error code (0000h if successful)
  4503. Note:    the TSR windows resident module may only be removed when the internal
  4504.       user count is zero
  4505. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4506. --------W-2F4000-----------------------------
  4507. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  4508.     AX = 4000h
  4509. Return: AL = 01h does not virtualize video access
  4510.          02h virtualizes the video when in text mode
  4511.          03h virtualizes the video when in text mode or single plane
  4512.          graphics modes
  4513.          04h virtualizes the video when in text mode, single plane
  4514.          graphics modes, and VGA multiplane modes
  4515.          FFh virtualizes the video fully
  4516. Note:    this function is used by display drivers to find out what capabilities
  4517.       exist for the VDD driver and also trigger then VDD driver to call
  4518.       functions 4005h and 4006h.  This function also gives the Video Driver
  4519.       hardware access to the video registers.
  4520. --------O-2F4001-----------------------------
  4521. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  4522.     AX = 4001h
  4523. Note:    called by OS/2 when the DOS box is about to be placed in the background
  4524.       and the video driver should save any necessary state
  4525. SeeAlso: AX=4002h,AX=4005h
  4526. --------O-2F4002-----------------------------
  4527. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  4528.     AX = 4002h
  4529. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  4530.       and the video driver should restore the previously-saved state
  4531. SeeAlso: AX=4001h,AX=4006h
  4532. --------W-2F4003-----------------------------
  4533. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  4534.     AX = 4003h
  4535. Note:    This critical section must be exited within 1 second.
  4536. SeeAlso: AX=4004h
  4537. --------W-2F4004-----------------------------
  4538. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  4539.     AX = 4004h
  4540. SeeAlso: AX=4003h
  4541. --------W-2F4005-----------------------------
  4542. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  4543.     AX = 4005h
  4544. Note:    called by Windows when the DOS box is about to be placed in the
  4545.       background and the video driver should save any necessary state
  4546.       information
  4547. SeeAlso: AX=4001h,AX=4006h
  4548. --------W-2F4006-----------------------------
  4549. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  4550.     AX = 4006h
  4551. Note:    called by Windows when the DOS box is about to be placed in the
  4552.       foreground and the video driver should restore any necessary state
  4553.       information
  4554. SeeAlso: AX=4002h,AX=4005h
  4555. --------W-2F4007-----------------------------
  4556. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  4557.     AX = 4007h
  4558. Note:    used by Windows Standard mode
  4559. --------E-2F4040-----------------------------
  4560. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  4561.     AX = 4040h
  4562. Return: BX:CX -> ???
  4563. --------N-2F4100-----------------------------
  4564. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  4565.     AX = 4100h
  4566. Return: CF clear if successful
  4567.         AL = FFh
  4568.     CF set on error
  4569.         AX = ???
  4570. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  4571.     LAN Manager enhanced mode adds features beyond the standard redirector
  4572.       file/printer services
  4573. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  4574. --------N-2F4103-----------------------------
  4575. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  4576.     AX = 4103h
  4577. Return: ???
  4578. SeeAlso: AX=4100h,AX=4104h
  4579. --------N-2F4104-----------------------------
  4580. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  4581.     AX = 4104h
  4582. Return: ???
  4583. SeeAlso: AX=4100h,AX=4103h
  4584. --------N-2F42-------------------------------
  4585. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  4586.     AH = 42h
  4587.     ???
  4588. Return: ???
  4589. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  4590.       file/printer services
  4591. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  4592. --------m-2F4300-----------------------------
  4593. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  4594.     AX = 4300h
  4595. Return: AL = 80h XMS driver installed
  4596.     AL <> 80h no driver
  4597. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  4598.       above 640K
  4599.     this installation check DOES NOT follow the format used by other
  4600.       software
  4601. SeeAlso: AX=4310h
  4602. Index:    installation check;XMS version 2+
  4603. --------m-2F4308-----------------------------
  4604. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  4605.     AX = 4308h
  4606. Return: AL = 43h if supported
  4607.         BL = A20 handler number (value of /MACHINE:nn switch)
  4608.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  4609. SeeAlso: AX=4330h
  4610. --------m-2F4310-----------------------------
  4611. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  4612.     AX = 4310h
  4613. Return: ES:BX -> driver entry point
  4614. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  4615. SeeAlso: AX=4300h
  4616.  
  4617. Perform a FAR call to the driver entry point with AH set to the function code
  4618.     AH    function
  4619.     00h  Get XMS version number
  4620.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  4621.              BX = internal revision number
  4622.              DX = 0001h if HMA (1M to 1M + 64K) exists
  4623.               0000h if HMA does not exist
  4624.     01h  Request High Memory Area (1M to 1M + 64K)
  4625.          DX = memory in bytes (for TSR or device drivers)
  4626.           FFFFh if application program
  4627.          Return: AX = 0001h success
  4628.             = 0000h failure
  4629.                BL = error code (80h,81h,90h,91h,92h) (see below)
  4630.     02h  Release High Memory Area
  4631.          Return: AX = 0001h success
  4632.             = 0000h failure
  4633.                BL = error code (80h,81h,90h,93h) (see below)
  4634.     03h  Global enable A20, for using the HMA
  4635.          Return: AX = 0001h success
  4636.             = 0000h failure
  4637.                BL = error code (80h,81h,82h) (see below)
  4638.     04h  Global disable A20
  4639.          Return: AX = 0001h success
  4640.             = 0000h failure
  4641.                BL = error code (80h,81h,82h,94h) (see below)
  4642.     05h  Local enable A20, for direct access to extended memory
  4643.          Return: AX = 0001h success
  4644.             = 0000h failure
  4645.                BL = error code (80h,81h,82h) (see below)
  4646.     06h  Local disable A20
  4647.          Return: AX = 0001h success
  4648.             = 0000h failure
  4649.                BL = error code (80h,81h,82h,94h) (see below)
  4650.     07h  Query A20 state
  4651.          Return: AX = 0001h enabled
  4652.             = 0000h disabled
  4653.              BL = error code (00h,80h,81h) (see below)
  4654.     08h  Query free extended memory, not counting HMA
  4655.          BL = 00h (some implementations leave BL unchanged on success)
  4656.          Return: AX = size of largest extended memory block in K
  4657.              DX = total extended memory in K
  4658.              BL = error code (00h,80h,81h,A0h) (see below)
  4659.     09h  Allocate extended memory block
  4660.          DX = Kbytes needed
  4661.          Return: AX = 0001h success
  4662.                DX = handle for memory block
  4663.             = 0000h failure
  4664.                BL = error code (80h,81h,A0h) (see below)
  4665.     0Ah  Free extended memory block
  4666.          DX = handle of block to free
  4667.          Return: AX = 0001h success
  4668.             = 0000h failure
  4669.                BL = error code (80h,81h,A2h,ABh) (see below)
  4670.     0Bh  Move extended memory block
  4671.          DS:SI -> EMM structure (see below)
  4672.          Note: if either handle is 0000h, the corresponding offset is
  4673.            considered to be an absolute segment:offset address in
  4674.            directly addressable memory
  4675.          Return: AX = 0001h success
  4676.             = 0000h failure
  4677.                BL = error code (80h-82h,A3h-A9h) (see below)
  4678.     0Ch  Lock extended memory block
  4679.          DX = handle of block to lock
  4680.          Return: AX = 0001h success
  4681.                DX:BX = 32-bit linear address of locked block
  4682.             = 0000h failure
  4683.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  4684.     0Dh  Unlock extended memory block
  4685.          DX = handle of block to unlock
  4686.          Return: AX = 0001h success
  4687.             = 0000h failure
  4688.                BL = error code (80h,81h,A2h,AAh) (see below)
  4689.     0Eh  Get handle information
  4690.          DX = handle for which to get info
  4691.          Return: AX = 0001h success
  4692.                BH = block's lock count
  4693.                BL = number of free handles left
  4694.                DX = block size in K
  4695.             = 0000h failure
  4696.                BL = error code (80h,81h,A2h) (see below)
  4697.     0Fh  Reallocate extended memory block
  4698.          DX = handle of block
  4699.          BX = new size of block in K
  4700.          Return: AX = 0001h success
  4701.             = 0000h failure
  4702.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  4703.     10h  Request upper memory block (nonEMS memory above 640K)
  4704.          DX = size of block in paragraphs
  4705.          Return: AX = 0001h success
  4706.                BX = segment address of UMB
  4707.                DX = actual size of block
  4708.             = 0000h failure
  4709.                BL = error code (80h,B0h,B1h) (see below)
  4710.                DX = largest available block
  4711.     11h  Release upper memory block
  4712.          DX = segment address of UMB to release
  4713.          Return: AX = 0001h success
  4714.             = 0000h failure
  4715.                BL = error code (80h,B2h) (see below)
  4716.     12h  (XMS v3.0) Reallocate upper memory block
  4717.          DX = segment address of UMB to resize
  4718.          BX = new size of block in paragraphs
  4719.          Return: AX = 0001h success
  4720.             = 0000h failure
  4721.                BL = error code (80h,B0h,B2h) (see below)
  4722.     34h  (QEMM 5.11 only, undocumented) ???
  4723.     44h  (QEMM 5.11 only, undocumented) ???
  4724.     88h  (XMS v3.0) Query free extended memory
  4725.          Return: EAX = largest block of extended memory, in K
  4726.              BL = status
  4727.              00h success
  4728.              80h not implemented (i.e. on a 286 system)
  4729.              81h VDISK detected
  4730.              A0h all extended memory allocated
  4731.              ECX = physical address of highest byte of memory
  4732.                 (valid even on error codes 81h and A0h)
  4733.              EDX = total Kbytes of extended memory (0 if status A0h)
  4734.     89h  (XMS v3.0) Allocate any extended memory
  4735.          EDX = Kbytes needed
  4736.          Return: AX = 0001h success
  4737.                 DX = handle for allocated block (free with AH=0Ah)
  4738.             = 0000h failure
  4739.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  4740.     8Eh  (XMS v3.0) Get extended EMB handle information
  4741.          DX = handle
  4742.          Return: AX = 0001h success
  4743.                 BH = block's lock count
  4744.                 CX = number of free handles left
  4745.                 EDX = block size in K
  4746.             = 0000h failure
  4747.                 BL = status (80h,81h,A2h) (see below)
  4748.     8Fh  (XMS v3.0) Reallocate any extended memory block
  4749.          DX = unlocked handle
  4750.          EBX = new size in K
  4751.          Return: AX = 0001h success
  4752.             = 0000h failure
  4753.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  4754. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  4755.     the XMS driver need not implement functions 10h through 12h to be
  4756.       considered compliant with the standard
  4757. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  4758.       are called
  4759.  
  4760. Format of EMM structure:
  4761. Offset    Size    Description
  4762.  00h    DWORD    number of bytes to move (must be even)
  4763.  04h    WORD    source handle
  4764.  06h    DWORD    offset into source block
  4765.  0Ah    WORD    destination handle
  4766.  0Ch    DWORD    offset into destination block
  4767. Notes:    if source and destination overlap, only forward moves (source base
  4768.       less than destination base) are guaranteed to work properly
  4769.     if either handle is zero, the corresponding offset is interpreted
  4770.       as a real-mode address referring to memory directly addressable
  4771.       by the processor
  4772.  
  4773. Error codes returned in BL:
  4774.     00h successful
  4775.     80h function not implemented
  4776.     81h Vdisk was detected
  4777.     82h an A20 error occurred
  4778.     8Eh a general driver error
  4779.     8Fh unrecoverable driver error
  4780.     90h HMA does not exist
  4781.     91h HMA is already in use
  4782.     92h DX is less than the /HMAMIN= parameter
  4783.     93h HMA is not allocated
  4784.     94h A20 line still enabled
  4785.     A0h all extended memory is allocated
  4786.     A1h all available extended memory handles are allocated
  4787.     A2h invalid handle
  4788.     A3h source handle is invalid
  4789.     A4h source offset is invalid
  4790.     A5h destination handle is invalid
  4791.     A6h destination offset is invalid
  4792.     A7h length is invalid
  4793.     A8h move has an invalid overlap
  4794.     A9h parity error occurred
  4795.     AAh block is not locked
  4796.     ABh block is locked
  4797.     ACh block lock count overflowed
  4798.     ADh lock failed
  4799.     B0h only a smaller UMB is available
  4800.     B1h no UMB's are available
  4801.     B2h UMB segment number is invalid
  4802. --------m-2F4330-----------------------------
  4803. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  4804.     AX = 4330h
  4805. Return: AL = 80h if external A20 handler provided
  4806.         ES:BX -> external A20 handler
  4807.         CL = ???
  4808. Note:    HIMEM.SYS calls this function to allow an external program to provide
  4809.       an A20 handler (i.e. to support a machine not supported by HIMEM
  4810.       itself)
  4811.  
  4812. External A20 handler called with:
  4813.     AX = function
  4814.         0000h disable A20
  4815.         0001h enable A20
  4816.     Return: AX = status
  4817.             0000h failure
  4818.             0001h successful
  4819. SeeAlso: AX=4308h,AX=4310h
  4820. --------E-2F43E0-----------------------------
  4821. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  4822.     AX = 43E0h
  4823. Return: AX = 0000h if installed
  4824.         ES:BX -> registration structure (see below)
  4825. SeeAlso: INT 2F/AX=1687h
  4826.  
  4827. Format of registration structure:
  4828. Offset    Size    Description
  4829.  00h    DWORD    real-mode API entry point
  4830.  04h    DWORD    16-bit protected-mode API entry point
  4831.  08h  8 BYTEs    reserved (0)
  4832.  10h  8 BYTEs    blank-padded server OEM name
  4833.  18h    WORD    flags
  4834.          bit 0: fast processor reset available (286 only)
  4835.         bits 1-15 reserved (undefined)
  4836.  1Ah  2 BYTEs    DPMS version (major,minor)
  4837.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  4838.  
  4839. Call DPMS entry point with:
  4840.     AX = 0100h call protected-mode procedure
  4841.         CX = number of words of stack to copy
  4842.         ES:DI -> callup/down register structure (see below)
  4843.         Return: CF clear if successful
  4844.             CF set on error
  4845.                 AX = error code (see below)
  4846.     AX = 0101h call real-mode procedure (RETF return)
  4847.         CX = number of words of stack to copy
  4848.         ES:DI -> callup/down register structure (see below)
  4849.         Return: CF clear if successful
  4850.             CF set on error
  4851.                 AX = error code (see below)
  4852.     AX = 0102h call real-mode procedure (IRET return)
  4853.         CX = number of words of stack to copy
  4854.         ES:DI -> callup/down register structure (see below)
  4855.         Return: CF clear if successful
  4856.             CF set on error
  4857.                 AX = error code (see below)
  4858.     AX = 0103h call real-mode interrupt handler
  4859.         BL = interrupt number
  4860.         CX = number of words of stack to copy
  4861.         ES:DI -> callup/down register structure (see below)
  4862.         Return: CF clear if successful
  4863.             CF set on error
  4864.                 AX = error code (see below)
  4865.     AX = 0200h allocate descriptors
  4866.         CX = number of descriptors to allocate
  4867.         Return: CF clear if successful
  4868.                 AX = first descriptor allocated
  4869.             CF set on error
  4870.                 AX = error code (see below)
  4871.     AX = 0201h free a descriptor
  4872.         BX = descriptor
  4873.         Return: CF clear if successful
  4874.             CF set on error
  4875.                 AX = error code (see below)
  4876.     AX = 0202h create alias descriptor
  4877.         BX = descriptor
  4878.         Return: CF clear if successful
  4879.                 AX = alias descriptor
  4880.             CF set on error
  4881.                 AX = error code (see below)
  4882.     AX = 0203h build alias to real-mode segment
  4883.         BX = descriptor
  4884.         CX = real-mode segment
  4885.         Return: CF clear if successful
  4886.             CF set on error
  4887.                 AX = error code (see below)
  4888.     AX = 0204h set descriptor base
  4889.         BX = descriptor
  4890.         CX:DX = base address
  4891.         Return: CF clear if successful
  4892.             CF set on error
  4893.                 AX = error code (see below)
  4894.     AX = 0205h set descriptor limit
  4895.         BX = descriptor
  4896.         CX = limit
  4897.         Return: CF clear if successful
  4898.             CF set on error
  4899.                 AX = error code (see below)
  4900.     AX = 0206h set descriptor type/attribute
  4901.         BX = descriptor
  4902.         CL = type
  4903.         CH = attribute
  4904.         Return: CF clear if successful
  4905.             CF set on error
  4906.                 AX = error code (see below)
  4907.     AX = 0207h get descriptor base
  4908.         BX = descriptor
  4909.         Return: CF clear if successful
  4910.                 CX:DX = base address
  4911.             CF set on error
  4912.                 AX = error code (see below)
  4913.     AX = 0300h get size of largest free block of memory
  4914.         Return: CF clear if successful
  4915.                 BX:CX = size
  4916.             CF set on error
  4917.                 AX = error code (see below)
  4918.     AX = 0301h allocate block of extended memory
  4919.         BX:CX = size
  4920.         Return: CF clear if successful
  4921.                    BX:CX = base address
  4922.                 SI:DI = handle
  4923.             CF set on error
  4924.                 AX = error code (see below)
  4925.     AX = 0302h free block of extended memory
  4926.         SI:DI = handle
  4927.         Return: CF clear if successful
  4928.             CF set on error
  4929.                 AX = error code (see below)
  4930.     AX = 0303h map linear memory
  4931.         ES:[DI] = DDS
  4932.         Return: CF clear if successful
  4933.                 BX:CX = base address
  4934.                 SI:DI = handle
  4935.             CF set on error
  4936.                 AX = error code (see below)
  4937.     AX = 0304h unmap linear memory
  4938.         SI:DI = handle
  4939.         Return: CF clear if successful
  4940.             CF set on error
  4941.                 AX = error code (see below)
  4942.     AX = 0400h relocate segment to extended memory
  4943.         ES:SI = base address
  4944.         CX = limit
  4945.         BL = type
  4946.         BH = attribute
  4947.         DX = selector or 0000h
  4948.         Return: CF clear if successful
  4949.                 AX = selector
  4950.                 BX:CX = new base address
  4951.                 SI:DI = handle
  4952.             CF set on error
  4953.                 AX = error code (see below)
  4954.  
  4955. Values for error code:
  4956.  8000h    general error
  4957.  8001h    unsupported function
  4958.  8011h    descriptor unavailable
  4959.  8012h    linear memory unavailable
  4960.  8013h    physical memory unavailable
  4961.  8021h    invalid value
  4962.  8022h    invalid selector
  4963.  8023h    invalid handle
  4964.  
  4965. Format of callup/down register structure:
  4966. Offset    Size    Description
  4967.  00h    DWORD    EDI
  4968.  04h    DWORD    ESI
  4969.  08h    DWORD    EBP
  4970.  0Ch  4 BYTEs    reserved (0)
  4971.  10h    DWORD    EBX
  4972.  14h    DWORD    EDX
  4973.  18h    DWORD    ECX
  4974.  20h    DWORD    EAX
  4975.  24h    DWORD    EIP
  4976.  28h    WORD    CS
  4977.  2Ah  2 BYTEs    reserved (0)
  4978.  2Ch    DWORD    EFLAGS
  4979.  30h    DWORD    ESP
  4980.  34h    WORD    SS
  4981.  36h  2 BYTEs    reserved (0)
  4982.  38h    WORD    ES
  4983.  3Ah  2 BYTEs    reserved (0)
  4984.  3Ch    WORD    DS
  4985.  3Eh  2 BYTEs    reserved (0)
  4986.  40h    WORD    FS
  4987.  42h  2 BYTEs    reserved (0)
  4988.  44h    WORD    GS
  4989.  46h  2 BYTEs    reserved (0)
  4990. ----------2F44-------------------------------
  4991. INT 2F U - ???
  4992.     AH = 44h
  4993.     AL = function (at least 0Bh, 15h, 17h)
  4994.     ???
  4995. Return: ???
  4996. Note:    called by Codeview for Windows
  4997. SeeAlso: AH=86h
  4998. --------G-2F4500-----------------------------
  4999. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  5000.     AX = 4500h
  5001. Return: AL = 01h if PROF.COM installed
  5002.     AL = 02h if VPROD.386 installed
  5003. SeeAlso: AX=4501h,AX=4502h
  5004. --------G-2F4501-----------------------------
  5005. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  5006.     AX = 4501h
  5007.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  5008.     CX = output limit in KB (second parameter for ProfSetup)
  5009. Note:    this call is not supported by PROF.COM
  5010. SeeAlso: AX=4502h,AX=4503h
  5011. --------G-2F4502-----------------------------
  5012. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  5013.     AX = 4502h
  5014.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  5015.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  5016.     CX = sampling rate for VPROD.386
  5017. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  5018.       low four bits of CMOS register 0Ah.  The interruption rate is
  5019.       1 SHL (15 - BL) per second.
  5020. SeeAlso: AX=4501h,AX=4503h
  5021. --------G-2F4503-----------------------------
  5022. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  5023.     AX = 4503h
  5024. Notes:    Profiling is also turned on by the key combinations
  5025.       LeftShift + RightShift + Alt
  5026.       LeftShift + RightShift + Ctrl
  5027.     for PROF.COM, this call programs the CMOS clock by reading register
  5028.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  5029.       is unmasked
  5030. SeeAlso: AX=4504h
  5031. --------G-2F4504-----------------------------
  5032. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  5033.     AX = 4504h
  5034. Notes:    profiling is also turned off by the key combination
  5035.       LeftShift + RightShift
  5036.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  5037.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  5038. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  5039. --------G-2F4505-----------------------------
  5040. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  5041.     AX = 4505h
  5042. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  5043. --------G-2F4506-----------------------------
  5044. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  5045.     AX = 4506h
  5046. SeeAlso: AX=4505h,AX=4507h
  5047. --------G-2F4507-----------------------------
  5048. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  5049.     AX = 4507h
  5050. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  5051.       "ProfFlush" (AX=4506h)
  5052. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  5053. --------G-2F4508-----------------------------
  5054. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  5055.     AX = 4508h
  5056.     BX = ordinal (or 0000h)
  5057.     CX = segment
  5058.     DX = instance (or 0000h)
  5059.     SI = type (or 0000h)
  5060.     ES:DI -> ASCIZ module name
  5061. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  5062.       interface, but only to function 0, for notifying the profiler of
  5063.       each new segment loaded.  The SHOWHITS utility then examines the
  5064.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  5065.       with symbol files to provide information in a useful form.
  5066.     this call does not have a corresponding Windows function
  5067. SeeAlso: AX=4500h 
  5068. --------D-2F4601-----------------------------
  5069. INT 2F U - DOS 5+ kernel - ???
  5070.     AX = 4601h
  5071. Return: ???
  5072. Note:    copies the MCB following the caller's PSP memory block into DOS data
  5073.       segment
  5074. SeeAlso: AX=4602h
  5075. --------D-2F4602-----------------------------
  5076. INT 2F U - DOS 5+ kernel - ???
  5077.     AX = 4602h
  5078. Return: ???
  5079. Note:    copies previously copied MCB from DOS data segment into MCB following
  5080.       caller's PSP memory block
  5081. SeeAlso: AX=4601h
  5082. ----------2F46-------------------------------
  5083. INT 2F U - ???
  5084.     AH = 46h
  5085.     AL = subfunction (03h,04h)
  5086. Return: ???
  5087. Note:    these two subfunctions are called by MS Windows 3.0
  5088. --------v-2F4653CX0002-----------------------
  5089. INT 2F - F-PROT v1.x only - F-LOCK.EXE 
  5090.     AX = 4653h
  5091.     CX = 0002h
  5092.     BX = subfunction
  5093.         0000h  installation check
  5094.         Return: AX = FFFFh
  5095.         0001h  uninstall
  5096.         Return: AX,BX,ES destroyed
  5097.         0002h  disable (v1.08 and below only)
  5098.         0003h  enable (v1.08 and below only)
  5099. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  5100.       Skulason
  5101. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  5102. Index:    installation check;F-LOCK|uninstall;F-LOCK
  5103. --------v-2F4653CX0003-----------------------
  5104. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  5105.     AX = 4653h
  5106.     CX = 0003h
  5107.     BX = subfunction
  5108.         0000h  installation check
  5109.         Return: AX = FFFFh
  5110.         0001h  uninstall
  5111.         Return: AX,BX,ES destroyed
  5112. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  5113.       Skulason
  5114. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  5115. Index:    installation check;F-XCHK|uninstall;F-XCHK
  5116. --------v-2F4653CX0004-----------------------
  5117. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  5118.     AX = 4653h
  5119.     CX = 0004h
  5120.     BX = subfunction
  5121.         0000h  installation check
  5122.         Return: AX = FFFFh
  5123.         0001h  uninstall
  5124.         Return: AX,BX,ES destroyed
  5125.         0002h  disable (v1.08 and below only)
  5126.            display message (v1.14+)
  5127.             other registers: ???
  5128.         0003h  enable (v1.08 and below only)
  5129.            display message (v1.14+)
  5130.             other registers: ???
  5131.             Return: AX = key pressed by user
  5132. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  5133.       Fridrik Skulason
  5134. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  5135. Index:    installation check;F-POPUP|uninstall;F-POPUP
  5136. --------v-2F4653CX0005-----------------------
  5137. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  5138.     AX = 4653h
  5139.     CX = 0005h
  5140.     BX = subfunction
  5141.         0000h installation check
  5142.         Return: AX = FFFFh
  5143.         0001h uninstall
  5144.         Return: AX,BX,ES destroyed
  5145. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  5146.       Fridrik Skulason
  5147. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  5148. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  5149. --------W-2F4680-----------------------------
  5150. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  5151.     AX = 4680h
  5152. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  5153.            or DOS 5 DOSSHELL active
  5154.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  5155.             mode
  5156. Note:    Windows 3.1 finally provides an installation check which works in all
  5157.       modes (see AX=160Ah)
  5158. SeeAlso: AX=1600h,AX=160Ah
  5159. --------K-2F4800-----------------------------
  5160. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  5161.     AX = 4800h
  5162. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  5163.         ES = segment of DOSKEY resident portion
  5164. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  5165. SeeAlso: AX=4810h
  5166. --------K-2F4810-----------------------------
  5167. INT 2F - DOS 5+ DOSKEY - READ INPUT LINE FROM CONSOLE
  5168.     AX = 4810h
  5169.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  5170. Return: AX = 0000h if successful
  5171. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  5172.       the previous handler
  5173.     if the user's input is a macro name, no text is placed in the buffer
  5174.       even though AX=0000h on return; the program must immediately issue
  5175.       this call again to retrieve the expansion of the macro.  Similarly,
  5176.       if the user enters a special parameter such as $*, this call must
  5177.       be repeated to retrieve the expansion; on the second call, DOSKEY
  5178.       overwrites the macro name on the screen with its expansion.
  5179.     DOSKEY chains if AL is not 00h or 10h on entry
  5180. SeeAlso: AX=4800h,INT 21/AH=0Ah
  5181. --------D-2F4A00CX0000-----------------------
  5182. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  5183.     AX = 4A00h
  5184.     CX = 0000h
  5185.     DH = new drive number
  5186.     DL = current drive number
  5187. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  5188. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  5189.       "Insert diskette for drive X:" on single-floppy systems
  5190. --------D-2F4A01-----------------------------
  5191. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  5192.     AX = 4A01h
  5193. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  5194.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  5195. Note:    called by Windows 3.1 DOSX.EXE
  5196. SeeAlso: AX=4310h,AX=4A02h
  5197. --------D-2F4A02-----------------------------
  5198. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  5199.     AX = 4A02h
  5200.     BX = number of bytes
  5201. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  5202.     BX = number of bytes actually allocated (rounded up to next paragraph
  5203.         for DOS 5.0 and 6.0)
  5204. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  5205.     called by Windows 3.1 DOSX.EXE
  5206. SeeAlso: AX=4A01h
  5207. --------T-2F4A05-----------------------------
  5208. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  5209.     AX = 4A05h
  5210.     SI = function
  5211.         0000h reset???
  5212.         0001h ???
  5213.         ES:BP -> 80-byte buffer containing ???
  5214.         0002h ???
  5215.         0003h ???
  5216.         0004h ???
  5217.         BL = ???
  5218.         0005h ???
  5219.         0006h get ???
  5220.         Return: ES:SI -> ???
  5221.         0007h get ???
  5222.         Return: AX = ???
  5223.         0008h get ???
  5224.         Return: DX:AX -> ??? (internal control data of some kind)
  5225.         0009h get ???
  5226.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  5227.         000Ah ???
  5228.         BL = length of buffer
  5229.         ES:BP -> buffer containing ???
  5230.         000Bh get ???
  5231.         Return: AX = ???
  5232.         000Ch ???
  5233.         BL = ???
  5234.         Return: if BL nonzero on entry
  5235.                 DX:AX -> ???
  5236.             if BL = 00h on entry
  5237.                 ES:SI -> ???
  5238. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  5239.       listed above
  5240.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  5241.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  5242. SeeAlso: AX=4B01h
  5243. --------D-2F4A06-----------------------------
  5244. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  5245.     AX = 4A06h
  5246.     DX = segment following last byte of conventional memory
  5247. Return: DX = segment following last byte of memory available for use by DOS
  5248. Note:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  5249.       present three bytes beyond the INT 2F handler; this call overrides
  5250.       the value returned by INT 12
  5251. SeeAlso: INT 12
  5252. --------c-2F4A10BX0000-----------------------
  5253. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  5254.     AX = 4A10h
  5255.     BX = 0000h
  5256.     CX = EBABh (v4.1+; see Note)
  5257. Return: AX = BABEh if installed
  5258.         DX:BX = cache hits
  5259.         DI:SI = cache misses
  5260.         CX = ???
  5261.         BP = version (4.00 = 0400h)
  5262. Notes:    most of the SMARTDRV API, including this call, is supported by
  5263.       PC-Cache v8.0
  5264.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  5265.       unless CX=EBABh on entry, DBLSPACE.BIN displays the error message
  5266.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and aborts the caller
  5267.       with INT 21/AX=4C00h
  5268.     SMARTDRV v3.x had a completely different API using IOCTL calls
  5269. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  5270. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  5271. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  5272. --------c-2F4A10BX0001-----------------------
  5273. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS
  5274.     AX = 4A10h
  5275.     BX = 0001h
  5276. Note:    this function is also supported by PC-Cache v8.0.
  5277. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  5278. --------c-2F4A10BX0002-----------------------
  5279. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  5280.     AX = 4A10h
  5281.     BX = 0002h
  5282. Note:    this function is also supported by PC-Cache v8.0.
  5283. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  5284. --------c-2F4A10BX0003-----------------------
  5285. INT 2F - SMARTDRV v4.00+ - STATUS
  5286.     AX = 4A10h
  5287.     BX = 0003h
  5288.     BP = drive # (0=A, 1=B, etc.)
  5289.     DL = subfunction
  5290.         00h only get information
  5291.         01h turn on read cache
  5292.         02h turn off read cache
  5293.         03h turn on write cache
  5294.         04h turn off write cache
  5295. Return: AX = BABEh if OK
  5296.     DL = status
  5297.         bit 7  not cached
  5298.         bit 6  write-through
  5299.         bit 5  ???
  5300.         bits 0-4 drive # (0=A, 1=B...)
  5301.     DL = FFh if drive does not exist
  5302. Notes:    If the read cache is off, reads will not be cached, but writes will
  5303.       continue to be cached if the write-cache is enabled.
  5304.     this function is also supported by PC-Cache v8.0.
  5305. SeeAlso: AX=4A10h/BX=0000h
  5306. --------c-2F4A10BX0004-----------------------
  5307. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  5308.     AX = 4A10h
  5309.     BX = 0004h
  5310. Return: AX = current size in elements???
  5311.     BX = largest number of elements
  5312.     CX = size of elements in bytes
  5313.     DX = number of elements under Windows
  5314. Note:    this function is also supported by PC-Cache v8.0.
  5315. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  5316. --------c-2F4A10BX0005-----------------------
  5317. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  5318.     AX = 4A10h
  5319.     BX = 0005h
  5320.     BP = drive # (0=A, 1=B...)
  5321. Return: AX = BABEh if double-buffered
  5322.         ES:DI -> ???
  5323. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  5324. --------c-2F4A10BX0006-----------------------
  5325. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  5326.     AX = 4A10h
  5327.     BX = 0006h
  5328.     CL = drive number (01h = A:)
  5329. Return: AX = 0006h if drive should not be cached by SMARTDRV
  5330. Note:    called by SMARTDRV at startup to determine whether it should cache
  5331.       a particular drive
  5332. SeeAlso: AX=4A10h/BX=0000h
  5333. --------c-2F4A10BX0007-----------------------
  5334. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  5335.     AX = 4A10h
  5336.     BX = 0007h
  5337.     BP = drive number
  5338. Return: DL = ???
  5339.     ES:DI -> device driver header for drive
  5340. Note:    this function is also supported by PC-Cache v8.0.
  5341. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  5342. --------c-2F4A10BX000A-----------------------
  5343. INT 2F - SMARTDRV v4.00+ - GET TABLE POINTER???
  5344.     AX = 4A10h
  5345.     BX = 000Ah
  5346. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  5347.          pointing to memory addresses containing info??? (see below)
  5348. Note:    this function is also supported by PC-Cache v8.0.
  5349. SeeAlso: AX=4A10h/BX=0000h
  5350.  
  5351. Format of data table:
  5352. Offset    Size    Description
  5353.  00h  8 BYTEs    ???
  5354.  08h    WORD    offset of WORD containing number of elements in cache
  5355. --------c-2F4A10BX1234-----------------------
  5356. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  5357.     AX = 4A10h
  5358.     BX = 1234h
  5359. Desc:    pops up a message box saying that a serious error occurred and to hit
  5360.       R to retry.
  5361. Note:    this function is also supported by PC-Cache v8.0.
  5362. SeeAlso: AX=4A10h/BX=0000h
  5363. --------d-2F4A11BX0000-----------------------
  5364. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  5365.     AX = 4A11h
  5366.     BX = 0000h
  5367. Return: AX = 0000h (successful)
  5368.     BX = 444Dh ("DM")
  5369.     CL = first drive letter used by DBLSPACE (0=A:)
  5370.     CH = number of drive letters used by DBLSPACE
  5371.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  5372.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  5373.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  5374. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5375.       disk-compression software bundled with MS-DOS 6.0
  5376. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  5377. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  5378. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  5379. --------d-2F4A11BX0001-----------------------
  5380. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  5381.     AX = 4A11h
  5382.     BX = 0001h
  5383.     DL = drive number (0=A:)
  5384. Return: AX = status (see also below)
  5385.             0000h successful
  5386.             BL = host drive (bit 7 set if specified drive is compressed)
  5387.         BH = DoubleSpace sequence number
  5388.         other error code (0101h) (see below)
  5389. Note:    the compressed volume file for the specified compressed drive is
  5390.       host:\DBLSPACE.sequence
  5391. SeeAlso: AX=4A11h/BX=0000h
  5392.  
  5393. Values for status:
  5394.  0000h    successful
  5395.  0100h    bad function
  5396.  0101h    invalid drive
  5397.  0102h    not a compressed drive
  5398.  0103h    drive already swapped
  5399.  0104h    drive not swapped
  5400. --------d-2F4A11BX0002-----------------------
  5401. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  5402.     AX = 4A11h
  5403.     BX = 0002h
  5404.     DL = drive number (0=A:) of compressed drive to swap with its host
  5405. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  5406. Note:    this function is intended for use by DBLSPACE.EXE only
  5407. SeeAlso: AX=4A11h/BX=0000h
  5408. --------d-2F4A11BX0003-----------------------
  5409. INT 2F U - DBLSPACE.BIN - GET DEVICE DRIVER ENTRY POINTS
  5410.     AX = 4A11h
  5411.     BX = 0003h
  5412.         CL = drive number (0=A:) of compressed drive
  5413. Return: CL = FFh on error (not compressed drive)
  5414.        = other host drive???
  5415.         ES:SI -> device driver's strategy routine
  5416.         ES:DI -> device driver's interrupt routine
  5417. Note:    the official documentation states that this function is reserved for
  5418.       use by SMARTDRV; this function and AX=4A11h/BX=0004h allow SMARTDRV
  5419.       to apply the same device driver wrapper to DoubleSpaced drives that
  5420.       it applies to regular block devices
  5421. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  5422. --------d-2F4A11BX0004-----------------------
  5423. INT 2F U - DBLSPACE.BIN - SET DEVICE DRIVER ENTRY POINTS
  5424.     AX = 4A11h
  5425.     BX = 0004h
  5426.         CL = drive number (0=A:) of compressed drive
  5427.     ES:SI -> device driver strategy routine to call for drive
  5428.     ES:DI -> device driver interrupt routine to call for drive
  5429.     (DX???)
  5430. Return: CL = FFh on error
  5431. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5432.       disk-compression software bundled with MS-DOS 6.0
  5433. Note:    the official documentation states that this function is reserved for
  5434.       use by SMARTDRV; this function and AX=4A11h/BX=0003h allow SMARTDRV
  5435.       to apply the same device driver wrapper to DoubleSpaced drives that
  5436.       it applies to regular block devices
  5437. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  5438. --------d-2F4A11BX0005-----------------------
  5439. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  5440.     AX = 4A11h
  5441.     BX = 0005h
  5442.     DL = drive number (0=A:) to assign to new drive
  5443.     ES:SI -> activation record (see below)
  5444. Return: status returned in activation record (see below)
  5445. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  5446.  
  5447. Format of activation record:
  5448. Offset    Size    Description
  5449.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  5450.  02h    BYTE    4Dh ('M') mount command
  5451.  03h    BYTE    error code (set to FFh before calling)
  5452.          01h drive letter not available for DoubleSpace
  5453.         02h drive letter already in use
  5454.         03h no more disk units (increase MaxRemovableDrives in .INI)
  5455.         09h CVF too fragmented
  5456.  04h    BYTE    host drive number (0=A:)
  5457.  05h    ???    DISK_UNIT structure (not documented)
  5458. --------d-2F4A11BX0006-----------------------
  5459. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  5460.     AX = 4A11h
  5461.     BX = 0006h
  5462.     DL = drive number (0=A:) to unmount
  5463. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  5464. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  5465. --------d-2F4A11BX0007-----------------------
  5466. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  5467.     AX = 4A11h
  5468.     BX = 0007h
  5469.     DL = compressed drive number (0=A:)
  5470. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  5471.         0000h successful
  5472.         DS:SI -> free space record (see below)
  5473. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5474.       disk-compression software bundled with MS-DOS 6.0
  5475. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  5476.  
  5477. Format of free space record:
  5478. Offset    Size    Description
  5479.  00h    DWORD    total number of sectors in drive's sector heap
  5480.  04h    DWORD    number of free sectors in drive's sector heap
  5481. --------d-2F4A11BX0008-----------------------
  5482. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  5483.     AX = 4A11h
  5484.     BX = 0008h
  5485.     DL = compressed drive number (0=A:)
  5486. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  5487.         0000h successful
  5488.             BX = maximum entries in File Fragment heap
  5489.         CX = available entries in File Fragment heap
  5490. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  5491. --------d-2F4A11BX0009-----------------------
  5492. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  5493.     AX = 4A11h
  5494.     BX = 0009h
  5495.     DL = compressed drive number (0=A:)
  5496. Return: AX = status (see also AX=4A11h/BX=0001h)
  5497.         0000h successful
  5498.         CL = number of DISK_UNIT structures allocated
  5499.             (see AX=4A11h/BX=0005h)
  5500. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  5501. --------d-2F4A11BXFFFE-----------------------
  5502. INT 2F U - DBLSPACE.BIN - RELOCATE
  5503.     AX = 4A11h
  5504.     BX = FFFEh
  5505.     ES = segment to which to relocate DBLSPACE.BIN
  5506. Return: ???
  5507. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  5508.       in memory
  5509.     this function also unhooks and discards the code providing this
  5510.       function and AX=4A11h/BX=FFFFh
  5511. SeeAlso: AX=4A11h/BX=FFFFh
  5512. --------d-2F4A11BXFFFF-----------------------
  5513. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  5514.     AX = 4A11h
  5515.     BX = FFFFh
  5516. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  5517. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  5518.       position in memory
  5519. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  5520. --------d-2F4A12CX4D52-----------------------
  5521. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  5522.     AX = 4A12h
  5523.     CX = 4D52h ("MR")
  5524.     DX = 4349h ("CI")
  5525. Return: CX = 4943h ("IC") if installed
  5526.     DX = 524Dh ("RM") if installed
  5527.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  5528. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  5529.       called first, as the latter call is used for the first, ROM-based
  5530.       MRCI server, while this call is used for RAM-based servers which
  5531.       may be partially or entirely replacing a prior server
  5532. SeeAlso: INT 1A/AX=B001h
  5533. --------d-2F4A13-----------------------------
  5534. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  5535.     AX = 4A13h
  5536. Return: AX = 134Ah if supported
  5537.         ES:BX -> entry point record (see below)
  5538. SeeAlso: AX=4A11h/BX=0000h
  5539.  
  5540. Format of entry point record:
  5541. Offset    Size    Description
  5542.  00h    DWORD    pointer to FAR function for ???
  5543.  04h  5 BYTEs    FAR JUMP instruction to ???
  5544. --------N-2F4B-------------------------------
  5545. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  5546.     AH = 4Bh
  5547.     ???
  5548. Return: ???
  5549. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5550.       file/printer services
  5551. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  5552. --------T-2F4B01-----------------------------
  5553. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  5554.     AX = 4B01h
  5555.     CX:DX -> task switcher entry point (see AX=4B02h)
  5556.     ES:BX = 0000h:0000h
  5557. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  5558. Notes:    called by the task switcher
  5559.     this function is hooked by clients which require notification of task
  5560.       switcher activities; the call must first be passed on to the prior
  5561.       handler with registers unchanged using a simulated interrupt.     On
  5562.       return, the client must build a callback info structure and store
  5563.       the returned ES:BX in the "next" field, then return the address of
  5564.       its own callback info structure.
  5565.     a client program must add itself to the notification chain if it
  5566.       provides services to other programs; before terminating, it must
  5567.       remove itself from the chain by calling the task switcher's entry
  5568.       point with AX=0005h (see AX=4B02h)
  5569.     the task switcher entry point should not be saved, as it is subject to
  5570.       change and will be provided on any notification call
  5571.     the Windows 3.1 Standard Mode supports this API
  5572. SeeAlso: AX=160Bh,AX=4B02h
  5573.  
  5574. Format of callback info structure:
  5575. Offset    Size    Description
  5576.  00h    DWORD    pointer to next callback info structure
  5577.  04h    DWORD    pointer to notification function (see below)
  5578.  08h    DWORD    reserved
  5579.  0Ch    DWORD    address of zero-terminated list of API info structures
  5580.         (see AX=4B02h)
  5581.  
  5582. Notification function is called with:
  5583.     AX = function
  5584.         0000h switcher initialization
  5585.         Return: AX = 0000h if OK to load
  5586.                = nonzero to abort task switcher
  5587.         0001h query suspend
  5588.         BX = session ID
  5589.         Return: AX = 0000h if OK to switch session
  5590.                = 0001h if not
  5591.         0002h suspend session
  5592.         BX = session ID
  5593.         interrupts disabled
  5594.         Return: AX = 0000h if OK to switch session
  5595.                = 0001h if not
  5596.         0003h activate session
  5597.         BX = session ID
  5598.         CX = session status flags
  5599.             bit 0: set if first activation of session
  5600.             bits 1-15: reserved (0)
  5601.         interrupts disabled
  5602.         Return: AX = 0000h
  5603.         0004h session active
  5604.         BX = session ID
  5605.         CX = session status flags
  5606.             bit 0: set if first activation of session
  5607.             bits 1-15: reserved (0)
  5608.         Return: AX = 0000h
  5609.         0005h create session
  5610.         BX = session ID
  5611.         Return: AX = 0000h if OK to create session
  5612.                = 0001h if not
  5613.         0006h destroy session
  5614.         BX = session ID
  5615.         Return: AX = 0000h
  5616.         0007h switcher termination
  5617.         BX = flags
  5618.             bit 0: set if calling switcher is only switcher loaded
  5619.             bits 1-15: reserved (0)
  5620.         Return: AX = 0000h
  5621.     ES:DI -> task switcher entry point (see AX=4B02h)
  5622. Notes:    function 0000h is generally called by the program which controls or
  5623.       invokes the task switcher, rather than by the task switcher itself;
  5624.       the entry point supplied to this function is not necessarily the
  5625.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  5626.       any client indicates that loading is not possible, all clients will
  5627.       be called with function 0007h; thus it is possible for a client to
  5628.       receive a termination notice without a corresponding initialization
  5629.       notice.
  5630.     except for functions 0002h and 0003h, the notification handler is
  5631.       called with interrupts enabled and may make any INT 21h function
  5632.       call; interrupts must not be enabled in functions 0002h and 0003h
  5633.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  5634.       point is no longer valid
  5635. --------T-2F4B02BX0000-----------------------
  5636. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  5637.     AX = 4B02h
  5638.     BX = 0000h
  5639.     ES:DI = 0000h:0000h
  5640. Return: ES:DI = 0000h:0000h if task switcher not loaded
  5641.     ES:DI -> task switcher entry point (see below) if loaded
  5642.         AX = 0000h
  5643. Notes:    the returned entry point is that for the most-recently loaded task
  5644.       switcher; the entry points for prior task switchers may be determined
  5645.       with the "get version" call (see below)
  5646.     this function is supported by PC Tools v8+ CPTASK
  5647. SeeAlso: AX=4A05h,AX=4B03h
  5648.  
  5649. Call task switcher entry point with:
  5650.     AX = 0000h get version
  5651.         Return: CF clear if successful
  5652.                 AX = 0000h
  5653.                 ES:BX -> task switcher version struct (see below)
  5654.             CF set if unsupported function
  5655.     AX = 0001h test memory region
  5656.         ES:DI -> first byte to be tested
  5657.         CX = size of region to test
  5658.         Return: CF clear if successful
  5659.                 AX = memory type of tested region
  5660.                 0000h global
  5661.                 0001h global and local
  5662.                 0002h local (replaced on session switch)
  5663.             CF set if unsupported function
  5664.     AX = 0002h suspend switcher
  5665.         ES:DI -> new task switcher's entry point
  5666.         Return: CF clear if successful
  5667.                 AX = state
  5668.                 0000h switcher has been suspended
  5669.                 0001h switcher not suspended, new switcher must
  5670.                     abort
  5671.                 0002h switcher not suspended, but new switcher
  5672.                     may run anyway
  5673.             CF set if unsupported function
  5674.     AX = 0003h resume switcher
  5675.         ES:DI -> new task switcher's entry point
  5676.         Return: CF clear if successful
  5677.                 AX = 0000h
  5678.             CF set if unsupported function
  5679.     AX = 0004h hook notification chain
  5680.         ES:DI -> callback info structure to be added to chain
  5681.             (see AX=4B01h)
  5682.         Return: CF clear if successful
  5683.                 AX = 0000h
  5684.             CF set if unsupported function
  5685.     AX = 0005h unhook notification chain
  5686.         ES:DI -> callback info structure to be removed from chain
  5687.             (see AX=4B01h)
  5688.         Return: CF clear if successful
  5689.                 AX = 0000h
  5690.             CF set if unsupported function
  5691.     AX = 0006h query API support
  5692.         BX = asynchronous API identifier
  5693.         Return: CF clear if successful
  5694.                 AX = 0000h
  5695.                 ES:BX -> API info structure (see below) for the
  5696.                     client which provides the highest
  5697.                     level of 
  5698.             CF set if unsupported function
  5699.  
  5700. Format of task switcher version structure:
  5701. Offset    Size    Description
  5702.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  5703.  02h    WORD    minor version of supported protocol
  5704.  04h    WORD    major version of task switcher
  5705.  06h    WORD    minor version of task switcher
  5706.  08h    WORD    task switcher ID (see AX=4B03h)
  5707.  0Ah    WORD    operation flags
  5708.         bit 0: set if task switcher disabled
  5709.         bits 1-15: reserved (0)
  5710.  0Ch    DWORD    pointer to ASCIZ task switcher name
  5711.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  5712.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  5713.  
  5714. Format of API info structure:
  5715. Offset    Size    Description
  5716.  00h    WORD    size of structure in bytes (000Ah)
  5717.  02h    WORD    API identifier
  5718.         0001h NetBIOS
  5719.         0002h 802.2
  5720.         0003h TCP/IP
  5721.         0004h LAN Manager named pipes
  5722.         0005h Novell NetWare IPX
  5723.  04h    WORD    major version \ of highest version of API for which the support
  5724.  06h    WORD    minor version / level specified in the next field is provided
  5725.  08h    WORD    support level
  5726.         0001h minimal support
  5727.         0002h API-level support
  5728.         0003h switcher compatibility
  5729.         0004h seamless compatibility
  5730. --------T-2F4B03-----------------------------
  5731. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  5732.     AX = 4B03h
  5733.     ES:DI -> task switcher entry point (see AX=4B02h)
  5734. Return: AX = 0000h
  5735.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  5736. Notes:    if a task switcher has determined that it is the first to be loaded, it
  5737.       must allocate an identifier for itself and provide this function to
  5738.       all subsequent task switchers; if it is not the first to be loaded,
  5739.       it must call this function to allocate an ID.     The switcher ID is
  5740.       used as the high four bits of all session identifiers to ensure
  5741.       unique session IDs.
  5742.     if no more switcher IDs are available, the new task switcher making the
  5743.       call must terminate or disable itself
  5744.     the task switcher providing the identifiers may call the new task
  5745.       switcher's entry point as needed
  5746.     this call is available from within DOSSHELL even if the task switcher
  5747.       is not installed
  5748.     this function is supported by PC Tools v8+ CPTASK, but appears to
  5749.       always return an ID of 0000h
  5750. SeeAlso: AX=4B02h,AX=4B04h
  5751. --------T-2F4B04-----------------------------
  5752. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  5753.     AX = 4B04h
  5754.     BX = switcher ID
  5755.     ES:DI -> task switcher entry point (see AX=4B02h)
  5756. Return: AX = 0000h
  5757.     BX = status
  5758.         0000h successful
  5759.         other error (invalid ID or ID not allocated)
  5760. Notes:    called by a task switcher when it exits, unless it was the first loaded
  5761.       and is providing the support for AX=4B03h and AX=4B04h
  5762.     the task switcher providing the identifiers may call the terminating
  5763.       task switcher's entry point as needed
  5764.     this call is available from within DOSSHELL even if the task switcher
  5765.       is not installed
  5766.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  5767.       sucessfully no matter which ID is given
  5768. SeeAlso: AX=4B02h,AX=4B03h
  5769. --------T-2F4B05-----------------------------
  5770. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  5771.     AX = 4B05h
  5772.     ES:BX = 0000h:0000h
  5773.     CX:DX -> task switcher entry point (see AX=4B02h)
  5774. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  5775. Notes:    called by task switcher
  5776.     clients with instance data should hook this call, pass it through to
  5777.       the previous handler with unchanged registers using a simulated
  5778.       interrupt.  On return, the client should create a startup info
  5779.       structure (see below), store the returned ES:BX in the "next"
  5780.       field, and return the address of the created structure in ES:BX
  5781.     all MS-DOS function calls are available from within this call
  5782. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  5783.  
  5784. Format of startup info structure:
  5785. Offset    Size    Description
  5786.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  5787.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5788.  06h    DWORD    0000h:0000h (ignored)
  5789.  0Ah    DWORD    ignored
  5790.  0Eh    DWORD    pointer to instance data records
  5791.  
  5792. Format of one instance data record in array:
  5793. Offset    Size    Description
  5794.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5795.  04h    WORD    size of instance data
  5796. --------W-2F4B20-----------------------------
  5797. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  5798.     AX = 4B20h
  5799. Return: AX = 0000h if successful
  5800.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  5801. Note:    when the Windows function ExitWindows is called with an exit code of
  5802.       44h, WIN.COM executes the program specified in the returned buffer
  5803.       and then restarts Windows
  5804.  
  5805. Format of buffer:
  5806. Offset    Size    Description
  5807.  00h 128 BYTEs    ASCIZ pathname of program to execute
  5808.  80h 128 BYTEs    commandline for program
  5809. --------N-2F4E53-----------------------------
  5810. INT 2F U - SilverNET - API
  5811.     AX = 4E53h ("SN")
  5812.     BH = major function class??? (04h and 02h are common)
  5813.     BL = subclass???
  5814.     CX = function number???
  5815.     ???
  5816. Return: AX = return value or status
  5817.     ???
  5818. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  5819.       Windows systems, by Net-Source of Santa Clara, CA.
  5820. SeeAlso: AX=B800h,AX=B809h
  5821. ----------2F53-------------------------------
  5822. INT 2F U - ???
  5823.     AH = 53h
  5824.     AL = function (0Bh, maybe others???)
  5825. Return: ???
  5826. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  5827.       and PC-Cache v8.0
  5828. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  5829. ----------2F530B-----------------------------
  5830. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  5831.     AX = 530Bh
  5832.     BX = subfunction
  5833.         0003h ???
  5834.         0004h ???
  5835.     ???
  5836. Return: ???
  5837. Note:    it appears that subfunction 0003h reads or restores the current mouse
  5838.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  5839.       the converse
  5840. ----------2F54-------------------------------
  5841. INT 2F U - ???
  5842.     AH = 54h
  5843.     AL = subfunction (00h, 01h, maybe others???)
  5844. Return: ???
  5845. Note:    called by MS Windows 3.1 POWER.DRV
  5846. SeeAlso: AH=53h
  5847. --------t-2F5453-----------------------------
  5848. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  5849.     AX = 5453h
  5850.     BX = subfunction
  5851.         00h installation check
  5852.         CX = 0000h
  5853.         DS:SI -> 8-char blank-padded name
  5854.         Return: AX = FFFFh installed
  5855.                 CX = ID number of already-installed copy
  5856.                = anything else, not installed
  5857.                 CX = ID number for TSR when installed
  5858.         01h get user parameters
  5859.         CX = TSR ID number
  5860.         Return: AX = 0000h successful
  5861.                ES:BX -> user parameter block (see below)
  5862.                = nonzero failed
  5863.         02h check if hotkey in use
  5864.         CL = scan code of hot key
  5865.         Return: AX = FFFFh hot key conflicts with another TSR
  5866.                  otherwise safe to use the hotkey
  5867.         03h replace default critical error handler
  5868.         CX = TSR ID number
  5869.         DS:SI -> new routine for INT 24h
  5870.         Return: AX = nonzero, unable to install new handler
  5871.         04h get internal data area
  5872.         CX = TSR ID number
  5873.         Return: AX = 0000h
  5874.                 ES:BX -> TSR's internal data area (see below)
  5875.                = nonzero, TSR not found
  5876.         05h set multiple hot keys
  5877.         CX = TSR ID number
  5878.         DL = number of additional hot keys to allocate
  5879.         DS:SI -> table of hot keys
  5880.             BYTE  hotkey scan code
  5881.             BYTE  hotkey shift state
  5882.             BYTE  flag value to pass to TSR (nonzero)
  5883.         Return: AX = nonzero, unable to install hot keys
  5884.         06h - 0Fh reserved
  5885.         10h enable TSR
  5886.         CX = TSR ID number
  5887.         Return: AX = nonzero, unable to enable
  5888.         11h disable TSR
  5889.         CX = TSR ID number
  5890.         Return: AX = nonzero, unable to disable
  5891.         12h unload TSR
  5892.         CX = TSR ID number
  5893.         Return: AX = nonzero, invalid TSR number
  5894.         Note: if any interrupts used by TSR have been grabbed by
  5895.             another TSR, the TesSeRact routines will wait until
  5896.             it is safe to remove the indicated TSR from memory
  5897.         13h restart TSR
  5898.         CX = TSR ID number of TSR which was unloaded but is still in
  5899.              memory
  5900.         Return: AX = nonzero, unable to restart TSR
  5901.         14h get status word
  5902.         CX = TSR ID number
  5903.         Return: AX = FFFFh invalid ID number
  5904.                = other, successful
  5905.                 BX = bit flags
  5906.         15h set status word
  5907.         CX = TSR ID number
  5908.         DX = new bit flags
  5909.         Return: AX = nonzero, unable to set status word
  5910.         16h get INDOS state at popup
  5911.         CX = TSR ID number
  5912.         Return: AX = 0000h successful
  5913.                 BX = value of INDOS flag
  5914.         17h - 1Fh reserved
  5915.         20h call user procedure
  5916.         CX = TSR ID number
  5917.         ES:DI -> user-defined data
  5918.         Return: AX = 0000h successful
  5919.         21h stuff keystrokes into keyboard buffer
  5920.         CX = TSR ID number
  5921.         DL = speed
  5922.             00h stuff keystrokes only when buffer is empty
  5923.             01h stuff up to four keystrokes per clock tick
  5924.             02h stuff up to 15 keystrokes per clock tick
  5925.         DH = scan code flag
  5926.             if zero, buffer contains alternating ASCII and scan codes
  5927.             if nonzero, buffer contains only ASCII codes
  5928.         SI = number of keystrokes
  5929.         ES:DI -> buffer to stuff
  5930.         Return: AX = 0000h success
  5931.                  F0F0h user aborted with ^C or ^Break
  5932.                  other unable to stuff keystrokes
  5933.         22h (v1.10) trigger popup
  5934.         CX = TSR ID number
  5935.         Return: AX = 0000h success, TSR will either pop up or beep to
  5936.                    indicate that it is unable to pop up
  5937.                  nonzero invalid ID number
  5938.         23h (v1.10) invoke TSR's background function
  5939.         CX = TSR ID number
  5940.         Return: AX = 0000h success
  5941.                  FFFFh not safe to call background function
  5942.                  nonzero invalid ID number
  5943.         24h - 2Fh reserved
  5944. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  5945.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  5946.       do the SWAP?? programs by Innovative Data Concepts.
  5947.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  5948.       of the user parameter block) using the name "AVATAR  "
  5949. SeeAlso: AX=CAFEh,INT 2D"AMIS"
  5950. Index:    installation check;TesSeRact TSR interface
  5951.  
  5952. Format of User Parameter Block:
  5953. Offset    Size    Description
  5954.  00h  8 BYTEs    blank-padded TSR name
  5955.  08h    WORD    TSR ID number
  5956.  0Ah    DWORD    bitmap of supported functions
  5957.  0Eh    BYTE    scan code of primary hotkey
  5958.             00h = pop up when shift states match
  5959.             FFh = no popup (if shift state also FFh)
  5960.  0Fh    BYTE    shift state of primary hotkey
  5961.             FFh = no popup (if scan code also FFh)
  5962.  10h    BYTE    number of secondary hotkeys
  5963.  11h    DWORD    pointer to extra hotkeys set by func 05h
  5964.  15h    WORD    current TSR status flags
  5965.  17h    WORD    PSP segment of TSR
  5966.  19h    DWORD    DTA for TSR
  5967.  1Dh    WORD    default DS for TSR
  5968.  1Fh    DWORD    stack at popup
  5969.  23h    DWORD    stack at background invocation
  5970.  
  5971. Format of TSR internal data area:
  5972. Offset    Size    Description
  5973.  00h    BYTE    revision level of TesSeRact library
  5974.  01h    BYTE    type of popup in effect
  5975.  02h    BYTE    INT 08 occurred since last invocation
  5976.  03h    BYTE    INT 13 occurred since last invocation
  5977.  04h    BYTE    active interrupts
  5978.  05h    BYTE    active soft interrupts
  5979.  06h    BYTE    DOS major version
  5980.  07h    BYTE    how long to wait before popping up
  5981.  08h    DWORD    pointer to INDOS flag
  5982.  0CH    DWORD    pointer to DOS critical error flag
  5983.  10h    WORD    PSP segment of interrupted program
  5984.  12h    WORD    PSP segment of prog interrupted by INT 28
  5985.  14h    DWORD    DTA of interrupted program
  5986.  18h    DWORD    DTA of program interrupted by INT 28
  5987.  1Ch    WORD    SS of interrupted program
  5988.  1Eh    WORD    SP of interrupted program
  5989.  20h    WORD    SS of program interrupted by INT 28
  5990.  22h    WORD    SP of program interrupted by INT 28
  5991.  24h    DWORD    INT 24 of interrupted program
  5992.  28h  3 WORDs    DOS 3+ extended error info
  5993.  2Eh    BYTE    old BREAK setting
  5994.  2Fh    BYTE    old VERIFY setting
  5995.  30h    BYTE    were running MS WORD 4.0 before popup
  5996.  31h    BYTE    MS WORD 4.0 special popup flag
  5997.  32h    BYTE    enhanced keyboard call in use
  5998.  33h    BYTE    delay for MS WORD 4.0
  5999. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  6000.     DWORD    old interrupt vector
  6001.     BYTE    interrupt number
  6002.     WORD    offset in TesSeRact code segment of new interrupt handler
  6003. --------l-2F5500-----------------------------
  6004. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  6005.     AX = 5500h
  6006. Return: AX = 0000h
  6007.     DS:SI -> entry point table
  6008. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  6009.       been moved into the HMA; only the primary COMMAND.COM retains this
  6010.       portion
  6011.     procedures called from a dispatcher in COMMAND's resident portion;
  6012.       most assume that the segment address of the resident portion is on
  6013.       the stack and are thus not of general use
  6014. --------R-2F5600DXFFFF-----------------------
  6015. INT 2F - INTERLNK - INSTALLATION CHECK
  6016.     AX = 5600h
  6017.     DX = FFFFh
  6018.     BL = instance number (00h = any, 01h = first loaded, etc.)
  6019. Return: AL = FFh if installed
  6020.         BL = instance number
  6021.         CX = ???
  6022.         DX = resident CS
  6023. SeeAlso: AX=5601h,AX=5602h
  6024. --------R-2F5601DXFFFF-----------------------
  6025. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  6026.     AX = 5601h
  6027.     DX = FFFFh
  6028.     BH = drive number (0=A:)
  6029. Return: (as for AL=00h if redirected drive)
  6030. SeeAlso: AX=5600h
  6031. --------R-2F5602DXFFFF-----------------------
  6032. INT 2F - INTERLNK - GET ???
  6033.     AX = 5602h
  6034.     DX = FFFFh
  6035. Return: CX = ???
  6036. SeeAlso: AX=5600h
  6037. --------v-2F6282-----------------------------
  6038. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  6039.     AX = 6282h
  6040.     CX:DX -> ??? or 0000h:0000h
  6041.     DI = 0000h ???
  6042.          FFFFh ???
  6043.          other segment of ???
  6044. Return: BX = 0062h
  6045. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  6046.       (DATAMON only)
  6047. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  6048. --------v-2F6284BX0000-----------------------
  6049. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  6050.     AX = 6284h
  6051.     BX = 0000h
  6052.     CX = 0000h
  6053. Return: AX = segment of resident code
  6054.     BX = 5555h
  6055.     CX = 5555h
  6056. --------v-2F6284BX0001-----------------------
  6057. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6058.     AX = 6284h
  6059.     BX = 0001h
  6060.     CX = 0001h
  6061. Return: AX:BX -> ???
  6062.     CX = BX
  6063. --------v-2F6284BX0002-----------------------
  6064. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6065.     AX = 6284h
  6066.     BX = 0002h
  6067.     CX = 0002h
  6068. Return: AX = ???
  6069.     BX = ???
  6070.     CX = AX
  6071.     DX = BX
  6072. --------v-2F6284BX0003-----------------------
  6073. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  6074.     AX = 6284h
  6075.     BX = 0003h
  6076.     CX = flags
  6077.         bit 12: ???
  6078.         10: ???
  6079.          5: ???
  6080.          3: ???
  6081.     DX = flags
  6082.         bit 15: ???
  6083. --------v-2F6284BX0004-----------------------
  6084. INT 2F U - PC Tools v8.0+ DATAMON - ???
  6085.     AX = 6284h
  6086.     BX = 0004h
  6087.     CX = 0004h
  6088. Return: AX = 5555h
  6089.     BX = ??? (0800h)
  6090.     CX = ??? (FCCCh)
  6091. --------V-2F6400-----------------------------
  6092. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  6093.     AX = 6400h
  6094. Return: AL = 00h not installed
  6095.          FFh installed
  6096. Program: SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  6097. SeeAlso: INT 10/AX=5555h
  6098. ----------2F7000------------------------------
  6099. INT 2F - License Service API - INSTALLATION CHECK
  6100.     AX = 7000h
  6101.     CX = license server index (0000h to 001Fh)
  6102. Return: AL = status
  6103.         00h not installed
  6104.         FFh installed
  6105. Notes:    The License Service API is being maintained by Microsoft but is being
  6106.       supported by a large number of companies including Apple, Banyan,
  6107.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  6108.       and Wordperfect (not a complete list!)
  6109.     Each license service provider must search for the next free index
  6110.       slot to use
  6111. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  6112. ----------2F7001------------------------------
  6113. INT 2F - License Service API - REQUEST LICENSE
  6114.     AX = 7001h
  6115.     CX = license server index (0000h to 001Fh)
  6116.     DS:DX -> SLSREQEUST structure (see below)
  6117. Return: AX = status
  6118.         0000h success
  6119.         else  provider error code
  6120.     ES:BX = provider specific handle for the license context
  6121. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  6122.  
  6123. Format of SLSREQUEST structure:
  6124. Offset    Size    Description
  6125.  00h    DWORD    (return) status code
  6126.  04h    DWORD    (return) handle identifying context
  6127.  08h    DWORD    (call) address of Publisher string
  6128.  0Ch    DWORD    (call) address of Product string
  6129.  10h    DWORD    (call) address of Version string
  6130.  14h    DWORD    units required
  6131.  18h    DWORD    address of comment string
  6132.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  6133.  
  6134. Format of SLSCHALLENGE structure:
  6135. Offset    Size    Description
  6136.  00h    DWORD    algorithm (currently always 1)
  6137.  04h    DWORD    secret to be challenged (1-255)
  6138.  08h    DWORD    size of challenge in bytes (1-255)
  6139.  0Ch  N BYTEs    challenge data
  6140. ----------2F7002------------------------------
  6141. INT 2F - License Service API - RELEASE LICENSE
  6142.     AX = 7002h
  6143.     CX = license server index (0000h to 001Fh)
  6144.     DS:DX -> SLSRELEASE structure (see below)
  6145.     ES:BX = provider specific handle for the license context
  6146. Return: AL = status
  6147.         00h not installed
  6148.         FFh installed
  6149. SeeAlso: AX=7001h,AX=7005h
  6150.  
  6151. Format of SLSRELEASE structure:
  6152. Offset    Size    Description
  6153.  00h    DWORD    handle indentifying license context
  6154.  04h    DWORD    total units consumed
  6155.  08h    DWORD    address of comment string
  6156. ----------2F7003------------------------------
  6157. INT 2F - License Service API - UPDATE
  6158.     AX = 7003h
  6159.     CX = license server index (0000h to 001Fh)
  6160.     DS:DX -> SLSUPDATE structure
  6161.     ES:BX = provider specific handle for the license context
  6162. Return: AL = status
  6163.         00h not installed
  6164.         FFh installed
  6165. SeeAlso: AX=7004h,AX=7005h
  6166.  
  6167. Format of SLSUPDATE structure:
  6168. Offset    Size    Description
  6169.  00h    DWORD    (return) status code
  6170.  04h    DWORD    (call) handle identifying license context
  6171.  08h    DWORD    (call) total units consumed
  6172.  0Ch    DWORD    additional units required
  6173.  10h    DWORD    address of comment string
  6174.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  6175. ----------2F7004------------------------------
  6176. INT 2F - License Service API - GET ERROR
  6177.     AX = 7004h
  6178.     CX = license server index (0000h to 001Fh)
  6179.     DS:DX -> SLSGETERROR structure (see below)
  6180.     ES:BX = provider specific handle for the license context
  6181. Return: AL = status
  6182.         00h not installed
  6183.         FFh installed
  6184. SeeAlso: AX=7000h,AX=7001h
  6185.  
  6186. Format of SLSGETERROR structure:
  6187. Offset    Size    Description
  6188.  00h    DWORD    (return) status code
  6189.  04h    DWORD    handle identifying license context
  6190.  08h    DWORD    error code
  6191.  0Ch    DWORD    buffer size in bytes
  6192.  10h  N BYTEs    data buffer
  6193. ----------2F7005------------------------------
  6194. INT 2F - License Service API - QUERY LICENSE
  6195.     AX = 7005h
  6196.     CX = license server index (0000h to 001Fh)
  6197.     DS:DX -> SLSQUERY structure (see below)
  6198.     ES:BX = provider specific handle for the license context
  6199. Return: AL = status
  6200.         00h not installed
  6201.         FFh installed
  6202. SeeAlso: AX=7001h,AX=7002h
  6203.  
  6204. Format of SLSQUERY structure:
  6205. Offset    Size    Description
  6206.  00h    DWORD    (return) status code
  6207.  04h    DWORD    handle identifying license context
  6208.  08h    DWORD    information index
  6209.  0Ch    DWORD    buffer size in bytes
  6210.  10h  N BYTEs    data buffer
  6211. --------d-2F7200-----------------------------
  6212. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  6213.     AX = 7200h
  6214. Return: AL = FFh if installed
  6215.         ES = segment of device driver header (see below)
  6216. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  6217.  
  6218. Format of device driver header:
  6219. Offset    Size    Description
  6220.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  6221.  0Ah    BYTE    number of subunits (drives) supported by driver
  6222.  0Bh  3 BYTEs    signature "SRD"
  6223.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  6224.  12h  4 BYTEs    ASCII driver version string "N.NN"
  6225.  16h    BYTE    00h
  6226.  17h    BYTE    configuration format version (currently 00h)
  6227.  18h    WORD    offset of drive configuration data
  6228. --------N-2F7A00-----------------------------
  6229. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  6230.     AX = 7A00h
  6231. Return: AL = 00h not installed
  6232.        = FFh installed
  6233.         ES:DI -> FAR entry point for routines accessed exclusively
  6234.             through INT 7A in NetWare versions through 2.0a.  Call
  6235.             with same values as INT 7A
  6236. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  6237. --------N-2F7A10-----------------------------
  6238. INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS
  6239.     AX = 7A10h
  6240. Return: DH = major TBMI version number
  6241.     DL = minor TBMI version number
  6242.     CX = segment address of TBMI resident part
  6243.     BX = status word of TBMI
  6244.         bit 0: INT2F intercepted by TBMI
  6245.         bit 1: INT7A intercepted by TBMI
  6246.         bit 2: INT64 intercepted by TBMI
  6247.         bits 3-14: reserved or unused ???
  6248.         bit 15: outstanding task ID was detected
  6249. Note:    TBMI is the Task-Switched Buffer Manager Interface
  6250. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  6251. --------N-2F7A11-----------------------------
  6252. INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS
  6253.     AX = 7A11h
  6254. Return: ES:BX -> old INT 2F handler
  6255.     DS:DX -> TBMI INT 2F handler
  6256. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h
  6257. --------N-2F7A12-----------------------------
  6258. INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS
  6259.     AX = 7A12h
  6260. Return: ES:BX -> old INT 64 handler
  6261.     DS:DX -> TBMI INT 64 handler
  6262. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  6263. --------N-2F7A13-----------------------------
  6264. INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS
  6265.     AX = 7A13h
  6266. Return: ES:BX = old INT 7A handler
  6267.     DS:DX = TBMI INT 7A handler
  6268. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  6269. --------N-2F7A14-----------------------------
  6270. INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS
  6271.     AX = 7A14h
  6272.     CX = statistic to retrieve
  6273.         0000h available diagnostic functions???
  6274.         Return: CX = maximum available function??? (000Ch for v2.0)
  6275.         0001h buffers in use
  6276.         Return: CX = TBMI buffers currently in use
  6277.         0002h maximum buffers used
  6278.         Return: CX = maximum number of buffers ever in use
  6279.         0003h unavailable buffers
  6280.         Return: CX = count of unavailable TBMI buffers
  6281.         0004h old interrupt usage
  6282.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  6283.                 INT 64, and INT 7A
  6284.         0005h far call usage
  6285.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  6286.                 including internal accesses)
  6287.         0006h task buffering
  6288.         Return: CX = TBMI task buffering status (enabled/disabled or
  6289.                 disable/enable switch count???)
  6290.         0007h current task ID
  6291.         Return: CX = TBMI current task ID number (0000h if ???)
  6292.         0008h outstanding ID count
  6293.         Return: CX = number of outstanding TBMI IDs
  6294.         0009h configured ECBs
  6295.         Return: CX = number of TBMI Event Control Blocks configured
  6296.         000Ah configured data ECBs
  6297.         Return: CX = number of TBMI data ECBs configured
  6298.         000Bh configured sockets
  6299.         Return: CX = number of TBMI sockets configured (from NETCFG)
  6300.         000Ch current sockets
  6301.         Return: CX = number of TBMI sockets currently in use
  6302. SeeAlso: AX=7A10h
  6303. --------N-2F7A15-----------------------------
  6304. INT 2F - Novell NetWare - TBMI v2.0 - RESERVED
  6305.     AX = 7A15h to 7A1Bh
  6306. Note:    these calls perform the equivalent of an IRET
  6307. --------N-2F7A1C-----------------------------
  6308. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6309.     AX = 7A1Ch
  6310.     BP = ???
  6311.     CX:DX = ???
  6312. Return: AX = 70FFh
  6313. --------N-2F7A1D-----------------------------
  6314. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6315.     AX = 7A1Dh
  6316.     ???
  6317. Return: ???
  6318. --------N-2F7A1E-----------------------------
  6319. INT 2F - Novell NetWare - TBMI v2.0 - ???
  6320.     AX = 7A1Eh
  6321.     ???
  6322. Return: ???
  6323. --------N-2F7A20BX0000-----------------------
  6324. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  6325.     AX = 7A20h
  6326.     BX = 0000h
  6327. Return: AX = 0000h on success
  6328.         ES:BX -> far call address for DOS Requester
  6329. Note:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  6330.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  6331.       is backward compatible with NetWare 2.1x through 3.11 servers as
  6332.       well.  Note that there was a NetWare 4.0 in the early 1980's, which
  6333.       can cause confusion.
  6334. --------N-2F7A40-----------------------------
  6335. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  6336.     AX = 7A40h
  6337. Return: AX = 7AFFh if installed
  6338.         BX = ???
  6339.             bit 0: ???
  6340.         bit 1: ???
  6341.         bits 15-2: ???
  6342.         CX = ??? (0401h)
  6343.         DX = 0000h
  6344.         ES:DI -> entry point for ???
  6345. SeeAlso: AX=7A41h
  6346. --------N-2F7A41-----------------------------
  6347. INT 2F - Novell NetWare - TCP/IP Protocol Stack - ???
  6348.     AX = 7A41h
  6349.     ES:DI -> ???
  6350. Return: AX = 7AFFh if supported
  6351.         BX = ???
  6352.         CX = ??? (0401h)
  6353.         DX = 0000h
  6354.         SI = ???
  6355.         ES:DI -> entry point for ???
  6356. SeeAlso: AX=7A40h
  6357. --------N-2F7A4DBX0001-----------------------
  6358. INT 2F - Novell Netware - ???
  6359.     AX = 7A4Dh
  6360.     BX = 0001h
  6361.     ES:DI -> ???
  6362. Return: AL = FFh if ???
  6363.         ES:DI -> ???
  6364. Note:    called by NETBIOS.EXE v3.01
  6365. --------N-2F7A80-----------------------------
  6366. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  6367.     AX = 7A80h
  6368. Return: nothing
  6369. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  6370.       TSRs that it is unsafe to call the shell in the future.
  6371.     must be passed through so that all interested programs see the exit
  6372.     on receiving this call, IPXODI clears an internal pointer to a
  6373.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  6374.       0000h:0000h and stops calling it
  6375. SeeAlso: AX=7A81h
  6376. --------N-2F7A81-----------------------------
  6377. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  6378.     AX = 7A81h
  6379.     CX:DX -> shell's INT 21h entry point
  6380. Return: nothing
  6381. Notes:    the shell calls this function as it loads to allow interested TSRs
  6382.       and drivers to make a local copy of the shell's entry point
  6383.     must be passed through so that all interested programs see it
  6384. --------N-2F7A85-----------------------------
  6385. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  6386.     AX = 7A85h
  6387.     CX = broadcast server number
  6388. Return: CX = 0000h if broadcast message handled by another program
  6389.     CX unchanged if broadcast not handled
  6390. --------N-2F7A90-----------------------------
  6391. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  6392.     AX = 7A90h
  6393. Return: AL = 00h if present
  6394.         BX = ???
  6395.         CX = PSP segment of NETBIOS resident code
  6396. SeeAlso: AX=7AFEh
  6397. --------N-2F7AF0-----------------------------
  6398. INT 2F - Novell Netware - DOSNP.EXE v1.30G - INSTALLATION CHECK
  6399.     AX = 7AF0h
  6400. Return: AL = FFh if present
  6401.         ES = 7AF0h
  6402.         CX = PSP segment of resident code
  6403. --------N-2F7AFE-----------------------------
  6404. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  6405.     AX = 7AFEh
  6406. Return: AL = FFh if present
  6407.         ES = (data???) segment of DOSNP
  6408. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  6409.        NetWare
  6410. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  6411.       present
  6412. SeeAlso: AX=7A90h
  6413. --------N-2F7AFFBX0000-----------------------
  6414. INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???
  6415.     AX = 7AFFh
  6416.     BX = 0000h
  6417.     CX = 4E65h ("Ne")
  6418.     DX = 7457h ("tW")
  6419.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  6420. Return: AL = FFh if installed
  6421.         CX = configured sockets (14h)
  6422.         DS:SI -> data table ???
  6423.         ES:DI -> IPX far call handler
  6424. Note:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  6425.       of pointers to service events queue head and tail
  6426. SeeAlso: AX=7AFFh/BX=0001h
  6427. --------N-2F7AFFBX0001-----------------------
  6428. INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???
  6429.     AX = 7AFFh
  6430.     BX = 0001h
  6431.     CX = 4E65h ("Ne")
  6432.     DX = 7457h ("tW")
  6433. Return: AL = FFh if installed
  6434.         CX = ???  (8000h)
  6435.         SI = ??? (or -> ???) (0002h)
  6436.         ES:DI -> IPX far call handler
  6437.         ES:DX -> 6-byte data area ???
  6438. SeeAlso: AX=7AFFh/BX=0000h
  6439. --------d-2F7F00-----------------------------
  6440. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  6441.     AX = 7F00h
  6442. Return: AL = FFh if installed
  6443. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  6444. --------d-2F7F01-----------------------------
  6445. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  6446.     AX = 7F01h
  6447.     DS:DX -> command record (see below)
  6448. Return: AL = status
  6449.         00h successful
  6450.         else error code
  6451. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  6452. SeeAlso: INT 4F/AX=8100h
  6453.  
  6454. Format of command record:
  6455. Offset    Size    Description
  6456.  00h    BYTE    ID
  6457.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  6458.  0Bh    WORD    segment of buffer
  6459.  0Dh    WORD    offset of buffer
  6460.  0Fh    BYTE    status
  6461.  10h    BYTE    sense
  6462.  12h    WORD    count
  6463. --------d-2F7F02-----------------------------
  6464. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  6465.     AX = 7F02h
  6466. SeeAlso: AX=7F00h,AX=7F01h
  6467. --------d-2F7F03-----------------------------
  6468. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  6469.     AX = 7F03h
  6470. Return: AL = status
  6471.         00h successful
  6472.         01h unable to uninstall
  6473. SeeAlso: AX=7F00h
  6474. ----------2F7F24-----------------------------
  6475. INT 2F - Multiplex - ???
  6476.     AX = 7F24h
  6477.     ???
  6478. Return: ???
  6479. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6480. ----------2F7F26-----------------------------
  6481. INT 2F - Multiplex - ???
  6482.     AX = 7F26h
  6483.     ???
  6484. Return: ???
  6485. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6486. --------N-2F8000-----------------------------
  6487. INT 2F - EASY-NET - INSTALLATION CHECK
  6488.     AX = 8000h
  6489. Return: AL = 00h not installed
  6490.          FFh installed
  6491. Program: EASY-NET is a shareware two-machine serial-port network
  6492. --------N-2F8000-----------------------------
  6493. INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK
  6494.     AX = 8000h
  6495. Return: AL = FFh if installed
  6496.         BX = CS of resident code
  6497.         CX = ??? (03FCh)
  6498. Program: TurboNET is a NetBIOS-based file redirector and server; a
  6499.       demonstration version may be downloaded from Nanosoft's BBS
  6500. SeeAlso: AX=8100h
  6501. --------F-2F8000DX0000-----------------------
  6502. INT 2F - FaxBIOS interface - INSTALLATION CHECK
  6503.     AX = 8000h
  6504.     DX = 0000h
  6505.     DI = 0000h
  6506. Return: AL = FFh if installed
  6507.     DX:DI -> signature "FaxBiosjpc"
  6508. Note:    FaxBIOS may use any multiplex number from 80h through FFh; to determine
  6509.       whether it is installed, it is necessary to poll all multiplex
  6510.       numbers for one which returns the above signature
  6511. SeeAlso: AH=2Ah,AX=80FBh
  6512. --------N-2F8001-----------------------------
  6513. INT 2F - Nanosoft, Inc. TurboNET server - ???
  6514.     AX = 8001h
  6515.     DS:SI -> 16-byte buffer for ???
  6516. Return: AH = status
  6517.         00h successful
  6518.         01h error
  6519. Note:    makes NetBIOS calls
  6520. --------F-2F80FB-----------------------------
  6521. INT 2F - FaxBIOS interface - COMMAND SUBMISSION
  6522.     AX = 80FBh
  6523.     BX = function number (see below)
  6524.     DX:DI -> command buffer (see below)
  6525. Return: AL = FFh if submitted OK
  6526.     CX = result code (see below)
  6527. Note:    FaxBIOS may use any multiplex number from 80h through FFh
  6528. SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh
  6529.  
  6530. Values for function number:
  6531.  0001h    SYS_LOGIN
  6532.  0002h    SYS_LOGOUT
  6533.  0003h    SYS_GET_FAXAPP_INFO
  6534.  0004h    STAT_IO_GET
  6535.  0005h    STAT_FAXBIOS_GET
  6536.  0006h    PDIR_OPEN
  6537.  0007h    PDIR_CLOSE
  6538.  0008h    PDIR_READ_PERSON
  6539.  0009h    PDIR_PARTIAL_READ
  6540.  000Ah    PDIR_READ_GROUP
  6541.  000Bh    PDIR_READ_MEMBER_LIST
  6542.  000Ch    PDIR_WRITE_PERSON
  6543.  000Dh    PDIR_WRITE_GROUP
  6544.  000Eh    PDIR_DELETE_PERSON
  6545.  000Fh    PDIR_DELETE_GROUP
  6546.  0010h    PDIR_READ_GROUP_LIST
  6547.  0011h    PDIR_IN_GROUP
  6548.  0012h    PDIR_OUT_GROUP
  6549.  0013h    SCHED_OPEN
  6550.  0014h    SCHED_ADD_DEST
  6551.  0015h    SCHED_ADD_FILE
  6552.  0016h    SCHED_SET_PARAMS
  6553.  0017h    SCHED_CANCEL
  6554.  0018h    SCHED_CLOSE
  6555.  0019h    SLOG_OPEN
  6556.  001Ah    SLOG_CLOSE
  6557.  001Bh    SLOG_SHORT_ENV_STAT
  6558.  001Ch    SLOG_LONG_ENV_STAT
  6559.  001Dh    SLOG_DEST_STAT
  6560.  001Eh    SLOG_FILE_STAT
  6561.  001Fh    SLOG_CANCEL_ENV
  6562.  0020h    RLOG_OPEN
  6563.  0021h    RLOG_CLOSE
  6564.  0022h    RLOG_READ
  6565.  0023h    GRAPH_GET_FILE_TYPE
  6566.  0024h    GRAPH_EXPORT_FILE
  6567.  0025h    GRAPH_GET_LAYOUT_INFO
  6568.  0026h    GRAPH_CREATE_FILE
  6569.  0027h    GRAPH_CLOSE_FILE
  6570.  0028h    GRAPH_CREATE_PAGE
  6571.  0029h    GRAPH_WRITE
  6572.  002Ah    GRAPH_END_PAGE
  6573.  002Bh    GRAPH_OPEN_FILE
  6574.  002Ch    GRAPH_GOTO_PAGE
  6575.  002Dh    GRAPH_READ
  6576.  002Eh    IOCTL_GET
  6577.  002Fh    IOCTL_SET
  6578.  0030h    IOCTL_ANSWER_FAX
  6579.  0031h    IOCTL_DIAL
  6580.  
  6581. Values for result code:
  6582.  0000h    successful
  6583.  0001h    not prepared or servicing another client (busy)
  6584.  0002h    call failed due to sharing (LOCKED)
  6585.  0003h    logged-in client limit reached (FULL)
  6586.  0004h    transport denied (TRANSPORT_DENIED)
  6587.  0005h    not implemented (NOT_IMPLEMENTED)
  6588.  0006h    aborted while in progress (ABORTED)
  6589.  0007h    permissions denied (PERMISSION_DENIED)
  6590.  0008h    requested data is no longer valid (NO_LONGER_VALID)
  6591.  0080h    unspecified system error occurred
  6592.  0081h    an internal file was not found
  6593.  0082h    an internal file could not be created
  6594.  0083h    an internal file could not be opened
  6595.  0084h    an internal file could not be closed
  6596.  0085h    error occurred writing to an internal file
  6597.  0086h    error occurred reading from an internal file
  6598.  0087h    bad or corrupted file encountered
  6599.  0088h    an access violation occurred
  6600.  0089h    an internal file is empty
  6601.  008Ah    insufficient memory to process request
  6602.  008Bh    FaxBIOS was unable to issue a handle
  6603.  008Ch    an error internal to FaxBIOS occurred
  6604.  008Dh    no room on disk
  6605.  0100h    unspecified error accessing client file
  6606.  0101h    file not found
  6607.  0102h    creation fault
  6608.  0103h    open fault
  6609.  0104h    close fault
  6610.  0105h    write fault
  6611.  0106h    read fault
  6612.  0107h    file corrupted
  6613.  0108h    access violation
  6614.  0109h    empty file
  6615.  0200h    unspecified argument error
  6616.  0201h    bad function
  6617.  0202h    bad option
  6618.  0203h    bad structure size
  6619.  0204h    bad buffer size
  6620.  0205h    bad client ID
  6621.  0300h    unspecified error with token
  6622.  0301h    cover sheet token was invalid
  6623.  0302h    logo token was invalid
  6624.  0303h    signature token was invalid
  6625.  0304h    font token was invalid
  6626.  0305h    phone directory token was invalid
  6627.  0306h    outbound route token was invalid
  6628.  0307h    priority token was invalid
  6629.  0308h    sort token was invalid
  6630.  0309h    billing token was invalid
  6631.  0400h    unspecified handle error
  6632.  0401h    bad Phone Directory handle
  6633.  0402h    bad scheduling handle
  6634.  0403h    bad read send log handle
  6635.  0404h    bad read receive log handle
  6636.  0405h    bad graphics handle
  6637.  0500h    data passed in structure was invalid
  6638.  0501h    name field given is invalid
  6639.  0502h    phone number given is invalid
  6640.  0503h    poll code submitted is invalid
  6641.  0504h    file type constant was invalid
  6642.  0505h    BFT constant not defined or supported
  6643.  0506h    resolution not defined or supported
  6644.  0507h    page length not defined or supported
  6645.  0508h    page width not defined or supported
  6646.  0509h    date & time requested are ridiculous
  6647.  050Ah    Subject text was not an ASCIIZ string
  6648.  050Bh    From text was not an ASCIIZ string
  6649.  050Ch    requested envelope ID was not found
  6650.  050Dh    requested envelope ID is not valid
  6651.  050Eh    envelope requested was not found
  6652.  050Fh    destination index is out of range
  6653.  0510h    file index is out of range
  6654.  0511h    index into receive log is out of range
  6655.  0512h    file name specified was incomplete or invalid
  6656.  0513h    page selected was out of range
  6657.  0514h    bit width more than byte width 
  6658.  0515h    mode for open is not defined
  6659.  0516h    person index is out of range
  6660.  0517h    person ID is out of range
  6661.  0518h    group index out of range or invalid
  6662.  0519h    group ID out of range or invalid
  6663.  051Ah    range of indices to read is invalid
  6664.  051Bh    group name given is invalid
  6665.  051Ch    field_to_use is badly specified
  6666.  051Dh    predicate invalid for field specified
  6667.  0600h    unspecified client procedure error
  6668.  0601h    device of interest is not present
  6669.  0602h    device of interest has been removed
  6670.  0603h    device of interest is not responding
  6671.  0604h    device of interest is disabled
  6672.  0605h    could not dial because device was in use
  6673.  0606h    maximum destination limit exceeded
  6674.  0607h    maximum file limit exceeded
  6675.  0608h    scheduling closed with no destination
  6676.  0609h    scheduling closed with no files or poll
  6677.  060Ah    scheduling closed with no parameters specified
  6678.  060Bh    file type specified does not match file
  6679.  060Ch    file type specified is not supported
  6680.  060Dh    file submitted is not exportable
  6681.  060Eh    file type specified is not imageable
  6682.  060Fh    error converting file
  6683.  0610h    envelope could not be cancelled
  6684.  0611h    Phone Directory is full
  6685.  0612h    record is already in the Phone Directory
  6686.  0613h    selected group in Phone Directory is full
  6687.  0614h    person is already in the group
  6688.  0615h    person is not in the group & cannot be removed
  6689.  0616h    a graphics file to be created already exists
  6690.  0617h    a grphics file to be read is empty
  6691.  0618h    GRAPH_CREATE_PAGE called before GRAPH_END_PAGE
  6692.  0619h    graph read or write attempted without goto or create
  6693.  061Ah    graph page contains no data
  6694.  061Bh    Phone Directory is already open for this client
  6695.  061Ch    schedule log is already open for this client
  6696.  061Dh    receive log is aready open for this client
  6697.  061Eh    Phone Directory function requires write mode
  6698.  0800h    denied exclusive use of the API
  6699.  
  6700. Format of SYS_LOGIN command buffer:
  6701. Offset    Size    Description
  6702.  00h    WORD    structure size
  6703.  02h    WORD    function number
  6704.  04h    WORD    return code
  6705.  06h    WORD    client ID
  6706.  08h    WORD    API Major Version
  6707.  0Ah    WORD    API Minor Version
  6708.  0Ch    DWORD    reserved for manufacturer's use
  6709.  10h 22 BYTEs    manufacturer's ID
  6710.  26h    WORD    highest possible device number
  6711.  28h    WORD    maximum destinations per envelope
  6712.  2Ah    WORD    maximum files per envelope
  6713.  2Ch    WORD    FaxBIOS capabilities (see below)
  6714.  2Eh    DWORD    T.30 capabilities (see below)
  6715.  32h    WORD    IPC handle
  6716.  34h    DWORD    amount of memory needed to load
  6717.  38h    WORD    scope (00h for public, nonzero for private)
  6718.  3Ah  6 BYTEs    future expansion
  6719.  40h    WORD    structure size
  6720.  
  6721. Bitfields for FaxBIOS capabilities:
  6722.  bit 0    transmit supported
  6723.  bit 1    receive supported
  6724.  bit 2    IOCTL supported
  6725.  bit 3    IOCTL_DIAL supported
  6726.  bit 4    IOCTL_ANSWER_FAX supported
  6727.  bit 5    manual transmit supported
  6728.  bit 6    optional phone services supported
  6729.  bit 7    canonical phone objects
  6730.  bit 8    seam with next supported
  6731.  
  6732. Bitfields for T.30 capabilities:
  6733.  bit 0    low vertical resolution (minimum)
  6734.  bit 1    high vertical resolution
  6735.  bit 2    page width 107mm (4.21 in)
  6736.  bit 3    page width 151mm (5.91 in)
  6737.  bit 4    page width 215mm (8.46 in) (minimum)
  6738.  bit 5    page width 255mm (10.04 in)
  6739.  bit 6    page width 303mm (11.93 in)
  6740.  bit 7    unused
  6741.  bit 8    page length 297mm (11.69 in) (minimum)
  6742.  bit 9    page length 364mm (14.33 in)
  6743.  bit 10    page length 279mm (11 in)
  6744.  bit 11    page length unlimited
  6745.  bit 12    Group 4 resolution 300x300
  6746.  bit 13    Group 4 resolution 400x400
  6747.  bit 14    able to respond to poll from remote
  6748.  bit 15    able to poll remote
  6749.  bit 16    binary file transfer supported
  6750.  
  6751. Format of SYS_LOGOUT command buffer:
  6752. Offset    Size    Description
  6753.  00h    WORD    structure size
  6754.  02h    WORD    function number
  6755.  04h    WORD    return code
  6756.  06h    WORD    client ID
  6757.  08h    DWORD    client tag (for client's internal use)
  6758.  0Ch  6 BYTEs    future expansion
  6759.  12h    WORD    structure size
  6760.  
  6761. Format of SYS_GET_FAXAPP_INFO command buffer:
  6762. Offset    Size    Description
  6763.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6764.  0Ch 80 BYTEs    FaxBIOS data
  6765.  5Ch 80 BYTEs    default cover
  6766.  ACh 80 BYTEs    default logo
  6767.  FCh 80 BYTEs    default signature
  6768. 14Ch 80 BYTEs    default font 10
  6769. 19Ch 80 BYTEs    default font 165
  6770. 1ECh 80 BYTEs    default user font
  6771. 23Ch 80 BYTEs    default Pdir
  6772. 28Ch 80 BYTEs    default sort
  6773. 2DCh 10 BYTEs    default bill
  6774. 2E6h 10 BYTEs    default route
  6775. 2F0h 40 BYTEs    default cover sheet form
  6776. 318h 34 BYTEs    valid dial characters
  6777. 33Ah  6 BYTEs    local country code
  6778. 340h  6 BYTEs    local city or area code
  6779. 346h  6 BYTEs    future expansion
  6780. 34Ch    WORD    structure size
  6781.  
  6782. Format of STAT_IO_GET command buffer:
  6783. Offset    Size    Description
  6784.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6785.  0Ch    WORD    device number
  6786.  0Eh    WORD    current activity
  6787.  10h    WORD    number of rings (if ringing)
  6788.  12h    WORD    number of fascimiles transmitted
  6789.  14h    WORD    number of fascimiles received
  6790.  16h    WORD    status of last transmission
  6791.  18h    WORD    envelope number of last transmission
  6792.  1Ah    WORD    index of last destination in envelope
  6793.  1Ch    WORD    status of last reception
  6794.  1Eh    WORD    current page (if session in progress)
  6795.  20h 80 BYTEs    current file
  6796.  70h104 BYTEs    remote number
  6797.  D8h 20 BYTEs    last name
  6798.  ECh 20 BYTEs    first name
  6799. 100h 32 BYTEs    company name
  6800. 120h 32 BYTEs    notes
  6801. 140h    WORD    current envelope ID (if sending)
  6802. 142h    WORD    total pages in transmission (if sending)
  6803. 144h  6 BYTEs    future expansion
  6804. 14h    WORD    structure size
  6805.  
  6806. Format of STAT_FAXBIOS_GET command buffer:
  6807. Offset    Size    Description
  6808.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6809.  0Ch    WORD    status ID
  6810.  0Eh    WORD    currenty FaxBIOS function number
  6811.  10h    WORD    current Client ID being serviced
  6812.  12h    WORD    number of things to do
  6813.  14h    WORD    number of them done
  6814.  16h    WORD    number of pages to do (if any)
  6815.  18h    WORD    number of them done
  6816.  1Ah    WORD    number of files to do
  6817.  1Ch    WORD    number of them done
  6818.  1Eh 80 BYTEs    current File
  6819.  6Eh    WORD    0 if all devices are idle
  6820.  70h    WORD    number of fascimiles transmitted
  6821.  72h    WORD    number of fascimiles received
  6822.  74h    WORD    status of last transmission in system
  6823.  76h    WORD    envelope ID of last transmission
  6824.  78h    WORD    index of last destination in envelope
  6825.  7Ah    WORD    status of last reception in system
  6826.  7Ch    DWORD    time of next transmission
  6827.  80h  6 BYTEs    future expansion
  6828.  86h    WORD    structure size
  6829.  
  6830. Format of PDIR_OPEN command buffer:
  6831. Offset    Size    Description
  6832.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6833.  0Ch 80 BYTEs    Phone Directory token
  6834.  5Ch 80 BYTEs    sort order token
  6835.  ACh    WORD    open Mode (0 = read, 1 = write)
  6836.  AEh    WORD    Phone Directory handle
  6837.  B0h    WORD    number of people
  6838.  B2h    WORD    number of groups
  6839.  B4h    WORD    bitmap of fields supported by partial read
  6840.  B6h  6 BYTEs    future expansion
  6841.  BCh    WORD    structure size
  6842.  
  6843. Format of PDIR_CLOSE command buffer:
  6844. Offset    Size    Description
  6845.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6846.  0Ch    WORD    Phone Directory handle
  6847.  0Eh  6 BYTEs    future expansion
  6848.  14h    WORD    structure size
  6849.  
  6850. Format of PDIR_READ_PERSON command buffer:
  6851. Offset    Size    Description
  6852.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6853.  0Ch    WORD    Phone Directory handle
  6854.  0Eh    WORD    retrieve by index
  6855.  10h    WORD    person ID or index
  6856.  12h    WORD    how many groups person is in
  6857.  14h    WORD    person ID
  6858.  16h 20 BYTEs    last name
  6859.  2Ah 20 BYTEs    first name
  6860.  3Eh 32 BYTEs    company
  6861.  5Eh 32 BYTEs    notes
  6862.  7Eh  6 BYTEs    FAX country code
  6863.  84h  6 BYTEs    FAX city/area code
  6864.  8Ah 14 BYTEs    FAX local number
  6865.  98h 14 BYTEs    FAX extension
  6866.  A6h 24 BYTEs    reserved
  6867.  BEh  6 BYTEs    voice country code
  6868.  C4h  6 BYTEs    voice city/area code
  6869.  CAh 14 BYTEs    voice local number
  6870.  D8h 14 BYTEs    voice extension
  6871.  E6h 24 BYTEs    reserved
  6872.  FEh 10 BYTEs    outbound routing information
  6873. 108h 10 BYTEs    billing information, credit card etc
  6874. 112h    DWORD    remote FAX capabilities
  6875. 116h 21 BYTEs    T.30 poll code of FAX number
  6876. 12Bh 15 BYTEs    reserved
  6877. 13Ah  6 BYTEs    future expansion
  6878. 140h    WORD    structure size
  6879.  
  6880. Format of SCHED_OPEN, SCHED_CANCEL command buffer:
  6881. Offset    Size    Description
  6882.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6883.  0Ch    WORD    scheduler handle
  6884.  0Eh  6 BYTEs    future expansion
  6885.  14h    WORD    structure size
  6886.  
  6887. Format of SCHED_ADD_DEST command buffer:
  6888. Offset    Size    Description
  6889.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6890.  0Ch    WORD    schedule handle
  6891.  0Eh    WORD    device number if manual send wanted
  6892.  10h    WORD    non-zero if poll desired
  6893.  12h    WORD    person ID
  6894.  14h 20 BYTEs    last name
  6895.  28h 20 BYTEs    first name
  6896.  3Ch 32 BYTEs    company
  6897.  5Ch 32 BYTEs    notes
  6898.  7Ch  6 BYTEs    FAX country code
  6899.  82h  6 BYTEs    FAX city/area code
  6900.  88h 14 BYTEs    FAX local number
  6901.  96h 14 BYTEs    FAX extension
  6902.  A4h 24 BYTEs    reserved
  6903.  BCh  6 BYTEs    voice country code
  6904.  C2h  6 BYTEs    voice city/area code
  6905.  C8h 14 BYTEs    voice local number
  6906.  D6h 14 BYTEs    voice extension
  6907.  E4h 24 BYTEs    reserved
  6908.  FCh 10 BYTEs    outbound routing information
  6909. 106h 10 BYTEs    billing information, credit card etc
  6910. 110h    DWORD    remote FAX capabilities
  6911. 114h 21 BYTEs    T.30 poll code of FAX number
  6912. 129h 15 BYTEs    reserved
  6913. 138h  6 BYTEs    future expansion
  6914. 13Eh    WORD    structure size
  6915.  
  6916. Format of SCHED_ADD_FILE command buffer:
  6917. Offset    Size    Description
  6918.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6919.  0Ch    WORD    schedule handle
  6920.  0Eh    WORD    file type
  6921.         0000h unidentified
  6922.         0001h native file format
  6923.         0002h ASCII
  6924.         0003h FaxBIOS Tiff Class F
  6925.  10h 80 BYTEs    file name
  6926.  60h 80 BYTEs    font token
  6927.  B0h    WORD    conversion options bitmap
  6928.  B2h    WORD    resolution
  6929.         0000h standard 98 lines per inch, 204 dpi
  6930.         0001h fine 196 lines per inch, 204 dpi
  6931.         0002h Group4 300 dpi
  6932.         0003h Group4 400 dpi
  6933.  B4h    WORD    page length
  6934.         0000h 279 mm (11 in)
  6935.         0001h 297 mm (11.69 in)
  6936.         0002h 364 mm (14.33 in)
  6937.         0003h unlimited
  6938.  B6h    WORD    page width
  6939.         0000h 215 mm (8.46 in)
  6940.         0001h 255 mm (10.04 in)
  6941.         0002h 303 mm (11.93 in)
  6942.         0003h 151 mm (5.91 in)
  6943.         0004h 107 mm (4.21 in)
  6944.  B8h    WORD    binary file transfer specification
  6945.         0000h only as FAX
  6946.         0001h only as file (for non-faxable files)
  6947.         0002h as file when possible else FAX
  6948.  BAh    WORD    seam flag (nonzero for seam with next)
  6949.  BCh    WORD    delete flag (nonzero to delete when done)
  6950.  BEh  6 BYTEs    future expansion
  6951.  C4h    WORD    structure size
  6952.  
  6953. Format of SCHED_SET_PARAMS command buffer:
  6954. Offset    Size    Description
  6955.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6956.  0Ch    WORD    scheduler handle
  6957.  0Eh    DWORD    time to send
  6958.  10h 10 BYTEs    priority token
  6959.  1Ch 80 BYTEs    logo file token
  6960.  6Ch 80 BYTEs    signature file token
  6961.  BCh 80 BYTEs    cover page token
  6962. 10Ch 40 BYTEs    Subject text
  6963. 134h 40 BYTEs    From text
  6964. 15Ch    WORD    user ID
  6965. 15Eh  6 BYTEs    future expansion
  6966. 164h    WORD    structure size
  6967.  
  6968. Format of SCHED_CLOSE command buffer:
  6969. Offset    Size    Description
  6970.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6971.  0Ch    WORD    scheduler handle
  6972.  0Eh    WORD    envelope ID generated
  6973.  10h  6 BYTEs    future expansion
  6974.  16h    WORD    structure size
  6975.  
  6976. Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer:
  6977. Offset    Size    Description
  6978.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6979.  0Ch    WORD    log handle
  6980.  0Eh    WORD    number of entries 
  6981.  10h  6 BYTEs    future expansion
  6982.  16h    WORD    structure size
  6983.  
  6984. Format of GRAPH_GET_FILE_TYPE command buffer:
  6985. Offset    Size    Description
  6986.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  6987.  0Ch 80 BYTEs    filename
  6988.  5Ch    WORD    file type
  6989.         0000h unidentified
  6990.         0001h native file format
  6991.         0002h ASCII
  6992.         0003h FaxBIOS Tiff Class F
  6993.  5Eh    WORD    bitmap of supported capabilities
  6994.  60h  6 BYTEs    future expansion
  6995.  66h    WORD    structure size
  6996.  
  6997. Format of GRAPH_CREATE_FILE command buffer:
  6998. Offset    Size    Description
  6999.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7000.  0Ch 80 BYTEs    filename
  7001.  5Ch    WORD    graph handle
  7002.  5Eh  6 BYTEs    future expansion
  7003.  64h    WORD    structure size
  7004.  
  7005. Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer:
  7006. Offset    Size    Description
  7007.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7008.  0Ch    WORD    graph handle
  7009.  0Eh  6 BYTEs    future expansion
  7010.  14h    WORD    structure size
  7011.  
  7012. Format of GRAPH_CREATE_PAGE command buffer:
  7013. Offset    Size    Description
  7014.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7015.  0Ch    WORD    graph handle
  7016.  0Eh    WORD    resolution
  7017.  10h    WORD    page width
  7018.  12h  6 BYTEs    future expansion
  7019.  18h    WORD    structure size
  7020.  
  7021. Format of GRAPH_WRITE_PAGE command buffer:
  7022. Offset    Size    Description
  7023.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7024.  0Ch    WORD    graph handle
  7025.  0Eh    DWORD    pointer to storage for image
  7026.  12h    WORD    band height in lines
  7027.  14h    WORD    width of page image in bytes
  7028.  16h    WORD    facsimile page width constant
  7029.  18h    WORD    width of page image in bits
  7030.  1Ah    WORD    number of bytes actually processed
  7031.  1Ch  6 BYTEs    future expansion
  7032.  22h    WORD    structure size
  7033.  
  7034. Format of GRAPH_OPEN_FILE command buffer:
  7035. Offset    Size    Description
  7036.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7037.  0Ch 80 BYTEs    filename
  7038.  5Ch    WORD    file type
  7039.  5Eh    WORD    graph handle
  7040.  60h    WORD    number of pages
  7041.  62h  6 BYTEs    future expansion
  7042.  68h    WORD    structure size
  7043.  
  7044. Format of GRAPH_GOTO_PAGE command buffer:
  7045. Offset    Size    Description
  7046.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7047.  0Ch    WORD    graph handle
  7048.  0Eh    WORD    page number
  7049.  10h    WORD    vertical resolution
  7050.  12h    WORD    page width
  7051.  14h    DWORD    page length
  7052.  18h  6 BYTEs    future expansion
  7053.  1Eh    WORD    structure size
  7054.  
  7055. Format of GRAPH_READ_PAGE command buffer:
  7056. Offset    Size    Description
  7057.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7058.  0Ch    WORD    graph handle
  7059.  0Eh    DWORD    pointer to storage for image
  7060.  12h    WORD    band height in lines
  7061.  14h    WORD    width of page image in bytes
  7062.  16h    WORD    facsimile page width constant
  7063.  18h    WORD    width of page image in bits
  7064.  1Ah    WORD    number of bytes actually processed
  7065.  1Ch  6 BYTEs    future expansion
  7066.  22h    WORD    structure size
  7067.  
  7068. Format of IOCTL_ANSWER_FAX command buffer:
  7069. Offset    Size    Description
  7070.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7071.  0Ch    WORD    device number
  7072.  0Eh  6 BYTEs    future expansion
  7073.  14h    WORD    structure size
  7074.  
  7075. Format of IOCTL_DIAL command buffer:
  7076. Offset    Size    Description
  7077.  00h 12 BYTEs    common data (see SYS_LOGOUT above)
  7078.  0Ch    WORD    device number
  7079.  0Eh  6 BYTEs    country code
  7080.  14h  6 BYTEs    city or area code
  7081.  1Ah 14 BYTEs    local number
  7082.  28h 14 BYTEs    extension
  7083.  36h 14 BYTEs    reserved
  7084.  4Eh  6 BYTEs    future expansion
  7085.  54h    WORD    structure size
  7086. --------N-2F8100-----------------------------
  7087. INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK
  7088.     AX = 8100h
  7089. Return: AL = FFh if installed
  7090. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7091.       demonstration version may be downloaded from Nanosoft's BBS
  7092. SeeAlso: AX=8000h"TurboNET"
  7093. --------N-2F8101-----------------------------
  7094. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7095.     AX = 8101h
  7096. Return: AL = ???
  7097.     DL = ???
  7098. --------N-2F8102-----------------------------
  7099. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7100.     AX = 8102h
  7101. Return: AL = ???
  7102.     DL = ???
  7103. --------N-2F8103-----------------------------
  7104. INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???
  7105.     AX = 8103h
  7106.     ES:DI -> 17-byte buffer
  7107. Return: buffer filled
  7108. --------N-2F8104-----------------------------
  7109. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7110.     AX = 8104h
  7111.     BL = ???
  7112.     BH = ???
  7113.     CX = ???
  7114.     DX = ???
  7115.     DS:SI -> 16-byte buffer containing ???
  7116. Return: AL = 00h ???
  7117. --------N-2F8105-----------------------------
  7118. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7119.     AX = 8105h
  7120.     CX = ??? (don't change current value if 0000h)
  7121.     DX = ??? (don't change current value if 0000h)
  7122. Return: AL = 00h successful
  7123. --------N-2F82-------------------------------
  7124. INT 2F U - Nanosoft, Inc. TurboNET - ???
  7125.     AH = 82h
  7126.     ???
  7127. Return: ???
  7128. Note:    called by TNR.EXE, the TurboNET redirector configuration program
  7129. SeeAlso: AX=8100h
  7130. --------s-2F8200-----------------------------
  7131. INT 2F - RESPLAY - SAMPLE/PLAYBACK
  7132.     AX = 8200h
  7133.     DX:DI -> start of sample space
  7134.     CX:BX = length in bytes
  7135. Return: AX = status
  7136.         1000h successful
  7137.         2000h not initialized (see AX=8210h)
  7138.         other RESPLAY not installed
  7139. Program: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  7140. SeeAlso: AX=8201h,AX=8210h
  7141. --------s-2F8201-----------------------------
  7142. INT 2F - RESPLAY - INSTALLATION CHECK
  7143.     AX = 8201h
  7144. Return: AX = 7746h if installed
  7145. SeeAlso: AX=8202h
  7146. --------s-2F8202-----------------------------
  7147. INT 2F - RESPLAY - UNINSTALL
  7148.     AX = 8202h
  7149. Return:    AX = status
  7150.         1000h successful
  7151. SeeAlso: AX=8201h
  7152. --------s-2F8210-----------------------------
  7153. INT 2F - RESPLAY - INITIALIZE
  7154.     AX = 8210h
  7155.     BL = sound device
  7156.         00h printer port LPT1
  7157.         01h printer port LPT2
  7158.         02h prototype board at I/O address 0300h
  7159.         03h printer port (alternative LPT1)
  7160.         04h internal speaker
  7161.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  7162.     CL = direction
  7163.         00h playback
  7164.         01h sample
  7165. Return: AX = status
  7166.         1000h successful
  7167.         2000h parameter out of range
  7168.         other RESPLAY not installed
  7169. SeeAlso: AX=8200h
  7170. ----------2F86-------------------------------
  7171. INT 2F U - ???
  7172.     AH = 86h
  7173.     AL = function (at least 06h and 07h)
  7174.     ???
  7175. Return: ???
  7176. Note:    called by Codeview for Windows
  7177. SeeAlso: AH=44h
  7178. --------U-2F8900-----------------------------
  7179. INT 2F - WHOA!.COM - INSTALLATION CHECK
  7180.     AX = 8900h
  7181. Return: AL = 00h not installed
  7182.        = FFh installed
  7183. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7184. SeeAlso: AX=8901h,AX=8902h
  7185. --------U-2F8901-----------------------------
  7186. INT 2F - WHOA!.COM - UNINSTALL
  7187.     AX = 8901h
  7188. Return: AL = FDh successful
  7189.        = FEh error
  7190. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7191. SeeAlso: AX=8900h
  7192. --------U-2F8902-----------------------------
  7193. INT 2F - WHOA!.COM - SET DELAY COUNT
  7194.     AX = 8902h
  7195.     BX = delay count (larger values slow system down more)
  7196. Return: AL = FDh successful
  7197.        = FEh error
  7198. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  7199. SeeAlso: AX=8900h
  7200. --------U-2F9000-----------------------------
  7201. INT 2F U - RAID - INSTALLATION CHECK
  7202.     AX = 9000h
  7203. Return: AL = FFh if installed
  7204. Program: RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth
  7205.       that resides mostly in EMS
  7206. --------U-2F9001-----------------------------
  7207. INT 2F U - RAID - GET ???
  7208.     AX = 9001h
  7209. Return: DX:AX -> ???
  7210. SeeAlso: AX=9000h
  7211. --------U-2F9002-----------------------------
  7212. INT 2F U - RAID - GET RESIDENT SEGMENT
  7213.     AX = 9002h
  7214. Return: AX = segment of resident (conventional memory) portion
  7215. SeeAlso: AX=9000h
  7216. --------U-2F9003-----------------------------
  7217. INT 2F U - RAID - UNINSTALL
  7218.     AX = 9003h
  7219. Return: ???
  7220. SeeAlso: AX=9000h
  7221. --------U-2F9004-----------------------------
  7222. INT 2F U - RAID - GET ???
  7223.     AX = 9004h
  7224. Return: AX = first available paragraph past end of resident portion???
  7225.     CX destroyed
  7226. SeeAlso: AX=9000h
  7227. --------e-2F92-------------------------------
  7228. INT 2F - Couriers LAN E-Mail - API
  7229.     AH = 92h
  7230.     AL = function
  7231.         00h installation check
  7232.         01h uninstall
  7233.         02h pop down MICRO.EXE notification window
  7234.         03h ???
  7235.         04h ???
  7236.         05h ???
  7237. Return: ???
  7238. SeeAlso: AH=9Ch
  7239. Index:    installation check;Couriers LAN E-Mail|uninstall;Couriers LAN E-Mail
  7240. --------R-2F92-------------------------------
  7241. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  7242.     AH = 92h
  7243.     AL = function (00h-1Eh)
  7244.     ???
  7245. Return: ???
  7246.     AX = FFFFh if not a valid function number in AL
  7247. SeeAlso: INT 16/AX=FF70h
  7248. --------V-2F93-------------------------------
  7249. INT 2F - InnerMission v1.7+ - INSTALLATION CHECK
  7250.     AH = 93h
  7251.     BX = CX = AX
  7252. Return: AL = FFh if installed and BX=CX=AX on entry
  7253.         BX = segment of resident code
  7254.        = 01h if installed but BX or CX differ from AX
  7255. Program: InnerMission is a shareware graphical screen blanker by Kevin Stokes
  7256. --------e-2F9400-----------------------------
  7257. INT 2F - MICRO.EXE - INSTALLATION CHECK
  7258.     AX = 9400h
  7259. Return: AL = 07h or 08h if installed
  7260. Program: MICRO.EXE is a TSR of the Microsoft Mail part of Workgroup Connection,
  7261.       bundled with MS-DOS 6.0
  7262. SeeAlso: AX=9401h,AX=9402h,AX=9403h,AX=9404h,INT 21/AH=3Fh"WORKGRP.SYS"
  7263. --------e-2F9401-----------------------------
  7264. INT 2F - MICRO.EXE - SET ??? FLAG
  7265.     AX = 9401h
  7266. SeeAlso: AX=9400h,AX=9403h
  7267. --------e-2F9402-----------------------------
  7268. INT 2F - MICRO.EXE - ???
  7269.     AX = 9402h
  7270.     ???
  7271. Return: ???
  7272. SeeAlso: AX=9400h
  7273. --------e-2F9403-----------------------------
  7274. INT 2F - MICRO.EXE - SET ??? FLAG
  7275.     AX = 9403h
  7276. SeeAlso: AX=9400h,AX=9404h
  7277. --------e-2F9404-----------------------------
  7278. INT 2F - MICRO.EXE - CLEAR ??? FLAG
  7279.     AX = 9404h
  7280.     ES:DI -> name of executable from which MICRO.EXE was started
  7281. Note:    if the specified name is identical to the name of the program file
  7282.       from which MICRO was started, the ??? flag is cleared; otherwise,
  7283.       it is left unchanged
  7284. SeeAlso: AX=9400h,AX=9403h
  7285. --------e-2F9C-------------------------------
  7286. INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API
  7287.     AH = 9Ch
  7288.     AL = subfunction
  7289.         01h uninstall
  7290. Return: ???
  7291. SeeAlso: AH=92h
  7292. Index:    uninstall;Couriers LAN E-Mail OPERATOR.EXE
  7293. --------E-2FA1--BX0081-----------------------
  7294. INT 2F - Ergo DOS extenders - INSTALLATION CHECK
  7295.     AH = A1h
  7296.     BX = 0081h
  7297.     AL = which
  7298.         FEh OS/286,OS/386
  7299.         FFh HummingBoard DOS extender
  7300.     ES:DI -> 16-byte buffer
  7301. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  7302. Note:    since TKERNEL is a licensed version, it is likely that subfunctions
  7303.       BX=0082h and BX=0084h are present and function identically to the
  7304.       AX=FBA1h/BX=008xh calls
  7305. SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h
  7306. --------m-2FA189-----------------------------
  7307. INT 2F U - Biologic HRAMDEV.SYS - API
  7308.     AX = A189h
  7309.     BX = subfunction
  7310.         0000h set ???
  7311.         0001h remove ???
  7312.         0002h get status ???
  7313.         0003h enable ???
  7314.         0004h disable ???
  7315.         0005h set ??? flag
  7316.         0006h clear ??? flag
  7317.         0007h set ??? flag
  7318.         0008h clear ??? flag
  7319.         0009h set ???
  7320.     ES:DI -> function-specific arguments
  7321.         if func 0000h: 20-byte buffer containing ???
  7322.         if func 0001h: 20-byte buffer for returned ???
  7323.         if func 0002h: 16-byte buffer for returned ???
  7324.         if func 0009h: WORD containing ???
  7325. Return: BX = A189h if installed
  7326.     AH = status
  7327.         00h successful
  7328.         FFh failed or invalid function number
  7329. Program: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which
  7330.       provides improved high memory access under MS-DOS 5.0
  7331. Note:    functions 00h and 01h use a stack of four entries; function 01h always
  7332.       removes the values stored with the most recent function 00h call
  7333.       which has not yet been matched with a function 01h call.
  7334. --------U-2FA4E0-----------------------------
  7335. INT 2F - Futurus Team - INSTALLATION CHECK
  7336.     AX = A4E0h
  7337. Return: AL = 52h ("R") if installed
  7338.         AH = major version plus 30h ("0")
  7339.         ES:BX -> ??? (INT A4 handler???)
  7340. Note:    older versions of Right Hand Man (from which Team evolved) store the
  7341.       signature "RH" at offset 103h in the INT 2F handler's segment
  7342. SeeAlso: INT A4"Right Hand Man"
  7343. ----------2FA900-----------------------------
  7344. INT 2F - METZTSR.COM - INSTALLATION CHECK
  7345.     AX = A900h
  7346.     CF set
  7347. Return: CF clear if resident
  7348.         AX = 97FFh
  7349.     CF set if not present
  7350. Notes:    METZTSR.COM prevents METZ applications (such as the MAGIC screen
  7351.       saver) inactivity timeout while running a DOSapp under MS Windows.
  7352.     the default multiplex number is A9h, but may be set to any value from
  7353.       80h to FFh with a commandline switch
  7354. SeeAlso: AX=A901h,AX=A902h
  7355. ----------2FA901-----------------------------
  7356. INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY
  7357.     AX = A901h
  7358.     CF set
  7359. Return: CF clear if successful
  7360.         AX:DX = BIOS time at which INT 09 was last invoked
  7361.     CF set if not present
  7362. SeeAlso: INT 09,INT 1A/AH=00h
  7363. ----------2FA902-----------------------------
  7364. INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG
  7365.     AX = A902h
  7366.     BL = new value
  7367.         00h Ctrl-Alt-Del not allowed
  7368.         else Ctrl-Alt-Del allowed (startup default is 01h)
  7369.     CF set
  7370. Return: CF clear if successful
  7371.         AX = 97FFh
  7372.     CF set if not resident
  7373. SeeAlso: AX=A903h
  7374. ----------2FA903-----------------------------
  7375. INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG
  7376.     AX = A903h
  7377.     CF set
  7378. Return: CF clear if successful    
  7379.         AX = 97FFh if Ctrl-Alt-Del allowed
  7380.         AX = 0000h if Ctrl-Alt-Del not allowed
  7381.     CF set if not resident
  7382. SeeAlso: AX=A902h
  7383. --------U-2FAA00-----------------------------
  7384. INT 2F - VIDCLOCK.COM - INSTALLATION CHECK
  7385.     AX = AA00h
  7386. Return: AL = 00h not installed
  7387.          FFh installed
  7388. Program: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  7389. --------f-2FAB00-----------------------------
  7390. INT 2F - Btrieve Multi-User - INSTALLATION CHECK
  7391.     AX = AB00h
  7392. Return: AL = 4Dh if installed
  7393. SeeAlso: AX=AB01h,AX=AB02h,INT 7B"Btrieve"
  7394. --------f-2FAB01-----------------------------
  7395. INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION
  7396.     AX = AB01h
  7397.     BX = process ID
  7398.     DS:DX -> 38-byte parameter record (see INT 7B"Btrieve")
  7399. Return: AL = 00h OK
  7400.        = other retry after calling INT 7F/AX=0200h
  7401. SeeAlso: AX=AB00h,AX=AB02h,INT 7B"Btrieve",INT 7F/AX=0200h
  7402. --------f-2FAB02-----------------------------
  7403. INT 2F - Btrieve Multi-User - GET NEW PROCESS ID
  7404.     AX = AB02h
  7405. Return: AL = 00h succesful
  7406.         BX = process ID
  7407.     AL > 00h failed, retry after calling INT 7F/AX=0200h
  7408. SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h
  7409. --------V-2FAC00-----------------------------
  7410. INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  7411.     AX = AC00h
  7412. Return: AX = FFFFh
  7413.     ES:DI -> ??? (graphics data?) (not documented)
  7414. Note:    this installation check was moved here to avoid the conflict with the
  7415.       CD-ROM extensions that occurred in DOS 4.00
  7416. SeeAlso: AX=1500h"GRAPHICS"
  7417. --------V-2FAD00-----------------------------
  7418. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  7419.     AX = AD00h
  7420. Return: AL = FFh if installed
  7421.         BX = ??? (0100h in MS-DOS 3.30, PC-DOS 4.01)
  7422. Note:    DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the
  7423.       subfunctions listed here
  7424. --------V-2FAD01-----------------------------
  7425. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
  7426.     AX = AD01h
  7427.     BX = new code page
  7428. Return: CF clear if successful
  7429.         AX = 0001h
  7430.     CF set on error (unsupported code page)
  7431.         AX = 0000h
  7432. SeeAlso: AX=AD02h
  7433. --------V-2FAD02-----------------------------
  7434. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
  7435.     AX = AD02h
  7436. Return: CF set if code page never set
  7437.         AX = 0001h
  7438.         BX = FFFFh (assume first hardware code page)
  7439.     CF clear if successful
  7440.         BX = current code page
  7441. SeeAlso: AX=AD01h,AX=AD03h
  7442. --------V-2FAD03-----------------------------
  7443. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
  7444.     AX = AD03h
  7445.     ES:DI -> buffer for code page information (see below)
  7446.     CX = size of buffer in bytes
  7447. Return: CF set if buffer too small
  7448.     CF clear if successful
  7449.         ES:DI buffer filled
  7450. SeeAlso: AX=AD01h,AX=AD02h
  7451.  
  7452. Format of DOS 5.0 code page information:
  7453. Offset    Size    Description
  7454.  00h    WORD    number of software code pages
  7455.  02h    WORD    ??? (0003h)
  7456.  04h    WORD    number of hardware code pages
  7457.  06h  N WORDs    hardware code page numbers
  7458.       N WORDs    software (prepared) code pages (FFFFh if not yet prepared)
  7459. --------V-2FAD04-----------------------------
  7460. INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
  7461.     AX = AD04h
  7462.     ???
  7463. Return: ???
  7464. --------V-2FAD10-----------------------------
  7465. INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
  7466.     AX = AD10h
  7467.     ???
  7468. Return: AX = FFFFh
  7469.     BX = ??? (0100h in PC-DOS 4.01)
  7470. --------V-2FAD10-----------------------------
  7471. INT 2F U - DOS 5.0 DISPLAY.SYS internal - ???
  7472.     AX = AD10h
  7473.     ???
  7474. Return: CF clear if successful
  7475.     CF set on error
  7476. Note:    this function is a NOP if the active code page has never been set
  7477.       (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
  7478. --------V-2FAD40-----------------------------
  7479. INT 2F - DOS 4+ - ???
  7480.     AX = AD40h
  7481.     DX = ???
  7482.     ???
  7483. Return: ???
  7484. Note:    called by PC-DOS 4.01 PRINT.COM
  7485. --------K-2FAD80-----------------------------
  7486. INT 2F u - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  7487.     AX = AD80h
  7488. Return: AL = FFh if installed
  7489.         BX = version number (BH = major, BL = minor)
  7490.         ES:DI -> internal data (see below)
  7491. Notes:    MS-DOS 3.30, PC-DOS 4.01, and MS-DOS 5.00 all report version 1.00.
  7492.     undocumented prior to the release of DOS 5.0
  7493.  
  7494. Format of KEYB internal data:
  7495. Offset    Size    Description
  7496.  00h    DWORD    original INT 09
  7497.  04h    DWORD    original INT 2F
  7498.  08h  6 BYTEs    ???
  7499.  0Eh    WORD    flags
  7500.  10h    BYTE    ???
  7501.  11h    BYTE    ???
  7502.  12h  4 BYTEs    ???
  7503.  16h  2 BYTEs    country ID letters
  7504.  18h    WORD    current code page
  7505. ---DOS 3.3---
  7506.  1Ah    WORD    pointer to first item in list of code page tables???
  7507.  1Ch    WORD    pointer to ??? item in list of code page tables
  7508.  1Eh  2 BYTEs    ???
  7509.  20h    WORD    pointer to key translation data
  7510.  22h    WORD    pointer to last item in code page table list (see below)
  7511.  24h  9 BYTEs    ???
  7512. ---DOS 4.01---
  7513.  1Ah  2 BYTEs    ???
  7514.  1Ch    WORD    pointer to first item in list of code page tables???
  7515.  1Eh    WORD    pointer to ??? item in list of code page tables
  7516.  20h  2 BYTEs    ???
  7517.  22h    WORD    pointer to key translation data
  7518.  24h    WORD    pointer to last item in code page table list (see below)
  7519.  26h  9 BYTEs    ???
  7520.  
  7521. Format of code page table list entries:
  7522. Offset    Size    Description
  7523.  00h    WORD    pointer to next item, FFFFh = last
  7524.  02h    WORD    code page
  7525.  04h  2 BYTEs    ???
  7526.  
  7527. Format of translation data:
  7528. Offset    Size    Description
  7529.  00h    WORD    size of data in bytes, including this word
  7530.  02h N-2 BYTEs    ???
  7531. --------K-2FAD81-----------------------------
  7532. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
  7533.     AX = AD81h
  7534.     BX = code page (see INT 21/AX=6601h)
  7535. Return: CF set on error
  7536.         AX = 0001h (code page not available)
  7537.     CF clear if successful
  7538. Notes:    called by DISPLAY.SYS
  7539.     undocumented prior to the release of DOS 5.0
  7540. SeeAlso: AX=AD82h
  7541. --------K-2FAD82-----------------------------
  7542. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
  7543.     AX = AD82h
  7544.     BL = new state
  7545.         00h US keyboard (Control-Alt-F1)
  7546.         FFh foreign keyboard (Control-Alt-F2)
  7547. Return: CF set on error (BL not 00h or FFh)
  7548.     CF clear if successful
  7549. Note:    undocumented prior to the release of DOS 5.0
  7550. SeeAlso: AX=AD81h,AX=AD83h
  7551. --------K-2FAD83-----------------------------
  7552. INT 2F - DOS 5+ KEYB.COM - GET KEYBOARD MAPPING
  7553.     AX = AD83h
  7554. Return: BL = current state
  7555.         00h US keyboard
  7556.         FFh foreign keyboard
  7557. SeeAlso: AX=AD82h
  7558. --------l-2FAE00DXFFFF-----------------------
  7559. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
  7560.     AX = AE00h
  7561.     DX = FFFFh
  7562.     CH = FFh
  7563.     CL = length of command line tail (4DOS v4.0)
  7564.     DS:BX -> command line buffer (see below)
  7565.     DS:SI -> command name buffer (see below)
  7566.     DI = 0000h (4DOS v4.0)
  7567. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  7568.     AL = 00h if the command should be executed as usual
  7569. Notes:    This call provides a mechanism for TSRs to install permanent
  7570.       extensions to the command repertoire of COMMAND.COM.    It appears
  7571.       that COMMAND.COM makes this call before executing the current
  7572.       command line, and does not execute it itself if the return is FFh.
  7573.     APPEND hooks this call, to allow subsequent APPEND commands to
  7574.       execute without re-running APPEND
  7575.  
  7576. Format of command line buffer:
  7577. Offset    Size    Description
  7578.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  7579.  01h    BYTE    count of bytes to follow, excluding terminating 0Dh
  7580.       N BYTEs    command line text, terminated by 0Dh
  7581.  
  7582. Format of command name buffer:
  7583. Offset    Size    Description
  7584.  00h    BYTE    length of command name
  7585.  01h  N BYTEs    uppercased command name (blank-padded to 11 chars by 4DOS v4)
  7586. --------l-2FAE01DXFFFF-----------------------
  7587. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  7588.     AX = AE01h
  7589.     DX = FFFFh
  7590.     CH = 00h
  7591.     CL = length of command name (4DOS v4.0)
  7592.     DS:SI -> command name buffer (see AX=AE00h)
  7593.     DS:BX -> command line buffer (see AX=AE00h)
  7594. Return: DS:SI buffer updated
  7595.       if length byte is nonzero, the following bytes contain the uppercase
  7596.       internal command to execute and the command line buffer contains the
  7597.       command's parameters (the first DS:[SI] bytes are ignored)
  7598. Notes:    this call requests execution of the command which a previous call to
  7599.       AX=AE00h indicated was resident
  7600.     APPEND hooks this call
  7601. --------V-2FB000-----------------------------
  7602. INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  7603.     AX = B000h
  7604. Return: AL = 00h not installed, OK to install
  7605.        = 01h not installed, not OK to install
  7606.        = FFh installed
  7607. Notes:    called by DISPLAY.SYS
  7608.     documented for DOS 5.0, but undocumented in prior versions
  7609. SeeAlso: AX=B001h
  7610. --------V-2FB001-----------------------------
  7611. INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  7612.     AX = B001h
  7613.     DS:BX -> DWORD buffer for address of 8x8 font table
  7614. Return: buffer filled
  7615.     AL = FFh
  7616. Note:    PC-DOS 3.30/4.01 set the font table offset to 0130h, MS-DOS 3.30 to
  7617.       0030h
  7618. SeeAlso: AX=B000h
  7619. --------I-2FB400-----------------------------
  7620. INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK
  7621.     AX = B400h
  7622. Return: AL = FFh if installed
  7623. --------I-2FB401-----------------------------
  7624. INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS
  7625.     AX = B401h
  7626. Return: ES -> host screen buffer (PC ASCII format)
  7627.     ES unchanged if communications not started
  7628. --------I-2FB402-----------------------------
  7629. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  7630.     AX = B402h
  7631.     BX = ???
  7632. Return: ???
  7633. --------I-2FB403-----------------------------
  7634. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  7635.     AX = B403h
  7636.     ???
  7637. Return: ???
  7638. --------I-2FB404-----------------------------
  7639. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  7640.     AX = B404h
  7641.     ???
  7642. Return: ???
  7643. --------I-2FB405-----------------------------
  7644. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  7645.     AX = B405h
  7646.     ???
  7647. Return: ???
  7648. ----------2FB700-----------------------------
  7649. INT 2F - APPEND - INSTALLATION CHECK
  7650.     AX = B700h
  7651. Return: AL = status
  7652.         00h not installed
  7653.         FFh installed
  7654. Note:    MS-DOS 3.30 APPEND refuses to install itself when run inside TopView or
  7655.       a TopView-compatible environment
  7656. ----------2FB701-----------------------------
  7657. INT 2F U - APPEND v3.21 only - GET APPEND PATH
  7658.     AX = B701h
  7659. Return: ES:DI -> active APPEND path
  7660. Notes:    the only version of APPEND known to support this call is the APPEND
  7661.       shipped with Microtek MS-DOS 3.21; MS-DOS 3.30-6.00 APPEND displays
  7662.       "Incorrect APPEND Version" and aborts the caller
  7663.     use AX=B704h first, and only call this function if that one is not
  7664.       supported
  7665. SeeAlso: AX=B704h
  7666. ----------2FB702-----------------------------
  7667. INT 2F - APPEND - VERSION CHECK
  7668.     AX = B702h
  7669. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  7670.     AL = major version number
  7671.     AH = minor version number, otherwise
  7672. SeeAlso: AX=B710h
  7673. ----------2FB703-----------------------------
  7674. INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  7675.     AX = B703h
  7676.     ES:DI -> INT 21 handler APPEND should chain to
  7677. Return: ES:DI -> APPEND's INT 21 handler
  7678. Note:    each invocation of this function toggles a flag which APPEND uses to
  7679.       determine whether to chain to the user handler or the original
  7680.       INT 21
  7681. ----------2FB704-----------------------------
  7682. INT 2F - DOS 3.3+ APPEND - GET APPEND PATH
  7683.     AX = B704h
  7684. Return: ES:DI -> active APPEND path (128 bytes max)
  7685. Note:    some versions of append do not support this call, and return ES
  7686.       unchanged; in this case, you should call AX=B701h to get the APPEND
  7687.       path
  7688. SeeAlso: AX=B701h
  7689. ----------2FB706-----------------------------
  7690. INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE
  7691.     AX = B706h
  7692. Return: BX = APPEND state
  7693.         bit 0: set if APPEND enabled
  7694.         bits 1-11 reserved
  7695.         bit 12: (DOS 5.0) set if APPEND applies directory search even if a
  7696.             drive has been specified
  7697.         bit 13: set if /PATH flag active
  7698.         bit 14: set if /E flag active (environment var APPEND exists)
  7699.         bit 15: set if /X flag active
  7700. ----------2FB707-----------------------------
  7701. INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE
  7702.     AX = B707h
  7703.     BX = APPEND state bits (see AX=B706h)
  7704. ----------2FB710-----------------------------
  7705. INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO
  7706.     AX = B710h
  7707. Return: AX = current APPEND state (see AX=B706h)
  7708.     BX = ??? (0000h in MS-DOS 3.30 and 5.00)
  7709.     CX = ??? (0000h in MS-DOS 3.30 and 5.00)
  7710.     DL = major version
  7711.     DH = minor version
  7712. SeeAlso: AX=B702h
  7713. ----------2FB711-----------------------------
  7714. INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE
  7715.     AX = B711h
  7716. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  7717.     6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is
  7718.     written over top of the filename passed to the INT 21h call.  The
  7719.     application must provide a sufficiently large buffer.  This state is
  7720.     reset after the next INT 21h call processed by APPEND.
  7721. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  7722.       INT 21/AH=6Ch
  7723. SeeAlso: INT 21/AH=4Eh
  7724. --------N-2FB800-----------------------------
  7725. INT 2F - network - INSTALLATION CHECK
  7726.     AX = B800h
  7727. Return: AL = status
  7728.         00h        not installed
  7729.         nonzero installed
  7730.           BX = installed component flags (test in this order!)
  7731.            bit 6   server
  7732.            bit 2   messenger
  7733.            bit 7   receiver
  7734.            bit 3   redirector
  7735.            bit 1   LANPUP (LANtastic 4.0)
  7736. Notes:    this function is supported by SilverNET
  7737.     LANtastic and NetWare Lite use only BL for the return value, preserving
  7738.       BH; LAN Manager and DOS LAN Requester return BH=0.  This permits
  7739.       differentiation between those two groups by setting BH to a nonzero
  7740.       value before the call and checking its value on return.
  7741. SeeAlso: AX=4E53h,AX=B809h
  7742. --------N-2FB803-----------------------------
  7743. INT 2F - network - GET NETWORK EVENT POST HANDLER
  7744.     AX = B803h
  7745. Return: ES:BX -> event post handler (see AX=B804h)
  7746. SeeAlso: AX=B804h,AX=B903h
  7747. --------N-2FB804-----------------------------
  7748. INT 2F - network - SET NETWORK EVENT POST HANDLER
  7749.     AX = B804h
  7750.     ES:BX -> new event post handler
  7751. Notes:    used in conjunction with AX=B803h to hook into the network event post
  7752.       routine
  7753.     The specified handler is called on any network event.  Two events are
  7754.       defined: message received and critical network error.
  7755. SeeAlso: AX=B803h,AX=B904h
  7756.  
  7757. Values post routine is called with:
  7758.     AX = 0000h single block message
  7759.         DS:SI -> ASCIZ originator name
  7760.         DS:DI -> ASCIZ destination name
  7761.         ES:BX -> text header (see below)
  7762.     AX = 0001h start multiple message block
  7763.         CX = block group ID
  7764.         DS:SI -> ASCIZ originator name
  7765.         DS:DI -> ASCIZ destination name
  7766.     AX = 0002h multiple block text
  7767.         CX = block group ID
  7768.         ES:BX -> text header (see below)
  7769.     AX = 0003h end multiple block message
  7770.         CX = block group ID
  7771.     AX = 0004h message aborted due to error
  7772.         CX = block group ID
  7773.     AX = 0101h server received badly formatted network request
  7774.         Return: AX = FFFFh (PC LAN will process error)
  7775.     AX = 0102h unexpected network error
  7776.         ES:BX -> NCB (see INT 5C)
  7777.     AX = 0103h server received INT 24 error
  7778.         other registers as for INT 24, except AH is in BH
  7779.         Return: as below, but only 0000h and FFFFh allowed
  7780. Return:    AX = response code
  7781.         0000h user post routine processed message
  7782.         0001h PC LAN will process message, but message window not displayed
  7783.         FFFFh PC LAN will process message
  7784.     
  7785. Format of text header:
  7786. Offset    Size    Description
  7787.  00h    WORD    length of text (maximum 512 bytes)
  7788.  02h  N BYTEs    text of message
  7789. Note:    all CRLF sequences in message text are replaced by 14h
  7790. --------N-2FB807-----------------------------
  7791. INT 2F - network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  7792.     AX = B807h
  7793. Return: CH = NetBIOS name number of the machine name
  7794. SeeAlso: INT 21/AX=5E00h
  7795. --------N-2FB808-----------------------------
  7796. INT 2F U - network - RELINK KEYBOARD HANDLER
  7797.     AX = B808h
  7798.     ES:BX -> INT 09 handler network should call after it finishes INT 09
  7799. Notes:    this call replaces the address to which the network software chains on
  7800.       an INT 09 without preserving the original value.  This allows a prior
  7801.       handler to unlink, but does not allow a new handler to be added
  7802.       such that the network gets the INT 09 first unless the new handler
  7803.       completely takes over INT 09 and never chains.
  7804.     called by DOS 3.2 KEYBxx.COM
  7805. SeeAlso: AX=B908h
  7806. --------N-2FB809-----------------------------
  7807. INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK
  7808.     AX = B809h
  7809. Return: AH = major version
  7810.     AL = minor version (decimal)
  7811. Note:    this function is also supported by SilverNET
  7812. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LAN Manager"
  7813. --------N-2FB809-----------------------------
  7814. INT 2F - PC LAN Program, LAN Manager, DOS LAN Requester - VERSION CHECK
  7815.     AX = B809h
  7816. Return: AH = minor version (decimal)
  7817.     AL = major version
  7818. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LANtastic"
  7819. --------N-2FB80F-----------------------------
  7820. INT 2F - DOS LAN Requester - GET START PARAMETERS
  7821.     AX = B80Fh
  7822.     CX = size of return data buffer
  7823.     ES:DI -> return data buffer
  7824. Return: AX = status
  7825.          00h     network started
  7826.          nonzero network not started
  7827.     CX = number of bytes returned in buffer
  7828.     ES:DI buffer filled
  7829.  
  7830. Format of return data buffer:
  7831. Offset    Size    Description
  7832.  00h    BYTE    major version
  7833.  01h    BYTE    minor version
  7834.  02h    WORD    configuration flags given when the network was started
  7835.         bit 0  /NVS != 0
  7836.         bit 1  /NMS != 0
  7837.         bit 2  /API
  7838.         bit 3  /HIM
  7839.         bit 4  /LIM
  7840.         bit 5  /ENC
  7841.         bit 6  /POP
  7842.         bit 7  /EMS
  7843.         bit 8  /RPL
  7844.         bits 9-12 Reserved
  7845.         bit 13    RDR started
  7846.         bit 14    RCV started
  7847.         bit 15    User is currently logged on
  7848.  04h 15 BYTEs    NET START machine name (space padded)
  7849.  13h    BYTE    00h
  7850.  14h 9    BYTEs    NET START domain name (NULL padded)
  7851.  1Dh    BYTE    00h
  7852.  1Eh 32 BYTEs    /WRK heuristics string (space padded, not terminated)
  7853.  3Eh    WORD    /SRV value
  7854.  40h    WORD    /ASG value
  7855.  42h    WORD    /NBC value
  7856.  44h    WORD    /NBS value
  7857.  46h    WORD    /BBC value
  7858.  48h    WORD    /BBS value
  7859.  4Ah    WORD    /PBC value
  7860.  4Ch    WORD    /PBS value
  7861.  4Eh    WORD    /PFS value
  7862.  50h    WORD    /PFT value
  7863.  52h    WORD    /PWT value
  7864.  54h    WORD    /KUC value
  7865.  56h    WORD    /KST value
  7866.  58h    WORD    /NVS value
  7867.  5Ah    WORD    /NMS value
  7868.  5Ch    WORD    /NDB value
  7869.  5Eh    WORD    /MBI value
  7870.  60h    BYTE    NetBIOS name number for machine name
  7871.  61h    BYTE    NetBIOS name number for domain name
  7872.  62h    WORD    NetBIOS sessions required for configuration
  7873.  64h    WORD    NetBIOS commands required for configuration
  7874.  66h    WORD    NetBIOS names required for configuration
  7875.  68h 128 BYTEs    NET START path (LANROOT)
  7876.  E8h    BYTE    00h
  7877. --------N-2FB900-----------------------------
  7878. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  7879.     AX = B900h
  7880. Return: AL = 00h if not installed
  7881.          FFh if installed
  7882. --------N-2FB901-----------------------------
  7883. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  7884.     AX = B901h
  7885. Return: AL = ???
  7886.     ES:BX -> RECEIVER.COM INT 2F handler
  7887. Note:    allows more efficient execution by letting the caller bypass any other
  7888.       INT 2F handlers which have been added since RECEIVER.COM was
  7889.       installed
  7890. --------N-2FB903-----------------------------
  7891. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  7892.     AX = B903h
  7893. Return: ES:BX -> POST handler
  7894. SeeAlso: AX=B803h,AX=B904h
  7895. --------N-2FB904-----------------------------
  7896. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  7897.     AX = B904h
  7898.     ES:BX -> new POST handler
  7899. SeeAlso: AX=B804h,AX=B903h
  7900. --------N-2FB905-----------------------------
  7901. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  7902.     AX = B905h
  7903.     DS:BX -> 128-byte buffer for filename 1
  7904.     DS:DX -> 128-byte buffer for filename 2
  7905. Return: buffers filled from RECEIVER.COM internal buffers
  7906. Note:    use of filenames is unknown, but one appears to be for storing messages
  7907. SeeAlso: AX=B906h
  7908. --------N-2FB906-----------------------------
  7909. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  7910.     AX = B906h
  7911.     DS:BX -> 128-byte buffer for filename 1
  7912.     DS:DX -> 128-byte buffer for filename 2
  7913. Return: RECEIVER.COM internal buffers filled from user buffers
  7914. Note:    use of filenames is unknown, but one appears to be for storing messages
  7915. SeeAlso: AX=B905h
  7916. --------N-2FB908-----------------------------
  7917. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  7918.     AX = B908h
  7919.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  7920. Note:    this call replaces the address to which RECEIVER.COM chains on an
  7921.       INT 09 without preserving the original value.     This allows a prior
  7922.       handler to unlink, but does not allow a new handler to be added
  7923.       such that RECEIVER gets the INT 09 first.
  7924. SeeAlso: AX=B808h
  7925. --------V-2FBC00-----------------------------
  7926. INT 2F - Windows 3.0, DOS 5+ EGA.SYS - INSTALLATION CHECK
  7927.     AX = BC00h
  7928. Return: AL = 00h not installed, OK to install
  7929.        = 01h not installed, not OK to install
  7930.        = FFh installed
  7931.         BX = 5456h ("TV")
  7932. Note:    AH=BCh is the default value, which may be changed by a command line
  7933.       parameter to any value between 80h and FFh
  7934. SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA"
  7935. --------V-2FBC06-----------------------------
  7936. INT 2F U - MS Windows 3.0, DOS 5+ EGA.SYS - GET VERSION INFO
  7937.     AX = BC06h
  7938. Return: BX = 5456h ("TV")
  7939.     CH = major version
  7940.     CL = minor version
  7941.     DL = revision
  7942. SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA"
  7943. --------U-2FBE00-----------------------------
  7944. INT 2F - REDVIEW - INSTALLATION CHECK
  7945.     AX = BE00h
  7946. Return: AL = FFh if installed
  7947. Program: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which
  7948.       copies data sent to standard output to standard error when the
  7949.       former has been redirected to a file, thus allowing the data to
  7950.       be seen on the screen at the same time it is captured in a file
  7951. --------N-2FBF00-----------------------------
  7952. INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  7953.     AX = BF00h
  7954. Return: AL = FFh if installed
  7955. --------N-2FBF01-----------------------------
  7956. INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  7957.     AX = BF01h
  7958.     ???
  7959. Return: ???
  7960. --------N-2FBF80-----------------------------
  7961. INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  7962.     AX = BF80h
  7963.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  7964. Return: AL = FFh if installed
  7965.         ES:DI -> internal workspace
  7966. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  7967. ---------------------------------------------
  7968.