home *** CD-ROM | disk | FTP | other *** search
/ Hot Shareware 32 / hot34.iso / ficheros / DTOOL / INTER57C.ZIP / INTERRUP.L < prev    next >
Text File  |  1998-03-22  |  346KB  |  9,270 lines

  1. Interrupt List, part 12 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998 Ralf Brown
  3. --------O-2FAF00-----------------------------
  4. INT 2F - WinDOS v2.11 - INSTALLATION CHECK
  5.     AX = AF00h
  6. Return: AL = FFh if installed
  7. Program: WinDOS is a DOS clone (claimed to be mostly MS-DOS 5.0 API compatible)
  8.       written by Heiko Goemann
  9. SeeAlso: AX=AF01h"WinDOS",INT 21/AH=30h
  10. ----------2FAF00-----------------------------
  11. INT 2F U - ???
  12.     AX = AF00h
  13.     ???
  14. Return: AX = 0000h if interface supported
  15. SeeAlso: AX=AF02h,AX=AF03h,AX=AF04h,AX=AF13h,AX=AF30h
  16. --------O-2FAF01-----------------------------
  17. INT 2F - WinDOS v2.11 - TURN ON ONLINE MODE
  18.     AX = AF01h
  19. Return: nothing
  20. Desc:    indicate that the user will not exchange floppy disks, allowing WinDOS
  21.       to cache disk sectors in memory and avoid writing modified sectors
  22.       back out to the floppy disk
  23. SeeAlso: AX=AF00h"WinDOS",AX=AF02h"WinDOS"
  24. --------O-2FAF02-----------------------------
  25. INT 2F - WinDOS v2.11 - TURN OFF ONLINE MODE
  26.     AX = AF02h
  27. Return: nothing
  28. Desc:    indicate that the floppy disk may be removed, and that WinDOS should
  29.       write all buffered sectors out to the floppy disk
  30. SeeAlso: AX=AF00h"WinDOS",AX=AF01h"WinDOS"
  31. ----------2FAF02-----------------------------
  32. INT 2F U - ???
  33.     AX = AF02h
  34.     ???
  35. Return: ES = ???
  36. SeeAlso: AX=AF00h
  37. --------O-2FAF03-----------------------------
  38. INT 2F - WinDOS v2.11 - TURN VIDMEM ON
  39.     AX = AF03h
  40. Return: AX = status
  41.         0000h successful
  42.         0001h CPU not in mode set by DOS386=On
  43.         0002h video adapter in graphics mode
  44.         0003h memory chain corrupted
  45. SeeAlso: AX=AF00h"WinDOS",AX=AF04h"WinDOS",AX=AF05h"WinDOS"
  46. ----------2FAF03-----------------------------
  47. INT 2F U - ???
  48.     AX = AF03h
  49.     ???
  50. Return: DX = ???
  51. SeeAlso: AX=AF00h
  52. --------O-2FAF04-----------------------------
  53. INT 2F - WinDOS v2.11 - TURN VIDMEM OFF
  54.     AX = AF04h
  55. Return: AX = status
  56.         0000h successful
  57.         0001h video memory is in use
  58. SeeAlso: AX=AF00h"WinDOS",AX=AF03h"WinDOS",AX=AF05h"WinDOS"
  59. ----------2FAF04-----------------------------
  60. INT 2F U - ???
  61.     AX = AF04h
  62.     ???
  63. Return: ???
  64. SeeAlso: AX=AF00h
  65. --------O-2FAF05-----------------------------
  66. INT 2F - WinDOS v2.11 - GET VIDMEM STATE
  67.     AX = AF05h
  68. Return: AX = status (0000h off, 0001h on)
  69. SeeAlso: AX=AF00h"WinDOS",AX=AF03h"WinDOS",AX=AF04h"WinDOS"
  70. ----------2FAF05-----------------------------
  71. INT 2F U - ???
  72.     AX = AF05h
  73.     ???
  74. Return: ???
  75. SeeAlso: AX=AF00h
  76. --------O-2FAF06-----------------------------
  77. INT 2F - WinDOS v2.11 - MAKE PROGRAM UNBREAKABLE
  78.     AX = AF06h
  79.     DS:DX -> break handler
  80.     DI:BX = stack to use for break handler
  81. Return: nothing
  82. Desc:    set a handler which should be invoked when Ctrl-C is pressed instead of
  83.       aborting the program
  84. SeeAlso: AX=AF00h"WinDOS",AX=AF0Ah"WinDOS",AX=AF0Ch"WinDOS"
  85. --------O-2FAF07-----------------------------
  86. INT 2F - WinDOS v2.11 - SIGNAL FATAL OVERLAY FAULT
  87.     AX = AF07h
  88. Return: never -- system reset
  89. Desc:    pop up a window indicating that the system overlay file can not be
  90.       loaded
  91. SeeAlso: AX=AF00h"WinDOS",AX=AF08h"WinDOS"
  92. --------O-2FAF08-----------------------------
  93. INT 2F - WinDOS v2.11 - SIGNAL RECOVERABLE OVERLAY FAULT
  94.     AX = AF08h
  95. Return: nothing
  96. Desc:    pop up a window requesting that a disk containing SH.OVL be inserted
  97. SeeAlso: AX=AF00h"WinDOS",AX=AF07h"WinDOS",AX=AF0Bh
  98. --------O-2FAF09-----------------------------
  99. INT 2F - WinDOS v2.11 - GET TERMINATED PSP
  100.     AX = AF09h
  101. Return: DS = PSP segment of most recently ended TSR
  102. SeeAlso: AX=AF00h"WinDOS",AX=AF0Ah
  103. --------O-2FAF0A-----------------------------
  104. INT 2F - WinDOS v2.11 - GET MAIN SHELL PSP
  105.     AX = AF0Ah
  106. Return: AX = shell's PSP (same as DS on last call to AX=AF06h)
  107. Desc:    get the PSP address of the last program to call AX=AF06h (normally
  108.       the main command interpreter)
  109. SeeAlso: AX=AF00h"WinDOS",AX=AF06h"WinDOS",AX=AF09h
  110. --------O-2FAF0B-----------------------------
  111. INT 2F - WinDOS v2.11 - SIGNAL FATAL ERROR
  112.     AX = AF0Bh
  113. Return: never -- system reset
  114. Desc:    pop up a window indicating a terminal system error
  115. SeeAlso: AX=AF00h"WinDOS",AX=AF07h,AX=AF08h,AX=AF15h"WinDOS"
  116. --------O-2FAF0C-----------------------------
  117. INT 2F - WinDOS v2.11 - GET OTHER MAIN SHELL PARAMETERS
  118.     AX = AF0Ch
  119. Return: DI:AX = stack
  120.     SI = offset of break handler
  121. Desc:    retrieve the parameters last set by AX=AF06h (normally by the main
  122.       command interpreter)
  123. SeeAlso: AX=AF00h"WinDOS",AX=AF06h"WinDOS"
  124. --------O-2FAF0D-----------------------------
  125. INT 2F - WinDOS v2.11 - GET CURRENT PARAMETER
  126.     AX = AF0Dh
  127.     BX = offset of desired parameter in global data area
  128. Return: AX = current value of parameter (AH undefined if byte value)
  129. SeeAlso: AX=AF00h"WinDOS",AX=AF0Eh
  130. --------O-2FAF0E-----------------------------
  131. INT 2F - WinDOS v2.11 - SET CURRENT PARAMETER BYTE VALUE
  132.     AX = AF0Eh
  133.     BX = offset of desired parameter in global data area
  134.     DL = new value of parameter
  135. Return: nothing
  136. SeeAlso: AX=AF00h"WinDOS",AX=AF0Dh
  137. --------O-2FAF0F-----------------------------
  138. INT 2F - WinDOS v2.11 - GET HISTORY SEGMENT
  139.     AX = AF0Fh
  140. Return: AX = segment of buffer for input history, or 0000h if none
  141. SeeAlso: AX=AF00h"WinDOS",AX=AF10h"WinDOS"
  142. --------O-2FAF10-----------------------------
  143. INT 2F - WinDOS v2.11 - SET HISTORY SEGMENT
  144.     AX = AF10h
  145.     BX = segment of new buffer for input history
  146. Return: nothing
  147. Note:    the buffer must have been allocated with INT 21/AH=48h
  148. SeeAlso: AX=AF00h"WinDOS",AX=AF0Fh"WinDOS"
  149. --------O-2FAF11-----------------------------
  150. INT 2F - WinDOS v2.11 - FREE XMS BLOCKS
  151.     AX = AF11h
  152. Return: nothing
  153. Desc:    free all XMS blocks whose XMS identification value (see AX=AF12h)
  154.       equals the current PSP
  155. SeeAlso: AX=AF00h"WinDOS",AX=AF12h"WinDOS",INT 21/AH=50h
  156. --------O-2FAF12-----------------------------
  157. INT 2F - WinDOS v2.11 - SET XMS IDENTIFICATION VALUE
  158.     AX = AF12h
  159.     DS = new XMS identification value (normally caller's PSP segment)
  160. Return: nothing
  161. SeeAlso: AX=AF00h"WinDOS",AX=AF11h"WinDOS"
  162. ----------2FAF12-----------------------------
  163. INT 2F U - ???
  164.     AX = AF12h
  165.     ???
  166. Return: ES = ???
  167. SeeAlso: AX=AF00h
  168. --------O-2FAF13-----------------------------
  169. INT 2F - WinDOS v2.11 - SET ASSIGN VALUE
  170.     AX = AF13h
  171.     BL = number of drive to remap (00h = A:)
  172.     DL = number of drive to be accessed via drive number BL
  173. Return: nothing
  174. Desc:    remap a drive letter
  175. Note:    the remapping can be canceled by specifying DL=BL
  176. SeeAlso: AX=AF00h"WinDOS",AX=AF14h"WinDOS",AX=0601h
  177. ----------2FAF13-----------------------------
  178. INT 2F U - ???
  179.     AX = AF13h
  180.     ???
  181. Return: ???
  182. SeeAlso: AX=AF00h
  183. --------O-2FAF14-----------------------------
  184. INT 2F - WinDOS v2.11 - GET ASSIGN VALUE
  185.     AX = AF14h
  186.     BL = drive number (00h = A:)
  187. Return: DL = drive number which is actually accessed by drive number BL
  188. Desc:    determine the current mapping for a drive
  189. SeeAlso: AX=AF00h"WinDOS",AX=AF13h"WinDOS",AX=0601h
  190. --------O-2FAF15-----------------------------
  191. INT 2F - WinDOS v2.11 - SIGNAL STACK ERROR
  192.     AX = AF15h
  193. Return: never -- system reset
  194. Desc:    pop up a window indicating a stack overflow
  195. SeeAlso: AX=AF00h"WinDOS",AX=AF0Bh"WinDOS"
  196. --------O-2FAF16-----------------------------
  197. INT 2F - WinDOS v2.11 - GET SIMPLE TRUENAME
  198.     AX = AF16h
  199.     DS:SI -> path to be canonicalized
  200.     ES:DI -> buffer for canonicalized filename/pathname
  201. Return: CF clear if successful
  202.         AX = 0000h
  203.     CF set on error
  204.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  205. Desc:    partially canonicalize a path, omitting SUBST, JOIN, ASSIGN, and
  206.       network redirections
  207. SeeAlso: AX=AF00h"WinDOS",INT 21/AH=60h
  208. --------O-2FAF17-----------------------------
  209. INT 2F - WinDOS v2.11 - QUERY FOR NEW CURRENT DRIVE
  210.     AX = AF17h
  211. Return: nothing
  212. Desc:    pop up a dialog allowing the user to select a new default drive
  213. SeeAlso: AX=AF00h"WinDOS"
  214. --------O-2FAF18-----------------------------
  215. INT 2F - WinDOS v2.11 - SET CTRL-C/CTRL-BREAK DISABLE FLAG
  216.     AX = AF18h
  217.     DL = new break-checking state (00h enabled, 01h disabled)
  218. Return: nothing
  219. SeeAlso: AX=AF00h"WinDOS"
  220. --------O-2FAF19-----------------------------
  221. INT 2F - WinDOS v2.11 - SET HEAD SETTLE FLAG
  222.     AX = AF19h
  223.     DL = new state
  224.         00h diskette head settling time reset to 15ms before each access
  225.         01h no additional head settling time used between accesses
  226. Return: nothing
  227. SeeAlso: AX=AF00h"WinDOS"
  228. --------O-2FAF1A-----------------------------
  229. INT 2F - WinDOS v2.11 - SEARCH FOR NON-FRAGMENTED DISK AREA
  230.     AX = AF1Ah
  231.     BL = drive (00h = current, 01h = A:, etc.)
  232.     CX = number of clusters desired
  233. Return: CF clear if successful
  234.         DI = first free cluster on logical drive
  235.         BP = first cluster of contiguous free area
  236.         AX destroyed
  237.     CF set on error
  238.         AX = DOS error code (see #1366 at INT 21/AH=59h/BX=0000h)
  239. Desc:    attempt to find an area of the disk containing the specified number
  240.       of contiguous unallocated clusters
  241. SeeAlso: AX=AF00h"WinDOS"
  242. ----------2FAF30-----------------------------
  243. INT 2F U - ???
  244.     AX = AF30h
  245.     ???
  246. Return: ???
  247. SeeAlso: AX=AF00h
  248. --------d-2FAFDE-----------------------------
  249. INT 2F - Disk-Emu - INSTALLATION CHECK / GET VERSION
  250.     AX = AFDEh
  251.     ES:DI -> 14-byte buffer for data (see #2663)
  252. Return: AX = CFDEh (Carlos Fernandez Disk-Emu) if installed
  253.         BX = version (BH = major, BL = minor)
  254.  
  255. Format of Disk-Emu information data:
  256. Offset    Size    Description    (Table 2663)
  257.  00h    BYTE    number of tracks
  258.  01h    BYTE    sectors per track
  259.  02h    WORD    bytes per sector
  260.  04h    BYTE    number of heads
  261.  05h    BYTE    flag: 00h inactive, 01h active
  262.  06h    BYTE    write protection (00h none, 01h full, 02h pseudo)
  263.  07h    BYTE    saved (00h some unsaved data, 01h all data saved)
  264.  08h    BYTE    disk in memory (00h no, 01h yes)
  265.  09h    WORD    EMS handle
  266.  0Bh    WORD    XMS handle
  267.  0Dh    BYTE    memory type used for disk (00h XMS, 01h EMS)
  268. --------V-2FB000-----------------------------
  269. INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  270.     AX = B000h
  271. Return: AL = status
  272.         00h not installed, OK to install
  273.         01h not installed, not OK to install
  274.         FFh installed
  275. Notes:    called by DISPLAY.SYS
  276.     documented for DOS 5.0, but undocumented in prior versions
  277. SeeAlso: AX=2300h,AX=2E00h,AX=B001h
  278. --------V-2FB001-----------------------------
  279. INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  280.     AX = B001h
  281.     DS:BX -> DWORD buffer for address of 8x8 font table
  282. Return: buffer filled
  283.     AL = FFh
  284. Note:    PC-DOS 3.30/4.01 and MS-DOS 6.0 set the font table offset to 0130h,
  285.       MS-DOS 3.30 sets it to 0030h
  286. SeeAlso: AH=2Eh"GRAFTABL",AX=B000h
  287. --------I-2FB400-----------------------------
  288. INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK
  289.     AX = B400h
  290. Return: AL = FFh if installed
  291. --------I-2FB401-----------------------------
  292. INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS
  293.     AX = B401h
  294. Return: ES -> host screen buffer (PC ASCII format)
  295.     ES unchanged if communications not started
  296. --------I-2FB402-----------------------------
  297. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  298.     AX = B402h
  299.     BX = ???
  300. Return: ???
  301. --------I-2FB403-----------------------------
  302. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  303.     AX = B403h
  304.     ???
  305. Return: ???
  306. --------I-2FB404-----------------------------
  307. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  308.     AX = B404h
  309.     ???
  310. Return: ???
  311. --------I-2FB405-----------------------------
  312. INT 2F - IBM PC3270 EMULATION PROG v3 - ???
  313.     AX = B405h
  314.     ???
  315. Return: ???
  316. --------f-2FB700-----------------------------
  317. INT 2F - APPEND - INSTALLATION CHECK
  318.     AX = B700h
  319. Return: AL = status
  320.         00h not installed
  321.         FFh installed
  322. Note:    MS-DOS 3.30 APPEND refuses to install itself when run inside TopView or
  323.       a TopView-compatible environment
  324. SeeAlso: AX=B702h
  325. --------f-2FB701-----------------------------
  326. INT 2F U - APPEND v3.21 only - GET APPEND PATH
  327.     AX = B701h
  328. Return: ES:DI -> active APPEND path
  329. Notes:    the only version of APPEND known to support this call is the APPEND
  330.       shipped with Microtek MS-DOS 3.21; MS-DOS 3.30-6.00 APPEND displays
  331.       "Incorrect APPEND Version" and aborts the caller
  332.     use AX=B704h first, and only call this function if that one is not
  333.       supported
  334. SeeAlso: AX=B700h,AX=B704h
  335. --------f-2FB702-----------------------------
  336. INT 2F - APPEND - GET VERSION
  337.     AX = B702h
  338. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  339.     AL = major version number
  340.     AH = minor version number, otherwise
  341. SeeAlso: AX=B700h,AX=B710h
  342. --------f-2FB703-----------------------------
  343. INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  344.     AX = B703h
  345.     ES:DI -> INT 21 handler APPEND should chain to
  346. Return: ES:DI -> APPEND's INT 21 handler
  347. Note:    each invocation of this function toggles a flag which APPEND uses to
  348.       determine whether to chain to the user handler or the original
  349.       INT 21
  350. SeeAlso: AX=B700h,AX=B706h
  351. --------f-2FB704-----------------------------
  352. INT 2F - DOS 3.3+ APPEND - GET APPEND PATH
  353.     AX = B704h
  354. Return: ES:DI -> active APPEND path (128 bytes max)
  355. Note:    some versions of append do not support this call, and return ES
  356.       unchanged; in this case, you should call AX=B701h to get the APPEND
  357.       path
  358. SeeAlso: AX=B701h
  359. --------f-2FB706-----------------------------
  360. INT 2F - DOS 4.0+ APPEND - GET APPEND FUNCTION STATE
  361.     AX = B706h
  362. Return: BX = APPEND state (see #2664)
  363. SeeAlso: AX=B700h,AX=B707h
  364.  
  365. Bitfields for APPEND state:
  366. Bit(s)    Description    (Table 2664)
  367.  0    set if APPEND enabled
  368.  1-11    reserved
  369.  12    (DOS 5.0) set if APPEND applies directory search even if a drive has
  370.       been specified
  371.  13    set if /PATH flag active
  372.  14    set if /E flag active (environment var APPEND exists)
  373.  15    set if /X flag active
  374. --------f-2FB707-----------------------------
  375. INT 2F - DOS 4.0+ APPEND - SET APPEND FUNCTION STATE
  376.     AX = B707h
  377.     BX = APPEND state bits (see #2664)
  378. SeeAlso: AX=B700h,AX=B706h
  379. --------f-2FB710-----------------------------
  380. INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO
  381.     AX = B710h
  382. Return: AX = current APPEND state (see #2664)
  383.     BX = ??? (0000h in MS-DOS 3.30 and 5.00)
  384.     CX = ??? (0000h in MS-DOS 3.30 and 5.00)
  385.     DL = major version
  386.     DH = minor version
  387. SeeAlso: AX=B700h,AX=B702h
  388. --------f-2FB711-----------------------------
  389. INT 2F - DOS 4.0+ APPEND - SET RETURN FOUND NAME STATE
  390.     AX = B711h
  391. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  392.       6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename
  393.       is written over top of the filename passed to the INT 21h call.  The
  394.       application must provide a sufficiently large buffer.     This state is
  395.       reset after the next INT 21h call processed by APPEND.
  396.     APPEND uses the byte at offset 3Dh in the PSP
  397.       (see #1066 at INT 21/AH=26h) to store the flag telling it to
  398.       overwrite the filename
  399. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  400.       INT 21/AH=6Ch
  401. SeeAlso: INT 21/AH=26h,INT 21/AH=4Eh
  402. --------N-2FB800-----------------------------
  403. INT 2F - NETWORK - INSTALLATION CHECK
  404.     AX = B800h
  405. Return: AL = status
  406.         00h        not installed
  407.         nonzero installed
  408.           BX = installed component flags (test in this order!)
  409.            bit 6   server
  410.            bit 2   messenger
  411.            bit 7   receiver
  412.            bit 3   redirector
  413.            bit 1   LANPUP (LANtastic 4.0)
  414. Notes:    this function is supported by PC LAN Program, LAN Manager, LANtastic,
  415.       NetWare Lite, SilverNET, 10NET, etc.
  416.     LANtastic and NetWare Lite use only BL for the return value, preserving
  417.       BH; LAN Manager and DOS LAN Requester return BH=00h.    This permits
  418.       differentiation between those two groups by setting BH to a nonzero
  419.       value before the call and checking its value on return.
  420. SeeAlso: AX=4E53h,AX=B809h
  421. --------N-2FB800CXF041-----------------------
  422. INT 2F - 10NET - INSTALLATION CHECK
  423.     AX = B800h
  424.     CX = F041h
  425. Return: AL = status
  426.         00h        not installed
  427.         nonzero installed
  428.         BX = installed component flags (test in this order!)
  429.            bit 6   server
  430.            bit 2   messenger
  431.            bit 7   receiver
  432.            bit 3   redirector
  433.            bit 1   LANPUP (LANtastic 4.0)
  434.         CX = 10Net data segment
  435.         CX:DX -> 10Net Configuration Table
  436.               (see #1377 at INT 21/AX=5E01h"10NET")
  437. Note:    if CX <> F041h on entry, neither CX nor DX will be changed, and this
  438.       call becomes identical to the standard installation check above
  439. SeeAlso: AX=B800h"network",INT 21/AX=5E01h"10NET"
  440. --------N-2FB803-----------------------------
  441. INT 2F - NETWORK - GET NETWORK EVENT POST HANDLER
  442.     AX = B803h
  443. Return: ES:BX -> current event post handler (see AX=B804h)
  444. Note:    this function is supported by PC LAN Program, 10NET v5.0,
  445.       NetSoft DOS-NET v1.20+
  446. SeeAlso: AX=B800h,AX=B804h,AX=B903h
  447. --------N-2FB804-----------------------------
  448. INT 2F - NETWORK - SET NETWORK EVENT POST HANDLER
  449.     AX = B804h
  450.     CX = (10NET) 0370h if 10Windows is hooking post handler
  451.     ES:BX -> new event post handler (see #2665)
  452. Notes:    used in conjunction with AX=B803h to hook into the network event post
  453.       routine
  454.     this function is supported by PC LAN Program, 10NET v5.0,
  455.       NetSoft DOS-NET v1.20+
  456.     The specified handler is called on any network event.  Two events are
  457.       defined: message received and critical network error.
  458. SeeAlso: AX=B800h,AX=B803h,AX=B904h
  459.  
  460. (Table 2665)
  461. Values network post routine is called with:
  462.     AX = 0000h single block message
  463.         DS:SI -> ASCIZ originator name
  464.         DS:DI -> ASCIZ destination name
  465.         ES:BX -> text header (see #2666)
  466.     AX = 0001h start multiple message block
  467.         CX = block group ID
  468.         DS:SI -> ASCIZ originator name
  469.         DS:DI -> ASCIZ destination name
  470.     AX = 0002h multiple block text
  471.         CX = block group ID
  472.         ES:BX -> text header (see #2666)
  473.     AX = 0003h end multiple block message
  474.         CX = block group ID
  475.     AX = 0004h message aborted due to error
  476.         CX = block group ID
  477.     AX = 0101h server received badly formatted network request
  478.         Return: AX = FFFFh (PC LAN will process error)
  479.     AX = 0102h unexpected network error
  480.         ES:BX -> NCB (see #2920 at INT 5C"NetBIOS")
  481.     AX = 0103h server received INT 24 error
  482.         other registers as for INT 24, except AH is in BH
  483.         Return: as below, but only 0000h and FFFFh allowed
  484. Return: AX = response code
  485.         0000h user post routine processed message
  486.         0001h PC LAN will process message, but message window not displayed
  487.         FFFFh PC LAN will process message
  488.  
  489. Format of text header:
  490. Offset    Size    Description    (Table 2666)
  491.  00h    WORD    length of text (maximum 512 bytes)
  492.  02h  N BYTEs    text of message
  493. Note:    all CRLF sequences in message text are replaced by 14h; all other
  494.       values below 20h (space) are reserved
  495. --------N-2FB807-----------------------------
  496. INT 2F - NETWORK - GET NetBIOS NAME NUMBER OF MACHINE NAME
  497.     AX = B807h
  498. Return: CH = NetBIOS name number of the machine name
  499. SeeAlso: INT 21/AX=5E00h
  500. --------N-2FB808-----------------------------
  501. INT 2F U - NETWORK - RELINK KEYBOARD HANDLER
  502.     AX = B808h
  503.     ES:BX -> INT 09 handler network should call after it finishes INT 09
  504. Notes:    this call replaces the address to which the network software chains on
  505.       an INT 09 without preserving the original value.  This allows a prior
  506.       handler to unlink, but does not allow a new handler to be added
  507.       such that the network gets the INT 09 first unless the new handler
  508.       completely takes over INT 09 and never chains.
  509.     this function is called by the DOS 3.2 KEYBxx.COM
  510. SeeAlso: AX=B908h
  511. --------N-2FB809-----------------------------
  512. INT 2F - NETWORK - LANtastic, NetWare Lite - GET VERSION
  513.     AX = B809h
  514. Return: AH = major version
  515.     AL = minor version (decimal)
  516. Notes:    this function is supported in this form by LANtastic, NetWare Lite,
  517.       SilverNET, ...
  518.     NetWare Lite returns its own version number rather than a PC LAN
  519.       compatibility version
  520. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"PC LAN Program"
  521. --------N-2FB809-----------------------------
  522. INT 2F - NETWORK - PC LAN Program, Microsoft Networking - GET VERSION
  523.     AX = B809h
  524. Return: AH = minor version (decimal)
  525.     AL = major version
  526. Notes:    this function is supported in this form by PC LAN Program, LAN Manager,
  527.       the DOS LAN Requester, 10NET v5.0, and Microsoft Networking under
  528.       WfWg 3.11
  529.     10NET returns version 1.10 (AX=0A01h) for compatibility
  530. SeeAlso: AX=4E53h,AX=B800h,AX=B809h"LANtastic"
  531. --------N-2FB80A-----------------------------
  532. INT 2F u - PC Network 1.00 - ???
  533.     AX = B80Ah
  534.     ???
  535. Return: ???
  536. Program: PC Network is an early networking package which was renamed the
  537.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  538. Note:    called by RECEIVER (equivalent to NetWare Lite SERVER)
  539. --------N-2FB80E-----------------------------
  540. INT 2F U - DOS LAN Requester - GET XSI2 ADDRESS / DATA
  541.     AX = B80Eh
  542. Return: DS:DI -> XSI2 TSR's resident data (see #2667)
  543. Note:    this function is used by NET.COM to locate the USERID and DOMAIN of
  544.       the logged-in user (which may differ from the NET START domain
  545.       name from DOSLAN.INI which is returned by AX=B80Fh)
  546. SeeAlso: AX=B800h,AX=B80Fh
  547.  
  548. Format of XSI2 resident data:
  549. Offset    Size    Description    (Table 2667)
  550.  00h 254 BYTEs    ???
  551.  FEh 10 BYTEs    user ID 1
  552. 108h 10 BYTEs    user ID 2
  553. 112h 10 BYTEs    domain name 1
  554. 11Ch 10 BYTEs    domain name 2
  555. 126h  ? BYTEs    domain controller
  556. --------N-2FB80F-----------------------------
  557. INT 2F - DOS LAN Requester - GET START PARAMETERS
  558.     AX = B80Fh
  559.     CX = size of return data buffer
  560.     ES:DI -> return data buffer (see #2668)
  561. Return: AX = status
  562.          00h     network started
  563.          nonzero network not started
  564.     CX = number of bytes returned in buffer
  565.     ES:DI buffer filled
  566. SeeAlso: AX=B809h"PC LAN Program",AX=B80Eh
  567.  
  568. Format of DOS LAN Requester return data buffer:
  569. Offset    Size    Description    (Table 2668)
  570.  00h    BYTE    major version
  571.  01h    BYTE    minor version
  572.  02h    WORD    configuration flags given when network was started (see #2669)
  573.  04h 15 BYTEs    NET START machine name (space padded)
  574.  13h    BYTE    00h
  575.  14h 9    BYTEs    NET START domain name (NULL padded)
  576.  1Dh    BYTE    00h
  577.  1Eh 32 BYTEs    /WRK heuristics string (space padded, not terminated)
  578.  3Eh    WORD    /SRV value
  579.  40h    WORD    /ASG value
  580.  42h    WORD    /NBC value
  581.  44h    WORD    /NBS value
  582.  46h    WORD    /BBC value
  583.  48h    WORD    /BBS value
  584.  4Ah    WORD    /PBC value
  585.  4Ch    WORD    /PBS value
  586.  4Eh    WORD    /PFS value
  587.  50h    WORD    /PFT value
  588.  52h    WORD    /PWT value
  589.  54h    WORD    /KUC value
  590.  56h    WORD    /KST value
  591.  58h    WORD    /NVS value
  592.  5Ah    WORD    /NMS value
  593.  5Ch    WORD    /NDB value
  594.  5Eh    WORD    /MBI value
  595.  60h    BYTE    NetBIOS name number for machine name
  596.  61h    BYTE    NetBIOS name number for domain name
  597.  62h    WORD    NetBIOS sessions required for configuration
  598.  64h    WORD    NetBIOS commands required for configuration
  599.  66h    WORD    NetBIOS names required for configuration
  600.  68h 128 BYTEs    NET START path (LANROOT)
  601.  E8h    BYTE    00h
  602.  
  603. Bitfields for configuration flags:
  604. Bit(s)    Description    (Table 2669)
  605.  0    /NVS nonzero
  606.  1    /NMS nonzero
  607.  2    /API
  608.  3    /HIM
  609.  4    /LIM
  610.  5    /ENC
  611.  6    /POP
  612.  7    /EMS
  613.  8    /RPL
  614.  9-12    reserved
  615.  13    RDR started
  616.  14    RCV started
  617.  15    User is currently logged on
  618. --------N-2FB900-----------------------------
  619. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  620.     AX = B900h
  621. Return: AL = state
  622.         00h if not installed
  623.         FFh if installed
  624. --------N-2FB901-----------------------------
  625. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  626.     AX = B901h
  627. Return: AL = ???
  628.     ES:BX -> RECEIVER.COM INT 2F handler
  629. Desc:    allows more efficient execution by letting the caller bypass any other
  630.       INT 2F handlers which have been added since RECEIVER.COM was
  631.       installed
  632. --------N-2FB903-----------------------------
  633. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  634.     AX = B903h
  635. Return: ES:BX -> POST handler
  636. SeeAlso: AX=B803h,AX=B904h
  637. --------N-2FB904-----------------------------
  638. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  639.     AX = B904h
  640.     ES:BX -> new POST handler
  641. SeeAlso: AX=B804h,AX=B903h
  642. --------N-2FB905-----------------------------
  643. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  644.     AX = B905h
  645.     DS:BX -> 128-byte buffer for filename 1
  646.     DS:DX -> 128-byte buffer for filename 2
  647. Return: buffers filled from RECEIVER.COM internal buffers
  648. Note:    use of filenames is unknown, but one appears to be for storing messages
  649. SeeAlso: AX=B906h
  650. --------N-2FB906-----------------------------
  651. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  652.     AX = B906h
  653.     DS:BX -> 128-byte buffer for filename 1
  654.     DS:DX -> 128-byte buffer for filename 2
  655. Return: RECEIVER.COM internal buffers filled from user buffers
  656. Note:    use of filenames is unknown, but one appears to be for storing messages
  657. SeeAlso: AX=B905h
  658. --------N-2FB908-----------------------------
  659. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  660.     AX = B908h
  661.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  662. Note:    this call replaces the address to which RECEIVER.COM chains on an
  663.       INT 09 without preserving the original value.     This allows a prior
  664.       handler to unlink, but does not allow a new handler to be added
  665.       such that RECEIVER gets the INT 09 first.
  666. SeeAlso: AX=B808h
  667. --------V-2FBC00-----------------------------
  668. INT 2F - Windows 3.0, DOS 5+ EGA.SYS - INSTALLATION CHECK
  669.     AX = BC00h
  670. Return: AL = state
  671.         00h not installed, OK to install
  672.         01h not installed, not OK to install
  673.         FFh installed
  674.         BX = 5456h ("TV")
  675. Range:    AH=80h to AH=FFh, selected by commandline switch
  676. SeeAlso: AX=BC06h"EGA",INT 10/AH=FAh"EGA"
  677. --------s-2FBC00BX3F3F-----------------------
  678. INT 2F - MediaVision MVSOUND.SYS - INSTALLATION CHECK
  679.     AX = BC00h
  680.     BX = 3F3Fh ('??')
  681.     CX = 0000h
  682.     DX = 0000h
  683. Return: if installed, BX XOR CX XOR DX = 4D56h ('MV')
  684. Program: MVSOUND.SYS is a driver for the MediaVision ProAudio Spectrum family
  685.       of sound boards; its primary programmer was Bryan Crane
  686. SeeAlso: AX=BC01h"MVSOUND",AX=BC02h,AX=BC03h,AX=BC04h,AX=BC06h"MVSOUND"
  687. --------s-2FBC01-----------------------------
  688. INT 2F - MediaVision MVSOUND.SYS - GET VERSION
  689.     AX = BC01h
  690.     BX = magic value 6D20h ('m ')
  691.     CX = magic value 2076h (' v')
  692.     DX = magic value 2020h ('  ')
  693. Return: BX = ASCII major version (leading zeros significant)
  694.     CX = ASCII minor version (leading zeros significant)
  695. SeeAlso: AX=BC00h/BX=3F3Fh
  696. --------s-2FBC02-----------------------------
  697. INT 2F - MediaVision MVSOUND.SYS - GET STATE TABLE POINTER
  698.     AX = BC02h
  699. Return: AX = 4D56h ('MV')
  700.     BX:DX -> state table
  701. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC03h
  702. --------s-2FBC03-----------------------------
  703. INT 2F - MediaVision MVSOUND.SYS - GET FUNCTION TABLE POINTER
  704.     AX = BC03h
  705. Return: AX = 4D56h ('MV')
  706.     BX:DX -> function table
  707.     CX = ??? (000Eh)
  708. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC02h
  709. --------s-2FBC04-----------------------------
  710. INT 2F - MediaVision MVSOUND.SYS - GET DMA AND IRQ CHANNELS
  711.     AX = BC04h
  712. Return: AX = 4D56h ('MV')
  713.     BL = DMA channel
  714.     CL = IRQ number
  715. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC01h"MVSOUND"
  716. --------V-2FBC06-----------------------------
  717. INT 2F U - MS Windows 3.0, DOS 5+ EGA.SYS - GET VERSION INFO
  718.     AX = BC06h
  719. Return: BX = 5456h ("TV")
  720.     CH = major version
  721.     CL = minor version
  722.     DL = revision
  723. SeeAlso: AX=BC00h"EGA",INT 10/AH=FAh"EGA"
  724. --------s-2FBC06-----------------------------
  725. INT 2F - MediaVision MVSOUND.SYS - GET STATUS STRING
  726.     AX = BC06h
  727. Return: AX = 4D56h ('MV')
  728.     DX:BX -> status string (first byte 0Ch if no status message to display)
  729. SeeAlso: AX=BC00h/BX=3F3Fh,AX=BC01h"MVSOUND",AX=BC0Bh"MVSOUND"
  730. --------s-2FBC0B-----------------------------
  731. INT 2F - MediaVision MVSOUND.SYS - GET EXECUTABLE PATH
  732.     AX = BC0Bh
  733. Return: BX:DX -> ASCIZ path for MVPROAS.EXE, 0000h:0000h if not available
  734. SeeAlso: AX=BC00h/BX=3F3Fh
  735. --------s-2FBC0E-----------------------------
  736. INT 2F - MediaVision MVSOUND.SYS - RE-INITIALIZE INT 09 HANDLER
  737.     AX = BC0Eh
  738. Return: BX = status
  739.         0000h on failure
  740.         AX = 0000h
  741.         FFFFh if successful
  742.         DX:AX -> prior INT 09 handler
  743. Desc:    re-initialize INT 09 handler to re-enable hotkeys (e.g. after loading
  744.       KEYB)
  745. --------U-2FBE00-----------------------------
  746. INT 2F - REDVIEW - INSTALLATION CHECK
  747.     AX = BE00h
  748. Return: AL = FFh if installed
  749. Program: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which
  750.       copies data sent to standard output to standard error when the
  751.       former has been redirected to a file, thus allowing the data to
  752.       be seen on the screen at the same time it is captured in a file
  753. --------N-2FBF00-----------------------------
  754. INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  755.     AX = BF00h
  756. Return: AL = FFh if installed
  757. Note:    this function is also supported by NetSoft's DOS-NET v1.20+; however,
  758.       none of the remaining BFxxh calls are supported
  759. SeeAlso: AX=BF01h,AX=BF80h,INT 2A/AX=4147h
  760. --------N-2FBF01-----------------------------
  761. INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  762.     AX = BF01h
  763.     ???
  764. Return: ???
  765. SeeAlso: AX=BF00h
  766. --------N-2FBF80-----------------------------
  767. INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  768.     AX = BF80h
  769.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  770. Return: AL = FFh if installed
  771.         ES:DI -> internal workspace
  772. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  773. SeeAlso: AX=BF00h
  774. --------F-2FC0-------------------------------
  775. INT 2F - METZ XpressFax Hardware TSR (CLASS2) - API
  776.     AH = C0h
  777.     AL = function code (01h to 15h)
  778. Return: ???
  779. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h/BX=4D53h
  780. --------N-2FC000-----------------------------
  781. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  782.     AX = C000h
  783. Return: AL = FFh if installed
  784.         DX:BX -> FAR entry point (see #2670,#2671,#2672)
  785.         ES:SI -> signature string "LINKSUP$"
  786. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  787. Note:    on return, ES = DX for LSL v1.10 and v2.05; LSL makes use of this in
  788.       its search for a previous installation
  789. SeeAlso: AX=5100h,AX=C000h"NESL"
  790.  
  791. (Table 2670)
  792. Call LSL function "Request MLID Registration" with:
  793.     BX = 0001h
  794.     ES:SI -> registration??? record (see #2674)
  795.     DS:DI -> buffer for LSL information block (see #2675)
  796. Return: AX = completion code (0000h,8001h) (see #2673)
  797.     DS:DI buffer filled if successful
  798.     BX,CX corrupted
  799. Note:    see "Novell LAN Driver Developer's Guide, Volume III" for more details
  800.  
  801. (Table 2671)
  802. Call LSL function "get support entry points" with:
  803.     BX = 0002h
  804.     ES:SI -> buffer for entry point record (see #2676)
  805. Return: ES:SI buffer filled
  806.  
  807. (Table 2672)
  808. Call LSL function "Request MLID API entry point" with:
  809.     BX = 0003h
  810. Return: ES:SI -> MLID (Multiple Link Interface Driver) API entry point
  811.         (call with BX=function 00h-10h, not range-checked)
  812. Note:    LSL v1.10 and v2.05 execute BX=0003h for BX=0000h and any BX >= 0003h
  813.  
  814. (Table 2673)
  815. Values for LSL completion code:
  816.  0000h    successful
  817.  8001h    out of resources
  818.  8002h    bad parameter
  819.  8003h    no more items
  820.  8004h    item not present
  821.  8005h    failed
  822.  8006h    receive overflow
  823.  8007h    canceled
  824.  8008h    bad command
  825.  8009h    duplicate entry
  826.  800Ah    no such handler
  827.  800Bh    no such driver
  828.  
  829. Format of LSL registration record:
  830. Offset    Size    Description    (Table 2674)
  831.  00h    DWORD    -> ??? FAR function (to be called with ES:SI -> ??? and
  832.           returning AX = completion code)
  833.  04h    DWORD    -> ???
  834.  08h    DWORD    -> ??? data (at least 3Eh bytes)
  835.  
  836. Format of LSL information block:
  837. Offset    Size    Description    (Table 2675)
  838.  00h    DWORD    -> ??? entry point (called with BX=function 00h-11h)
  839.  04h    WORD    ???
  840.  06h    WORD    ???
  841. Note:    due to a fencepost error, LSL v2.05 (distributed with Novell DOS 7)
  842.       will crash if the above entry point is called with BX=0012h
  843.  
  844. Format of entry point record:
  845. Offset    Size    Description    (Table 2676)
  846.  00h    DWORD    pointer to protocol support entry point in LSL (see #2677)
  847.  04h    DWORD    pointer to general support entry point in LSL (see #2678)
  848.  
  849. (Table 2677)
  850. Call protocol support entry point with:
  851.     BX = function number
  852.         0000h ???
  853.         0001h ???
  854.         0002h ???
  855.         0003h "ScheduleAESEvent"
  856.         ES:SI -> AES ECB to be scheduled (see #2681)
  857.         Return: ES,SI preserved
  858.         0004h "CancelAESEvent"
  859.         ES:SI -> ECB to be cancelled (see #2681)
  860.         Return: ES,SI preserved
  861.         0005h "GetIntervalMarker"
  862.         Return: DX:AX = current interval marker in milliseconds
  863.             all other registers preserved
  864.         0006h "RegisterStack"
  865.         AX = logical board number
  866.         ES:SI -> bound stack info structure (see #2691)
  867.         Return: BX = assigned Stack ID if AX=0000h
  868.         0007h "DeRegisterStack"
  869.         AX = protocol stack's assigned Stack ID
  870.         0008h "RegisterDefaultStack"
  871.         AX = logical board number
  872.         ES:SI -> stack info structure (see #2692)
  873.         0009h "DeRegisterDefaultStack"
  874.         AX = logical board number
  875.         000Ah "RegisterPrescanStack"
  876.         AX = logical board number
  877.         ES:SI -> stack info structure (see #2692)
  878.         000Bh "DeRegisterPrescanStack"
  879.         AX = logical board number
  880.         000Ch "SendPacket"
  881.         ES:SI -> send ECB
  882.         Return: interrupts disabled
  883.         000Dh ???
  884.         000Eh ???
  885.         000Fh ???
  886.         0010h "GetStackIDFromName"
  887.         ES:SI -> counted NUL-terminated protocol name (max 15 chars)
  888.         Return: BX = Stack ID if AX=0000h
  889.         0011h "GetPIDFromStackIDBoard"
  890.         AX = Stack ID for protocol
  891.         CX = logical board number
  892.         ES:SI -> 6-byte buffer for protocol ID
  893.         0012h "GetMLIDControlEntry"
  894.         AX = logical board number
  895.         Return: ES:SI -> MLID control handler (see #2679) if AX=0000h
  896.         0013h "GetProtocolControlEntry"
  897.         AX = Stack ID or
  898.             FFFEh Prescan stack
  899.                 CX = logical board number
  900.             FFFFh default protocol
  901.                 CX = logical board number
  902.         Return: ES:SI -> protocol stack control entry point if AX=0000h
  903.                   (see #2680)
  904.         0014h "GetLSLStatistics"
  905.         Return: AX = 0000h (successful)
  906.             ZF set
  907.             ES:SI -> LSL statistics table (see #2683)
  908.         0015h "BindStack"
  909.         AX = protocol stack's assigned Stack ID
  910.         CX = logical board number
  911.         0016h "UnbindStack"
  912.         AX = protocol stack's assigned Stack ID
  913.         CX = logical board number
  914.         0017h "AddProtocolID"
  915.         AX = frame type ID code
  916.         ES:SI -> 6-byte protocol ID
  917.         CX:DI -> counted NUL-terminated short protocol name (max 15 ch)
  918.         0018h "RelinquishControl"
  919.         Return: after LSL performs any necessary background processing
  920.         0019h "GetLSLConfiguration"
  921.         Return: AX = 0000h (successful)
  922.             ZF set
  923.             ES:SI -> LSL configuration table (see #2682)
  924.         001Ah "GetTickMarker"
  925.         Return: AX = number of 55ms ticks since LSL loaded
  926.             BX destroyed
  927. Return: AX = completion code (see #2673)
  928.     ZF set if successful
  929.     SS:SP, DS, BP preserved; most other registers may be destroyed
  930.  
  931. (Table 2678)
  932. Call general support entry point with:
  933.     BX = function number
  934.         0000h "Allocate Memory" (obsolete)
  935.          always returns AX=8008h (BAD_COMMAND)
  936.         0001h "Free Memory" (obsolete)
  937.          always returns AX=8008h (BAD_COMMAND)
  938.         0002h "Realloc Memory" (obsolete)
  939.          always returns AX=8008h (BAD_COMMAND)
  940.         0003h "Memory Statistics" (obsolete)
  941.          always returns AX=8008h (BAD_COMMAND)
  942.         0004h "Add Memory To Pool" (obsolete)
  943.          always returns AX=8008h (BAD_COMMAND)
  944.         0005h "AddGeneralService"
  945.         ES:SI -> General Service Control Block (see #2693)
  946.         0006h "RemoveGeneralService"
  947.         ES:SI -> General Service Control Block (see #2693)
  948.         0007h "GetNETcfgPath"
  949.         Return: AX = 0000h (successful)
  950.             DS:DX -> ASCIZ pathname for NET.CFG
  951.         0008h U ???     (in LSL 1.10)
  952.         Return: AX = 0000h
  953.             ES:SI -> ??? (a 22-byte data area)
  954.         000Ah "GetCriticalSectionStatus"
  955.         Return: BX = total outstanding calls to "StartCriticalSection"
  956.         000Bh "ServiceEvents"
  957.         interrupts disabled
  958.         Return: interrupts disabled
  959.         0010h "GetStackECB"
  960.         DS:DI -> Lookahead structure (see #2694)
  961.         interrupts disabled
  962.         Return: ES:SI -> ECB if successful (AX=0000h,ZF set)
  963.             interrupts disabled
  964.         8000h-FFFFh reserved for user general service providers
  965. Return: AX = completion code (see #2673)
  966.     ZF set if successful
  967.     SS:SP, DS, BP preserved
  968.  
  969. (Table 2679)
  970. Call MLID control handler with:
  971.     AX = logical board number
  972.     BX = function number
  973.         0000h "GetMLIDConfiguration"
  974.         Return: ES:SI -> MLID's configuration table if successful
  975.                   (see #2686 for format)
  976.         0001h "GetMLIDStatistics"
  977.         Return: ES:SI -> MLID's statistics table if successful
  978.                   (see #2686 for format)
  979.         0002h "AddMulticastAddress"
  980.         ES:SI -> 6-byte multicast address to add
  981.         0003h "DeleteMulticastAddress"
  982.         ES:SI -> 6-byte multicast address to delete
  983.         0005h "MLIDShutdown"
  984.         CX = type
  985.             0000h permanent (also deregisters from LSL)
  986.             other temporary (shutdown hardware only)
  987.         0006h "MLIDReset" reinitialize board / restart from temp shutdown
  988.         0007h "Create Connection" (obsolete?)
  989.         ???
  990.         0008h "Delete Connection" (obsolete?)
  991.         ???
  992.         0009h "SetLookAheadSize"
  993.         CX = requested lookahead size (00h-80h)
  994.         000Ah "PromiscuousChange"
  995.         CX = what to receive promiscuously
  996.             bit 0: MAC frames
  997.             bit 1: non-MAC frames
  998.         000Bh "RegisterReceiveMonitor"
  999.         CX = subfunction
  1000.             0000h disable receive monitoring
  1001.             else  enable receive monitoring
  1002.         ES:SI -> monitor receive routine
  1003.         ES:DI -> monitor transmit routine
  1004.         000Ch "Driver Poll" (obsolete?)
  1005.         ???
  1006. Return: AX = completion code (see #2673)
  1007.     ZF set if successful
  1008. Note:    not all boards/MLIDs support function 0010h; see bit 13 in the MLID
  1009.       mode flags field of the MLID's configuration table
  1010.  
  1011. (Table 2680)
  1012. Call protocol stack control entry point with:
  1013.     BX = function number
  1014.         0000h "GetProtocolStackConfiguration"
  1015.         Return: ES:SI -> protocol stack's configuration table
  1016.                    (see #2685)
  1017.         0001h "GetProtocolStackStatistics"
  1018.         Return: ES:SI -> protocol stack's statistics table (see #2684)
  1019.         0002h "BindToMLID"
  1020.         CX = board number to bind to
  1021.         ES:SI -> implementation-dependant parameter string
  1022.         0003h "UnBindFromMLID"
  1023.         CX = board number from which protocol should unbind
  1024.         ES:SI -> optional implementation-dependant parameter string
  1025.         0004h "MLIDDeRegistered"
  1026.         CX = board number that has de-registered from LSL
  1027. Return: AX = status
  1028.         0000h successful
  1029.         else implementation-dependant error codes
  1030.     ZF set if successful
  1031.     SS:SP, DS, BP preserved
  1032.  
  1033. Format of AES ECB:
  1034. Offset    Size    Description    (Table 2681)
  1035.  00h    DWORD    "AESLink" pointer used by LSL for list management
  1036.  04h    DWORD    number of milliseconds to wait
  1037.  08h    DWORD    "AESStatus" (is set to 00000000h when AES ESR is invoked)
  1038.  0Ch    DWORD    -> function to be invoked when time expires
  1039.         ES:SI will point to this structure on entry,
  1040.         DS, BP, and SS:SP must be preserved.
  1041. SeeAlso: #2695
  1042.  
  1043. Format of LSL Configuration Table:
  1044. Offset    Size    Description    (Table 2682)
  1045.  00h    BYTE    major version of configuration table
  1046.  01h    BYTE    minor version of configuration table (decimal, 0-99)
  1047.  02h  8 BYTEs    reserved
  1048.  0Ah    BYTE    LSL major version (decimal)
  1049.  0Bh    BYTE    LSL minor version (decimal, 0-99)
  1050. ---LSL 1.0x ---
  1051.  0Ch 14 BYTEs    reserved
  1052. ---LSL 1.10+ ---
  1053.  0Ch    WORD    maximum number of boards which LSL can handle
  1054.  0Eh    WORD    maximum number of protocol IDs which LSL can handle
  1055.  10h 12 BYTEs    reserved
  1056.  
  1057. Format of LSL Statistics Table:
  1058. Offset    Size    Description    (Table 2683)
  1059.  00h    BYTE    major version of statistics table format
  1060.  01h    BYTE    minor version of statistics table format (decimal, 0-99)
  1061.  02h    WORD    "GenericCounters" number of counters in static portion of
  1062.           table
  1063.  04h    DWORD    "ValidCountersMask" bit mask indicating which generic
  1064.           counters are actually used.  Bit 31 = TotalTxPackets, bit 30
  1065.           is the next field, etc.
  1066.  08h    DWORD    "TotalTxPackets" total SendPacket requests made
  1067.  0Ch    DWORD    reserved
  1068.  10h    DWORD    reserved
  1069.  14h    DWORD    "AESEventsCount" number of completed AES events
  1070.  18h    DWORD    "PostponedEvents" number of events postponed due to critical
  1071.           sections inside the MLIDs
  1072.  1Ch    DWORD    "CancelAESFailures" number of times CancelAESEvent failed
  1073.  20h    DWORD    reserved
  1074.  24h    DWORD    reserved
  1075.  28h    DWORD    "TotalRxPackets" total number of GetStackECB requests
  1076.  2Ch    DWORD    "UnclaimedPackets" total number of packets not consumed by a
  1077.           protocol stack
  1078.  30h    WORD    "NumberCustom" number of custom variables that follow
  1079.  32h  N DWORDs    custom counters
  1080.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  1081.     var    length-prepended and NULL terminated string for Counter 0
  1082.     ...
  1083.     var    length-prepended and NULL terminated string for Counter N-1
  1084. SeeAlso: #2684,#2690
  1085.  
  1086. Format of Protocol Stack Statistics Table:
  1087. Offset    Size    Description    (Table 2684)
  1088.  00h    BYTE    statistics table major version
  1089.  01h    BYTE    statistics table minor version (decimal, 0-99)
  1090.  02h    WORD    number of generic counters following
  1091.  04h    DWORD    "ValidCountersMask" (bitmask, bit 31 is TotalTxPackets)
  1092.  08h    DWORD    TotalTxPackets
  1093.  0Ch    DWORD    TotalRxPackets
  1094.  10h    DWORD    IgnoredRxPackets
  1095.  14h    WORD    number of custom counters
  1096.  16h  N DWORDs    custom counters
  1097.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  1098.     var    length-prepended and NULL terminated string for Counter 0
  1099.     ...
  1100.     var    length-prepended and NULL terminated string for Counter N-1
  1101. SeeAlso: #2683,#2690
  1102.  
  1103. Format of Protocol Stack Configuration Table:
  1104. Offset    Size    Description    (Table 2685)
  1105.  00h    BYTE    configuration table major version
  1106.  01h    BYTE    configuration table minor version (decimal, 0-99)
  1107.  02h    DWORD    -> counted NUL-terminated long descriptive name for protocol
  1108.  06h    DWORD    -> counted NUL-terminated short name for protocol (15 chars)
  1109.  0Ah    BYTE    protocol stack major version
  1110.  0Bh    BYTE    protocol stack minor version (decimal, 0-99)
  1111.  0Ch 16 BYTEs    reserved for future use
  1112.  
  1113. Format of MLID Configuration Table:
  1114. Offset    Size    Description    (Table 2686)
  1115.  00h 26 BYTEs    signature 'HardwareDriverMLID         ' (8 spaces on end)
  1116.  1Ah    BYTE    configuration table major version
  1117.  1Bh    BYTE    configuration table minor version (decimal, 0-99)
  1118.  1Ch  6 BYTEs    node address
  1119.  22h    WORD    MLID mode flags (see #2687)
  1120.  24h    WORD    board number
  1121.  26h    WORD    board instance (if more than one of same board installed)
  1122.  28h    WORD    maximum packet size
  1123.  2Ah    WORD    BestDataSize
  1124.  2Ch    WORD    WorstDataSize
  1125.  2Eh    DWORD    -> counted NUL-terminated long name for NIC
  1126.  32h    DWORD    -> counted NUL-terminated short name for NIC (8 chars max)
  1127.  36h    DWORD    -> counted NUL-terminated Frame and Media type
  1128.  3Ah    WORD    reserved (0000h)
  1129.  3Ch    WORD    frame type ID
  1130.  3Eh    WORD    TransportTime (milliseconds)
  1131.  40h    DWORD    -> SourceRouteHandler for TokenRing. (Used by ROUTE.COM)
  1132.  44h    WORD    lookahead size
  1133.  46h    WORD    line speed (Mbps if high bit clear, else Kbps)
  1134.  48h    WORD    QueueDepth
  1135.  4Ah  6 BYTEs    reserved (0)
  1136.  50h    BYTE    driver major version
  1137.  51h    BYTE    driver minor version (decimal, 0-99)
  1138.  52h    WORD    bus/multicast flags (see #2688)
  1139.  54h    WORD    send retries
  1140.  56h    DWORD    ConfigTableLink
  1141.  5Ah    WORD    MLID sharing flags (see #2689)
  1142.  5Ch    WORD    slot number
  1143.  5Eh    WORD    I/O address 1
  1144.  60h    WORD    I/O range 1
  1145.  62h    WORD    I/O address 2
  1146.  64h    WORD    I/O range 2
  1147.  66h    DWORD    memory address 1
  1148.  6Ah    WORD    memory size 1
  1149.  6Ch    DWORD    memory address 2
  1150.  70h    WORD    memory size 2
  1151.  72h    BYTE    interrupt line 1
  1152.  73h    BYTE    interrupt line 2
  1153.  74h    BYTE    DMA line 1
  1154.  75h    BYTE    DMA line 2
  1155.  
  1156. Bitfields for MLID mode flags:
  1157. Bit(s)    Description    (Table 2687)
  1158.  15    MLID supports Octet Reversal
  1159.  14    node address is non-canonical
  1160.  13    promiscuous mode is supported
  1161.  12-8    reserved
  1162.  7    LDataSize field in LookAhead structure supported
  1163.  6    raw send supported
  1164.  5    MLID needs to be polled by LSL
  1165.  4    reserved (0)
  1166.  3    multicasting is supported
  1167.  2    not currently used by DOS ODI, set to 0.
  1168.  1    network card uses DMA.
  1169.  0    RealDriverBit, always set to 1.
  1170.  
  1171. Bitfields for bus/multicast flags:
  1172. Bit(s)    Description    (Table 2688)
  1173.  10-9    specialized multicast support
  1174.     00 = Group addressing is default for medium
  1175.     01 = Invalid
  1176.     10 = Filter group address in MLID.
  1177.     11 = Adapter filters group address.
  1178.  2    supports Micro Channel cards
  1179.  1    supports ISA cards
  1180.  0    supports EISA cards
  1181.  
  1182. Bitfields for MLID sharing flags:
  1183. Bit(s)    Description    (Table 2689)
  1184.  8    NIC can share DMA2
  1185.  7    NIC can share DMA1
  1186.  6    NIC can share IRQ2
  1187.  5    NIC can share IRQ1
  1188.  4    NIC can share Memory2
  1189.  3    NIC can share Memory1
  1190.  2    NIC can share IO2
  1191.  1    NIC can share IO1
  1192.  0    MLID is currently shut down
  1193.  
  1194. Format of MLID Statistics Table:
  1195. Offset    Size    Description    (Table 2690)
  1196.  00h    BYTE    driver statistics table major version
  1197.  01h    BYTE    driver statistics table minor version (decimal, 0-99)
  1198.  02h    WORD    number of generic counters (typically 13)
  1199.  04h    DWORD    "ValidCountersMask" (bit mask, bit 31 is TotalTxCount)
  1200.  08h    DWORD    TotalTxCount
  1201.  0Ch    DWORD    TotalRxCount
  1202.  10h    DWORD    NoECBAvailableCount
  1203.  14h    DWORD    TxTooBigCount
  1204.  18h    DWORD    TxTooSmallCount
  1205.  1Ch    DWORD    RxOverflowCount
  1206.  20h    DWORD    RxTooBigCount
  1207.  24h    DWORD    RxTooSmallCount
  1208.  28h    DWORD    TxMiscCount
  1209.  2Ch    DWORD    RxMiscCount
  1210.  30h    DWORD    TxRetryCount
  1211.  34h    DWORD    RxChecksumErrorCount
  1212.  38h    DWORD    RxMismatchCount
  1213.  3Ch    WORD    number of custom counters
  1214.  3Eh  N DWORDs    custom counters
  1215.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  1216.     var    length-prepended and NULL terminated string for Counter 0
  1217.     ...
  1218.     var    length-prepended and NULL terminated string for Counter N-1
  1219. SeeAlso: #2683,#2684
  1220.  
  1221. Format of bound stack info structure:
  1222. Offset    Size    Description    (Table 2691)
  1223.  00h    DWORD    -> protocol stack's short name (counted, NUL-terminated)
  1224.  04h    DWORD    -> receive handler
  1225.  08h    DWORD    -> control handler
  1226.  
  1227. Format of stack info structure:
  1228. Offset    Size    Description    (Table 2692)
  1229.  00h    DWORD    -> receive handler
  1230.  04h    DWORD    -> control handler
  1231.  
  1232. Format of General Service Control Block:
  1233. Offset    Size    Description    (Table 2693)
  1234.  00h    DWORD    -> next GSCB (maintained internally by LSL)
  1235.  04h    DWORD    -> entry point for general service handler
  1236.  08h    WORD    command code for this general service (8000h-FFFFh)
  1237. Note:    the control block must not be altered or deallocated until the general
  1238.       service is removed
  1239.  
  1240. Format of Lookahead structure:
  1241. Offset    Size    Description    (Table 2694)
  1242.  00h    DWORD    -> Media header
  1243.  04h    DWORD    -> lookahead buffer
  1244.  08h    WORD    length of lookahead buffer
  1245.  0Ah  6 BYTEs    protocol ID
  1246.  10h    WORD    logical board number
  1247.  12h    WORD    lookahead size
  1248.  
  1249. Format of ODI ECB:
  1250. Offset    Size    Description    (Table 2695)
  1251.  00h    DWORD    link to next ECB
  1252.  04h    DWORD    link to previous ECB
  1253.  08h    WORD    general status
  1254.         0000h received successfully
  1255.         8006h packet overflow
  1256.         8007h reception aborted (data not valid)
  1257.  0Ah    DWORD    -> event service routine or RETF (never 0000h:0000h)(see #2696)
  1258.  0Eh    WORD    protocol stack identifier
  1259.  10h  6 BYTEs    protocol ID (sending only)
  1260.  16h    WORD    MLID board number (sending only)
  1261.  18h  6 BYTEs    MAC destination address
  1262.  1Eh  4 BYTEs    driver workspace
  1263.  22h  8 BYTEs    protocol workspace
  1264.  2Ah    WORD    total length of sent buffer
  1265.  2Ch    WORD    fragment count
  1266.  2Eh  2 WORDs    segment,offset of first fragment buffer
  1267.  32h    WORD    length of first fragment buffer
  1268.     ...
  1269. SeeAlso: #2681
  1270.  
  1271. (Table 2696)
  1272. Values event service routine is called with:
  1273.     ES:SI -> associated ODI ECB (see #2695)
  1274.     interrupts disabled
  1275. Return: DS,BP,SS,SP preserved
  1276.     interrupt disabled
  1277. Notes:    the service routine may invoke any IPX/ODI function except CloseSocket
  1278.     it is safe to send a packet and wait for completion if enough stack
  1279.       space is available
  1280. --------N-2FC000-----------------------------
  1281. INT 2F - Novell NetWare Event Service Layer (NESL) 1.0 - INSTALLATION CHECK
  1282.     AX = C000h
  1283. Return: AL = FFh if installed
  1284.         DX:BX -> FAR entry point (see #2697,#2698,#2699,#2700,#2701,#2702)
  1285.         ES:SI -> signature string "NESL_EVENTS"
  1286. Program: NESL is a generic interface for event handling in ODI drivers and
  1287.       other NetWare-oriented modules.  Primarily intended to support
  1288.       power management and "hot swapping" of PCMCIA cards, but it is not
  1289.       limited to this.
  1290. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1291. SeeAlso: AX=C000h"Link Support Layer",AX=C000h"NETWARN"
  1292.  
  1293. (Table 2697)
  1294. Call NESL function GetNESLConfigPointer with:
  1295.     BX = 0000h
  1296. Return: AX = completion code (0000h,8008h) (see #2703)
  1297.     ES:SI -> NESL configuration table if successful (see #2704)
  1298.     BP,DS,STACK preserved
  1299. Desc:    Obtain a pointer to the NESL Configuration Table
  1300. SeeAlso: #2698,#2701
  1301.  
  1302. (Table 2698)
  1303. Call NESL function RegisterEventProducer with:
  1304.     BX = 0001h
  1305.     ES:SI -> Producer Event Control Block (PECB) (see #2705)
  1306. Return: AX = completion code (0000h, 8005h, 8008h) (see #2703)
  1307.     ES:SI -> still points to PECB
  1308.     BP,DS,STACK preserved
  1309. Desc:    Allows a module to register as a producer of a given event class
  1310. Note:    PECB_ClassName and PECB_Flags must be filled in on entry
  1311. SeeAlso: #2556,#2699,#2700,#2701
  1312.  
  1313. (Table 2699)
  1314. Call NESL function DeRegisterEventProducer with:
  1315.     BX = 0002h
  1316.     ES:SI -> PECB previously passed to RegisterEventProducer (see #2705)
  1317. Return: AX = completion code (0000h, 8002h, 8008h) (see #2703)
  1318.     ES:SI -> still points to PECB
  1319.     BP,DS,STACK preserved
  1320. Desc:    Allows a module to de-register as a producer of a given event class
  1321. SeeAlso: #2698,#2702
  1322.  
  1323. (Table 2700)
  1324. Call NESL function EventNotification with:
  1325.     BX = 0003h
  1326.     ES:SI -> PECB previously registered (see #2705)
  1327. Return: AX = completion code (0h, 8005h, 8008h) (see #2703)
  1328.     ES:SI -> still points to PECB
  1329.     BP,DS,STACK preserved
  1330. Desc:    Allows a module to signal that an event has just occurred in a given
  1331.       event class.
  1332. Notes:    Once called, NESL will generate corresponding callouts for this
  1333.       event, as described in Table #2707.
  1334.     on entry, the PECB_DataPtr must point at an Event Parameter Block (EPB)
  1335.       (see #2708) filled in to match the desired event
  1336. SeeAlso: #2698
  1337.  
  1338. (Table 2701)
  1339. Call NESL function RegisterEventConsumer with:
  1340.     BX = 0004h
  1341.     ES:SI -> Consumer Event Control Block (CECB) (see #2706)
  1342. Return: AX = completion code (0h, 8005h, 8008h) (see #2703)
  1343.     ES:SI -> still points to CECB
  1344.     BP,DS,STACK preserved
  1345. Desc:    Allows a module to register as a consumer of a given event class
  1346. Note:    on entry, the CECB_ClassName, CECB_NotifProc and CECB_OSILevel must be
  1347.       filled in.
  1348. SeeAlso: #2698,#2702
  1349.  
  1350. (Table 2702)
  1351. Call NESL function DeRegisterEventConsumer with:
  1352.     BX = 0005h
  1353.     ES:SI -> CECB previously passed to RegisterEventConsumer (see #2706)
  1354. Return: AX = completion code (0h, 8002h, 8008h) (see #2703)
  1355.     ES:SI -> still points to CECB
  1356.     BP,DS,STACK preserved
  1357. Desc:    Allows a module to de-register as a consumer of a given event class
  1358. SeeAlso: #2699,#2701
  1359.  
  1360. (Table 2703)
  1361. Values for NESL Error code:
  1362.  0000h    Successful
  1363.  8002h    Bad Parameter
  1364.  8005h    Fail
  1365.  8008h    Bad Command
  1366.  
  1367. Format of NESL Configuration Table:
  1368. Offset    Size    Description    (Table 2704)
  1369.  00h    WORD    NESL_Cfg_MajVer     Major Version of this table (=1)
  1370.  02h    WORD    NESL_Cfg_MinVer     Minor Version of this table (=0)
  1371.  04h    DWORD    NESL_Cfg_ModLName   -> ASCIZ long name of NESL module
  1372.         (typically -> "NetWare Event Service Layer for 16-Bit DOS")
  1373.  08h    DWORD    NESL_Cfg_ModSName   -> ASCIZ short name of NESL module
  1374.         (typically -> "NESL")
  1375.  0Ch    WORD    NESL_Cfg_ModMajVer  Major Version of NESL itself (=1)
  1376.  0Eh    WORD    NESL_Cfg_ModMinVer  Minor Version of NESL itself (=0)
  1377.  
  1378. Format of NESL Producer Event Control Block (PECB):
  1379. Offset    Size    Description    (Table 2705)
  1380.  00h    WORD    PECB_MajVer  Major Version of this structure (=1)
  1381.  02h    WORD    PECB_MinVer  Minor Version of this structure (=0)
  1382.  04h    DWORD    PECB_NextProducer   -> next PECB.  NULL if last.
  1383.  08h    DWORD    PECB_ClassName        -> ASCIZ string identifying event
  1384.                       class (see #2709)
  1385.  0Ch    DWORD    PECB_ConsumerList   -> list of consumers for this event class
  1386.  10h    DWORD    PECB_DataPtr        -> points to additional data during events
  1387.  14h    DWORD    PECB_Flags
  1388.         Bit 0    =0  consumers should be called "top down" for this
  1389.                 event class.  (OSI level 7 down to OSI level 1)
  1390.             =1  consumers should be called "bottom up"
  1391.         Bits 1-31   Reserved =0
  1392.  18h  8 BYTEs    PECB_Reserved (all zeros)
  1393. Note:    Although the event producer provides the memory for the PECB, the
  1394.       NESL module controls this memory until the event class is
  1395.       de-registered.
  1396.     While owned by NESL, this structure should be treated as read-only,
  1397.       except for the PECB_DataPtr field.
  1398.  
  1399. Format of NESL Consumer Event Control Block (CECB):
  1400. Offset    Size    Description    (Table 2706)
  1401.  00h    WORD    CECB_MajVer  Major Version of this structure (=1)
  1402.  02h    WORD    CECB_MinVer  Minor Version of this structure (=0)
  1403.  04h    DWORD    CECB_NextConsumer   -> next CECB.  NULL if last.
  1404.  08h    DWORD    CECB_ClassName        -> ASCIZ string identifying event
  1405.                       class (see #2709)
  1406.  0Ch    DWORD    CECB_NotifProc        -> FAR CALL event handler (see #2707)
  1407.  10h    WORD    CECB_OSILevel
  1408.         Bits 4-7 = OSI Layer of this module (1 through 7)
  1409.         Bits 0-3 = relative ordering with other modules on same layer
  1410.  13h 14 BYTEs    CECB_Reserved (all zeros)
  1411. Note:    Although the event consumer provides the memory for the CECB, the
  1412.       NESL module controls this memory until the consumer is de-registered.
  1413.     While owned by NESL, this structure should be treated as read-only,
  1414.  
  1415. (Table 2707)
  1416. Values NESL Consumer Notification Procedure is called with:
  1417.     ES:SI -> Event Parameter Block (EPB) (see #2708)
  1418. Return: AX = completion code (0000h, 8005h) (see #2703)
  1419.     ES:SI -> still points to EPB
  1420. Desc:    Called by NESL to notify the consumer when an event has occurred in
  1421.       an event class for which it has registered.
  1422. SeeAlso: #2706
  1423.  
  1424. Format of NESL Event Parameter Block (EPB):
  1425. Offset    Size    Description    (Table 2708)
  1426.  00h    WORD    EPB_MajVer  Major Version of this structure (=1)
  1427.  02h    WORD    EPB_MinVer  Minor Version of this structure (=0)
  1428.  04h    DWORD    EPB_ClassName  -> ASCIZ string identifying event class
  1429.                   (see #2709)
  1430.  08h    DWORD    EPB_EventName  -> ASCIZ string identifying event within
  1431.                   class (see #2710)
  1432.  0Ch    DWORD    EPB_ModuleName -> ASCIZ string identifying module
  1433.                   producing event
  1434.  10h    DWORD    EPB_DataPtr0   -> event-defined data or NULL if not used
  1435.  14h    DWORD    EPB_DataPtr1   -> event-defined data or NULL if not used
  1436.  18h  8 BYTEs    EPB_Reserved (all zeros)
  1437.  
  1438. (Table 2709)
  1439. Values for NESL Event Class Names:
  1440.  Event Class        Description
  1441.  -------------------    -----------------------------------------
  1442.  Service Suspend    Suspension of a service.  Called top-down.
  1443.  Service Resume        Resumption/availability of a service. Called bottom-up.
  1444.  Service/Status Change    Change in status or level of service.  Called top-down.
  1445.  Suspend Request    Request to suspend a service.  Called bottom-up.
  1446. Note:    Contact Novell Labs to register new event classes.
  1447.  
  1448. (Table 2710)
  1449. Values for NESL Event Names:
  1450.  Event Name            Class            Description
  1451.  --------------------------    -------------        ---------------------------
  1452.  MLID Cable Disconnect        Service Suspend        Cable disconnected from NIC
  1453.  MLID Card Removal        Service Suspend        PCMCIA card removed
  1454.  MLID Hardware Failure        Service Suspend        Serious hardware
  1455.                               failure in NIC
  1456.  MLID Not In Range        Service Suspend        Wireless access point
  1457.                               is out of range
  1458.  MLID Shutdown            Service Suspend        MLID was shut down
  1459.  MLID Media Access Denied    Service Suspend        Access to physical
  1460.                               medium unsuccessful
  1461.  MLID Cable Reconnect        Service Resume        Cable re-connected to NIC
  1462.  MLID Card Insertion Complete    Service Resume        PCMCIA card inserted
  1463.  MLID In Range            Service Resume        Wireless access point
  1464.                               in range
  1465.  MLID Reset            Service Resume        MLID was just reset
  1466.  MLID Access Point Change    Serv/Status Change  Station has moved to
  1467.                               new access point
  1468.  MLID Speed Change        Serv/Status Change  Change in communic. speed
  1469. Note:    Contact Novell Labs to register new event names.
  1470.     For all predefined events above, EPB_DataPtr0 (see #2708) points
  1471.       to the MLID Configuration table (see AX=C000h"ODI") for the
  1472.       affected MLID.
  1473. --------N-2FC000-----------------------------
  1474. INT 2F - Novell NetWare Connect NETWARN - INSTALLATION CHECK
  1475.     AX = C000h
  1476. Return: AL = FFh if installed
  1477.         SI = segment of resident portion
  1478. Program: NETWARN is a utility supplied with NetWare Connect to warn a
  1479.       remote dialup user when programs are about to be loaded slowly over
  1480.       the modem link.
  1481. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1482. Note:    on return, verify that it is NETWARN responding by examining signature
  1483.       at in NETWARN's data table in the resident segment (see #2711)
  1484. SeeAlso: AX=C000h"ODI",AX=C000h"NESL"
  1485.  
  1486. Format of NETWARN Configuration structure:
  1487. Offset    Size    Description    (Table 2711)
  1488.  103h 7 BYTEs    signature string "NETWARN"
  1489.  10Ah    BYTE    major version in ASCII (="1")
  1490.  10Bh    BYTE    minor version in ASCII (="0")
  1491.  10Ch    DWORD    minimum size of EXE cared about in bytes (/S=xxxx)
  1492.  110h    WORD    same value in kilobytes (see #2712 [bit 4])
  1493.  112h    BYTE    multiplex code (AH value) actually being used
  1494.  113h    WORD    options (see #2712)
  1495.  115h    DWORD    INT 21h vector before NETWARN loaded
  1496.  119h    DWORD    INT 2Fh vector before NETWARN loaded
  1497.  11Dh 16 BYTEs    ASCIIZ local name of last device which was checked
  1498.  12Dh 128 BYTEs ASCIIZ remote name of last device which was checked
  1499. Note:    the specified offsets are from the start of the resident segment
  1500.  
  1501. Bitfields for NETWARN options:
  1502. Bit(s)    Description    (Table 2712)
  1503.  0    ??? (=0)
  1504.  1    /U (Unload) selected (never in resident)
  1505.  2    /E (Enabled) Will trap & check EXEC's
  1506.  3    /D (Disabled) No EXEC checking done
  1507.  4    /S (Size) was set (see #2711 [offsets 010Ch and 0110h])
  1508.  5    /P (Path shown)
  1509.  6    /H or /? (Help) (never in resident)
  1510. SeeAlso: #2711
  1511. --------f-2FC000-----------------------------
  1512. INT 2F - FN32 32 character filename utilities - INSTALLATION CHECK
  1513.     AX = C000h
  1514. Return: AL = FFh if installed
  1515.        ES:DI -> signature string "FN32 32CHAR TSR"
  1516. Program: FN32 is a TSR which supports 32 character filenames under PC/MS-DOS
  1517. Note:    the TSR intercepts INT 21 calls and performs filename substitution by
  1518.       managing dictionary files in each directory which contains long
  1519.       filenames
  1520. --------M-2FC000-----------------------------
  1521. INT 2F - QMR - INSTALLATION CHECK
  1522.     AX = C000h
  1523. Return: AL = FFh if installed
  1524.         ES:DI -> signature string "QMR1!"
  1525. Program: QMR (Cove Software, Quick Mouse Reset) monitors the mouse
  1526.       service interrupt (int 33h) and substitutes a fast software
  1527.       reset (mouse fn 21h) for the slow hardware reset (mouse fn 0).
  1528. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1529. SeeAlso: AX=C001h"QMR",AX=C002h"QMR",AX=C003h"QMR"
  1530. --------V-2FC000-----------------------------
  1531. INT 2F - VGAsave v1.93 - INSTALLATION CHECK
  1532.     AX = C000h
  1533. Return: AL = FFh if installed
  1534.         BX = segment of resident code
  1535. Program: VGAsave is a freeware VGA-specific, mouse-aware screenblanker by Bill
  1536.       Javurek
  1537. Range:    AH=C0h to AH=FFh, selected by scanning for a free multiplex number
  1538. Note:    the transient portion of VGAsave compares the first 38 bytes of the
  1539.       resident code (addressed through BX) against its own copy of the
  1540.       resident code to complete the installation check
  1541. SeeAlso: INT 14/AX=AA01h,INT 2F/AH=93h
  1542. Index:    screen saver;VGAsave
  1543. --------V-2FC000-----------------------------
  1544. INT 2F - AD-DOS - INSTALLATION CHECK
  1545.     AX = C000h
  1546. Return: AL = FFh if installed
  1547.         BX = 4144h ('AD')
  1548.         CX = 2D44h ('-D')
  1549.         DX = 4F53h ('OS')
  1550. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1551.       MS Windows
  1552. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1553. SeeAlso: AX=C001h"AD-DOS",AX=C003h"AD-DOS",AX=C005h"AD-DOS",AX=C007h"AD-DOS"
  1554. SeeAlso: AX=C009h"AD-DOS",AX=C020h"AD-DOS",INT 14/AX=AA01h
  1555. Index:    screen saver;AD-DOS
  1556. --------U-2FC000-----------------------------
  1557. INT 2F U - WANG_ER.COM - INSTALLATION CHECK
  1558.     AX = C000h
  1559. Return: AL = FFh if installed
  1560.         ES = segment of resident code
  1561. Program: WANG_ER is a TSR from Compaq which permits Compaq systems equipped
  1562.       with 3-mode floppy drives to read Wang document diskettes
  1563. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1564. Note:    The installation check is completed by comparing the resident code
  1565.       with the copy in the transient program
  1566. --------i-2FC000-----------------------------
  1567. INT 2F O - ASPIHOOK.SYS - INSTALLATION CHECK
  1568.     AX = C000h
  1569. Return: AL = FFh if multiplex number in use
  1570.         ES:DI -> ASCIZ signature "ASPIHOOK" if ASPIHOOK.SYS installed
  1571. Program: ASPIHOOK is a device driver for monitoring SCSI activity through an
  1572.       ASPI host manager; it is part of the Personal Measure system
  1573.       activity monitor from Spirit of Performance, Inc.
  1574. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1575. SeeAlso: AX=C000h"PMEASURE"
  1576. --------i-2FC000-----------------------------
  1577. INT 2F - PMEASURE.EXE - INSTALLATION CHECK
  1578.     AX = C000h
  1579. Return: AL = FFh if multiplex number in use
  1580.         ES:DI -> ASCIZ signature "PMEASURE.EXE" if PMEASURE.EXE installed
  1581. Program: PMEASURE.EXE is a TSR for monitoring system hardware activity which
  1582.       is part of the Personal Measure system activity monitor from Spirit
  1583.       of Performance, Inc.
  1584. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1585. Note:    If a Personal Measure Hook Module, such as ASPIHOOK.SYS, is already
  1586.       installed, PMEASURE.EXE uses the next highest free multiplex number.
  1587. SeeAlso: AX=C000h"ASPIHOOK",AX=C000h"PERSONAL MEASURE"
  1588. --------i-2FC000-----------------------------
  1589. INT 2F - PERSONAL MEASURE - HOOK MODULE INSTALLATION CHECK
  1590.     AX = C000h
  1591. Return: AL = FFh if installed
  1592.     ES:DI -> signature string "PMEASUREHOOK"
  1593.     AX = C000 if not installed, per mux id conventions
  1594.     DH = major release number (binary)
  1595.     DL = minor release number (binary)
  1596. Program: The Personal Measure system activity monitor from Spirit of
  1597.       Performance, Inc. uses an extensible series of modules to hook
  1598.       into various operating system interfaces and monitor system calls.
  1599.       Current hook modules are ASPIHOOK.SYS for ASPI device activity
  1600.       and CDRHOOK.SYS for non-ASPI CD-ROM activity.     All hook modules
  1601.       share the same mux id.
  1602. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1603. SeeAlso: AX=C000h"PMEASURE.EXE",AX=C001h"PERSONAL MEASURE"
  1604. --------c-2FC000-----------------------------
  1605. INT 2F U - PrintCache v3.1 PCACHE.EXE - INSTALLATION CHECK
  1606.     AX = C000h
  1607. Return: AL = FFh if installed
  1608.         SI = signature value 20D6h
  1609.         DI = signature value 8761h
  1610.         ES:BX -> configuration table (see #2713)
  1611.         CX = ??? (0300h)
  1612.         DX = ??? (0020h)
  1613. Program: PCACHE is the resident print spooler portion of PrintCache by
  1614.       LaserTools; it may use either memory or disk space to spool output
  1615. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1616. SeeAlso: AX=0100h/SI=20D6h,AX=C001h"PCACHE"
  1617.  
  1618. Format of PrintCache configuration table:
  1619. Offset    Size    Description    (Table 2713)
  1620.  00h 26 BYTEs    ASCIZ signature string "TORQ Configuration Table: "
  1621.  1Ah  2 BYTEs    ???
  1622.  1Ch    DWORD    -> data table (see #2714)
  1623.  20h  4 BYTEs    ASCIZ version string ("3.1" for v3.1)
  1624.  24h  5 BYTEs    ???
  1625.  29h 12 BYTEs    ASCIZ version date string ("Aug 31 1993" for v3.1)
  1626.  35h    WORD    buffered port type (01h = LPT, 02h = COM)
  1627.  37h    WORD    buffered port BIOS port number
  1628.  39h  5 BYTEs    ASCIZ buffered port name ("LPTn" or "COMn")
  1629.  3Eh    WORD    physical port type (01h = LPT, 02h = COM)
  1630.  40h    WORD    physical port BIOS port number
  1631.  42h  5 BYTEs    ASCIZ physical port name ("LPTn" or "COMn")
  1632.  47h    BYTE    port driver IRQ
  1633.  48h 21 BYTEs    ???
  1634.  5Dh    WORD    buffer size in K
  1635.  5Fh 27 BYTEs    ???
  1636.  7Ah    BYTE    popup hotkey shift states (see #0506 at INT 16/AH=02h)
  1637.  7Bh    BYTE    popup hotkey scan code (see #0005 at INT 09"IRQ1")
  1638.  7Ch  4 BYTEs    ???
  1639.  80h 20 BYTEs    ASCIZ printer type name
  1640.     ???
  1641.  
  1642. Format of PrintCache data table:
  1643. Offset    Size    Description    (Table 2714)
  1644.  00h  2 BYTEs    ???
  1645.  02h    DWORD    -> ??? entry point
  1646.     ???
  1647. --------U-2FC000-----------------------------
  1648. INT 2F - Frank Kintrup TSR Utilities - INSTALLATION CHECK
  1649.     AX = C000h
  1650. Return: AL = FFh if installed
  1651.         BX = program ID (see #2715)
  1652.         CX = 464Bh (signature "FK")
  1653.         DX = revision number (DH = major, DL = minor)
  1654.         ES = resident segment of TSR
  1655. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  1656. SeeAlso: AX=C001h"Kintrup",AX=C002h"Kintrup"
  1657.  
  1658. (Table 2715)
  1659. Values for Frank Kintrup TSR program ID:
  1660.  4153h    "AS"    ASCII.COM    ASCII table with paste function
  1661.  434Ch    "CL"    CLOCK.COM    clock with date/time display and alarm
  1662.  5043h    "PC"    PCALC.COM    programmer's calculator with paste function
  1663.  5343h    "SC"    SCRSAVE.COM    screen saver with mouse support and hotkey
  1664.  5544h    "UD"    UNDEL.COM    undelete program like SMARTCAN or DPROTECT
  1665. --------K-2FC000-----------------------------
  1666. INT 2F U - HP 100LX/200LX - PUSHKEYS - INSTALLATION CHECK
  1667.     AX = C000h
  1668. Return: AL = FFh if possibly installed
  1669. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  1670. SeeAlso: AX=C001h"HP 100LX",AX=C0AEh"HP 100LX",AX=C0AFh"HP 100LX"
  1671. --------V-2FC000-----------------------------
  1672. INT 2F - DIMWIT - INSTALLATION CHECK
  1673.     AX = C000h
  1674. Return: AL = FFh if installed
  1675.         ES:DI -> signature string "DIMDOS" or "DIMWIN"
  1676. Program: DIMWIT is a freeware Windows-aware screen blanker by Larry Board
  1677. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1678. SeeAlso: AX=C000h"AD-DOS",AX=C001h"DIMWIT"
  1679. Index:    screen saver;DIMWIT
  1680. --------F-2FC000BX444B-----------------------
  1681. INT 2F - METZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  1682.     AX = C000h
  1683.     BX = 444Bh ('DK')
  1684.     CX = 4A4Eh ('AN')
  1685. Return: AL = status
  1686.         00h not installed, OK to install
  1687.         FFh installed
  1688.         BX = 646Bh ('dk')
  1689.         CX = 6A6Eh ('an')
  1690. Range:    AH=C0h to AH=FFh, selected automatically
  1691. SeeAlso: AH=C0h"METZ"
  1692. --------V-2FC000-----------------------------
  1693. INT 2F U - TSENGP.COM - INSTALLATION CHECK
  1694.     AX = C000h
  1695. Return: AL = status
  1696.         00h not installed, OK to install
  1697.         FFh installed
  1698.         DS = segment of resident code
  1699. Program: TSENGP.COM is a TSR supplied by Compaq to fix an incompatibility
  1700.       between some applications and Tseng ET4000-based video adapters
  1701. Range:    AH=C0h to AH=FFh, selected automatically
  1702. Note:    the installation check is completed by comparing the first eleven
  1703.       bytes at DS:005Fh against the TSR's code (80h FCh 06h 74h 0Ah
  1704.       80h FCh 07h 74h 05h EAh)
  1705. --------N-2FC000-----------------------------
  1706. INT 2F U - LapLink RemoteAccess (LLRA) - INSTALLATION CHECK
  1707.     AX = C000h
  1708. Return: AL = FFh if one of the components is installed
  1709.     CX:BX -> signature within LLRA component:
  1710.         "TSI_LapLinkCore" for LLRA1.EXE
  1711.         "TSI_Blackbird"   for LLRA2.EXE
  1712.         "TSI_Redirector"  for LLRA3.EXE
  1713.         "TSI_Compression" for LLRA4.EXE
  1714.     DL = major version number
  1715.     DH = minor version number
  1716. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1717. Note:    LapLink components are installed in the order listed above, but not
  1718.       necessarily all four; each gets its own multiplex number (default
  1719.       C0h-C3h)
  1720. SeeAlso: AX=C002h"LapLink",AX=C205h"LapLink",AX=C2F0h"LapLink"
  1721. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink",AX=C3F0h"LapLink"
  1722. SeeAlso: AX=C3F1h"LapLink"
  1723. --------M-2FC001-----------------------------
  1724. INT 2F - QMR - REQUEST HARDWARE RESET
  1725.     AX = C001h
  1726. Return: ES = QMR code segment
  1727.     AL destroyed
  1728. Desc:    this function is used to force a full mouse reset when QMR is installed
  1729. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  1730. --------V-2FC001-----------------------------
  1731. INT 2F - DIMWIT - GET CONFIGURATION DATA
  1732.     AX = C001h
  1733. Return: ES:DI -> TSR configuration data (see #2716)
  1734. Program: DIMWIT is a freeware Windows-aware screen blanker by Larry Board
  1735. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1736. SeeAlso: AX=C000h"DIMWIT",AX=C001h"AD-DOS"
  1737. Index:    screen saver;DIMWIT
  1738.  
  1739. Format of DIMWIT TSR configuration data:
  1740. Offset    Size    Description    (Table 2716)
  1741.  00h    WORD    blanking delay in clock ticks
  1742.  02h    BYTE    instant-blanking hotkey scan code (see #0005)
  1743.         Ctrl and Alt must also be pressed
  1744. --------V-2FC001ES0000-----------------------
  1745. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  1746.     AX = C001h
  1747.     ES = 0000h
  1748. Return: AL = 00h if successful
  1749.         ES = AD-DOS TSR Code Segment
  1750. SeeAlso: AX=C000h"AD-DOS",AX=C001h"DIMWIT"
  1751. Index:    screen saver;AD-DOS
  1752. --------c-2FC001-----------------------------
  1753. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ENTRY POINTS
  1754.     AX = C001h
  1755. Return: AL = FFh if installed
  1756.         ES:BX -> ???
  1757.         ES:DX -> ???
  1758.         ES:SI -> ???
  1759.         ES:DI -> ??? (equivalent to AX=C002h)
  1760. SeeAlso: AX=C000h"PCACHE",AX=C002h"PCACHE"
  1761. --------U-2FC001-----------------------------
  1762. INT 2F - Frank Kintrup TSR Utilities - CLOCK - DISABLE DISPLAY UPDATE
  1763.     AX = C001h
  1764. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  1765. SeeAlso: AX=C000h"Kintrup",AX=C002h"Kintrup"
  1766. --------K-2FC001CX03FB-----------------------
  1767. INT 2F U - HP 100LX/200LX - PUSHKEYS - INTERNAL - UNINSTALL
  1768.     AX = C001h
  1769.     CX = 03FBh return address to continue uninstall if possible
  1770. Return: program uninstalled
  1771. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  1772. SeeAlso: AX=C000h"HP 100LX",AX=C0AEh"HP 100LX",AX=C0AFh"HP 100LX"
  1773. --------i-2FC001-----------------------------
  1774. INT 2F - PERSONAL MEASURE - PASS PARAMETERS TO HOOK MODULE(S)
  1775.     AX = C001h
  1776.     DX = segment of PMEASURE.EXE or 0000h
  1777.     BX = offset in PMEASURE.EXE or 0000h
  1778.     CX = offset in PMEASURE.EXE or 0000h
  1779. Return: None
  1780. Program: PMEASURE.EXE is a TSR for monitoring system hardware activity which
  1781.       is part of the Personal Measure system activity monitor from Spirit
  1782.       of Performance, Inc.    PMEASURE uses this call to inform its hook
  1783.       modules whether or not it is running and to pass information about
  1784.       shared data and procedures.
  1785. Warning: This information documents a function that is private to Personal
  1786.       Measure and is provided as information only.    It should NOT be called
  1787.       by any software other than Personal Measure.
  1788. SeeAlso: AX=C000h"PERSONAL MEASURE"
  1789. --------V-2FC002-----------------------------
  1790. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  1791.     AX = C002h
  1792. Return: AL = 00h if successful
  1793.         BX = status
  1794.         0000h no input since last check
  1795.         0001h new input available
  1796. Note:    this call also resets the new-input flag
  1797. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  1798. Index:    screen saver;AD-DOS
  1799. --------M-2FC002-----------------------------
  1800. INT 2F - QMR - DISABLE QMR
  1801.     AX = C002h
  1802. Return: ES = QMR code segment
  1803.     AL destroyed
  1804. Desc:    this call temporarily disables QMR
  1805. SeeAlso: AX=C000h"QMR",AX=C003h"QMR"
  1806. --------c-2FC002-----------------------------
  1807. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET BUFFER SIZE
  1808.     AX = C002h
  1809. Return: AX = ??? in K
  1810.     BX = size of print buffer in K
  1811. Program: PCACHE is the resident print spooler portion of PrintCache by
  1812.       LaserTools; it may use either memory or disk space to spool output
  1813. SeeAlso: AX=C000h"PCACHE"
  1814. --------U-2FC002-----------------------------
  1815. INT 2F - Frank Kintrup TSR Utilities - CLOCK - ENABLE DISPLAY UPDATE
  1816.     AX = C002h
  1817. Range:    AH=C0h to AH=FFh, selected by searching for a free multiplex number
  1818. SeeAlso: AX=C000h"Kintrup",AX=C002h"Kintrup"
  1819. --------N-2FC002-----------------------------
  1820. INT 2F U - LapLink RemoteAccess (LLRA) - Core - ???
  1821.     AX = C002h
  1822.     details not yet available
  1823. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1824. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C2F0h"LapLink"
  1825. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  1826. --------V-2FC003-----------------------------
  1827. INT 2F - AD-DOS - SET MINUTES TO WAIT
  1828.     AX = C003h
  1829.     BX = minutes to wait before blanking screen
  1830. Return: AL = 00h if successful
  1831. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1832.       MS Windows
  1833. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1834. Note:    this call also resets the delay timer
  1835. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  1836. Index:    screen saver;AD-DOS
  1837. --------M-2FC003-----------------------------
  1838. INT 2F - QMR - ENABLE QMR
  1839.     AX = C003h
  1840. Return: ES = QMR code segment
  1841.     AL destroyed
  1842. Desc:    this call enables QMR after it has been disabled
  1843. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  1844. --------c-2FC003-----------------------------
  1845. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  1846.     AX = C003h
  1847. Return: BX destroyed
  1848. SeeAlso: AX=C004h"PCACHE"
  1849. --------V-2FC004-----------------------------
  1850. INT 2F - AD-DOS - GET MINUTES TO WAIT
  1851.     AX = C004h
  1852. Return: AL = 00h if successful
  1853.         BX = minutes to wait before blanking screen
  1854. SeeAlso: AX=C000h"AD-DOS",AX=C003h"AD-DOS"
  1855. Index:    screen saver;AD-DOS
  1856. --------c-2FC004-----------------------------
  1857. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  1858.     AX = C004h
  1859. Return: BX destroyed
  1860. SeeAlso: AX=C003h"PCACHE"
  1861. --------V-2FC005-----------------------------
  1862. INT 2F - AD-DOS - SET BLANKER STATUS
  1863.     AX = C005h
  1864.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  1865. Return: AL = 00h if successful
  1866. SeeAlso: AX=C006h"AD-DOS"
  1867. Index:    screen saver;AD-DOS
  1868. --------c-2FC005-----------------------------
  1869. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1870.     AX = C005h
  1871.     ???
  1872. Return: BX destroyed
  1873.     ???
  1874. Program: PCACHE is the resident print spooler portion of PrintCache by
  1875.       LaserTools; it may use either memory or disk space to spool output
  1876. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1877. SeeAlso: AX=C000h"PCACHE"
  1878. --------V-2FC006-----------------------------
  1879. INT 2F - AD-DOS - GET BLANKER STATUS
  1880.     AX = C006h
  1881. Return: AL = 00h if successful
  1882.         BX = current state of screen blanker (0000h inactive, 0001h active)
  1883. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1884.       MS Windows
  1885. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1886. SeeAlso: AX=C000h"AD-DOS",AX=C005h"AD-DOS"
  1887. Index:    screen saver;AD-DOS
  1888. --------c-2FC006-----------------------------
  1889. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1890.     AX = C006h
  1891.     ???
  1892. Return: BX destroyed
  1893.     ???
  1894. Note:    this function appears to be identical to AX=C007h
  1895. SeeAlso: AX=C000h"PCACHE",AX=C007h"PCACHE"
  1896. --------V-2FC007-----------------------------
  1897. INT 2F - AD-DOS - SET HOT KEY
  1898.     AX = C007h
  1899.     BX = hot key
  1900.     CL = hot key shift status
  1901. Return: AL = 00h if successful
  1902. SeeAlso: AX=C008h"AD-DOS"
  1903. Index:    screen saver;AD-DOS
  1904. --------c-2FC007-----------------------------
  1905. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1906.     AX = C007h
  1907.     ???
  1908. Return: BX destroyed
  1909.     ???
  1910. Note:    this function appears to be identical to AX=C006h
  1911. SeeAlso: AX=C000h"PCACHE",AX=C006h"PCACHE"
  1912. --------V-2FC008-----------------------------
  1913. INT 2F - AD-DOS - GET CURRENT HOT KEY
  1914.     AX = C008h
  1915. Return: AX = status
  1916.         0000h successful
  1917.         BX = Hot Key
  1918.         CL = Hot Key Shift Status
  1919.         0008h otherwise
  1920. SeeAlso: AX=C000h"AD-DOS",AX=C007h"AD-DOS"
  1921. Index:    screen saver;AD-DOS
  1922. --------c-2FC008-----------------------------
  1923. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  1924.     AX = C008h
  1925. Return: BX destroyed
  1926. SeeAlso: AX=C000h"PCACHE",AX=C009h"PCACHE"
  1927. --------V-2FC009-----------------------------
  1928. INT 2F - AD-DOS - UNBLANK MONITOR
  1929.     AX = C009h
  1930. Return: AL = 00h if successful
  1931. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1932.       MS Windows
  1933. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1934. Note:    this function works by simulating keyboard activity
  1935. Index:    screen saver;AD-DOS
  1936. --------c-2FC009-----------------------------
  1937. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  1938.     AX = C009h
  1939. Return: BX destroyed
  1940. Program: PCACHE is the resident print spooler portion of PrintCache by
  1941.       LaserTools; it may use either memory or disk space to spool output
  1942. Range:    AH=C0h to AH=FFh, selected by commandline switch
  1943. SeeAlso: AX=C000h"PCACHE",AX=C008h"PCACHE"
  1944. --------V-2FC00A-----------------------------
  1945. INT 2F - AD-DOS - ???
  1946.     AX = C00Ah
  1947. Return: AX = status
  1948.         0000h successful
  1949.         BH = ??
  1950.         BL = ??
  1951.         000Ah failed
  1952. Index:    screen saver;AD-DOS
  1953. --------c-2FC00A-----------------------------
  1954. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  1955.     AX = C00Ah
  1956.     ???
  1957. Return: AH = bit flags
  1958.         bit 5: ???
  1959.     AL = bit flags
  1960.         bit 4: ???
  1961.         bit 3: ???
  1962.     BX destroyed
  1963.     ???
  1964. SeeAlso: AX=C000h"PCACHE"
  1965. --------V-2FC00B-----------------------------
  1966. INT 2F - AD-DOS - ???
  1967.     AX = C00Bh
  1968. Return: AX = status
  1969.         0000h successful
  1970.         000Bh failed
  1971. Index:    screen saver;AD-DOS
  1972. --------c-2FC00B-----------------------------
  1973. INT 2F U - PrintCache v3.1 PCACHE.EXE - NOP
  1974.     AX = C00Bh
  1975. Return: BX destroyed
  1976. SeeAlso: AX=C000h"PCACHE"
  1977. --------V-2FC00C-----------------------------
  1978. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  1979.     AX = C00Ch
  1980. Return: AX = status
  1981.         0000h successful
  1982.         000Ch failed
  1983. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  1984.       MS Windows
  1985. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  1986. Index:    screen saver;AD-DOS
  1987. --------c-2FC00C-----------------------------
  1988. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  1989.     AX = C00Ch
  1990. Return: AX = ??? (0000h)
  1991.     BX = ??? (0000h)
  1992.     CX = ??? (0100h)
  1993.     DL = ???
  1994.     DH = ???
  1995. SeeAlso: AX=C000h"PCACHE"
  1996. --------c-2FC00D-----------------------------
  1997. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ???
  1998.     AX = C00Dh
  1999.     DL = ???
  2000. Return: BX destroyed
  2001. Program: PCACHE is the resident print spooler portion of PrintCache by
  2002.       LaserTools; it may use either memory or disk space to spool output
  2003. Range:    AH=C0h to AH=FFh, selected by commandline switch
  2004. SeeAlso: AX=C000h"PCACHE"
  2005. --------V-2FC00E-----------------------------
  2006. INT 2F - AD-DOS - SET PASSWORD STATUS
  2007.     AX = C00Eh
  2008.     BX = new state (0000h disabled, 0001h enabled)
  2009. Return: ???
  2010. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh"AD-DOS"
  2011. Index:    screen saver;AD-DOS
  2012. --------c-2FC00E-----------------------------
  2013. INT 2F U - PrintCache v3.1 PCACHE.EXE - INSTALL ???
  2014.     AX = C00Eh
  2015.     ES:DX -> ???
  2016. Return: BX destroyed
  2017. Note:    ES:DX is stored internally if the variable is currently 0000h:0000h,
  2018.       but ignored if already set; a counter is incremented
  2019. SeeAlso: AX=C000h"PCACHE",AX=C00Fh"PCACHE"
  2020. --------V-2FC00F-----------------------------
  2021. INT 2F - AD-DOS - GET PASSWORD STATUS
  2022.     AX = C00Fh
  2023. Return: BX = current state (0000h disabled, 0001h enabled)
  2024. SeeAlso: AX=C00Eh"AD-DOS"
  2025. Index:    screen saver;AD-DOS
  2026. --------c-2FC00F-----------------------------
  2027. INT 2F U - PrintCache v3.1 PCACHE.EXE - REMOVE ???
  2028.     AX = C00Fh
  2029. Return: BX destroyed
  2030. Note:    this function decrements the counter used by AX=C00Eh, and clears the
  2031.       internal pointer variable to 0000h:0000h when it reaches zero
  2032. SeeAlso: AX=C000h"PCACHE",AX=C00Eh"PCACHE"
  2033. --------c-2FC010-----------------------------
  2034. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  2035.     AX = C010h
  2036.     CX = index of ??? table (00h-02h, others treated as 00h)
  2037.     SI = offset into data table
  2038. Return: AL = byte at specified offset into table
  2039.     BX destroyed
  2040. SeeAlso: AX=C000h"PCACHE"
  2041. --------c-2FC011-----------------------------
  2042. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  2043.     AX = C011h
  2044. Return: AX = ??? (0007h)
  2045.     BX = ??? (0001h)
  2046.     CH = ???
  2047.     CL = ???
  2048. SeeAlso: AX=C000h"PCACHE"
  2049. --------c-2FC012-----------------------------
  2050. INT 2F U - PrintCache v3.1 PCACHE.EXE - GET ???
  2051.     AX = C012h
  2052. Return: AX = ???
  2053.     BX = ???
  2054.     CX = ???
  2055.     DX = ???
  2056. SeeAlso: AX=C000h"PCACHE"
  2057. --------c-2FC013-----------------------------
  2058. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2059.     AX = C013h
  2060.     ???
  2061. Return: BX destroyed
  2062.     ???
  2063. Program: PCACHE is the resident print spooler portion of PrintCache by
  2064.       LaserTools; it may use either memory or disk space to spool output
  2065. Range:    AH=C0h to AH=FFh, selected by commandline switch
  2066. SeeAlso: AX=C000h"PCACHE"
  2067. --------c-2FC014-----------------------------
  2068. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2069.     AX = C014h
  2070.     ???
  2071. Return: BX destroyed
  2072.     ???
  2073. SeeAlso: AX=C000h"PCACHE"
  2074. --------c-2FC015-----------------------------
  2075. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2076.     AX = C015h
  2077.     ???
  2078. Return: BX destroyed
  2079.     ???
  2080. SeeAlso: AX=C000h"PCACHE"
  2081. --------c-2FC016-----------------------------
  2082. INT 2F U - PrintCache v3.1 PCACHE.EXE - INCREMENT ???
  2083.     AX = C016h
  2084. Return: BX destroyed
  2085. SeeAlso: AX=C000h"PCACHE",AX=C017h"PCACHE"
  2086. --------c-2FC017-----------------------------
  2087. INT 2F U - PrintCache v3.1 PCACHE.EXE - DECREMENT ???
  2088.     AX = C017h
  2089. Return: BX destroyed
  2090. SeeAlso: AX=C000h"PCACHE",AX=C016h"PCACH"
  2091. --------c-2FC018-----------------------------
  2092. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2093.     AX = C018h
  2094.     ???
  2095. Return: BX destroyed
  2096.     ???
  2097. Note:    the first instruction of this function is an indirect jump which points
  2098.       at a RET by default
  2099. SeeAlso: AX=C000h"PCACHE",AX=C019h"PCACHE"
  2100. --------c-2FC019-----------------------------
  2101. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2102.     AX = C019h
  2103.     ???
  2104. Return: BX destroyed
  2105.     ???
  2106. Note:    the first instruction of this function is an indirect jump which points
  2107.       at a RET by default
  2108. SeeAlso: AX=C000h"PCACHE",AX=C018h"PCACHE"
  2109. --------c-2FC01A-----------------------------
  2110. INT 2F U - PrintCache v3.1 PCACHE.EXE - CLEAR ??? FLAG
  2111.     AX = C01Ah
  2112. Return: BX destroyed
  2113. SeeAlso: AX=C000h"PCACHE",AX=C01Bh"PCACHE"
  2114. --------c-2FC01B-----------------------------
  2115. INT 2F U - PrintCache v3.1 PCACHE.EXE - SET ??? FLAG
  2116.     AX = C01Bh
  2117. Return: BX destroyed
  2118. SeeAlso: AX=C000h"PCACHE",AX=C01Ah"PCACHE"
  2119. --------c-2FC01C-----------------------------
  2120. INT 2F U - PrintCache v3.1 PCACHE.EXE - ???
  2121.     AX = C01Ch
  2122.     ???
  2123. Return: AX = ???
  2124.     BX destroyed
  2125. SeeAlso: AX=C000h"PCACHE"
  2126. --------c-2FC01D-----------------------------
  2127. INT 2F U - PrintCache v3.1 PCACHE.EXE - NOP
  2128.     AX = C01Dh to C01Fh
  2129. Return: BX destroyed
  2130. Program: PCACHE is the resident print spooler portion of PrintCache by
  2131.       LaserTools; it may use either memory or disk space to spool output
  2132. Range:    AH=C0h to AH=FFh, selected by commandline switch
  2133. SeeAlso: AX=C000h"PCACHE"
  2134. --------V-2FC020-----------------------------
  2135. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  2136.     AX = C020h
  2137. Return: AL = 00h if successful
  2138.         BX = VxD API Status
  2139.         0000h no error
  2140.         0001h error
  2141.         0100h neither Windows 3.X enhanced mode nor Windows/386 2.x
  2142.               is running
  2143.         0200h VM API entry point not found (VxD not installed)
  2144. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2145. Note:    this call resets the VxD API Status to zero
  2146. SeeAlso: AX=1602h,AX=1607h"CALL OUT API"
  2147. Index:    screen saver;AD-DOS
  2148. --------V-2FC04E-----------------------------
  2149. INT 2F - Explosiv v2.00+ - NON-TSR EXECUTING CHECK
  2150.     AX = C04Eh
  2151. Return: AL = 4Fh if Explosiv is running but not memory-resident
  2152. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  2153.       by H&G Software (Reidar Gresseth and Chris Hook)
  2154. Range:    AH=C0h to AH=C9h, selected by configuration
  2155. SeeAlso: AX=C050h
  2156. Index:    screen saver;Explosiv
  2157. --------V-2FC050-----------------------------
  2158. INT 2F - Explosiv v2.00+ - INSTALLATION CHECK
  2159.     AX = C050h
  2160. Return: AL = 51h if installed
  2161.     ---v3.0+ ---
  2162.         BX = interval in clock ticks
  2163.         CH = animation display color (00h mono, 01h tinge, 02h color)
  2164.         CL = animation delay factor
  2165.         DH = animation parameters
  2166.         DL = INT 10 checking (00h on, 01h off)
  2167.         SI = number of bytes available for animation code
  2168.         DI = display type (00h VGA, 01h EGA, 02h CGA, 03h HGC, 04h MDA)
  2169. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  2170.       by H&G Software (Reidar Gresseth and Chris Hook)
  2171. Range:    AH=C0h to AH=C9h, selected by configuration
  2172. SeeAlso: AH=93h,AX=C000h"AD-DOS",AX=C04Eh,AX=C052h,AX=C054h"v3"
  2173. SeeAlso: INT 14/AX=AA01h
  2174. Index:    screen saver;Explosiv
  2175. --------V-2FC052-----------------------------
  2176. INT 2F - Explosiv v2.00+ - UNINSTALL
  2177.     AX = C052h
  2178.     DX:BX = address to return to on successful uninstall
  2179. Return: at specified address if successful
  2180.     AL = 53h on error
  2181. Note:    specified return address must have the segment of the caller's PSP
  2182. SeeAlso: AX=C050h
  2183. Index:    screen saver;Explosiv
  2184. --------V-2FC054-----------------------------
  2185. INT 2F - Explosiv v2.x - GET ANIMATION DELAY FACTOR
  2186.     AX = C054h
  2187. Return: AL = delay factor
  2188. SeeAlso: AX=C057h
  2189. Index:    screen saver;Explosiv
  2190. --------V-2FC054-----------------------------
  2191. INT 2F - Explosiv v3.0+ - UPDATE PARAMETERS
  2192.     AX = C054h
  2193.     BX = new interval in clock ticks
  2194.     CH = animation display color (00h mono, 01h tinge, 02h color)
  2195.     CL = animation delay factor
  2196.     DH = animation parameters
  2197.     DL = INT 10 checking (00h on, 01h off)
  2198. SeeAlso: AX=C050h
  2199. Index:    screen saver;Explosiv
  2200. --------V-2FC055-----------------------------
  2201. INT 2F - Explosiv v2.x - SET BLANKING INTERVAL
  2202.     AX = C055h
  2203.     BX = new interval in clock ticks
  2204. Index:    screen saver;Explosiv
  2205. --------V-2FC056-----------------------------
  2206. INT 2F - Explosiv v2.x - SET ANIMATION DISPLAY TYPE
  2207.     AX = C056h
  2208.     BL = animated display type (00h mono, 01h color)
  2209. SeeAlso: AX=C058h"v2.x"
  2210. Index:    screen saver;Explosiv
  2211. --------V-2FC056-----------------------------
  2212. INT 2F - Explosiv v3.0+ - ENABLE/DISABLE EXPLOSIV
  2213.     AX = C056h
  2214.     BX = new state
  2215.         0000h disabled
  2216.         0100h enabled
  2217.         0101h enabled, but never blank
  2218.         0102h enabled, always blank
  2219. --------V-2FC057-----------------------------
  2220. INT 2F - Explosiv v2.x - SET ANIMATION DELAY FACTOR
  2221.     AX = C057h
  2222.     BL = delay factor
  2223. SeeAlso: AX=C054h"v2.x"
  2224. Index:    screen saver;Explosiv
  2225. --------V-2FC058-----------------------------
  2226. INT 2F - Explosiv v2.x - SET ANIMATION PARAMETER
  2227.     AX = C058h
  2228.     BL = animation parameter
  2229. Note:    the animation parameter has different interpretations for each display
  2230. SeeAlso: AX=C056h"v2.x"
  2231. Index:    screen saver;Explosiv
  2232. --------V-2FC058-----------------------------
  2233. INT 2F - Explosiv v3.0+ - LOAD NEW ANIMATION DISPLAY CODE
  2234.     AX = C058h
  2235.     BX = file handle for file containing display code
  2236.     CX = number of bytes to load
  2237.     DX = offset at which animation code should be loaded
  2238. Return: AL = status (see #2717)
  2239. Note:    if AL=00h-03h on return, the file will be closed
  2240. Index:    screen saver;Explosiv
  2241.  
  2242. (Table 2717)
  2243. Values for Explosiv function status:
  2244.  00h    successful
  2245.  01h    code too large to available space
  2246.  02h    no data read, load aborted
  2247.  03h    incomplete load, default blanking display loaded instead
  2248.  58h    unexpected offset in DX
  2249. --------V-2FC059-----------------------------
  2250. INT 2F - Explosiv v2.x - DISABLE EXPLOSIV
  2251.     AX = C059h
  2252. Note:    clears flag set by AX=C05Ah
  2253. SeeAlso: AX=C05Ah
  2254. Index:    screen saver;Explosiv
  2255. --------V-2FC05A-----------------------------
  2256. INT 2F u - Explosiv v2.x - ENABLE EXPLOSIV
  2257.     AX = C05Ah
  2258.     BL = ???
  2259. Note:    sets flag cleared by AX=C059h then stores BL
  2260. SeeAlso: AX=C059h,AX=C05Bh
  2261. Index:    screen saver;Explosiv
  2262. --------V-2FC05B-----------------------------
  2263. INT 2F - Explosiv v2.x - CHANGE ANIMATION DISPLAY
  2264.     AX = C05Bh
  2265.     BL = animation display
  2266. Note:    this function fails silently if the requested display is not in memory
  2267. SeeAlso: AX=C05Ah,AX=C05Ch
  2268. Index:    screen saver;Explosiv
  2269. --------V-2FC05C-----------------------------
  2270. INT 2F - Explosiv v2.x - SET INT 10 CHECKING
  2271.     AX = C05Ch
  2272.     BL = new state of INT 10 checking (00h enabled, 01h disabled)
  2273. SeeAlso: AX=C05Bh
  2274. Index:    screen saver;Explosiv
  2275. --------v-2FC080-----------------------------
  2276. INT 2F U - AMI IAM.SYS - INSTALL ??? CALLBACK
  2277.     AX = C080h
  2278.     CX:DX -> ??? callback
  2279.     DI = segment of ??? buffer (first WORD copied into IAM.SYS)
  2280. Program: IAM.SYS is the Illegal Activity Monitor portion of American
  2281.       Megatrends, Inc.'s PC-Defender anti-virus product
  2282. Note:    also sets ??? flag
  2283. SeeAlso: AX=C081h
  2284.  
  2285. Format of IAM.SYS buffer:
  2286. Offset    Size    Description    (Table 2718)
  2287.  00h    BYTE    ???
  2288.  01h    BYTE    ???
  2289.  02h  N BYTEs    ??? (ASCIZ strings)
  2290. --------v-2FC081-----------------------------
  2291. INT 2F U - AMI IAM.SYS - CLEAR ???
  2292.     AX = C081h
  2293. Desc:    clears the ??? flag that AX=C080h sets
  2294. SeeAlso: AX=C080h
  2295. --------K-2FC0AE-----------------------------
  2296. INT 2F U - HP 100LX/200LX - PUSHKEYS - INSTALLATION CHECK
  2297.     AX = C0AEh
  2298. Return: AX = 4453h if installed
  2299.     CX = 5259h if installed
  2300. Range:    AH=C0h to AH=FFh, selected by scanning for signature
  2301. SeeAlso: AX=C000h"HP 100LX",AX=C001h"HP 100LX",AX=C0AFh"HP 100LX"
  2302. --------K-2FC0AF-----------------------------
  2303. INT 2F U - HP 100LX/200LX - PUSHKEYS - INTERNAL - GET BUFFER ADDRESS
  2304.     AX = C0AFh
  2305. Return: ES:DI -> buffer (behind code)
  2306. Range:    AH=C0h to AH=FFh, selected by scanning for signature with AL=AEh
  2307. SeeAlso: AX=C000h"HP 100LX",AX=C001h"HP 100LX",AX=C0AEh"HP 100LX"
  2308. --------N-2FC100-----------------------------
  2309. INT 2F U - Personal NetWare - STPIPX v1.00 - INSTALLATION CHECK
  2310.     AX = C100h
  2311. Return: AL = FFh if installed
  2312.         ES:SI -> signature string "STP-IPX$"
  2313.         BX = version??? (0001h for v1.00)
  2314.         DI corrupted
  2315. Note:    AH=C1h is the default value; STPIPX probably scans a range of
  2316.       multiplex numbers to find a free one, as LSL does
  2317. SeeAlso: AX=C000h"LSL",AX=C101h
  2318. --------N-2FC101-----------------------------
  2319. INT 2F U - Personal NetWare - STPIPX v1.00 - UNINSTALL
  2320.     AX = C101h
  2321. Return: AL = status???
  2322.     BX corrupted
  2323. SeeAlso: AX=C101h
  2324. --------N-2FC205-----------------------------
  2325. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  2326.     AX = C205h
  2327.     details not yet available
  2328. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2329. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C2F0h"LapLink"
  2330. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  2331. --------N-2FC2F0-----------------------------
  2332. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  2333.     AX = C2F0h
  2334.     details not yet available
  2335. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2336. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  2337. SeeAlso: AX=C2F1h"LapLink",AX=C301h"LapLink"
  2338. --------N-2FC2F1-----------------------------
  2339. INT 2F U - LapLink RemoteAccess (LLRA) - Redirector - ???
  2340.     AX = C2F1h
  2341.     details not yet available
  2342. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2343. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  2344. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink"
  2345. --------d-2FC300-----------------------------
  2346. INT 2F - SETWPR.COM - INSTALLATION CHECK
  2347.     AX = C300h
  2348. Return: AL = FFh if installed
  2349. Program: SETWPR is a hard-disk write-protection TSR by Jaroslaw Rafa
  2350. SeeAlso: AX=C302h"SETWPR"
  2351. --------k-2FC300DX0000-----------------------
  2352. INT 2F U - SpaceManager - INSTALLATION CHECK
  2353.     AX = C300h
  2354.     DX = 0000h
  2355. Return: AL = FFh if any SpaceManager programs installed
  2356.         BX = 6F73h
  2357.         CX = 6F68h
  2358. Program: SpaceManager is an enhancement for MS-DOS DoubleSpace by Vertisoft
  2359.       Systems, Inc.
  2360. Range:    AH=C3h to AH=FFh, selected by scanning for first free multiplex number
  2361. SeeAlso: AX=C300h/BX=4F53h
  2362. --------k-2FC300BX4F53-----------------------
  2363. INT 2F U - SpaceManager - INSTALLATION VERIFICATION
  2364.     AX = C300h
  2365.     BX = 4F53h ('OS')
  2366.     CX = 4F48h ('OH')
  2367.     DX = program identifier (see #2719) or 0666h for any SpaceManager prog
  2368. Return: AL = FFh if BX/CX as specified and specified program installed
  2369.         BX = 6F73h ('os')
  2370.         CX = 6F68h ('oh')
  2371. Range:    AH=C3h to AH=FFh, selected by scanning for first free multiplex number
  2372. Note:    this call is chained if BX,CX, or DX are not as specified above
  2373. SeeAlso: AX=C300h/DX=0000h
  2374.  
  2375. (Table 2719)
  2376. Values for SpaceManager program identifier:
  2377.  9000h    SMOUNT (SuperMount)
  2378.  9001h    SELECTC (SelectCompress)
  2379.  9002h    SUPERX (SuperExchange)
  2380.  9003h    FORTUNE (FortuneTeller)
  2381. --------k-2FC301-----------------------------
  2382. INT 2F U - SpaceManager - ???
  2383.     AX = C301h
  2384.     DX = program identifier (9000h,9001h,9003h) (see #2719)
  2385.     ???
  2386. Return: ???
  2387. --------N-2FC301-----------------------------
  2388. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  2389.     AX = C301h
  2390.     details not yet available
  2391. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2392. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  2393. SeeAlso: AX=C2F0h"LapLink",AX=C3F0h"LapLink",AX=C3F1h"LapLink"
  2394. --------k-2FC302-----------------------------
  2395. INT 2F U - SpaceManager - ENABLE PROGRAM
  2396.     AX = C302h
  2397.     DX = program identifier (9000h,9001h,9003h) (see #2719)
  2398. Return: AX destroyed
  2399. SeeAlso: AX=C303h,AX=C306h
  2400. --------d-2FC302-----------------------------
  2401. INT 2F - SETWPR.COM - SET WRITE-PROTECTION STATE
  2402.     AX = C302h
  2403.     BL = new state
  2404.         00h disk may be written
  2405.         01h disk write-protected
  2406. Return: AL = FFh if installed
  2407. Program: SETWPR is a hard-disk write-protection TSR by Jaroslaw Rafa
  2408. SeeAlso: AX=C300h"SETWPR"
  2409. --------k-2FC303-----------------------------
  2410. INT 2F U - SpaceManager - DISABLE PROGRAM
  2411.     AX = C303h
  2412.     DX = program identifier (9000h,9001h,9003h) (see #2719)
  2413. Return: AX destroyed
  2414. SeeAlso: AX=C302h,AX=C306h
  2415. --------k-2FC304-----------------------------
  2416. INT 2F U - SpaceManager - GET PER-DRIVE ENABLEMENT TABLE
  2417.     AX = C304h
  2418.     DX = program identifier (9000h,9001h,9003h) (see #2719)
  2419. Return: ES:BX -> 26-byte drive table (00h disabled for drive, 01h enabled)
  2420.     AX destroyed
  2421. --------k-2FC305DX9003-----------------------
  2422. INT 2F U - SpaceManager - FORTUNE.EXE - NOP
  2423.     AX = C305h
  2424.     DX = 9003h
  2425. Return: AX destroyed
  2426. --------k-2FC305-----------------------------
  2427. INT 2F U - SpaceManager - ???
  2428.     AX = C305h
  2429.     DX = program identifier (9000h,9001h) (see #2719)
  2430.     ???
  2431. Return: ???
  2432. --------k-2FC306-----------------------------
  2433. INT 2F U - SpaceManager - CHECK WHETHER PROGRAM ENABLED
  2434.     AX = C306h
  2435.     DX = program identifier (9000h,9001h,9003h) (see #2719)
  2436. Return: AL = current state (00h disabled, FAh enabled)
  2437.     AH destroyed
  2438. SeeAlso: AX=C302h,AX=C303h
  2439. --------k-2FC307DX9001-----------------------
  2440. INT 2F U - SpaceManager - SELECTC - ???
  2441.     AX = C307h
  2442.     DX = 9001h
  2443.     BX = ???
  2444.     CX = ???
  2445.     ???
  2446. Return: ???
  2447. --------k-2FC308DX9001-----------------------
  2448. INT 2F U - SpaceManager - SELECTC - ???
  2449.     AX = C308h
  2450.     DX = 9001h
  2451.     ???
  2452. Return: ???
  2453. --------N-2FC3F0-----------------------------
  2454. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  2455.     AX = C3F0h
  2456.     details not yet available
  2457. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2458. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  2459. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink",AX=C3F1h"LapLink"
  2460. --------N-2FC3F1-----------------------------
  2461. INT 2F U - LapLink RemoteAccess (LLRA) - Compression - ???
  2462.     AX = C3F1h
  2463.     details not yet available
  2464. Range:    AH=C0h to AH=FFh, selected by scanning for first free multiplex number
  2465. SeeAlso: AX=C000h"LapLink",AX=C002h"LapLink",AX=C205h"LapLink"
  2466. SeeAlso: AX=C2F0h"LapLink",AX=C301h"LapLink",AX=C3F0h"LapLink"
  2467. --------d-2FC64CBX5553-----------------------
  2468. INT 2F U - Smart Prompt - INSTALLATION CHECK
  2469.     AX = C64Ch
  2470.     BX = 5553h
  2471. Return: AX = 4CC6h if installed
  2472.     BX = 5355h if installed
  2473. Program: Smart Prompt (SMARTPMT) is a freeware TSR by Steve Gibson which
  2474.       forces an immediate flush of SmartDrive's (and compatible caches')
  2475.       buffers on returning to the DOS prompt
  2476. --------V-2FC700CX434C-----------------------
  2477. INT 2F u - COLAP - INSTALLATION CHECK
  2478.     AX = C700h
  2479.     CX = 434Ch  "CL"
  2480. Return: AL = FFh if installed
  2481. Program: colap.com is a freeware TSR by Eric Meyer which controls contrast
  2482.       and brightness of color laptops by changing the VGA palette colors;
  2483.       for Toshiba laptops there are more hotkeys for shutting off display
  2484.       and harddisk.
  2485. --------v-2FC900BP0000-----------------------
  2486. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  2487.     AX = C900h
  2488.     BP = 0000h
  2489. Return: AL = FFh if installed
  2490.         BP >= 0014h
  2491. Note:    called by TBSCANX
  2492. SeeAlso: AX=C987h,AX=CA00h
  2493. --------v-2FC987-----------------------------
  2494. INT 2F U - ThunderByte??? - DISINFECT FILE???
  2495.     AX = C987h
  2496.     BX:DX -> filename
  2497.     BX:CX -> virus name
  2498. Return: AX = status
  2499.         0000h successful???
  2500. Note:    called by TBSCANX
  2501. SeeAlso: AX=CA00h
  2502. --------v-2FC9FD-----------------------------
  2503. INT 2F - ThunderByte TBLOG - WRITE STRING TO LOG
  2504.     AX = C9FDh
  2505.     DS:SI -> ASCIZ string (max 110 chars)
  2506. Return: AH = 00h
  2507.     AL = last character in string
  2508.     CX = number of unused characters in string
  2509.     SI,DI destroyed
  2510. Notes:    The string can also be terminated with a '%'-character.
  2511.     This function is never called within ThunderBYTE Anti-Virus.
  2512. SeeAlso: AX=C900h
  2513. --------r-2FC9FF-----------------------------
  2514. INT 2F C - StackMan - INSTALLATION BROADCAST
  2515.     AX = C9FFh
  2516.     BL = BCD version number
  2517.     CX = number of stacks
  2518.     DX = stack size in bytes
  2519. Program: StackMan is a freeware stack manager by Franz Veldman of ESaSS B.V.
  2520.       which functions as a replacement for the DOS STACK= command as well
  2521.       as permitting multiple TSRs to share a pool of stack space
  2522. InstallCheck:    test for the string "STACKXXX" at offset 0Ah from the INT B4
  2523.       handler
  2524. Note:    called by StackMan when it goes resident to inform interested TSRs that
  2525.       its API is available
  2526. SeeAlso: INT B4"StackMan",INT B5"StackMan"
  2527. Index:    installation check;STACKMAN|broadcasts;STACKMAN installation
  2528. --------F-2FCA-------------------------------
  2529. INT 2F - FAXPLUS - FAX TSR
  2530.     AH = CAh
  2531.     ???
  2532. Return: ???
  2533. Program: FAXTSR is a resident FAX send/receive module for FAXPLUS by Frans
  2534.       Veldman
  2535. SeeAlso: AH=2Ah"Gammafax"
  2536. --------v-2FCA00BX5442-----------------------
  2537. INT 2F - TBSCANX - INSTALLATION CHECK
  2538.     AX = CA00h
  2539.     BX = 5442h ('TB')
  2540. Return: AL = state
  2541.         00h not installed
  2542.         FFh installed
  2543.         BX = 7462h ('tb') if BX was 5442h on entry
  2544. Program: TBSCANX is a resident virus scanning module by Frans Veldman.
  2545. Notes:    programs may perform virus checks on themselves, other program files,
  2546.       or their data files by invoking the TBSCANX API.
  2547.     current versions of TBScanX don't actually check the value of BX
  2548. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0007h,AX=C900h
  2549. --------v-2FCA01-----------------------------
  2550. INT 2F - TBSCANX - GET STATUS
  2551.     AX = CA01h
  2552. Return: AH = BCD version number (v2.2+)
  2553.         CAh for versions before 2.2
  2554.     AL = state (00h = disabled, 01h = enabled)
  2555.     CX = number of signatures which will be searched
  2556. ---v2.0---
  2557.     BX = EMS handle, 0000h if not using EMS
  2558. ---v2.3+---
  2559.     BX = segment of swap area, 0000h if not swapped
  2560.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  2561. SeeAlso: AX=CA02h
  2562. --------v-2FCA02-----------------------------
  2563. INT 2F - TBSCANX - SET STATE
  2564.     AX = CA02h
  2565.     BL = new state (00h = disabled, 01h = enabled)
  2566. SeeAlso: AX=CA01h
  2567. --------v-2FCA03-----------------------------
  2568. INT 2F - TBSCANX - SCAN BUFFER
  2569.     AX = CA03h
  2570.     CX = size of buffer
  2571.     DS:DX -> buffer containing data to scan
  2572. Return: CF clear if no virus signatures found
  2573.         BX,ES destroyed
  2574.     CF set if signature found
  2575.         ES:BX -> ASCIZ virus name (v2.3+)
  2576.         DS:DX -> ASCIZ virus name (v2.0)
  2577.     AX,CX,DX destroyed (v2.3+)
  2578.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  2579. SeeAlso: AX=CA04h
  2580. --------v-2FCA04-----------------------------
  2581. INT 2F - TBSCANX - SCAN FILE
  2582.     AX = CA04h
  2583.     DS:DX -> filename
  2584. Return: CF clear if no virus signatures found
  2585.         BX,SI,DI,ES destroyed
  2586.     CF set if signature found
  2587.         ES:BX -> ASCIZ virus name
  2588.     AX,CX,DX destroyed
  2589. Note:    this function requires at least 4K free memory
  2590. SeeAlso: AX=CA03h
  2591. --------U-2FCAFEBX0000-----------------------
  2592. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  2593.     AX = CAFEh
  2594.     BX = 0000h
  2595. Return: BX = segment of resident code if installed
  2596.         0000h if not installed
  2597. SeeAlso: AX=5453h,INT 2D"AMIS"
  2598. --------F-2FCB00-----------------------------
  2599. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  2600.     AX = CB00h
  2601. Return: AL = status
  2602.         00h not installed, OK to install
  2603.         01h not installed, not OK to install
  2604.         FFh installed
  2605. Note:    AH = CBh is the default identifier, but may be reconfigured
  2606. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  2607. --------F-2FCB00BX4D53-----------------------
  2608. INT 2F - METZ XpressFax CASMGR - INSTALLATION CHECK
  2609.     AX = CB00h
  2610.     BX = 4D53h ('MS')
  2611.     CX = 4949h ('II')
  2612. Return: AL = status
  2613.         00h not installed, OK to install
  2614.         01h not installed, not OK to install
  2615.         FFh installed
  2616.         BX = 6D73h ('ms')
  2617.         CX = 6969h ('ii')
  2618. Note:    this function is equivalent to the standard CASMGR installation check,
  2619.       but uses the additional magic values to identify which CAS is
  2620.       installed
  2621. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB0Eh,AX=CB16h
  2622. --------F-2FCB01-----------------------------
  2623. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  2624.     AX = CB01h
  2625.     DS:DX -> ASCIZ name of task control file
  2626. Return: AX >= 0: event handle
  2627.     AX < 0: two's complement of error code (see #2720)
  2628. Note:    files needed for an event must be kept until task is complete or error
  2629. SeeAlso: AX=CB0Bh,AX=CB15h
  2630.  
  2631. (Table 2720)
  2632. Values for CAS error code:
  2633.   (AH = class, AL = subcode, value passed back is 2's complement)
  2634.   Class 00h    --- FAX warnings
  2635.     Subcode 00h    no error
  2636.         02h    bad scanline count
  2637.         03h    page sent with errors, could not retransmit
  2638.         04h    received data lost
  2639.         05h    invalid or missing logo file
  2640.         06h    filename does not match nonstandard format (NSF) header
  2641.         07h    file size does not match NSF header
  2642.   Class 01h    --- DOS warnings (data was sent)
  2643.     Subcode 01h    invalid function
  2644.         05h    access denied
  2645.         06h    invalid handle
  2646.         others    see #1366 at INT 21/AH=59h/BX=0000h
  2647.   Class 02h    --- fatal errors (data not sent)
  2648.     Subcode 00h    multiplex handler failed
  2649.         01h    unknown command
  2650.         02h    bad event handle
  2651.         03h    FIND NEXT attempted before FIND FIRST
  2652.         04h    no more events
  2653.         07h    invalid queue type
  2654.         08h    bad control file
  2655.         09h    communication board busy
  2656.         0Ah    invalid command parameter
  2657.         0Bh    can't uninstall resident code
  2658.         0Ch    file exists
  2659.         80h    unknown task type
  2660.         81h    bad phone number
  2661.         82h    bad .PCX file header
  2662.         83h    unexpected EOF
  2663.         84h    unexpected disconnect
  2664.         85h    too many dialing retries
  2665.         86h    no file specified for send
  2666.         87h    communication board timeout
  2667.         88h    received too many pages (>1023) of data
  2668.         89h    manual connect initiated too long ago
  2669.         8Ah    hardware command set error
  2670.         8Bh    bad NonStandard Format (NSF) header file
  2671.   Class 03h    --- fatal DOS errors
  2672.     Subcode 02h    file not found
  2673.         03h    path not found
  2674.         others    see #1366 at INT 21/AH=59h/BX=0000h
  2675.   Class 04h    --- FAX errors
  2676.     Subcode 01h    remote unit not Group 3 compatible
  2677.         02h    remote unit did not send capabilities
  2678.         03h    other FAX machine incompatible
  2679.         04h    other FAX incapable of file transfers
  2680.         05h    exceeded retrain or FAX resend limit
  2681.         06h    line noise or failure to agree on bit rate
  2682.         07h    remote disconnected after receiving data
  2683.         08h    no response from remote after sending data
  2684.         09h    remote's capabilities incompatible
  2685.         0Ah    no dial tone (v1.2+)
  2686.         0Bh    invalid response from remote unit after sending data
  2687.         0Dh    phone line dead or remote unit disconnected
  2688.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  2689.         11h    invalid command from remote after receiving data
  2690.         15h    tried to receive from incompatible hardware
  2691.         5Ch    received data overflowed input buffer
  2692.         5Dh    remote unexpectedly stopped sending data
  2693.         5Eh    other FAX machine jammed (no data sent)
  2694.         5Fh    remote took too long to send fax scan line
  2695.         63h    can't get through to remote unit
  2696.         64h    user canceled event
  2697.   Class 05h    --- application-specific (v1.2+)
  2698.   ---Intel FAXPOP.EXE
  2699.     Subcode 00h    tried to send while in graphics mode
  2700.         01h    insufficient disk space
  2701.         02h    internal buffer overflow
  2702.   Class 06h    --- CAS implementation-specific (v1.2+)
  2703. --------F-2FCB02-----------------------------
  2704. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  2705.     AX = CB02h
  2706. Return: AX >= 0: event handle of aborted event
  2707.     AX < 0: error code (see #2720)
  2708. Note:    termination could take up to 30 seconds
  2709. SeeAlso: AX=CB08h,AX=CB10h
  2710. --------F-2FCB05-----------------------------
  2711. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  2712.     AX = CB05h
  2713.     CX = status of events to find
  2714.         0000h successful completion
  2715.         0001h waiting to be processed
  2716.         0002h number has been dialed
  2717.         0003h connection established, sending
  2718.         0004h connection established, receiving
  2719.         0005h event aborted
  2720.         FFFFh find any event, regardless of status
  2721.         other negative values, match error code
  2722.     DH = direction
  2723.         00h chronological order, earliest to latest
  2724.         01h reverse chronological order, latest to earliest
  2725.     DL = queue to search
  2726.         00h task queue
  2727.         01h receive queue
  2728.         02h log queue
  2729. Return: AX = 0000h successful
  2730.         BX = event handle for found event
  2731.     AX < 0       error code (see #2720)
  2732. SeeAlso: AX=CB06h,AX=CB07h
  2733. --------F-2FCB06-----------------------------
  2734. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  2735.     AX = CB06h
  2736.     DL = queue to search
  2737.         00h task queue
  2738.         01h receive queue
  2739.         02h log queue
  2740. Return: AX = 0000h successful
  2741.         BX = event handle for found event
  2742.     AX < 0       error code (see #2720)
  2743. Note:    direction of search is same as preceding FIND FIRST call
  2744. SeeAlso: AX=CB05h
  2745. --------F-2FCB07-----------------------------
  2746. INT 2F - Communicating Applications Specification - OPEN FILE
  2747.     AX = CB07h
  2748.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  2749.     CX = receive file number (ignored for task queue and log queue)
  2750.         0000h  open receive control file
  2751.         N       open Nth received data file
  2752.     DL = queue
  2753.         00h task queue
  2754.         01h receive queue control file or received file, as given by CX
  2755.         02h log queue
  2756.         03h group file in task queue (v1.2+)
  2757.         04h group file in log queue (v1.2+)
  2758. Return: AX = 0000h successful
  2759.         BX = DOS file handle for requested file
  2760.     AX < 0       error code (see #2720)
  2761. Note:    the returned file handle has been opened in read-only mode and should
  2762.       be closed with INT 21/AH=3Eh after use
  2763. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  2764. --------F-2FCB08-----------------------------
  2765. INT 2F - Communicating Applications Specification - DELETE FILE
  2766.     AX = CB08h
  2767.     BX = event handle
  2768.     CX = receive file number
  2769.         0000h delete ALL received files and receive control file
  2770.         N      delete Nth received file
  2771.     DL = queue
  2772.         00h delete control file in task queue and corresponding group file
  2773.           if it exists
  2774.         01h delete file in receive queue, as given by CX
  2775.         02h delete control file in log queue (individual deletions not
  2776.           recommended, to maintain integrity of log) and corresponding
  2777.           group file if it exists
  2778. Return: AX = 0000h successful
  2779.     AX < 0       error code (see #2720)
  2780. SeeAlso: AX=CB02h,AX=CB09h
  2781. --------F-2FCB09-----------------------------
  2782. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  2783.     AX = CB09h
  2784.     DL = queue
  2785.         00h delete all control files in task queue, including all group
  2786.           files
  2787.         01h delete all files in receive queue
  2788.         02h delete all control files in log queue, including all group
  2789.           files
  2790. Return: AX = 0000h successful
  2791.     AX < 0       error code (see #2720)
  2792. SeeAlso: AX=CB08h
  2793. --------F-2FCB0A-----------------------------
  2794. INT 2F - Communicating Applications Specification - GET EVENT DATE
  2795.     AX = CB0Ah
  2796.     BX = event handle
  2797.     DL = queue
  2798.         00h task queue
  2799.         01h receive queue
  2800.         02h log queue
  2801. Return: AX = 0000h successful
  2802.         CX = year
  2803.         DH = month
  2804.         DL = day
  2805.     AX < 0       error code (see #2720)
  2806. SeeAlso: AX=CB0Bh,AX=CB0Ch
  2807. --------F-2FCB0B-----------------------------
  2808. INT 2F - Communicating Applications Specification - SET TASK DATE
  2809.     AX = CB0Bh
  2810.     BX = event handle (task event only)
  2811.     CX = year
  2812.     DH = month
  2813.     DL = day
  2814. Return: AX = 0000h successful
  2815.     AX < 0       error code (see #2720)
  2816. Note:    setting a task's date and time to before the current date and time
  2817.       causes it to execute immediately
  2818. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  2819. --------F-2FCB0C-----------------------------
  2820. INT 2F - Communicating Applications Specification - GET EVENT TIME
  2821.     AX = CB0Ch
  2822.     BX = event handle
  2823.     DL = queue
  2824.         00h task queue
  2825.         01h receive queue
  2826.         02h log queue
  2827. Return: AX = 0000h successful
  2828.         CH = hour
  2829.         CL = minute
  2830.         DH = second
  2831.         DL = 00h
  2832.     AX < 0       error code (see #2720)
  2833. SeeAlso: AX=CB0Ah,AX=CB0Dh
  2834. --------F-2FCB0D-----------------------------
  2835. INT 2F - Communicating Applications Specification - SET TASK TIME
  2836.     AX = CB0Dh
  2837.     BX = event handle (task events only)
  2838.     CH = hour
  2839.     CL = minute
  2840.     DH = second
  2841.     DL unused
  2842. Return: AX = 0000h successful
  2843.     AX < 0       error code (see #2720)
  2844. Note:    setting a task's date and time to before the current date and time
  2845.       causes it to execute immediately
  2846. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  2847. --------F-2FCB0E-----------------------------
  2848. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  2849.     AX = CB0Eh
  2850.     DS:DX -> 256-byte buffer for external data block (see #2721)
  2851. Return: AX = 0000h successful
  2852.         DS:DX buffer filled
  2853.     AX < 0       error code (see #2720)
  2854.  
  2855. Format of CAS external data block:
  2856. Offset    Size    Description    (Table 2721)
  2857.  00h    BYTE    CAS major version
  2858.  01h    BYTE    CAS minor version
  2859.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  2860.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  2861.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  2862.  60h 32 BYTEs    ASCIZ default sender name
  2863.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  2864.  95h 107 BYTEs    reserved
  2865. --------F-2FCB0F-----------------------------
  2866. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  2867.     AX = CB0Fh
  2868.     DL = subfunction
  2869.         00h get current autoreceive state
  2870.         01h set autoreceive state
  2871.         DH = number of rings before answer, 00h = never
  2872. Return: AX = 0000h autoreceive disabled
  2873.     AX = N       number of rings before answer
  2874.     AX < 0       error code (see #2720)
  2875. --------F-2FCB10-----------------------------
  2876. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  2877.     AX = CB10h
  2878.     DS:DX -> 512-byte buffer for status area (see #2723)
  2879. Return: AX = 0000h successful
  2880.         BX = event handle of current event or negative error code if
  2881.               no current event
  2882.         buffer filled
  2883.     AX < 0       error code (see #2720)
  2884. SeeAlso: AX=CB02h,AX=CB0Dh
  2885.  
  2886. (Table 2722)
  2887. Values for CAS event type:
  2888.  00h    send
  2889.  01h    receive
  2890.  02h    polled send
  2891.  03h    polled receive
  2892.  04h to 7Fh reserved
  2893.  FFh    serious hardware error
  2894.  
  2895. Format of CAS status area:
  2896. Offset    Size    Description    (Table 2723)
  2897.  00h    BYTE    event type (see #2722)
  2898.  01h    BYTE    transfer type
  2899.         00h 200x200 dpi, FAX mode
  2900.         01h 100x200 dpi, FAX mode
  2901.         02h file transfer mode
  2902.         03h to 7Fh reserved
  2903.  02h    WORD    event status (see #2724)
  2904.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  2905.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  2906.  08h    WORD    number of files to transfer, max 7FFFh
  2907.  0Ah    WORD    offset of file transfer record
  2908.  0Ch 47 BYTEs    ASCIZ phone number to call
  2909.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  2910.  7Bh    BYTE    reserved (00h)
  2911.  7Ch    BYTE    connect time, seconds
  2912.  7Dh    BYTE    connect time, minutes
  2913.  7Eh    BYTE    connect time, hours
  2914.  7Fh    DWORD    total number of pages in all files
  2915.  83h    DWORD    pages already transmitted
  2916.  87h    WORD    number of files already transmitted
  2917.  89h    BYTE    cover page flag
  2918.         00h don't transmit cover page
  2919.         01h transmit cover page
  2920.         02h to 7Fh reserved
  2921.  8Ah    WORD    total number of transmission errors
  2922.  8Ch 78 BYTEs    reserved (zeros)
  2923.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  2924.  EFH 32 BYTEs    ASCIZ destination name
  2925. 10Fh 32 BYTEs    ASCIZ sender name
  2926. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  2927. 17Fh 128 BYTEs    file transfer record for current event (see #2725)
  2928.  
  2929. (Table 2724)
  2930. Values for CAS event status:
  2931.  0000h    completed successfully
  2932.  0001h    waiting
  2933.  0002h    number dialed
  2934.  0003h    connected, sending
  2935.  0004h    connected, receiving
  2936.  0005h    aborted
  2937.  0006h to 007Fh reserved
  2938.  0080h to 7FFFh application-specific events
  2939.  8000h to FFFFh error codes
  2940.  
  2941. Format of CAS file transfer record:
  2942. Offset    Size    Description    (Table 2725)
  2943.  00h    BYTE    file type (ignored unless FAX)
  2944.         00h ASCII
  2945.         01h PCX
  2946.         02h DCX
  2947.         03h to 7Fh reserved
  2948.  01h    BYTE    text size for ASCII FAX file
  2949.         00h = 80 columns by 66 lines (11 inches)
  2950.         01h = 132 columns by 88 lines (11 inches)
  2951.         02h to 7Fh reserved
  2952.  02h    BYTE    status of file
  2953.         00h untouched
  2954.         01h opened
  2955.         02h moved
  2956.         03h deleted
  2957.         04h not yet received
  2958.         05h to 7Fh reserved
  2959.  03h    DWORD    bytes already transmitted
  2960.  07h    DWORD    file size in bytes
  2961.  0Bh    WORD    pages alread transmitted
  2962.  0Dh    WORD    number of pages in file
  2963.  0Fh 80 BYTEs    ASCIZ filename
  2964.  5Fh    BYTE    1/8 inch page length
  2965.         if page length below set to 01h through 7Fh, this value
  2966.           specifies additional 1/8 inch increments to page length
  2967.  60h    BYTE    page length
  2968.         00h = 11 inches
  2969.         01h to 7Fh = page length is this number of inches plus value of
  2970.               1/8 inch field above
  2971.         80h to FEh reserved
  2972.         FFh = ASCII pages ending with formfeed
  2973.  61h 31 BYTEs    reserved (zeros)
  2974. --------F-2FCB11-----------------------------
  2975. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  2976.     AX = CB11h
  2977.     DL = queue to get status of
  2978.         00h task queue
  2979.         01h receive queue
  2980.         02h log queue
  2981.         03h send events (v1.2+)
  2982.         04h receive events (v1.2+)
  2983. Return: AX >= 0     total number of changes made to queue, modulo 32768
  2984.         BX = number of control files currently in queue
  2985.         CX = number of received files (zero for task and log queues)
  2986.     AX < 0    error code (see #2720)
  2987. SeeAlso: AX=CB12h
  2988. --------F-2FCB11DL03-------------------------
  2989. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  2990.     AX = CB11h
  2991.     DL = 03h
  2992. Return: AX = number of successful sends since resident manager started
  2993.     BX = number of unsuccessful sends, including warnings
  2994. SeeAlso: AX=CB11h/DL=04h
  2995. --------F-2FCB11DL04-------------------------
  2996. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  2997.     AX = CB11h
  2998.     DL = 04h
  2999. Return: AX = number of received file events since resident manager started
  3000.     BX = number of received FAX events
  3001. SeeAlso: AX=CB11h/DL=03h
  3002. --------F-2FCB12-----------------------------
  3003. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  3004.     AX = CB12h
  3005.     DS:DX -> 128-byte status buffer (see #2726,#2728)
  3006. Return: AX = 0000h successful
  3007.         DS:DX buffer filled with hardware-dependent status information
  3008.        < 0       error code (see #2720)
  3009. SeeAlso: AX=CB10h,AX=CB11h
  3010.  
  3011. Format of status buffer for Intel Connection CoProcessor:
  3012. Offset    Size    Description    (Table 2726)
  3013.  00h    BYTE    Connection CoProcessor connection status flags (see #2729)
  3014.  01h    BYTE    number of kilobytes of free buffer space
  3015.  02h    BYTE    page buffer status
  3016.         bit 7: Connection CoProcessor has documents to send
  3017.         bits 6-0: number of pages in buffer
  3018.  03h    BYTE    number of retries left for dialing number
  3019.  04h    BYTE    page number to retransmit
  3020.  05h    BYTE    communications status (see #2730)
  3021.  06h    BYTE    baud rate (see #2727)
  3022.  07h  3 BYTEs    reserved
  3023.  0Ah    BYTE    Connection CoProcessor hardware status (see #2731)
  3024.  0Bh    BYTE    Connection CoProcessor switch states (see #2732)
  3025.  0Ch    BYTE    communications flags (see #2733)
  3026.  0Dh    BYTE    reserved
  3027.  0Eh    WORD    error count (only valid while busy, reset when idle)
  3028.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  3029.  14h    BYTE    'A' if Connection CoProcessor board present
  3030.  15h  9 BYTEs    reserved
  3031.  1Eh 21 BYTEs    ASCIZ CCITT identification
  3032.  33h 77 BYTEs    reserved
  3033. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  3034.       by examining the byte at offset 14h
  3035.  
  3036. Bitfields for Connection CoProcessor baud rate:
  3037. Bit(s)    Description    (Table 2727)
  3038.  7    reserved
  3039.  6-4    baud rate
  3040.     000 = 300 baud    (V.21 SDLC or HDLC mode)
  3041.     100 = 2400 baud (V.27 ter)
  3042.     101 = 4800 baud (V.27 ter)
  3043.     110 = 7200 baud (V.29)
  3044.     111 = 9600 baud (V.29)
  3045.  3-0    reserved, should be 0110
  3046.  
  3047. Format of status buffer for Intel SatisFAXtion board:
  3048. Offset    Size    Description    (Table 2728)
  3049.  00h    BYTE    SatisFAXtion connection status flags (see #2734)
  3050.  01h    BYTE    SatisFAXtion board state (see #2735)
  3051.  02h    BYTE    number of KB free in buffer
  3052.  03h    BYTE    number of pages or files in buffer
  3053.  04h    BYTE    number of redials remaining on current number
  3054.  05h    BYTE    FAX page number to retransmit
  3055.  06h    BYTE    current page/file in block transfer
  3056.  07h    BYTE    number of rings received (only if auto-answer enabled)
  3057.  08h    WORD    error count
  3058.  0Ah    DWORD    length of file being transferred
  3059.  0Eh  6 BYTEs    reserved
  3060.  14h    BYTE    'B' if SatisFAXtion board present
  3061.  15h 13 BYTEs    ASCIZ transfer agent name
  3062.  22h  5 BYTEs    ASCIZ transfer agent version number
  3063.  27h 13 BYTEs    ASCIZ resident loader name
  3064.  34h  5 BYTEs    ASCIZ resident loader version number
  3065.  39h 21 BYTEs    ASCIZ remote CSID
  3066.  4Eh 13 BYTEs    ASCIZ resident manager name
  3067.  5Bh  5 BYTEs    ASCIZ resident manager version number
  3068.  60h 32 BYTEs    reserved
  3069. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  3070.       by examining the byte at offset 14h
  3071.  
  3072. Bitfields for Connection CoProcessor connection status flags:
  3073. Bit(s)    Description    (Table 2729)
  3074.  7    hardware busy sending or receiving
  3075.  6    last page of data
  3076.  5    no data on current page
  3077.  4    retransmit request for current page being transmitted
  3078.  3    NSF (nonstandard file) mode active
  3079.  2-0    reserved
  3080.  
  3081. Bitfields for communications status:
  3082. Bit(s)    Description    (Table 2730)
  3083.  7    originating call
  3084.  6    FAX message to be sent
  3085.  5    on line
  3086.  4    ring detected and receive enabled
  3087.  3    buffer dumped on receive
  3088.  2-0    hardware sequence state
  3089.     000 idle
  3090.     001 dial
  3091.     010 answer
  3092.     011 transmit
  3093.     100 receive
  3094.     101 pre-message
  3095.     110 post-message
  3096.     111 disconnect
  3097.  
  3098. Bitfields for Connection CoProcessor hardware status:
  3099. Bit(s)    Description    (Table 2731)
  3100.  7    modem option installed
  3101.  6    Connection CoProcessor has control of DAA (not latched)
  3102.  5    on line (not latched)
  3103.  4    ring detected (not latched)
  3104.  3    data in command buffer (not latched)
  3105.  2    set if using DMA channel 1, clear if using DMA channel 3
  3106.  1    line length compensation 1 set (not latched)
  3107.  0    line length compensation 0 set (not latched)
  3108.  
  3109. Bitfields for Connection CoProcessor switch states:
  3110. Bit(s)    Description    (Table 2732)
  3111.  7    reserved
  3112.  6    unused
  3113.  5    spare switch open
  3114.  4    FAX ADR1 switch open
  3115.  3    FAX ADR0 switch open
  3116.  2    alternate interrupt switch open
  3117.  1    COM SEL 1 switch open
  3118.  0    COM SEL 0 switch open
  3119. Note:    valid combinations of 0-2 are
  3120.     000  COM2 IRQ3 IObase 2F8h
  3121.     001  COM1 IRQ4 IObase 3F8h
  3122.     010  COM4 IRQ3 IObase 2E8h
  3123.     011  COM3 IRQ4 IObase 3E8h
  3124.     110  COM4 IRQ2 IObase 2E8h
  3125.     111  COM3 IRQ5 IObase 3E8h
  3126.  
  3127. Bitfields for communications flags:
  3128. Bit(s)    Description    (Table 2733)
  3129.  7    reserved
  3130.  6    auxiliary relay forced ON
  3131.  5    modem select relay forced ON
  3132.  4    offhook relay forced ON
  3133.  3    9600 bps enabled
  3134.  2    7200 bps enabled
  3135.  1    4800 bps enabled
  3136.  0    2400 bps enabled
  3137.  
  3138. Bitfields for SatisFAXtion connection status flags:
  3139. Bit(s)    Description    (Table 2734)
  3140.  7    busy in T.30 CCITT fax protocol
  3141.  6    data on current page/file (only used for block xfers)
  3142.  5    retransmission of last page requested
  3143.  4    in file transfer mode
  3144.  3    data in buffer
  3145.  2    data buffer dumped on receive
  3146.  1    200x100 dpi resolution instead of 200x200 dpi
  3147.  0    data modem in use, FAX image modem not available
  3148.  
  3149. Bitfields for SatisFAXtion board state:
  3150. Bit(s)    Description    (Table 2735)
  3151.  7    reserved
  3152.  6    handset jack active, data and FAX modems not available
  3153.  5-3    current rate
  3154.     000  300 bps (V.21 HDLC)
  3155.     100 2400 bps (V.27 ter)
  3156.     101 4800 bps (V.27 ter)
  3157.     110 7200 bps (V.29)
  3158.     111 9600 bps (V.29)
  3159.  2-0    T.30 CCITT protocol state
  3160.     000 idle
  3161.     001 dialing
  3162.     010 answering
  3163.     011 transmitting
  3164.     100 receiving
  3165.     101 pre-message
  3166.     110 post-message
  3167.     111 disconnect
  3168. --------F-2FCB13DL00-------------------------
  3169. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  3170.     AX = CB13h
  3171.     DL = 00h
  3172. Return: AX = 0040h in progress
  3173.        >= 0       passed
  3174.        < 0       hardware-dependent failure code (see #2736,#2737)
  3175. SeeAlso: AX=CB13h/DL=01h
  3176.  
  3177. Bitfields for Intel Connection CoProcessor failure codes:
  3178. Bit(s)    Description    (Table 2736)
  3179.  3    9600 bps FAX modem module failed
  3180.  2    SDLC chip failed
  3181.  1    RAM failed
  3182.  0    ROM checksum failed
  3183.  
  3184. Bitfields for Intel SatisFAXtion failure codes:
  3185. Bit(s)    Description    (Table 2737)
  3186.  1    2400 bps data modem failed
  3187.  0    9600 bps FAX modem failed
  3188. --------F-2FCB13DL01-------------------------
  3189. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  3190.     AX = CB13h
  3191.     DL = 01h
  3192. Return: AX = 0000h successfully started
  3193.     AX < 0       error code (see #2720)
  3194. SeeAlso: AX=CB13h/DL=00h
  3195. --------F-2FCB14-----------------------------
  3196. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  3197.     AX = CB14h
  3198.     BX = event handle
  3199.     CX = receive file number
  3200.         0001h first received file
  3201.         N      Nth received file
  3202.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  3203. Return: AX = 0000h successful
  3204.     AX < 0       error code (see #2720)
  3205. --------F-2FCB15-----------------------------
  3206. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  3207.     AX = CB15h
  3208.     DS:DX -> variable-length data area (see #2738)
  3209. Return: AX >= 0 event handle
  3210.     AX < 0    error code (see #2720)
  3211. SeeAlso: AX=CB01h
  3212.  
  3213. Format of CAS file submission data area:
  3214. Offset    Size    Description    (Table 2738)
  3215.  00h    BYTE    transfer type
  3216.         00h = 200x200 dpi, fax mode
  3217.         01h = 100x200 dpi, fax mode
  3218.         02h = file transfer mode
  3219.         03h to 7Fh reserved
  3220.  01h    BYTE    text size
  3221.         00h = 80 columns
  3222.         01h = 132 columns
  3223.         02h to 7Fh reserved
  3224.  02h    WORD    time to send (DOS packed time, see #1351 at INT 21/AX=5700h)
  3225.  04h    WORD    date to send (DOS packed date, see #1352 at INT 21/AX=5700h)
  3226.  06h 32 BYTEs    ASCIZ destination name
  3227.  26h 80 BYTEs    ASCIZ name of file to send
  3228.  76h 47 BYTEs    ASCIZ phone number to dial
  3229.  A5h 64 BYTEs    ASCIZ application-specific tag string
  3230.  E5h    BYTE    reserved (00h)
  3231.  E6h    BYTE    cover page
  3232.         00h don't send cover page
  3233.         01h send cover page
  3234.         02h to 7Fh reserved
  3235.  E7h 23 BYTEs    reserved (zeros)
  3236.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  3237.         set to 01h)
  3238. --------F-2FCB16BX1234-----------------------
  3239. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  3240.     AX = CB16h
  3241.     BX = 1234h
  3242.     CX = 5678h
  3243.     DX = 9ABCh
  3244. Return: AX = 0000h successful
  3245.     AX < 0       error code
  3246. Note:    the METZ XpressFax CASMGR ignores the values in BX,CX, and DX
  3247. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h
  3248. Index:    uninstall;CAS Manager
  3249. --------F-2FCB17-----------------------------
  3250. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  3251.     AX = CB17h
  3252.     BX = event handle
  3253.     CL = cover page status
  3254.         00h not read
  3255.         01h read by user
  3256. Return: AX = 0000h successful
  3257.     AX < 0       error code
  3258. --------F-2FCB80-----------------------------
  3259. INT 2F - Intel SatisFAXtion CASMGR - ???
  3260.     AX = CB80h
  3261.     ???
  3262. Return: ???
  3263. --------F-2FCB81-----------------------------
  3264. INT 2F - Intel SatisFAXtion CASMGR - ???
  3265.     AX = CB81h
  3266.     ???
  3267. Return: ???
  3268. --------F-2FCB82-----------------------------
  3269. INT 2F - Intel SatisFAXtion CASMGR - ???
  3270.     AX = CB82h
  3271.     ???
  3272. Return: ???
  3273. --------F-2FCBDCBL56-------------------------
  3274. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  3275.     AX = CBDCh
  3276.     BL = 56h
  3277.     BH = line number (starts with 1)
  3278.     CX:DX -> 32-byte status buffer or 80 character string
  3279. Return: AX = number of cards installed, or FFFFh on error
  3280. Program: Comwave manufacturers the Microfax line of fax cards which are a
  3281.       high-performance multi-card FAX solution for OEMs.
  3282. Note:    defaults to AH=CBh but can be changed
  3283. SeeAlso: AX=CBDDh,AX=DA00h
  3284. --------F-2FCBDDBL56-------------------------
  3285. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  3286.     AX = CBDDh
  3287.     BL = 56h
  3288.     BH = ?
  3289.     CX:DX -> command to execute
  3290. Return: AX = status
  3291.         0000h success
  3292.         FFFFh on error
  3293. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  3294. --------c-2FCC--SI5453-----------------------
  3295. INT 2F U - PC-Kwik Programs - API
  3296.     AH = CCh
  3297.     SI = 5453h or 7473h
  3298.     AL = function number (at least 00h,01h,04h,05h,07h,80h)
  3299.     DL = program identifier (see #2739)
  3300. Return: SI = 7473h
  3301.     other registers vary by function
  3302. Note:    Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
  3303.       thus supports this call
  3304. SeeAlso: INT 21/AH=2Bh/CX=4358h
  3305.  
  3306. (Table 2739)
  3307. Values for PC-Kwik program identifier:
  3308.  00h    all installed PowerPak programs
  3309.  01h    SUPERPCK/SUPER/QCACHE v4.00+ (disk cache)
  3310.  02h    PCKSPL (print spooler)
  3311.  04h    PCKSCRN (screen accelerator)
  3312.  05h    PCKKEY (keyboard enhancer)
  3313.  06h    PCKRAMD (RAM disk)
  3314.  08h    PCKWIK.SYS
  3315.  10h    PCKCDROM (CD-ROM support for SUPERPCK)
  3316. --------N-2FCC00-----------------------------
  3317. INT 2F - Tsoft NFSDRVR - INSTALLATION CHECK
  3318.     AX = CC00h
  3319. Return: AX = 7777h
  3320.     BX = ???
  3321.     CX = ???
  3322.     DX = ???
  3323.     ES = data segment of resident portion
  3324. SeeAlso: AX=CC01h,AX=CC06h
  3325. --------N-2FCC01-----------------------------
  3326. INT 2F - Tsoft NFSDRVR - ???
  3327.     AX = CC01h
  3328.     ???
  3329. Return: ???
  3330. SeeAlso: AX=CC00h
  3331. --------N-2FCC02-----------------------------
  3332. INT 2F - Tsoft NFSDRVR - ???
  3333.     AX = CC02h
  3334.     ???
  3335. Return: ???
  3336. SeeAlso: AX=CC00h
  3337. --------N-2FCC03-----------------------------
  3338. INT 2F - Tsoft NFSDRVR - ???
  3339.     AX = CC03h
  3340.     ???
  3341. Return: ???
  3342. SeeAlso: AX=CC00h
  3343. --------N-2FCC04-----------------------------
  3344. INT 2F - Tsoft NFSDRVR - ???
  3345.     AX = CC04h
  3346.     ???
  3347. Return: ???
  3348. SeeAlso: AX=CC00h
  3349. --------N-2FCC05-----------------------------
  3350. INT 2F - Tsoft NFSDRVR - ???
  3351.     AX = CC05h
  3352.     ???
  3353. Return: ???
  3354. SeeAlso: AX=CC00h
  3355. --------N-2FCC06-----------------------------
  3356. INT 2F - Tsoft NFSDRVR - ???
  3357.     AX = CC06h
  3358.     ???
  3359. Return: ???
  3360. SeeAlso: AX=CC00h
  3361. --------P-2FCD00-----------------------------
  3362. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  3363.     AX = CD00h
  3364. Return: AL = state
  3365.         00h not installed, OK to install
  3366.         01h not installed, not OK to install
  3367.         FFh installed
  3368. SeeAlso: AX=CD02h"Image"
  3369. --------P-2FCD00-----------------------------
  3370. INT 2F - LaserPort Interface - INSTALLATION CHECK
  3371.     AX = CD00h
  3372. Return: AL = status
  3373.         FFh installed
  3374. SeeAlso: AX=CD0Fh"LaserPort"
  3375. --------U-2FCD00-----------------------------
  3376. INT 2F - SWELL.EXE - INSTALLATION CHECK
  3377.     AX = CD00h
  3378. Return: AX = 00FFh installed
  3379.         BH = major version
  3380.         BL = minor version
  3381. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a
  3382.       child process with INT 21/AH=4Bh
  3383. --------s-2FCD00BX464F-----------------------
  3384. INT 2F - Forte/Gravis ULTRAMID - INSTALLATION CHECK
  3385.     AX = CD00h
  3386.     BX = 464Fh ('FO')
  3387.     CX = 5254h ('RT')
  3388.     DX = 4520h ('E ')
  3389. Return: AL = FFh if installed
  3390.         BX = 4155h ('AU')
  3391.         CX = 4449h ('DI')
  3392.         DX = 4F20h ('O ')
  3393.         ES:SI -> program ID string
  3394. Program: ULTRAMID is a MIDI driver for the Gravis UltraSound which allows use
  3395.       of AIL drivers with other software
  3396. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3397. SeeAlso: INT 21/AX=FD12h,AX=CD00h/DX=4957h
  3398. --------s-2FCD00DX4957-----------------------
  3399. INT 2F R - InterWave Game API - INSTALLATION CHECK
  3400.     AX = CD00h
  3401.     DX = 4957h ('IW')
  3402.     SI = 5645h ('VE')
  3403. Return: AL = FFh if installed
  3404.         DX = 4554h ('ET')
  3405.         SI = 454Bh ('EK')
  3406. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3407. SeeAlso: AX=CD00h/BX=464Fh,AX=CD01h"InterWave",AX=CD21h"InterWave"
  3408. SeeAlso: AX=CD80h"InterWave"
  3409. --------P-2FCD01-----------------------------
  3410. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  3411.     AX = CD01h
  3412.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  3413. Return: AL = status
  3414.         00h successful
  3415.         CX:BX -> internal character device name
  3416.         80h error
  3417. --------U-2FCD01-----------------------------
  3418. INT 2F - SWELL.EXE - SUSPEND ONCE
  3419.     AX = CD01h
  3420. Return: AX = 0000h
  3421. SeeAlso: AX=CD02h"SWELL"
  3422. --------s-2FCD01BX0000-----------------------
  3423. INT 2F R - InterWave Game API - GET NUMBER OF INTERWAVE PROGRAMS / PROGRAM ID
  3424.     AX = CD01h
  3425.     BX = 0000h
  3426. Return: BX = number of programs currently installed on the Game API
  3427. Desc:    get the number of programs supporting the InterWave Game API which are
  3428.       currently installed in memory, which also forms the next program ID
  3429.       number if the caller wishes to go resident on the API
  3430. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3431. Notes:    the first program to install on the IW Game API must use ID 00h
  3432.     the AMD-recommended implementation is for the handler to increment
  3433.       BX and chain to the previous handler (if any), but this will fail
  3434.       if TSRs are unloaded out-of-order
  3435. SeeAlso: AX=CD00h"InterWave",AX=CD02h"InterWave",AX=CD03h"InterWave"
  3436. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3437. --------P-2FCD02-----------------------------
  3438. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  3439.     AX = CD02h
  3440. Return: AL = status
  3441.         00h/01h successful
  3442.         BH = major version number (BCD)
  3443.         BL = minor version number (BCD)
  3444.         80h error
  3445. Note:    if return AL = 01h, the IPI supports network redirection
  3446. SeeAlso: AX=CD00h"Image"
  3447. --------U-2FCD02-----------------------------
  3448. INT 2F - SWELL.EXE - SUSPEND
  3449.     AX = CD02h
  3450. Return: AX = 0000h
  3451. SeeAlso: AX=CD03h"SWELL"
  3452. --------s-2FCD02-----------------------------
  3453. INT 2F R - InterWave Game API - GET PROGRAM STATUS AND INFORMATION
  3454.     AX = CD02h
  3455.     BX = program identifier
  3456. Return: CX = program status
  3457.         bit 0: using synthesizer
  3458.         bit 1: using Codec
  3459.         bit 2: supports at least one Game Device (see AX=CD21h,AX=CD22h)
  3460.     BX = supported API version (BCD, BH=major, BL=minor) if CX bit 2 set
  3461.     ES:DI -> ASCIZ identification string
  3462. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3463. Note:    ordinarily, an application will loop through all valid program
  3464.       identifiers (as returned by AX=CD01h); if any of the installed
  3465.       programs conflicts with the use the caller wishes to make of the
  3466.       InterWave chip, it should be disabled with AX=CD03h first
  3467. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD03h"InterWave"
  3468. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3469. --------P-2FCD03-----------------------------
  3470. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  3471.     AX = CD03h
  3472.     BX = scan line
  3473.     CX = requested density in dots per inch (300, 600, or 1200)
  3474. Return: AL = status (see also AX=CD04h"Image")
  3475.         00h successful
  3476.         CX = density at which scan line was mapped
  3477.         ES:DI -> start of scan line
  3478.         80h unsuccessful
  3479.         81h scan line out of range
  3480.         82h unsupported scan line density
  3481.         83h out of memory
  3482. SeeAlso: AX=CD04h"Image"
  3483. --------U-2FCD03-----------------------------
  3484. INT 2F - SWELL.EXE - ACTIVATE
  3485.     AX = CD03h
  3486. Return: AX = 0000h
  3487. SeeAlso: AX=CD02h"SWELL"
  3488. --------s-2FCD03-----------------------------
  3489. INT 2F R - InterWave Game API - SUSPEND PROGRAM
  3490.     AX = CD03h
  3491.     BX = installed program identifier
  3492.     CX = InterWave section to be released
  3493.         0000h all
  3494.         0001h synthesizer
  3495.         0002h Codec
  3496. Return: AL = status
  3497.         00h successful
  3498.         BX = base port
  3499.         CL = IRQ
  3500.         CH = DMA channel (Codec only)
  3501.         else failed
  3502. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  3503. SeeAlso: AX=CD04h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3504. --------P-2FCD04-----------------------------
  3505. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  3506.     AX = CD04h
  3507.     CX:BX -> structure (see #2741)
  3508. Return: AL = status (see #2740)
  3509. SeeAlso: AX=CD03h"Image"
  3510.  
  3511. (Table 2740)
  3512. Values for IPI function status:
  3513.  00h    successful
  3514.  80h    unsuccessful
  3515.  81h    scan line out of range
  3516.  82h    unsupported scan line density
  3517.  83h    out of memory
  3518.  84h    unrecognized source
  3519.  85h    initialization error
  3520.  
  3521. Format of structure:
  3522. Offset    Size    Description    (Table 2741)
  3523.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3524.  02h    DWORD    pointer to image data
  3525.  06h    WORD    scan line on which to place
  3526.  08h    WORD    bit offset from start of scan line at which to place
  3527.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  3528.  0Ch    WORD    width in bits of data
  3529.  0Eh    WORD    source logical page number
  3530.  10h    WORD    source handle (only if source in expanded memory)
  3531.  12h    WORD    source offset (only if source in expanded memory)
  3532. --------U-2FCD04-----------------------------
  3533. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  3534.     AX = CD04h
  3535. Return: AX = 0000h
  3536. SeeAlso: AX=CD05h"SWELL"
  3537. --------s-2FCD04-----------------------------
  3538. INT 2F R - InterWave Game API - WAKE PROGRAM
  3539.     AX = CD04h
  3540.     BX = installed program identifier
  3541. Return: AL = status
  3542.         00h successful
  3543.         else failed
  3544. Note:    this function should only be called after the program has been
  3545.       suspended with AX=CD03h
  3546. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD03h"InterWave"
  3547. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3548. SeeAlso: INT 7E/AL=84h"IWSBSDRV"
  3549. --------P-2FCD05-----------------------------
  3550. INT 2F - Intel Image Processing Interface - PRINT PAGE
  3551.     AX = CD05h
  3552. Return: AL = status (00h,80h) (see #2740)
  3553. Note:    page image is retained, so multiple calls will print multiple copies of
  3554.       the page
  3555. SeeAlso: AX=CD06h"Image"
  3556. --------U-2FCD05-----------------------------
  3557. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  3558.     AX = CD05h
  3559. Return: AX = 0000h
  3560. SeeAlso: AX=CD04h"SWELL"
  3561. --------s-2FCD05-----------------------------
  3562. INT 2F R - InterWave Game API - UNINSTALL RESIDENT DEVICE DRIVER
  3563.     AX = CD05h
  3564.     BX = installed program identifier
  3565. Return: AL = status
  3566.         00h successful
  3567.         else failed
  3568. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  3569. SeeAlso: AX=CD03h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3570. --------P-2FCD06-----------------------------
  3571. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  3572.     AX = CD06h
  3573. Return: AL = status (00h,80h) (see #2740)
  3574. Note:    palette is reset to default
  3575. SeeAlso: AX=CD09h"Image"
  3576. --------U-2FCD06-----------------------------
  3577. INT 2F - SWELL.EXE - UNINSTALL
  3578.     AX = CD06h
  3579. Return: AX = status
  3580.         0000h uninstalled
  3581.         8002h programs still swapped, not uninstalled
  3582. --------P-2FCD07-----------------------------
  3583. INT 2F - Intel Image Processing Interface - reserved
  3584.     AX = CD07h
  3585. SeeAlso: AX=CD00h"Image"
  3586. --------U-2FCD07-----------------------------
  3587. INT 2F - SWELL.EXE - GET INFO
  3588.     AX = CD07h
  3589.     ES:BX -> 32-byte buffer for info (see #2742)
  3590. Return: AX = status
  3591.         0000h successful
  3592.         ES:BX buffer filled
  3593.         8001h buffer wrong size
  3594.  
  3595. Format of SWELL.EXE info buffer:
  3596. Offset    Size    Description    (Table 2742)
  3597.  00h    WORD    20h  (total size of buffer)
  3598.  02h    BYTE    suspend-once mode active if nonzero
  3599.  03h    BYTE    00h active, 01h suspended
  3600.  04h    BYTE    00h quiet, 01h verbose
  3601.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  3602.  06h 26 BYTEs    unused???
  3603. --------P-2FCD08-----------------------------
  3604. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  3605.     AX = CD08h
  3606.     CX:BX -> structure (see #2743)
  3607. Return: AL = status (00h,80h-85h) (see #2740)
  3608. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  3609.  
  3610. Format of IPI screen image structure:
  3611. Offset    Size    Description    (Table 2743)
  3612.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3613.  02h    DWORD    pointer to image data
  3614.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  3615.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  3616.  0Ah    WORD    left cropping (currently must be zero)
  3617.  0Ch    WORD    top cropping (currently must be zero)
  3618.  0Eh    WORD    width (currently must be 8000h)
  3619.  10h    WORD    height (currently must be 8000h)
  3620.  12h    WORD    horizontal size of image in 1200 dpi units
  3621.  14h    WORD    vertical size of image in 1200 dpi units
  3622.  16h    WORD    aspect ratio (currently reserved)
  3623.  18h    WORD    initialization flag (if 01h, initialization is performed)
  3624.  1Ah    WORD    pixels per line of source data
  3625.  1Ch    WORD    number of scan lines in source data
  3626.  1Eh    WORD    number of scan lines in packet
  3627.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  3628.  22h    WORD    pixels per byte (1,2,4, or 8)
  3629.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  3630.  26h    WORD    source page number (if in expanded memory)
  3631.  28h    WORD    source handle (if in expanded memory)
  3632.  2Ah    WORD    source offset (if in expanded memory)
  3633. --------U-2FCD08-----------------------------
  3634. INT 2F - SWELL.EXE - UNUSED
  3635.     AX = CD08h
  3636. Return: AX = FFFFh (error)
  3637. --------P-2FCD09-----------------------------
  3638. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  3639.     AX = CD09h
  3640.     CX:BX -> structure (see #2744)
  3641. Return: AL = status (00h,80h) (see #2740)
  3642. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  3643.  
  3644. Format of IPI load screen structure:
  3645. Offset    Size    Description    (Table 2744)
  3646.  00h    BYTE    style
  3647.         44h ('D') diamond style
  3648.         4Ch ('L') line style
  3649.  01h    BYTE    reserved (00h)
  3650.  02h    WORD    frequency in lines per inch [sic]
  3651.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  3652.  04h    WORD    screen angle in degrees (-360 to 360)
  3653.         currently coerced to nearest of -45, 0, 45, or 90
  3654. --------U-2FCD09-----------------------------
  3655. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  3656.     AX = CD09h
  3657. Return: AX = 0000h
  3658. SeeAlso: AX=CD0Ah"SWELL"
  3659. --------P-2FCD0A-----------------------------
  3660. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  3661.     AX = CD0Ah
  3662.     CX:BX -> palette structure (see #2745)
  3663. Return: AL = status (00h,80h) (see #2740)
  3664. SeeAlso: AX=CD09h"Image Processing"
  3665.  
  3666. Format of IPI palette structure:
  3667. Offset    Size    Description    (Table 2745)
  3668.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  3669.  01h    2**N    palette translation values, one per possible pixel value
  3670. --------U-2FCD0A-----------------------------
  3671. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  3672.     AX = CD0Ah
  3673. Return: AX = 0000h
  3674. SeeAlso: AX=CD09h"SWELL"
  3675. --------P-2FCD0F-----------------------------
  3676. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  3677.     AX = CD0Fh
  3678.     BL = function
  3679.         01h enable
  3680.         02h disable
  3681.         03h ???
  3682. Return: AL = status
  3683.         00h success
  3684. SeeAlso: AX=CD00h"LaserPort"
  3685. --------s-2FCD21-----------------------------
  3686. INT 2F R - InterWave Game API - OPEN GAME DEVICE
  3687.     AX = CD21h
  3688.     BX = installed program identifier
  3689.     ES:DI -> ASCIZ device name
  3690.         "MIDISIMPLE"
  3691.         "MIDICOMPLEX"
  3692.         "DIRECTCODEC"
  3693. Return: AL = status
  3694.         00h successful
  3695.         DX = device handle
  3696.         ---MIDISIMPLE and MIDICOMPLEX---
  3697.         BX = real-mode interrupt number (see #2746,#2747)
  3698.         ---DIRECTCODEC---
  3699.         BX = base port
  3700.         CL = IRQ
  3701.         CH = DMA channel (04h = no DMA)
  3702.         SI = size of FIFO in bytes (0000h = use DMA)
  3703.         nonzero failed (not supported or already in use)
  3704.     AH may be destroyed
  3705. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3706. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  3707. SeeAlso: AX=CD05h"InterWave",AX=CD22h"InterWave",AX=CD80h"InterWave"
  3708.  
  3709. (Table 2746)
  3710. Call MIDISIMPLE with:
  3711.     EAX = function number
  3712.         0001h MIDI byte out
  3713.         BL = MIDI byte to send
  3714.         0002h MIDI string out
  3715.         ECX = length of MIDI string in bytes
  3716.         ES:EDI -> MIDI string to send (should not include timing info)
  3717.     DX = device handle
  3718.     INT xxh (as returned by AX=CD21h)
  3719. Return: EAX = status
  3720.         00000000h if successful
  3721.         FFFFFFFFh on error (bad handle)
  3722. SeeAlso: #2747,INT 7E/AX=0001h"IWSBSDRV",INT 7E/AX=0002h"IWSBSDRV"
  3723.  
  3724. (Table 2747)
  3725. Call MIDICOMPLEX with:
  3726.     EAX = function number
  3727.         ??? (specification is still in development)
  3728.     DX = device handle
  3729.     INT xxh (as returned by AX=CD21h)
  3730. Return: EAX = status
  3731.         00000000h if successful
  3732.         FFFFFFFFh on error (bad handle)
  3733. SeeAlso: #2746
  3734. --------s-2FCD22-----------------------------
  3735. INT 2F R - InterWave Game API - CLOSE GAME DEVICE
  3736.     AX = CD22h
  3737.     BX = installed program identifier
  3738.     DX = device handle (from AX=CD21h)
  3739. Return: AL = status
  3740.         00h successful
  3741.         FFh inavlid handle or device is not open
  3742. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3743. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  3744. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD80h"InterWave"
  3745. --------s-2FCD80-----------------------------
  3746. INT 2F RC - InterWave Game API - MIXER SETTINGS CHANGED BROADCAST
  3747.     AX = CD80h
  3748. Return: nothing
  3749. Desc:    called by an application controlling the InterWave chip's mixer
  3750.       whenever the mixer's settings are changed
  3751. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  3752. Note:    when an application intercepts this function call, it must read the
  3753.       new mixer settings from the InterWave chip
  3754. SeeAlso: AX=CD00h"InterWave",AX=CD01h"InterWave",AX=CD02h"InterWave"
  3755. SeeAlso: AX=CD05h"InterWave",AX=CD21h"InterWave",AX=CD22h"InterWave"
  3756. --------K-2FCF00-----------------------------
  3757. INT 2F - TEMPLEXX 1.0 - INSTALLATION CHECK
  3758.     AX = CF00h
  3759. Return: AL = FFh if installed
  3760. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  3761. Note:    values in AL other than 00h cause an immediate return without modifying
  3762.       any registers
  3763. --------G-2FD000-----------------------------
  3764. INT 2F C - MDEBUG display driver - GET DRIVER STATUS
  3765.     AX = D000h
  3766. Return: CF set on error
  3767.         all other registers must be unchanged)
  3768.     CF clear if successful
  3769.         AL = FFh
  3770.         AH = driver semaphor
  3771.         00h driver is not active
  3772.         01h driver is active
  3773.         BX = CS of the driver
  3774.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  3775.         DL = buffer semaphor
  3776.         00h driver is not pending
  3777.         01h driver is pending between functions 02h and 03h
  3778.         DH = show semaphor
  3779.         00h driver is not pending
  3780.         01h driver is pending between functions 04h and 05h
  3781. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  3782.       Schemmer, including a memory monitor, an interpreter and a
  3783.       disassembler
  3784. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3785. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  3786.       FFh; the default is D0h for the display driver and D1h for the
  3787.       command driver (call INT 60/AH=00h"MDEBUG" for the actual multiplex
  3788.       numbers used)
  3789.     this function MUST be reentrant, as MDEBUG calls it after every popup
  3790.       before any other actions.  The handler should not change any
  3791.       registers if the display is in an unsupported mode or in a mode
  3792.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  3793.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  3794.       not call any of the other functions for this popup session.
  3795.     MDEBUG will not call the other functions if the returned version is
  3796.       less than the actual version of MDEBUG.
  3797.     if the driver is reentrant, DL and DH should be 00h
  3798. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  3799. --------M-2FD000-----------------------------
  3800. INT 2F - ZWmous - INSTALLATION CHECK
  3801.     AX = D000h
  3802. Return: AX = 5A57h ("ZW") if installed
  3803.         BX = segment of resident code
  3804. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  3805.       with many non-mouse applications by entering the letter under the
  3806.       mouse cursor on button presses
  3807. SeeAlso: INT 33/AX=0003h
  3808. --------N-2FD000-----------------------------
  3809. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  3810.     AX = D000h
  3811. Return: AL = FFh if CD/Networker TSR is loaded
  3812.     BX = 4D44h ("MD") signature
  3813.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  3814.     DX = bitmap identifying all loaded CD/Networker TSRs.
  3815. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  3816.       resident redirector TSR and a transient program that controls the
  3817.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  3818.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  3819. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  3820. --------G-2FD001-----------------------------
  3821. INT 2F C - MDEBUG display driver - INITIALIZE DRIVER
  3822.     AX = D001h
  3823. Return: CF set on error
  3824.     AL = driver semaphor
  3825.     AH = buffer semaphor
  3826. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3827. Notes:    MDEBUG calls this function after every successful call of the function
  3828.       00h. The function should reset all internal data and the status of
  3829.       the driver. If this function returns an error, MDEBUG will not call
  3830.       the other functions in this popup session.
  3831.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  3832.       FFh; the default is D0h for the display driver and D1h for the
  3833.       command driver
  3834. SeeAlso: AX=D000h
  3835. --------G-2FD002-----------------------------
  3836. INT 2F C - MDEBUG display driver - SAVE GRAPHIC DATA
  3837.     AX = D002h
  3838. Return: CF set on error
  3839.     CF clear if successful
  3840.         display memory saved and display switched to one of the text modes
  3841.           02h, 03h or 07h.
  3842. Note:    MDEBUG calls this function only once every popup session before
  3843.       displaying its windows.
  3844. SeeAlso: AX=D000h,AX=D003h
  3845. --------N-2FD002BX4D44-----------------------
  3846. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  3847.     AX = D002h
  3848.     BX = 4D44h
  3849.     DX = bitmap identifying one loaded CD/Networker TSR
  3850. Return: ES:DI -> data area owned by TSR
  3851. Note:    the format of the data area changes with each minor revision, so it
  3852.       cannot be counted on
  3853. SeeAlso: AX=D000h"Lotus"
  3854. --------G-2FD003-----------------------------
  3855. INT 2F C - MDEBUG display driver - RESTORE GRAPHIC DATA
  3856.     AX = D003h
  3857. Return: CF set on error
  3858.     CF clear if successful
  3859.         display restored to the mode it was in before calling AX=D002h and
  3860.           the display memory is restored
  3861. Note:    MDEBUG calls this function only once every popup session just before
  3862.      it exits to normal DOS.
  3863. SeeAlso: AX=D000h,AX=D002h
  3864. --------G-2FD004-----------------------------
  3865. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  3866.     AX = D004h
  3867. Return: CF set on error
  3868.     CF clear if successful
  3869.         display switched to mode it was in before calling AX=D002h and the
  3870.           display memory is restored
  3871. Note:    This function needn't save the display memory before changing it.
  3872. SeeAlso: AX=D000h,AX=D005h
  3873. --------G-2FD005-----------------------------
  3874. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  3875.     AX = D005h
  3876. Return: CF set on error
  3877.     CF clear if successful
  3878.         display restored to mode it was in before calling AX=D004h
  3879. Note:    This function needn't save or change the display memory
  3880. SeeAlso: AX=D000h,AX=D004h
  3881. --------G-2FD0-------------------------------
  3882. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  3883.     AH = D0h
  3884.     AL = 06h-7Fh
  3885. Note:    these functions are reserved for future use
  3886. --------G-2FD0-------------------------------
  3887. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  3888.     AH = D0h
  3889.     AL = 80h-FFh
  3890. Note:    these functions numbers are reserved for user defined features (e.g.
  3891.       communication between the transient und resident parts of the driver)
  3892. --------G-2FD100-----------------------------
  3893. INT 2F C - MDEBUG command driver - GET STATUS
  3894.     AX = D100h
  3895.     BX = version of MDEBUG (BH = major, BL = minor)
  3896.     CX = command driver counter
  3897. ---v1.60+---
  3898.     DS:SI -> MDEBUG identification table (see #2748)
  3899.     ES = segment of display memory used by MDEBUG
  3900.     DI = size of video mode used by MDEBUG
  3901.         (high byte = lines, low byte = columns)
  3902. Return: DL = FFh
  3903.     BX = version number of the driver if it is less than the version in BX,
  3904.           else unchanged
  3905.     CX incremented
  3906. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  3907.       Schemmer, including a memory monitor, an interpreter, and a
  3908.       disassembler
  3909. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  3910. Notes:    called by MDEBUG at start of popup session; if the version number
  3911.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  3912.       not call any of the other functions during this popup session
  3913.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  3914.       FFh; the default is D0h for the display driver and D1h for the
  3915.       command driver (call INT 60/AH=00h"MDEBUG" for the multiplex numbers
  3916.       actually used)
  3917.     this function must end with a far call to the old INT 2F handler after
  3918.       changing the registers
  3919.     this function MUST be reentrant
  3920.     command drivers must also declare the following data at the given
  3921.       offsets in the code segment
  3922.         100h  3 BYTEs    JMP-command in .COM-files
  3923.         103h    BYTE    NOP-command (90h)
  3924.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  3925.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  3926.                 each driver must have a unique name
  3927.     MDEBUG will pass every key and command to the command driver(s) before
  3928.       checking for a valid internal command
  3929. SeeAlso: AX=D000h,AX=D101h
  3930.  
  3931. Format of MDEBUG identification table:
  3932. Offset    Size    Description    (Table 2748)
  3933.  -2    WORD    entry offset
  3934.  00h    WORD    CS of MDEBUG
  3935.  02h    DWORD    old INT 08h vector
  3936.  06h    DWORD    old INT 09h vector
  3937.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  3938.  0Eh    BYTE    length of version string
  3939.  0Fh  N BYTEs    version string
  3940. --------G-2FD101-----------------------------
  3941. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  3942.     AX = D101h
  3943.     CX = command driver counter
  3944. Return: DL = status
  3945.         FFh if successful
  3946.         CX incremented
  3947.         else error: all registers unchanged
  3948. Note:    this function must end with a  far call to the old INT 2F handler after
  3949.       changing the registers
  3950.     this function must be reentrant
  3951. --------G-2FD102-----------------------------
  3952. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  3953.     AX = D102h
  3954.     BL = first character of the interpreter command
  3955.     BH = last character of the interpreter command (or blank)
  3956.     DS:SI -> parameter for the interpreter command as ASCIZ string
  3957.     DS:DI -> MDEBUG data structure (see #2750)
  3958. Return: AL = FFh
  3959.     CF set on error
  3960.         AH = error number (see #2749)
  3961.         DS:SI -> ASCIZ error message (max 30 characters) if AH=0Ch
  3962.     CF clear if successful
  3963.         AH = return code
  3964.         00h continue processing the command line
  3965.         01h leave MDEBUG popup session
  3966.         02h leave MDEBUG popup session and automatically popup again
  3967.               if the InDOS flag is zero
  3968.         03h not used (same as 00h)
  3969.         04h not used (same as 00h)
  3970.         05h put new command line into the input buffer,
  3971.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  3972.         06h process new command line
  3973.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  3974.            else unknown status, but continue processing commmand line
  3975. Note:    this function must end with a far call to the old INT 2F handler (with
  3976.       registers unchanged) if the driver does not support the interpreter
  3977.       command in BX.  Otherwise, the driver must not chain to the old
  3978.       INT 2F.
  3979.  
  3980. (Table 2749)
  3981. Values for MDEBUG error number:
  3982.  01h    syntax error
  3983.  02h    first shell of the command.com is activ
  3984.  03h    Esc pressed
  3985.  04h    break pressed
  3986.  05h    DOS is busy
  3987.  06h    command ended
  3988.  07h    division by zero
  3989.  08h    invalid display driver
  3990.  09h    invalid command driver
  3991.  0Ah    error 8 and 9
  3992.  0Bh    unknown error
  3993.  0Ch    new error
  3994.  else    unknown error
  3995.  
  3996. Format of MDEBUG data structure:
  3997. Offset    Size    Description    (Table 2750)
  3998.  00h    WORD    register SE
  3999.  02h    WORD    register OF
  4000.  04h    WORD    register FS
  4001.  06h    WORD    register FO
  4002.  08h    WORD    register AX
  4003.  0Ah    WORD    register BX
  4004.  0Ch    WORD    register CX
  4005.  0Eh    WORD    register DX
  4006.  10h    WORD    register SI
  4007.  12h    WORD    register DI
  4008.  14h    WORD    register DS
  4009.  16h    WORD    register ES
  4010.  18h    WORD    register BP
  4011.  1Ah    WORD    register SS
  4012.  1Ch    WORD    register SP
  4013.  1Eh    WORD    register FL (flags)
  4014.  20h    WORD    register R0
  4015.  22h    WORD    register R1
  4016.  24h    WORD    register R2
  4017.  26h    WORD    register R3
  4018.  28h    WORD    register R4
  4019.  2Ah    WORD    register R5
  4020.  2Ch    WORD    register R6
  4021.  2Eh    WORD    register R7
  4022.  30h    WORD    register R8
  4023.  32h    WORD    register CS, return-address
  4024.  34h    WORD    register IP, return-address
  4025.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  4026.         saved monitor address (v1.70)
  4027.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  4028.         (original register values at popup entry of MDEBUG)
  4029.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  4030.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  4031.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  4032.  6Ah    DWORD    address of the DOS-invars-table
  4033.  6Eh    DWORD    address of the InDOS flag
  4034.  72h    WORD    offset of the register which is used for the segment of the
  4035.           first monitor window
  4036.  74h    WORD    offset of the register which is used for the offset of the
  4037.           first monitor window
  4038.  76h    WORD    name of the register which is used for the segment of the
  4039.           first monitor segment
  4040.  78h    WORD    name of the register which is used for the offset of the first
  4041.           monitor window
  4042.  7Ah    WORD    pseudo register 1
  4043.  7Ch    WORD    pseudo register 2
  4044. --------G-2FD103-----------------------------
  4045. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  4046.     AX = D103h
  4047.     BX = key code (like result of an interrupt 16h call)
  4048.     CX = cursor position
  4049.         0000h in the ASCII column of the monitor
  4050.         0001h in one of the hex fields of the monitor
  4051.     DS:SI -> MDEBUG data structure (see #2750)
  4052.     ES:DI -> actual byte in the monitor
  4053. Return: AL = FFh
  4054.     AH = return code
  4055.         00h key processed, read next key
  4056.         01h leave MDEBUG popup session
  4057.         02h leave MDEBUG popup session and automatically popup again if DOS
  4058.           is not busy
  4059.         03h signal an error (beep)
  4060.         04h driver has redefined the key, proceed with the new key
  4061.         BX = new key code
  4062.         MDEBUG will not pass the new key to the command driver(s)
  4063.        else treat like code 00h
  4064. Note:    this function must end with a far call to the old INT 2F handler (with
  4065.       registers unchanged) if the driver does not support the key in BX.
  4066.       Otherwise, the driver must not chain to the old INT 2F.
  4067. SeeAlso: AX=D104h
  4068. --------G-2FD104-----------------------------
  4069. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  4070.     AX = D104h
  4071.     DS:SI -> MDEBUG data structure (see #2750)
  4072. Return: AL = FFh
  4073.     AH = return code
  4074.         00h key processed, read next key
  4075.         01h leave MDEBUG popup session
  4076.         02h leave MDEBUG popup session and automactically popup again if
  4077.           DOS is not busy
  4078.         03h signal an error (beep)
  4079.         04h driver has redefined the key, proceed with the new key
  4080.         BX = new key code
  4081.         MDEBUG won't pass the new key to the command driver(s)
  4082.         05h put new command line into the input buffer
  4083.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  4084.         06h process new command line
  4085.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  4086.        else treat like code 00h
  4087. Note:    this function must end with a far call to the old INT 2F handler if the
  4088.       driver does not support the key in BX.  Otherwise, the driver must
  4089.       not chain to the old INT 2F.
  4090. SeeAlso: AX=D103h
  4091. --------G-2FD1-------------------------------
  4092. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  4093.     AH = D1h
  4094.     AL = 05h-0Ah
  4095. Note:    these functions are reserved for future use
  4096. --------G-2FD110-----------------------------
  4097. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  4098.     AX = D110h
  4099. Return: DL = FFh
  4100.     ES:BX -> next program in the chain for INT 2F
  4101.     CX = code segment of this driver
  4102.     DI = offset of driver identification table (see #2751) (v1.60+)
  4103. Notes:    only called by the transient part of the driver
  4104.     must be reentrant and the driver must not chain this function to the
  4105.       old INT 2F
  4106.  
  4107. Format of the MDEBUG driver identification table:
  4108. Offset    Size    Description    (Table 2751)
  4109.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  4110.                          ^- Note: ASCII 129,German U-umlaut
  4111.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  4112.          each driver must have a unique name
  4113. --------G-2FD111-----------------------------
  4114. INT 2F - MDEBUG command driver - START DRIVER
  4115.     AX = D111h
  4116. Return: DL = FFh
  4117. Notes:    only called by the transient part of the driver to inform the resident
  4118.       part that it is installed
  4119.     the function must be reentrant and the driver mustn't chain this
  4120.       function to the old INT 2F
  4121. SeeAlso: AX=D101h,AX=D112h
  4122. --------G-2FD112-----------------------------
  4123. INT 2F - MDEBUG command driver - END DRIVER
  4124.     AX = D112h
  4125. Return: DL = FFh
  4126. Notes:    only called by the transient part of the driver to inform the resident
  4127.       part that it will be released after this function
  4128.     the function must be reentrant and the driver mustn't chain this
  4129.       function to the old INT 2F
  4130. SeeAlso: AX=D101h,AX=D111h
  4131. --------G-2FD1-------------------------------
  4132. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  4133.     AH = D1h
  4134.     AL = 13h-7Fh
  4135. Note:    these functions are reserved for future use
  4136. --------G-2FD1-------------------------------
  4137. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  4138.     AH = D1h
  4139.     AL = 80h-FFh
  4140. Note:    these functions are reserved for user defined features (e.g.
  4141.       communication between the transient und resident parts of the driver)
  4142. --------U-2FD200-----------------------------
  4143. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  4144.     AX = D200h
  4145. Return: AL = FFh if installed??? (documented as AX = return value)
  4146. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  4147.       board by Advantec
  4148. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  4149. --------Q-2FD200BX5144-----------------------
  4150. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  4151.     AX = D200h
  4152.     BX = 5144h ("QD")
  4153.     CX = 4D45h ("ME")
  4154.     DX = 4D30h ("M0")
  4155. Return: AL = FFh installed
  4156.     if BX,CX,DX registers were as specified on entry:
  4157.         BX = 4D45h ("ME")
  4158.         CX = 4D44h ("MD")
  4159.         DX = 5652h ("VR")
  4160. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4161. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  4162.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  4163.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  4164.       Quarterdeck product, it just chains to the previous INT 2F handler
  4165. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  4166. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  4167. --------U-2FD201-----------------------------
  4168. INT 2F - PCL-838.EXE - UNINSTALL
  4169.     AX = D201h
  4170. Return: AX = return value
  4171. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  4172. --------m-2FD201BX4849-----------------------
  4173. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  4174.     AX = D201h
  4175.     BX = 4849h ("HI")
  4176.     CX = 4D45h ("ME")
  4177.     DX = 4D51h ("MQ")
  4178. Return: BX = 4F4Bh ("OK")
  4179.     ES:DI -> HIMEM entry point
  4180. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4181. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  4182. --------m-2FD201BX4849-----------------------
  4183. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  4184.     AX = D201h
  4185.     BX = 4849h ("HI")
  4186.     CX = 5241h ("RA")
  4187.     DX = 4D30h ("M0")
  4188. Return: BX = 4F4Bh ("OK")
  4189.     CX = segment of start of HIRAM chain
  4190.     DX = reserved block owner (QEMM/QRAM code segment)
  4191. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4192. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  4193.       memory chain (see #1314 at INT 21/AH=52h), except that XMS Upper
  4194.       Memory Blocks have the block header program name field set to
  4195.       "UMB"; blocks whose "owner" field is set to the reserved segment
  4196.       returned in DX are locked-out regions such as video memory and ROMs.
  4197. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  4198. --------G-2FD201BX4D41-----------------------
  4199. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  4200.     AX = D201h
  4201.     BX = 4D41h ("MA")
  4202.     CX = 4E49h ("NI")
  4203.     DX = 4645h ("FE")
  4204. Return: BX = 5354h ("ST") if installed
  4205. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4206. SeeAlso: AX=D200h
  4207. --------E-2FD201BX4D45-----------------------
  4208. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  4209.     AX = D201h
  4210.     BX = 4D45h ("ME")
  4211.     CX = 5155h ("QU")
  4212.     DX = 5044h ("PD")
  4213. Return: AL = FFh
  4214.     BX = 4F4Bh ("OK")
  4215. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4216. Note:    this function is called by QEMM 6.03
  4217.     performs a variety of actions before setting return registers
  4218. SeeAlso: AX=D200h
  4219. --------m-2FD201BX5145-----------------------
  4220. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  4221.     AX = D201h
  4222.     BX = 5145h ("QE")
  4223.     CX = 4D4Dh ("MM")
  4224.     DX = 3432h ("42")
  4225. Return: BX = 4F4Bh ("OK")
  4226.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  4227. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4228. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  4229.       has been disabled with the NW3 switch to QEMM386.SYS
  4230. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  4231. --------V-2FD201BX5649-----------------------
  4232. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  4233.     AX = D201h
  4234.     BX = 5649h ("VI")
  4235.     CX = 4452h ("DR")
  4236.     DX = 414Dh ("AM")
  4237. Return: BX = 4F4Bh ("OK")
  4238.     ES:DI -> VIDRAM entry point (see #2752)
  4239. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4240. SeeAlso: AX=D200h
  4241.  
  4242. (Table 2752)
  4243. Call VIDRAM entry point with:
  4244.     AH = 00h get status
  4245.         Return: AL = VIDRAM state (see #2753)
  4246.             BL = extra RAM status (see #2754)
  4247.             BH = feature flags (see #2755)
  4248.             CL = current monitor (01h = mono, 80h = color)
  4249.             SI = current top of memory (paragraph)
  4250.             DI = segment of start of HiRAM chain
  4251.     AH = 01h setup
  4252.         AL = VIDRAM state (see #2753)
  4253.         BL = extra RAM status (see #2754)
  4254.         BH = feature flags (see #2755)
  4255.         CL = monitor (01h = monochrome, 80h = color)
  4256.         SI = new top of memory (paragraph)
  4257.         DI = segment of start of HiRAM chain
  4258.     AH = 02h get end address of VIDRAM code
  4259.         Return: ES:DI -> VIDRAM partial map context (see #2756,#2757)
  4260. Return: CF set on error
  4261.     CF clear if successful
  4262.  
  4263. (Table 2753)
  4264. Values for VIDRAM state:
  4265.  00h    off
  4266.  01h    no EGA graphics
  4267.  02h    no graphics at all
  4268.  
  4269. (Table 2754)
  4270. Values for VIDRAM extra RAM status:
  4271.  00h    VIDRAM does not use extra RAM
  4272.  01h    VIDRAM uses EMS as extra RAM
  4273.  02h    VIDRAM uses EGA as extra RAM
  4274.  
  4275. Bitfields for VIDRAM feature flags:
  4276. Bit(s)    Description    (Table 2755)
  4277.  0    override enabled
  4278.  1    mapped memory detected in A000h-B000h range
  4279.  2    top of memory not at 640K
  4280.  3    MDA detected
  4281.  4    high RAM exists in video area
  4282.  5    mapped memory detected in video area
  4283.  6-7    reserved???
  4284.  
  4285. Format of VIDRAM partial map context (EMS 3.2):
  4286. Offset    Size    Description    (Table 2756)
  4287.  00h    BYTE    EMS version ID (32h)
  4288.  01h    WORD    EMM handle for this entry
  4289.  03h    BYTE    number of frames
  4290.  04h    BYTE    first page frame
  4291.  05h    WORD    offset from ES to previously saved map
  4292.  
  4293. Format of VIDRAM partial map context (EMS 4.0):
  4294. Offset    Size    Description    (Table 2757)
  4295.  00h    BYTE    EMS version ID (40h)
  4296.  01h    WORD    mappable segment count
  4297.  03h  N WORD    mappable segments
  4298.     WORD    offset to previously saved map???
  4299. --------U-2FD202-----------------------------
  4300. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  4301.     AX = D202h
  4302.     CX:BX -> parameter table
  4303. Return: AX = return value
  4304. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  4305. --------R-2FD300BX4562-----------------------
  4306. INT 2F U - TeleReplica - INSTALLATION CHECK
  4307.     AX = D300h
  4308.     BX = 4562h
  4309.     CX = 2745h
  4310.     DX = serial port I/O base address??? (03F8h for v3.9)
  4311. Return: SI = segment of resident code
  4312.     AX = 251Dh
  4313.     BX = DF21h
  4314.     CX = F321h
  4315.     DX = ???
  4316. --------R-2FD3CB-----------------------------
  4317. INT 2F U - LapLink Quick Connect v6 - API
  4318.     AX = D3CBh
  4319.     CX = function
  4320.         0002h get ???
  4321.         Return: BX:AX -> ???
  4322.             CL = ???
  4323.             CH = ???
  4324.             DX = ???
  4325.             DI = COM1 I/O port???
  4326.             SI = COM2 I/O port???
  4327.         0003h initialization???
  4328.         0004h ???
  4329.         0005h initialization???
  4330.         0006h reset/clear ???
  4331.         Return: AX = 0000h
  4332.             ES:DI -> next byte after ??? cleared by this call
  4333.         0007h initialization???
  4334.         0008h uninstall
  4335.         Return: BX = status
  4336.                 0000h successful
  4337.                 FFFFh incomplete, stub remains in memory
  4338. Return: CX = 534Bh (except function 0002h)
  4339. Index:    uninstall;LapLink Quick Connect
  4340. --------K-2FD3D3BH00-------------------------
  4341. INT 2F - KDRIVE v2.x - INSTALLATION CHECK
  4342.     AX = D3D3h
  4343.     BH = 00h
  4344. Return: BX = 3D3Dh if installed
  4345.     CF clear if installed
  4346.         AX = driver ID??? (returns 0087h for KDRIVE.EXE and 0880h for
  4347.           KDRIVOS2.EXE in one examined version)
  4348. Program: KDRIVE is a shareware extended German keyboard driver by Martin
  4349.       Austermeier, originally based on K3 by Martin Gerdes as published
  4350.       in c't magazine 7/1988
  4351. --------l-2FD44D-----------------------------
  4352. INT 2F - 4DOS.COM v2.1+ - API
  4353.     AX = D44Dh
  4354.     BH = function
  4355.         00h installation check
  4356.         Return: AX = 44DDh
  4357.             BL = major version number
  4358.             BH = minor version number
  4359.             CX = PSP segment address for current invocation
  4360.             DL = 4DOS shell number (0 for the first (root) shell,
  4361.                   updated each time a new copy is loaded)
  4362.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  4363.         Return: nothing
  4364.         (internal, v4.0+) ???
  4365.         Return: AX = 44DDh
  4366.             ES:BX -> data area (see #2758)
  4367.         02h ???
  4368.         DX = ???
  4369.         Note:    v5.52 signals "unrecoverable error" and then terminates
  4370.               with INT 21/AH=4Ch or enters a deliberate infinite
  4371.               loop if ???
  4372.     ---v2.1-3.03 only---
  4373.         03h EXEC program
  4374.         CX:DX -> EXEC record (see #2759)
  4375.         FEh deallocate shell number (passed through to root shell)
  4376.         ???
  4377.         FFh allocate shell number (passed through to root shell)
  4378.     ---v5.52---
  4379.         03h get ???
  4380.         BL = ??? (00h/01h)
  4381.         Return: DX = current value of ???
  4382.         04h set ???
  4383.         BL = ??? (00h/01h)
  4384.         DX = new value for ???
  4385. Note:    a bug in v3.00 will crash the system if unrecognized value in BH
  4386. SeeAlso: AX=D44Eh,AX=D44Fh/BX=0000h,AX=E44Dh,INT 21/AX=4403h"DOS"
  4387. SeeAlso: INT 14/AX=7000h
  4388. Index:    installation check;4DOS|installation check;NDOS
  4389.  
  4390. Format of 4DOS v4.0 data area:
  4391. Offset    Size    Description    (Table 2758)
  4392.  00h  2 BYTEs    ???
  4393.  06h    WORD    XMS handle for swapping
  4394.     ???
  4395. SeeAlso: #2759
  4396.  
  4397. Format of 4DOS EXEC v2.1-v3.03 record:
  4398. Offset    Size    Description    (Table 2759)
  4399.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  4400.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  4401.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  4402. SeeAlso: #2758
  4403. --------l-2FD44E-----------------------------
  4404. INT 2F C - 4DOS v3.0+ - AWAITING USER INPUT
  4405.     AX = D44Eh
  4406. ---4DOS v3.01+---
  4407.     BX = condition
  4408.         0000h 4DOS is ready to display prompt
  4409.         0001h 4DOS has displayed the prompt, about to accept user input
  4410. Return: the handler must preserve SI, DI, BP, SP, DS, ES, and SS
  4411. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  4412. SeeAlso: AX=D44Dh
  4413. --------K-2FD44FBX0000-----------------------
  4414. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  4415.     AX = D44Fh
  4416.     BX = 0000h
  4417. Return: AX = 44DDh if installed
  4418. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  4419.       which emulate the 4DOS and NDOS keystack
  4420. SeeAlso: AX=D44Dh,AX=D44Fh/BX=0001h,AX=E44Fh/BX=0000h
  4421. --------K-2FD44FBX0001-----------------------
  4422. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  4423.     AX = D44Fh
  4424.     BX = 0001h
  4425.     CX = number of keystrokes (01h-FFh)
  4426.     DS:DX -> keystroke list (one word per keystroke)
  4427. Return: AX = status
  4428.         0000h successful
  4429.         nonzero failed
  4430.     BX,CX,DX destroyed
  4431. Notes:    the keystrokes are the exact values to return from subsequent calls to
  4432.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  4433.         0000h causes subfunctions 01h and 11h to indicate an empty
  4434.               keyboard buffer
  4435.         FFFFh is followed by a word indicating the number of clock
  4436.               ticks to delay before the next faked keystroke
  4437.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  4438.       invocation, and does not range-check CX; it will overwrite memory
  4439.       following the resident portion if CX is greater than 100h.
  4440.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  4441.       which emulate the 4DOS and NDOS keystack
  4442. SeeAlso: AX=D44Dh,AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h"DOS"
  4443. --------G-2FD600-----------------------------
  4444. INT 2F - HEART.COM - INSTALLATION CHECK
  4445.     AX = D600h
  4446. Return: AX = 0303h (two hearts) if installed
  4447.         ES:DI -> buffer (see #2760)
  4448. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  4449. Notes:    Once the host program has identified the address of the data area, it
  4450.       can change this to indicate safe/critical, alternate colours, etc.
  4451.     The entries for the color table are in char/attrib form.  Every two
  4452.       entries form a pair which is alternated between 68 times a minute.
  4453.       The first half of the table is for color videos, the second mono.
  4454.       Within each half, the first half is for the safe chars, and the
  4455.       second for the critical chars.
  4456.  
  4457. Format of HEART.COM buffer:
  4458. Offset    Size    Description    (Table 2760)
  4459.  00h  8 WORDs    table of colors/attributes (refer to notes above)
  4460.  10h    BYTE    flags
  4461.         bit 0: program is in critical section, so flash double
  4462.               exclamation mark
  4463.         bit 1: program is in safe code, so flash the heart character
  4464.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  4465.         of second line)
  4466. --------T-2FD600-----------------------------
  4467. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  4468.     AX = D600h
  4469. Return: AL = D6h if installed
  4470. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  4471.       is a programmer's text editor by Greenview Data.
  4472. SeeAlso: AX=D601h,AX=D602h
  4473. --------T-2FD601-----------------------------
  4474. INT 2F U - VEDIT VSWAP - ???
  4475.     AX = D601h
  4476.     BL = subfunction number???
  4477. Return: BL = return code ???
  4478.     ES = resident portion's data??? segment
  4479.     DX = resident portion's code segment
  4480. SeeAlso: AX=D600h"VSWAP"
  4481. --------T-2FD602-----------------------------
  4482. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  4483.     AX = D602h
  4484.     other registers set as for INT 21/AX=4B00h
  4485. Return: CF set on error
  4486.         AL = error code
  4487.         82h = failure due to ???
  4488.     CF clear on success
  4489. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  4490. --------N-2FD701BX0000-----------------------
  4491. INT 2F - Banyan VINES v4+ - GET BANV INTERRUPT NUMBER
  4492.     AX = D701h
  4493.     BX = 0000h
  4494. Return: AX = 0000h if installed
  4495.         BX = interrupt number (60h to 66h)
  4496.        nonzero not present
  4497. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  4498.       necessary to examine the four bytes preceding the handlers for
  4499.       INT 60 through INT 66 for the string "BANV"
  4500. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  4501. --------N-2FD702-----------------------------
  4502. INT 2F U - Banyan VINES v4+ - PCPRINT interface
  4503.     AX = D702h
  4504.     BX = function
  4505.     ???
  4506. Return: ???
  4507. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  4508. --------N-2FD703-----------------------------
  4509. INT 2F U - Banyan VINES v4+ - MAIL interface
  4510.     AX = D703h
  4511.     BX = function
  4512.     ???
  4513. Return: ???
  4514. SeeAlso: AX=D702h,AX=D704h
  4515. --------N-2FD704-----------------------------
  4516. INT 2F U - Banyan VINES v4+ - Streettalk Directory Assistance interface
  4517.     AX = D704h
  4518.     BX = function
  4519.     ???
  4520. Return: ???
  4521. SeeAlso: AX=D703h,INT 61/AX=0007h/BX=0002h"Banyan",INT 61/AX=0007h/BX=0008h
  4522. --------N-2FD800-----------------------------
  4523. INT 2F U - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  4524.     AX = D800h
  4525. Return: AL = FFh if installed
  4526.         DX = version number (0100h for v1.0, 0101h for v1.1)
  4527.         BX = data segment of resident copy
  4528.         ES:DI -> private API entry point (see #2761)
  4529.         SI = segment of resident code
  4530. SeeAlso: AX=7A00h,AX=D880h
  4531.  
  4532. (Table 2761)
  4533. Call CLIENT API entry point with:
  4534.     BX = function
  4535.         0000h get ???
  4536.         Return: DX = CLIENT version??? (0101h for v1.1)
  4537.             ES:BX -> ??? data
  4538.         0001h ???
  4539.         0002h ???
  4540.         0003h ???
  4541.         0004h ???
  4542.         0005h ???
  4543.         DL = ???
  4544.         ???
  4545.         Return: ???
  4546.         0006h get module name???
  4547.         ES:DI -> 16-byte buffer
  4548.         Return: CX = ???
  4549.             ES:DI filled with "NWLITE_CLIENT" 00h 00h 00h
  4550.         0007h ???
  4551.         DX:CX = ???
  4552.         ???
  4553.         Return: ???
  4554.         0008h ???
  4555.         0009h ???
  4556.         DL = ???
  4557.         ES:DI -> 16-byte buffer for ???
  4558.         Return: CF clear if successful
  4559.                 AX = 0000h
  4560.                 CX = 0000h
  4561.                 SI,DI destroyed
  4562.             CF set on error
  4563.                 AX = error code 4903h
  4564.         000Ah ???
  4565.         AH = subfunction
  4566.             00h get ???
  4567.             01h clear/set ??? flag
  4568.             AL = new state (00h cleared, 01h set)
  4569.             02h set ???
  4570.             DX = new value of ???
  4571.         Return: DX = old value of ???
  4572.         000Bh ???
  4573.         AX = ???
  4574.         ???
  4575.         Return: ???
  4576.         000Ch ???
  4577.         AX = ???
  4578.         ???
  4579.         Return: ???
  4580.         000Dh ???
  4581.         AX = ???
  4582.         ???
  4583.         Return: ???
  4584.         000Eh get original INT 17
  4585.         Return: CF clear
  4586.             ES:BX -> original INT 17
  4587.         000Fh ???
  4588.         0010h ???
  4589.         AX = ???
  4590.         ???
  4591.         Return: ???
  4592.         0011h get ???
  4593.         Return: CF clear
  4594.             DL = ???
  4595.         0012h get ???
  4596.         AL = index of ???
  4597.         ES:DI -> 10-byte buffer for ???
  4598.         Return: CF clear if successful
  4599.                 ES:DI buffer filled
  4600.                 AX,CX destroyed
  4601.             CF set on error
  4602.                 AX = error code (4907h if AL out of range)
  4603.         0013h get ???
  4604.         Return: CF clear
  4605.             DH = ???
  4606.             DL = ???
  4607.         0014h ???
  4608.         DL = ???
  4609.         ???
  4610.         Return: CF clear if successful
  4611.                 ???
  4612.             CF set on error
  4613.                 AX = error code 8056h
  4614.         0015h ???
  4615.         DX = ???
  4616.         Return: ES:DI -> ???
  4617.         other
  4618.         Return: CF set
  4619.             AX = 0001h (invalid function)
  4620. --------N-2FD856-----------------------------
  4621. INT 2F U - Novell NetWare Lite v1.1 - SERVER - GET ???
  4622.     AX = D856h
  4623. Return: AX = 0001h if supported???
  4624.     BX = ??? (0004h for v1.1)
  4625.     CX = ??? (0F20h for v1.1)
  4626.     DS = segment of resident code
  4627.     ES = data segment of resident copy
  4628. Note:    this function is also supported by Personal NetWare SERVER, bundled
  4629.       with Novell DOS 7
  4630. --------N-2FD880-----------------------------
  4631. INT 2F U - Novell NetWare Lite v1.0+ - SERVER - INSTALLATION CHECK
  4632.     AX = D880h
  4633. Return: AL = FFh if installed
  4634.         DX = version number (binary, DH = major, DL = minor)
  4635.         BX = data segment of resident copy
  4636.         CL = current state (00h SERVER is disabled, 01h SERVER is active)
  4637.         ES:DI -> private API entry point (see #2762)
  4638.         SI = ??? (offset of configuration info?)
  4639.         AH may be destroyed
  4640. Note:    this function is also supported by Personal NetWare SERVER, but DI is
  4641.       not set; instead, ES:SI points at the API entry point
  4642. SeeAlso: AX=7A00h,AX=D800h,INT 2A/AX=D852h
  4643.  
  4644. (Table 2762)
  4645. Call SERVER API entry point with:
  4646.     BX = function
  4647.         0000h ???
  4648.         ???
  4649.         Return: ???
  4650.         Note: closes open files by calling INT 21/AH=3Eh
  4651.         0001h get connection information
  4652.         DX = connection number (0001h-max connections)
  4653.         ES:DI -> 28-byte buffer for connection information
  4654.         Return: CF clear if successful
  4655.                 ES:DI buffer filled
  4656.             CF set on error
  4657.                 AX = FFFFh
  4658.     ---Personal NetWare only---
  4659.         0002h ???
  4660.         0003h ???
  4661.         0004h ???
  4662.         0005h ???
  4663.         0006h ???
  4664.         0007h ???
  4665.         other
  4666.         Return: CF set
  4667.             AX = 0001h (invalid function)
  4668. --------d-2FD8C0-----------------------------
  4669. INT 2F U - Novell NLCACHE,NWCACHE - INSTALLATION CHECK
  4670.     AX = D8C0h
  4671. Return: AL = FFh if installed
  4672.         CL = cache variant (01h NLCACHEC, 02h NLCACHEX, 03h NLCACHEM)
  4673.         DH = major version??? (01h for v1.1)
  4674.         DL = minor version??? (01h for v1.1)
  4675.         ES:DI -> private API entry point (see #2763)
  4676. Program: NLCACHE is a disk cache included with NetWare Lite
  4677. SeeAlso: AX=D800h,AX=D880h
  4678.  
  4679. (Table 2763)
  4680. Call NLCACHE/NWCACHE API entry point with:
  4681.     BX = function
  4682.         0000h ???
  4683.         ???
  4684.         Return: CF clear if successful
  4685.                 AX = 0000h
  4686.                 ???
  4687.             CF set on error
  4688.                 AX = error code
  4689.         0001h (NWCACHE only) ???
  4690.         ES:DI -> buffer for ???
  4691.         Return: ???
  4692.         other
  4693.         Return: CF set
  4694.             AX = 0001h (invalid function)
  4695. --------F-2FDA00-----------------------------
  4696. INT 2F - ZyXEL ZFAX v1.x - INSTALLATION CHECK
  4697.     AX = DA00h
  4698. Return: AH = enabled state (00h = enabled, 01h = disabled)
  4699.     AL = 5Ah installed
  4700. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  4701.       fax modems.
  4702. Note:    This function, and the other DAxxh functions, may apply only to version
  4703.       1 of the software; see AX=DB00h for the version 2 installation check
  4704. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h
  4705. --------F-2FDA01-----------------------------
  4706. INT 2F - ZyXEL ZFAX v1.x - UNINSTALL
  4707.     AX = DA01h
  4708. Return: AL = 00h Success
  4709.          01h Failure
  4710. SeeAlso: AX=DA00h,AX=DB01h
  4711. --------F-2FDA02-----------------------------
  4712. INT 2F - ZyXEL ZFAX v.1x - DISABLE
  4713.     AX = DA02h
  4714. Return: AL = 00h
  4715. SeeAlso: AX=DA03h,AX=DB02h
  4716. --------F-2FDA03-----------------------------
  4717. INT 2F - ZyXEL ZFAX v1.x - ENABLE
  4718.     AX = DA03h
  4719. Return: AL = 00h
  4720. SeeAlso: AX=DA02h,AX=DB03h
  4721. --------G-2FDA55-----------------------------
  4722. INT 2F U - TRAP.COM - INSTALLATION CHECK
  4723.     AX = DA55h
  4724.     DL = interrupt number
  4725.     DH = ???
  4726. Return: if installed
  4727.         AH = interrupt number
  4728.         AL = ???
  4729.         ES:BX -> ???
  4730. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  4731. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  4732.       the interrupt number is part of the installation check
  4733. --------N-2FDAB2-----------------------------
  4734. INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK
  4735.     AX = DAB2h
  4736. Return: AX = 00FFh if installed
  4737.         BX:CX -> MIB table
  4738. Program: BWSNMP is part of the BW-NFS package
  4739. SeeAlso: INT 62/AH=00h"ETHDEV"
  4740. --------F-2FDB00-----------------------------
  4741. INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK
  4742.     AX = DB00h
  4743. Return: AL = 5Bh if installed (v2.x)
  4744.         ES:BX -> configuration table???
  4745.     AX = 00DBh if installed (v3)
  4746.         ES:BX -> ZFAX configuration table (see #2764)
  4747. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  4748.       Fax modems.
  4749. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h
  4750.  
  4751. Format of ZFAX Configuration Table:
  4752. Offset    Size    Description    (Table 2764)
  4753.  00h    WORD    table version number (0300h for v3.0-v4.01)
  4754.  02h    BYTE    reserved
  4755.  03h 70 BYTEs    ZFAX working path
  4756.  49h 128 BYTEs    path to external editor
  4757.  C9h 128 BYTEs    path to external terminal emulator
  4758. 149h 128 BYTEs    path to Ring Shell
  4759. 1C9h 128 BYTEs    path to DOS Shell
  4760. 249h 128 BYTEs    path to Data Shell
  4761. 2C9h 70 BYTEs    path to Chinese font
  4762. 30Fh    BYTE    printer type (see #2765)
  4763. 310h    BYTE    printer port (00h = LPT1, etc.)
  4764. 311h    BYTE    type of graphics adapter
  4765.         (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules)
  4766. 312h    BYTE    display type
  4767.         (00h auto-detect, 01h LCD, 02h color, 03h mono)
  4768. 313h    BYTE    scan code for ZFAX hotkey (see #0005)
  4769. 314h    BYTE    shift mask for ZFAX hotkey
  4770. 315h    BYTE    tone/pulse dialing (00h tone, 01h pulse)
  4771. 316h    BYTE    Caller ID (00h disabled, 01h enabled)
  4772. 317h    BYTE    Distinctive Ring (00h disabled, 01h enabled)
  4773. 318h    BYTE    normal ring answer type (see #2766)
  4774. 319h    BYTE    Ring 1 answer type (see #2766)
  4775. 31Ah    BYTE    Ring 2 answer type (see #2766)
  4776. 31Bh    BYTE    Ring 3 answer type (see #2766)
  4777. 31Ch    BYTE    COM port for modem
  4778. 31Dh    BYTE    speaker volume (00h-07h)
  4779. 31Eh    BYTE    modem dial timer, seconds
  4780. 31Fh    WORD    user-defined COM port I/O address
  4781. 321h    BYTE    user-defined COM port IRQ number
  4782. 322h 81 BYTEs    dial prefix string
  4783. 373h 79 BYTEs    dial postfix string
  4784. 3C2h    BYTE    ring count until automatic answer
  4785. 3C3h    BYTE    retry count on busy signal
  4786. 3C4h    BYTE    redial delay in seconds
  4787. 3C5h    WORD    system password
  4788. 3C7h    BYTE    reserved
  4789. 3C8h    BYTE    voice file compression format
  4790.         00h CELP at 9600bps
  4791.         01h two-bit ADPCM at 19200bps
  4792.         02h three-bit ADPCM at 28800bps
  4793. 3C9h    BYTE    voice system: DTMF 0 action (see #2767)
  4794. 3CAh    BYTE    voice system: DTMF 1 action
  4795. 3CBh    BYTE    voice system: DTMF 2 action
  4796. 3CCh    BYTE    voice system: DTMF 3 action
  4797. 3CDh    BYTE    voice system: DTMF 4 action
  4798. 3CEh    BYTE    voice system: DTMF 5 action
  4799. 3CFh    BYTE    voice system: DTMF 6 action
  4800. 3D0h    BYTE    voice system: DTMF 7 action
  4801. 3D1h    BYTE    voice system: DTMF 8 action
  4802. 3D2h    BYTE    voice system: DTMF 9 action (see #2767)
  4803. 3D3h    WORD    reserved
  4804. 3D5h 25 BYTEs    local FAX ID to display on page header
  4805. 3EEh 20 BYTEs    local FAX ID sent to remote FAX
  4806. 402h    BYTE    FAX page size
  4807.         00h A4 (210x297mm)
  4808.         01h B4 (250x353mm)
  4809.         02h A3 (297x420mm)
  4810. 403h    BYTE    FAX resolution
  4811.         00h normal (3.85 pixels/mm)
  4812.         01h high (7.7 pixels/mm)
  4813. 404h    BYTE    FAX coding scheme
  4814.         00h 1-D, modified Huffman coding
  4815.         01h 2-D, modified READ coding
  4816. 405h    BYTE    left margin for text in millimeters
  4817. 406h    BYTE    vertical insertion for text in mm (0-20)
  4818. 407h    BYTE    horizontal insertion in mm (0-20)
  4819. 408h    BYTE    maximum text lines per page
  4820. 409h    BYTE    text type (00h ASCII, 01h WordStar-formatted)
  4821. 40Ah    BYTE    PCX image resize (00h disabled, 01h enabled)
  4822. 40Bh    BYTE    AutoPrint (00h disabled, 01h enabled)
  4823. 40Ch    BYTE    cover page (00h disabled, 01h enabled)
  4824. 40Dh 81 BYTEs    cover page logo filename
  4825. 45Eh 65 BYTEs    cover page sender name
  4826. 49Fh    BYTE    print capture (00h disabled, 01h enabled)
  4827. 4A0h    BYTE    send immediately (00h disabled, 01h enabled)
  4828. 4A1h    BYTE    print capture printer port
  4829. 4A2h    BYTE    print capture timer in seconds
  4830. 4A3h    BYTE    scan code for print capture hotkey (see #0005)
  4831. 4A4h    BYTE    shift mask for print capture hotkey
  4832. 4A5h    BYTE    DataShell type
  4833.         00h internal Zmodem, 01h Data Shell, 02h disable
  4834. 4A6h    BYTE    video I/O type
  4835.         00h auto-detect, 01h use BIOS, 02h direct writes
  4836. 4A7h    BYTE    call transfer digits (0-9)
  4837. 4A8h    WORD    voice recorder maximum time in seconds (0-999)
  4838.  
  4839. (Table 2765)
  4840. Values for ZFAX printer type:
  4841.  00h    EPSON FX (9 pins)
  4842.  01h    EPSON LQ (24 pins)
  4843.  02h    HP Laser Jet II, letter size
  4844.  03h    HP Laser Jet II, legal size
  4845.  04h    HP Laser Jet II, A4 size
  4846.  05h    HP Laser Jet III, letter size
  4847.  06h    HP Laser Jet III, legal size
  4848.  07h    HP Laser Jet III, A4 size
  4849. SeeAlso: #2764
  4850.  
  4851. (Table 2766)
  4852. Values for Ring Answer Type:
  4853.  00h    voice system
  4854.  01h    FAX only
  4855.  02h    Data Shell
  4856.  03h    Ring Shell
  4857.  04h    DOS Shell
  4858.  05h    ignore
  4859. SeeAlso: #2764
  4860.  
  4861. (Table 2767)
  4862. Values for DTMF action:
  4863.  00h    none
  4864.  01h    page operator
  4865.  02h    FaxBack
  4866.  03h    announcement
  4867.  04h    call transfer
  4868.  05h    receive FAX
  4869.  06h    receive data
  4870.  07h    voice mailbox
  4871.  08h    DOS Shell Out
  4872.  09h    Data Shell Out
  4873. SeeAlso: #2764
  4874. --------U-2FDB00-----------------------------
  4875. INT 2F U - WINGO.COM - INSTALLATION CHECK
  4876.     AX = DB00h
  4877. Return: AX = FFFFh if installed
  4878.     CX = 5749h ('WI') if installed
  4879.     DX = 4E47h ('NG') if installed
  4880.         ES = segment of resident code
  4881. Program: WINGO.COM is TSR for starting Windows programs from DOS
  4882.       prompt (together with companion Windows program
  4883.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  4884.       PC Magazine
  4885. Range:    AH=DBh to AH=FFh, selected by scanning for a free multiplex number
  4886. SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4887. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4888. --------F-2FDB01-----------------------------
  4889. INT 2F - ZyXEL ZFAX v2+ - UNINSTALL
  4890.     AX = DB01h
  4891. Return: AX = status
  4892.         0000h successful
  4893.         0001h ZFAX is busy
  4894.         0002h another program resident above ZFAX
  4895. Note:    this function unhooks the vectors taken by the ZFAX TSR if they have
  4896.       not been hooked by other TSRs and releases the TSR's memory
  4897.     ZFAX v2.x crashes the contributor's machine when this function is
  4898.       called
  4899. SeeAlso: AX=DA01h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  4900. --------U-2FDB01-----------------------------
  4901. INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER
  4902.     AX = DB01h
  4903.     CX:DX -> new callback function
  4904. Return: AX = 0000h
  4905.     CX:DX -> end of resident code (stack ???)
  4906. Desc:    the callback function is used for WINGO <-> WINSTART communication
  4907. SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4908. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4909. --------F-2FDB02-----------------------------
  4910. INT 2F - ZyXEL ZFAX v2.x - DISABLE
  4911.     AX = DB02h
  4912. Return: AL = 00h
  4913. SeeAlso: AX=DA02h,AX=DB00h"ZFAX",AX=DB01h"ZFAX",AX=DB03h"ZFAX"
  4914. --------U-2FDB02-----------------------------
  4915. INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER
  4916.     AX = DB02h
  4917. Return: AX = 0000h
  4918. Desc:    the callback function is used for WINGO <-> WINSTART communication
  4919. SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4920. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  4921. --------F-2FDB03-----------------------------
  4922. INT 2F - ZyXEL ZFAX v2.x - ENABLE
  4923.     AX = DB03h
  4924. Return: AL = 00h
  4925. SeeAlso: AX=DA03h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  4926. --------U-2FDB03-----------------------------
  4927. INT 2F U - WINGO.COM - SET ??? FLAG
  4928.     AX = DB03h
  4929. Return: AX = 0000h
  4930. SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  4931. --------U-2FDB04-----------------------------
  4932. INT 2F U - WINGO.COM - RESET ??? FLAG
  4933.     AX = DB04h
  4934. Return: AX = 0000h
  4935. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  4936. --------U-2FDB05-----------------------------
  4937. INT 2F U - WINGO.COM - GET ??? FLAG
  4938.     AX = DB05h
  4939. Return: AX = 0000h
  4940.     DX = unknown flag - 0 or 1
  4941. Program: WINGO.COM is TSR for starting Windows programs from DOS
  4942.       prompt (together with companion Windows program
  4943.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  4944.       PC Magazine
  4945. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  4946. --------U-2FDB06-----------------------------
  4947. INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION
  4948.     AX = DB06h
  4949. Return: AX = return value of INT 2F/AX=1685h
  4950. Note:    uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to
  4951.       call the callback function previously set by AX=DB01h
  4952.     used for WINGO <-> WINSTART communication
  4953. SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO",
  4954. SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO"
  4955. --------F-2FDB10-----------------------------
  4956. INT 2F - ZyXEL ZFAX v3+ - EXECUTE ZFAX MAIN MENU
  4957.     AX = DB10h
  4958. SeeAlso: AX=DB00h"ZFAX",AX=DB11h"ZFAX"
  4959. --------F-2FDB11-----------------------------
  4960. INT 2F - ZyXEL ZFAX v3+ - SEND FAX
  4961.     AX = DB11h
  4962.     DS:SI -> filename including path (max 128 characters)
  4963.     DS:BX -> remote FAX number
  4964. Return: AX = status (see #2768)
  4965. SeeAlso: AX=DB00h"ZFAX",AX=DB12h,AX=DB13h,AX=DB14h,AX=DB15h,AX=DB20h,AX=DB21h
  4966.  
  4967. (Table 2768)
  4968. Values for ZFAX status:
  4969.  00h    OK
  4970.  01h    invalid DOS function
  4971.  02h    file not found
  4972.  03h    path not found
  4973.  04h    no file handle available
  4974.  05h    access denied by DOS
  4975.  06h    invalid handle
  4976.  07h    disk full
  4977.  10h    printer error
  4978.  11h    no graphics font
  4979.  12h    no ZFAX font
  4980.  20h    DCD dropped while sending
  4981.  21h    not ZyXEL modem
  4982.  22h    busy
  4983.  23h    no response from COM port
  4984.  24h    no carrier
  4985.  25h    no dial tone
  4986.  26h    no answer
  4987.  27h    no response
  4988.  28h    failed to send FAX
  4989.  30h    user aborted
  4990.  40h    critical error on disk
  4991.  50h    parameter error
  4992. --------F-2FDB12-----------------------------
  4993. INT 2F - ZyXEL ZFAX v3+ - PRINT FAX
  4994.     AX = DB12h
  4995.     DS:SI -> filename, including path (max 128 characters)
  4996. Return: AX = status (see #2768)
  4997. SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h
  4998. --------F-2FDB13-----------------------------
  4999. INT 2F - ZyXEL ZFAX v3+ - CONVERT FAX
  5000.     AX = DB13h
  5001.     DS:SI -> source filename, including path (max 128 characters)
  5002.     DS:BX -> destination filename, including path (max 80 characters)
  5003.     CX = destination file format
  5004.         00h FAX, 01h PCX, 02h TIFF, 03h PRN
  5005. Return: AX = status (see #2768)
  5006. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h
  5007. --------F-2FDB14-----------------------------
  5008. INT 2F - ZyXEL ZFAX v3+ - VIEW FAX
  5009.     AX = DB14h
  5010.     DS:SI -> source filename, including path (max 128 characters)
  5011. Return: AX = status (see #2768)
  5012. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h
  5013. --------F-2FDB15-----------------------------
  5014. INT 2F - ZyXEL ZFAX v4.01 - SEND FAX WITH LOGO AND SIGNATURE
  5015.     AX = DB15h
  5016.     DS:SI -> source filename, including path (max 128 characters)
  5017.     DS:BX -> remote FAX number
  5018.     DS:CX -> Logo filename
  5019.     DS:DX -> Signature filename
  5020. Return: AX = status (see #2768)
  5021. SeeAlso: AX=DB00h"ZFAX",AX=DB11h
  5022. --------F-2FDB16-----------------------------
  5023. INT 2F - ZyXEL ZFAX v4.01 - QUOTE PREVIOUS STATUS
  5024.     AX = DB16h
  5025. Return: DX:AX -> previous receive state transaction log (see #2769)
  5026.     BX = type (00h incoming FAX, 01h incoming data, 02h incoming voice)
  5027. SeeAlso: AX=DB00h"ZFAX",AX=DB11h,AX=DB17h
  5028.  
  5029. Format of ZFAX transaction log receive state:
  5030. Offset    Size    Description    (Table 2769)
  5031.  00h    WORD    year
  5032.  02h    WORD    date
  5033.  04h    WORD    time
  5034.  06h    WORD    extension number
  5035.  08h    WORD    type: 00h incoming FAX, 01h outgoing FAX, 02h voice message
  5036.  0Ah    WORD    status: 00h normal, 01h remote delete
  5037.  0Ch 125 BYTEs    filename
  5038.  89h 24 BYTEs    caller ID
  5039.  A1h 20 BYTEs    FAX number
  5040.  B5h 20 BYTEs    remote FAX ID
  5041.  C9h    WORD    error code
  5042.  CBh    WORD    connection direction (00h transmit, 01h receive)
  5043.  CDh    BYTE    connection time minutes
  5044.  CEh    BYTE    connection time seconds
  5045.  CFh    BYTE    ???
  5046.  D0h    WORD    connection speed (24, 48, 72, 96, 12, 144)
  5047.  D2h    WORD    connection page size (A4, B4, A3)
  5048.  D4h    WORD    connection coding scheme (1-DN, 1-DH, 2-DN, 2-DH)
  5049.  D6h    WORD    page count
  5050. --------F-2FDB17-----------------------------
  5051. INT 2F - ZyXEL ZFAX v4.01 - BEGIN RECEIVING INCOMING CALL
  5052.     AX = DB17h
  5053. Return: AX = status (0000h successful, 0001h unable to start at this time)
  5054. SeeAlso: AX=DB00h"ZFAX"
  5055. --------F-2FDB18-----------------------------
  5056. INT 2F - ZyXEL ZFAX v4.01 - SCHEDULE CALL
  5057.     AX = DB18h
  5058.     DS:SI -> schedule data (see #2769)
  5059. Return: AX = status (see #2768)
  5060. SeeAlso: AX=DB00h"ZFAX"
  5061. --------F-2FDB20-----------------------------
  5062. INT 2F - ZyXEL ZFAX v3+ - POLL FAX
  5063.     AX = DB20h
  5064.     DS:SI -> remote FAX number
  5065. Return: AX = status (see #2768)
  5066. SeeAlso: AX=DB11h,AX=DB21h
  5067. --------F-2FDB21-----------------------------
  5068. INT 2F - ZyXEL ZFAX v3+ - SEND VOICE
  5069.     AX = DB21h
  5070.     DS:SI -> filename including path (max 128 characters)
  5071.     DS:BX -> remote phone number
  5072. Return: AX = status (see #2768)
  5073. SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h
  5074. --------F-2FDB22-----------------------------
  5075. INT 2F - ZyXEL ZFAX v3+ - CONVERT VOICE FILE
  5076.     AX = DB22h
  5077.     DS:SI -> source filename, including path (max 128 characters)
  5078.     DS:BX -> destination filename, including path (max 80 characters)
  5079.     CX = destination format
  5080.         00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC
  5081. Return: AX = status (see #2768)
  5082. SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h
  5083. --------F-2FDB23-----------------------------
  5084. INT 2F - ZyXEL ZFAX v3+ - RECORD VOICE FILE
  5085.     AX = DB23h
  5086.     DS:SI -> destination filename, including path (max 128 characters)
  5087.     CX = recording channel (0 = telephone line, 1 = microphone/speaker)
  5088.     DX = voice file format
  5089.         00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM
  5090. Return: AX = status (see #2768)
  5091. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  5092. --------F-2FDB24-----------------------------
  5093. INT 2F - ZyXEL ZFAX v3+ - PLAY VOICE FILE
  5094.     AX = DB24h
  5095.     DS:SI -> name of voice file, including path (max 128 characters)
  5096.     CX = playback channel (0 = telephone line, 1 = microphone/speaker)
  5097. Return: AX = status (see #2768)
  5098. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  5099. --------F-2FDB25-----------------------------
  5100. INT 2F - ZyXEL ZFAX v3+ - ANSWER MODEM WITH VOICE SYSTEM
  5101.     AX = DB25h
  5102. Return: AX = status (see #2768)
  5103. SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h
  5104. --------F-2FDB26-----------------------------
  5105. INT 2F - ZyXEL ZFAX v3+ - DIAL PHONE
  5106.     AX = DB26h
  5107.     DS:SI -> remote phone number
  5108. Return: AX = status (see #2768)
  5109. SeeAlso: AX=DB25h
  5110. --------F-2FDB27-----------------------------
  5111. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE
  5112.     AX = DB27h
  5113. Return: AX = status (see #2768)
  5114. SeeAlso: AX=DB25h,AX=DB28h
  5115. --------F-2FDB28-----------------------------
  5116. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE
  5117.     AX = DB28h
  5118. Return: AX = status (see #2768)
  5119. SeeAlso: AX=DB25h,AX=DB27h,AX=DB41h
  5120. --------F-2FDB40-----------------------------
  5121. INT 2F - ZyXEL ZFAX v3+ - INTERNAL TERMINAL
  5122.     AX = DB40h
  5123. Return: AX = status (see #2768)
  5124. SeeAlso: AX=DB00h
  5125. --------F-2FDB41-----------------------------
  5126. INT 2F - ZyXEL ZFAX v3+ - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM
  5127.     AX = DB41h
  5128.     DS:SI -> source file name, including path (max 128 characters)
  5129.     DS:BX -> remote data number
  5130. Return: AX = status (see #2768)
  5131. SeeAlso: AX=DB00h,AX=DB28h
  5132. --------K-2FDC00-----------------------------
  5133. INT 2F - GOLD.COM - INSTALLATION CHECK
  5134.     AX = DC00h
  5135. Return: AL = state
  5136.         00h not installed
  5137.         FFh installed
  5138. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the
  5139.       code for F1; the purpose is to improve Kermit's VTxxx emulation
  5140. --------K-2FDC01-----------------------------
  5141. INT 2F - GOLD.COM - GET STATE
  5142.     AX = DC01h
  5143. Return: AL = status
  5144.         00h off
  5145.         01h on
  5146. SeeAlso: AX=DC00h,AX=DC02h
  5147. --------K-2FDC02-----------------------------
  5148. INT 2F - GOLD.COM - SET STATE
  5149.     AX = DC02h
  5150.     DL = new state
  5151.         00h off
  5152.         01h on
  5153. Return: AL = 00h (OK)
  5154. SeeAlso: AX=DC01h
  5155. --------t-2FDD-------------------------------
  5156. INT 2F - CappaCom programs - API
  5157.     AH = DDh
  5158.     AL = 00h general installation check
  5159.         Return: AL = FFh if any CappaCom programs are resident
  5160.     AL = FEh get info
  5161.         Return: ES:BX -> TSR info list (see #2770)
  5162.     AL = program identifier
  5163.         BH = function
  5164.         FDh get version
  5165.             Return: BX = version
  5166.         FFh installation check
  5167.             Return: AL = FFh if installed
  5168.                 BX = version
  5169.                 ES = segment of resident code
  5170.         others vary by program
  5171. Return: AL = status
  5172.         bit 7 set on error
  5173.         AL = 81h unknown function
  5174. Note:    CappaCom was originally SoftCom but changed its name due to a trademark
  5175.       conflict
  5176. Index:    installation check;SoftCom programs
  5177. Index:    installation check;CappaCom programs
  5178.  
  5179. Format of CappaCom TSR info list:
  5180. Offset    Size    Description    (Table 2770)
  5181.  00h  9 BYTEs    blank-padded ASCIZ program name
  5182.  09h    BYTE    program ID
  5183.  0Ah    WORD    program's PSP segment
  5184.  0Ch    WORD    program version (major in high byte)
  5185.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  5186.  12h    BYTE    number of interrupts hooked
  5187.  13h  5 BYTEs    interrupt numbers hooked by program
  5188.  18h  8 BYTEs    reserved
  5189. ----------2FDD-------------------------------
  5190. INT 2F - MIXFIX.EXE - API
  5191.     AH = DDh
  5192.     AL = function
  5193.         00h installation check
  5194.         Return: AX = 00DDh if installed
  5195.                 BX = version (BH = major, BL = minor)
  5196.         41h/61h get From: address
  5197.         Return: AX = 0001h
  5198.             ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4")
  5199.         49h/69h get To: address
  5200.         Return: AX = 0001h
  5201.             ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4")
  5202.         4Ah/6Ah get subject of mail
  5203.         Return: AX = 0001h
  5204.             ES:BX -> ASCIZ subject of handled mail
  5205.         4Dh/6Dh get mail name
  5206.         Return: AX = 0001h
  5207.             ES:BX -> ASCIZ full name of current mail file
  5208.         4Eh/6Eh get From: field
  5209.         Return: AX = 0001h
  5210.             ES:BX -> ASCIZ From: field of mail (mail sender's name)
  5211. Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute
  5212.       other programs for mail handling.  The called programs may use the
  5213.       services described here to retrieve information about the mail being
  5214.       handled.
  5215. Index: installation check;MIXFIX.EXE
  5216. --------d-2FDD--BX7844-----------------------
  5217. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  5218.     AH = DDh
  5219.     BX = 7844h ('xD')
  5220.     CX = 4953h ('IS')
  5221.     DX = 4B3Fh ('K?')
  5222.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  5223.     ES:DI -> 25-byte data buffer (see #2771)
  5224. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  5225.        BX = 87BBh
  5226.        DX = B4C0h
  5227.        ES:DI buffer filled
  5228.     CX,CF destroyed
  5229. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  5230.  
  5231. Format of xDISK data buffer:
  5232. Offset    Size    Description    (Table 2771)
  5233.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  5234.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  5235.  05h    BYTE    flag: 01h if write protected, 00h if not
  5236.  06h    BYTE    flag: 01h if root directory full, 00h if not
  5237.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  5238.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  5239.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  5240.  0Ah  2 BYTEs    reserved
  5241.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  5242.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  5243.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  5244.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  5245.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  5246.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  5247.  12h    BYTE    flag: 01h terse display, 00h verbose display
  5248.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  5249.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  5250.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  5251.  16h    WORD    count of open files in RAM disk
  5252.  18h    BYTE    unused
  5253. --------N-2FDE00BL00-------------------------
  5254. INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK
  5255.     AX = DE00h
  5256.     BL = 00h
  5257. Return: AL = FFh If Rprinter/Nprinter Installed
  5258.     BX -> Program Segment Prefix N/Rprinter.exe
  5259. --------Q-2FDE00BX4456-----------------------
  5260. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  5261.     AX = DE00h
  5262.     BX = 4456h ("DV")
  5263.     CX = 5844h ("XD")
  5264.     DX = 4931h ("I1")
  5265. Return: AL = FFh if installed (even if other registers do not match)
  5266.     if BX,CX, and DX were as specified on entry,
  5267.         BX = 4845h ("HE")
  5268.         CX = 5245h ("RE")
  5269.         DX = 4456h ("DV")
  5270. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  5271. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  5272.       issue DESQview API calls other than those allowed from hardware ints
  5273. SeeAlso: AX=DE02h,INT 15/AX=5400h
  5274. --------Q-2FDE01-----------------------------
  5275. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  5276.     AX = DE01h
  5277.     BX = driver ID
  5278.     other registers as needed by driver
  5279. Notes:    XDI drivers should pass this call through to previous handler if ID
  5280.       does not match
  5281.     DESQview never calls this function
  5282. --------Q-2FDE01BX4450-----------------------
  5283. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  5284.     AX = DE01h
  5285.     BX = 4450h ("DP")
  5286.     CX = 4D49h ("MI")
  5287.     DX = 3039h ("09")
  5288. Return: AL = FFh if installed
  5289.         BX = 4D42h ("MB")
  5290.         CX = 4921h ("I!")
  5291.         DX = 8F4Fh
  5292.         ES:DI -> filename of DPMI host overlay
  5293. InstallCheck:    test for the existence of the character device QDPMI$$$
  5294. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  5295. Index:    installation check;QDPMI
  5296. --------U-2FDE01BX5242-----------------------
  5297. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  5298.     AX = DE01h
  5299.     BX = 5242h ("RB")
  5300.     CX:DX = program identifier
  5301.         656F7000h ("eop",0) for DVeop
  5302. Return: AX = 5242h ("RB") if installed
  5303.         ES:BX -> data or entry point (see #2772)
  5304.         CX = version number (CH = major, CL = minor)
  5305.  
  5306. (Table 2772)
  5307. Call DVeop entry point with:
  5308.     ES:DI -> callback address or 0000h:0000h to remove callback
  5309. Return: AX = status
  5310.         0000h failed (callback table full or attempted to remove non-
  5311.           existent callback)
  5312.         0001h successful
  5313.         ES:DI -> chaining address
  5314.     BX,CX,DX destroyed
  5315. Notes:    the callback function is called with a simulated interrupt when the
  5316.       DESQview window containing it is closed; it should perform all
  5317.       necessary cleanup and then perform a FAR jump to the chaining address
  5318.       or an IRET if the chaining address is 0000h:0000h
  5319.     if the program wishes to remove itself before the window is closed, it
  5320.       should call the DVeop entry point with the previously returned
  5321.       chaining address and ignore the returned chaining address.
  5322. --------U-2FDE01BX7474-----------------------
  5323. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  5324.     AX = DE01h
  5325.     BX = 7474h
  5326.     CL = function
  5327.         00h installation check
  5328.         Return: AL = FFh
  5329.         01h get process handle
  5330.         DX = keys on Open Window menu (DL = first, DH = second)
  5331.         Return: AX = process handle or 0000h if not running
  5332.         02h (v1.3+) set TMAN handle
  5333.         DX = TMAN process handle
  5334.         03h (v1.3+) set open keys to ignore on next CL=01h call
  5335.         DX = keys on Open Window menu (DL = first, DH = second)
  5336. Return: BX = 4F4Bh ("OK")
  5337.     DL destroyed
  5338. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  5339.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  5340. Index:    installation check;DVTXDI
  5341. --------U-2FDE01BX7575-----------------------
  5342. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  5343.     AX = DE01h
  5344.     BX = 7575h
  5345.     CX = function
  5346.         0000h installation check
  5347.         Return: AX = 00FFh if installed
  5348.         0001h turn on notification (currently unused)
  5349.         Return: AX = 0001h
  5350.         0002h turn off notification (currently unused)
  5351.         Return: AX = 0001h
  5352.         0003h get process information
  5353.         Return: AX = status
  5354.                 0000h failed
  5355.                 0001h successful
  5356.                 BX = last instantaneous time slice
  5357.                     in 1/100s (v1.10)
  5358.                     in 1/18s (v1.11+)
  5359.                 CX = number of processes
  5360.                 DX = number of "(starting)" records (v2.00+)
  5361.                 SI = number of records in process info array
  5362.                       (v2.00+) (always 15 for v1.x)
  5363.                 ES:DI -> process info array (see #2773,#2774)
  5364.         0004h get version
  5365.         Return: AH = major version
  5366.             AL = minor version
  5367.         0005h (v1.10+) get time since DESQview started
  5368.         Return: DX:AX = 1/100s since DV start (v1.10)
  5369.             DX:AX = 1/18s since DV start (v1.11+)
  5370.         0006h (v1.10+) get number of task switches
  5371.         Return: DX:AX = total task switches
  5372.             CX = task switches in last instantaneous interval
  5373. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  5374.       Daniel J. Bodoh
  5375.     for v1.00, function 0003h allocates common memory, which the caller
  5376.       must deallocate after reading the process information; only the
  5377.       currently used records are placed in the buffer
  5378.     for v1.10+, function 0003h merely returns a pointer to the internal
  5379.       array of process information; the caller should make a copy of the
  5380.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  5381.       those records with bit 7 of the first byte set are valid.
  5382. Index:    installation check;DVSIXDI
  5383.  
  5384. Format of DVSIXDI v1.00 information for one process:
  5385. Offset    Size    Description    (Table 2773)
  5386.  00h    BYTE    flags
  5387.         bit 7: process slot is valid
  5388.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  5389.           Open Windows menu, else undefined
  5390.  03h    WORD    Switch Windows window number
  5391.  05h    WORD    segment of process handle
  5392.  07h    WORD    number of tasks owned by process
  5393.  09h    WORD    mapping context of process (see #0342 at INT 15/AX=1016h)
  5394.  0Bh    DWORD    hook for other programs
  5395.  
  5396. Format of DVSIXDI v1.10-v2.00 information for one process:
  5397. Offset    Size    Description    (Table 2774)
  5398.  00h    BYTE    process flags (see #2775)
  5399.  01h    WORD    Open Window keys
  5400.  03h    WORD    Switch Windows number
  5401.  05h    WORD    segment of process handle
  5402.  07h    WORD    number of tasks for process
  5403.  09h    WORD    process mapping context
  5404.  0Bh    DWORD    time process started (relative to start of DESQview)
  5405.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  5406.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  5407.  17h    DWORD    total CPU time since process started
  5408.  1Bh    DWORD    CPU time at start of current instantaneous interval
  5409.  1Fh    DWORD    CPU time in current instantaneous interval
  5410.  23h    DWORD    hook for other programs
  5411. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  5412.  
  5413. Bitfields for DVSIXDI process flags:
  5414. Bit(s)    Description    (Table 2775)
  5415.  7    valid record
  5416.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  5417.       and only offsets 01h and 09h are valid
  5418.  5    (v2.00+) this app currently owns the CPU
  5419.  4    reserved (0)
  5420.  3    DESQview system task
  5421.  2    reserved (0)
  5422.  1    task has keyboard (currently unused)
  5423.  0    task swapped out (currently unused)
  5424. --------Q-2FDE01BXFFFE-----------------------
  5425. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  5426.     AX = DE01h
  5427.     BX = FFFEh
  5428.     CX = 4D47h ("MG")
  5429.     DX = 0052h (0,"R")
  5430. Return: AL = FFh
  5431.     DX = 584Dh
  5432. --------Q-2FDE02-----------------------------
  5433. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  5434.     AX = DE02h
  5435.     BX = mapping context of DESQview
  5436.     DX = handle of DESQview system task
  5437. Note:    driver should pass this call to previous handler after doing its work
  5438. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  5439. --------Q-2FDE03-----------------------------
  5440. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  5441.     AX = DE03h
  5442.     BX = mapping context of DESQview
  5443.     DX = handle of DESQview system task
  5444. Notes:    driver should pass this call to previous handler before doing its work
  5445.     DESQview makes this call when it is exiting, but before unhooking any
  5446.       interrupt vectors
  5447. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  5448. --------Q-2FDE04-----------------------------
  5449. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  5450.     AX = DE04h
  5451.     BX = mapping context of new process (see #0342 at INT 15/AX=1016h)
  5452.     DX = handle of process
  5453. Return: nothing
  5454. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  5455.       (see #2776) from "common" memory to control access to XMS memory
  5456.     all DOS, BIOS, and DV API calls are valid in handler
  5457.     driver should pass this call to previous handler after processing it
  5458. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  5459.  
  5460. Format of XMS XDI structure:
  5461. Offset    Size    Description    (Table 2776)
  5462.  00h    DWORD    pointer to 10-byte record???
  5463.  04h    DWORD    pointer to next XMS XDI structure
  5464.  08h    WORD    mapping context
  5465.  0Ah    BYTE    ???
  5466.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h"XMS"
  5467.         (FAR jump to next field)
  5468.  10h  6 BYTEs    FAR handler for XMS driver entry point
  5469.         (consists of a FAR CALL followed by RETF)
  5470. --------Q-2FDE05-----------------------------
  5471. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  5472.     AX = DE05h
  5473.     BX = mapping context of process (see #0342 at INT 15/AX=1016h)
  5474.     DX = handle of last task in process
  5475. Return: nothing
  5476. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  5477.     driver should pass this call to previous handler before processing it
  5478.     all DOS, BIOS, and DV API calls except those generating a task switch
  5479.       are valid in handler
  5480. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  5481. --------Q-2FDE06-----------------------------
  5482. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  5483.     AX = DE06h
  5484.     BX = mapping context of process containing task
  5485.     DX = handle of new task
  5486. Notes:    driver should pass this call to previous handler after processing it
  5487.     all DOS, BIOS, and DV API calls are valid in handler
  5488. --------Q-2FDE07-----------------------------
  5489. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  5490.     AX = DE07h
  5491.     BX = mapping context of process containing task
  5492.     DX = handle of task
  5493. Notes:    driver should pass this call to previous handler before processing it
  5494.     all DOS, BIOS, and DV API calls except those generating a task switch
  5495.       are valid in handler
  5496. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  5497. --------Q-2FDE08-----------------------------
  5498. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  5499.     AX = DE08h
  5500.     BX = mapping context of task being switched from
  5501.           (see #0342 at INT 15/AX=1016h)
  5502.     DX = handle of task being switched from
  5503. Notes:    invoked prior to task swap, interrupts, etc
  5504.     driver should pass this call to previous handler after processing it
  5505. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  5506. --------Q-2FDE09-----------------------------
  5507. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  5508.     AX = DE09h
  5509.     BX = mapping context of task being switched to
  5510.           (see #0342 at INT 15/AX=1016h)
  5511.     DX = handle of task being switched to
  5512. Notes:    state is restored except for interrupts
  5513.     driver should pass this call to previous handler before processing it
  5514. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  5515. --------Q-2FDE0A-----------------------------
  5516. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  5517.     AX = DE0Ah
  5518.     BX = mapping context of task receiving focus
  5519.     DX = handle of running task
  5520. Notes:    driver should pass this call to previous handler before processing it
  5521.     this call often occurs inside a keyboard interrupt
  5522.     DV 2.42 does not provide this call to XDI handlers running inside a
  5523.       window; instead, it directly calls the INT 2F handler which was
  5524.       active at the time DV started
  5525. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  5526. --------Q-2FDE0B-----------------------------
  5527. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  5528.     AX = DE0Bh
  5529.     BX = mapping context of DESQview system task
  5530.     CX = number of system memory paragraphs required for the use of all
  5531.           XDI drivers (DV will add this to system memory in DVP buffer)
  5532.     DX = handle of DESQview system task
  5533.     SI = mapping context of new process if it starts
  5534.     ES:DI -> DVP buffer
  5535. Return: CX incremented as needed
  5536. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  5537.     driver should pass this call to previous handler before processing it
  5538. --------Q-2FDE0C-----------------------------
  5539. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  5540.     AX = DE0Ch
  5541.     BX = mapping context of task being swapped out
  5542.           (see #0342 at INT 15/AX=1016h)
  5543.     DX = handle of DESQview system task
  5544. Note:    driver should pass this call to previous handler after processing it
  5545. --------Q-2FDE0D-----------------------------
  5546. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  5547.     AX = DE0Dh
  5548.     BX = mapping context of process just swapped in
  5549.           (see #0342 at INT 15/AX=1016h)
  5550.     DX = handle of DESQview system task
  5551. Note:    driver should pass this call to previous handler before processing it
  5552. --------Q-2FDE0E-----------------------------
  5553. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  5554.     AX = DE0Eh
  5555.     BX = mapping context of DESQview system task
  5556.     DX = handle of DESQview system task
  5557.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  5558. Note:    driver should pass this call to previous handler after processing it
  5559. --------Q-2FDE0F-----------------------------
  5560. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  5561.     AX = DE0Fh
  5562. Note:    DESQview 2.50+ calls this function just before it completes its
  5563.       initialization.  At the time of the call, DESQview has not yet
  5564.       changed any interrupt vectors
  5565. SeeAlso: AX=DE02h
  5566. --------Q-2FDE10-----------------------------
  5567. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  5568.     AX = DE10h
  5569.     BX = mapping context of process (see #0342 at INT 15/AX=1016h)
  5570.     DX = task handle of process
  5571. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  5572.       similar to AX=DE07h but allows the XDI handler to make calls which
  5573.       cause context switches
  5574. SeeAlso: AX=DE06h,AX=DE07h
  5575. --------c-2FDF00-----------------------------
  5576. INT 2F - HyperWare programs - INSTALLATION CHECK
  5577.     AX = DF00h
  5578.     BX = product code (see #2777)
  5579.     CX = 0000h
  5580.     DX = 0000h
  5581. Return: AL = status
  5582.         00h not installed
  5583.         FFh multiplex number in use
  5584.         CX = 5948h ('YH') if selected product installed
  5585.         ---HyperDisk---
  5586.         BX = code segment of resident portion
  5587.         DX = HyperDisk local data version
  5588. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  5589. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  5590. SeeAlso: INT 13/AX=8EEDh
  5591. Index:    installation check;HyperDisk|installation check;HyperStb
  5592. Index:    installation check;HyperKey|installation check;HyperScreen
  5593. Index:    HyperDisk;installation check|HyperStb;installation check
  5594. Index:    HyperKey;installation check|HyperScreen;installation check
  5595.  
  5596. (Table 2777)
  5597. Values for HyperWare product code:
  5598.  4248h    ('BH') HyperStb
  5599.  4448h    ('DH') HyperDisk v4.20+
  5600.  4B48h    ('KH') HyperKey
  5601.  5348h    ('SH') HyperScreen
  5602. --------Q-2FDF00BX5445-----------------------
  5603. INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK
  5604.     AX = DF00h
  5605.     BX = 5445h ('TE')
  5606.     CX = 4C54h ('LT')
  5607.     DX = 5352h ('SR')
  5608. Return: BX = 5454h ('TT') if installed
  5609.     CX = 494Eh ('IN') if installed
  5610.     DX = 5454h ('ST') if installed
  5611. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  5612.       which provides an INT 14h interface to the network
  5613. Range:    AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning
  5614. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h
  5615. --------N-2FDF01BX0000-----------------------
  5616. INT 2F U - MSG.COM - INSTALLATION CHECK
  5617.     AX = DF01h
  5618.     BX = 0000h
  5619. Return: AX = FDFFh if installed
  5620.        BX = segment of resident code
  5621. Program: MSG.COM is a TSR for intercepting incoming Novell broadcast
  5622.       messages written by Gary Dobbins (Dobbins@Arizona.Edu)
  5623. --------c-2FDF01BX4448-----------------------
  5624. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  5625.     AX = DF01h
  5626.     BX = 4448h ('DH')
  5627. Return: AX = 0000h if function supported
  5628.         BX = number of cache buffers in use
  5629.         CX = number of cache buffers which have been modified
  5630.         DL = caching flags (see #2778)
  5631. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  5632. SeeAlso: AX=DF00h,AX=DF02h
  5633.  
  5634. Bitfields for HyperDisk caching flags:
  5635. Bit(s)    Description    (Table 2778)
  5636.  0    staged writes enabled for floppy disks
  5637.  1    staged writes enabled for hard disks
  5638.  2    writes verified on floppy disks
  5639.  3    writes verified on hard disks
  5640.  4    reserved (0)
  5641.  5    reserved (0)
  5642.  6    floppy caching enabled
  5643.  7    all caching functions enabled
  5644. --------Q-2FDF01-----------------------------
  5645. INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION
  5646.     AX = DF01h
  5647. Return: nothing???
  5648. Note:    invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h
  5649.       to close the socket corresponding to the file handle set with
  5650.       AX=DF02h; NOP if no file handle was ever set
  5651. SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR"
  5652. --------c-2FDF02BX4448-----------------------
  5653. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  5654.     AX = DF02h
  5655.     BX = 4448h ('DH')
  5656.     DL = new caching flags (see #2778)
  5657. Return: AX = 0000h if supported
  5658.         BX = number of cache buffers in use
  5659.         CX = number of cache buffers which have been modified
  5660.         DL = previous caching flags (see #2778)
  5661. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  5662. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  5663. SeeAlso: AX=DF00h,AX=DF01h
  5664. --------Q-2FDF02-----------------------------
  5665. INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION
  5666.     AX = DF02h
  5667.     BX = file handle for connection's socket
  5668. Return: AX = status
  5669.         0000h successful
  5670.         FFFFh no more room in TELTSR's JFT
  5671. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  5672. Notes:    the indicated file handle becomes owned by TELTSR, and is closed in
  5673.       the caller's JFT
  5674.     multiple calls to this function will override the previous assignment
  5675.       without closing the previous file; use AX=DF01h before further calls
  5676. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  5677. --------U-2FE000-----------------------------
  5678. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  5679.     AX = E000h
  5680. Return: AX = 4A52h ("JR") if present
  5681. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  5682.       apparent DOS version analogously to MS-DOS SETVER
  5683. Notes:    this installation check differs from the usual one of returning AL=FFh
  5684.     the SETDRVER API is fully emulated by Matthias Paul's FREEVER
  5685. SeeAlso: AX=E000h/DX=4D50h,AX=E001h,INT 21/AH=52h
  5686. --------j-2FE000-----------------------------
  5687. INT 2F - KAOSHIDE - INSTALLATION CHECK
  5688.     AX = E000h
  5689. Return: AL = FFh if installed
  5690. Program: KAOSHIDE ('Hidden Kaos') is a PD joke TSR which randomly capitalizes
  5691.       alphabetic keys, written by Philip Maland. Although not a virus,
  5692.       v2.0 uses some viral-like techniques to hide itself from
  5693.       memory-reports by reducing DOS memory size.
  5694. --------U-2FE000DX4D50-----------------------
  5695. INT 2F - FREEVER v1.0+ - INSTALLATION CHECK
  5696.     AX = E000h
  5697.     DX = 4D50h ('MP')
  5698. Return: AL = FFh if installed
  5699.         AH = AMIS INT 2Dh multiplex ID
  5700.         CX = FREEVER version (CH=major, CL=minor)
  5701.         DX:DI -> AMIS-compliant signature (see #2257)
  5702.         (vendor ID is "M. Paul ", program name is "FREEVER ")
  5703. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  5704.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  5705. Note:    FREEVER emulates INT 21/AH=30h, INT 21/AX=3306h, INT 21/AX=4412h,
  5706.       INT 21/AX=4452h, and SETDRVER's API on INT 2F/AX=E00xh, as well as
  5707.       providing an AMIS API on INT 2Dh
  5708. SeeAlso: AX=E000h"SETDRVER",INT 21/AH=30h,INT 21/AX=3306h,INT 21/AX=4452h
  5709. --------K-2FE000DX5354-----------------------
  5710. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  5711.     AX = E000h
  5712.     DX = 5354h ("ST")
  5713. Return: AL = FFh if installed
  5714.         BX = version (BH = major, BL = BCD minor)
  5715.         DX = segment of resident code
  5716. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  5717. --------U-2FE001-----------------------------
  5718. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  5719.     AX = E001h
  5720. Return: AH = major version
  5721.     AL = minor version
  5722. Note:    the SETDRVER API is fully emulated by Matthias Paul's FREEVER, which
  5723.       returns version 2.10 for this call; use AX=E000h/DX=45D0h to get
  5724.       FREEVER's version number
  5725. SeeAlso: AX=E000h,AX=E000h/DX=45D0h
  5726. --------U-2FE002-----------------------------
  5727. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  5728.     AX = E002h
  5729. Return: AL = FFh if successful
  5730.         BH = major DOS version
  5731.         BL = minor DOS version
  5732.         CH = DOS version flag
  5733.         CL = OEM number
  5734.         DH = major DR DOS version number (FFh if unknown)
  5735.         DL = minor DR DOS version number (FFh if unknown)
  5736. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  5737. --------U-2FE003-----------------------------
  5738. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  5739.     AX = E003h
  5740.     BH = new major DOS version
  5741.     BL = new minor DOS version
  5742.     CH = new DOS version flag
  5743.     CL = new DOS revision number
  5744.     DH = new OEM number
  5745. SeeAlso: AX=E002h
  5746. --------U-2FE004-----------------------------
  5747. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  5748.     AX = E004h
  5749. Return: AL = FFh if successful
  5750. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  5751. --------U-2FE005-----------------------------
  5752. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  5753.     AX = E005h
  5754. Return: AL = FFh if successful
  5755. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  5756. --------U-2FE006-----------------------------
  5757. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  5758.     AX = E006h
  5759. Return: AL = FFh if successful
  5760.         BL = status
  5761.         01h resident and active
  5762.         02h resident and inactive
  5763. --------U-2FE007-----------------------------
  5764. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  5765.     AX = E007h
  5766. Return: AL = FFh if successful
  5767.         BL = status
  5768.         00h if TaskMAX not loaded before SETDRVER
  5769.         FFh if TaskMAX was loaded before SETDRVER
  5770. SeeAlso: AX=E003h
  5771. --------U-2FE0-------------------------------
  5772. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  5773.     AH = E0h
  5774.     AL = 08h-10h
  5775. --------K-2FE100-----------------------------
  5776. INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK
  5777.     AX = E100h
  5778. Return: AX = 0001h if installed
  5779.         DS:SI -> ASCIZ hotkey name
  5780.         DS:DI -> ASCIZ recording filename
  5781. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  5782.       by P2 Enterprises
  5783. SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h
  5784. Index:    hotkeys;Phantom2
  5785. --------K-2FE101-----------------------------
  5786. INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST
  5787.     AX = E101h
  5788.     BX = function mask (see #2779)
  5789.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  5790.     DS:DX -> ASCIZ filespec if BX bit 7 set
  5791. SeeAlso: AX=E100h
  5792. Index:    hotkeys;Phantom2
  5793.  
  5794. Bitfields for Phantom2 function mask:
  5795. Bit(s)    Description    (Table 2779)
  5796.  0    record
  5797.  1    play
  5798.  2    QuickPlay
  5799.  3    loop
  5800.  4    mode display toggle
  5801.  5    sound toggle
  5802.  6    set hotkey
  5803.  7    set filespec
  5804. --------K-2FE102-----------------------------
  5805. INT 2F - Phantom2 v1.1+ - UNINSTALL
  5806.     AX = E102h
  5807. Return: AX = status
  5808.         0001h removal successful
  5809.         0002h not installed as TSR
  5810.         FFFFh disabled but not removed
  5811. SeeAlso: AX=E100h
  5812. --------K-2FE103-----------------------------
  5813. INT 2F - Phantom2 v2.8 - SET ??? FLAG
  5814.     AX = E103h
  5815. Return: AX = 0001h
  5816. SeeAlso: AX=E100h
  5817. --------y-2FE200-----------------------------
  5818. INT 2F - SecureDevice - LOGIN TO DRIVE
  5819.     AX = E200h
  5820.     DL = drive number (0 = A:)
  5821.     DS:SI -> 104-byte key
  5822. Return: AL = status
  5823.         00h unable to determine key's validity
  5824.         01h key is valid
  5825.         FFh key is invalid
  5826. Program: SecureDevice is a copylefted device driver by Max Loewenthal and
  5827.       Arthur Helwig which turns one or more disk files into encrypted
  5828.       logical drives
  5829. SeeAlso: AX=E201h,AX=E203h,AX=E209h
  5830. --------y-2FE201-----------------------------
  5831. INT 2F - SecureDevice - GET INFORMATION
  5832.     AX = E201h
  5833.     DX = driver index (0000h = first loaded)
  5834. Return: AL = number of volumes handled by driver
  5835.     DL = drive number of first volume (00h = A:)
  5836. SeeAlso: AX=E200h,AX=E203h,AX=E209h
  5837. --------y-2FE203-----------------------------
  5838. INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE)
  5839.     AX = E203h
  5840.     DL = drive number (00h = A:) or FFh for all drives
  5841. Return: nothing
  5842. SeeAlso: AX=E200h,AX=E209h
  5843. --------y-2FE209DX0000-----------------------
  5844. INT 2F - SecureDevice - INSTALLATION CHECK
  5845.     AX = E209h
  5846.     DX = 0000h
  5847. Return: AX = 1DEAh if installed
  5848.         DX = number of drivers installed
  5849. --------K-2FE300-----------------------------
  5850. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  5851.     AX = E300h
  5852. Return: AL = state
  5853.         00h not installed
  5854.         FEh if installed but suspended (v3.0+)
  5855.         FFh installed
  5856. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  5857. Range:    AH=C0h to AH=FFh, selected by commandline switch
  5858. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  5859. SeeAlso: AX=E307h,INT 66"Newkey"
  5860. --------V-2FE300-----------------------------
  5861. INT 2F - Blank - INSTALLATION CHECK
  5862.     AX = E300h
  5863. Return: AL = FFh if installed
  5864.         ES = resident code segment
  5865. Program: Blank is a shareware screen blanker by Yonah Schmeidler
  5866. Note:    AH=E3h is the default, which may be reconfigured by the installation
  5867.       program in the registered version
  5868. SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h
  5869. Index:    screen saver;Blank
  5870. --------K-2FE301-----------------------------
  5871. INT 2F U - ANARKEY.COM v2+ - GET ???
  5872.     AX = E301h
  5873. Return: DX:BX -> ??? (see #2780,#2781)
  5874. SeeAlso: AX=E300h
  5875.  
  5876. Format of returned data structure for ANARKEY v2.0:
  5877. Offset    Size    Description    (Table 2780)
  5878.  -7   7 BYTEs    signature ('ANARKEY')
  5879.  00h    WORD    ??? (I see 0001h in v2.0)
  5880.  02h    WORD    ??? (I see 0001h in v2.0)
  5881.  04h    WORD    ??? (I see 0 in v2.0)
  5882.  06h    WORD    PSP segment of next program loaded
  5883.  
  5884. Format of returned data structure for ANARKEY v3+:
  5885. Offset    Size    Description    (Table 2781)
  5886.  -1    BYTE    multiplex number
  5887.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  5888.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  5889.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  5890.  05h    WORD    PSP segment of next program loaded
  5891. --------K-2FE302-----------------------------
  5892. INT 2F U - ANARKEY.COM v3+ - ???
  5893.     AX = E302h
  5894.     BL = ???
  5895. Return: ???
  5896. SeeAlso: AX=E300h
  5897. --------K-2FE303-----------------------------
  5898. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  5899.     AX = E303h
  5900.     BL = function
  5901.         01h toggle insert mode
  5902.         02h display contents of history buffer
  5903.         03h write history buffer to file
  5904.         ES:DX -> file name
  5905.         04h clear history buffer
  5906.         05h undefine all aliases
  5907.         06h show aliases
  5908.         07h list programs using Unix switchar
  5909.         08h jump to bottom of history buffer
  5910.         09h (v4.0) add string to history buffer
  5911.         ES:DX -> ASCIZ string
  5912.         0Ah (v4.0) ???
  5913.         ES:DX -> ???
  5914.         0Bh (v4.0) copy string to edit buffer for use as next input line
  5915.         ES:DX -> ASCIZ string
  5916.         0Ch (v4.0) ???
  5917.         0Dh (v4.0) copy ??? to ???
  5918.         0Eh (v4.0) ???
  5919.         0Fh (v4.0) ???
  5920.         10h (v4.0) set ??? flag
  5921.         11h (v4.0) display error message about running in EMS under Windows
  5922. Return: ???
  5923. SeeAlso: AX=E300h
  5924. --------K-2FE304-----------------------------
  5925. INT 2F U - ANARKEY.COM v2+ - ???
  5926.     AX = E304h
  5927.     BL = ???
  5928. Return: ???
  5929. SeeAlso: AX=E300h
  5930. --------K-2FE305-----------------------------
  5931. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  5932.     AX = E305h
  5933.     BL = new state
  5934.         01h suspended
  5935.         00h enabled
  5936. SeeAlso: AX=E300h
  5937. --------K-2FE306-----------------------------
  5938. INT 2F U - ANARKEY.COM v4.0 - GET ???
  5939.     AX = E306h
  5940. Return: AX = ???
  5941. SeeAlso: AX=E300h
  5942. --------K-2FE307-----------------------------
  5943. INT 2F U - ANARKEY.COM v4.0 - GET ???
  5944.     AX = E307h
  5945. Return: AX = ???
  5946.     BL = ???
  5947. SeeAlso: AX=E300h
  5948. --------K-2FE337-----------------------------
  5949. INT 2F - INT16.COM - INSTALLATION CHECK
  5950.     AX = E337h
  5951. Return: AX = 0013h if installed
  5952. Program: INT16.COM is an INT16 keyboard BIOS replacement for
  5953.       INT 16/AH=00h-02h,10h-12h (based on K3) written by Martin Gerdes
  5954.       and published in c't 05/1990.
  5955. SeeAlso: AX=ED58h
  5956. --------l-2FE44D-----------------------------
  5957. INT 2F - NDOS - API
  5958.     AX = E44Dh
  5959. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  5960.       Norton Utilities
  5961. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  5962.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  5963.       check returns AX=44EEh instead of AX=44DDh
  5964. SeeAlso: AX=D44Dh,AX=E44Eh
  5965. --------l-2FE44E-----------------------------
  5966. INT 2F C - NDOS - AWAITING USER INPUT
  5967.     AX = E44Eh
  5968.     BX = condition
  5969.         0000h NDOS is ready to display prompt
  5970.         0001h NDOS has displayed the prompt, about to accept user input
  5971. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  5972. SeeAlso: AX=E44Dh
  5973. --------K-2FE44FBX0000-----------------------
  5974. INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  5975.     AX = E44Fh
  5976.     BX = 0000h
  5977. Return: AX = 44EEh if installed
  5978. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  5979.       Norton Utilities
  5980. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  5981.       which emulate the 4DOS and NDOS keystack
  5982. SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h
  5983. --------K-2FE44FBX0001-----------------------
  5984. INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  5985.     AX = E44Fh
  5986.     BX = 0001h
  5987.     CX = number of keystrokes (01h-FFh)
  5988.     DS:DX -> keystroke list (one word per keystroke)
  5989. Return: AX = status
  5990.         0000h successful
  5991.         nonzero failed
  5992.     BX,CX,DX destroyed
  5993. Notes:    the keystrokes are the exact values to return from subsequent calls to
  5994.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  5995.         0000h causes subfunctions 01h and 11h to indicate an empty
  5996.               keyboard buffer
  5997.         FFFFh is followed by a word indicating the number of clock
  5998.               ticks to delay before the next faked keystroke
  5999.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  6000.       invocation, and does not range-check CX; it will overwrite memory
  6001.       following the resident portion if CX is greater than 100h.
  6002.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  6003.       which emulate the 4DOS and NDOS keystack
  6004. SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h"DOS"
  6005. --------U-2FE600CL30-------------------------
  6006. INT 2F - Virtual 486 - INSTALLATION CHECK
  6007.     AX = E600h
  6008.     CL = 30h
  6009.     BX = C0DEh
  6010. Return: BX = DEC0h if installed
  6011. Program: Virtual 486 is a 80486 CPU emulator for an 80386 by Solar Designer
  6012. ----------2FE700BX4158-----------------------
  6013. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  6014.     AX = E700h
  6015.     BX = 4158h ("AX")
  6016.     CX = 4953h ("IS")
  6017.     DX = 4845h ("HE")
  6018. Return: AL = FFh if installed
  6019.         BX = 4C4Fh ("LO") if ??? installed
  6020.         CX = 4F4Bh ("OK")
  6021.         DX = 4F55h ("OU")
  6022.         ES:DI -> ???
  6023. Range:    AH=C0h to AH=FFh, selected by scanning AH=E7-FFh, then AH=C0h-E6h
  6024. Note:    called by QDPMI when its Real to Protected Mode Switch Entry Point
  6025.       is called
  6026. --------f-2FE77EBX0000-----------------------
  6027. INT 2F - CTDEMN - INSTALLATION CHECK
  6028.     AX = E77Eh
  6029.     BX = 0000h
  6030.     CX = 4F4Dh ('OM')
  6031.     DX = 5453h ('TS')
  6032. Return: AX = 7EE7h if installed
  6033.         BX = resident code segment
  6034.         CX = 6F6Dh ('om')
  6035.         DX = 7473h ('ts')
  6036. Program: CTDEMN is a file daemon TSR by Simultan AG
  6037. --------E-2FED00-----------------------------
  6038. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  6039.     AX = ED00h
  6040.     BL = DOS extender ID (see #2782)
  6041. Return: AL = status
  6042.         00h not installed
  6043.         FFh installed
  6044.         SI = 5048h ("PH")
  6045.         DI = 4152h ("AR")
  6046.         CH = major version number
  6047.         CL = minor version number
  6048.         DX = flags
  6049.             bit 0: running under DPMI
  6050.             bit 1: running under Phar Lap VMM
  6051.         if running under DPMI:
  6052.             BX = DPMI version (BH = major, BL = minor)
  6053. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  6054.  
  6055. (Table 2782)
  6056. Values for Phar Lap DOS extender ID:
  6057.  01h    286dosx v1.3+ (Software Development Kit)
  6058.  02h    286dosx v1.3+ (Run-Time Kit)
  6059.  03h    386dosx v4.0+ (SDK)
  6060.  04h    386dosx v4.0+ (RTK)
  6061. --------E-2FED03-----------------------------
  6062. INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT
  6063.     AX = ED03h
  6064.     CX = real-mode code segment
  6065.     DX = real-mode data segment
  6066. Return: CF clear if successful
  6067.         CX = protected-mode code segment selector
  6068.         DX = protected-mode data segment selector
  6069.         ES:DI -> real-mode entry point for calling protected-mode functions
  6070.               (see INT 21/AX=250Dh)
  6071.     CF set on error
  6072.         AX = error code
  6073.         0008h unable to allocate LDT descriptors
  6074. --------E-2FED10BL05-------------------------
  6075. INT 2F - Pharlap DOS Extender - ???
  6076.     AX = ED10h
  6077.     BL = 05h
  6078.     ES:SI -> ??? structure
  6079. Return: AX = ???
  6080.     SI = ???
  6081.     DI = ???
  6082. SeeAlso: AX=ED00h,AX=ED11h
  6083. --------E-2FED11BL05-------------------------
  6084. INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ???
  6085.     AX = ED11h
  6086.     BL = 05h
  6087.     CX = ???
  6088.     DX = ???
  6089.     ES:SI -> ??? structure
  6090.     SS:SP = new stack ???
  6091. Return: ???
  6092. Note:    called immediately prior to terminating program with INT 21/AX=4CFFh
  6093. SeeAlso: AX=ED00h,AX=ED10h
  6094. --------K-2FED58-----------------------------
  6095. INT 2F U - K5.COM - INSTALLATION CHECK
  6096.     AX = ED58h
  6097. Return: AX = 000Dh if installed
  6098.         ES = resident code segment
  6099.         BX = ??? (9999h)
  6100.         ???
  6101. Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3
  6102. SeeAlso: AX=E337h,INT 16/AX=AF20h
  6103. --------E-2FED80-----------------------------
  6104. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  6105.     AX = ED80h
  6106.     BL = DOS extender ID (see #2782)
  6107.     SI = 5048h ("PH")
  6108.     DI = 4152h ("AR")
  6109.     ???
  6110. Return: ???
  6111. --------O-2FEDC8BX0000-----------------------
  6112. INT 2F - Novell ??? - INSTALLATION CHECK???
  6113.     AX = EDC8h ('EDC' = Novell European Development Center)
  6114.     BX = 0000h
  6115.     CX = 0000h
  6116.     DX = 1234h
  6117. Return: ???
  6118. Desc:    called by Novell DOS 7 LOCK command during installation; purpose
  6119.       unknown
  6120. --------y-2FEE00-----------------------------
  6121. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  6122.     AX = EE00h
  6123. Return: AL = FFh if installed
  6124. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  6125. SeeAlso: INT 21/AH=40h"NB.SYS"
  6126. --------U-2FEE00-----------------------------
  6127. INT 2F - XVIEW - INSTALLATION CHECK
  6128.     AX = EE00h
  6129. Return: AX = 00FFh if installed
  6130. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  6131. --------N-2FEE00-----------------------------
  6132. INT 2F - WEB v4.02 - INSTALLATION CHECK
  6133.     AX = EE00h
  6134. Return: AL = status
  6135.         00h not installed
  6136.         FFh installed
  6137. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  6138. SeeAlso: AH=EEh"WEB",AX=EEF0h
  6139. --------U-2FEE01-----------------------------
  6140. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  6141.     AX = EE01h
  6142.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  6143. Return: AX = status (see #2783)
  6144. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  6145.       database; the current database is searched first
  6146. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  6147.  
  6148. (Table 2783)
  6149. Values for XVIEW function status:
  6150.  0000h    successful
  6151.  00F1h    unknown subfunction
  6152.  00F2h    unable to pop up
  6153. --------U-2FEE02-----------------------------
  6154. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  6155.     AX = EE02h
  6156.     DX = physical page number or anchor page number (see #2784)
  6157. Return: AX = status (see #2783)
  6158. Note:    physical page numbers are assigned by the hypertext compiler, and
  6159.       will change if a page is inserted in the middle
  6160. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  6161.  
  6162. (Table 2784)
  6163. Values for XVIEW anchor page number:
  6164.  FFEAh    _Credits
  6165.  FFECh    _SearchTopics
  6166.  FFEDh    _SearchText
  6167.  FFF0h    _ManualList
  6168.  FFF5h    _HelpOnHelp
  6169.  FFF8h    _HomePage
  6170.  FFF9h    _IndexPage
  6171. --------U-2FEE03-----------------------------
  6172. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  6173.     AX = EE03h
  6174.     DS:DX -> data packet (see #2785)
  6175. Return: AX = status (see #2783)
  6176. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  6177.  
  6178. Format of XVIEW data packet:
  6179. Offset    Size    Description    (Table 2785)
  6180.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  6181.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  6182.  08h    WORD    page number (0000h if keyword used)
  6183.  0Ah  6 BYTEs    reserved
  6184. --------U-2FEE04-----------------------------
  6185. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  6186.     AX = EE04h
  6187. Return: AX = status (see #2783)
  6188. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  6189. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  6190. --------U-2FEE05-----------------------------
  6191. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  6192.     AX = EE05h
  6193. Return: AX = status (see #2783)
  6194. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  6195. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  6196. --------U-2FEE06-----------------------------
  6197. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  6198.     AX = EE06h
  6199. Return: AX = status (see also AX=EE01h)
  6200.         0001h specified filename is not an xText database
  6201.         0002h no databases found
  6202.         0003h bad data in file
  6203.         0004h memory shortage
  6204.         0005h unable to open the requested file
  6205.         0007h invalid page number for file
  6206. Note:    although this call is not required, the exit code can alert the
  6207.       caller to problems; if the call is not made, the program should
  6208.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  6209.       and should not get keyboard input or attempt disk accesses during
  6210.       the delay
  6211. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  6212. --------N-2FEE-------------------------------
  6213. INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK
  6214.     AH = EEh
  6215.     AL = module ID (see #2786)
  6216. Return: AX = 0000h if installed
  6217.         ES:DI -> far entry point for module-specific API calls
  6218.           (see #2787,#2788,#2789,#2790,#2791)
  6219. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  6220. SeeAlso: AX=EE00h"WEB"
  6221.  
  6222. (Table 2786)
  6223. Values for WEB module ID:
  6224.  10h    server module (SERVER.EXE)
  6225.  20h    client module (CLIENT.EXE)
  6226.  30h    mail module (MAIL.EXE)
  6227.  40h    spooler (PCSPOOL.EXE)
  6228.  50h    kernel module (KERNEL.EXE)
  6229.  60h    SAP module (KERNEL.EXE)
  6230.  70h    resident station manager (SM.EXE)
  6231.  90h    router module (ROUTER.EXE)
  6232.  
  6233. (Table 2787)
  6234. Call server module entry point with:
  6235.     BX = function
  6236.         0000h remove server module
  6237.         Return: AX = status (0000h if successful, else WEB error code)
  6238.         0001h create SYSINFO file
  6239.         Note:    the SYSINFO file is used by the station manager when
  6240.               displaying info for a particular station
  6241.         0002h get server object table
  6242.         Return: CX = number of server objects
  6243.             ES:DI -> server object table
  6244.         Note:    server objects include drives and devices that the
  6245.               server module controls
  6246.         0003h get server variables
  6247.         Return: ES:DI -> server variables
  6248.  
  6249. (Table 2788)
  6250. Call client module entry point with:
  6251.     BX = function
  6252.         0000h remove client module
  6253.         Return: AX = status (0000h if successful, else WEB error code)
  6254.         0001h decrement client-only flag
  6255.         0002h increment client-only flag
  6256.         0005h set device capture
  6257.         Note:    decrements DeviceOutput flag, telling the spooler that
  6258.               it may trap device output again
  6259.         0006h clear device capture
  6260.         Note:    increments DeviceOutput flag, telling the spooler that
  6261.               it should not trap device output (this is used
  6262.               internally by the spooler to prevent it from trapping
  6263.               its own output)
  6264.         0007h get client debug pointer
  6265.         Return: ES:DI -> client debug data structure (see #2792)
  6266.         0008h get root drive
  6267.         Return: AL = WEB startup drive
  6268.         0009h get maximum possible drive/device redirections
  6269.         Return: AL = maximum drive redirections
  6270.             CH = maximum LPTx redirections
  6271.             CL = maximum COMx redirections
  6272.         000Ah suspend client
  6273.         Return: AX = previous value of Suspend flag
  6274.         000Bh resume client
  6275.         Return: AX = previous value of Suspend flag
  6276.         000Ch get instance data
  6277.         CX = maximum number of structures in array
  6278.         ES:DI -> buffer for array of WIN_INSTANCE_DATA structures
  6279.               (see #2793)
  6280.         Return: CX = number of structures actually returned
  6281.         Note:    used internally by WEB4WIN
  6282.  
  6283. (Table 2789)
  6284. Call mail module entry point with:
  6285.     BX = function
  6286.         0000h remove mail module
  6287.         Return: AX = status (0000h successful, else WEB error code)
  6288.         0001h set mail poll
  6289.         Note:    schedules the WEB mail module
  6290.         0002h set mail notify
  6291.         Note:    sets the Notify flag, which determines whether the
  6292.               user will be notified when mail is received
  6293.         0003h clear mail notify
  6294.         Note:    clears the Notify flag, which determines whether the
  6295.               user will be notified when mail is received
  6296.         0004h check whether new mail has arrived
  6297.         Return: AL = new mail status
  6298.                 00h no new mail since last call
  6299.                 else new mail has arrived
  6300.         Note:    also clears the new-mail flag after retrieving it
  6301.         0005h send notify
  6302.         ES:DI -> name of WEB user to be notified
  6303.         0006h get post office
  6304.         Return: ES:DI -> full network path of Post Office subdirectory
  6305.  
  6306. (Table 2790)
  6307. Call spooler entry point with:
  6308.     BX = function
  6309.         0000h remove PCSpool module
  6310.         Return: AX = status (0000h successful, else WEB error code)
  6311.         0001h set spooler poll
  6312.         Note:    schedules the WEB spooler
  6313.         0002h check spooler changed
  6314.         Return:    AX = 0000h
  6315.         Note:    this call is a NOP in current versions of WEB
  6316.  
  6317. (Table 2791)
  6318. Call kernel entry point with:
  6319.     BX = function
  6320.         0000h remove kernel module
  6321.         Return: AX = status (0000h successful, else WEB error code)
  6322.         0001h set kernel ^S filter
  6323.         DL = new state (00h don't filter ^S, nonzero do filter)
  6324.         0002h get kernel data area
  6325.         Return: ES:DI -> kernel data area
  6326.         0003h display dialog box
  6327.         CL = dialog box type
  6328.             00h password
  6329.             01h E-Note received notification
  6330.             02h Novell login
  6331.             03h general notification
  6332.         DL = number of rows to display
  6333.         ES:SI -> array of far pointers to rows to be displayed
  6334.         ES:DI -> Pascal-style input buffer
  6335.         Return: AX = status (0000h successful, else error code)
  6336.         0004h kernel service events
  6337.         0005h get kernel's in-critical-section flag
  6338.         Return: ES:DI -> kernel InCriticalSection flag
  6339.         0006h schedule DOS event
  6340.         AL = directive
  6341.             00h do not ignore WEB ExtraBusy flag
  6342.             01h ignore ExtraBusy flag
  6343.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  6344.         ES:SI -> WEB AES Event Control Block (ECB) (see #2794)
  6345.         Notes:    the WEB Asynchronous Event Scheduler is similar to the
  6346.               one used by IPX; this call schedules a special ECB
  6347.               to be executed at a later time.  Unlike IPX ECBs,
  6348.               the timeout must be set explicitly by the caller
  6349.             this function also calls function 0004h
  6350.         0007h check busy
  6351.         AL = directive
  6352.             00h do not ignore WEB ExtraBusy flag
  6353.             01h ignore ExtraBusy flag
  6354.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  6355.         Return: AX = status (0000h not busy, else busy)
  6356.         0008h set keyboard intercept
  6357.         Note:    currently a NOP which returns immediately
  6358.         0009h get keyboard intercept
  6359.         Note:    currently a NOP which returns immediately
  6360.         000Ah get dialog flags
  6361.         Return: ES:DI -> kernel dialog flags (see #2795)
  6362.         000Bh get network path
  6363.         Return: ES:DI -> fully-qualified network path of file where
  6364.                 the screen is stored on Dialog calls
  6365.         000Ch kernel alternate dialog
  6366.         CL = dialog box type
  6367.             00h password
  6368.             01h E-Note received notification
  6369.             02h Novell login
  6370.             03h general notification
  6371.         DL = number of rows to display
  6372.         ES:SI -> array of far pointers to rows to be displayed
  6373.         ES:DI -> Pascal-style input buffer
  6374.         Return: AX = status (0000h successful, else error code)
  6375.         Note:    this function is identical to function 0003h except
  6376.               that it does not notify WEB4WIN of the impending
  6377.               dialog request
  6378.         000Dh get machine/operating system type
  6379.         Return: AX = machine/operating system type
  6380.                 01h IBM PC, MS-DOS
  6381.                 02h IBM PC, DOSV (Japanese)
  6382.                 03h NEC PC-9800, JDOS (Japanese)
  6383.                 04h IBM PC, Korean DBC DOS
  6384.  
  6385. Format of client debug data structure:
  6386. Offset    Size    Description    (Table 2792)
  6387.  00h    WORD    total files
  6388.  02h    WORD    files free
  6389.  04h    WORD    no files
  6390.  06h    WORD    minimum files
  6391.  08h    WORD    total FCBs
  6392.  0Ah    WORD    total safe FCBs
  6393.  0Ch    WORD    FCBs in use
  6394.  0Eh    WORD    wrong FCB
  6395.  10h    WORD    compressed
  6396.  12h    WORD    retransmits
  6397.  
  6398. Format of WIN_INSTANCE_DATA structure:
  6399. Offset    Size    Description    (Table 2793)
  6400.  00h    DWORD    real-mode pointer to data to be instanced
  6401.  04h    WORD    size of data to be instanced
  6402.  
  6403. Format of WEB AES Event Control Block:
  6404. Offset    Size    Description    (Table 2794)
  6405.  00h    DWORD    link address
  6406.  04h    WORD    ESR address
  6407.  08h    BYTE    InUse flag
  6408.  09h    BYTE    completion code
  6409.  0Ah  3 BYTEs    reserved
  6410.  0Dh    WORD    timeout
  6411.  0Fh    BYTE    IgnoreExtra flag
  6412.  10h    WORD    PSP
  6413.  12h    DWORD    DTA
  6414.  16h    WORD    AX value for DOS critical information
  6415.  18h    WORD    BX value for DOS critical information
  6416.  1Ah    WORD    CX value for DOS critical information
  6417.  1Ch    WORD    DX value for DOS critical information
  6418.  
  6419. (Table 2795)
  6420. Values for kernel dialog flags:
  6421.  01h    dialog will timeout
  6422.  02h    display stars instead of entered keystrokes
  6423. --------N-2FEEF0-----------------------------
  6424. INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION
  6425.     AX = EEF0h
  6426.     BX = notification function ID (see #2796)
  6427. Return: varies by notification function
  6428. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  6429. Note:    the notification functions are used internally by WEB modules to notify
  6430.       other modules and external programs of actions or event, and should
  6431.       never be called by an application
  6432. SeeAlso: AX=EE00h"WEB"
  6433.  
  6434. (Table 2796)
  6435. Values for WEB Notification Function ID:
  6436.  00h    node added
  6437.  01h    node deleted
  6438.  02h    dial attempt
  6439.  03h    dial failed
  6440.  04h    file close
  6441.  05h    close connection
  6442.  07h    check Windows mode
  6443.  20h    link up
  6444.  21h    link down
  6445. --------K-2FF000-----------------------------
  6446. INT 2F U - 4MAP - INSTALLATION CHECK
  6447.     AX = F000h
  6448. Return: AX = 00FFh
  6449. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  6450. Note:    returns AX=00FFh for any value of AL not listed here
  6451. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  6452. --------K-2FF001-----------------------------
  6453. INT 2F U - 4MAP - GET KEY MAPPINGS
  6454.     AX = F001h
  6455. Return: ES:BX -> key mappings
  6456. SeeAlso: AX=F000h
  6457. --------K-2FF002-----------------------------
  6458. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  6459.     AX = F002h
  6460.     BL = character to insert
  6461. Return: AX = status
  6462.         0000h successful
  6463.         0001h buffer full
  6464. SeeAlso: AX=F000h,AX=F003h
  6465. --------K-2FF003-----------------------------
  6466. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  6467.     AX = F003h
  6468.     BL = character to insert
  6469. Return: AX = status
  6470.         0000h successful
  6471.         0001h buffer full
  6472. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  6473. SeeAlso: AX=F000h,AX=F002h
  6474. --------m-2FF1-------------------------------
  6475. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  6476.     AH = F1h
  6477.     AL <> F1h
  6478. Return: AL = F1h if installed
  6479. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  6480.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  6481.       TSR at a time is brought back into memory at the user's request.
  6482. --------E-2FF100-----------------------------
  6483. INT 2F - DOS EXTENDER INSTALLATION CHECK
  6484.     AX = F100h
  6485. Return: AL = FFh if DOS extender present
  6486.         SI = 444Fh ("DO")
  6487.         DI = 5358h ("SX")
  6488. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  6489. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  6490. --------W-2FF200-----------------------------
  6491. INT 2F - WINX - INSTALLATION CHECK
  6492.     AX = F200h
  6493. Return: AX = 00FFh if installed
  6494. Program: WINX is a DOS/Windows utilities by Al Williams which can be used to
  6495.       launch Windows applications from a DOS Box; it was published in
  6496.       "DOS and Windows Protected Mode-Programming with DOS Extenders"
  6497.       (Addison-Wesley) and should not be confused with the Windows driver
  6498.       of the same name which is part of the DESQview/X package
  6499. --------W-2FF201-----------------------------
  6500. INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER
  6501.     AX = F201h
  6502. Return: AX = status
  6503.         FFFFh if WINX is busy processing a different request
  6504.         0000h if successful
  6505.         BX:CX = address of server buffer (see #2797)
  6506.  
  6507. Format of WINX server buffer:
  6508. Offset    Size    Description    (Table 2797)
  6509.  00h    BYTE    command/status
  6510.         00h buffer available
  6511.         01h buffer contains result
  6512.         02h change directory
  6513.         03h execute program
  6514.         FFh terminate windows portion of WINX
  6515.  01h  ? BYTEs    command (03h) or directory (02h)
  6516.   or
  6517.  01h    DWORD    result (01h)
  6518. --------W-2FF202-----------------------------
  6519. INT 2F - WINX - SET SERVER'S WORKING DIRECTORY
  6520.     AX = F202h
  6521.     BX:CX -> directory
  6522. Return: AX = status
  6523.         FFFFh if WINX is busy processing a different request
  6524.         0000h if successful
  6525. SeeAlso: AX=F200h,AX=F203h
  6526. --------W-2FF203-----------------------------
  6527. INT 2F - WINX - EXECUTE COMMAND
  6528.     AX = F203h
  6529.     BX:CX -> command
  6530. Return: AX = status
  6531.         0000h if successful
  6532.         FFFFh if WINX is busy processing a different request
  6533. SeeAlso: AX=F200h,AX=F202h
  6534. --------G-2FF400-----------------------------
  6535. INT 2F - FINDIRQ.COM - INSTALLATION CHECK
  6536.     AX = F400h
  6537. Return: AL = 01h if installed
  6538. Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue
  6539.       of PC Magazine; when run as a TSR it can determine which IRQs are
  6540.       used only when a device is active
  6541. SeeAlso: AX=F401h
  6542. --------N-2FF400-----------------------------
  6543. INT 2F - PowerLAN - INSTALLATION CHECK???
  6544.     AX = F400h
  6545.     ???
  6546. Return: ???
  6547. Note:    this function is called by PowerLAN's NET.EXE just prior to calling
  6548.       AX=F401h (get version)
  6549. SeeAlso: AX=F401h"PowerLAN"
  6550. --------N-2FF401-----------------------------
  6551. INT 2F - PowerLAN - GET VERSION
  6552.     AX = F401h
  6553. Return: ES:BX -> WORD containing 100*version (in decimal)
  6554. Program: PowerLAN is a networking product by Performance Technology
  6555. SeeAlso: AX=F400h"PowerLAN",AX=F483h"PowerLAN"
  6556. --------G-2FF401CX5121-----------------------
  6557. INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS
  6558.     AX = F401h
  6559.     CX = 5121h ('Q!')
  6560. Return: AX:DX -> hooked interrupt table (see #2798)
  6561. SeeAlso: AX=F400h
  6562.  
  6563. Format of FINDIRQ hooked interrupt table:
  6564. Offset    Size    Description    (Table 2798)
  6565.  00h    BYTE    1Ch
  6566.  01h    DWORD    FINDIRQ's INT 1C handler
  6567.  05h    DWORD    original INT 1C handler
  6568.  09h    BYTE    28h
  6569.  0Ah    DWORD    FINDIRQ's INT 28 handler
  6570.  0Eh    DWORD    original INT 28 handler
  6571.  12h    BYTE    2Fh
  6572.  13h    DWORD    FINDIRQ's INT 2F handler
  6573.  17h    DWORD    original INT 2F handler
  6574. --------N-2FF483-----------------------------
  6575. INT 2F - PowerLAN - ???
  6576.     AX = F483h
  6577.     ???
  6578. Return: ???
  6579. SeeAlso: AX=F400h"PowerLAN",AX=F401h"PowerLAN"
  6580. --------d-2FF700-----------------------------
  6581. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  6582.     AX = F700h
  6583. Return: AL = state
  6584.         00h not installed
  6585.         FFh installed
  6586. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  6587. --------d-2FF701-----------------------------
  6588. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  6589.     AX = F701h
  6590.     BX:CX = 32-bit count of 55ms timer ticks
  6591. --------d-2FF800CX4455-----------------------
  6592. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  6593.     AX = F800h
  6594.     CX = 4455h ("DU")
  6595.     DL = 45h ("E")
  6596. Return: AL = FFh if installed
  6597.         ES:BX -> ASCII signature "Universal Data Exchange"
  6598. Program: SuperStor is a disk-compression program by Addstor.
  6599. Note:    returns AX=0001h if AL is not 00h or 01h
  6600. SeeAlso: AX=1001h,AX=F801h
  6601. --------d-2FF801CX4455-----------------------
  6602. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  6603.     AX = F801h
  6604.     CX = 4455h ("DU")
  6605.     DL = 45h ("E")
  6606.     ES:BX = return address if successful
  6607. Return: at specified address if successfully removed from memory
  6608.     else
  6609.         AL = error code
  6610.         ???
  6611. Program: SuperStor is a disk-compression program by Addstor.
  6612. Note:    returns AX=0001h if AL is not 00h or 01h
  6613. SeeAlso: AX=1001h,AX=F800h
  6614. ----------2FFA00-----------------------------
  6615. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  6616.     AX = FA00h
  6617.     BX = ??? (0408h)
  6618.     CX = ??? (001Fh)
  6619.     DX = ??? (0102h)
  6620.     SI = ??? (5ACCh)
  6621.     DI = ??? (0632h)
  6622. Return: ???
  6623. Note:    called by WinEmacs at startup
  6624. ----------2FFA00-----------------------------
  6625. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  6626.     AX = FA00h
  6627.     BX = ??? (03FCh)
  6628.     CX = ??? (003Fh)
  6629.     DX = ??? (00FFh)
  6630.     SI = ??? (5AA6h)
  6631.     DI = ??? (0620h)
  6632. Return: ???
  6633. Note:    called by Matlab at startup
  6634. --------*-2FFB-------------------------------
  6635. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  6636.     AH = FBh
  6637. SeeAlso: AX=FB42h/BX=0001h
  6638. --------f-2FFB-------------------------------
  6639. INT 2F U - Conner Backup Exec AUTORES - API
  6640.     AH = FBh
  6641.     BL = function number (00h-07h)
  6642.     ???
  6643. Return: ???
  6644. Program: AUTORES is a resident program launcher for unattended backups
  6645. --------a-2FFB00-----------------------------
  6646. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  6647.     AX = FB00h
  6648. Return: AX = 00FFh if installed
  6649. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  6650. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  6651. --------U-2FFB00-----------------------------
  6652. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  6653.     AX = FB00h
  6654. Return: AX = FFFFh if installed
  6655.         BX = version (BCD, BH=major, BL=minor)
  6656. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  6657. --------a-2FFB01-----------------------------
  6658. INT 2F U - AutoBraille v1.1A - ???
  6659.     AX = FB01h
  6660.     ???
  6661. Return: ???
  6662. --------U-2FFB01-----------------------------
  6663. INT 2F U - Jot-It! v1.50 - GET USER NAME
  6664.     AX = FB01h
  6665. Return: DX:BX -> ASCIZ user name
  6666. SeeAlso: AX=FB02h"Jot-It"
  6667. --------a-2FFB02-----------------------------
  6668. INT 2F U - AutoBraille v1.1A - ???
  6669.     AX = FB02h
  6670. Return: AH = ???
  6671.     AL = ???
  6672. --------U-2FFB02-----------------------------
  6673. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  6674.     AX = FB02h
  6675. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  6676. SeeAlso: AX=FB01h"Jot-It"
  6677. --------a-2FFB03-----------------------------
  6678. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  6679.     AX = FB03h
  6680. Return: AX = ???
  6681. --------U-2FFB03-----------------------------
  6682. INT 2F U - Jot-It! v1.50 - UNINSTALL
  6683.     AX = FB03h
  6684. Return: resident code removed from memory
  6685. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  6686.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  6687. SeeAlso: AX=FB00h"Jot-It"
  6688. --------a-2FFB-------------------------------
  6689. INT 2F U - AutoBraille v1.1A - SET ???
  6690.     AH = FBh
  6691.     AL = 04h-08h
  6692. Return: AX = 0000h
  6693. --------a-2FFB-------------------------------
  6694. INT 2F U - AutoBraille v1.1A - SET ???
  6695.     AH = FBh
  6696.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  6697. Return: ???
  6698. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  6699. --------a-2FFB-------------------------------
  6700. INT 2F U - AutoBraille v1.1A - SET ???
  6701.     AH = FBh
  6702.     AL = 10h-1Fh
  6703.     ???
  6704. Return: ???
  6705. --------a-2FFB20-----------------------------
  6706. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  6707.     AX = FB20h
  6708.     BL = flags to set
  6709. SeeAlso: AX=FB21h"AutoBraille"
  6710. --------a-2FFB21-----------------------------
  6711. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  6712.     AX = FB21h
  6713.     BL = flags to clear
  6714. SeeAlso: AX=FB20h"AutoBraille"
  6715. --------a-2FFB22-----------------------------
  6716. INT 2F U - AutoBraille v1.1A - SET ???
  6717.     AX = FB22h
  6718.     BL = ???
  6719. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  6720. --------a-2FFB28-----------------------------
  6721. INT 2F U - AutoBraille v1.1A - ???
  6722.     AX = FB28h
  6723.     BX = ???
  6724.     ???
  6725. Return: ???
  6726. SeeAlso: AX=FB29h"AutoBraille"
  6727. --------a-2FFB29-----------------------------
  6728. INT 2F U - AutoBraille v1.1A - ???
  6729.     AX = FB29h
  6730.     BX = ???
  6731.     ???
  6732. Return: ???
  6733. SeeAlso: AX=FB28h"AutoBraille"
  6734. --------a-2FFB-------------------------------
  6735. INT 2F U - AutoBraille v1.1A - SET ???
  6736.     AH = FBh
  6737.     AL = 2Bh-34h
  6738.     BX = ???
  6739. --------a-2FFB35-----------------------------
  6740. INT 2F U - AutoBraille v1.1A - SET ???
  6741.     AX = FB35h
  6742.     BL = ???
  6743. --------a-2FFB36-----------------------------
  6744. INT 2F U - AutoBraille v1.1A - SET ???
  6745.     AX = FB36h
  6746.     BL = ???
  6747. --------a-2FFB37-----------------------------
  6748. INT 2F U - AutoBraille v1.1A - SET ???
  6749.     AX = FB37h
  6750.     BL = ???
  6751. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  6752. --------E-2FFB42BX0001-----------------------
  6753. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  6754.     AX = FB42h
  6755.     BX = 0001h
  6756. Return: AX = version number??? (AL=major, AH=minor)
  6757.     CX = next-selector increment
  6758. ---BC2.0---
  6759.     ES:BX -> 80-byte buffer for ???
  6760.     DX = DPMI version
  6761. ---BC3.0---
  6762.     BX = ??? (0000h)
  6763.     DX = ???
  6764.     ES:SI -> list of valid selectors ???
  6765. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6766.       as version 1.000, while the version distributed with BC++ 3.0
  6767.       identifies itself as version 1.0; the former is 10864 bytes, the
  6768.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  6769.       the BC3.0 version also adds a DPMI host and DOS extender
  6770.     the BC++ 2.0 version displays an error message if called with BX
  6771.       values other than 0001h-0008h
  6772. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  6773. --------E-2FFB42BX0002-----------------------
  6774. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  6775.     AX = FB42h
  6776.     BX = 0002h
  6777.     CX = size in bytes
  6778.     DX = bit flags
  6779.         bit 2: set to allocate DOS memory, clear for DPMI memory
  6780.     SI = selector of descriptor to be modified to access allocated memory
  6781.     DI = selector of a second descriptor to be modified
  6782. Return: AX = ??? or 0000h on error
  6783.     CX:DX = linear base address of DPMI memory block
  6784.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  6785.     ???
  6786. Note:    two segment descriptors may be set if a code and an aliased data
  6787.       segment are required; if only one descriptor is needed, SI should
  6788.       equal DI on entry
  6789. BUG:    when allocating DOS memory, the code computes the linear address by
  6790.       multiplying the segment number by 4 rather than shifting by 4
  6791. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  6792. --------E-2FFB42BX0002-----------------------
  6793. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  6794.     AX = FB42h
  6795.     BX = 0002h
  6796.     ES:SI -> memory block info (see #2799)
  6797. Return: ???
  6798. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6799.       as version 1.000, while the version distributed with BC++ 3.0
  6800.       identifies itself as version 1.0; the former is 10864 bytes, the
  6801.       latter 22180 bytes.
  6802. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  6803.  
  6804. Format of DPMILOAD memory block info:
  6805. Offset    Size    Description    (Table 2799)
  6806.  00h    WORD    flags (see #2800)
  6807.  02h    DWORD    block size in bytes
  6808. ---DPMI memory block---
  6809.  06h    DWORD    DPMI memory block handle
  6810. ---DOS memory block---
  6811.  06h    WORD    real-mode segment of memory block
  6812.  08h    WORD    selector of memory block
  6813. ---
  6814.  0Ah    DWORD    linear address of memory
  6815.  0Eh    WORD    memory operation error code
  6816.         0008h no more free LDT descriptors
  6817. ---if flags bit 0 clear---
  6818.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  6819.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  6820. ---if flags bit 0 set---
  6821.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  6822.  12h    WORD    unused???
  6823.  
  6824. Bitfields for DPMILOAD memory block flags:
  6825. Bit(s)    Description    (Table 2800)
  6826.  0    set if data segment rather than code segment
  6827.  1    information valid
  6828.  2    set if DOS memory block rather than DPMI memory block
  6829.  4    ???
  6830.  15    set if no LDT selectors for memory block???
  6831. SeeAlso: #2799
  6832. --------E-2FFB42BX0003-----------------------
  6833. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  6834.     AX = FB42h
  6835.     BX = 0003h
  6836. Return: DX:AX = size of largest free block in paragraphs
  6837.         0000h:0000h on error (BC3.0 version only)
  6838. Note:    AX and DX are destroyed on error, but no other error indicator is
  6839.       returned, under the BC++ 2.0 version of DPMILOAD
  6840. SeeAlso: AX=FB42h/BX=0002h
  6841. --------E-2FFB42BX0004-----------------------
  6842. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  6843.     AX = FB42h
  6844.     BX = 0004h
  6845.     DS:DX -> ASCIZ filename of protected-mode executable
  6846. Return: CX = selector of ??? or 0000h
  6847. ---BC3.0---
  6848.     DX = status (0000h,FFF4h,others???) (see #2801)
  6849. Note:    the filename may also be terminated by a CR rather than a NUL under the
  6850.       BC++ 3.0 version of DPMILOAD
  6851.  
  6852. (Table 2801)
  6853. Values for DPMILOAD function status:
  6854.  0000h    successful
  6855.  0001h    ??? failure
  6856.  0002h    invalid selector
  6857.  0004h    unknown error
  6858.  0008h    no more LDT descriptors available???
  6859.  FFDEh    unable to set descriptor
  6860.  FFDFh    unable to get segment base address
  6861.  FFE0h    ???
  6862.  FFF2h    invalid parameter value
  6863.  FFF4h    component of filename too long (name not in 8.3 format)
  6864.  FFF5h    pathname too long (>79 chars)
  6865.  FFF6h    ???
  6866.  FFF8h    ???
  6867.  FFF9h    index out of range
  6868.  FFFAh    ???
  6869.  FFFCh    invalid access to code segment???
  6870.  FFFEh    ???
  6871.  FFFFh    general error
  6872. --------E-2FFB42BX0005-----------------------
  6873. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  6874.     AX = FB42h
  6875.     BX = 0005h
  6876.     CX = selector of DPMILOAD data (see #2802)
  6877.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  6878. Return: DX = status (see #2801)
  6879.         0000h successful
  6880.         AX:BX -> ??? FAR function (called with two words on top of stk)
  6881.         else
  6882.         BX destroyed
  6883. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  6884.  
  6885. Format of DPMILOAD data:
  6886. Offset    Size    Description    (Table 2802)
  6887.  00h 12 BYTEs    ???
  6888.  0Ch    WORD    ??? bit flags
  6889.  0Eh 14 BYTEs    ???
  6890.  1Ch    WORD    number of memory control records (see #2805)
  6891.  1Eh 25 BYTEs    ???
  6892.  37h    BYTE    ??? bit flags
  6893.         bit 4: data valid???
  6894.  38h  4 BYTEs    ???
  6895.  3Ch    WORD    ???
  6896.  3Eh 12 BYTEs    ???
  6897.  46h    BYTE    ??? counter
  6898.  47h    BYTE    ???
  6899.  48h    BYTE    ???
  6900.  49h    BYTE    ???
  6901.  4Ah    WORD    ???
  6902.  4Ch  2 BYTEs    ???
  6903.  4Eh    WORD    offset of array of 64-byte memory control records
  6904.  52h    WORD    offset of name list (see #2803)
  6905.  54h  4 BYTEs    ???
  6906.  58h    WORD    offset of array of 6-byte objects (see #2804)
  6907.  5Ah  8 BYTEs    ???
  6908.  62h  9 BYTEs    ASCIZ name for ???
  6909.  6Bh  9 BYTEs    ASCIZ name for ???
  6910.     ???
  6911.  
  6912. Format of name list entry [array]:
  6913. Offset    Size    Description    (Table 2803)
  6914.  00h    BYTE    length of name (00h if end of array)
  6915.  01h  N BYTEs    name
  6916.  N+1    WORD    1-based index into array of unknown 6-byte objects
  6917.  
  6918. Format of 6-byte objects:
  6919. Offset    Size    Description    (Table 2804)
  6920.  00h    BYTE    ???
  6921.  01h    BYTE    ???
  6922.  02h    BYTE    ???
  6923.  03h    BYTE    1-based index of memory control record
  6924.  04h    WORD    ???
  6925.  
  6926. Format of memory control record:
  6927. Offset    Size    Description    (Table 2805)
  6928.  00h 20 BYTEs    memory block info (see #2799)
  6929.  14h  6 BYTEs    ???
  6930.  1Ah    BYTE    ???
  6931.  1Bh  2 BYTEs    ???
  6932.  1Dh    BYTE    ??? bit flags
  6933.  1Eh 14 BYTEs    ???
  6934.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  6935.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  6936.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  6937.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  6938.  3Ch  4 BYTEs    ???
  6939. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  6940.       the pointers at offsets 34h and 38h
  6941. --------E-2FFB42BX0006-----------------------
  6942. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  6943.     AX = FB42h
  6944.     BX = 0006h
  6945.     CX = selector of DPMILOAD data (see #2802)
  6946.     DX = 1-based index into array of ??? 6-byte objects
  6947. Return: DX = status (see #2801)
  6948.         0000h successful
  6949.         AX:BX -> ??? FAR function (called with two words on top of stk)
  6950.         else
  6951.         BX destroyed
  6952. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  6953. --------E-2FFB42BX0007-----------------------
  6954. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  6955.     AX = FB42h
  6956.     BX = 0007h
  6957.     CX = selector of ???
  6958. Return: ???
  6959. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6960.       as version 1.000, while the version distributed with BC++ 3.0
  6961.       identifies itself as version 1.0; the former is 10864 bytes, the
  6962.       latter 22180 bytes.
  6963. --------E-2FFB42BX0007-----------------------
  6964. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  6965.     AX = FB42h
  6966.     BX = 0007h
  6967.     CX = selector of DPMILOAD data (see #2802)
  6968.     ???
  6969. Return: DX = status (see #2801)
  6970.         0000h successful
  6971.         AX = ???
  6972. --------E-2FFB42BX0008-----------------------
  6973. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  6974.     AX = FB42h
  6975.     BX = 0008h
  6976.     CX = bit flags
  6977.         bit 2: set if DPMI memory, clear if DOS memory
  6978.     DX = selector of DOS memory block
  6979.     SI:DI = handle of DPMI memory block
  6980. Return: DX = 0000h on error, unchanged if succcessful
  6981. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  6982.       as version 1.000, while the version distributed with BC++ 3.0
  6983.       identifies itself as version 1.0; the former is 10864 bytes, the
  6984.       latter 22180 bytes.
  6985. SeeAlso: AX=FB42h/BX=0002h
  6986. --------E-2FFB42BX0008-----------------------
  6987. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  6988.     AX = FB42h
  6989.     BX = 0008h
  6990.     ES:SI -> memory block info (see #2799)
  6991. Return: ???
  6992. SeeAlso: AX=FB42h/BX=0009h
  6993. --------E-2FFB42BX0009-----------------------
  6994. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  6995.     AX = FB42h
  6996.     BX = 0009h
  6997.     ES:SI -> memory block info (see #2799)
  6998.     ???
  6999. Return: ???
  7000. SeeAlso: AX=FB42h/BX=0008h"3.0"
  7001. --------E-2FFB42BX000A-----------------------
  7002. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  7003.     AX = FB42h
  7004.     BX = 000Ah
  7005.     CX = 0001h
  7006.     DX = ???
  7007.     SI = ???
  7008. Return: after user exits subshell
  7009. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  7010.       function is not available in protected mode.
  7011.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  7012.       version also adds a DPMI host and DOS extender.
  7013. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  7014. --------E-2FFB42BX000B-----------------------
  7015. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  7016.     AX = FB42h
  7017.     BX = 000Bh
  7018. --------E-2FFB42BX000C-----------------------
  7019. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  7020.     AX = FB42h
  7021.     BX = 000Ch
  7022.     ES:SI -> memory block info ??? (see #2799)
  7023. Return: DX = status???
  7024. SeeAlso: AX=FB42h/BX=000Fh
  7025. --------E-2FFB42BX000D-----------------------
  7026. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  7027.     AX = FB42h
  7028.     BX = 000Dh
  7029.     CX = number of words to copy from protected-mode to real mode stack
  7030.     DL = interrupt number
  7031.     DH = flags
  7032.         bit 0: reset the interrupt controller and A20 line
  7033.     ES:DI -> real-mode call structure (see #2819 at INT 31/AX=0300h)
  7034. Return: CX = status
  7035.         0000h successful
  7036.         0001h failed
  7037. SeeAlso: INT 31/AX=0300h
  7038. --------E-2FFB42BX000E-----------------------
  7039. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  7040.     AX = FB42h
  7041.     BX = 000Eh
  7042.     DS:DX -> ASCIZ or CR-terminated name of ???
  7043. Return: CX = selector of DPMILOAD data (see #2802) corresponding to name,
  7044.           0000h on error
  7045. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  7046. --------E-2FFB42BX000F-----------------------
  7047. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  7048.     AX = FB42h
  7049.     BX = 000Fh
  7050.     ES:SI -> memory block info (see #2799)
  7051. Return: ???
  7052. SeeAlso: AX=FB42h/BX=000Ch
  7053. --------E-2FFB42BX0010-----------------------
  7054. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  7055.     AX = FB42h
  7056.     BX = 0010h
  7057.     DX = segment number
  7058. Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h)
  7059.         0000h successful
  7060.         DX = selector number for descriptor
  7061.         0008h failed
  7062. SeeAlso: AX=FB42h/BX=0023h
  7063. --------E-2FFB42BX0011-----------------------
  7064. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7065.     AX = FB42h
  7066.     BX = 0011h
  7067.     CX = selector of DPMILOAD data (see #2802)
  7068.     ???
  7069. Return: DX = status (0000h,0002h,FFFEh) (see also #2801)
  7070.         0000h successful
  7071.         AX:BX -> ??? name
  7072.         FFFEh ??? error
  7073. --------E-2FFB42BX0012-----------------------
  7074. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7075.     AX = FB42h
  7076.     BX = 0012h
  7077.     CX = selector for ???
  7078. Return: CX = selector for ???
  7079. --------E-2FFB42BX0013-----------------------
  7080. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7081.     AX = FB42h
  7082.     BX = 0013h
  7083.     CX = selector of DPMILOAD data (see #2802)
  7084.     DX = 1-based index of ???
  7085. Return: CX = status (0000h,0002h,FFF9h) (see also #2801)
  7086.         0000h successful
  7087.         BX = ??? or 0000h
  7088.         FFF9h ??? error
  7089. --------E-2FFB42BX0014-----------------------
  7090. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK
  7091.     AX = FB42h
  7092.     BX = 0014h
  7093.     CX = 0001h
  7094. Return: BX = 0000h if installed
  7095. Note:    unlike most of the DPMILOAD functions, this call is available only in
  7096.       real or V86 mode
  7097. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah
  7098. --------E-2FFB42BX0015-----------------------
  7099. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  7100.     AX = FB42h
  7101.     BX = 0015h
  7102.     CX = 0001h
  7103. Return: ???
  7104. Note:    unlike most of the DPMILOAD functions, this call is available only in
  7105.       real or V86 mode
  7106. SeeAlso: AX=FB42h/BX=000Ah
  7107. --------E-2FFB42BX0016-----------------------
  7108. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  7109.     AX = FB42h
  7110.     BX = 0016h
  7111.     CX = selector of DPMILOAD data (see #2802)
  7112. Return: DX = status (see also AX=FB42h/BX=0004h)
  7113.         0000h successful
  7114.         CX = ???
  7115. --------E-2FFB42BX0017-----------------------
  7116. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7117.     AX = FB42h
  7118.     BX = 0017h
  7119.     CX = ???
  7120.     DX = ???
  7121.     ???
  7122. Return: DX = status (0000h,0001h) (see #2801)
  7123. --------E-2FFB42BX0018-----------------------
  7124. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  7125.     AX = FB42h
  7126.     BX = 0018h
  7127.     CX = ???
  7128. --------E-2FFB42BX0019-----------------------
  7129. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7130.     AX = FB42h
  7131.     BX = 0019h
  7132.     CX = selector for ???
  7133.     ???
  7134. Return: DX = status (see also AX=FB42h/BX=0004h)
  7135.         0000h successful
  7136.         CX = selector for ???
  7137. --------E-2FFB42BX001A-----------------------
  7138. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7139.     AX = FB42h
  7140.     BX = 001Ah
  7141.     CX = selector for ???
  7142.     ???
  7143. Return: DX = status (see also AX=FB42h/BX=0004h)
  7144.         0000h successful
  7145.         0004h failed
  7146.     CX:BX -> ???
  7147. --------E-2FFB42BX001B-----------------------
  7148. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7149.     AX = FB42h
  7150.     BX = 001Bh
  7151.     CX = selector of DPMILOAD data (see #2802)
  7152.     DX = offset of ???
  7153. Return: DX = status (0000h,0002h) (see also #2801)
  7154.         0000h successful
  7155.         BX = selector for ???
  7156.         CX = selector for ???
  7157. --------E-2FFB42BX001C-----------------------
  7158. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7159.     AX = FB42h
  7160.     BX = 001Ch
  7161.     ES = selector for DPMILOAD data (see #2802)
  7162.     CX = 1-based index of ???
  7163.     DX = 1-based index of ???
  7164. Return: DX = status (0000h,0002h,FFF9h) (see #2801)
  7165. --------E-2FFB42BX001D-----------------------
  7166. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  7167.     AX = FB42h
  7168.     BX = 001Dh
  7169. Return: CX:DX = ???
  7170. --------E-2FFB42BX001E-----------------------
  7171. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7172.     AX = FB42h
  7173.     BX = 001Eh
  7174.     CX = ???
  7175.     ???
  7176. Return: DX = status (see also AX=FB42h/BX=0004h)
  7177.         0000h successful
  7178.         FFF7h ??? error
  7179.     CX:BX -> ???
  7180. --------E-2FFB42BX001F-----------------------
  7181. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  7182.     AX = FB42h
  7183.     BX = 001Fh
  7184.     DS:DX -> 8-character name of ???
  7185.     ???
  7186. Return: CX = selector of DPMILOAD data (see #2802) for ???
  7187.         0000h on error
  7188. SeeAlso: AX=FB42h/BX=000Eh
  7189. --------E-2FFB42BX0020-----------------------
  7190. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  7191.     AX = FB42h
  7192.     BX = 0020h
  7193. Return: DX = ??? (always 0000h)
  7194. --------E-2FFB42BX0021-----------------------
  7195. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  7196.     AX = FB42h
  7197.     BX = 0021h
  7198.     CL = exception number (00h-1Fh)
  7199. Return: DX = status (see also AX=FB42h/BX=0004h)
  7200.         0000h successful
  7201.         AX:BX = selector:offset of handler
  7202.         FFF2h unable to get exception handler vector
  7203. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  7204. --------E-2FFB42BX0022-----------------------
  7205. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  7206.     AX = FB42h
  7207.     BX = 0022h
  7208.     CL = exception number (00h-1Fh)
  7209.     SI:DX = selector:offset of new handler
  7210. Return: DX = status (0000h,0004h,FFF2h) (see #2801)
  7211. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  7212. --------E-2FFB42BX0023-----------------------
  7213. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  7214.     AX = FB42h
  7215.     BX = 0023h
  7216.     CX = selector
  7217. Return: DX = status (see also AX=FB42h/BX=0004h)
  7218.         0000h successful
  7219.         CX = real-mode segment number
  7220.         FFF2h descriptor has invalid base address for real-mode segment
  7221. SeeAlso: AX=FB42h/BX=0010h
  7222. --------E-2FFB42BX0024-----------------------
  7223. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  7224.     AX = FB42h
  7225.     BX = 0024h
  7226.     CL = interrupt number
  7227. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  7228.     AX:BX = selector:offset of handler
  7229. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  7230. --------E-2FFB42BX0025-----------------------
  7231. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  7232.     AX = FB42h
  7233.     BX = 0025h
  7234.     CL = interrupt number
  7235.     SI:DX = selector:offset of new handler
  7236. Return: DX = status (0000h,0004h,FFF2h) (see #2801)
  7237. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  7238. --------E-2FFB42BX0026-----------------------
  7239. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  7240.     AX = FB42h
  7241.     BX = 0026h
  7242.     CX = selector of DPMILOAD data (see #2802)
  7243.     DX = 1-based index of ???
  7244.     ???
  7245. Return: DX = status (0000h,0002h,FFF9h) (see #2801)
  7246.         0000h successful
  7247.         BX = offset of ??? within data structure
  7248. --------E-2FFB42BX0027-----------------------
  7249. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  7250.     AX = FB42h
  7251.     BX = 0027h
  7252.     CX = selector of DPMILOAD data (see #2802)
  7253.     DX = offset of ???
  7254. Return: DX = status (see also AX=FB42h/BX=0004h)
  7255.         0000h successful
  7256.         BX = ???
  7257. --------E-2FFB42BX0080-----------------------
  7258. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  7259.     AX = FB42h
  7260.     BX = 0080h
  7261.     ???
  7262. Return: AX = ???
  7263.     ???
  7264. --------E-2FFB42BX0081-----------------------
  7265. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  7266.     AX = FB42h
  7267.     BX = 0081h
  7268.     ???
  7269. Return: AX = ???
  7270.     ???
  7271. --------E-2FFB42BX1001-----------------------
  7272. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  7273.     AX = FB42h
  7274.     BX = 1001h
  7275. Return: BX = 0000h
  7276. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  7277. --------E-2FFB42BX1002-----------------------
  7278. INT 2F U - Borland RTM.EXE 1.0 - EXECUTE COMPILED PROGRAM
  7279.     AX = FB42h
  7280.     BX = 1002h
  7281.     DX = 0014h ???
  7282.     ???
  7283. Return: AX = nonzero if successful
  7284.         AH = child program exit method??? (usually 4Ch)
  7285.         AL = child program exit code (Errorlevel)
  7286.     AX = 0000h on load error
  7287.         DX = error code (0000h-0027h) (see #3886)
  7288. SeeAlso: AX=FB42h/BX=1001h
  7289.  
  7290. (Table 3886)
  7291. Values for RTM.EXE error code:
  7292.  01h    out of memory
  7293.  02h    out of selectors
  7294.  03h    out of internal tables
  7295.  10h    internal error
  7296.  18h    internal error
  7297.  1Ah    internal error
  7298.  1Bh    internal error
  7299.  1Ch    internal error
  7300.  20h    invalid dynamic link
  7301.  21h    internal error
  7302.  22h    unable to open file
  7303.  23h    invalid .EXE format
  7304.  24h    wrong version
  7305.  25h    unable to initialize 
  7306.  26h    DLL initialization error
  7307.  other    unrecognized error
  7308. --------E-2FFB42BX1003-----------------------
  7309. INT 2F U - Borland RTM.EXE 1.0 - ???
  7310.     AX = FB42h
  7311.     BX = 1003h
  7312.     ???
  7313. Return: ???
  7314. SeeAlso: AX=FB42h/BX=1001h
  7315. --------E-2FFB43-----------------------------
  7316. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  7317.     AX = FB43h
  7318.     BX = subfunction (at least 0000h-000Eh)
  7319. Notes:    this function is only present in protected mode; it does nothing but
  7320.       an immediate IRET
  7321.     DPMILOAD.EXE itself calls various subfunctions:
  7322.         subfunction 0004h is called with CX=selector of ???, DI=selector
  7323.           of DPMILOAD data
  7324.         subfunction 0008h is called with CX=selector of DPMILOAD data
  7325. SeeAlso: AX=FB42h/BX=0001h
  7326. --------G-2FFB43BX0100-----------------------
  7327. INT 2F PU - Borland TDX - INSTALLATION CHECK
  7328.     AX = FB43h
  7329.     BX = 0100h
  7330. Return: BX = FB43h if loaded
  7331. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  7332. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  7333.       should install their own stack and general protection exception
  7334.       handlers, or allow TDX to handle those exceptions
  7335. --------a-2FFB64-----------------------------
  7336. INT 2F U - AutoBraille v1.1A - GET ???
  7337.     AX = FB64h
  7338. Return: AX = ??? (0006h seen)
  7339. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  7340. --------E-2FFBA1BX0081-----------------------
  7341. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  7342.     AX = FBA1h
  7343.     BX = 0081h
  7344.     ES:DI -> 16-byte buffer
  7345. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  7346. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  7347. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  7348.       extender was moved into DPMILOAD.
  7349. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h
  7350. SeeAlso: INT 21/AX=4403h"AI Architects"
  7351. --------E-2FFBA1BX0082-----------------------
  7352. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  7353.     AX = FBA1h
  7354.     BX = 0082h
  7355.     ES:DI -> response buffer (see #2806)
  7356. Return: ES:DI buffer filled
  7357. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  7358.  
  7359. Format of TKERNEL response buffer:
  7360. Offset    Size    Description    (Table 2806)
  7361.  00h  4 BYTEs    signature "IABH"
  7362.  04h    DWORD    pointer to FAR extender entry point (see #2807)
  7363.  
  7364. (Table 2807)
  7365. Call TKERNEL entry point with:
  7366.     AX = function number
  7367.         0000h initialize???
  7368.         STACK:    WORD  ???
  7369.         Return: AX = status???
  7370.             STACK unchanged
  7371.         0001h get version???
  7372.         Return: AX = 0200h for v2.0.34
  7373.         0002h get ???
  7374.         Return: AX = ??? (011Eh or 0182h seen)
  7375.         0003h load protected-mode executable
  7376.         STACK:    DWORD -> ASCIZ filename of executable
  7377.             DWORD    ???
  7378.             DWORD -> program arguments (counted string plus CR)
  7379.             DWORD -> environment for protected-mode executable
  7380.                 (terminated with two consecutive NULs)
  7381.             DWORD -> WORD buffer for ???
  7382.         Return: AX = status???
  7383.             STACK unchanged
  7384.         0004h get descriptor
  7385.         STACK:    WORD    selector for which to get descriptor
  7386.             WORD    segment number (when running in real mode)
  7387.             DWORD -> buffer for descriptor
  7388.         Return: CF clear if successful
  7389.                 buffer filled
  7390.             CF set on error
  7391.                 AX destroyed???
  7392.             STACK unchanged
  7393.         0005h ???
  7394.         STACK:    WORD    selector for ???
  7395.             WORD    subfunction number???
  7396.                 0000h run previously-loaded program???
  7397.                 0001h ??? (similar to 0000h)
  7398.                 0002h
  7399.                 0003h
  7400.                 0005h ??? (similar to 0000h and 0001h)
  7401.         Return: AX = status???
  7402.             STACK unchanged
  7403.         0006h ???
  7404.         STACK:    WORD ???
  7405.             DWORD -> WORD (call) max iterations of ???
  7406.                       (ret) remaining iterations
  7407.         Return: AX = ???
  7408.             STACK unchanged
  7409.         0007h unused
  7410.         Return: AX = 0001h
  7411.         0008h unused
  7412.         Return: AX = 0001h
  7413.         0009h copy protected-mode memory into conventional memory
  7414.         STACK:    WORD    selector for source segment
  7415.             WORD    segment of source if in real mode???
  7416.             DWORD    offset of source
  7417.             WORD    number of bytes to copy
  7418.             DWORD -> low-memory destination
  7419.         Return: AX = status
  7420.             STACK unchanged
  7421.         000Ah copy conventional memory into protected-mode memory
  7422.         STACK:    WORD    selector for destination segment
  7423.             WORD    segment of destination if in real mode???
  7424.             DWORD    offset of destination
  7425.             WORD    number of bytes to copy
  7426.             DWORD -> low-memory source
  7427.         Return: AX = status
  7428.             STACK unchanged
  7429.         000Bh get ??? pointers
  7430.         STACK:    WORD desired pointer
  7431.                 0000h get ???
  7432.                 0002h get protected-mode CR3
  7433.                 0003h get 4K page table buffer pointer
  7434.                 else Return: DX:AX = FFFFh:FFFFh
  7435.         Return: DX:AX = requested pointer
  7436.             STACK unchanged
  7437.         000Ch set ??? pointers
  7438.         STACK:    WORD desired pointer
  7439.                 0000h set ???
  7440.                 0002h set protected-mode CR3
  7441.                 0003h set 4K page table buffer pointer
  7442.                 else ignore
  7443.             DWORD new value for pointer
  7444.         Return: STACK unchanged
  7445.         000Dh get ??? pointers
  7446.         STACK:    WORD desired pointer
  7447.                 0000h get ???
  7448.                 0001h get ???
  7449.                 0002h get ???
  7450.                 0003h get ???
  7451.                 0004h get ???
  7452.                 0005h get ???
  7453.                 0006h get ???
  7454.                 0007h get ???
  7455.                 else Return: DX:AX = FFFFh:FFFFh
  7456.         Return: DX:AX = desired pointer
  7457.             STACK unchanged
  7458.         000Eh set ??? pointer
  7459.         STACK:    WORD desired pointer
  7460.                 0000h set ???
  7461.                 0001h set ???
  7462.                 0002h set ???
  7463.                 0003h set ???
  7464.                 0004h set ???
  7465.                 0005h set ???
  7466.                 0006h set ???
  7467.                 0007h set ???
  7468.                 else Return: DX:AX = FFFFh:FFFFh
  7469.         Return: STACK unchanged
  7470.         000Fh get ???
  7471.         Return: AX = ??? (seen 0008h)
  7472.         0010h get ???
  7473.         Return: AX = ???
  7474.         0011h determine whether selector is valid
  7475.         STACK:    WORD    possible selector
  7476.         Return: AX = selector or 0000h if invalid
  7477.             STACK unchanged
  7478.         0012h get physical address
  7479.         STACK:    WORD    selector for desired segment
  7480.             WORD    segment number if in real mode
  7481.             DWORD    offset within segment
  7482.         Return: DX:AX = 32-bit physical address or 00000000h on error
  7483.             BX destroyed
  7484.             STACK unchanged
  7485.         0013h ???
  7486.         Note:    normally jumps to code for function 0012h
  7487.         0014h copy protected-mode memory to conventional memory, with ???
  7488.         STACK:    WORD    selector for source segment
  7489.             WORD    segment of source if in real mode???
  7490.             DWORD    offset of source
  7491.             WORD    number of bytes to copy
  7492.             DWORD -> low-memory destination
  7493.         Return: AX = status???
  7494.             STACK unchanged
  7495.         0015h copy conventional memory to protected-mode memory, with ???
  7496.         STACK:    WORD    selector for destination segment
  7497.             WORD    segment of destination if in real mode???
  7498.             DWORD    offset of destination
  7499.             WORD    number of bytes to copy
  7500.             DWORD -> low-memory source
  7501.         Return: AX = status???
  7502.             STACK unchanged
  7503.         0016h set ??? pointer
  7504.         STACK:    WORD    unused
  7505.             DWORD -> ??? or 0000h:0000h
  7506.         Return: AX = 0000h
  7507.             STACK unchanged
  7508.         0017h allocate real-mode procedure???
  7509.         STACK:    DWORD    ASCIZ name of procedure
  7510.             DWORD ???
  7511.             DWORD    address of subroutine to invoke
  7512.         Return: AX = status
  7513.                 0032h procedure by that name exists
  7514.                 0033h no more real-mode procedures available
  7515.             DX destroyed
  7516.             STACK unchanged
  7517.         0018h unused
  7518.         Return: AX = 0001h
  7519.         0019h get parameter block
  7520.         Return: DX:AX -> parameter block (format unknown at this time,
  7521.                   but 92h bytes)
  7522.                   (preceded by signature "!!PARAM-BLOCK!!")
  7523.         001Ah get ???
  7524.         Return: AX = ??? (0148h seen)
  7525.         001Bh free real-mode procedure???
  7526.         STACK:    DWORD -> ASCIZ name of procedure
  7527.         Return: ???
  7528.             STACK unchanged
  7529.         001Ch check whether packets from protected mode task pending
  7530.         Return: AX = 0001h if packets pending, 0000h if not
  7531.         001Dh set ???
  7532.         STACK:    DWORD ??? or 0000h:0000h
  7533.         Return: AX,BX destroyed
  7534.             STACK unchanged
  7535.         001Eh ???
  7536.         STACK:    WORD ??? (high byte ignored)
  7537.             DWORD -> data structure (below)
  7538.         Return: AX,BX,CX,DX destroyed
  7539.             data structure updated
  7540.             STACK unchanged
  7541.         Format of data structure:
  7542.         Offset    Size    Description
  7543.          00h  2 BYTEs    unused
  7544.          02h    WORD    ???
  7545.          04h    WORD    ???
  7546.          06h    WORD    ???
  7547.          08h  2 BYTEs    unused
  7548.          0Ah    WORD    ???
  7549.          0Ch    WORD    (call) ???
  7550.                 (ret) offset of this data structure (BUG?)
  7551.         001Fh set ???
  7552.         STACK:    WORD ??? (set to 0001h if zero)
  7553.         Return: AX destroyed
  7554.             STACK unchanged
  7555.         0020h ???
  7556.         STACK:    DWORD -> ??? (8 bytes of data)
  7557.         Return: AX = ???
  7558.             STACK unchanged
  7559.         0021h ???
  7560.         STACK:    DWORD -> ??? (8 bytes of data)
  7561.             WORD    ???
  7562.             WORD    ???
  7563.         Return: AX = ???
  7564.             STACK unchanged
  7565.         0022h ???
  7566.         STACK:    DWORD -> ??? (8 bytes of data)
  7567.             DWORD -> 4-byte buffer for results
  7568.         Return: AX = ???
  7569.             STACK unchanged
  7570.         0023h ???
  7571.         STACK:    DWORD -> ??? (8 bytes of data)
  7572.         Return: AX = ???
  7573.             STACK unchanged
  7574.         0024h set ???
  7575.         STACK:    WORD ???
  7576.         Return: AX destroyed
  7577.             STACK unchanged
  7578.         0025h get ???
  7579.         Return: AX = ??? (value set with func 0024h)
  7580.         0026h BUG: jumps to hyperspace due to fencepost error
  7581.         FFFFh set DOS memory management functions
  7582.         BX:SI -> FAR routine for allocating DOS memory
  7583.               (called with AH=48h,BX=number of paragraphs to alloc;
  7584.               returns CF clear, AX=segment of allocated memory, or
  7585.                   CF set on error)
  7586.         CX:DI -> FAR routine for freeing DOS memory
  7587.               (called with AH=49h,ES=segment of block to free;
  7588.               returns CF set on error, AX=error code)
  7589.         Note: each of these pointers normally points at INT 21/RETF
  7590.         other Return: AX = 0001h
  7591. Note:    BX may be destroyed by any of the API calls
  7592. --------E-2FFBA1BX0084-----------------------
  7593. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  7594.     AX = FBA1h
  7595.     BX = 0084h
  7596.     ES:DI -> response buffer (see #2808)
  7597. Return: ES:DI buffer filled
  7598. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  7599.  
  7600. Format of TKERNEL response buffer:
  7601. Offset    Size    Description    (Table 2808)
  7602.  00h  4 BYTEs    signature "IABH"
  7603.  04h    WORD    success indicator
  7604.         0001h failed (INT 2F hooked by another program)
  7605.         unchanged if successful
  7606.  06h    WORD    segment of ???
  7607.  08h    WORD    segment of ??? memory block to free if nonzero
  7608.  0Ah    WORD    segment of ??? memory block to free if nonzero
  7609. --------s-2FFBFBES0000-----------------------
  7610. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  7611.     AX = FBFBh
  7612.     ES = 0000h
  7613. Return: ES nonzero if installed
  7614.         ES:BX -> entry point data structure (see #2809)
  7615. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  7616.  
  7617. Format of SoundBlaster entry point data structure:
  7618. Offset    Size    Description    (Table 2809)
  7619.  00h  3 BYTEs    signature "FB "
  7620.  03h    BYTE    driver major version number???
  7621.  04h    DWORD    speech driver entry point (see #2810)
  7622.  08h 24 BYTEs    ???
  7623.  20h  ? BYTEs    data buffer for calling speech driver
  7624.           (can be 117 bytes or more)
  7625.  
  7626. (Table 2810)
  7627. Call SoundBlaster speech driver entry point with:
  7628.     AL = function
  7629.         07h speak a string
  7630.         data buffer (see #2809) contains:
  7631.             BYTE  length of string
  7632.               N BYTEs string to speak
  7633. --------K-2FFD12-----------------------------
  7634. INT 2F - KS/KEYSTKCT.EXE - INSTALLATION CHECK
  7635.     AX = FD12h
  7636. Return: AX = 0093h if installed
  7637.         ES = resident code segment
  7638.         ES:CX -> internal "putbuf" routine
  7639. Program: KS/KEYSTKCT.EXE is a key stacking utility (4DOS KEYSTACK.SYS
  7640.       look-alike) by Martin Gerdes, published in c't 11/1991, which can be
  7641.       loaded as a device driver or as a TSR. It does not emulate 4DOS
  7642.       KSTACK API
  7643. Note:    the default buffer size is 128 keys
  7644. --------N-2FFE00BX4454-----------------------
  7645. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  7646.     AX = FE00h
  7647.     BX = 4454h ("DT")
  7648.     CX = 4B52h ("KR")
  7649.     DX = 4E4Dh ("NM")
  7650. Return: AL = FFh if installed
  7651.        BX = 524Eh ("RM")
  7652.        CX = 4D44h ("MD")
  7653.        DX = 544Bh ("TK")
  7654. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  7655. SeeAlso: AX=FE08h
  7656. --------N-2FFE00BX4454-----------------------
  7657. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  7658.     AX = FE00h
  7659.     BX = 4454h ("DT")
  7660.     CX = 4B52h ("KR")
  7661.     DX = 544Dh ("TM")
  7662. Return: AL = FFh if installed
  7663.        BX = 5254h ("RT")
  7664.        CX = 4D44h ("MD")
  7665.        DX = 544Bh ("TK")
  7666. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  7667. SeeAlso: AX=FE08h
  7668. --------U-2FFE00DI4E55-----------------------
  7669. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  7670.     AX = FE00h
  7671.     DI = 4E55h ("NU")
  7672.     SI = TSR identifier (see #2811)
  7673. Return: SI = TSR reply
  7674.         lowercase version of SI on entry (i.e. SI ORed with 2020h)
  7675.         execpt SMARTCAN v8.0, which returns SI=6673h ('fs')
  7676.     AH = status
  7677.         00h installed but disabled internally
  7678.         01h installed and enabled
  7679.     AL = installed product
  7680.         00h NCACHE-x or DISKREET
  7681.         01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed
  7682.         02h NCACHE2 / SMARTCAN
  7683.         45h DISKMON v5 installed
  7684.     BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only)
  7685.           (see #2812,#2813)
  7686.     CX = segment of resident portion
  7687.         FFFFh if completely loaded high (NCACHE)
  7688.     DI may be destroyed
  7689. ---FILESAVE/EP---
  7690.     DL = ??? (apparently always 00h)
  7691. ---DISKMON---
  7692.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7])
  7693. Notes:    the value returned in CX is incorrect for NCACHE 6.00
  7694.     all Norton Caches install as SMARTAAR drivers like SMARTDRV v3
  7695.     NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check
  7696.     to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h)
  7697. SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  7698. SeeAlso: INT 21/AX=4402h"SMARTDRV"
  7699.  
  7700. (Table 2811)
  7701. Values for Norton Utilities TSR identifier:
  7702.  4346h    ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV
  7703.  4353h    ("CS") NCACHE-S (v5 only)
  7704.  4443h    ("DC") DISKREET
  7705.  444Dh    ("DM") DISKMON
  7706.  4653h    ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+)
  7707.  
  7708. Format of DISKMON.INI file:
  7709. Offset    Size    Description    (Table 2812)
  7710. -6Ch 108 BYTEs    (in memory copy only)
  7711.         list of filenames which are always protected:
  7712.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  7713.           MIO.SYS/IO.BIN, COMMAND.COM
  7714.  00h    BYTE    ??? always 01h
  7715.  01h    BYTE    disk light (00h off, 01h on)
  7716.  02h    BYTE    disk protection (00h off, 01h on)
  7717.  03h    BYTE    protected areas
  7718.         01h system area
  7719.         02h files
  7720.         03h system area and files
  7721.         04h entire disk
  7722.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  7723.  05h 27 BYTEs    filename extension list (9 entries)
  7724.         (lowercase, blank padded or = 000000h)
  7725.  20h 240 BYTEs    filename list (20 entries)
  7726.         (lowercase, name and extension blank padded, with '.')
  7727. Note:    CX:0508h -> copy in installed TSR (v5)
  7728.     CX:052Fh -> copy in installed TSR (v6)
  7729.     CX:04E0h -> copy in installed TSR (v7-v8)
  7730.  
  7731. Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file:
  7732. Offset    Size    Description    (Table 2813)
  7733.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  7734.  00h    BYTE    drives    A: - H:
  7735.  01h    BYTE    drives    I: - P:
  7736.  02h    BYTE    drives    Q: - X:
  7737.  03h    BYTE    drives    Y: - Z:
  7738.  04h    BYTE    which files to protect
  7739.         00h all files
  7740.         01h all files with extension in list
  7741.         02h all files except those with extension in list
  7742.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  7743.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  7744.  21h    WORD    number of days after which files are purged (0 = never)
  7745.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  7746. Note:    CX:03D2h -> copy in installed TSR (v5)
  7747.     CX:03F5h -> copy in installed TSR (v6)
  7748.     CX:0434h -> copy in installed TSR (v7-v8)
  7749. --------U-2FFE00DX474F-----------------------
  7750. INT 2F - GO! v3.22+ - API
  7751.     AX = FE00h
  7752.     DX = 474Fh ('GO')
  7753.     SI = function number
  7754.         0063h (BCD for '?') installation check
  7755.         0078h (BCD for 'N') non-registered search (two levels only)
  7756.         0082h (BCD for 'R') reserved for registered version
  7757.         0083h (BCD for 'S') reserved for registered version
  7758.         0085h (BCD for 'U') uninstall
  7759.     BX:CX -> buffer (for search functions)
  7760.         buffer filled with search spec, i.e. "APL" to get first
  7761.           directory containing the substring APL, ":\APL" to find
  7762.           the first top-level directory beginning with the letters
  7763.           APL
  7764. Return: BX:CX buffer filled with result (search functions only)
  7765.         result is counted ASCIZ directory name, empty string if
  7766.         no matches (i.e. first byte is length of name, followed by
  7767.         name)
  7768. Program: GO! is a shareware directory locator TSR by Steve Ryckman
  7769. Note:    the application-supplied buffer for the requests and results which
  7770.       BX:CX points at must lie outside the conventional (low-640K)
  7771.       memory, since the TSR swaps memory on pop-up; a common location is
  7772.       the last 96 bytes of the video memory or a UMB
  7773. --------U-2FFE01DI4E55-----------------------
  7774. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  7775.     AX = FE01h
  7776.     DI = 4E55h ("NU")
  7777.     SI = TSR identifier (see #2811)
  7778. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  7779.     AX = status
  7780.         0002h successful (DISKMON, FILESAVE, EP)
  7781.         FE00h successful (NCACHE-x, DISKREET)
  7782. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  7783.       report generated by the programs still indicates the previous state,
  7784.       and DISKMON.INI is not updated
  7785.     apparently has no effect on DISKREET
  7786. SeeAlso: AX=FE00h,AX=FE02h
  7787. --------U-2FFE02DI4E55-----------------------
  7788. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  7789.     AX = FE02h
  7790.     DI = 4E55h ("NU")
  7791.     SI = TSR identifier (see #2811)
  7792. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  7793.     AX = status
  7794.         0004h successful (DISKMON, FILESAVE)
  7795.         FE00h successful (NCACHE-x, DISKREET)
  7796. Notes:    (see also AX=FE01h)
  7797.     this function appears to be unsafe, as the cache buffers are not
  7798.       flushed
  7799. SeeAlso: AX=FE00h,AX=FE01h
  7800. --------U-2FFE03DI4E55-----------------------
  7801. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  7802.     AX = FE03h
  7803.     DI = 4E55h ("NU")
  7804.     SI = TSR identifier (see #2811)
  7805. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  7806.     AX = status
  7807.         0006h successful???
  7808. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  7809.     useful for flushing NCACHE before rebooting
  7810. SeeAlso: AX=FE00h,AX=FE10h
  7811. --------U-2FFE04DI4E55-----------------------
  7812. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  7813.     AX = FE04h
  7814.     DI = 4E55h ("NU")
  7815.     SI = TSR identifier (see #2811)
  7816. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7817.     AX = status
  7818.         0008h successful???
  7819. SeeAlso: AX=FE00h
  7820. --------U-2FFE05DI4E55-----------------------
  7821. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  7822.     AX = FE05h
  7823.     DI = 4E55h ("NU")
  7824.     SI = TSR identifier (see #2811)
  7825. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7826.     AX = status
  7827.         000Ah successful???
  7828. Note:    reportedly dangerous
  7829. SeeAlso: AX=FE00h
  7830. --------N-2FFE08-----------------------------
  7831. INT 2F - PC-NFS ??? - GET ???
  7832.     AX = FE08h
  7833. Return: ES:BX -> ???
  7834. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  7835.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  7836.       to AX=FE00h/DX=544Dh support this function
  7837. SeeAlso: AX=FE00h/BX=4454h
  7838. --------U-2FFE10DI4E55-----------------------
  7839. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  7840.     AX = FE10h
  7841.     DI = 4E55h ("NU")
  7842.     SI = TSR identifier (see #2811)
  7843. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  7844.     AX = status
  7845. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  7846.       detected
  7847. SeeAlso: AX=FE03h
  7848. --------S-2FFEEF-----------------------------
  7849. INT 2F - RTS Control TSR - INSTALLATION CHECK
  7850.     AX = FEEFh
  7851. Return: AX = EFFEh if installed
  7852.         BX = port address
  7853. Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS
  7854.       signal on a COM port during disk accesses to avoid losing incoming
  7855.       data
  7856. --------N-2FFF00-----------------------------
  7857. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  7858.     AX = FF00h
  7859. Return: AL = status
  7860.         00h not installed, OK to install
  7861.         01h not installed, not OK to install
  7862.         FFh installed
  7863. SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware"
  7864. --------N-2FFF01-----------------------------
  7865. INT 2F - Topware Network Operating System - GET VERSION
  7866.     AX = FF01h
  7867. Return: AX = version
  7868. SeeAlso: AX=FF00h,AX=FF02h
  7869. --------N-2FFF02-----------------------------
  7870. INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING
  7871.     AX = FF02h
  7872. Return: ES:BX -> version string
  7873. SeeAlso: AX=FF00h,AX=FF01h
  7874. --------N-2FFF10-----------------------------
  7875. INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK
  7876.     AX = FF10h
  7877. Return: AL = status (00h not installed, 01h installed)
  7878. SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h
  7879. --------N-2FFF11-----------------------------
  7880. INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE
  7881.     AX = FF11h
  7882. Note:    this function is only available on workstations, not on the server
  7883. SeeAlso: AX=FF10h,AX=FF12h
  7884. --------N-2FFF12-----------------------------
  7885. INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE
  7886.     AX = FF12h
  7887. Note:    this function is only available on workstations, not on the server
  7888. SeeAlso: AX=FF10h,AX=FF11h
  7889. --------N-2FFF13-----------------------------
  7890. INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG
  7891.     AX = FF13h
  7892.     CL = new state (00h off, 01h on)
  7893. SeeAlso: AX=FF10h
  7894. --------N-2FFF14-----------------------------
  7895. INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA
  7896.     AX = FF14h
  7897. Note:    this function is only available on workstations, not on the server
  7898. SeeAlso: AX=FF10h,AX=FF15h
  7899. --------N-2FFF15-----------------------------
  7900. INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA
  7901.     AX = FF15h
  7902. Note:    this function is only available on workstations, not on the server
  7903. SeeAlso: AX=FF10h,AX=FF14h
  7904. --------N-2FFF16-----------------------------
  7905. INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN
  7906.     AX = FF16h
  7907.     BL = which to set (00h TopShow, FFh TopTerm)
  7908.     CX = destination screen
  7909.         0000h all stations
  7910.         0000h-00FFh (TopTerm only) send to group CL
  7911.         8001h-80FEh send to station CL
  7912. SeeAlso: AX=FF18h
  7913. --------N-2FFF18-----------------------------
  7914. INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow
  7915.     AX = FF18h
  7916. SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h
  7917. --------N-2FFF23-----------------------------
  7918. INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING
  7919.     AX = FF23h
  7920. SeeAlso: AX=FF00h
  7921. --------N-2FFF27-----------------------------
  7922. INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE
  7923.     AX = FF27h
  7924. Return: AL = type (00h complete version, 01h simple version)
  7925.     BL = "show" functions flag (00h disabled, 01h enabled)
  7926. SeeAlso: AX=FF16h,AX=FF18h
  7927. --------D-30---------------------------------
  7928. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  7929.    the CALL 5 entry point does a FAR jump to here
  7930. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  7931.       memory
  7932. SeeAlso: INT 21/AH=26h
  7933. --------V-30---------------------------------
  7934. INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY
  7935. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  7936.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  7937.       provide a graphical user interface
  7938. SeeAlso: INT 2F/AX=ACF0h
  7939. --------W-30---------------------------------
  7940. INT 30 P - MS Windows 3.1+ - PROTECTED-MODE CALLBACK
  7941. SeeAlso: INT 20"Windows"
  7942. --------D-31---------------------------------
  7943. INT 31 - overwritten by CP/M jump instruction in INT 30
  7944. --------v-31---------------------------------
  7945. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  7946. Note:    if one of the Vacsina viruses is resident, the low byte of this
  7947.       interrupt still contains the last byte of the INT 30 CP/M JMP
  7948.       instruction, but the remaining three bytes are 7Fh 39h followed
  7949.       by the Vacsina version number
  7950. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  7951. --------E-310000-----------------------------
  7952. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  7953.     AX = 0000h
  7954.     CX = number of descriptors to allocate
  7955. Return: CF clear if successful
  7956.         AX = base selector
  7957.     CF set on error
  7958.         AX = error code (DPMI 1.0+) (see #2814)
  7959. Notes:    DPMI is the DOS Protected-Mode Interface
  7960.     the base and limit of the returned descriptors will be 0, and the type
  7961.       will be "data"
  7962.     add the value returned by INT 31/AX=0003h to move to subsequent
  7963.       descriptors if multiple descriptors were allocated
  7964.     not supported by MS Windows 3.0 in Standard mode
  7965. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  7966.  
  7967. (Table 2814)
  7968. Values for DPMI 1.0 error code:
  7969.  0000h-7FFFh DOS error passed through by DPMI
  7970.  8001h    unsupported function
  7971.  8002h    object in wrong state for function
  7972.  8003h    system integrity would be endangered
  7973.  8004h    deadlock detected
  7974.  8005h    pending serialization request cancelled
  7975.  8010h    out of DPMI internal resources
  7976.  8011h    descriptor unavailable
  7977.  8012h    linear memory unavailable
  7978.  8013h    physical memory unavailable
  7979.  8014h    backing store unavailable
  7980.  8015h    callback unavailable
  7981.  8016h    handle unavailable
  7982.  8017h    maximum lock count exceeded
  7983.  8018h    shared memory already serialized exclusively by another
  7984.  8019h    shared memory already serialized shared by another client
  7985.  8021h    invalid value for numeric or flag parameter
  7986.  8022h    invalid segment selector
  7987.  8023h    invalid handle
  7988.  8024h    invalid callback
  7989.  8025h    invalid linear address
  7990.  8026h    request not supported by hardware
  7991. --------E-310001-----------------------------
  7992. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  7993.     AX = 0001h
  7994.     BX = selector to free
  7995. Return: CF clear if successful
  7996.     CF set on error
  7997.         AX = error code (DPMI 1.0+) (8022h) (see #2814)
  7998. Notes:    only one descriptor is freed per call
  7999.     the program's initial CS, DS, and SS descriptors may be freed
  8000.     (DPMI 1.0+) any segment registers containing the freed selector are
  8001.       set to 0000h
  8002.     not supported by MS Windows 3.0 in Standard mode
  8003. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  8004. --------E-310002-----------------------------
  8005. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  8006.     AX = 0002h
  8007.     BX = real mode segment
  8008. Return: CF clear if successful
  8009.         AX = selector corresponding to real mode segment (64K limit)
  8010.     CF set on error
  8011.         AX = error code (DPMI 1.0+) (8011h) (see #2814)
  8012. Notes:    multiple calls for the same real mode segment return the same selector
  8013.     the returned descriptor can never be modified or freed
  8014.     not supported by MS Windows 3.0 in Standard mode
  8015. --------E-310003-----------------------------
  8016. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  8017.     AX = 0003h
  8018. Return: CF clear
  8019.         AX = value to add to get next sequential selector
  8020. Notes:    the increment will be a power of two
  8021.     not supported by MS Windows 3.0 in Standard mode
  8022. SeeAlso: AX=0000h
  8023. --------E-310004-----------------------------
  8024. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  8025.     AX = 0004h
  8026.     BX = selector to lock (prevent paging)
  8027. Return: ???
  8028. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8029.       specification, this function is called by MS Windows TASKMAN,
  8030.       PROGMAN, and KERNEL
  8031. SeeAlso: AX=0005h,AX=0600h
  8032. --------E-310005-----------------------------
  8033. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  8034.     AX = 0005h
  8035.     BX = selector to unlock (permit paging)
  8036. Return: ???
  8037. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8038.       specification, this function is called by MS Windows TASKMAN,
  8039.       PROGMAN, and KERNEL
  8040. SeeAlso: AX=0004h,AX=0601h
  8041. --------E-310006-----------------------------
  8042. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  8043.     AX = 0006h
  8044.     BX = selector
  8045. Return: CF clear if successful
  8046.         CX:DX = linear base address of segment
  8047.     CF set on error
  8048.         AX = error code (DPMI 1.0+) (8022h) (see #2814)
  8049. Note:    not supported by MS Windows 3.0 in Standard mode
  8050. SeeAlso: AX=0007h,INT 21/AX=3504h
  8051. --------E-310007-----------------------------
  8052. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  8053.     AX = 0007h
  8054.     BX = selector
  8055.     CX:DX = linear base address
  8056. Return: CF clear if successful
  8057.     CF set on error
  8058.         AX = error code (DPMI 1.0+) (8022h,8025h) (see #2814)
  8059. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  8060.     only the low 24 bits of the address will be used by 16-bit DPMI
  8061.       implementations even on a 386 or higher
  8062.     DPMI 1.0+ automatically reloads any segment registers containing the
  8063.       selector being modified
  8064.     not supported by MS Windows 3.0 in Standard mode
  8065. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  8066. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  8067. --------E-310008-----------------------------
  8068. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  8069.     AX = 0008h
  8070.     BX = selector
  8071.     CX:DX = segment limit
  8072. Return: CF clear if successful
  8073.     CF set on error
  8074.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2814)
  8075. Notes:    CX must be zero for 16-bit DPMI implementations
  8076.     limits greater than 1MB must be page aligned (low 12 bits set)
  8077.     only modify descriptors allocated with INT 31/AX=0000h
  8078.     DPMI 1.0+ automatically reloads any segment registers containing the
  8079.       selector being modified
  8080.     not supported by MS Windows 3.0 in Standard mode
  8081. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  8082. SeeAlso: INT 2C/AX=0003h,#0427 at INT 15/AH=89h
  8083. --------E-310009-----------------------------
  8084. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  8085.     AX = 0009h
  8086.     BX = selector
  8087.     CL = access rights/type byte (see #0428 at INT 15/AH=89h)
  8088.     CH = 80386 extended rights/type byte (see #0429 at INT 15/AH=89h)
  8089.         (32-bit DPMI implementations only)
  8090. Return: CF clear if successful
  8091.     CF set on error
  8092.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2814)
  8093. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  8094.     DPMI 1.0+ automatically reloads any segment registers containing the
  8095.       selector being modified
  8096.     not supported by MS Windows 3.0 in Standard mode
  8097. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  8098. SeeAlso: INT 2C/AX=0005h
  8099. --------E-31000A-----------------------------
  8100. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  8101.     AX = 000Ah
  8102.     BX = selector
  8103. Return: CF clear if successful
  8104.         AX = new data selector
  8105.     CF set on error
  8106.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2814)
  8107. Notes:    fails if selector in BX is not a code segment or is invalid
  8108.     use INT 31/AX=0001h to free new selector
  8109.     future changes to the original selector will not be reflected in the
  8110.       returned alias selector
  8111.     not supported by MS Windows 3.0 in Standard mode
  8112. SeeAlso: AX=0001h
  8113. --------E-31000B-----------------------------
  8114. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  8115.     AX = 000Bh
  8116.     BX = LDT selector
  8117.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  8118. Return: CF clear if successful
  8119.         buffer filled
  8120.     CF set on error
  8121.         AX = error code (DPMI 1.0+) (8022h) (see #2814)
  8122. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  8123.     not supported by MS Windows 3.0 in Standard mode
  8124. SeeAlso: AX=000Ch
  8125. --------E-31000C-----------------------------
  8126. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  8127.     AX = 000Ch
  8128.     BX = LDT selector
  8129.     ES:(E)DI -> 8-byte buffer containing descriptor
  8130. Return: CF clear if successful
  8131.     CF set on error
  8132.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2814)
  8133. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  8134.     only modify descriptors allocated with INT 31/AX=0000h
  8135.     DPMI 1.0+ automatically reloads any segment registers containing the
  8136.       selector being modified
  8137.     not supported by MS Windows 3.0 in Standard mode
  8138. SeeAlso: AX=000Bh
  8139. --------E-31000D-----------------------------
  8140. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  8141.     AX = 000Dh
  8142.     BX = LDT selector
  8143. Return: CF clear if successful
  8144.         descriptor allocated
  8145.     CF set on error
  8146.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2814)
  8147. Notes:    free descriptor with INT 31/AX=0001h
  8148.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  8149.       some may already be in use by other applications under DPMI 0.9;
  8150.       DPMI 1.0 guarantees 16 descriptors per client
  8151.     not supported by MS Windows 3.0 in Standard mode
  8152. SeeAlso: AX=0000h,AX=0001h
  8153. --------E-31000E-----------------------------
  8154. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  8155.     AX = 000Eh
  8156.     CX = number of descriptors to copy
  8157.     ES:(E)DI -> descriptor buffer (see #2815)
  8158. Return: CF clear if successful
  8159.         descriptors copied
  8160.     CF set on error
  8161.         AX = error code (8022h) (see #2814)
  8162.         CX = number of descriptors successfully copied
  8163. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  8164.     if the function fails, the first CX descriptors are valid; the
  8165.       remainder are not modified
  8166. SeeAlso: AX=000Bh,AX=000Fh
  8167.  
  8168. Format of DPMI descriptor buffer entry (one per descriptor to get):
  8169. Offset    Size    Description    (Table 2815)
  8170.  00h    WORD    selector (set by client)
  8171.  02h    QWORD    descriptor (set by host)
  8172. --------E-31000F-----------------------------
  8173. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  8174.     AX = 000Fh
  8175.     CX = number of descriptors to copy
  8176.     ES:(E)DI -> descriptor buffer (see #2816)
  8177. Return: CF clear if successful
  8178.         descriptors copied
  8179.     CF set on error
  8180.         AX = error code (8021h,8022h,8025h) (see #2814)
  8181.         CX = number of descriptors successfully copied
  8182. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  8183.     if the function fails, the first CX descriptors are valid; the
  8184.       remainder are not modified
  8185.     DPMI 1.0+ automatically reloads any segment registers containing a
  8186.       selector being modified
  8187. SeeAlso: AX=000Ch,AX=000Eh
  8188.  
  8189. Format of DPMI descriptor buffer entry (one per descriptor to set):
  8190. Offset    Size    Description    (Table 2816)
  8191.  00h    WORD    selector
  8192.  02h    QWORD    descriptor
  8193. --------E-310100-----------------------------
  8194. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  8195.     AX = 0100h
  8196.     BX = number of paragraphs to allocate
  8197. Return: CF clear if successful
  8198.         AX = real mode segment of allocated block
  8199.         DX = first selector for allocated block
  8200.     CF set on error
  8201.         AX = DOS error code (07h,08h) (see #1366 at INT 21/AH=59h/BX=0000h)
  8202.         (DPMI 1.0+) DPMI error code (8011h) (see #2814)
  8203.         BX = size (in paragraphs) of largest available block
  8204. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  8205.       if the caller is a 16-bit program
  8206.     never modify or deallocate returned descriptors
  8207.     not supported by MS Windows 3.0 in Standard mode
  8208. SeeAlso: AX=0101h,AX=0501h
  8209. --------E-310101-----------------------------
  8210. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  8211.     AX = 0101h
  8212.     DX = selector of block
  8213. Return: CF set if successful
  8214.     CF set on error
  8215.         AX = DOS error code (07h,09h) (see #1366 at INT 21/AH=59h/BX=0000h)
  8216. Notes:    all descriptors allocated for the block are automatically freed
  8217.     DPMI 1.0+ automatically zeros any segment registers containing a
  8218.       selector freed by this function
  8219.     not supported by MS Windows 3.0 in Standard mode
  8220. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  8221. --------E-310102-----------------------------
  8222. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  8223.     AX = 0102h
  8224.     BX = new block size in paragraphs
  8225.     DX = selector of block
  8226. Return: CF clear if successful
  8227.     CF set on error
  8228.         AX = DOS error code (07h,08h,09h)
  8229.           (see #1366 at INT 21/AH=59h/BX=0000h)
  8230.         (DPMI 1.0+) DPMI error code (8011h,8022h) (see #2814)
  8231.         BX = maximum block size (in paragraphs) possible
  8232. Notes:    increasing the size of a block past a 64K boundary will fail if the
  8233.       next descriptor in the LDT is already in use
  8234.     shrinking a block past a 64K boundary will cause some selectors to be
  8235.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  8236.       a selector freed by this function
  8237.     not supported by MS Windows 3.0 in Standard mode
  8238. SeeAlso: AX=0100h
  8239. --------E-310200-----------------------------
  8240. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  8241.     AX = 0200h
  8242.     BL = interrupt number
  8243. Return: CF clear
  8244.     CX:DX = segment:offset of real mode interrupt handler
  8245. Note:    the DPMI implementation is required to support all 256 vectors
  8246. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  8247. --------E-310201-----------------------------
  8248. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  8249.     AX = 0201h
  8250.     BL = interrupt number
  8251.     CX:DX = segment:offset of real mode handler
  8252. Return: CF clear
  8253. Note:    all memory that may be touched by a hardware interrupt handler must be
  8254.       locked down with INT 31/AX=0600h
  8255. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  8256. --------E-310202-----------------------------
  8257. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  8258.     AX = 0202h
  8259.     BL = exception number (00h-1Fh)
  8260. Return: CF clear if successful
  8261.         CX:(E)DX = selector:offset of handler
  8262.     CF set on error
  8263.         AX = error code (DPMI 1.0+) (8021h) (see #2814)
  8264. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  8265.     DPMI 1.0+ supports this function only for backward compatibility; use
  8266.        AX=0210h or AX=0211h instead
  8267.     not supported by MS Windows 3.0 in Standard mode
  8268. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  8269. --------E-310203-----------------------------
  8270. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  8271.     AX = 0203h
  8272.     BL = exception number (00h-1Fh)
  8273.     CX:(E)DX = selector:offset of handler
  8274. Return: CF clear if successful
  8275.     CF set on error
  8276.         AX = error code (DPMI 1.0+) (8021h,8022h) (see #2814)
  8277. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  8278.       stack frame on chaining to the next exception handler
  8279.     the handler should return using a FAR return
  8280.     all fault stack frames contain an error code, but it is only valid for
  8281.       exceptions 08h and 0Ah-0Eh
  8282.     handlers will only be called if the exception occurs in protected mode,
  8283.       and the DPMI host does not transparently handle the exception
  8284.     the handler may change certain values on the stack frame
  8285.       (see #2817,#2818)
  8286.     DPMI 1.0+ supports this function only for backward compatibility; use
  8287.        AX=0212h or AX=0213h instead
  8288.     not supported by MS Windows 3.0 in Standard mode
  8289. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  8290.  
  8291. Format of stack frame for 16-bit programs: (offset from SS:SP)
  8292. Offset    Size    Description    (Table 2817)
  8293.  00h    DWORD    return CS:IP (do not change)
  8294.  04h    WORD    error code
  8295.  06h    DWORD    CS:IP of exception
  8296.  0Ah    WORD    flags
  8297.  0Ch    DWORD    SS:SP
  8298.  
  8299. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  8300. Offset    Size    Description    (Table 2818)
  8301.  00h    DWORD    return EIP (do not change)
  8302.  04h    WORD    return CS selector (do not change)
  8303.  06h    WORD    reserved (do not change)
  8304.  08h    DWORD    error code
  8305.  0Ch    DWORD    EIP of exception
  8306.  10h    WORD    CS selector of exception
  8307.  12h    WORD    reserved (do not change)
  8308.  14h    DWORD    EFLAGS
  8309.  18h    DWORD    ESP
  8310.  1Ch    WORD    SS
  8311.  1Eh    WORD    reserved (do not change)
  8312. --------E-310204-----------------------------
  8313. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  8314.     AX = 0204h
  8315.     BL = interrupt number
  8316. Return: CF clear
  8317.     CX:(E)DX = selector:offset of handler
  8318. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  8319.     DPMI implementations are required to support all 256 vectors
  8320.     not supported by MS Windows 3.0 in Standard mode
  8321. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  8322. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  8323. --------E-310205-----------------------------
  8324. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  8325.     AX = 0205h
  8326.     BL = interrupt number
  8327.     CX:(E)DX = selector:offset of handler
  8328. Return: CF clear if successful
  8329.     CF set on error
  8330.         AX = error code (DPMI 1.0+) (8022h) (see #2814)
  8331. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  8332.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  8333.       to the next handler
  8334.     DPMI implementations are required to support all 256 vectors
  8335.     hardware interrupts are reflected to the virtual machine's primary
  8336.       client, software interrupts to the current client
  8337.     not supported by MS Windows 3.0 in Standard mode
  8338. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  8339. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  8340. --------E-310210-----------------------------
  8341. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  8342.     AX = 0210h
  8343.     BL = exception number (00h-1Fh)
  8344. Return: CF clear if successful
  8345.         CX:(E)DX = selector:offset of exception handler
  8346.     CF set on error
  8347.         AX = error code (8021h) (see #2814)
  8348. Note:    DPMI host reflects exception to current client's handler
  8349. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  8350. --------E-310211-----------------------------
  8351. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  8352.     AX = 0211h
  8353.     BL = exception number (00h-1Fh)
  8354. Return: CF clear if successful
  8355.         CX:(E)DX = selector:offset of exception handler
  8356.     CF set on error
  8357.         AX = error code (8021h) (see #2814)
  8358. Notes:    returns address of protected-mode handler for real-mode exception
  8359.     DPMI host performs a switch to protected mode, reflects the exception
  8360.       to the virtual machine's primary client, and returns to real mode
  8361.       on the handler's completion
  8362. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  8363. --------E-310212-----------------------------
  8364. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  8365.     AX = 0212h
  8366.     BL = exception or fault number (00h-1Fh)
  8367.     CX:(E)DX = exception handler selector:offset
  8368. Return: CF clear if successful
  8369.     CF set on error
  8370.         AX = error code (8021h,8022h) (see #2814)
  8371. Note:    DPMI host sends exception to current client's handler
  8372. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  8373. --------E-310213-----------------------------
  8374. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  8375.     AX = 0213h
  8376.     BL = exception or fault number (00h-1Fh)
  8377.     CX:(E)DX = exception handler selector:offset
  8378. Return: CF clear if successful
  8379.     CF set on error
  8380.         AX = error code (8021h,8022h) (see #2814)
  8381. Notes:    specifies address of protected-mode handler for real-mode exception
  8382.     DPMI host performs a switch to protected mode, reflects the exception
  8383.       to the virtual machine's primary client, and returns to real mode
  8384.       on the handler's completion
  8385. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  8386. --------E-310300-----------------------------
  8387. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  8388.     AX = 0300h
  8389.     BL = interrupt number
  8390.     BH = flags
  8391.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  8392.             reserved, must be 0 (DPMI 1.0+)
  8393.         others: reserved, must be 0
  8394.     CX = number of words to copy from protected mode to real mode stack
  8395.     ES:(E)DI = selector:offset of real mode call structure (see #2819)
  8396. Return: CF clear if successful
  8397.         real mode call structure modified (all fields except SS:SP, CS:IP
  8398.           filled with return values from real mode interrupt)
  8399.     CF set on error
  8400.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2814)
  8401.     protected mode stack unchanged
  8402. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  8403.     CS:IP in the real mode call structure is ignored for this call,
  8404.       instead, the indicated interrupt vector is used for the address
  8405.     the flags in the call structure are pushed on the real mode stack to
  8406.       form an interrupt stack frame, and the trace and interrupt flags are
  8407.       clear on entry to the handler
  8408.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  8409.     the real mode handler must return with the stack in the same state as
  8410.       it was on being called
  8411. SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  8412. SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh
  8413.  
  8414. Format of DPMI real mode call structure:
  8415. Offset    Size    Description    (Table 2819)
  8416.  00h    DWORD    EDI
  8417.  04h    DWORD    ESI
  8418.  08h    DWORD    EBP
  8419.  0Ch    DWORD    reserved (00h)
  8420.  10h    DWORD    EBX
  8421.  14h    DWORD    EDX
  8422.  18h    DWORD    ECX
  8423.  1Ch    DWORD    EAX
  8424.  20h    WORD    flags
  8425.  22h    WORD    ES
  8426.  24h    WORD    DS
  8427.  26h    WORD    FS
  8428.  28h    WORD    GS
  8429.  2Ah    WORD    IP
  8430.  2Ch    WORD    CS
  8431.  2Eh    WORD    SP
  8432.  30h    WORD    SS
  8433. --------E-310301-----------------------------
  8434. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  8435.     AX = 0301h
  8436.     BH = flags
  8437.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  8438.             reserved, must be 0 (DPMI 1.0+)
  8439.         others: reserved must be 0
  8440.     CX = number of words to copy from protected mode to real mode stack
  8441.     ES:(E)DI = selector:offset of real mode call structure
  8442.           (see #2819 at INT 31/AX=0300h)
  8443. Return: CF clear if successful
  8444.         real mode call structure modified (all fields except SS:SP, CS:IP
  8445.           filled with return values from real mode interrupt)
  8446.     CF set on error
  8447.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2814)
  8448.     protected mode stack unchanged
  8449. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  8450.     the real mode procedure must exit with a FAR return
  8451.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  8452.     the real mode handler must return with the stack in the same state as
  8453.       it was on being called
  8454. SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  8455. SeeAlso: INT 2C/AX=0025h
  8456. --------E-310302-----------------------------
  8457. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  8458.     AX = 0302h
  8459.     BH = flags
  8460.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  8461.             reserved, must be 0 (DPMI 1.0+)
  8462.         others: reserved, must be 0
  8463.     CX = number of words to copy from protected mode to real mode stack
  8464.     ES:(E)DI = selector:offset of real mode call structure
  8465.           (see #2819 at INT 31/AX=0300h)
  8466. Return: CF clear if successful
  8467.         real mode call structure modified (all fields except SS:SP, CS:IP
  8468.           filled with return values from real mode interrupt)
  8469.     CF set on error
  8470.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2814)
  8471.     protected mode stack unchanged
  8472. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  8473.     the flags in the call structure are pushed on the real mode stack to
  8474.       form an interrupt stack frame, and the trace and interrupt flags are
  8475.       clear on entry to the handler
  8476.     the real mode procedure must exit with an IRET
  8477.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  8478.     the real mode handler must return with the stack in the same state as
  8479.       it was on being called
  8480. SeeAlso: AX=0300h
  8481. --------E-310303-----------------------------
  8482. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  8483.     AX = 0303h
  8484.     DS:(E)SI = selector:offset of procedure to call
  8485.     ES:(E)DI = selector:offset of real mode call structure (see #2819)
  8486. Return: CF clear if successful
  8487.         CX:DX = segment:offset of real mode call address (see #2820)
  8488.     CF set on error
  8489.         AX = error code (DPMI 1.0+) (8015h) (see #2814)
  8490. Notes:    the real mode call structure is static, causing reentrancy problems;
  8491.       its contents are only valid at the time of a callback
  8492.     the called procedure must modify the real mode CS:IP before returning
  8493.     values are returned to real mode by modifying the real mode call struc
  8494.     DPMI hosts must provide at least 16 callbacks per client
  8495.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  8496.       not support this function
  8497. SeeAlso: AX=0304h,AX=0C00h
  8498.  
  8499. (Table 2820)
  8500. Values DPMI real-mode callback procedure is called with:
  8501.     DS:(E)SI = selector:offset of real mode SS:SP
  8502.     ES:(E)DI = selector:offset of real mode call structure
  8503.     SS:(E)SP = locked protected mode API stack
  8504.     interrupts disabled
  8505. Return: (with IRET)
  8506.     ES:(E)DI = selector:offset of real mode call structure to restore
  8507. --------E-310304-----------------------------
  8508. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  8509.     AX = 0304h
  8510.     CX:DX = real mode callback address
  8511. Return: CF clear if successful
  8512.     CF set on error
  8513.         AX = error code (DPMI 1.0+) (8024h) (see #2814)
  8514. Note:    the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  8515.       not support this function
  8516. SeeAlso: AX=0303h
  8517. --------E-310305-----------------------------
  8518. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  8519.     AX = 0305h
  8520. Return: CF clear
  8521.     AX = size in bytes of state buffer
  8522.     BX:CX = real mode address of procedure to save/restore state
  8523.     SI:(E)DI = protected mode procedure to save/restore state (see #2821)
  8524. Notes:    the buffer size will be zero if it is not necessary to preserve state
  8525.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  8526.     this function is only needed if using the raw mode switch service
  8527. SeeAlso: AX=0306h
  8528.  
  8529. (Table 2821)
  8530. Call DPMI state-save procedures with:
  8531.     AL = direction
  8532.         00h save state
  8533.         01h restore state
  8534.     ES:(E)DI -> state buffer
  8535. Return: all registers preserved
  8536. --------E-310306-----------------------------
  8537. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  8538.     AX = 0306h
  8539. Return: CF clear
  8540.     BX:CX -> procedure to switch from real to protected mode (see #2822)
  8541.     SI:(E)DI -> procedure to switch from protected to real mode
  8542. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  8543.     the caller must save and restore the state of the task with AX=0305h
  8544.     not supported by MS Windows 3.0 in Standard mode
  8545. SeeAlso: AX=0305h
  8546.  
  8547. (Table 2822)
  8548. Values to JUMP at mode-switch procedures with:
  8549.     AX = new DS
  8550.     CX = new ES
  8551.     DX = new SS
  8552.     (E)BX = new (E)SP
  8553.     SI:(E)DI = new CS:(E)IP
  8554. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  8555.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  8556.     interrupts will stay disabled during the entire mode switch if they
  8557.       are disabled on entry to the mode-switch procedure
  8558. --------E-310400-----------------------------
  8559. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  8560.     AX = 0400h
  8561. Return: CF clear
  8562.     AH = major version of DPMI spec supported
  8563.     AL = two-digit minor version of DPMI spec supported
  8564.     BX = DPMI host flags (see #2823)
  8565.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  8566.     DH = curr value of virtual master interrupt controller base interrupt
  8567.     DL = curr value of virtual slave interrupt controller base interrupt
  8568. BUG:    Windows NT versions from the March 1993 beta to at least the Final
  8569.       release with fixes to CSD002 report version 0090h (0.144); this has
  8570.       reportedly been corrected in the Windows NT 3.5 beta
  8571. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 4B/AX=8102h/DX=0000h
  8572. SeeAlso: INT 67/AX=DE0Ah
  8573.  
  8574. Bitfields for DPMI host flags:
  8575. Bit(s)    Description    (Table 2823)
  8576.  0    running under an 80386 (32-bit) implementation
  8577.  1    processor returns to real mode for reflected interrupts instead of V86
  8578.       mode
  8579.  2    virtual memory supported
  8580.  3    reserved (undefined)
  8581.  4-15    reserved (zero)
  8582. --------E-310401-----------------------------
  8583. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  8584.     AX = 0401h
  8585.     ES:(E)DI -> 128-byte buffer for host description (see #2824)
  8586. Return: CF clear if successful
  8587.         AX = capabilities (see #2825)
  8588.         CX = reserved (00h)
  8589.         DX = reserved (00h)
  8590.         buffer filled
  8591.     CF set on error (DPMI 0.9 only)
  8592. SeeAlso: AX=0400h
  8593.  
  8594. Format of DPMI host description:
  8595. Offset    Size    Description    (Table 2824)
  8596.  00h    BYTE    host major version number
  8597.  01h    BYTE    host minor version number
  8598.  02h 126 BYTEs    ASCIZ host vendor name
  8599.  
  8600. Bitfields for DPMI capabilities:
  8601. Bit(s)    Description    (Table 2825)
  8602.  0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  8603.  1    exceptions restartability supported
  8604.  2    device mapping supported (see AX=0508h)
  8605.  3    conventional memory mapping supported (see AX=0509h)
  8606.  4    demand zero-fill supported
  8607.  5    write-protect client capability supported
  8608.  6    write-protect host capability supported
  8609.  7-15    reserved
  8610. --------E-310500-----------------------------
  8611. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  8612.     AX = 0500h
  8613.     ES:(E)DI -> buffer for memory information (see #2826)
  8614. Return: CF clear
  8615. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  8616.     this function must be considered advisory because other applications
  8617.       may affect the results at any time after the call
  8618.     fields not supported by the DPMI implementation are filled with
  8619.       FFFFFFFFh
  8620.     DPMI 1.0+ supports this function solely for backward compatibility; use
  8621.       AX=050Bh instead
  8622.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only
  8623.       returns the first field in the memory information record
  8624. SeeAlso: AX=0501h,AX=050Bh,AX=0604h
  8625.  
  8626. Format of DPMI memory information:
  8627. Offset    Size    Description    (Table 2826)
  8628.  00h    DWORD    largest available block in bytes
  8629.  04h    DWORD    maximum unlocked page allocation
  8630.  08h    DWORD    maximum locked page allocation
  8631.  0Ch    DWORD    total linear address space in pages
  8632.  10h    DWORD    total unlocked pages
  8633.  14h    DWORD    free pages
  8634.  18h    DWORD    total physical pages
  8635.  1Ch    DWORD    free linear address space in pages
  8636.  20h    DWORD    size of paging file/partition in pages
  8637.  24h 12 BYTEs    reserved
  8638. --------E-310501-----------------------------
  8639. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  8640.     AX = 0501h
  8641.     BX:CX = size in bytes
  8642. Return: CF clear if successful
  8643.         BX:CX = linear address of block
  8644.         SI:DI = memory block handle for resizing and freeing block
  8645.     CF set on error
  8646.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #2814)
  8647. Notes:    no selectors are allocated
  8648.     the memory block is allocated unlocked (can be locked with AX=0600h)
  8649.     allocations are often page granular (see AX=0604h)
  8650.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  8651.       for this function to fail even if AX=0500h indicates that enough
  8652.       memory is available
  8653. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  8654. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  8655. --------E-310502-----------------------------
  8656. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  8657.     AX = 0502h
  8658.     SI:DI = handle of memory block
  8659. Return: CF clear if successful
  8660.     CF set on error
  8661.         AX = error code (DPMI 1.0+) (8023h) (see #2814)
  8662. Note:    any selectors allocated for the memory block must also be freed,
  8663.       preferably before freeing the memory block
  8664. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  8665. --------E-310503-----------------------------
  8666. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  8667.     AX = 0503h
  8668.     BX:CX = new size in bytes (nonzero)
  8669.     SI:DI = handle of memory block
  8670. Return: CF clear if successful
  8671.         BX:CX = new linear address
  8672.         SI:DI = new handle of memory block
  8673.     CF set on error
  8674.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  8675.         (see #2814)
  8676. Notes:    any selectors pointing at the block must be updated
  8677.     the previous memory block handle becomes invalid
  8678.     an error is returned if the new size is 0
  8679. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  8680. --------E-310504-----------------------------
  8681. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  8682.     AX = 0504h
  8683.     EBX = page-aligned linear address of memory block (00000000h if any
  8684.           address is acceptable)
  8685.     ECX = size in bytes (nonzero)
  8686.     EDX = flags
  8687.         bit 0: set to create committed pages instead of uncommitted pages
  8688.         bits 1-31 reserved (0)
  8689. Return: CF clear if successful
  8690.         EBX = linear address of memory block
  8691.         ESI = memory block handle
  8692.     CF set on error
  8693.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #2814)
  8694. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8695. SeeAlso: AX=0501h,AX=0505h
  8696. --------E-310505-----------------------------
  8697. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  8698.     AX = 0505h
  8699.     ESI = memory block handle
  8700.     ECX = new size in bytes (nonzero)
  8701.     EDX = flags
  8702.         bit 0: create committed pages rather than uncommitted pages
  8703.         bit 1: segment descriptor update required
  8704.         ES:EBX -> buffer containing array of WORDs with selectors
  8705.         EDI = number of selectors in array
  8706.         bits 2-31 reserved (0)
  8707. Return: CF clear if successful
  8708.         EBX = new linear base address
  8709.         ESI = new memory block handle
  8710.     CF set on error
  8711.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #2814)
  8712. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8713.     the old memory block handle becomes invalid
  8714.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  8715.       all descriptors for selectors in the update buffer which fall within
  8716.       the memory block
  8717. SeeAlso: AX=0503h,AX=0504h
  8718. --------E-310506-----------------------------
  8719. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  8720.     AX = 0506h
  8721.     ESI = memory block handle
  8722.     EBX = offset in memory block of first page
  8723.     ECX = number of pages
  8724.     ES:EDX -> array of WORDs to hold page attributes (see #2827)
  8725. Return: CF clear if successful
  8726.         buffer filled
  8727.     CF set on error
  8728.         AX = error code (8001h,8023h,8025h) (see #2814)
  8729. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8730.     if EBX is not page-aligned, it will be rounded down
  8731. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  8732.  
  8733. Bitfields for DPMI page attribute word:
  8734. Bit(s)    Description    (Table 2827)
  8735.  0-2    page type
  8736.     000 uncommitted
  8737.     001 committed
  8738.     010 mapped (see AX=0508h,AX=0509h)
  8739.     other currently unused
  8740.  3    page is read/write rather than read-only
  8741.  4    accessed/dirty bits supplied in bits 5 and 6
  8742.  5    page has been accessed (only valid if bit 4 set)
  8743.  6    page has been written (only valid if bit 4 set)
  8744.  7-15    reserved (0)
  8745. --------E-310507-----------------------------
  8746. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  8747.     AX = 0507h
  8748.     ESI = memory block handle
  8749.     EBX = offset in memory block of first page
  8750.     ECX = number of pages
  8751.     ES:EDX -> array of WORDs with new page attributes (see #2827)
  8752. Return: CF clear if successful
  8753.     CF set on error
  8754.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  8755.         (see #2814)
  8756.         ECX = number of pages which have been set
  8757. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8758.     if EBX is not page-aligned, it will be rounded down
  8759. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  8760. --------E-310508-----------------------------
  8761. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  8762.     AX = 0508h
  8763.     ESI = memory block handle
  8764.     EBX = page-aligned offset within memory block of page(s) to be mapped
  8765.     ECX = number of pages to map
  8766.     EDX = page-aligned physical address of device
  8767. Return: CF clear if successful
  8768.     CF set on error
  8769.         AX = error code (8001h,8003h,8023h,8025h) (see #2814)
  8770. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8771.     support of this function is optional; hosts are also allowed to support
  8772.       the function for some devices but not others
  8773. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  8774. --------E-310509-----------------------------
  8775. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  8776.     AX = 0509h
  8777.     ESI = memory block handle
  8778.     EBX = page-aligned offset within memory block of page(s) to map
  8779.     ECX = number of pages to map
  8780.     EDX = page-aligned linear address of conventional (below 1M) memory
  8781. Return: CF clear if successful
  8782.     CF set on error
  8783.         AX = error code (8001h,8003h,8023h,8025h) (see #2814)
  8784. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  8785.     support of this function is optional
  8786. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  8787. --------E-31050A-----------------------------
  8788. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  8789.     AX = 050Ah
  8790.     SI:DI = memory block handle
  8791. Return: CF clear if successful
  8792.         SI:DI = size in bytes
  8793.         BX:CX = base address
  8794.     CF set on error
  8795.         AX = error code (8023h) (see #2814)
  8796. SeeAlso: AX=0501h,AX=0504h
  8797. --------E-31050B-----------------------------
  8798. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  8799.     AX = 050Bh
  8800.     ES:(E)DI -> 128-byte buffer for memory information (see #2828)
  8801. Return: CF clear if successful
  8802.     CF set on error (DPMI 0.9 only)
  8803. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  8804. SeeAlso: AX=0500h
  8805.  
  8806. Format of DPMI memory information:
  8807. Offset    Size    Description    (Table 2828)
  8808.  00h    DWORD    total allocated bytes of physical memory controlled by host
  8809.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  8810.  08h    DWORD    total available bytes of virtual memory controlled by host
  8811.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  8812.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  8813.  14h    DWORD    total allocated bytes of virtual memory for current client
  8814.  18h    DWORD    total available bytes of virtual memory for current client
  8815.  1Ch    DWORD    total locked bytes for current client
  8816.  20h    DWORD    maximum locked bytes for current client
  8817.  24h    DWORD    highest linear address available to current client
  8818.  28h    DWORD    largest available memory block in bytes
  8819.  2Ch    DWORD    minimum allocation unit in bytes
  8820.  30h    DWORD    allocation alignment unit size in bytes
  8821.  34h 76 BYTEs    reserved (00h)
  8822. --------E-310600-----------------------------
  8823. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  8824.     AX = 0600h
  8825.     BX:CX = starting linear address
  8826.     SI:DI = size of region in bytes
  8827. Return: CF clear if successful
  8828.     CF set on error
  8829.         none of the memory is locked
  8830.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #2814)
  8831. Notes:    pages at beginning and end will be locked if the region overlaps them
  8832.     may be called multiple times for a given page; the DPMI host keeps a
  8833.       lock count for each page
  8834. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  8835. --------E-310601-----------------------------
  8836. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  8837.     AX = 0601h
  8838.     BX:CX = starting linear address
  8839.     SI:DI = size of region in bytes
  8840. Return: CF clear if successful
  8841.     CF set on error
  8842.         none of the memory is unlocked
  8843.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2814)
  8844. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  8845.     memory whose lock count has not reached zero remains locked
  8846. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  8847. --------E-310602-----------------------------
  8848. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  8849.     AX = 0602h
  8850.     BX:CX = starting linear address
  8851.     SI:DI = size of region in bytes
  8852. Return: CF clear if successful
  8853.     CF set on error
  8854.         none of the memory is made pageable
  8855.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2814)
  8856. Notes:    must relock all unlocked real mode memory before terminating process
  8857.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  8858.     pages at beginning and end will be unlocked if the region overlaps them
  8859.     pageability of real mode pages is binary, not a count
  8860. SeeAlso: AX=0600h,AX=0603h
  8861. --------E-310603-----------------------------
  8862. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  8863.     AX = 0603h
  8864.     BX:CX = starting linear address
  8865.     SI:DI = size of region in bytes
  8866. Return: CF clear if successful
  8867.     CF set on error
  8868.         none of the memory is relocked
  8869.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #2814)
  8870. Notes:    pages at beginning and end will be relocked if the region overlaps them
  8871.     pageability of real mode pages is binary, not a count
  8872. SeeAlso: AX=0602h
  8873. --------E-310604-----------------------------
  8874. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  8875.     AX = 0604h
  8876. Return: CF clear if successful
  8877.         BX:CX = page size in bytes
  8878.     CF set on error
  8879.         AX = error code (DPMI 1.0+) (see also #2814)
  8880.         8001h unsupported, 16-bit host
  8881. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  8882.       unchanged
  8883. --------E-310700-----------------------------
  8884. INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  8885.     AX = 0700h
  8886.     BX:CX = starting linear page number
  8887.     SI:DI = number of pages to mark as paging candidates
  8888. Return: ???
  8889. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8890.       specification, this function is called by MS Windows TASKMAN,
  8891.       PROGMAN, and KERNEL
  8892. SeeAlso: AX=0701h,AX=0702h
  8893. --------E-310701-----------------------------
  8894. INT 31 Pu - DPMI 0.9+ - DISCARD PAGES
  8895.     AX = 0701h
  8896.     BX:CX = starting linear page number
  8897.     SI:DI = number of pages to discard
  8898. Return: ???
  8899. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  8900.       specification, this function is called by MS Windows TASKMAN,
  8901.       PROGMAN, and KERNEL
  8902. SeeAlso: AX=0700h,AX=0703h
  8903. --------E-310702-----------------------------
  8904. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  8905.     AX = 0702h
  8906.     BX:CX = starting linear address
  8907.     SI:DI = number of bytes to mark as paging candidates
  8908. Return: CF clear if successful
  8909.     CF set on error
  8910.         AX = error code (DPMI 1.0+) (8025h) (see #2814)
  8911. Notes:    this function is advisory, and does not force immediate paging
  8912.     partial pages will not be discarded
  8913. SeeAlso: AX=0700h,AX=0703h
  8914. --------E-310703-----------------------------
  8915. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  8916.     AX = 0703h
  8917.     BX:CX = starting linear address
  8918.     SI:DI = number of bytes to mark as discarded
  8919. Return: CF clear if successful
  8920.     CF set on error
  8921.         AX = error code (DPMI 1.0+) (8025h) (see #2814)
  8922. Notes:    this function is advisory, and may be ignored by DPMI implementations
  8923.     partial pages will not be discarded
  8924. SeeAlso: AX=0701h,AX=0702h
  8925. --------E-310800-----------------------------
  8926. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  8927.     AX = 0800h
  8928.     BX:CX = physical address (should be above 1 MB)
  8929.     SI:DI = size in bytes
  8930. Return: CF clear if successful
  8931.         BX:CX = linear address which maps the requested physical memory
  8932.     CF set on error
  8933.         AX = error code (DPMI 1.0+) (8003h,8021h) (see #2814)
  8934. Notes:    implementations may refuse this call because it can circumvent protects
  8935.     the caller must build an appropriate selector for the memory
  8936.     do not use for memory mapped in the first megabyte
  8937. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  8938. --------E-310801-----------------------------
  8939. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  8940.     AX = 0801h
  8941.     BX:CX = linear address returned by AX=0800h
  8942. Return: CF clear if successful
  8943.     CF set on error
  8944.         AX = error code (8025h) (see #2814)
  8945. Note:    should be called at end of access to device mapped with AX=0800h
  8946. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  8947. --------E-310900-----------------------------
  8948. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  8949.     AX = 0900h
  8950. Return: CF clear
  8951.     virtual interrupts disabled
  8952.     AL = previous interrupt state (00h disabled, 01h enabled)
  8953.     AH preserved
  8954. Notes:    the previous state may be restored simply by executing another INT 31
  8955.     a CLI instruction may be used if the previous state is unimportant,
  8956.       but should be assumed to be very slow due to trapping by the host
  8957. SeeAlso: AX=0901h,AX=0902h
  8958. --------E-310901-----------------------------
  8959. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  8960.     AX = 0901h
  8961. Return: CF clear
  8962.     virtual interrupts enabled
  8963.     AL = previous interrupt state (00h disabled, 01h enabled)
  8964.     AH preserved
  8965. Notes:    the previous state may be restored simply by executing another INT 31
  8966.     a STI instruction may be used if the previous state is unimportant,
  8967.       but should be assumed to be very slow due to trapping by the host
  8968. SeeAlso: AX=0900h,AX=0902h
  8969. --------E-310902-----------------------------
  8970. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  8971.     AX = 0902h
  8972. Return: CF clear
  8973.     AL = current interrupt state (00h disabled, 01h enabled)
  8974. Note:    should be used rather than PUSHF because that instruction yields the
  8975.       physical interrupt state rather than the per-client virtualized
  8976.       interrupt flag
  8977. SeeAlso: AX=0900h,AX=0901h
  8978. --------E-310A00-----------------------------
  8979. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  8980.     AX = 0A00h
  8981.     DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier
  8982. Return: CF clear if successful
  8983.         ES:(E)DI -> FAR extended API entry point
  8984.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  8985.     CF set on error
  8986.         AX = error code (DPMI 1.0+) (8001h) (see #2814)
  8987. Notes:    extended API parameters are vendor-specific
  8988.     DPMI 1.0+ supports this function solely for backward compatibility; use
  8989.       INT 2F/AX=168Ah instead
  8990.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  8991.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  8992.       386MAX v7.01.
  8993. SeeAlso: INT 2F/AX=168Ah
  8994. --------E-310B00-----------------------------
  8995. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  8996.     AX = 0B00h
  8997.     BX:CX = linear address
  8998.     DL = size (1,2,4 bytes)
  8999.     DH = type (00h execute, 01h write, 02h read/write)
  9000. Return: CF clear if successful
  9001.         BX = watchpoint handle
  9002.     CF set on error
  9003.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #2814)
  9004. SeeAlso: AX=0212h,AX=0601h
  9005. --------E-310B01-----------------------------
  9006. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  9007.     AX = 0B01h
  9008.     BX = watchpoint handle
  9009. Return: CF clear if successful
  9010.     CF set on error
  9011.         AX = error code (DPMI 1.0+) (8023h) (see #2814)
  9012. Note:    the watchpoint handle is freed
  9013. SeeAlso: AX=0B00h
  9014. --------E-310B02-----------------------------
  9015. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  9016.     AX = 0B02h
  9017.     BX = watchpoint handle
  9018. Return: CF clear if successful
  9019.         AX = status flags
  9020.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  9021.     CF set on error
  9022.         AX = error code (DPMI 1.0+) (8023h) (see #2814)
  9023. SeeAlso: AX=0B00h,AX=0B03h
  9024. --------E-310B03-----------------------------
  9025. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  9026.     AX = 0B03h
  9027.     BX = watchpoint handle
  9028. Return: CF clear if successful
  9029.     CF set on error
  9030.         AX = error code (DPMI 1.0+) (8023h) (see #2814)
  9031. SeeAlso: AX=0B02h
  9032. --------E-310C00-----------------------------
  9033. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  9034.     AX = 0C00h
  9035.     ES:(E)DI -> resident service provider structure (see #2829)
  9036. Return: CF clear if successful
  9037.     CF set on error
  9038.         AX = error code (8015h,8021h,8025h) (see #2814 at AX=0000h)
  9039. Note:    calling this function declares an intent to provide resident
  9040.       protected mode services after terminating with AX=0C01h
  9041. SeeAlso: AX=0303h,AX=0C01h
  9042.  
  9043. Format of DPMI resident service provider structure:
  9044. Offset    Size    Description    (Table 2829)
  9045.  00h    QWORD    descriptor for 16-bit data segment
  9046.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  9047.  10h    WORD    offset of 16-bit callback procedure
  9048.  12h  2 BYTEs    reserved
  9049.  14h    QWORD    descriptor for 32-bit data segment
  9050.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  9051.  24h    DWORD    offset of 32-bit callback procedure
  9052. --------E-310C01-----------------------------
  9053. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  9054.     AX = 0C01h
  9055.     BL = return code
  9056.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  9057. Return: never
  9058. Notes:    should only be used if the program will only provide services to
  9059.       other DPMI programs
  9060.     any protected mode memory remains allocated to the program unless
  9061.       explicitly freed before this call
  9062.     must first call AX=0C00h or program will simply be terminated
  9063. SeeAlso: AX=0C00h,INT 21/AH=31h
  9064. --------E-310D00-----------------------------
  9065. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  9066.     AX = 0D00h
  9067.     ES:(E)DI -> shared memory allocation request structure (see #2830)
  9068. Return: CF clear if successful
  9069.         request structure updated
  9070.     CF set on error
  9071.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see #2814)
  9072. Note:    first 16 bytes of memory block will be initialized to zeros on the
  9073.       first allocation
  9074. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  9075.  
  9076. Format of DPMI shared memory allocation request structure:
  9077. Offset    Size    Description    (Table 2830)
  9078.  00h    DWORD    requested length of shared memory block in bytes
  9079.  04h    DWORD    (ret) allocated length of block
  9080.  08h    DWORD    (ret) shared memory handle
  9081.  0Ch    DWORD    (ret) linear address of memory block
  9082.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  9083.         (name max 128 bytes)
  9084.  16h  2 BYTEs    reserved
  9085.  18h  4 BYTEs    reserved (00h)
  9086. --------E-310D01-----------------------------
  9087. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  9088.     AX = 0D01h
  9089.     SI:DI = shared memory block handle
  9090. Return: CF clear if successful
  9091.     CF set on error
  9092.         AX = error code (8023h) (see #2814)
  9093. Notes:    handle becomes invalid after this call
  9094.     DPMI maintains separate global and virtual machine use counts for each
  9095.       shared memory block; when the global use counts reaches zero, the
  9096.       block is finally destroyed
  9097. SeeAlso: AX=0502h,AX=0D00h
  9098. --------E-310D02-----------------------------
  9099. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  9100.     AX = 0D02h
  9101.     SI:DI = shared memory block handle
  9102.     DX = flags
  9103.         bit 0: return immediately rather than suspending if serialization
  9104.           unavailable
  9105.         bit 1: shared rather than exclusive serialization
  9106.         bits 2-15 reserved (0)
  9107. Return: CF clear if successful
  9108.     CF set on error
  9109.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see #2814)
  9110. Notes:    an exclusive serialization blocks any other serialization attempts for
  9111.       the same block by another virtual machine; a shared serialization
  9112.       blocks attempts at exclusive serialization by another virtual machine
  9113.     hosts are not required to detect deadlock
  9114.     a client's interrupt handler can cancel a serialization call which
  9115.       caused it to block by calling AX=0D03h
  9116. SeeAlso: AX=0D00h,AX=0D03h
  9117. --------E-310D03-----------------------------
  9118. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  9119.     AX = 0D03h
  9120.     SI:DI = shared memory block handle
  9121.     DX = flags
  9122.         bit 0: release shared serialization rather than exclusive serialztn
  9123.         bit 1: free pending serialization
  9124.         bits 2-15 reserved (0)
  9125. Return: CF clear if successful
  9126.     CF set on error
  9127.         AX = error code (8002h,8023h) (see #2814 at AX=0000h)
  9128. SeeAlso: AX=0D00h,AX=0D02h
  9129. --------E-310E00-----------------------------
  9130. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  9131.     AX = 0E00h
  9132. Return: CF clear
  9133.     AX = coprocessor status (see #2831)
  9134. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  9135. SeeAlso: AX=0E01h
  9136.  
  9137. Bitfields for DPMI coprocessor status:
  9138. Bit(s)    Description    (Table 2831)
  9139.  0    numeric coprocessor enabled for current client
  9140.  1    client is emulating coprocessor
  9141.  2    numeric coprocessor is present
  9142.  3    host is emulating coprocessor instructions
  9143.  4-7    coprocessor type
  9144.     0000 none
  9145.     0010 80287
  9146.     0011 80387
  9147.     0100 80486 with numeric coprocessor
  9148.     other reserved
  9149.  8-15    not used
  9150. --------E-310E01-----------------------------
  9151. INT 31 P - DPMI 1.0+ - SET EMULATION
  9152.     AX = 0E01h
  9153.     BX = coprocessor flag bits (see #2832)
  9154. Return: CF clear if successful
  9155.     CF set on error
  9156.         AX = error code (8026h) (see #2814 at AX=0000h)
  9157. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  9158. SeeAlso: AX=0E00h
  9159.  
  9160. Bitfields for DPMI coprocessor flags:
  9161. Bit(s)    Description    (Table 2832)
  9162.  0    enable numeric coprocessor for current client
  9163.  1    client will emulate coprocessor
  9164.  2-15    not used
  9165. --------E-3157-------------------------------
  9166. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  9167.     AH = 57h
  9168.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  9169.     ???
  9170. Return: ???
  9171. SeeAlso: INT 2C/AX=0000h"Cloaking"
  9172. --------E-315702-----------------------------
  9173. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  9174.     AX = 5702h
  9175.     DX = PSP segment of caller
  9176.     STACK: WORD    ???
  9177.            WORD    flags (bit 0 set if 32-bit program)
  9178. Return: as for DPMI mode-switch entry point (see #2405 at INT 2F/AX=1687h)
  9179. Note:    this function is called by the real-mode DPMI mode-switch entry point
  9180. SeeAlso: INT 2F/AX=1687h
  9181. --------E-31EE00------------------------
  9182. INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES
  9183.     AX = EE00h
  9184. Return: AL = minor version (BCD)
  9185.     AH = major version (BCD)
  9186.     DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI)
  9187.     BX = selector of 4GB data segment with zero base address
  9188. Program: DOS32 is a 32 bit DOS extender by Adam Seychell.
  9189. SeeAlso: AX=EE02h
  9190. --------E-31EE02------------------------
  9191. INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION
  9192.     AX = EE02h
  9193. Return: AX = real-mode segment of temporary 8K buffer (v3.1+)
  9194.     EBX = 32bit linear address of the program segment
  9195.     EDX = Total size in bytes of the programs .EXE file after linking.
  9196.     ESI = offset address of PSP
  9197.     EDI = offset address of program environment
  9198.     ECX = offset address of the program's .EXE ASCIZ file name and path
  9199. SeeAlso: AX=EE00h,AX=EE20h
  9200. --------E-31EE10------------------------
  9201. INT 31 - DOS32 v3.2+ - SET UP A DOS32 LOADABLE LIBRARY
  9202.     AX = EE10h
  9203.     EDX -> library ASCIZ path\filename
  9204.     EBX = number of bytes to seek from beginning of file
  9205. Return: CF clear if successful
  9206.         EAX = size of memory block required to store library
  9207.         EBX = size of library file
  9208.     CF set on error
  9209.         AL = error code.
  9210.         01h error opening or reading file
  9211.         02h bad DOS32 library file
  9212. SeeAlso: AX=EE00h,AX=EE11h
  9213. --------E-31EE11------------------------
  9214. INT 31 - DOS32 v3.2+ - LOAD LIBRARY FILE
  9215.     AX = EE11h
  9216.     EDX -> near pointer of memory block to store library
  9217. Return: CF clear if successful
  9218.         EDX = near pointer to the dynamic library public
  9219.     CF set on error
  9220. Note:    must first successfuly call function AX=EE10h before calling this
  9221.       function
  9222. SeeAlso: AX=EE00h,AX=EE10h
  9223. --------E-31EE20------------------------
  9224. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME
  9225.     AX = EE20h
  9226.     ESI = offset of the real mode call back function
  9227. Return: CF clear if successful
  9228.         CX:DX = real mode address to call up to the protected mode
  9229.           procedure
  9230.     CF set on error
  9231. SeeAlso: AX=EE00h,AX=EE02h,AX=EE21h
  9232. --------E-31EE21------------------------
  9233. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME
  9234.     AX = EE21h
  9235.     ESI = offset of the real mode call back function
  9236. Return: CF clear if successful
  9237.         CX:DX = real mode address to call up to the protected mode
  9238.           procedure
  9239.     CF set on error
  9240. SeeAlso: AX=EE20h
  9241. --------E-31EE30------------------------
  9242. INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT
  9243.     AX = EE30h
  9244. SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h
  9245. --------E-31EE40------------------------
  9246. INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER
  9247.     AX = EE40h
  9248. Return: CF clear if successful
  9249.     CF set on error
  9250. SeeAlso: AX=EE41h,AX=EE42h
  9251. --------E-31EE41------------------------
  9252. INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK
  9253.     AX = EE41h
  9254. Return: CF clear if successful
  9255.         EBX -> 16KB DMA block (physical address)
  9256.         EDX -> 16KB DMA block (offset address)
  9257.     CF set on error
  9258. SeeAlso: AX=EE40h,AX=EE42h
  9259. --------E-31EE42------------------------
  9260. INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK
  9261.     AX = EE42h
  9262.     EDX = size in bytes
  9263. Return: CF clear if successful
  9264.         EAX = size in bytes
  9265.         EDX -> memory block
  9266.     CF set on error
  9267. Note:    size is rounded off to the next 4KB boundary
  9268. SeeAlso: AX=EE40h,AX=EE41h
  9269. --------!---Section--------------------------
  9270.