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

  1. Interrupt List, part 11 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998 Ralf Brown
  3. --------V-2F1A00-----------------------------
  4. INT 2F - DOS 4.0+ ANSI.SYS - INSTALLATION CHECK
  5.     AX = 1A00h
  6. Return: AL = FFh if installed
  7. Notes:    AVATAR.SYS also responds to this call
  8.     documented for DOS 5+, but undocumented for DOS 4.x
  9. --------V-2F1A00BX414E-----------------------
  10. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  11.     AX = 1A00h
  12.     BX = 414Eh ('AN')
  13.     CX = 5349h ('SI')
  14.     DX = 2B2Bh ('++')
  15. Return: AL = FFh if installed
  16.         CF clear
  17.         ES:BX -> INT 29 entry point
  18.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  19.         DL = capabilities (v4.00+)
  20.         00h full capability driver
  21.         01h reduced capability driver
  22.         2Bh full capability driver (before v4.00)
  23. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  24.       replaces the normal ANSI.SYS with a more powerful version having
  25.       many additional features
  26. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  27.       from the magic values above
  28.     an additional installation check is to test for the signature
  29.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  30.       number is also available as a four-character ASCII string (e.g.
  31.       "4.00") four bytes before the entry point
  32. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  33. --------V-2F1A00BX4156-----------------------
  34. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  35.     AX = 1A00h
  36.     BX = 4156h ('AV')
  37.     CX = 4154h ('AT')
  38.     DX = 4152h ('AR')
  39. Return: AL = FFh if installed
  40.         CF clear
  41.         BX = AVATAR protocol level supported
  42.         CX = driver type
  43.         0000h AVATAR.SYS
  44.         4456h DVAVATAR.COM inside DESQview window
  45.         DX = 0016h
  46. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  47.       interprets AVATAR command codes in the same way that ANSI interprets
  48.       ANSI command codes
  49. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  50.       the magic values
  51. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  52. --------V-2F1A01-----------------------------
  53. INT 2F U - DOS 4.0+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  54.     AX = 1A01h
  55.     CL = function
  56.         7Fh for GET
  57.         5Fh for SET
  58.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  59. Return: CF clear if successful
  60.         AX destroyed
  61.     CF set on error
  62.         AX = error code (many non-standard)
  63. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  64. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  65. --------V-2F1A02-----------------------------
  66. INT 2F U - DOS 4.0+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  67.     AX = 1A02h
  68.     DS:DX -> parameter block (see #2422)
  69. Return: CF clear if successful
  70.     CF set on error
  71.         AX = error code
  72. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  73. SeeAlso: AX=1A01h
  74.  
  75. Format of ANSI.SYS parameter block:
  76. Offset    Size    Description    (Table 2422)
  77.  00h    BYTE    subfunction
  78.         00h set/reset interlock
  79.         01h get /L flag
  80.  01h    BYTE    interlock state
  81.         00h=reset, 01h=set
  82.           This interlock prevents some of the ANSI.SYS post-processing
  83.           in its hook onto INT 10, AH=00h mode set
  84.  02h    BYTE    (returned)
  85.         00h if /L not in effect
  86.         01h if /L in effect
  87. --------V-2F1A21-----------------------------
  88. INT 2F - AVATAR.SYS - SET DRIVER STATE
  89.     AX = 1A21h (AL='!')
  90.     DS:SI -> command string with one or more state characters (see #2423)
  91.     CX = length of command string
  92. Return: CF set on error (invalid subfunction)
  93.     CF clear if successful
  94. Note:    the characters in the state string are interpreted left to right, and
  95.       need not be in any particular order
  96. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  97.  
  98. (Table 2423)
  99. Values for AVATAR.SYS state characters:
  100.  'a'    activate driver
  101.  'd'    disable driver
  102.  'f'    use fast screen output
  103.  'g'    always convert gray keys (+ and -) to function keys
  104.  'G'    never convert gray keys
  105.  'l'    convert gray keys only when ScrollLock active
  106.  's'    use slow screen output
  107.  't'    Tandy 1000 keyboard (not yet implemented)
  108. --------V-2F1A3C-----------------------------
  109. INT 2F U - AVATAR.SYS v0.11 - ???
  110.     AX = 1A3Ch
  111.     ???
  112. Return: CX = 0000h
  113. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  114. --------V-2F1A3E-----------------------------
  115. INT 2F U - AVATAR.SYS v0.11 - ???
  116.     AX = 1A3Eh
  117.     CL = ???
  118.     CH = ???
  119.     DL = ???
  120.     DH = ???
  121. Return: CL = ???
  122.     CH = ???
  123.     DL = ???
  124.     DH = ???
  125. SeeAlso: AX=1A3Ch,AX=1A3Fh
  126. --------V-2F1A3F-----------------------------
  127. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  128.     AX = 1A3Fh (AL='?')
  129.     ES:DI -> buffer
  130.     CX = length of buffer in bytes
  131. Return: CF clear
  132.     CX = actual size of returned info
  133. Note:    the returned information consists of multiple letters whose meanings
  134.       are described under AX=1A21h
  135. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  136. --------S-2F1A42BX4156-----------------------
  137. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  138.     AX = 1A42h
  139.     BX = 4156h ('AV')
  140.     ES:DI -> FAR handler for serial port using IRQ3
  141.     DS = data segment needed by handler
  142. Return: AX = status/return value
  143.         0000h if no more room
  144.         1A42h if ASD not installed
  145.         else handle to use when uninstalling
  146. Notes:    the handler need not save/restore registers or signal EOI to the
  147.       interrupt controller
  148.     the handler should return AX=0000h if the interrupt was meant for it,
  149.       and either leave AX unchanged or return a non-zero value otherwise
  150.     the most recently installed handler will be called first, continuing
  151.       to earlier handlers until one returns AX=0000h
  152. SeeAlso: AX=1A43h,AX=1A62h
  153. --------S-2F1A43BX4156-----------------------
  154. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  155.     AX = 1A43h
  156.     BX = 4156h ('AV')
  157.     ES:DI -> FAR handler for serial port using IRQ4
  158.     DS = data segment needed by handler
  159. Return: AX = status/return value
  160.         0000h if no more room
  161.         1A43h if ASD not installed
  162.         else handle to use when uninstalling
  163. Notes:    (see AX=1A42h)
  164. SeeAlso: AX=1A42h,AX=1A63h
  165. --------V-2F1A44BX4156-----------------------
  166. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  167.     AX = 1A44h
  168.     BX = 4156h ('AV')
  169. Return: AX = 0000h
  170.     DS = data segment
  171.     CX = size of data segment
  172. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  173.       process under a multitasker hooks this function and provides a
  174.       separate data segment, AVATAR.SYS becomes fully reentrant.
  175. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  176. --------V-2F1A52-----------------------------
  177. INT 2F U - AVATAR.SYS v0.11 - GET ???
  178.     AX = 1A52h
  179.     CX = size of buffer
  180.     ES:DI -> buffer
  181. Return: ??? copied into user buffer
  182. Note:    the maximum size of the data which may be copied is returned by
  183.       AX=1A72h
  184. SeeAlso: AX=1A53h,AX=1A72h
  185. --------V-2F1A53-----------------------------
  186. INT 2F U - AVATAR.SYS v0.11 - ???
  187.     AX = 1A53h
  188.     CL = ??? (00h-05h)
  189.     ???
  190. Return: ???
  191. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  192. --------S-2F1A62BX4156-----------------------
  193. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  194.     AX = 1A62h
  195.     BX = 4156h ('AV')
  196.     CX = handle for IRQ routine returned by AX=1A42h
  197. SeeAlso: AX=1A42h,AX=1A63h
  198. --------S-2F1A63BX4156-----------------------
  199. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  200.     AX = 1A63h
  201.     BX = 4156h ('AV')
  202.     CX = handle for IRQ routine returned by AX=1A43h
  203. SeeAlso: AX=1A43h,AX=1A62h
  204. --------V-2F1A72-----------------------------
  205. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  206.     AX = 1A72h
  207. Return: CX = maximum size of ???
  208. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  209. --------V-2F1A7B-----------------------------
  210. INT 2F U - AVATAR.SYS v0.11 - ???
  211.     AX = 1A7Bh
  212. Return: AX = 0000h
  213.     CX = 0000h
  214. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  215. --------V-2F1A7D-----------------------------
  216. INT 2F U - AVATAR.SYS v0.11 - ???
  217.     AX = 1A7Dh
  218. Return: AX = ???
  219. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  220. --------V-2F1AA3-----------------------------
  221. INT 2F - ANSIPLUS v4.03+ - GET/SET ANSIPLUS INTERNAL VARIABLES
  222.     AX = 1AA3h
  223.     BH = function
  224.         00h get current/default colors
  225.         Return: CH = default colors
  226.             CL = current colors
  227.         01h set current/default colors
  228.         CH = default colors (00h = leave unchanged)
  229.         CL = current colors
  230.         02h get current subscreen region
  231.         Return: BH,BL = true screen rows,columns
  232.             CH,CL = top left row,column of region
  233.             DH,DL = bottom right row,column of region
  234.         03h set subscreen region
  235.         CH,CL = top left row,column of region
  236.         DH,DL = bottom right row,column of region
  237.         04h get driver features (bits 0-31)
  238.         Return: DX:CX = current feature bits
  239.         05h set driver features (bits 0-31)
  240.         DX:CX = feature bits
  241.         06h get driver features (bits 32-63)
  242.         Return: DX:CX = current feature bits
  243.         07h set driver features (bits 32-63)
  244.         DX:CX = feature bits
  245.         other: reserved for future use
  246. SeeAlso: AX=1AA4h,AX=1AA5h
  247. --------V-2F1AA4-----------------------------
  248. INT 2F - ANSIPLUS v4.02+ - GET/SET ANSIPLUS SMOOTH SCROLLING RATE
  249.     AX = 1AA4h
  250.     BL = function
  251.         00h get scrolling rate
  252.         01h set scrolling rate
  253.         BH = new minimum scrolling rate in scan lines per retrace
  254. Return: BH = smooth scrolling rate
  255. SeeAlso: AX=1AA3h,AX=1AA5h
  256. --------V-2F1AA5-----------------------------
  257. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  258.     AX = 1AA5h
  259.     DH = subfunction
  260.         00h get clipboard information
  261.         01h get clipboard text
  262.         02h set clipboard text
  263.         03h append text to clipboard
  264.         04h clear clipboard
  265.         05h paste clipboard to keyboard
  266.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  267.     CX = size of data area (maximum size for subfunction 01h, actual size
  268.         to add to clipboard for subfunctions 02h and 03h)
  269. Return: AL = status
  270.         00h successful
  271.         01h unsupported subfunction (reduced capability driver)
  272.         02h insufficient space
  273.         A5h unsupported function (ANSIPLUS before v4.00)
  274.     ES:BX -> ANSIPLUS local clipboard data
  275.     CX = number of bytes currently in local clipboard
  276.     DX = maximum size of local clipboard
  277. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA4h,AX=1AA6h
  278. --------V-2F1AA6-----------------------------
  279. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  280.     AX = 1AA6h
  281.     BH = function
  282.         00h get hooked interrupts
  283.         01h set hooked interrupts mask
  284.         BL = new interrupts mask (see #2424)
  285. Return: BL = previous interrupts mask (see #2424)
  286. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  287.  
  288. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  289.       copy is installed, such as in a multitasking system like DESQview
  290. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  291.       chain responds to this call
  292.  
  293. Bitfields for ANSIPLUS hooked interrupts mask:
  294. Bit(s)    Description    (Table 2424)
  295.  0    INT 09 hook disabled
  296.  1    INT 10 hook disabled
  297.  2    INT 15 hook disabled
  298.  3    INT 16 hook disabled
  299.  4    INT 1C hook disabled
  300.  5    reset all bits when INT 29 called
  301.  6    INT 29 hook disabled
  302.  7    INT 33, INT 74, or other mouse event hook disabled
  303. --------V-2F1AA7-----------------------------
  304. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  305.     AX = 1AA7h
  306.     BL = function
  307.         00h prevent scroll-back saves
  308.         01h enable scroll-back saves
  309.         02h disable key reprogramming and lock changes by escape sequences
  310.         03h enable key reprogramming by escape sequences
  311.         04h    disable and lock key stacking changes by escape sequences
  312.         05h allow key stacking by escape sequences
  313. Return: nothing
  314. SeeAlso: AX=1AA6h
  315. --------V-2F1AA8-----------------------------
  316. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  317.     AX = 1AA8h
  318. Return: AL = status
  319.         00h successful
  320.         ES:BX -> screen line (character and attribute pairs)
  321.         CX = length of line in bytes, 0000h if no more lines or
  322.               unsupported video mode
  323.         01h unsupported video mode active
  324.         02h screen currently scrolled back
  325.         03h reduced capability driver
  326.         A8h unsupported function (driver before v3.10)
  327. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  328. --------V-2F1AA9-----------------------------
  329. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  330.     AX = 1AA9h
  331. Return: AL = status
  332.         00h successful
  333.         BX = current number of lines in scrollback buffer
  334.         CX = number of bytes in one line
  335.         01h unsupported video mode active
  336.         02h screen currently scrolled back
  337.         03h reduced capability driver
  338.         A9h unsupported function (driver before v3.10)
  339. Desc:    determine how much data is in the scrollback buffer and initialize
  340.       scrollback retrieval to return the first line on the next call to
  341.       AX=1AA8h
  342. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  343. --------V-2F1AAA-----------------------------
  344. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  345.     AX = 1AAAh
  346.     BX = function
  347.         FFFFh to get current blanking time
  348.         other to set time
  349.         CX = blanking time in clock ticks (0000h-7FFFh)
  350. Return: BX = current blanking time
  351.     CX = blanking time when last set
  352. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  353. --------V-2F1AAB-----------------------------
  354. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  355.     AX = 1AABh
  356.     BX = repeat rate in characters per second
  357.         0000h use BIOS repeat rate
  358. Return: nothing
  359. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  360. --------V-2F1AAC-----------------------------
  361. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  362.     AX = 1AACh
  363.     BH = number of bytes per character pattern
  364.     BL = VGA/EGA character table to be loaded
  365.     CX = number of characters to load
  366.     DX = starting character code (offset into Map2 block)
  367.     ES:BP -> user character table to be loaded
  368. Return: AX = 1100h
  369. Desc:    load the EGA/VGA character generator without the BIOS function's
  370.       side effects of resetting the video mode and color palette
  371. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  372. --------V-2F1AAD-----------------------------
  373. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  374.     AX = 1AADh
  375.     BL = report request code (81h-96h for v4.00)
  376.     CX = color selector or key code, if required by request
  377. Return: AX = first reported result
  378.     BX = second result
  379.     CX = third result, if applicable (unchanged otherwise)
  380.     DX = fourth result, if applicable (unchanged otherwise)
  381. Desc:    get device status reports equivalent to those for Esc [#n sequences
  382.       while bypassing any device redirection and avoiding the need to
  383.       parse the returned result
  384. Note:    the report request code in BL is identical to the number in the
  385.       corresponding Esc [#n sequence
  386. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  387. --------V-2F1AADDX0000-----------------------
  388. INT 2F U - AVATAR.SYS v0.11 - ???
  389.     AX = 1AADh
  390.     DX = 0000h
  391.     CX = subfunction (00h-0Ch)
  392.     ???
  393. Return: AX = 0000h if DX was nonzero
  394.     ???
  395. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  396. --------m-2F1B00-----------------------------
  397. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  398.     AX = 1B00h
  399. Return: AL = FFh if installed
  400. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  401.     This extension hooks onto INT 67/AH=58h and returns from that call data
  402.       which excludes the physical pages being used by DOS.
  403. SeeAlso: AH=1Bh"FRAME INFO"
  404. --------m-2F1B-------------------------------
  405. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  406.     AH = 1Bh
  407.     AL <> 00h
  408.     DI = hidden physical page number
  409. Return: AX = FFFFh if failed (no such hidden page)
  410.     AX = 0000h if OK, then
  411.         ES = segment of page frame
  412.         DI = physical page number
  413. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  414.     FASTOPEN makes this call with AL = FFh
  415. SeeAlso: AX=1B00h
  416. --------V-2F2300-----------------------------
  417. INT 2F - DR DOS 5.0 GRAFTABL - INSTALLATION CHECK
  418.     AX = 2300h
  419. Return: AH = FFh
  420. Note:    this installation check does not follow the usual format
  421. SeeAlso: AH=23h,AX=2E00h
  422. --------V-2F23-------------------------------
  423. INT 2F - DR DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  424.     AH = 23h
  425.     AL nonzero
  426. Return: AH = FFh
  427.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  428. SeeAlso: AX=2300h,AX=2E00h
  429. --------T-2F2700-----------------------------
  430. INT 2F - DR DOS 6.0 TaskMAX - INSTALLATION CHECK
  431.     AX = 2700h
  432. Return: AL = status
  433.         00h not installed
  434.         FFh installed
  435. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  436.       taskswitching and multitasking modes
  437. --------T-2F2701-----------------------------
  438. INT 2F - DR DOS 6.0 TaskMAX - GET STATUS
  439.     AX = 2701h
  440. Return: AX = maximum simultaneous tasks
  441.     BX = index into TASK_IDS of current foreground task
  442.     CX = currently-active tasks
  443.     DX = version number (DL = major, DH = minor)
  444.         (DR DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  445.     ES:SI -> TASK_IDS
  446.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  447. Notes:    do not attempt to create a new task if CX == AX
  448.     the task's index is its position on the task menu, while its ID is the
  449.       position within the internal task name table
  450. SeeAlso: AX=2714h,AX=2716h
  451. --------T-2F2702-----------------------------
  452. INT 2F - DR DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  453.     AX = 2702h
  454. Return: DX = maximum pages INT 67/AH=42h will report available
  455. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  456.       amount which is reported as being available at a given time
  457. SeeAlso: AX=2703h,INT 67/AH=42h
  458. --------T-2F2703-----------------------------
  459. INT 2F - DR DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  460.     AX = 2703h
  461.     DX = maximum pages INT 67/AH=42h should report available
  462. Return: DX = new maximum for reporting
  463. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  464.       both taskswitching and multitasking modes
  465. SeeAlso: AX=2702h,INT 67/AH=42h
  466. --------T-2F2704-----------------------------
  467. INT 2F - DR DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  468.     AX = 2704h
  469.     DL = subfunction
  470.         00h unregister task manager
  471.         01h register task manager
  472. Return: DL = status
  473.         00h registered
  474.         01h unregistered
  475. Notes:    a task manager replaces TaskMAX's menu system with its own user
  476.       interface; while one is registered, the TaskMAX hotkeys and
  477.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  478.     unregister the task manager before terminating it
  479. SeeAlso: AX=2705h
  480. Index:    hotkeys;TaskMAX
  481. --------T-2F2705-----------------------------
  482. INT 2F - DR DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  483.     AX = 2705h
  484.     DL = subfunction
  485.         00h disable keystrokes for switching to next/prev/specified task
  486.         01h enable
  487. Return: nothing
  488. Note:    should only be called by a registered task manager (see AX=2704h)
  489. SeeAlso: AX=2704h,AX=2706h
  490. --------T-2F2706-----------------------------
  491. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  492.     AX = 2706h
  493.     DX = task index (see AX=2701h) of task to be activated
  494. Return: DX = task index of previously-active task
  495. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  496.       both taskswitching and multitasking modes
  497. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  498. --------T-2F2707-----------------------------
  499. INT 2F - DR DOS 6.0 TaskMAX - CREATE NEW TASK
  500.     AX = 2707h
  501.     DS:DX -> ASCIZ pathname of executable
  502.     ES:BX -> parameter block (see #2425)
  503.     CX = number of ticks before automatic return to task manager
  504.         (0000h = run until termination or explicitly switched)
  505. Return: DX = new task's task index (FFFFh if task terminated)
  506. SeeAlso: AX=2706h,AX=2708h
  507.  
  508. Format of TaskMAX parameter block:
  509. Offset    Size    Description    (Table 2425)
  510.  00h    WORD    reserved, should be 0000h
  511.  02h    DWORD    pointer to command tail to be copied into child's PSP
  512.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  513.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  514. --------T-2F2708-----------------------------
  515. INT 2F - DR DOS 6.0 TaskMAX - DELETE TASK
  516.     AX = 2708h
  517.     DX = task index
  518. Return: DX = FFFFh (task deleted)
  519. Notes:    this call should only be used for abnormal task termination, after
  520.       first checking for open files with AX=270Ch; should not be used
  521.       with programs that allocate EMS or XMS memory
  522.     switches to specified task first
  523. SeeAlso: AX=2707h
  524. --------T-2F2709-----------------------------
  525. INT 2F - DR DOS 6.0 TaskMAX - NAME TASK
  526.     AX = 2709h
  527.     DX = task index
  528.     DS:SI -> 8-byte name (8 NULs = remove name)
  529. Return: AL = task flags
  530.         00h ID unused or task terminated
  531.         01h ID in use, task name table entry valid
  532.         81h ID in use, task name fixed
  533.     BX = task ID
  534.     ES:DI -> name in task name table (see AX=2701h)
  535. Note:    the task retains the given name until it terminates or the name is
  536.       removed by specifying a name of 8 NULs.
  537. SeeAlso: AX=2701h,AX=2707h
  538. --------T-2F270A-----------------------------
  539. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  540.     AX = 270Ah
  541.     DX = task index
  542. Return: DX = task ID (FFFFh if index invalid)
  543. Note:    task IDs stay constant, while indexes can change when other tasks are
  544.       deleted
  545. SeeAlso: AX=2701h,AX=270Bh
  546. --------T-2F270B-----------------------------
  547. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  548.     AX = 270Bh
  549.     DX = task ID
  550. Return: DX = task index (FFFFh if task not active)
  551. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  552.       taskswitching and multitasking modes
  553. SeeAlso: AX=270Ah
  554. --------T-2F270C-----------------------------
  555. INT 2F - DR DOS 6.0 TaskMAX - CHECK OPEN FILES
  556.     AX = 270Ch
  557.     DX = task index
  558. Return: AX = number of files currently open for specified task
  559. SeeAlso: AX=2708h
  560. --------T-2F270D-----------------------------
  561. INT 2F - DR DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  562.     AX = 270Dh
  563.     DX = task index
  564. Return: DX = status
  565.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  566.         0001h if not in root shell for task
  567. Note:    TaskMAX will return 0001h if the specified task has spawned another
  568.       command interpreter with AX=2707h
  569. SeeAlso: AX=2707h,AX=270Ch
  570. --------T-2F270E-----------------------------
  571. INT 2F - DR DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  572.     AX = 270Eh
  573.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  574.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  575. Return: ES:DI -> current lead-in string
  576. Note:    the specified sequence of keystrokes is sent to the application before
  577.       every line of a text-mode spreadsheet paste
  578. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  579. --------T-2F270F-----------------------------
  580. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  581.     AX = 270Fh
  582.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  583.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  584. Return: ES:DI -> current lead-in string
  585. Note:    the specified sequence of keystrokes is sent to the application before
  586.       every number in a numeric-mode spreadsheet paste
  587. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  588. --------T-2F2710-----------------------------
  589. INT 2F - DR DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  590.     AX = 2710h
  591.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  592.     DS:SI -> pasting terminator string (character/scan-code pairs)
  593. Return: ES:DI -> current terminator string
  594. Note:    the specified sequence of keystrokes is sent to the application after
  595.       every line of a spreadsheet paste operation
  596. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  597. --------T-2F2711-----------------------------
  598. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  599.     AX = 2711h
  600.     DX = ASCII code for separator (FFFFh to get current)
  601. Return: DL = current separator character
  602. SeeAlso: AX=270Fh
  603. --------T-2F2712-----------------------------
  604. INT 2F - DR DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  605.     AX = 2712h
  606.     DX = task index
  607. --------T-2F2713-----------------------------
  608. INT 2F - DR DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  609.     AX = 2713h
  610.     DX = task index
  611.     CX = paste mode
  612.         0000h alphanumeric
  613.         0001h numeric
  614.         0002h text
  615. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  616. --------T-2F2714-----------------------------
  617. INT 2F - DR DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  618.     AX = 2714h
  619. Return: CX = total KB of swap space
  620.     DX = available KB of swap space
  621. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  622.       taskswitching and multitasking modes
  623. SeeAlso: AX=2701h
  624. --------T-2F2715-----------------------------
  625. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  626.     AX = 2715h
  627. Return: only after calling task is again selected
  628. SeeAlso: AX=2706h
  629. --------T-2F2716-----------------------------
  630. INT 2F - DR DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  631.     AX = 2716h
  632. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  633.         CX = bytes in paste buffer
  634.         DX = current generation number (updated after every copy operation)
  635. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  636.       this call (it does support the remainder of the TaskMAX API)
  637. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  638. --------T-2F2717-----------------------------
  639. INT 2F - DR DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  640.     AX = 2717h
  641.     CX = bytes in destination buffer
  642.     ES:DI -> destination buffer
  643. Return: AX = 0000h if function supported
  644.         CX = bytes actually copied (FFFFh if buffer too small)
  645.         DX = current generation number for paste buffer
  646. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  647.       this call (it does support the remainder of the TaskMAX API)
  648. Note:    the destination buffer may be too small if another task adds more data
  649.       to the paste buffer after the AX=2716h call but before this call
  650. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  651. --------T-2F2718-----------------------------
  652. INT 2F - DR DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  653.     AX = 2718h
  654.     CX = bytes in source buffer
  655.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  656. Return: AX = 0000h if function supported
  657.         CX = bytes actually copied
  658.         DX = current generation number for paste buffer
  659. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  660.       this call (it does support the remainder of the TaskMAX API)
  661. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  662. --------T-2F2719-----------------------------
  663. INT 2F - Novell DOS 7 TaskMGR - NOP
  664.     AX = 2719h to 271Bh
  665. --------T-2F271C-----------------------------
  666. INT 2F U - Novell DOS 7 TaskMGR - ???
  667.     AX = 271Ch
  668.     DX = ???
  669.         bit 0: ???
  670. Return: ???
  671.     ---if DX bit 0 set---
  672.     AX = 0031h
  673.     CX = 0000h
  674. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  675.       function will crash because its exit code attempts to pop several
  676.       registers which are not pushed when DX bit 0 is set
  677. --------m-2F2780CL01-------------------------
  678. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - SUPERVISOR MODULE
  679.     AX = 2780h
  680.     CL = 01h (module: Supervisor)
  681.     CH = subfunction
  682.         00h unused
  683.         Return: CX = status (0002h) (see #2426)
  684.         01h unused
  685.         Return: CX = status (0002h) (see #2426)
  686.         02h "Z_ModuleReg" register an OS module
  687.         EBX = module number (0005h-000Fh)
  688.         DS:EDX -> module descriptor (see #2428)
  689.         Return: CX = status (0000h,0030h) (see #2426)
  690.         03h allocate SYSDAT memory
  691.         DX = number of ??? to allocate
  692.         Return: CX = status (0000h,0003h) (see #2426)
  693.         04h get selector to SYSDAT
  694.         Return: CX = 0000h (successful)
  695.             BX = selector for EMM386 data segment
  696.             EBX high word cleared
  697.         05h "Z_MoveReal" relocate segment into extended memory
  698.         DS:EDX -> descriptor parameter block
  699.         Return: ECX = status (00h,03h,31h,32h) (see #2426)
  700.             ---if successful---
  701.             parameter block filled
  702.         06h "Z_Reboot" return to real mode via triple fault
  703.         07h debugger break
  704.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  705.               mark
  706.         08h "X_ForeCheck" check if domain is in foreground
  707.         Return: CX = 0000h (successful)
  708.             EBX = ??? (0 or 2)
  709.         09h register VxD with system
  710.         0Ah unload VxD hook
  711.         0Bh indicate end of initialization phase
  712.         Return: CX = status (0002h) (see #2426)
  713.         0Ch "F_AllocWindow" allocate 4K mapping window
  714.         0Dh "F_RegisterBoot" register reboot addresses
  715.         EBX = ???
  716.         EDX = ???
  717.         Return: ???
  718.         0Eh "F_EnquireBoot" check if reboot active
  719.         Return: CX = 0000h (successful)
  720.             BL = ???     \ or BX = 0000h
  721.             BH = ???     /
  722.         0Fh get debugging level
  723.         Return: CX = 0000h (successful)
  724.             EBX = new value for debugging level
  725.         10h set debugging level
  726.         EDX = ???
  727.         Return: CX = 0000h (successful)
  728.             EBX = old value of debugging level
  729.         11h installation check (documented)
  730.         Return: CX = status
  731.                 0000h if multitasker is installed
  732.                 EBX = version (0100h for v1.00)
  733.                 1101h if multitasker is not present
  734.         12h "F_V86BPInstall" install V86 breakpoint
  735.         DX = ???
  736.         Return: CX = 0000h (successful)
  737.             AX = old value of ???
  738.         13h "F_V86BPRemove" remove V86 breakpoint
  739.         Return: CX = status (0000h,003Fh) (see #2426)
  740.             AX = ???
  741.         14h "F_V86BPOffer" indicate INT 03 to be used as V86 breakpoint
  742.         EDX = linear address ??? of INT 03 instruction for breakpoint
  743.         Return: CX = status (0000h,003Fh) (see #2426)
  744.         15h "F_LoaderCleanup" offer opportunity to clean up
  745.         BX = segment of ???
  746.         Return: CX = 0000h (successful)
  747.             BX = segment of ???
  748.         16h "F_RegisterVxDWindow" register VxD mapping window
  749.         17h "F_RegisterPNW" register Personal NetWare information
  750.         EBX = subfunction (0-2)
  751.         Return: CX = status (0002h if EBX>2) (see #2426)
  752.             ???
  753.         18h unused
  754.         Return: CX = status (0002h) (see #2426)
  755. Return: CX = status (most subfunctions)
  756.     (E)AX and/or (E)BX contain return values, depending on function
  757. Notes:    called by DPMS.EXE and EMM386.EXE
  758.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  759.       because the request is handled on the initial trap to the memory
  760.       manager caused by INT instructions, this API must be invoked with
  761.       an actual INT 2F instruction instead of some simulation such as a
  762.       far call to the address in the interrupt vector table
  763. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  764.  
  765. (Table 2426)
  766. Values for Novell DOS 7 EMM386 function status:
  767.  0000h    successful
  768.  0001h    not implemented
  769.  0002h    invalid subfunction
  770.  0003h    unable to find memory
  771.  0004h    invalid flag (semaphore) number
  772.  0005h    flag (semaphore) overrun
  773.  0006h    flag (semaphore) underrun
  774.  0007h    no queue handles available
  775.  0009h    no queue buffers available
  776.  000Ah    queue is in use
  777.  000Bh    invalid process handle
  778.  000Ch    no process handles available
  779.  000Dh    queue access not permitted
  780.  000Eh    queue is empty
  781.  000Fh    queue is full
  782.  0012h    no memory handles available
  783.  0014h    can't find process in process list
  784.  001Bh    invalid memory handle
  785.  0023h    unable to terminate process
  786.  002Ah    flag set ignored
  787.  002Dh    no more system flags
  788.  002Eh    flag (semaphore) not in idle state
  789.  002Fh    flag (semaphore) wait timed out
  790.  0030h    bad module number in CL
  791.  0031h    bad descriptor
  792.     invalid value for DESC_PB_SINFO in a descriptor parameter block
  793.  0032h    no free descriptors
  794.  0033h    error while locking/unlocking a page
  795.  0034h    error getting or setting a page
  796.  0035h    no pages available
  797.  0036h    invalid domain
  798.  0037h    process already frozen
  799.  0038h    process not frozen
  800.  0039h    fork failure (no registered swaplist)
  801.  003Ah    page already free
  802.  003Bh    page already allocated
  803.  003Ch    unable to switch tasks
  804.  003Dh    attempted to free critical section which is not active
  805.  003Eh    too many active critical sections
  806.  003Fh    ???
  807.  41FFh    current domain is invalid, or no domain in context
  808.  42FFh    domain ID is not a valid descriptor
  809.  43FFh    domain creation still in progress
  810.  44FFh    domain currently being deleted
  811.  45FFh    task manager is busy, cannot unload it
  812.  46FFh    task manager already loaded
  813.  47FFh    task manager not yet loaded
  814.  48FFh    cannot save/restore because prior switch not complete
  815.  49FFh    console already has owner
  816.  4BFFh    unsupported opcode
  817.  4CFFh    32-bit address prefix not supported
  818.  4FFFh    timeout, but not on timer queue
  819.  50FFh    unable to lock timer queue
  820.  53FFh    unable to switch while in Global Message Mode
  821.  54FFh    error while setting Global Message Mode
  822.  55FFh    not in Global Message Mode
  823.  56FFh    system already in Domain Message Mode
  824.  57FFh    not in Domain Message Mode
  825.  58FFh    unable to allocate timeout structure
  826.  59FFh    unsupported video type
  827.  5AFFh    function not handled by any VM
  828.  5BFFh    error in Serial..Set call
  829.  5CFFh    error in Parallel..Set call
  830.  5DFFh    domain list overflowed
  831.  5FFFh    unable to free domain while in nobuffers mode
  832.  
  833. Format of Novell DOS/OpenDOS EMM386 descriptor parameter block:
  834. Offset    Size    Description    (Table 2427)
  835.  00h    DWORD    "DESC_PB_BASE"
  836.  04h    DWORD    "DESC_PB_LIMIT"
  837.  08h    WORD    "DESC_PB_SEL"
  838.  0Ah    BYTE    "DESC_PB_MINFO"
  839.  0Bh    BYTE    "DESC_PB_SINFO"
  840. SeeAlso: #2428
  841.  
  842. Format of Novell DOS/OpenDOS EMM386 module descriptor:
  843. Offset    Size    Description    (Table 2428)
  844.  00h 12 BYTEs    descriptor parameter block (see #2427)
  845.  0Ch    DWORD    -> module entry point
  846. Note:    for function "Z_ModuleReg", only DESC_PB_SEL and the module entry point
  847.       need to be initialized before calling EMM386
  848. SeeAlso: #2427
  849. --------m-2F2780CL02-------------------------
  850. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - REAL-TIME MONITOR
  851.     AX = 2780h
  852.     CL = 02h (module: Real-Time Monitor)
  853.     CH = subfunction
  854.         00h ???
  855.         ???
  856.         Return: CX = status (0000h,0023h, others???) (see #2426)
  857.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  858.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  859.               func 02h/sf 0Bh, and func 04h/sf 01h
  860.         01h "Z_PCountGet" get and clear count of dispatches
  861.         DX = ??? handle or 0000h for default
  862.         Return: CX = status (0000h,000Bh) (see #2426)
  863.             EBX = old value of ??? if successful
  864.             EDX destroyed
  865.         02h "Z_FlagWait" wait on semaphore
  866.         DX = index of semaphore???
  867.         Return: CX = status (0000h,0004h,0005h) (see #2426)
  868.             EBX = 0000FFFFh on error, 00000000h if successful
  869.         03h "Z_FlagSet" set a semaphore flag
  870.         DX = index of semaphore???
  871.         Return: CX = status (0000h,0004h,0006h) (see #2426)
  872.             BX = FFFFh on error, 0000h if successful
  873.         04h "X_QCreate" create a new queue
  874.         Return: CX = status (0000h,0007h,000Ah) (see #2426)
  875.         05h "X_QOpen" open queue for reading/writing
  876.         EDX -> ??? data (first 8 bytes seem to be name)
  877.         Return: CX = status (0000h,0009h,000Dh) (see #2426)
  878.         06h "X_QDelete" delete a queue
  879.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  880.         07h "X_QRead" read message from queue
  881.         EDX = ???
  882.         Return: CX = status (0000h,0009h,000Eh) (see #2426)
  883.         08h "X_QReadC" read message from queue, if any
  884.         EDX = ???
  885.         Return: CX = status (0000h,0009h,000Eh) (see #2426)
  886.         09h "X_QWrite" write message to queue
  887.         EDX = ???
  888.         Return: CX = status (0000h,0009h,000Fh) (see #2426)
  889.         0Ah "X_QWriteC" write message to queue, if space available
  890.         EDX = ???
  891.         Return: CX = status (0000h,0009h,000Fh) (see #2426)
  892.         0Bh "X_PDelay" put process to sleep for specified period
  893.         DX = number of clock ticks to sleep???
  894.         Return: CX = 0000h (successful)
  895.         0Ch "X_PDispatch" force a dispatch (run scheduler)
  896.         Return: CX = 0000h (successful)
  897.         0Dh "F_PTerm" terminate process???
  898.         Return: CX = status (0000h,0023h) (see #2426)
  899.             BX = FFFFh on error, 0000h if successful
  900.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  901.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  902.         0Eh "X_PCreate" create new process
  903.         ???
  904.         Return: CX = status (0000h,000Ch) (see #2426)
  905.             EBX = ??? if successful
  906.         0Fh "Z_PPriorSet" set process priority
  907.         BX = ???
  908.         DX = ??? handle or 0000h for default
  909.         Return: CX = status (0000h,000Bh) (see #2426)
  910.         10h "X_PHandleGet" get current process handle
  911.         Return: CX = 0000h (successful)
  912.             BX = handle of default ???
  913.             EBX high word cleared
  914.         11h "X_PTerm" terminate process
  915.         DX = process handle or 0000h for current
  916.         BX = ??? (handle???)
  917.         Return:    CX = status (0000h,000Bh,0014h) (see #2426)
  918.         12h "F_Sleep" ???
  919.         BX = ???
  920.         DX = ???
  921.         Return: CX = 0000h (successful)
  922.         13h "F_Wakeup" ???
  923.         DX = ???
  924.         Return: CX = status (see #2426)
  925.         14h "F_FindPDName" find process by name???
  926.         BX = ???
  927.         DX = ???
  928.         Return: CX = status (0000h,0014h) (see #2426)
  929.             BX = FFFFh on error, ??? if successful
  930.         15h "F_SetFlags" set ??? flags
  931.         BX = ??? (low two bits only)
  932.         DX = ??? handle or 0000h for default
  933.         Return: CX = status (0000h,000Bh) (see #2426)
  934.             BX = new value of ??? flags (entire word)
  935.             EBX high register cleared
  936.         16h "F_EndOfInterrupt" issue EOI to PIC
  937.         Return: CX = 0000h (successful)
  938.         17h "X_PTermOff" disable process termination
  939.         18h "X_PTermOK" enable process termination
  940.         19h "Z_FlagStatusGet" get semahprore's status
  941.         1Ah "F_QRdMX" ???
  942.         1Bh "F_QWrMX" ???
  943.         1Ch "Z_FlagAlloc" allocate a new semaphore
  944.         1Dh "Z_FlagFree" free semaphore
  945.         1Eh "X_FlagsMaxGet" get number of semaphores supported
  946.         1Fh "X_QReadNDC" non-destructive read from queue (peek)
  947.         20h "Z_FlagWWTO" wait on semaphore, with timeout
  948.         21h "F_UdaAlloc" ???
  949.         22h "F_UdaFree" ???
  950.         23h "X_PSuspend" suspend process
  951.         24h "X_PUnsuspend" restart process after suspension
  952.         25h "X_CritEnter" enter critical region
  953.         26h "X_CritExit" leave critical region
  954.         27h "F_PCreate" ???
  955.         28h "Z_PHandleListGet" get list of process handles
  956.         29h "Z_PNameGet" get process name
  957.         2Ah "Z_PStatusGet" get process status
  958.         2Bh "F_PDToDomain" get process' domain???
  959.         2Ch "Z_PPriorGet" get process priority
  960.         2Dh "F_QDList" get list of queues???
  961.         2Eh "Z_QNameGet" get queue's name
  962.         2Fh "X_QMsgLenGet" get message length of queue
  963.         30h "X_QMsgMaxGet" get message capacity of queue
  964.         31h "Z_QWriterGet" get handle of process waiting to write queue
  965.         32h "Z_QReaderGet" get handle of process waiting to read queue
  966.         33h "X_QMsgNumGet" get number of messages in queue
  967.         34h "Z_QFlagsGet" get queue's flags
  968.         35h "F_NameToQD" get queue by name???
  969.         36h "F_NameToPD" get process by name???
  970.         37h "X_MXCreate" create a mutex
  971.         38h "X_MXDelete" delete a mutex
  972.         39h "X_MXEnter" enter mutual-exclusion zone
  973.         3Ah "X_MXEnterC" enter mutual-exclusion zone if it is free
  974.         3Bh "X_MXExit" leave mutual-exclusion zone
  975.         3Ch "Z_TicksSet" set length of foreground time slices
  976.         3Dh "X_TickGet" get clock tick period
  977.         3Eh "F_ProcessID" ???
  978.         3Fh "X_QClose" close a queue
  979.         40h "F_QDispose" delete queue???
  980.         41h "F_PDToFlags" get process flags???
  981.         42h "F_PDToDParam" ???
  982.         43h "F_ReleaseMX" release mutex???
  983.         44h "F_SimulateInt" ???
  984.         45h "Z_QFlagsSet" set queue's flags
  985.         46h "F_TickRate" ???
  986.         47h ???
  987. Return: CX = status (most subfunctions)
  988.     (E)AX and/or (E)BX contain return values, depending on function
  989. Notes:    called by DPMS.EXE and EMM386.EXE
  990.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  991.       because the request is handled on the initial trap to the memory
  992.       manager caused by INT instructions, this API must be invoked with
  993.       an actual INT 2F instruction instead of some simulation such as a
  994.       far call to the address in the interrupt vector table
  995. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  996. --------m-2F2780CL03-------------------------
  997. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - MEMORY
  998.     AX = 2780h
  999.     CL = 03h (module: Memory)
  1000.     CH = subfunction
  1001.         00h ???
  1002.         01h "F_PdirGet" ???
  1003.         02h "F_PdirSet" ???
  1004.         03h "Z_PageAlloc" allocate a given page of memory
  1005.         04h "F_PageAllocG" allocate global page???
  1006.         05h "F_PageAllocI" allocate instance page???
  1007.         06h "F_PtblRead" get page table???
  1008.         07h "F_PtrlWrite" select page table???
  1009.         08h "Z_PtblGet" read page table
  1010.         09h "Z_PtblSet" change page table
  1011.         0Ah "Z_PagesAlloc" allocate pages of memory
  1012.         0Bh "Z_PageFree" free a given page of memory
  1013.         0Ch "Z_MemAlloc" allocate a memory block
  1014.         0Dh "Z_MemFree" release memory block
  1015.         0Eh "Z_MemSizeGet" get size of memory block
  1016.         0Fh "Z_MemResize" resize a memory block
  1017.         10h "Z_DescAlloc" allocate a memory descriptor
  1018.         11h "Z_DescFree" release a memory descriptor
  1019.         12h "Z_DescGet" get details on memory descriptor
  1020.         13h "Z_DescSet" set a memory descriptor
  1021.         14h "Z_MemDescAlloc" allocate a memory block and its descriptor
  1022.         15h "Z_MemDescFree" release a memory block and its descriptor
  1023.         16h "Z_MemDescSizeGet" get size of memory block
  1024.         17h "Z_MemDescResize" resize a memory block
  1025.         18h "Z_PageLock" lock a page, with existing contents
  1026.         19h "Z_PageUnlock" unlock a page
  1027.         1Ah "Z_PageLockAny" lock a page, contents undefined
  1028.         1Bh "Z_PageUnlockReuse" unlock page, reuse phsyical memory
  1029.         1Ch "Z_PageLockNone" lock a page, no physical memory assigned
  1030.         1Dh "Z_PageUnlockNone" unlock a page, don't reuse physical memory
  1031.         1Eh "F_CallRealRaw" call real mode (SS:ESP supplied)
  1032.         1Fh "F_IntRealRaw" perform real-mode interrupt (SS:ESP supplied)
  1033.         20h "F_CallReal" call real mode with RETF frame
  1034.         21h "F_IntReal" perform real-mode interrupt
  1035.         22h "F_PagedCallReal" paged real-mode call
  1036.         23h "F_PagedIntReal" paged real-mode interrupt
  1037.         24h "F_CallIretReal" call real mode with IRET frame
  1038.         25h "F_CallIretRealRaw" call real mode with IRET (SS:ESP supplied)
  1039.         26h "F_CallProt16" call 16-bit protected-mode code
  1040.         27h "F_CallProt32" call 32-bit protected-mode code
  1041.         28h "F_IAddPage" add kernel instance data
  1042.         29h "Z_PageDomLock" lock page in specific domain, preserve contents
  1043.         2Ah "Z_PatgeDomUnlock" unlock page in specific domain
  1044.         2Bh "Z_PageDomLockAny" lock page in specific domain, undef contents
  1045.         2Ch "Z_PageDomUnlockReuse" unlock page in spec. domain,reuse ph.mem
  1046.         2Dh "Z_PageDomLockNone" lock page in spec. domain, no phys memory
  1047.         2Eh "Z_PageDomUnlockNone" unlock page in spec. domain, no phys. mem
  1048.         2Fh "Z_GateAlloc" allocate a gate
  1049.         30h "Z_GateFree" release a gate
  1050.         31h "X_MemFreeGet" get total free memory
  1051.         32h "X_MemTopGet" get highest memory address
  1052.         33h "X_MemTotalGet" get total memory size
  1053.         34h "F_DescRead" ???
  1054.         35h "F_DescWrite" ???
  1055.         36h "F_GetStack" ???
  1056.         37h "F_SetStack" ???
  1057. Return: CX = status (most subfunctions)
  1058.     (E)AX and/or (E)BX contain return values, depending on function
  1059. Notes:    called by DPMS.EXE and EMM386.EXE
  1060.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  1061.       because the request is handled on the initial trap to the memory
  1062.       manager caused by INT instructions, this API must be invoked with
  1063.       an actual INT 2F instruction instead of some simulation such as a
  1064.       far call to the address in the interrupt vector table
  1065. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  1066. --------m-2F2780CL04-------------------------
  1067. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - DOMAINS
  1068.     AX = 2780h
  1069.     CL = 04h (module: Domains)
  1070.     CH = subfunction
  1071.         00h "F_DAlloc" create new domain
  1072.         01h "F_DFree" delete a domain
  1073.         02h "X_DomHandleGetMy" get current domain handle
  1074.         03h "F_DSet" switch to another domain
  1075.         04h "Z_HandlerSWInt" install software-interrupt handler
  1076.         05h "Z_HandlerPageFault" install page-fault handler
  1077.         06h "Z_HandlerIOEx" install I/O exception handler
  1078.         07h "Z_HandlerGenEx" install general exception handler
  1079.         08h "Z_HandlerHWInt" install hardware interrupt handler
  1080.         09h "Z_IOBitmapGet" get current domain's I/O bitmap entry
  1081.         0Ah "Z_IOBitmapSet" set current domain's I/O bitmap entry
  1082.         0Bh "Z_IOBitmapDomGet" get domain's I/O bitmap entry
  1083.         0Ch "Z_IOBitmapDomSet" set domain's I/O bitmap entry
  1084.         0Dh "Z_DomMemRead" read memory in another domain
  1085.         0Eh "Z_DomMemWrite" write memory in another domain
  1086.         0Fh "Z_PtblDomGet" read domain's page table
  1087.         10h "Z_PtblDomSet" write domain's page table
  1088.         11h "Z_InstanceSet" register instanced memory
  1089.         12h "X_DomNProcessesGet" get number of processes in domain
  1090.         13h "X_DomSuspend" suspend a domain
  1091.         14h "Z_DomUnsuspend" resume execution of a domain
  1092.         15h "Z_DomFork" make a copy of the current domain
  1093.         16h "Z_DomTerm" terminate domain and all processes in it
  1094.         17h "Z_HandlerUnlink" remove a handler
  1095.         18h "Z_HandlerHWIntDflt" install default hardware interrupt handler
  1096.         19h "Z_HandlerVHWInt" install virtual hardware interrupt handler
  1097.         1Ah "Z_HandlerVHWIntDflt" install default virtual hware int handler
  1098.         1Bh "Z_HandlerSwapIn" install swap-in handler
  1099.         1Ch "Z_HandlerSwapOut" install swap-out handler
  1100.         1Dh "Z_EndOfInterrupt" signal EOI
  1101.         1Eh ???
  1102.         1Fh "Z_HandlerPCreate" install process-creation handler
  1103.         20h "Z_HandlerPTerm" install process-termination handler
  1104.         21h "Z_DomRootProcessGet" get domain's root process' handle
  1105.         22h "F_DForeground" domain has just switched to foreground
  1106.         23h "F_DBackground" domain has just switched to background
  1107.         24h "F_MapHMA" map domain's HMA
  1108.         25h "F_AddInstData" add DOS instance data
  1109.         26h "X_DomMemFreeGet" get free memory in a domain
  1110.         27h "X_DomMemUsedGet" get memory used by current domain
  1111.         28h "Z_DomMemMaxGet" get per-domain memory limit
  1112.         29h "Z_DomMemMaxSet" set per-domain memory limit
  1113.         2Ah "F_ReflectInt21" protected-mode INT 21 support
  1114.         2Bh "Z_DomHandleGet" get domain for a process
  1115.         2Ch ???
  1116.         2Dh ???
  1117.         2Eh ???
  1118.         2Fh ???
  1119.         30h ???
  1120.         31h ???
  1121.         32h ???
  1122. Return: CX = status (most subfunctions)
  1123.     (E)AX and/or (E)BX contain return values, depending on function
  1124. Notes:    called by DPMS.EXE and EMM386.EXE
  1125.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  1126.       because the request is handled on the initial trap to the memory
  1127.       manager caused by INT instructions, this API must be invoked with
  1128.       an actual INT 2F instruction instead of some simulation such as a
  1129.       far call to the address in the interrupt vector table
  1130. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  1131. --------m-2F2780CL05-------------------------
  1132. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - VIRTUAL MACHINES
  1133.     AX = 2780h
  1134.     CL = 05h (module: VM)
  1135.     CH = function
  1136.         00h "F_VMProtInit" internal protected-mode initialization
  1137.         01h "Z_TMLoad" load task manager
  1138.         02h "Z_TMUnload" unload task manager
  1139.         03h    "Z_VMBackSet" send virtual machine to background
  1140.         04h "Z_VMForeSet" send virtual machine to foreground
  1141.         05h "Z_VMSaveEnable" enable saving virtual machine
  1142.         06h "Z-VMSaveDisable" disable saving virtual machine
  1143.         07h "Z_TMInit" intialize task manager
  1144.         08h "Z_TMHotKeyGet" get task manager hotkey
  1145.         09h "Z_TMHitKeyEnable" restart scanning for task manager key
  1146.         0Ah "Z_TMHotKeyDisable" stop scanning for task manager key
  1147.         0Bh "X_ForeGet" get current foreground domain
  1148.         0Ch "F_DMAHandlerEnable" (re)enable DMA address translation
  1149.         0Dh "F_DMAHandlerDisable" disable DMA address translation
  1150.         0Eh "Z_SerialTimeoutGet" set serial port timeout
  1151.         0Fh "Z_ParallelTimeoutSet" set parallel port timeout
  1152.         10h "F_VCPIEntry" domain is entering VCPI mode
  1153.         11h "F_VCPIExit" domain is leaving VCPI mode
  1154.         12h "X_MsgGlobalEnter" enter Global Message Mode
  1155.         13h "X_MsgGlobalDisplay" display global message
  1156.         14h "X_MsgGlobalExit" leave Global Message Mode
  1157.         15h "X_MsgDomEnter" enter Domain Message Mode
  1158.         16h "X_MsgDomDisplay" display domain-specific message
  1159.         17h "X_MsgDomExit" leave Domain Message Mode
  1160.         18h "X_MsgFatalDisplay" display fatal error message
  1161.         19h "Z_SerialBaseSet" set serial port address
  1162.         1Ah "Z_ParallelBaseSet" set parallel port address
  1163.         1Bh "Z_SerialIRQSet" set serial port IRQ
  1164.         1Ch "Z_ParallelIRQSet" set parallel port IRQ
  1165.         1Dh "F_ResetVideo" emergency video system reset
  1166.         1Eh "F_SetMouseIRQ" set which IRQ is used by mouse
  1167.         1Fh "F_CheckNotIdle" check whether system is idle
  1168.         20h "F_GetMouseInfo"
  1169.         21h "Z_SerialOwnerGet" get serial port owner
  1170.         22h "Z_SerialTimeoutGet" get serial port timeout
  1171.         23h "Z_ParallelOwnerGet" get parallel port owner
  1172.         24h "Z_ParallelTimeoutGet" get parallel port timeout
  1173.     ???
  1174. Return: ???
  1175. Notes:    called by DPMS.EXE and EMM386.EXE
  1176.     the handler for this function may be set by one of the subfunctions
  1177.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  1178.       CX=0001h (see #2426)
  1179.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  1180.       because the request is handled on the initial trap to the memory
  1181.       manager caused by INT instructions, this API must be invoked with
  1182.       an actual INT 2F instruction instead of some simulation such as a
  1183.       far call to the address in the interrupt vector table
  1184. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  1185. --------m-2F2780CL06-------------------------
  1186. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - DPMI SERVICES
  1187.     AX = 2780h
  1188.     CL = 06h
  1189.     CH = function
  1190.         00h "F_InitDPMI" used for internal initialization
  1191.         01h "F_DescAllocLDT" allocate LDT descriptor
  1192.         02h "F_DescFreeLDT" free LDT descriptor
  1193.         03h "F_DescGetLDT" get details on LDT descriptor
  1194.         04h "F_DescSetLDT" set up LDT descriptor
  1195.         05h "F_DescAllocInt21" allocate descriptor for PM INT 21
  1196.         06h "F_WhereIsDPMI" get address of DPMI global data
  1197. Return: ???
  1198. Notes:    called by DPMS.EXE and EMM386.EXE
  1199.     the handler for this function may be set by one of the subfunctions
  1200.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  1201.       CX=0001h (see #2426)
  1202.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  1203.       because the request is handled on the initial trap to the memory
  1204.       manager caused by INT instructions, this API must be invoked with
  1205.       an actual INT 2F instruction instead of some simulation such as a
  1206.       far call to the address in the interrupt vector table
  1207. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  1208. --------m-2F2780-----------------------------
  1209. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API - AVAILABLE FOR APPS
  1210.     AX = 2780h
  1211.     CL = function (07h-0Fh)
  1212.     ???
  1213. Return: ???
  1214. Notes:    called by DPMS.EXE and EMM386.EXE
  1215.     the handlers for each of these functions may be set individually by
  1216.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  1217.       return with all registers unchanged
  1218.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  1219.       because the request is handled on the initial trap to the memory
  1220.       manager caused by INT instructions, this API must be invoked with
  1221.       an actual INT 2F instruction instead of some simulation such as a
  1222.       far call to the address in the interrupt vector table
  1223. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  1224. --------T-2F2781-----------------------------
  1225. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  1226.     AX = 2781h
  1227. Return: ???
  1228. SeeAlso: AX=2782h
  1229. --------T-2F2782-----------------------------
  1230. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  1231.     AX = 2782h
  1232. Return: ???
  1233. SeeAlso: AX=2781h
  1234. --------m-2F2783-----------------------------
  1235. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  1236.     AX = 2783h
  1237. Return: AX = ???
  1238.     BX = ???
  1239. --------T-2F278F-----------------------------
  1240. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  1241.     AX = 278Fh
  1242.     as for INT 2F/AX=2780h
  1243. Return: as for INT 2F/AX=2780h
  1244. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  1245.       without changing any other registers
  1246. SeeAlso: AX=2780h/CL=01h,AX=2782h
  1247. --------F-2F2A-------------------------------
  1248. INT 2F - Gammafax DOS Dispatcher INTERFACE
  1249.     AH = 2Ah
  1250. Note:    details not available at this time
  1251. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  1252. --------V-2F2E00-----------------------------
  1253. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  1254.     AX = 2E00h
  1255. Return: AH = FFh if installed
  1256. Note:    this installation check does not follow the usual format of setting
  1257.       AL to FFh
  1258. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  1259. --------V-2F2E-------------------------------
  1260. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  1261.     AH = 2Eh
  1262.     AL nonzero
  1263. Return: AH = FFh if installed
  1264.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  1265. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  1266. --------t-2F3900-----------------------------
  1267. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  1268.     AX = 3900h
  1269. Return: AL = status
  1270.         00h not installed
  1271.         FFh one or more TSRs using this interface is installed
  1272.         DX may be destroyed
  1273. Note:    this function is provided to that the multiplex number will appear used
  1274.       to other programs
  1275. SeeAlso: AH=39h/BL=00h
  1276. --------t-2F39--BL00-------------------------
  1277. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  1278.     AH = 39h
  1279.     BL = 00h
  1280.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #2429)
  1281. Return: AL = status
  1282.         00h not installed
  1283.         FFh installed
  1284.         DX = segment address of resident module
  1285. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  1286.       resident module is installed by allocating a block of upper memory,
  1287.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  1288.       field with the TSR's name.
  1289. SeeAlso: #2430,AX=3900h,AH=39h/BL=01h
  1290.  
  1291. (Table 2429)
  1292. Values for Kingswood TSR ID number:
  1293.  01h    TSR Windows
  1294.  02h    NOBUSY
  1295.  03h    CD STACK
  1296.  04h    DISK WATCH
  1297.  05h    PUSHBP
  1298.  06h    ALIAS
  1299.  07h    KEYMACRO
  1300.  08h    SLOWDOWN
  1301.  09h    ANSIGRAB
  1302.  0Ah    TEE
  1303.  0Bh    FASTMOUS
  1304.  0Ch    EXTWILD
  1305.  0Dh    BREAKOUT
  1306.  0Eh    STOPDISK
  1307.  0Fh    MEMINIT
  1308.  10h    JANUSEXT
  1309.  11h    CAPS
  1310.  12h    ANSI
  1311.  13h    TRAPPER
  1312.  14h    EATMEM
  1313.  15h    WPJOKE
  1314.  16h    SHOWDOS
  1315.  17h    LOGINTS
  1316.  18h    BLANKVGA
  1317.  19h    SWAPEXEC
  1318.  1Ah    SHELL
  1319.  1Bh    TSRGAMES
  1320.  
  1321. Format of Kingswood TSR modules:
  1322. Offset    Size    Description    (Table 2430)
  1323.  00h  4 BYTEs    signature "FTSR"
  1324.  04h    WORD    segment address of this module (used to check validity)
  1325.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  1326.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  1327.         (usually only a PSP if file access is required)
  1328.      5N BYTEs    interrupt list (see #2431)
  1329.     BYTE    FFh terminator
  1330.  
  1331. Format of Kingswood TSR interrupt list entry:
  1332. Offset    Size    Description    (Table 2431)
  1333.  00h    BYTE    interrupt number (00h-FEh)
  1334.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  1335.  03h    WORD    offset within segment of begin of interrupt handler code
  1336. --------t-2F39--BL01-------------------------
  1337. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  1338.     AH = 39h
  1339.     BL = 01h
  1340.     AL = TSR ID number (01h-FFh) (see #2429)
  1341. Return: AL = status
  1342.         00h not ready to be removed
  1343.         FFh resident module may be removed by deassigning the interrupts
  1344.           hooked by the TSR and deallocating the TSR's memory block
  1345.     AH,BX,CX,DX,ES may be destroyed
  1346. SeeAlso: AX=3900h,AH=39h/BL=00h
  1347. --------t-2F39-------------------------------
  1348. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  1349.     AH = 39h
  1350.     BL = function number (02h-FFh)
  1351.     AL = TSR ID number (01h-FFh) (see #2429)
  1352.     CX,DX,SI,DI,DS,ES may contain parameters
  1353.     BH reserved for use by the function dispatcher
  1354. Return: as appropriate for the called function
  1355. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  1356. --------r-2F3901BL02-------------------------
  1357. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  1358.     AX = 3901h
  1359.     BL = 02h
  1360. Return: AX = error code (0000h if successful)
  1361.     SI,DI,DS,ES preserved
  1362. Notes:    opens the next TSR window on top of any others.     Only three
  1363.       TSR windows can be opened at any one time.  The three windows
  1364.       are all 40x11 characters, partly overlapping.
  1365. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  1366. --------r-2F3901BL03-------------------------
  1367. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  1368.     AX = 3901h
  1369.     BL = 03h
  1370. Return: AX = error code (0000h if successful)
  1371.     SI,DI,DS,ES preserved
  1372. Notes:    Hide any visible TSR windows from view.
  1373. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  1374. --------r-2F3901BL04-------------------------
  1375. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  1376.     AX = 3901h
  1377.     BL = 04h
  1378. Return: AX = error code (0000h if successful)
  1379.     SI,DI,DS,ES preserved
  1380. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  1381. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  1382. --------r-2F3901BL05-------------------------
  1383. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  1384.     AX = 3901h
  1385.     BL = 05h
  1386. Return: AX = error code (0000h if successful)
  1387.     SI,DI,DS,ES preserved
  1388. Notes:    Close the last opened TSR window.
  1389. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  1390. --------r-2F3901BL06-------------------------
  1391. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  1392.     AX = 3901h
  1393.     BL = 06h
  1394.     DS:SI -> title string
  1395. Return: AX = error code (0000h if successful)
  1396.     SI,DI,DS,ES preserved
  1397. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  1398. --------r-2F3901BL07-------------------------
  1399. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  1400.     AX = 3901h
  1401.     BL = 07h
  1402.     CH = Y coordinate (0-10)
  1403.     CL = X coordinate (0-39)
  1404. Return: AX = error code (0000h if successful)
  1405.     SI,DI,DS,ES preserved
  1406. Note:    the hardware cursor is always disabled when a TSR window is opened;
  1407.       this call only sets a text position
  1408. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  1409. --------r-2F3901BL08-------------------------
  1410. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  1411.     AX = 3901h
  1412.     BL = 08h
  1413.     DS:SI -> string
  1414. Return: AX = error code (0000h if successful)
  1415.     SI,DI,DS,ES preserved
  1416. Notes:    The text is not clipped.
  1417.     This routine understands Tab, NewLine and Carriage Return
  1418. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  1419. --------r-2F3901BL09-------------------------
  1420. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  1421.     AX = 3901h
  1422.     BL = 09h
  1423.     CL = scroll direction: 01h up, FFh down, 00h clear window
  1424. Return: AX = error code (0000h if successful)
  1425.     SI,DI,DS,ES preserved
  1426. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  1427. --------r-2F3901BL0A-------------------------
  1428. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  1429.     AX = 3901h
  1430.     BL = 0Ah
  1431.     DX = sound divisor, or 0 for silence.
  1432.          (divide 1843200 by required frequency to get value for DX)
  1433.     CL = sound length in 18.2 Hz clock ticks
  1434. Return: AX = error code (0000h if successful)
  1435.     SI,DI,DS,ES preserved
  1436. SeeAlso: AH=39h/BL=00h
  1437. --------r-2F3901BL0B-------------------------
  1438. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  1439.     AX = 3901h
  1440.     BL = 0Bh
  1441.     CL = number of users increment: +1 if adding a new user
  1442.                     -1 if removing a user
  1443. Return: AX = error code (0000h if successful)
  1444.     SI,DI,DS,ES preserved
  1445. Note:    the TSR windows resident module may only be removed when the internal
  1446.       user count is zero
  1447. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  1448. --------V-2F3912BL03-------------------------
  1449. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  1450.     AX = 3912h
  1451.     BL = 03h
  1452.     CL = new mode (00h fast, FFh BIOS)
  1453. Return: AL = old compatibility mode
  1454.     SI,DI,DS,ES preserved
  1455. SeeAlso: AX=3900h,AX=3912h/BL=04h
  1456. --------V-2F3912BL04-------------------------
  1457. INT 2F - Kingswood ANSI display driver - SET FLAGS
  1458.     AX = 3912h
  1459.     BL = 04h
  1460.     CL = new flags (see #2432)
  1461. Return: AL = old flags
  1462.     SI,DI,DS,ES preserved
  1463. SeeAlso: AX=3900h,AX=3912h/BL=03h
  1464.  
  1465. Bitfields for Kingswood ANSI flags:
  1466. Bit(s)    Description    (Table 2432)
  1467.  0    do not wrap at end of line
  1468.  1    wait for beeps to end before displaying next character
  1469.  2    do not use graphics cursor
  1470. --------W-2F4000-----------------------------
  1471. INT 2F - Windows 3+ (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABILTIES
  1472.     AX = 4000h
  1473. Return: AL = video virtualization (see #2433)
  1474. Note:    this function is used by display drivers to find out what capabilities
  1475.       exist for the VDD driver and also trigger the VDD driver to call
  1476.       functions 4005h and 4006h.  This function also gives the Video Driver
  1477.       hardware access to the video registers.
  1478.  
  1479. (Table 2433)
  1480. Values for Windows video virtualization:
  1481.  01h    does not virtualize video access
  1482.  02h    virtualizes the video when in text mode
  1483.  03h    virtualizes the video when in text mode or single plane graphics modes
  1484.  04h    virtualizes the video when in text mode, single plane graphics modes,
  1485.       and VGA multiplane modes
  1486.  FFh    virtualizes the video fully
  1487. --------O-2F4001-----------------------------
  1488. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  1489.     AX = 4001h
  1490. Note:    called by OS/2 when the DOS box is about to be placed in the background
  1491.       and the video driver should save any necessary state
  1492. SeeAlso: AX=4002h,AX=4005h
  1493. --------O-2F4002-----------------------------
  1494. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  1495.     AX = 4002h
  1496. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  1497.       and the video driver should restore the previously-saved state
  1498. SeeAlso: AX=4001h,AX=4006h
  1499. --------W-2F4003-----------------------------
  1500. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  1501.     AX = 4003h
  1502. Note:    This critical section must be exited within 1 second.
  1503. SeeAlso: AX=4004h
  1504. --------W-2F4004-----------------------------
  1505. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  1506.     AX = 4004h
  1507. SeeAlso: AX=4003h
  1508. --------W-2F4005-----------------------------
  1509. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  1510.     AX = 4005h
  1511. Note:    called by Windows when the DOS box is about to be placed in the
  1512.       background and the video driver should save any necessary state
  1513.       information (this may be called only in Standard mode)
  1514. SeeAlso: AX=4001h,AX=4006h
  1515. --------W-2F4006-----------------------------
  1516. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  1517.     AX = 4006h
  1518. Note:    called by Windows when the DOS box is about to be placed in the
  1519.       foreground and the video driver should restore any necessary state
  1520.       information (this may be called only in Standard mode)
  1521. SeeAlso: AX=4002h,AX=4005h
  1522. --------W-2F4007-----------------------------
  1523. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  1524.     AX = 4007h
  1525. Note:    used by Windows Standard mode
  1526. --------O-2F4010-----------------------------
  1527. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  1528.     AX = 4010h
  1529. Return: AX = 4010h if OS/2 not installed
  1530.     AX = 0000h for OS/2 Warp 3.0
  1531.     BX = OS/2 version if installed
  1532. Note:    OS/2 Warp 3.0
  1533. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  1534. --------O-2F4011-----------------------------
  1535. INT 2F - OS/2 - GET VDD API ENTRY POINT
  1536.     AX = 4011h
  1537.     DS:(E)SI -> ASCIZ name of VDD registered with VDHRegisterAPI
  1538. Return: ES:DI -> breakpoint address to call for VDD API, or 0000h:0000h
  1539. Note:    this function may be invoked from either V86 or protected mode, and
  1540.       will return the appropriate address to call for invoking the VDD
  1541.       in that mode
  1542. SeeAlso: AX=1684h"DEVICE API"
  1543. --------V-2F4021-----------------------------
  1544. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1545.     AX = 4021h
  1546.     ???
  1547. Return: ???
  1548. SeeAlso: AX=4022h,AX=4023h
  1549. --------V-2F4022-----------------------------
  1550. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1551.     AX = 4022h
  1552.     ???
  1553. Return: ???
  1554. SeeAlso: AX=4021h,AX=4023h
  1555. --------V-2F4023-----------------------------
  1556. INT 2F UC - Diamond Stealth64 Video - STLTH64.VXD - ???
  1557.     AX = 4023h
  1558.     ???
  1559. Return: ???
  1560. SeeAlso: AX=4021h,AX=4022h
  1561. --------V-2F4027-----------------------------
  1562. INT 2F UC - Diamond Stealth64 Video - DMSSTL.DRV - ???
  1563.     AX = 4027h
  1564.     ???
  1565. Return: ???
  1566. Notes:    called when ???
  1567.     a protected-mode handler for this function may be installed with the
  1568.       function RFV_HOOKINT2FHANDLER
  1569. SeeAlso: AX=4021h,AX=4022h
  1570. --------E-2F4040-----------------------------
  1571. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  1572.     AX = 4040h
  1573. Return: BX:CX -> ???
  1574. --------N-2F4100-----------------------------
  1575. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  1576.     AX = 4100h
  1577. Return: CF clear if successful
  1578.         AL = FFh
  1579.     CF set on error
  1580.         AX = ???
  1581. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  1582.     LAN Manager enhanced mode adds features beyond the standard redirector
  1583.       file/printer services
  1584. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  1585. --------N-2F4103-----------------------------
  1586. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  1587.     AX = 4103h
  1588. Return: ???
  1589. SeeAlso: AX=4100h,AX=4104h
  1590. --------N-2F4104-----------------------------
  1591. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  1592.     AX = 4104h
  1593. Return: ???
  1594. SeeAlso: AX=4100h,AX=4103h
  1595. --------N-2F42-------------------------------
  1596. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  1597.     AH = 42h
  1598.     ???
  1599. Return: ???
  1600. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  1601.       file/printer services
  1602. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  1603. --------m-2F4300-----------------------------
  1604. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  1605.     AX = 4300h
  1606. Return: AL = 80h XMS driver installed
  1607.     AL <> 80h no driver
  1608. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  1609.       above 640K
  1610.     this installation check DOES NOT follow the format used by other
  1611.       software
  1612. SeeAlso: AX=4310h,AX=1687h,INT 67/AH=40h,@xxxxh:xxxxh"PMM"
  1613. Index:    installation check;XMS version 2+
  1614. --------m-2F4308-----------------------------
  1615. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  1616.     AX = 4308h
  1617. Return: AL = 43h if supported
  1618.         BL = A20 handler number (value of /MACHINE:nn switch)
  1619.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  1620. Note:    if the A20 handler number returned in BL is 00h, an external handler
  1621.       is being used (see AX=4330h)
  1622. SeeAlso: AX=4309h,AX=4330h
  1623. --------m-2F4309-----------------------------
  1624. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  1625.     AX = 4309h
  1626. Return: AL = 43h if function supported
  1627.         ES:BX -> XMS handle table (see #2434)
  1628. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  1629. SeeAlso: AX=4308h
  1630.  
  1631. Format of XMS handle table:
  1632. Offset    Size    Description    (Table 2434)
  1633.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  1634.  01h    BYTE    size of one handle descriptor
  1635.  02h    WORD    number of handles (default = 20h)
  1636.  04h    DWORD    pointer to XMS handle array (see #2435)
  1637. SeeAlso: #2464
  1638.  
  1639. Format of XMS handle descriptor [array]:
  1640. Offset    Size    Description    (Table 2435)
  1641.  00h    BYTE    flag
  1642.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  1643.  01h    BYTE    lock count (00h=unlocked)
  1644.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  1645.  06h    DWORD    size of XMS block in KB
  1646. --------m-2F4310-----------------------------
  1647. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  1648.     AX = 4310h
  1649. Return: ES:BX -> driver entry point (see #2436,#2437,#2440,#2447,#2456,#2461)
  1650. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  1651.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  1652.       the driver entry point
  1653. SeeAlso: AX=4300h,AX=4310h"Cloaking",AX=4310h"Netroom",AX=4310h"XMZ"
  1654.  
  1655. Format of XMS driver entry point:
  1656. Offset    Size    Description    (Table 2436)
  1657.  00h  5 BYTEs    jump to actual handler
  1658.         either short jump (EBh XXh) followed by three NOPs or
  1659.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  1660.           into the XMS driver chain
  1661. Note:    to hook into the XMS driver chain, a program should follow the chain of
  1662.       far jumps until it reaches the short jump of the driver at the end
  1663.       of the chain; this short jump is to be replaced with a far jump to
  1664.       the new handler's entry point, which should contain a short jump
  1665.       followed by three NOPs.  The new handler must return to the address
  1666.       pointed at by the short jump which was overwritten.  Using this
  1667.       method, the new handler becomes the first to see every XMS request.
  1668.  
  1669. (Table 2437)
  1670. Call the XMS driver "Get XMS version number" function with:
  1671.     AH = 00h
  1672. Return: AX = XMS version (in BCD, AH=major, AL=minor)
  1673.     BX = internal revision number (in BCD for HIMEM.SYS)
  1674.     DX = High Memory Area (HMA) state
  1675.         0001h HMA (1M to 1M + 64K) exists
  1676.         0000h HMA does not exist
  1677. SeeAlso: #2438,#2439,#2444,#2445,#2451
  1678.  
  1679. (Table 2438)
  1680. Call the XMS driver "Request High Memory Area" function with:
  1681.     AH = 01h
  1682.     DX = memory in bytes (for TSR or device drivers)
  1683.         FFFFh if application program
  1684. Return: AX = status
  1685.         0001h success
  1686.         0000h failure
  1687.         BL = error code (80h,81h,90h,91h,92h) (see #2462)
  1688. Note:    HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  1689.       DX=KB free extended memory returned by last call of function 08h
  1690. SeeAlso: #2439,#2471
  1691.  
  1692. (Table 2439)
  1693. Call the XMS driver "Release High Memory Area" function with:
  1694.     AH = 02h
  1695. Return: AX = status
  1696.         0001h success
  1697.         0000h failure
  1698.         BL = error code (80h,81h,90h,93h) (see #2462)
  1699. SeeAlso: #2438
  1700.  
  1701. (Table 2440)
  1702. Call the XMS driver "Global enable A20, for using the HMA" function with:
  1703.     AH = 03h
  1704. Return: AX = status
  1705.         0001h success
  1706.         0000h failure
  1707.         BL = error code (80h,81h,82h) (see #2462)
  1708. SeeAlso: #2441,#2442,MSR 00001000h
  1709.  
  1710. (Table 2441)
  1711. Call the XMS driver "Global disable A20" function with:
  1712.     AH = 04h
  1713. Return: AX = status
  1714.         0001h success
  1715.         0000h failure
  1716.         BL = error code (80h,81h,82h,94h) (see #2462)
  1717. SeeAlso: #2440,#2443,MSR 00001000h
  1718.  
  1719. (Table 2442)
  1720. Call the XMS driver "Local enable A20" function with:
  1721.     AH = 05h
  1722. Return: AX = status
  1723.         0001h success
  1724.         0000h failure
  1725.         BL = error code (80h,81h,82h) (see #2462)
  1726. Note:    this function is used for direct access to extended memory
  1727. SeeAlso: #2440,#2443
  1728.  
  1729. (Table 2443)
  1730. Call the XMS driver "Local disable A20" function with:
  1731.     AH = 06h
  1732. Return: AX = status
  1733.         0001h success
  1734.         0000h failure
  1735.         BL = error code (80h,81h,82h,94h) (see #2462)
  1736. SeeAlso: #2441,#2442
  1737.  
  1738. (Table 2444)
  1739. Call the XMS driver "Query A20 state" function with:
  1740.     AH = 07h
  1741. Return: AX = status
  1742.         0001h enabled
  1743.         0000h disabled
  1744.         BL = error code (00h,80h,81h) (see #2462)
  1745. SeeAlso: #2437,#2445
  1746.  
  1747. (Table 2445)
  1748. Call the XMS driver "Query free extended memory" function with:
  1749.     AH = 08h
  1750.     BL = 00h (some implementations leave BL unchanged on success)
  1751. Return: AX = size of largest extended memory block in KB
  1752.     DX = total extended memory in KB
  1753.     BL = error code (00h,80h,81h,A0h) (see #2462)
  1754. Note:    this function does not include the HMA in the returned memory sizes
  1755. SeeAlso: #2437,#2444,#2446,#2458
  1756.  
  1757. (Table 2446)
  1758. Call the XMS driver "Allocate extended memory block" function with:
  1759.     AH = 09h
  1760.     DX = Kbytes needed
  1761. Return: AX = status
  1762.         0001h success
  1763.         DX = handle for memory block
  1764.         0000h failure
  1765.         BL = error code (80h,81h,A0h) (see #2462)
  1766. SeeAlso: #2445,#2448,#2451,#2452,#2453,#2459
  1767.  
  1768. (Table 2447)
  1769. Call the XMS driver "Free extended memory block" function with:
  1770.     AH = 0Ah
  1771.     DX = handle of block to free
  1772. Return: AX = status
  1773.         0001h success
  1774.         0000h failure
  1775.         BL = error code (80h,81h,A2h,ABh) (see #2462)
  1776. SeeAlso: #2446,#2459
  1777.  
  1778. (Table 2448)
  1779. Call the XMS driver "Move extended memory block" function with:
  1780.     AH = 0Bh
  1781.     DS:SI -> EMM structure (see #2463)
  1782. Return: AX = status
  1783.         0001h success
  1784.         0000h failure
  1785.         BL = error code (80h-82h,A3h-A9h) (see #2462)
  1786. Note:    if either handle in the EMM structure is 0000h, the corresponding
  1787.       offset is considered to be an absolute segment:offset address in
  1788.       directly addressable memory
  1789. SeeAlso: #2446,#2449
  1790.  
  1791. (Table 2449)
  1792. Call the XMS driver "Lock extended memory block" function with:
  1793.     AH = 0Ch
  1794.     DX = handle of block to lock
  1795. Return: AX = status
  1796.         0001h success
  1797.         DX:BX = 32-bit physical address of locked block
  1798.         0000h failure
  1799.         BL = error code (80h,81h,A2h,ACh,ADh) (see #2462)
  1800. Note:    MS Windows 3.x rejects this function for handles allocated after
  1801.       Windows started
  1802. SeeAlso: #2446,#2448,#2450
  1803.  
  1804. (Table 2450)
  1805. Call the XMS driver "Unlock extended memory block" function with:
  1806.     AH = 0Dh
  1807.     DX = handle of block to unlock
  1808. Return: AX = status
  1809.         0001h success
  1810.         0000h failure
  1811.         BL = error code (80h,81h,A2h,AAh) (see #2462)
  1812. SeeAlso: #2449
  1813.  
  1814. (Table 2451)
  1815. Call the XMS driver "Get handle information" function with:
  1816.     AH = 0Eh
  1817.     DX = handle for which to get info
  1818. Return: AX = status
  1819.         0001h success
  1820.         BH = block's lock count
  1821.         BL = number of free handles left
  1822.         DX = block size in KB
  1823.         0000h failure
  1824.         BL = error code (80h,81h,A2h) (see #2462)
  1825. BUG:    MS Windows 3.10 acts as though unallocated handles are in use
  1826. Note:    MS Windows 3.00 has problems with this call
  1827. SeeAlso: #2437,#2446,#2460
  1828.  
  1829. (Table 2452)
  1830. Call the XMS driver "Reallocate extended memory block" function with:
  1831.     AH = 0Fh
  1832.     DX = handle of block
  1833.     BX = new size of block in KB
  1834. Return: AX = status
  1835.         0001h success
  1836.         0000h failure
  1837.         BL = error code (80h,81h,A0h-A2h,ABh) (see #2462)
  1838. SeeAlso: #2446,#2455
  1839.  
  1840. (Table 2453)
  1841. Call the XMS driver "Request upper memory block" function with:
  1842.     AH = 10h
  1843.     DX = size of block in paragraphs
  1844. Return: AX = status
  1845.         0001h success
  1846.         BX = segment address of UMB
  1847.         DX = actual size of block
  1848.         0000h failure
  1849.         BL = error code (80h,B0h,B1h) (see #2462)
  1850.         DX = largest available block
  1851. Notes:    Upper Memory consists of non-EMS memory between 640K and 1024K
  1852.     the XMS driver need not implement functions 10h through 12h to be
  1853.       considered compliant with the standard
  1854.     under DOS 5+, if CONFIG.SYS contains the line DOS=UMB, then no upper
  1855.       memory blocks will be available for allocation because all blocks
  1856.       have been grabbed by MS-DOS while booting
  1857. SeeAlso: #2446,#2454,#2472,INT 21/AH=58h"UMB"
  1858.  
  1859. (Table 2454)
  1860. Call the XMS driver "Release upper memory block" function with:
  1861.     AH = 11h
  1862.     DX = segment address of UMB to release
  1863. Return: AX = status
  1864.         0001h success
  1865.         0000h failure
  1866.         BL = error code (80h,B2h) (see #2462)
  1867. Note:    the XMS driver need not implement functions 10h through 12h to be
  1868.       considered compliant with the standard
  1869. SeeAlso: #2447,#2453,#2455
  1870.  
  1871. (Table 2455)
  1872. Call the XMS v3.0+ driver "Reallocate upper memory block" function with:
  1873.     AH = 12h
  1874.     DX = segment address of UMB to resize
  1875.     BX = new size of block in paragraphs
  1876. Return: AX = status
  1877.         0001h success
  1878.         0000h failure
  1879.         BL = error code (80h,B0h,B2h) (see #2462)
  1880.         DX = maximum available size (RM386)
  1881. Note:    the XMS driver need not implement functions 10h through 12h to be
  1882.       considered compliant with the standard
  1883. SeeAlso: #2452,#2453,#2454,#2470
  1884.  
  1885. (Table 2456)
  1886. Call the QEMM v5.11 "???" function with:
  1887.     AH = 34h  (QEMM 5.11 only, undocumented)
  1888.     ???
  1889. Return: ???
  1890. SeeAlso: #2457
  1891.  
  1892. (Table 2457)
  1893. Call the QEMM v5.11 "???" function with:
  1894.     AH = 44h  (QEMM 5.11 only, undocumented)
  1895.     ???
  1896. Return: ???
  1897. SeeAlso: #2456,#2470
  1898.  
  1899. (Table 2458)
  1900. Call the XMS v3.0 driver "Query free extended memory" function with:
  1901.     AH = 88h
  1902. Return: EAX = largest block of extended memory, in KB
  1903.     BL = status (00h,80h,81h,A0h) (see #2462)
  1904.     ECX = physical address of highest byte of memory
  1905.         (valid even on error codes 81h and A0h)
  1906.     EDX = total Kbytes of extended memory (0 if status A0h)
  1907. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  1908.       are called
  1909. SeeAlso: #2445,#2459
  1910.  
  1911. (Table 2459)
  1912. Call the XMS v3.0 driver "Allocate any extended memory" function with:
  1913.     AH = 89h
  1914.     EDX = Kbytes needed
  1915. Return: AX = status
  1916.         0001h success
  1917.         DX = handle for allocated block (free with AH=0Ah) (see #2447)
  1918.         0000h failure
  1919.         BL = status (80h,81h,A0h,A1h,A2h) (see #2462)
  1920. SeeAlso: #2446,#2458
  1921.  
  1922. (Table 2460)
  1923. Call the XMS v3.0 driver "Get extended EMB handle information" function with:
  1924.     AH = 8Eh
  1925.     DX = handle
  1926. Return: AX = status
  1927.         0001h success
  1928.         BH = block's lock count
  1929.         CX = number of free handles left
  1930.         EDX = block size in KB
  1931.         0000h failure
  1932.         BL = status (80h,81h,A2h) (see #2462)
  1933. BUG:    MS-DOS 6.0 HIMEM.SYS leaves CX unchanged
  1934. SeeAlso: #2451,#2459,#2461
  1935.  
  1936. (Table 2461)
  1937. Call the XMS v3.0 driver "Reallocate any extended memory block" function with:
  1938.     AH = 8Fh
  1939.     DX = unlocked memory block handle
  1940.     EBX = new size in KB
  1941. Return: AX = status
  1942.         0001h success
  1943.         0000h failure
  1944.         BL = status (80h,81h,A0h-A2h,ABh) (see #2462)
  1945. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  1946.       are called
  1947. SeeAlso: #2452,#2460
  1948.  
  1949. (Table 2462)
  1950. Values for XMS error code returned in BL:
  1951.  00h    successful
  1952.  80h    function not implemented
  1953.  81h    Vdisk was detected
  1954.  82h    an A20 error occurred
  1955.  8Eh    a general driver error
  1956.  8Fh    unrecoverable driver error
  1957.  90h    HMA does not exist or is not managed by XMS provider
  1958.  91h    HMA is already in use
  1959.  92h    DX is less than the /HMAMIN= parameter
  1960.  93h    HMA is not allocated
  1961.  94h    A20 line still enabled
  1962.  A0h    all extended memory is allocated
  1963.  A1h    all available extended memory handles are allocated
  1964.  A2h    invalid handle
  1965.  A3h    source handle is invalid
  1966.  A4h    source offset is invalid
  1967.  A5h    destination handle is invalid
  1968.  A6h    destination offset is invalid
  1969.  A7h    length is invalid
  1970.  A8h    move has an invalid overlap
  1971.  A9h    parity error occurred
  1972.  AAh    block is not locked
  1973.  ABh    block is locked
  1974.  ACh    block lock count overflowed
  1975.  ADh    lock failed
  1976.  B0h    only a smaller UMB is available
  1977.  B1h    no UMB's are available
  1978.  B2h    UMB segment number is invalid
  1979.  
  1980. Format of EMM structure:
  1981. Offset    Size    Description    (Table 2463)
  1982.  00h    DWORD    number of bytes to move (must be even)
  1983.  04h    WORD    source handle
  1984.  06h    DWORD    offset into source block
  1985.  0Ah    WORD    destination handle
  1986.  0Ch    DWORD    offset into destination block
  1987. Notes:    if source and destination overlap, only forward moves (source base
  1988.       less than destination base) are guaranteed to work properly
  1989.     if either handle is zero, the corresponding offset is interpreted
  1990.       as a real-mode address referring to memory directly addressable
  1991.       by the processor
  1992.  
  1993. Format of XMS handle info [array]:
  1994. Offset    Size    Description    (Table 2464)
  1995.  00h    BYTE    handle
  1996.  01h    BYTE    lock count
  1997.  02h    DWORD    handle size
  1998.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  1999. SeeAlso: #2434
  2000. --------m-2F4310-----------------------------
  2001. INT 2F - Cloaking - REAL-MODE API
  2002.     AX = 4310h
  2003. Return: ES:BX -> driver entry point (see #2436,#2465,#2466,#2467,#2468)
  2004. SeeAlso: AX=4310h"XMS"
  2005.  
  2006. (Table 2465)
  2007. Call the Cloaking v1.01 "Client Registration" function with:
  2008.     AH = 7Eh
  2009.     BX = subfunction
  2010.         0000h get client registration count
  2011.         0001h get client registration structures
  2012.         ES:DI -> buffer for registration structures
  2013. Return: AX = status
  2014.         0000h failed
  2015.         0001h successful
  2016.         ---subfunction 00h---
  2017.         BX = size of client structure in bytes
  2018.         CX = number of clients installed
  2019.         ---subfunction 01h---
  2020.         ES:DI buffer filled
  2021. SeeAlso: #2466,#2468,INT 2C/AX=0033h
  2022.  
  2023. (Table 2466)
  2024. Call the Cloaking v1.01 "Verify Cloaking Host" function with:
  2025.     AH = 7Fh
  2026. Return: AX = status
  2027.         0000h failed
  2028.         0001h (successful) if installed
  2029.         BX = version (0101h for v1.01)
  2030.         CX = flags
  2031.             bit 0: host is VCPI-based
  2032.         DS:DX -> ASCIZ Cloaking host signature
  2033.             "CLOAKING.EXE"0, followed by a far-call entry point to
  2034.               uninstall host (see #2467) in Helix's CLOAKING.EXE
  2035. SeeAlso: #2465,#2468
  2036. Index:    installation check;Cloaking host|installation check;CLOAKING.EXE
  2037.  
  2038. (Table 2467)
  2039. Call the CLOAKING.EXE "Uninstall Host" function with:
  2040. Return: AX = 4F4Bh ('OK') if successfully uninstalled protected-mode code
  2041.  
  2042. (Table 2468)
  2043. Call the Cloaking "Start Protected-Mode Client" function with:
  2044.     AH = 82h
  2045.     DX = XMS handle of locked block containing protected-mode code
  2046.     CL = code size (00h 16-bit, else 32-bit)
  2047.     ESI, EDI = parameters to pass to protected-mode code
  2048. Return: AX = status
  2049.         nonzero success
  2050.         0000h failed
  2051.         BL = error code (A2h,B0h) (see #2462)
  2052. Notes:    this function calls a user initialization function at offset 0 in
  2053.       the XMS memory block (see #2469)
  2054.     supported by Helix's RM386 v6.00 and Helix's CLOAKING.EXE
  2055. SeeAlso: #2465,#2466
  2056.  
  2057. (Table 2469)
  2058. Values user initialization function is called with:
  2059.     EBX = physical address of block's start
  2060.     ESI = user data from function 82h call
  2061.     EDI = user data from function 82h call
  2062.     CS = code selector for XMS block at EBX (16-bit or 32-bit)
  2063.     DS = data selector for XMS block, starting at EBX
  2064.     ES = selector for V86 memory access to full real-mode 1088K
  2065.     GS = selector for full 4G flat address space
  2066.     SS:ESP -> stack provided by host
  2067. Return: via 32-bit FAR return
  2068. Note:    the initialization function may call any protected-mode Cloaking
  2069.       service; it should store the values of DS, ES, and GS for future
  2070.       reference
  2071. --------m-2F4310-----------------------------
  2072. INT 2F - Helix Netroom RM386 v6.00 - XMS EXTENSIONS
  2073.     AX = 4310h
  2074. Return: ES:BX -> driver entry point (see #2470,#2471,#2472,#2473)
  2075. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  2076.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  2077.       the driver entry point
  2078. SeeAlso: AX=4300h,AX=4310h"XMS",AX=4310h"Cloaking"
  2079.  
  2080. (Table 2470)
  2081. Call the Netroom RM386 v6.00 "Reallocate upper memory block" function with:
  2082.     AH = 80h
  2083.     DX = segment address of UMB to resize
  2084.     BX = new size of block in paragraphs
  2085. Return: AX = status
  2086.         0001h success
  2087.         0000h failure
  2088.         BL = error code (80h,B0h,B2h) (see #2462)
  2089.         DX = maximum available size
  2090. Note:    this function is identical to function 12h
  2091. SeeAlso: #2455,#2471
  2092.  
  2093. (Table 2471)
  2094. Call the Netroom RM386 v6.00 "re-enable HMA allocation" function with:
  2095.     AH = 81h
  2096. Return: AX = 0001h (success)
  2097. SeeAlso: #2438,#2470,#2472
  2098.  
  2099. (Table 2472)
  2100. Call the Netroom RM386 v6.00 "Create new UMB entry" function with:
  2101.     AH = 83h
  2102.     BX = segment of high-memory block
  2103.     DX = first page of start of block
  2104.     CX = number of consecutive pages in block
  2105.     DI = start of UMB in block
  2106. Return: AX = 0001h (success)
  2107.     DI = segment of first high-DOS block
  2108. Note:    the new UMB is not linked into the high-memory chain
  2109. SeeAlso: #2453,#2471,#2473
  2110.  
  2111. (Table 2473)
  2112. Call the Netroom RM386 v6.00 "Get all XMS handles info" function with:
  2113.     AH = 84h
  2114.     CX = size of buffer for handle info
  2115.     ES:DI -> buffer for handle info (see #2464)
  2116. Return: AX = 0001h (success)
  2117.     DX = current number of allocated XMS handles
  2118. SeeAlso: #2472,#2458
  2119. --------m-2F4310-----------------------------
  2120. INT 2F - NEC PC-9800 - XMZ - PRIVATE API
  2121.     AX = 4310h
  2122. Return: ES:BX -> driver entry point (see #2474,#2475)
  2123. Program: XMZ is an XMS 2.x-compatible driver for the NEC PC-98 series written
  2124.       by ZOBplus Hayami and available at
  2125.       ftp:/ftp.tohoku.ac.jp/pub/msdos/Memory/xmz/
  2126. SeeAlso: AX=4300h,AX=4310h"XMS"
  2127.  
  2128. (Table 2474)
  2129. Call XMZ v1.02 "Get HMA Information" function with:
  2130.     AH = FFh  (XMZ only)
  2131.     AL = 01h
  2132. Return: AX = 1 on success
  2133.     DX = minimum HMA allocation size (/HMAMIN=)
  2134.     BX = actual size of HMA allocation, if in use (i.e. the value in DX
  2135.           when XMS function 1 was called)
  2136. SeeAlso: #2475
  2137.  
  2138. (Table 2475)
  2139. Call XMZ v1.02 "Get EMB Handle Information" function with:
  2140.     AH = FFh  (XMZ only)
  2141.     AL = 02h
  2142. Return: AX = 1 on success
  2143.     DX = number of EMB handles configured (/NUMHANDLES=)
  2144.     BX = offset in XMZ's segment of the handle table (use segment of
  2145.           entry point) (see #2476)
  2146. SeeAlso: #2474
  2147.  
  2148. Format of XMZ v1.02 EMB Handle structure:
  2149. Offset    Size    Description    (Table 2476)
  2150.  00h    BYTE    flag byte
  2151.         04h unused handle slot
  2152.         02h in-use handle slot
  2153.         01h handle slot that represents a free block
  2154.  01h    BYTE    lock count
  2155.  02h    WORD    block start address (1K increments)
  2156.  04h    WORD    block length (1K increments)
  2157. SeeAlso: #2475
  2158. --------m-2F4320-----------------------------
  2159. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  2160.     AX = 4320h
  2161.     ???
  2162. Return: ???
  2163. --------m-2F4330-----------------------------
  2164. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  2165.     AX = 4330h
  2166. Return: AL = 80h if external A20 handler provided
  2167.         ES:BX -> external A20 handler (see #2477)
  2168.         CL = A20 detection support
  2169.         00h handler is unable to report A20 state
  2170.         01h handler supports function 0002h to report A20 state
  2171. Note:    HIMEM.SYS calls this function to allow an external program to provide
  2172.       an A20 handler (i.e. to support a machine not supported by HIMEM
  2173.       itself)
  2174. SeeAlso: AX=4308h,AX=4310h
  2175.  
  2176. (Table 2477)
  2177. Call parameters for external A20 handler are:
  2178.     AX = function
  2179.         0000h disable A20
  2180.         0001h enable A20
  2181.         0002h get A20 state
  2182. Return: AX = status (functions 0000h and 0001h)
  2183.         0000h failure
  2184.         0001h successful
  2185.     AX = A20 state (function 0002h)
  2186.         0000h disabled
  2187.         0001h enabled
  2188. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  2189.       the handler supports the call
  2190. ----------2F43D6-----------------------------
  2191. INT 2F - Multiplex - ???
  2192.     AX = 43D6h
  2193. Note:    Central Point's CPBACKUP v9 calls this function with CX=07FFh and
  2194.       DX=80D3h at startup
  2195. --------E-2F43E0BX0000-----------------------
  2196. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - INSTALLATION CHECK
  2197.     AX = 43E0h
  2198.     BX = 0000h
  2199.     CX = 4450h ('DP')
  2200.     DX = 4D53h ('MS')
  2201. Return: AX = 0000h if installed
  2202.         CF clear
  2203.         ES:DI -> server structure (see #2478)
  2204.         ES:BX -> registration structure (pre-NWDOS 7 beta spec) (see #2480)
  2205. Note:    the DPMS 1.0 server included with the original release of Novell DOS
  2206.       7.0 supports both the beta and 1.0 specification, setting ES:BX even
  2207.       if CX and DX are not as specified on entry (since the beta
  2208.       specification did not use those registers).  However, the DPMS 1.1
  2209.       server included with the March 1994 update does not support the beta
  2210.       specification
  2211. SeeAlso: AX=43E1h,AX=43E2h,AX=43E3h,INT 2F/AX=1687h
  2212. Index:    signature strings;DPMS
  2213.  
  2214. Format of DPMS 1.0 server structure:
  2215. Offset    Size    Description    (Table 2478)
  2216.  00h  4 BYTEs    signature string "DPMS"
  2217.  04h  2 BYTEs    DPMS version (major,minor)
  2218.  06h  8 BYTEs    blank-padded server OEM name
  2219.  0Eh  2 BYTEs    OEM server version (major,minor)
  2220.  10h    WORD    DPMS flags (see #2479)
  2221.  12h    BYTE    CPU type
  2222.         (02h = 286, 03h = 386 or higher, higher values allowed)
  2223.  
  2224. Bitfields for DPMS flags:
  2225. Bit(s)    Description    (Table 2479)
  2226.  0    fast processor reset available (286 only)
  2227.  1    DPMS server is enabled
  2228.  2    memory is remapped
  2229.  3-15    reserved (undefined)
  2230.  
  2231. Format of beta DPMS registration structure:
  2232. Offset    Size    Description    (Table 2480)
  2233.  00h    DWORD    real-mode API entry point (see #2482)
  2234.  04h    DWORD    16-bit protected-mode API entry point (see #2482)
  2235.  08h  8 BYTEs    reserved (0)
  2236.  10h  8 BYTEs    blank-padded server OEM name
  2237.  18h    WORD    flags
  2238.         bit 0: fast processor reset available (286 only)
  2239.         bits 1-15 reserved (undefined)
  2240.  1Ah  2 BYTEs    DPMS version (major,minor)
  2241.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  2242. --------m-2F43E1-----------------------------
  2243. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - REGISTER CLIENT
  2244.     AX = 43E1h
  2245.     CX = required protected-mode stack size in bytes
  2246.     ES:DI -> DPMS client interface structure (see #2481)
  2247. Return: AX = 0000h if supported
  2248.        CF clear
  2249.        ES:DI buffer filled with API entry point code from offset 0Ah
  2250. Note:    the client is allowed to copy the returned API code to any location in
  2251.       memory, and need not keep the three code fields together
  2252. SeeAlso: AX=43E0h,AX=43E2h,AX=43E3h
  2253.  
  2254. Format of DPMS client interface structure:
  2255. Offset    Size    Description    (Table 2481)
  2256.  00h    WORD    0000h (structure version / flags)
  2257.  02h  8 BYTEs    blank-padded client name
  2258.  0Ah  7 BYTEs    real/virtual-86 mode API code (see #2482)
  2259.  11h    BYTE    space for return instruction
  2260.         set to C3h for near return, CBh for far return
  2261.  12h  7 BYTEs    16-bit protected-mode API code (see #2482)
  2262.  19h    BYTE    space for return instruction
  2263.         set to C3h for near return, CBh for far return
  2264.  1Ah  9 BYTEs    32-bit protected-mode API code (see #2482)
  2265.  23h    BYTE    space for return instruction
  2266.         set to C3h for near return, CBh for far return
  2267. Note:    the DPMS server fills the return opcode bytes with zeros and DPMS
  2268.       requests will thus crash the system unless the application
  2269.       explicitly sets them (some early versions set them to C3h by
  2270.       default, but one should not rely on that)
  2271.  
  2272. (Table 2482)
  2273. Call DPMS entry point with:
  2274.     AX = 0000h unregister client from server
  2275.  ---control transfer functions---
  2276.     AX = 0100h call protected-mode procedure
  2277.         CX = number of words of stack to copy
  2278.         ES:(E)DI -> callup/down register structure (see #2484)
  2279.         Return: CF clear if successful
  2280.             CF set on error
  2281.                 AX = error code (see #2483)
  2282.     AX = 0101h call real-mode procedure (RETF return)
  2283.         CX = number of words of stack to copy
  2284.         ES:(E)DI -> callup/down register structure (see #2484)
  2285.         Return: CF clear if successful
  2286.             CF set on error
  2287.                 AX = error code (see #2483)
  2288.     AX = 0102h call real-mode procedure (IRET return)
  2289.         CX = number of words of stack to copy
  2290.         ES:(E)DI -> callup/down register structure (see #2484)
  2291.         Return: CF clear if successful
  2292.             CF set on error
  2293.                 AX = error code (see #2483)
  2294.     AX = 0103h call real-mode interrupt handler
  2295.         BL = interrupt number
  2296.         CX = number of words of stack to copy
  2297.         ES:(E)DI -> callup/down register structure (see #2484)
  2298.         Return: CF clear if successful
  2299.             CF set on error
  2300.                 AX = error code (see #2483)
  2301.     AX = 0104h register default protected mode procedure
  2302.         ES:(E)DI -> default register structure (see #2485)
  2303.         Return: CF clear if successful
  2304.             CF set on error
  2305.                 AX = error code (see #2483)
  2306.     AX = 0105h register default real-mode procedure (RETF return)
  2307.         ES:(E)DI -> default register structure (see #2485)
  2308.         Return: CF clear if successful
  2309.             CF set on error
  2310.                 AX = error code (see #2483)
  2311.         Note:    the procedure will be called from 16-bit prot. mode
  2312.     AX = 0106h register default real-mode procedure (IRET return)
  2313.         ES:(E)DI -> default register structure (see #2485)
  2314.         Return: CF clear if successful
  2315.             CF set on error
  2316.                 AX = error code (see #2483)
  2317.         Note:    the procedure will be called from 16-bit prot. mode
  2318.     AX = 0107h register default real-mode interrupt handler
  2319.         BL = interrupt number
  2320.         ES:(E)DI -> default register structure (see #2485)
  2321.         Return: CF clear if successful
  2322.             CF set on error
  2323.                 AX = error code (see #2483)
  2324.         Note:    the handler will be called from 16-bit protected mode
  2325.     AX = 0108h register default real-mode procedure (RETF return)
  2326.         ES:(E)DI -> default register structure (see #2485)
  2327.         Return: CF clear if successful
  2328.             CF set on error
  2329.                 AX = error code (see #2483)
  2330.         Note:    the procedure will be called from 32-bit prot. mode
  2331.     AX = 0109h register default real-mode procedure (IRET return)
  2332.         ES:(E)DI -> default register structure (see #2485)
  2333.         Return: CF clear if successful
  2334.             CF set on error
  2335.                 AX = error code (see #2483)
  2336.         Note:    the procedure will be called from 32-bit prot. mode
  2337.     AX = 010Ah register default real-mode interrupt handler
  2338.         BL = interrupt number
  2339.         ES:(E)DI -> default register structure (see #2485)
  2340.         Return: CF clear if successful
  2341.             CF set on error
  2342.                 AX = error code (see #2483)
  2343.         Note:    the handler will be called from 32-bit protected mode
  2344.  ---descriptor management---
  2345.     AX = 0200h allocate descriptors
  2346.         CX = number of descriptors to allocate
  2347.         Return: CF clear if successful
  2348.                 AX = selector for first descriptor allocated
  2349.             CF set on error
  2350.                 AX = error code (see #2483)
  2351.     AX = 0201h free a descriptor
  2352.         BX = selector for descriptor
  2353.         Return: CF clear if successful
  2354.             CF set on error
  2355.                 AX = error code (see #2483)
  2356.     AX = 0202h create alias descriptor
  2357.         BX = selector for descriptor to be aliased
  2358.         Return: CF clear if successful
  2359.                 AX = alias descriptor
  2360.             CF set on error
  2361.                 AX = error code (see #2483)
  2362.     AX = 0203h build alias to real-mode segment
  2363.         BX = descriptor
  2364.         CX = real-mode segment
  2365.         Return: CF clear if successful
  2366.             CF set on error
  2367.                 AX = error code (see #2483)
  2368.     AX = 0204h set descriptor base
  2369.         BX = descriptor
  2370.         CX:DX = base address
  2371.         Return: CF clear if successful
  2372.             CF set on error
  2373.                 AX = error code (see #2483)
  2374.     AX = 0205h set descriptor limit
  2375.         BX = descriptor
  2376.         CX = limit
  2377.         Return: CF clear if successful
  2378.             CF set on error
  2379.                 AX = error code (see #2483)
  2380.     AX = 0206h set descriptor type/attribute
  2381.         BX = descriptor
  2382.         CL = type
  2383.         CH = attribute
  2384.         Return: CF clear if successful
  2385.             CF set on error
  2386.                 AX = error code (see #2483)
  2387.     AX = 0207h get descriptor base
  2388.         BX = descriptor
  2389.         Return: CF clear if successful
  2390.                 CX:DX = base address
  2391.             CF set on error
  2392.                 AX = error code (see #2483)
  2393.  ---linear memory functions---
  2394.     AX = 0300h get size of largest free block of memory
  2395.         Return: CF clear if successful
  2396.                 BX:CX = size
  2397.             CF set on error
  2398.                 AX = error code (see #2483)
  2399.     AX = 0301h allocate block of extended memory
  2400.         BX:CX = required size
  2401.         Return: CF clear if successful
  2402.                 BX:CX = base address
  2403.                 SI:DI = handle
  2404.             CF set on error
  2405.                 AX = error code (see #2483)
  2406.     AX = 0302h free block of extended memory
  2407.         SI:DI = handle
  2408.         Return: CF clear if successful
  2409.             CF set on error
  2410.                 AX = error code (see #2483)
  2411.     AX = 0303h map linear memory
  2412.         ES:(E)DI -> DDS (see #2486)
  2413.         Return: CF clear if successful
  2414.                 BX:CX = base address
  2415.                 SI:DI = handle
  2416.             CF set on error
  2417.                 AX = error code (see #2483)
  2418.     AX = 0304h unmap linear memory
  2419.         SI:DI = handle
  2420.         Return: CF clear if successful
  2421.             CF set on error
  2422.                 AX = error code (see #2483)
  2423.     AX = 0305h get page table entries
  2424.         ESI = linear address
  2425.         (E)CX = count
  2426.         ES:(E)DI -> buffer for page table entries
  2427.         Return: CF clear if successful
  2428.                 ES:(E)DI buffer filled
  2429.             CF set on error
  2430.                 AX = error code (see #2483)
  2431.     AX = 0306h set page table entries
  2432.         EBX = linear memory handle
  2433.         ESI = linear address
  2434.         (E)CX = count
  2435.         ES:(E)DI -> buffer containing page table entries
  2436.         Return: CF clear if successful
  2437.             CF set on error
  2438.                 AX = error code (see #2483)
  2439.     AX = 0307h get largest mappable block size
  2440.         Return: CF clear if successful
  2441.                 BX:CX = size
  2442.             CF set on error
  2443.                 AX = error code (see #2483)
  2444.  ---miscellaneous---
  2445.     AX = 0400h relocate segment to extended memory
  2446.         ES:SI = base address
  2447.         CX = limit
  2448.         BL = type
  2449.         BH = attribute
  2450.         DX = selector or 0000h
  2451.         Return: CF clear if successful
  2452.                 AX = selector
  2453.                 BX:CX = new base address
  2454.                 SI:DI = handle
  2455.             CF set on error
  2456.                 AX = error code (see #2483)
  2457. Note:    the beta DPMS specification, which is still supported by the Novell
  2458.       DOS 7.0 DPMS host, only supported functions 0100h-0103h, 0200h-0207h,
  2459.       0300h-0304h, and 0400h
  2460.  
  2461. (Table 2483)
  2462. Values for DPMS error code:
  2463.  8000h    general error
  2464.  8001h    unsupported function
  2465.  8002h    unable to switch to protected mode
  2466.  8004h    no default stack defined
  2467.  8005h    unknown client
  2468.  8010h    resource unavailable
  2469.  8011h    descriptor unavailable
  2470.  8012h    linear memory unavailable
  2471.  8013h    physical memory unavailable
  2472.  8021h    invalid value
  2473.  8022h    invalid selector
  2474.  8023h    invalid handle
  2475.  8025h    invalid linear address
  2476.  
  2477. Format of DPMS callup/down register structure:
  2478. Offset    Size    Description    (Table 2484)
  2479.  00h    DWORD    EDI
  2480.  04h    DWORD    ESI
  2481.  08h    DWORD    EBP
  2482.  0Ch  4 BYTEs    reserved (0) (ESP, may be used by DPMS server)
  2483.  10h    DWORD    EBX
  2484.  14h    DWORD    EDX
  2485.  18h    DWORD    ECX
  2486.  20h    DWORD    EAX
  2487.  24h    DWORD    EIP
  2488.  28h    WORD    CS
  2489.  2Ah  2 BYTEs    reserved (0)
  2490.  2Ch    DWORD    EFLAGS
  2491.  30h    DWORD    ESP
  2492.  34h    WORD    SS
  2493.  36h  2 BYTEs    reserved (0)
  2494.  38h    WORD    ES
  2495.  3Ah  2 BYTEs    reserved (0)
  2496.  3Ch    WORD    DS
  2497.  3Eh  2 BYTEs    reserved (0)
  2498.  40h    WORD    FS
  2499.  42h  2 BYTEs    reserved (0)
  2500.  44h    WORD    GS
  2501.  46h  2 BYTEs    reserved (0)
  2502.  
  2503. Format of DPMS default register structure:
  2504. Offset    Size    Description    (Table 2485)
  2505.  00h    DWORD    EIP
  2506.  04h    WORD    CS
  2507.  06h  2 BYTEs    reserved (0)
  2508.  08h    WORD    number of words to copy from stack to stack
  2509.  0Ah    BYTE    (call) 00h
  2510.         (ret) nonzero if call could not be made
  2511.  0Bh    BYTE    reserved (may be used by some servers)
  2512.  0Ch    DWORD    ESP
  2513.  10h    WORD    SS
  2514.  12h  2 BYTEs    reserved (0)
  2515.  14h    WORD    ES
  2516.  16h  2 BYTEs    reserved (0)
  2517.  18h    WORD    DS
  2518.  1Ah  2 BYTEs    reserved (0)
  2519.  1Ch    WORD    FS
  2520.  1Eh  2 BYTEs    reserved (0)
  2521.  20h    WORD    GS
  2522.  22h  2 BYTEs    reserved (0)
  2523.  24h  9 BYTEs    API entry code (filled in by server)
  2524.  
  2525. Format of DPMS lock DDS:
  2526. Offset    Size    Description    (Table 2486)
  2527.  00h    DWORD    total size in bytes
  2528.  04h    DWORD    offset
  2529.  08h    WORD    segment or selector
  2530.  0Ah    WORD    reserved
  2531.  0Ch    WORD    maximum number of physical blocks structure has space for
  2532.  0Eh    WORD    number of physical blocks listed
  2533.  10h    DWORD    physical address of first block
  2534.  14h    DWORD    size in bytes of first block
  2535.     ...
  2536. --------m-2F43E2-----------------------------
  2537. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - ENABLE/DISABLE DPMS
  2538.     AX = 43E2h
  2539.     BX = new state (0000h disable, 0001h enable)
  2540. Return: AX = 0000h if supported
  2541. Note:    this function should normally be called only by system software
  2542. SeeAlso: AX=43E0h,AX=43E1h,AX=43E3h
  2543. --------m-2F43E3BX0000-----------------------
  2544. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS STARTUP BROADCAST
  2545.     AX = 43E3h
  2546.     BX = 0000h
  2547.     CX = 4450h ('DP')
  2548.     DX = 4D53h ('MS')
  2549. SeeAlso: AX=43E0h,AX=43E4h
  2550. --------m-2F43E4BX0000-----------------------
  2551. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS EXIT BROADCAST
  2552.     AX = 43E4h
  2553.     BX = 0000h
  2554.     CX = 4450h ('DP')
  2555.     DX = 4D53h ('MS')
  2556. SeeAlso: AX=43E0h,AX=43E3h
  2557. --------E-2F44-------------------------------
  2558. INT 2F U - DOS Extender support???
  2559.     AH = 44h
  2560.     AL = function (at least 0Bh, 15h, 17h)
  2561.     ???
  2562. Return: ???
  2563. Note:    called by Codeview for Windows
  2564. SeeAlso: AH=86h
  2565. --------G-2F4500-----------------------------
  2566. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  2567.     AX = 4500h
  2568. Return: AL = installation status
  2569.         01h if PROF.COM installed
  2570.         02h if VPROD.386 installed
  2571. SeeAlso: AX=4501h,AX=4502h
  2572. --------G-2F4501-----------------------------
  2573. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  2574.     AX = 4501h
  2575.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  2576.     CX = output limit in KB (second parameter for ProfSetup)
  2577. Note:    this call is not supported by PROF.COM
  2578. SeeAlso: AX=4502h,AX=4503h
  2579. --------G-2F4502-----------------------------
  2580. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  2581.     AX = 4502h
  2582.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  2583.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  2584.     CX = sampling rate for VPROD.386
  2585. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  2586.       low four bits of CMOS register 0Ah.  The interruption rate is
  2587.       1 SHL (15 - BL) per second.
  2588. SeeAlso: AX=4501h,AX=4503h
  2589. --------G-2F4503-----------------------------
  2590. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  2591.     AX = 4503h
  2592. Notes:    Profiling is also turned on by the key combinations
  2593.       LeftShift + RightShift + Alt and LeftShift + RightShift + Ctrl
  2594.     for PROF.COM, this call programs the CMOS clock by reading register
  2595.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  2596.       is unmasked
  2597. SeeAlso: AX=4504h
  2598. --------G-2F4504-----------------------------
  2599. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  2600.     AX = 4504h
  2601. Notes:    profiling is also turned off by the key combination
  2602.       LeftShift + RightShift
  2603.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  2604.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  2605. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  2606. --------G-2F4505-----------------------------
  2607. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  2608.     AX = 4505h
  2609. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  2610. --------G-2F4506-----------------------------
  2611. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  2612.     AX = 4506h
  2613. SeeAlso: AX=4505h,AX=4507h
  2614. --------G-2F4507-----------------------------
  2615. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  2616.     AX = 4507h
  2617. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  2618.       "ProfFlush" (AX=4506h)
  2619. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  2620. --------G-2F4508-----------------------------
  2621. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  2622.     AX = 4508h
  2623.     BX = ordinal (or 0000h)
  2624.     CX = segment
  2625.     DX = instance (or 0000h)
  2626.     SI = type (or 0000h)
  2627.     ES:DI -> ASCIZ module name
  2628. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  2629.       interface, but only to function 0, for notifying the profiler of
  2630.       each new segment loaded.  The SHOWHITS utility then examines the
  2631.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  2632.       with symbol files to provide information in a useful form.
  2633.     this call does not have a corresponding Windows function
  2634. SeeAlso: AX=4500h
  2635. --------D-2F4601-----------------------------
  2636. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  2637.     AX = 4601h
  2638. Return: ???
  2639. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  2640.        following the caller's PSP memory block into the DOS data segment;
  2641.        in conjunction with AX=4602h, this intercept is used by DOS to
  2642.        avoid corruption of the Windows real-mode heap's end sentinel
  2643. SeeAlso: AX=1700h,AX=4602h
  2644. --------D-2F4602-----------------------------
  2645. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  2646.     AX = 4602h
  2647. Return: ???
  2648. Note:    the DOS 5+ kernel intercepts this function and copies the
  2649.       previously-saved MCB from the DOS data segment into the MCB following
  2650.       the caller's PSP memory block; in conjunction with AX=4601h, this
  2651.       intercept is used by DOS to avoid corruption of the Windows real-mode
  2652.       heap's end sentinel
  2653. SeeAlso: AX=1700h,AX=4601h
  2654. --------E-2F46-------------------------------
  2655. INT 2F U - Windows/286 DOS Extender
  2656.     AH = 46h
  2657.     AL = subfunction (03h,04h)
  2658. Return: ???
  2659. Note:    these two subfunctions are called by MS Windows 3.0
  2660. --------v-2F4653CX0002-----------------------
  2661. INT 2F - F-PROT v1.x only - F-LOCK.EXE - API
  2662.     AX = 4653h ('FS')
  2663.     CX = 0002h
  2664.     BX = subfunction
  2665.         0000h  installation check
  2666.         Return: AX = FFFFh
  2667.         0001h  uninstall
  2668.         Return: AX,BX,ES destroyed
  2669.         0002h  disable (v1.08 and below only)
  2670.         0003h  enable (v1.08 and below only)
  2671. Program: F-LOCK is part of the shareware F-PROT virus/trojan protection
  2672.       package by Fridrik Skulason
  2673. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  2674. Index:    installation check;F-LOCK|uninstall;F-LOCK
  2675. --------v-2F4653CX0003-----------------------
  2676. INT 2F - F-PROT v1.x only - F-XCHK.EXE - API
  2677.     AX = 4653h ('FS')
  2678.     CX = 0003h
  2679.     BX = subfunction
  2680.         0000h  installation check
  2681.         Return: AX = FFFFh
  2682.         0001h  uninstall
  2683.         Return: AX,BX,ES destroyed
  2684. Program: F-XCHK is part of the shareware F-PROT virus/trojan protection
  2685.       package by Fridrik Skulason
  2686. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  2687. Index:    installation check;F-XCHK|uninstall;F-XCHK
  2688. --------v-2F4653CX0004-----------------------
  2689. INT 2F - F-PROT v1.x only - F-POPUP.EXE - API
  2690.     AX = 4653h ('FS')
  2691.     CX = 0004h
  2692.     BX = subfunction
  2693.         0000h  installation check
  2694.         Return: AX = FFFFh
  2695.         0001h  uninstall
  2696.         Return: AX,BX,ES destroyed
  2697.         0002h  disable (v1.08 and below only)
  2698.            display message (v1.14+)
  2699.             other registers: ???
  2700.         0003h  enable (v1.08 and below only)
  2701.            display message (v1.14+)
  2702.             other registers: ???
  2703.             Return: AX = key pressed by user
  2704. Program: F-POPUP is part of the shareware F-PROT virus/trojan protection
  2705.       package by Fridrik Skulason
  2706. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  2707. Index:    installation check;F-POPUP|uninstall;F-POPUP
  2708. --------v-2F4653CX0005-----------------------
  2709. INT 2F - F-PROT v1.x only - F-DLOCK.EXE - API
  2710.     AX = 4653h ('FS')
  2711.     CX = 0005h
  2712.     BX = subfunction
  2713.         0000h installation check
  2714.         Return: AX = FFFFh
  2715.         0001h uninstall
  2716.         Return: AX,BX,ES destroyed
  2717. Program: F-DLOCK is part of the shareware F-PROT virus/trojan protection
  2718.       package by Fridrik Skulason
  2719. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  2720. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  2721. ----------2F4653CX0007-----------------------
  2722. INT 2F - F-PROT v2.x - VIRSTOP - ENABLE/DISABLE BOOTSECTOR READ CHECKING
  2723.     AX = 4653h ('FS')
  2724.     CX = 0007h
  2725.     BL = new state of bootsector checking (01h = disabled)
  2726. Program: VIRSTOP is the resident virus-checker from Fridrik Skulason's F-PROT
  2727.       virus/trojan protection package
  2728. ----------2F4653CX0008-----------------------
  2729. INT 2F - F-PROT v2.x - ???
  2730.     AX = 4653h ('FS')
  2731.     CX = 0008h
  2732.     ???
  2733. Return: ???
  2734. Note:    called by F-PROT v2.x VIRSTOP
  2735. ----------2F4653CX0008-----------------------
  2736. INT 2F - F-PROT v2.x - VIRSTOP - INSTALLATION CHECK
  2737.     AX = 4653h ('FS')
  2738.     CX = 0008h
  2739. Return: AX = 5346h if installed
  2740.         BX = version???
  2741.         DS:SI -> ASCIZ name of file containing virus signatures
  2742.         DS:DI -> 80-byte buffer for ???
  2743. --------W-2F4680-----------------------------
  2744. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  2745.     AX = 4680h
  2746. Return: AX = result
  2747.         0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  2748.           or DOS 5 DOSSHELL active
  2749.         nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  2750.           mode
  2751. Note:    Windows 3.1 finally provides an installation check which works in all
  2752.       modes (see AX=160Ah)
  2753. SeeAlso: AX=1600h,AX=160Ah
  2754. ----------2F47-------------------------------
  2755. INT 2F U - ???
  2756.     AH = 47h
  2757.     ???
  2758. Return: ???
  2759. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  2760. --------K-2F4800-----------------------------
  2761. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  2762.     AX = 4800h
  2763. Return: AL = nonzero if installed
  2764.         (DOS 5.0 and 6.0 return AX=AA02h, Novell DOS 7 returns AX=EDFFh)
  2765.         ES = segment of DOSKEY resident portion
  2766.         DX = ??? (Novell DOS only; 02E6h for shipped v0.01)
  2767. Notes:    DOSKEY chains if AL is not 00h or 10h on entry
  2768.     this function is supported by Novell DOS 7 DOSKEY
  2769. SeeAlso: AX=4800h"PCED",AX=4810h
  2770. --------K-2F4800-----------------------------
  2771. INT 2F - PCED v2.1 - INSTALLATION CHECK
  2772.     AX = 4800h
  2773. Return: AX = AACDh if installed
  2774.         ES = segment of PCED kernel (PCED has multiple code segments)
  2775. Program: PCED v2.1 is a command line editor/history/macro facility by
  2776.       Cove Software.  It is the commercial version of the freeware CED.
  2777. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  2778.     unlike DOSKEY, PCED does *not* chain if AL contains an
  2779.       unsupported function code.  It IRETs with all registers intact.
  2780. --------K-2F4810-----------------------------
  2781. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  2782.     AX = 4810h
  2783.     DS:DX -> line buffer (see #1033 at INT 21/AH=0Ah)
  2784. Return: AX = 0000h if successful
  2785. Notes:    the first byte (length) of the buffer MUST be 80h, or MS-DOS's DOSKEY
  2786.       chains to the previous handler; PCED and Novell DOS allow sizes
  2787.       other than 80h
  2788.     if the user's input is a macro name, no text is placed in the buffer
  2789.       even though AX=0000h on return; the program must immediately issue
  2790.       this call again to retrieve the expansion of the macro.  Similarly,
  2791.       if the user enters a special parameter such as $*, this call must
  2792.       be repeated to retrieve the expansion; on the second call, DOSKEY
  2793.       overwrites the macro name on the screen with its expansion.
  2794.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  2795.       not necessary to make two calls; since the buffer is not empty on
  2796.       return, DOSKEY-aware programs will not make the second call
  2797.     DOSKEY chains if AL is not 00h or 10h on entry
  2798.     this function is supported by Novell DOS 7 DOSKEY
  2799. SeeAlso: AX=4800h,INT 21/AH=0Ah
  2800. --------K-2F48C0-----------------------------
  2801. INT 2F - PCED v2.1 - PCED API
  2802.     AX = 48C0h
  2803.     DX = API function code
  2804.     other registers as required by the specified function
  2805. Return: CF clear if successful
  2806.     CF set on error
  2807.         AX = PCED error code
  2808.     other registers as appropriate for API function
  2809. Program: PCED v2.1 is a command line editor/history/macro facility by
  2810.       Cove Software.  It is the commercial version of the freeware CED.
  2811. Note:    the full API information is available from Cove Software
  2812. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  2813. --------U-2F48C1BL00-------------------------
  2814. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  2815.     AX = 48C1h
  2816.     BL = 00h
  2817. Return: AX = 0000h if installed
  2818.         BX = VSTACK resident segment
  2819. Program: VSTACK is a resident backscroll utility included as part of the PCED
  2820.       package by Cove Software
  2821. Note:    chains if BL <> 00h on entry
  2822. SeeAlso: AX=48C0h,AX=48C2h
  2823. --------U-2F48C2BL00-------------------------
  2824. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  2825.     AX = 48C2h
  2826.     BL = 00h
  2827. Return: AX = 0000h if installed
  2828.         BX = ATTRIB resident segment
  2829. Program: ATTRIB is a resident file attribute changer included as part of the
  2830.       PCED package by Cove Software
  2831. Note:    chains if BL <> 00h on entry
  2832. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  2833. --------K-2F48C3BL00-------------------------
  2834. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  2835.     AX = 48C3h
  2836.     BL = 00h
  2837. Return: AX = 0000h if installed
  2838.         BX = KEYDEF resident segment
  2839. Program: KEYDEF is a resident keyboard redefinition utility included as part
  2840.       of the PCED package by Cove Software
  2841. Note:    chains if BL <> 00h on entry
  2842. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  2843. --------U-2F48C4BL00-------------------------
  2844. INT 2F - PCED/FLIST - INSTALLATION CHECK
  2845.     AX = 48C4h
  2846.     BL = 00h
  2847. Return: AX = 0000h if installed
  2848.         BX = FLIST resident segment
  2849. Program: FLIST is a resident filelist processor included as part of the PCED
  2850.       package by Cove Software
  2851. Note:    chains if BL <> 00h on entry
  2852. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  2853. --------U-2F48C5BL00-------------------------
  2854. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  2855.     AX = 48C5h
  2856.     BL = 00h
  2857. Return: AX = 0000h if installed
  2858.         BX = ASSOC resident segment
  2859. Program: ASSOC is a resident utility included as part of the PCED package which
  2860.       associates files with executable programs based on their extensions
  2861. Note:    chains if BL > 02h on entry
  2862. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  2863. --------U-2F48C5BL01-------------------------
  2864. INT 2F - PCED/ASSOC - GET VERSION
  2865.     AX = 48C5h
  2866.     BL = 01h
  2867. Return: AX = 0000h if installed
  2868.         BX = binary ASSOC version (BL = major, BH = minor)
  2869. Note:    chains if BL > 02h on entry
  2870. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  2871. --------U-2F48C5BL02-------------------------
  2872. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  2873.     AX = 48C5h
  2874.     BL = 02h
  2875.     DS:SI -> ASCIZ filename
  2876. Return: AX = status
  2877.         0000h if filename is unknown
  2878.         0001h if there is an association defined for the file
  2879.     BX destroyed
  2880. Program: ASSOC is a resident utility included as part of the PCED package which
  2881.       associates files with executable programs based on their extensions
  2882. Note:    chains if BL > 02h on entry
  2883. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  2884. ----------2F49-------------------------------
  2885. INT 2F U - ???
  2886.     AH = 49h
  2887.     ???
  2888. Return: ???
  2889. Note:    reportedly called by DOS 5.0 installation
  2890. --------D-2F4A00CX0000-----------------------
  2891. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  2892.     AX = 4A00h
  2893.     CX = 0000h
  2894.     DH = new drive number
  2895.     DL = current drive number
  2896. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  2897. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  2898.       "Insert diskette for drive X:" on single-floppy systems
  2899. --------D-2F4A01-----------------------------
  2900. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  2901.     AX = 4A01h
  2902. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  2903.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  2904. Notes:    called by Windows 3.1 DOSX.EXE
  2905.     supported by Novell DOS 7
  2906. SeeAlso: AX=4310h,AX=4A02h
  2907. --------D-2F4A02-----------------------------
  2908. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  2909.     AX = 4A02h
  2910.     BX = number of bytes
  2911. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  2912.     BX = number of bytes actually allocated (rounded up to next paragraph
  2913.           for DOS 5.0 and 6.0)
  2914. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  2915.     called by Windows 3.1 DOSX.EXE
  2916.     supported by Novell DOS 7
  2917. SeeAlso: AX=4A01h
  2918. --------T-2F4A05-----------------------------
  2919. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  2920.     AX = 4A05h
  2921.     SI = function
  2922.         0000h reset???
  2923.         0001h ???
  2924.         ES:BP -> 80-byte buffer containing ???
  2925.         0002h ???
  2926.         0003h ???
  2927.         0004h ???
  2928.         BL = ???
  2929.         0005h ???
  2930.         0006h get ???
  2931.         Return: ES:SI -> ???
  2932.         0007h get ???
  2933.         Return: AX = ???
  2934.         0008h get ???
  2935.         Return: DX:AX -> ??? (internal control data of some kind)
  2936.         0009h get ???
  2937.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  2938.         000Ah ???
  2939.         BL = length of buffer
  2940.         ES:BP -> buffer containing ???
  2941.         000Bh get ???
  2942.         Return: AX = ???
  2943.         000Ch ???
  2944.         BL = ???
  2945.         Return: if BL nonzero on entry
  2946.                 DX:AX -> ???
  2947.             if BL = 00h on entry
  2948.                 ES:SI -> ???
  2949. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  2950.       listed above
  2951.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  2952.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  2953. SeeAlso: AX=4B01h
  2954. --------D-2F4A06-----------------------------
  2955. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  2956.     AX = 4A06h
  2957.     DX = segment following last byte of conventional memory
  2958. Return: DX = segment following last byte of memory available for use by DOS
  2959. Desc:    used to override the default memory size when booting diskless
  2960.       workstations
  2961. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  2962.       present three bytes beyond the INT 2F handler; this call overrides
  2963.       the value returned by INT 12
  2964.     hooked by RPL code at the top of memory to protect itself from being
  2965.       overwritten; DOS builds a memory block with owner = 0008h and name
  2966.       "RPL" which must be freed by the RPL code when it is done
  2967. SeeAlso: INT 12"BIOS",INT 18"BOOT HOOK"
  2968. --------N-2F4A07-----------------------------
  2969. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  2970.     AX = 4A07h
  2971.     ???
  2972. Return: ???
  2973. --------c-2F4A10BX0000-----------------------
  2974. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  2975.     AX = 4A10h
  2976.     BX = 0000h
  2977.     CX = EBABh (v4.1+; see Note)
  2978. Return: AX = BABEh if installed
  2979.         DX:BX = cache hits
  2980.         DI:SI = cache misses
  2981.         CX = number of dirty cache elements
  2982.         BP = version in BCD (4.10 = 0410h)
  2983. Notes:    most of the SMARTDRV API, including this call, is supported by
  2984.       PC-Cache v8.0 and recent versions of the Norton Caches
  2985.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  2986.       then calls of this function with CX<>EBABh on entry cause
  2987.       DBLSPACE.BIN to display the error message
  2988.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  2989.       with INT 21/AX=4C00h
  2990.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  2991.       was also supported by the Norton Caches
  2992. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  2993. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  2994. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  2995. --------c-2F4A10BX0000-----------------------
  2996. INT 2F U - Novell NWCACHE - ???
  2997.     AX = 4A10h
  2998.     BX = 0000h
  2999.     CX = 0EDCh ('EDC' = Novell European Development Center)
  3000. Return: ???
  3001. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  3002. --------c-2F4A10BX0001-----------------------
  3003. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  3004.     AX = 4A10h
  3005.     BX = 0001h
  3006. Note:    this function is also supported by PC-Cache v8.0.
  3007. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h,INT 21/AH=0Dh
  3008. --------c-2F4A10BX0001-----------------------
  3009. INT 2F U - Novell NWCACHE - ???
  3010.     AX = 4A10h
  3011.     BX = 0001h
  3012.     CX = 0EDCh ('EDC' = Novell European Development Center)
  3013. Return: ???
  3014. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  3015. --------c-2F4A10BX0002-----------------------
  3016. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  3017.     AX = 4A10h
  3018.     BX = 0002h
  3019. Note:    this function is also supported by PC-Cache v8.0.
  3020. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  3021. --------c-2F4A10BX0003-----------------------
  3022. INT 2F - SMARTDRV v4.00+ - STATUS
  3023.     AX = 4A10h
  3024.     BX = 0003h
  3025.     BP = drive number (0=A, 1=B, etc.)
  3026.     DL = subfunction
  3027.         00h only get information
  3028.         01h turn on read cache
  3029.         02h turn off read cache
  3030.         03h turn on write cache
  3031.         04h turn off write cache
  3032.         ---NWCACHE---
  3033.         05h ???
  3034.         06h ???
  3035. Return: AX = BABEh if OK
  3036.     DL = status (see #2487)
  3037.     DL = FFh if drive does not exist
  3038. Notes:    If the read cache is off, reads will not be cached, but writes will
  3039.       continue to be cached if the write-cache is enabled.
  3040.     this function is also supported by PC-Cache v8.0.
  3041. SeeAlso: AX=4A10h/BX=0000h
  3042.  
  3043. Bitfields for SMARTDRV status:
  3044. Bit(s)    Description    (Table 2487)
  3045.  7    not cached
  3046.  6    write-through (not write-cached)
  3047.  0-5    real drive number (0=A, 1=B...)
  3048. Note:    the "real" drive number is always set to 00h for RAM disks and to 3Fh
  3049.       for CD-ROMs; unfortunately, the latter means that an uncached CD-ROM
  3050.       has status FFh, just as a nonexistent drive does
  3051. --------c-2F4A10BX0004-----------------------
  3052. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  3053.     AX = 4A10h
  3054.     BX = 0004h
  3055. Return: AX = size in elements of full-sized cache
  3056.     BX = current size in elements
  3057.     CX = size of one element in bytes
  3058.     DX = number of elements under Windows
  3059. Note:    this function is also supported by PC-Cache v8.0.
  3060. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  3061. --------c-2F4A10BX0005-----------------------
  3062. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  3063.     AX = 4A10h
  3064.     BX = 0005h
  3065.     BP = drive number (0=A, 1=B...)
  3066. Return: AX = BABEh if double-buffered
  3067.         ES:DI -> 16-byte array of status bytes for fixed disks (see #2488)
  3068. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  3069.  
  3070. (Table 2488)
  3071. Values for SMARTDRV status byte:
  3072.  00h    state unknown
  3073.  FFh    drive double-buffered
  3074.  else    not double-buffered
  3075. --------c-2F4A10BX0006-----------------------
  3076. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  3077.     AX = 4A10h
  3078.     BX = 0006h
  3079.     CL = drive number (01h = A:)
  3080. Return: AX = 0006h if drive should not be cached by SMARTDRV
  3081. Note:    called by SMARTDRV at startup to determine whether it should cache
  3082.       a particular drive
  3083. SeeAlso: AX=4A10h/BX=0000h
  3084. --------c-2F4A10BX0007-----------------------
  3085. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  3086.     AX = 4A10h
  3087.     BX = 0007h
  3088.     BP = drive number (00h=A:)
  3089. Return: DL = unit number within device driver
  3090.     ES:DI -> device driver header for drive (see #1332)
  3091. Note:    this function is also supported by PC-Cache v8.0.
  3092.     this call is reported to always return the driver header of the
  3093.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  3094. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  3095. --------c-2F4A10BX0008-----------------------
  3096. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  3097.     AX = 4A10h
  3098.     BX = 0008h
  3099.     DL = subfunction
  3100.         00h set
  3101.         DH = new states
  3102.             bit 0: flush before prompt
  3103.             bits 1-7 reserved (0)
  3104.         01h get
  3105.         Return: DH = status flags
  3106.                 bit 0: (v4.2+) flush before prompt
  3107.                 bit 1: (v5.0+) CD-ROM caching support installed
  3108. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  3109.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  3110. --------c-2F4A10BX000A-----------------------
  3111. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  3112.     AX = 4A10h
  3113.     BX = 000Ah
  3114. Return: ES:BX -> information pointer table (see #2489)
  3115. Note:    this function is also supported by PC-Cache v8.0.
  3116. SeeAlso: AX=4A10h/BX=0000h
  3117.  
  3118. Format of SMARTDRV information pointer table:
  3119. Offset    Size    Description    (Table 2489)
  3120.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  3121.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  3122.         each byte/word is a bit string of the dirty sectors in element
  3123.  04h    WORD    offset of word array containing low halves of unique
  3124.           identifiers for the corresponding element's contents
  3125.  06h    WORD    offset of word array containing high halves of unique
  3126.           identifiers for the corresponding element's contents
  3127.  08h    WORD    offset of WORD containing current number of elements in cache
  3128. --------c-2F4A10BX1234-----------------------
  3129. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  3130.     AX = 4A10h
  3131.     BX = 1234h
  3132. Desc:    this function pops up a message box saying that a serious error
  3133.       occurred and to hit R to retry, then waits for the keypress
  3134. Note:    this function is also supported by PC-Cache v8.0.
  3135. SeeAlso: AX=4A10h/BX=0000h
  3136. --------k-2F4A11BX0000-----------------------
  3137. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  3138.     AX = 4A11h
  3139.     BX = 0000h
  3140. Return: AX = 0000h (successful)
  3141.     BX = 444Dh ("DM")
  3142.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  3143.     CH = number of drive letters used by DBLSPACE
  3144.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  3145.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  3146.           position in memory (i.e. DBLSPACE.SYS /MOVE)
  3147. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  3148.       disk-compression software bundled with MS-DOS 6.0 and 6.20
  3149. Notes:    this function is also supported by the version of SuperStor bundled
  3150.       with IBM DOS 6.x and "preloading" versions of Stacker
  3151.     the complete DBLSPACE.BIN API is still supported by MS-DOS 6.22's
  3152.       DRVSPACE.BIN
  3153. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  3154. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  3155. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  3156. --------k-2F4A11BX0001-----------------------
  3157. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  3158.     AX = 4A11h
  3159.     BX = 0001h
  3160.     DL = drive number (0=A:)
  3161. Return: AX = status (see also #2490)
  3162.         0000h successful
  3163.         if DL was compressed drive,
  3164.             BL = host drive (bit 7 set if drive is compressed)
  3165.         else if DL was host drive,
  3166.             BL = compressed drive
  3167.         else
  3168.             BL = specified drive (if available for DoubleSpace)
  3169.         BH = DoubleSpace sequence number
  3170.         other error code (0101h) (see #2490)
  3171.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  3172. Note:    the compressed volume file for the specified compressed drive is
  3173.       host:\DBLSPACE.sequence
  3174. SeeAlso: AX=4A11h/BX=0000h
  3175.  
  3176. (Table 2490)
  3177. Values for DBLSPACE function status:
  3178.  0000h    successful
  3179.  0100h    bad function
  3180.  0101h    invalid drive
  3181.  0102h    not a compressed drive
  3182.  0103h    drive already swapped
  3183.  0104h    drive not swapped
  3184. SeeAlso: #2492
  3185. --------k-2F4A11BX0002-----------------------
  3186. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  3187.     AX = 4A11h
  3188.     BX = 0002h
  3189.     DL = drive number (0=A:) of compressed drive to swap with its host
  3190. Return: AX = status (0000h,0101h,0102h,0103h) (see #2490)
  3191. Note:    this function is intended for use by DBLSPACE.EXE only
  3192. SeeAlso: AX=4A11h/BX=0000h
  3193. --------k-2F4A11BX0003-----------------------
  3194. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  3195.     AX = 4A11h
  3196.     BX = 0003h
  3197.     CL = drive number (0=A:) of compressed drive
  3198. Return: CL = FFh on error (not compressed drive)
  3199.     CL <> FFh driver unit number of host drive
  3200.         ES:SI -> device driver's strategy routine
  3201.         ES:DI -> device driver's interrupt routine
  3202.     BX destroyed
  3203. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  3204.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  3205.       drives just like SMARTDRV applies to regular block devices
  3206. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  3207. --------k-2F4A11BX0004-----------------------
  3208. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  3209.     AX = 4A11h
  3210.     BX = 0004h
  3211.     CL = drive number (0=A:) of compressed drive
  3212.     DL = unit number for new driver entry points
  3213.     DH = 00h
  3214.     ES:SI -> device driver strategy routine to call for drive
  3215.     ES:DI -> device driver interrupt routine to call for drive
  3216. Return: CL = FFh on error (not a compressed drive)
  3217.     BX destroyed
  3218. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  3219.       disk-compression software bundled with MS-DOS 6.0
  3220. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  3221.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  3222.       drives just like SMARTDRV applies to regular block devices
  3223. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  3224. --------k-2F4A11BX0005-----------------------
  3225. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  3226.     AX = 4A11h
  3227.     BX = 0005h
  3228.     DL = drive number (0=A:) to assign to new drive
  3229.     ES:SI -> activation record (see #2491)
  3230. Return: status returned in activation record (see #2492)
  3231. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  3232.  
  3233. Format of DBLSPACE activation record:
  3234. Offset    Size    Description    (Table 2491)
  3235.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  3236.  02h    BYTE    4Dh ('M') mount command
  3237.  03h    BYTE    error code (set to FFh before calling) (see #2492)
  3238.  04h    BYTE    host drive number (0=A:)
  3239.  05h    ???    DISK_UNIT structure (not documented)
  3240.  
  3241. (Table 2492)
  3242. Values for DBLSPACE Mount error code:
  3243.  00h    successful
  3244.  01h    drive letter not available for DoubleSpace
  3245.  02h    drive letter already in use
  3246.  03h    no more disk units (increase MaxRemovableDrives in .INI)
  3247.  09h    CVF too fragmented
  3248. SeeAlso: #2491,#2490
  3249. --------k-2F4A11BX0006-----------------------
  3250. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  3251.     AX = 4A11h
  3252.     BX = 0006h
  3253.     DL = drive number (0=A:) to unmount
  3254. Return: AX = status (0000h,0102h) (see #2490)
  3255. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  3256. --------k-2F4A11BX0007-----------------------
  3257. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  3258.     AX = 4A11h
  3259.     BX = 0007h
  3260.     DL = compressed drive number (0=A:)
  3261. Return: AX = status (0000h,0102h) (see also #2490)
  3262.         0000h successful
  3263.         DS:SI -> free space record (see #2493)
  3264. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  3265.       disk-compression software bundled with MS-DOS 6.0
  3266. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  3267.  
  3268. Format of DBLSPACE free space record:
  3269. Offset    Size    Description    (Table 2493)
  3270.  00h    DWORD    total number of sectors in drive's sector heap
  3271.  04h    DWORD    number of free sectors in drive's sector heap
  3272. --------k-2F4A11BX0008-----------------------
  3273. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  3274.     AX = 4A11h
  3275.     BX = 0008h
  3276.     DL = compressed drive number (0=A:)
  3277. Return: AX = status (0000h,0102h) (see also #2490)
  3278.         0000h successful
  3279.         BX = maximum entries in File Fragment heap
  3280.         CX = available entries in File Fragment heap
  3281. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  3282. --------k-2F4A11BX0009-----------------------
  3283. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  3284.     AX = 4A11h
  3285.     BX = 0009h
  3286.     DL = compressed drive number (0=A:)
  3287. Return: AX = status (see also #2490)
  3288.         0000h successful
  3289.         CL = number of DISK_UNIT structures allocated
  3290.               (see AX=4A11h/BX=0005h)
  3291.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  3292. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  3293.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  3294.       the CheckSum= line.
  3295. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  3296. --------k-2F4A11BX000A-----------------------
  3297. INT 2F - DBLSPACE.BIN v6.2 - SET AUTOMOUNT DRIVES
  3298.     AX = 4A11h
  3299.     BX = 000Ah
  3300.     CX:DX = bitmask of drives on which to enable AutoMount
  3301.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  3302. Return: AX = 0000h if supported
  3303.         CX:DX = old mask or 0000h:0000h on error
  3304.     BX destroyed
  3305. SeeAlso: AX=4A11h/BX=000Bh
  3306. --------k-2F4A11BX000B-----------------------
  3307. INT 2F - DBLSPACE.BIN v6.2 - GET AUTOMOUNT DRIVES
  3308.     AX = 4A11h
  3309.     BX = 000Bh
  3310. Return: AX = 0000h if supported
  3311.         CX:DX = mask of drives with AutoMount enabled
  3312.         0000h:0000h on error
  3313.     BX destroyed
  3314. SeeAlso: AX=4A11h/BX=000Ah
  3315. --------k-2F4A11BXFFFE-----------------------
  3316. INT 2F U - DBLSPACE.BIN - RELOCATE
  3317.     AX = 4A11h
  3318.     BX = FFFEh
  3319.     ES = segment to which to relocate DBLSPACE.BIN
  3320. Return: ???
  3321. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  3322.       in memory
  3323.     this function also unhooks and discards the code providing this
  3324.       function and AX=4A11h/BX=FFFFh
  3325.     this function is also supported by the version of SuperStor bundled
  3326.       with IBM DOS 6.x and "preloading" versions of Stacker
  3327. SeeAlso: AX=4A11h/BX=FFFFh
  3328. --------k-2F4A11BXFFFF-----------------------
  3329. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  3330.     AX = 4A11h
  3331.     BX = FFFFh
  3332. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  3333. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  3334.       position in memory
  3335.     this function is also supported by the version of SuperStor bundled
  3336.       with IBM DOS 6.x and "preloading" versions of Stacker
  3337. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  3338. --------k-2F4A12CX4D52-----------------------
  3339. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  3340.     AX = 4A12h
  3341.     CX = 4D52h ("MR")
  3342.     DX = 4349h ("CI")
  3343. Return: CX = 4943h ("IC") if installed
  3344.     DX = 524Dh ("RM") if installed
  3345.         ES:DI -> MRCINFO structure (see #0649 at INT 1A/AX=B001h)
  3346. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  3347.       called first, as the latter call is used for the first, ROM-based
  3348.       MRCI server, while this call is used for RAM-based servers which
  3349.       may be partially or entirely replacing a prior server
  3350. SeeAlso: AX=4A12h/CX=5354h,INT 1A/AX=B001h
  3351. --------k-2F4A12CX5354-----------------------
  3352. INT 2F - Stacker 4 LZS Compression Interface (LZSAPI)
  3353.     AX = 4A12h
  3354.     CX = 5354h ("ST")
  3355.     DX = 4143h ("AC")
  3356. Return: AX = 4F4Bh ("OK") if installed
  3357.     CX = 7374h ("st") if installed
  3358.     DX = 6163h ("ac") if installed
  3359.         ES:DI -> entry point in LZSAPI server (usually, driver
  3360.               STACKER.COM) containing far address of an actual
  3361.               LZSINFO structure (see #2494)
  3362. SeeAlso: AX=4A12h/CX=4D52h,INT 25/AX=CDCDh
  3363.  
  3364. Format of LZSINFO structure:
  3365. Offset    Size    Description    (Table 2494)
  3366.  00h  6 BYTEs    signature "LZSAPI"
  3367.  06h    WORD    server version (200 (0C8h) for Stacker 4 and Stacker Anywhere)
  3368.  08h  4 BYTEs    vendor signature
  3369.         "STAC" = Stac Electronics, Inc.
  3370.  0Ch  6 BYTEs    ???
  3371.  12h    WORD    bit flags: server status/capabilities (see #2495)
  3372.  14h    DWORD    -> Stacker 3.X-compatible compression procedure
  3373.  18h    DWORD    -> Stacker 3.X-compatible decompression procedure
  3374.  1Ch  4 BYTEs    reserved (always set to 0)
  3375.  20h    DWORD    -> incremental Stacker 3.x-compatible compression procedure
  3376.           (see #2496)
  3377.  24h  4 BYTEs    ???
  3378.  28h    DWORD    -> incremental Stacker 3.x-compatible decompression procedure
  3379.           (see #2497)
  3380.  2Ch  4    BYTES    ???
  3381.  30h    DWORD    -> new (Stacker 4) compression procedure
  3382.  34h  4 BYTEs    ???
  3383.  38h    DWORD    -> new (Stacker 4) decompression procedure
  3384. Notes:    Stacker 4 usally keeps two different data-compression algorithms in
  3385.       memory (preferably in XMA):
  3386.         1) new (Stacker 4) data compression algorithm (4K LZ77 with hashing
  3387.           and static Huffman encoding), and
  3388.         2) old (Stacker 3.x-compatible) one (2K LZ77 with hashing), which
  3389.           is used to work with STACVOL files created under older
  3390.           versions of Stacker.
  3391.  
  3392. Bitfields for LZSAPI capabilities:
  3393. Bit(s)    Description    (Table 2495)
  3394.  0    ???
  3395.  1    busy/error flag
  3396.  2-10    ???
  3397.  11    maximum compressor/decompressor presented
  3398.  
  3399. (Table 2496)
  3400. Call Stacker 3.x-style non-incremental functions with:
  3401.     STACK:    DWORD    return address for compress/decompress procedure
  3402.         WORD    compression algorithm parameters (see #2498)
  3403.         WORD    size of destination buffer (in bytes)
  3404.         DWORD    address of destination buffer
  3405.         WORD    size of source buffer (in bytes)
  3406.         DWORD    address of source buffer
  3407. Return: (compression/decompression procedure)
  3408.     AX = size of resulting data in destination buffer
  3409.         0000h if error (either destination buffer too small or error in
  3410.           compressed data)
  3411.  
  3412. (Table 2497)
  3413. Call Stacker 4-style incremental procedures with:
  3414.     STACK:    DWORD    return address for compr./decompr. procedure
  3415.         DWORD    address of LZSSWAP structure (see #2499)
  3416.             if 0000:0000, procedure uses non-incremental technique
  3417.         WORD    compression algorithm parameters (see #2498)
  3418.         WORD    size of destination buffer (in bytes)
  3419.         DWORD    address of destination buffer
  3420.         WORD    size of source buffer (in bytes)
  3421.         DWORD    address of source buffer
  3422.  
  3423. (Table 2498)
  3424. Values for Compression algorithm parameters:
  3425. Value    Compression level (/P=xx parameter)
  3426.  07F9h      1
  3427.  0621h      2
  3428.  0625h      3
  3429.  0665h      4
  3430.  0669h      5
  3431.  06E9h      6
  3432.  06EDh      7
  3433.  07D1h      8
  3434.  07D9h      9
  3435.  
  3436. Format of LZSSWAP structure:
  3437. Offset    Size    Description    (Table 2499)
  3438.  00h  2 BYTEs    signature "CS"
  3439.  02h  6 BYTEs    reserved
  3440.  08h    DWORD    address of destination buffer swapping procedure
  3441.  0Ch    DWORD    address of stack swapping procedure
  3442. --------k-2F4A13-----------------------------
  3443. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  3444.     AX = 4A13h
  3445. Return: AX = 134Ah if supported
  3446.         ES:BX -> entry point record (see #2500)
  3447. SeeAlso: AX=4A11h/BX=0000h
  3448.  
  3449. Format of DBLSPACE entry point record:
  3450. Offset    Size    Description    (Table 2500)
  3451.  00h    DWORD    pointer to FAR function for ???
  3452.  04h  5 BYTEs    FAR JUMP instruction to ???
  3453. ----------2F4A15BX0000-----------------------
  3454. INT 2F - MS EMM386.EXE v4.46+ - INSTALL I/O VIRTUALIZATION HANDLER
  3455.     AX = 4A15h
  3456.     BX = 0000h (function number)
  3457.     DX = starting I/O address
  3458.     EDX high word = ending I/O address
  3459.     CX = number of ports to trap
  3460.     DS:SI -> I/O dispatch table (see #2501)
  3461.     DI = size of client's code and data
  3462. Return: CF clear if successful
  3463.     CF set on error
  3464. Notes:    this interface is only available in virtual-86 mode; the I/O handlers
  3465.       will be called in protected mode
  3466.     only ports 0100h-FFFFh may be trapped; EMM386 reserved ports 0000h-
  3467.       00FFh
  3468.  
  3469. Format of EMM386 I/O dispatch table [array]:
  3470. Offset    Size    Description    (Table 2501)
  3471.  00h    WORD    I/O port offset (added to DX to get actual port number)
  3472.  02h    WORD    offset of I/O handler for port (see #2502)
  3473.  
  3474. (Table 2502)
  3475. Values EMM386 I/O dispatch function is called with:
  3476.     CX = Ring0 code selector for I/O handler's segment
  3477.     DS = Ring0 data selector for I/O handler's segment (alias of CS)
  3478.     EDX = faulting I/O address
  3479.     ECX = direction (00000008h for byte output, 00000000h for byte input)
  3480.     EAX = data in/out
  3481. Return: (via FAR RET)
  3482.     CF clear if I/O access successfully virtualized
  3483.     CF set if access not virtualized (default handler will be called to
  3484.           perform the I/O)
  3485. SeeAlso: #2501
  3486. --------D-2F4A33-----------------------------
  3487. INT 2F - Windows95 - CHECK MS-DOS VERSION 7
  3488.     AX = 4A33h
  3489. Return: AX = 0000h for MS-DOS 7.00+
  3490.         (officially) BX,DX,SI,DS may be destroyed
  3491.         (undoc) DS:DX -> ASCIZ primary shell executable name
  3492.         (undoc) DS:SI -> CONFIG.SYS SHELL= command line (counted string)
  3493.         (undoc) BH = ??? (0000h)
  3494.         (undoc) BL = ??? (0000h)
  3495.     AX nonzero (usually 4A33h) if MS-DOS 6- or other DOS
  3496. SeeAlso: AX=1611h,INT 21/AH=30h
  3497. --------N-2F4B-------------------------------
  3498. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  3499.     AH = 4Bh
  3500.     ???
  3501. Return: ???
  3502. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  3503.       file/printer services
  3504. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  3505. --------T-2F4B01-----------------------------
  3506. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  3507.     AX = 4B01h
  3508.     CX:DX -> task switcher entry point (see #2505)
  3509.     ES:BX = 0000h:0000h
  3510. Return: ES:BX -> callback info structure (see #2503) or 0000h:0000h
  3511. Notes:    called by the task switcher
  3512.     this function is hooked by clients which require notification of task
  3513.       switcher activities; the call must first be passed on to the prior
  3514.       handler with registers unchanged using a simulated interrupt.     On
  3515.       return, the client must build a callback info structure and store
  3516.       the returned ES:BX in the "next" field, then return the address of
  3517.       its own callback info structure.
  3518.     a client program must add itself to the notification chain if it
  3519.       provides services to other programs; before terminating, it must
  3520.       remove itself from the chain by calling the task switcher's entry
  3521.       point with AX=0005h (see #2505)
  3522.     the task switcher entry point should not be saved, as it is subject to
  3523.       change and will be provided on any notification call
  3524.     the Windows 3.1 Standard Mode supports this API
  3525. SeeAlso: AX=160Bh,AX=4B02h
  3526.  
  3527. Format of task switcher callback info structure:
  3528. Offset    Size    Description    (Table 2503)
  3529.  00h    DWORD    pointer to next callback info structure
  3530.  04h    DWORD    pointer to notification function (see #2504)
  3531.  08h    DWORD    reserved
  3532.  0Ch    DWORD    address of zero-terminated list of API info structures
  3533.         (see #2507)
  3534.  
  3535. (Table 2504)
  3536. Values task switcher notification function is called with:
  3537.     AX = function
  3538.         0000h switcher initialization
  3539.         Return: AX = status
  3540.                 0000h if OK to load
  3541.                 nonzero to abort task switcher
  3542.         0001h query suspend
  3543.         BX = session ID
  3544.         Return: AX = status
  3545.                 0000h if OK to switch session
  3546.                 0001h if not
  3547.         0002h suspend session
  3548.         BX = session ID
  3549.         interrupts disabled
  3550.         Return: AX = 0000h if OK to switch session
  3551.                = 0001h if not
  3552.         0003h activate session
  3553.         BX = session ID
  3554.         CX = session status flags
  3555.             bit 0: set if first activation of session
  3556.             bits 1-15: reserved (0)
  3557.         interrupts disabled
  3558.         Return: AX = 0000h
  3559.         0004h session active
  3560.         BX = session ID
  3561.         CX = session status flags
  3562.             bit 0: set if first activation of session
  3563.             bits 1-15: reserved (0)
  3564.         Return: AX = 0000h
  3565.         0005h create session
  3566.         BX = session ID
  3567.         Return: AX = 0000h if OK to create session
  3568.                = 0001h if not
  3569.         0006h destroy session
  3570.         BX = session ID
  3571.         Return: AX = 0000h
  3572.         0007h switcher termination
  3573.         BX = flags
  3574.             bit 0: set if calling switcher is only switcher loaded
  3575.             bits 1-15: reserved (0)
  3576.         Return: AX = 0000h
  3577.     ES:DI -> task switcher entry point (see #2505)
  3578. Notes:    function 0000h is generally called by the program which controls or
  3579.       invokes the task switcher, rather than by the task switcher itself;
  3580.       the entry point supplied to this function is not necessarily the
  3581.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  3582.       any client indicates that loading is not possible, all clients will
  3583.       be called with function 0007h; thus it is possible for a client to
  3584.       receive a termination notice without a corresponding initialization
  3585.       notice.
  3586.     except for functions 0002h and 0003h, the notification handler is
  3587.       called with interrupts enabled and may make any INT 21h function
  3588.       call; interrupts must not be enabled in functions 0002h and 0003h
  3589.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  3590.       point is no longer valid
  3591. --------T-2F4B02BX0000-----------------------
  3592. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  3593.     AX = 4B02h
  3594.     BX = 0000h
  3595.     ES:DI = 0000h:0000h
  3596. Return: ES:DI = 0000h:0000h if task switcher not loaded
  3597.     ES:DI -> task switcher entry point (see #2505) if loaded
  3598.         AX = 0000h
  3599. Notes:    the returned entry point is that for the most-recently loaded task
  3600.       switcher; the entry points for prior task switchers may be determined
  3601.       with the "get version" call (see #2505)
  3602.     this function is supported by PC Tools v8+ CPTASK
  3603. SeeAlso: AX=4A05h,AX=4B03h
  3604.  
  3605. (Table 2505)
  3606. Call task switcher entry point with:
  3607.     AX = 0000h get version
  3608.         Return: CF clear if successful
  3609.                 AX = 0000h
  3610.                 ES:BX -> task switcher version struct (see #2506)
  3611.             CF set if unsupported function
  3612.     AX = 0001h test memory region
  3613.         ES:DI -> first byte to be tested
  3614.         CX = size of region to test
  3615.         Return: CF clear if successful
  3616.                 AX = memory type of tested region
  3617.                 0000h global
  3618.                 0001h global and local
  3619.                 0002h local (replaced on session switch)
  3620.             CF set if unsupported function
  3621.     AX = 0002h suspend switcher
  3622.         ES:DI -> new task switcher's entry point
  3623.         Return: CF clear if successful
  3624.                 AX = state
  3625.                 0000h switcher has been suspended
  3626.                 0001h switcher not suspended, new switcher must
  3627.                     abort
  3628.                 0002h switcher not suspended, but new switcher
  3629.                     may run anyway
  3630.             CF set if unsupported function
  3631.     AX = 0003h resume switcher
  3632.         ES:DI -> new task switcher's entry point
  3633.         Return: CF clear if successful
  3634.                 AX = 0000h
  3635.             CF set if unsupported function
  3636.     AX = 0004h hook notification chain
  3637.         ES:DI -> callback info structure to be added to chain
  3638.               (see #2503)
  3639.         Return: CF clear if successful
  3640.                 AX = 0000h
  3641.             CF set if unsupported function
  3642.     AX = 0005h unhook notification chain
  3643.         ES:DI -> callback info structure to be removed from chain
  3644.               (see #2503)
  3645.         Return: CF clear if successful
  3646.                 AX = 0000h
  3647.             CF set if unsupported function
  3648.     AX = 0006h query API support
  3649.         BX = asynchronous API identifier
  3650.         Return: CF clear if successful
  3651.                 AX = 0000h
  3652.                 ES:BX -> API info structure (see #2507) for the
  3653.                       client which provides the highest
  3654.                       level of API support
  3655.             CF set if unsupported function
  3656.  
  3657. Format of task switcher version structure:
  3658. Offset    Size    Description    (Table 2506)
  3659.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  3660.  02h    WORD    minor version of supported protocol
  3661.  04h    WORD    major version of task switcher
  3662.  06h    WORD    minor version of task switcher
  3663.  08h    WORD    task switcher ID (see AX=4B03h)
  3664.  0Ah    WORD    operation flags
  3665.         bit 0: set if task switcher disabled
  3666.         bits 1-15: reserved (0)
  3667.  0Ch    DWORD    pointer to ASCIZ task switcher name
  3668.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  3669.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  3670.  
  3671. Format of API info structure:
  3672. Offset    Size    Description    (Table 2507)
  3673.  00h    WORD    size of structure in bytes (000Ah)
  3674.  02h    WORD    API identifier
  3675.         0001h NetBIOS
  3676.         0002h 802.2
  3677.         0003h TCP/IP
  3678.         0004h LAN Manager named pipes
  3679.         0005h Novell NetWare IPX
  3680.  04h    WORD    major version \ of highest version of API for which the support
  3681.  06h    WORD    minor version / level specified in the next field is provided
  3682.  08h    WORD    support level
  3683.         0001h minimal support
  3684.         0002h API-level support
  3685.         0003h switcher compatibility
  3686.         0004h seamless compatibility
  3687. --------T-2F4B03-----------------------------
  3688. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  3689.     AX = 4B03h
  3690.     ES:DI -> task switcher entry point (see #2505)
  3691. Return: AX = 0000h
  3692.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  3693. Notes:    if a task switcher has determined that it is the first to be loaded, it
  3694.       must allocate an identifier for itself and provide this function to
  3695.       all subsequent task switchers; if it is not the first to be loaded,
  3696.       it must call this function to allocate an ID.     The switcher ID is
  3697.       used as the high four bits of all session identifiers to ensure
  3698.       unique session IDs.
  3699.     if no more switcher IDs are available, the new task switcher making the
  3700.       call must terminate or disable itself
  3701.     the task switcher providing the identifiers may call the new task
  3702.       switcher's entry point as needed
  3703.     this call is available from within DOSSHELL even if the task switcher
  3704.       is not installed
  3705.     this function is supported by PC Tools v8+ CPTASK, but appears to
  3706.       always return an ID of 0000h
  3707. SeeAlso: AX=4B02h,AX=4B04h
  3708. --------T-2F4B04-----------------------------
  3709. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  3710.     AX = 4B04h
  3711.     BX = switcher ID
  3712.     ES:DI -> task switcher entry point (see #2505)
  3713. Return: AX = 0000h
  3714.     BX = status
  3715.         0000h successful
  3716.         other error (invalid ID or ID not allocated)
  3717. Notes:    called by a task switcher when it exits, unless it was the first loaded
  3718.       and is providing the support for AX=4B03h and AX=4B04h
  3719.     the task switcher providing the identifiers may call the terminating
  3720.       task switcher's entry point as needed
  3721.     this call is available from within DOSSHELL even if the task switcher
  3722.       is not installed
  3723.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  3724.       sucessfully no matter which ID is given
  3725. SeeAlso: AX=4B02h,AX=4B03h
  3726. --------T-2F4B05-----------------------------
  3727. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  3728.     AX = 4B05h
  3729.     ES:BX = 0000h:0000h
  3730.     CX:DX -> task switcher entry point (see #2505)
  3731. Return: ES:BX -> startup info structure (see #2508) or 0000h:0000h
  3732. Notes:    called by task switcher
  3733.     clients with instance data should hook this call, pass it through to
  3734.       the previous handler with unchanged registers using a simulated
  3735.       interrupt.  On return, the client should create a startup info
  3736.       structure (see #2508), store the returned ES:BX in the "next"
  3737.       field, and return the address of the created structure in ES:BX
  3738.     all MS-DOS function calls are available from within this call
  3739.     this function is supported by Novell DOS 7 DOSKEY, with structure v3.00
  3740. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  3741.  
  3742. Format of task switcher startup info structure:
  3743. Offset    Size    Description    (Table 2508)
  3744.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  3745.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3746.  06h    DWORD    0000h:0000h (ignored)
  3747.  0Ah    DWORD    ignored
  3748.  0Eh    DWORD    pointer to instance data records (see #2509)
  3749.  
  3750. Format of one instance data record in array:
  3751. Offset    Size    Description    (Table 2509)
  3752.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3753.  04h    WORD    size of instance data
  3754. --------W-2F4B06-----------------------------
  3755. INT 2F - MS Windows - WIN.COM - GET ??? POINTER TO WIN.COM
  3756.     AX = 4B06h
  3757. Return: AX = 0000h
  3758.     ES:BX -> ??? function in WIN.COM
  3759. Note:    the entry point is called with
  3760.         AX = 0001h or 0003h
  3761.         BX = ???
  3762. SeeAlso: AX=4B80h
  3763. --------W-2F4B20-----------------------------
  3764. INT 2F - MS Windows 3+ - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  3765.     AX = 4B20h
  3766. Return: AX = 0000h if successful
  3767.         DX:CX -> 256-byte buffer for pathname and commandline (see #2510)
  3768. Notes:    when the Windows function ExitWindows is called with an exit code of
  3769.       44h, WIN.COM executes the program specified in the returned buffer
  3770.       and then restarts Windows
  3771.     the returned address is a real-mode segment:offset value
  3772. SeeAlso: AX=4B21h
  3773.  
  3774. Format of WIN.COM buffer:
  3775. Offset    Size    Description    (Table 2510)
  3776.  00h 128 BYTEs    commandline for program (count byte, command tail, 0Dh)
  3777.  80h 128 BYTEs    ASCIZ pathname of program to execute
  3778. Note:    the order above is for a Windows95 DOS box; it may be reversed under
  3779.       Windows 3.x
  3780. --------W-2F4B21-----------------------------
  3781. INT 2F - Windows95 - WIN.COM - GET NESTING LEVEL
  3782.     AX = 4B21h
  3783. Return: AH = 00h if WIN.COM already active
  3784.         AL = number of instances of WIN.COM in memory
  3785. SeeAlso: AX=4B20h
  3786. --------K-2F4B52-----------------------------
  3787. INT 2F - KeyRus v7.3 - API
  3788.     AX = 4B52h ('KR')
  3789.     BL = function number
  3790.         00h installation check
  3791.         Return: AL = 82h if installed
  3792.                 BH = major version number
  3793.                 BL = minor version number
  3794.                 ES destroyed
  3795.         01h get driver status
  3796.         Return: AL??? = current status (see #2511)
  3797.         02h set driver state
  3798.         AL = new driver state (see #2511)
  3799.         03h blank screen (if blanking enabled when TSR was loaded)
  3800.         04h unblank screen
  3801.         4Ch switch to English keyboard mode
  3802.         90h switch to Russian keyboard mode
  3803. Return:
  3804.  
  3805. Bitfields for KeyRus driver status:
  3806. Bit(s)    Description    (Table 2511)
  3807.  1-0    language mode
  3808.     00 Latin
  3809.     01 Russian
  3810.     10 Alternative
  3811.     11 unused
  3812.  2    allow character loading (if disabled, use ROM fonts)
  3813.  3    English keyboard support
  3814.  7-4    used internally (read-only)
  3815. --------W-2F4B80-----------------------------
  3816. INT 2F - MS Windows - WSWAP.EXE - RESET INTERNAL VARIABLES
  3817.     AX = 4B80h
  3818. Return: nothing
  3819. Note:    called by WINOLDAP.MOD
  3820. SeeAlso: AX=4B06h
  3821. --------p-2F4C-------------------------------
  3822. INT 2F U - Advanced Power Management
  3823.     AH = 4Ch
  3824.     AL = function
  3825.         00h version check
  3826.         01h suspend system requested
  3827.         FFh suspend/resume battery notification
  3828.     ???
  3829. Return: ???
  3830. ----------2F4D-------------------------------
  3831. INT 2F U - ???
  3832.     AH = 4Dh
  3833.     ???
  3834. Return: ???
  3835. Note:    reportedly called by Kana Kanji Converter and MSKK
  3836. --------N-2F4E53BL00-------------------------
  3837. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  3838.     AX = 4E53h ("NS")
  3839.     BL = 00h (function "installation check")
  3840.     BH = module ID (see #2512)
  3841. Return: AX = 0000h if specified module installed
  3842.     BX = 4E53h if installed
  3843. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  3844.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  3845. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  3846.  
  3847. (Table 2512)
  3848. Values for SilverNET module ID:
  3849.  01h    SilverCACHE
  3850.  02h    Workstation
  3851.  03h    NetBIOS
  3852.  04h    Peer
  3853.  20h    NS Share
  3854.  80h    NetWare help TSR
  3855. --------N-2F4E53BL01-------------------------
  3856. INT 2F - SilverNET - GET RUNTIME PARAMETER
  3857.     AX = 4E53h ("NS")
  3858.     BL = 01h (function "get runtime parameter")
  3859.     BH = module ID (see #2512)
  3860.     CX = parameter index (see #2513,#2515,#2516)
  3861. Return: AX = WORD value at specified index (see #2514)
  3862. Desc:    retrieve a word of data from the specified SilverNET module
  3863.  
  3864. (Table 2513)
  3865. Values for SilverNET Peer parameter index (* = read-only):
  3866.  00h *    maximum outstanding SMB buffers
  3867.  02h *    maximum logged-in nodes
  3868.  04h *    number of shareable resources
  3869.  06h *    number of characters to print per time slice
  3870.  08h *    number of printers that can be shared
  3871.  0Ah *    number of nodes logged in
  3872.  0Ch *    number of files to allow opened
  3873.  0Eh    how fast to despool (/PSLICE)
  3874.  10h    audit flag
  3875.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  3876.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  3877.     else DOS SFT)
  3878.  36h    spool flags (see #2514)
  3879. SeeAlso: #2515
  3880.  
  3881. Bitfields for spool flags:
  3882. Bit(s)    Description    (Table 2514)
  3883.  0    LPT1 needs despooling
  3884.  1    LPT2 needs despooling
  3885.  2    LPT2 needs despooling
  3886.  4    COM1 needs despooling
  3887.  5    COM2 needs despooling
  3888.  6    COM3 needs despooling
  3889. SeeAlso: #2513
  3890.  
  3891. (Table 2515)
  3892. Values for NS Share parameter index (* = read-only):
  3893.  00h    version number (high byte = minor, low byte = major)
  3894.  10h *    segment of first lock record (other records in consecutive paragraphs)
  3895.     (if PSP field = 0000h, lock record is free)
  3896.  12h *    maximum possible number of lock records
  3897.  14h *    starting segment of sharing buffer
  3898.     (NS Share's sharing records are identical to DOS SHARE except that
  3899.       fields which are normally offsets into SHARE are segment numbers)
  3900.  18h *    size of sharing buffer in paragraphs
  3901.  1Ah *    total free paragraphs in sharing buffer
  3902.  1Ch *    current number of shared files
  3903.  1Eh *    current number of locked records
  3904. SeeAlso: #2513,#2516
  3905.  
  3906. (Table 2516)
  3907. Values for Workstation parameter index (* = read-only):
  3908.  00h    version number (high byte = minor, low byte = major)
  3909.  02h *    size of each network buffer for file operations
  3910.  04h *    number of redirector file buffers
  3911.  06h *    size of each print cache buffer
  3912.  08h *    number of network LPT printers
  3913.  0Ch    flush time in ticks (idle time on network printer before flushing)
  3914.  0Eh    (16 WORDs) last active time for each printer
  3915.  2Eh *    stub segment if program split into two parts
  3916.  60h    receive name number for datagram listens
  3917.  62h *    18-byte machine name
  3918.  74h *    LASTDRIVE (01h = A:, etc.)
  3919.  7Ch    row number of message box on screen
  3920.  7Eh    message time in clock ticks
  3921.  82h *    number of network adapters in use
  3922.  84h    station ID broadcast flag (never set on redirectors)
  3923.  96h *    NetBIOS names left
  3924.  98h *    NCBs left
  3925.  9Ah *    sessions left
  3926.  A2h *    total number of network printers (LPT+COM)
  3927.  A4h *    number of serial network printers
  3928.  A8h *    segment containing file cache buffers
  3929.  AAh *    segment containing print cache buffers
  3930.  ACh *    bytes remaining free in HMA before program loaded
  3931.  AEh *    start of free memory in HMA
  3932.  B2h *    flag: using HMA
  3933. SeeAlso: #2515
  3934. --------N-2F4E53BL02-------------------------
  3935. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  3936.     AX = 4E53h ("NS")
  3937.     BL = 02h (function "set runtime parameters")
  3938.     BH = module ID (see #2512)
  3939.     CX = parameter index (see #2515,#2516)
  3940.     DX = new value for specified parameter
  3941. Desc:    set a WORD value in the specified SilverNET module
  3942. Note:    not all indexed parameters are writable; modifying a read-only
  3943.       parameter can result in system crashes
  3944. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  3945. --------N-2F5100-----------------------------
  3946. INT 2F U - ODIHLP.EXE - INSTALLATION CHECK
  3947.     AX = 5100h
  3948. Return: AL = FFh if installed
  3949.         BX = 0000h
  3950.         DX:SI -> signature string "ODI$HLP$"
  3951. Program: ODIHLP is a real-mode helper allowing the Windows for Workgroups 3.11
  3952.       protected-mode NDIS3 protocol to work with real-mode ODI drivers
  3953.       and LSL.COM
  3954. Note:    the returned signature string might be the first field of a structure
  3955. SeeAlso: AX=C000h"LSL.COM"
  3956. --------k-2F5200-----------------------------
  3957. INT 2F - JAM.SYS v1.10+ - "GetVersion" - INSTALLATION CHECK
  3958.     AX = 5200h
  3959. Return: AH = 80h (successful) if installed
  3960.     BX = internal JAM.SYS version number
  3961.     CX = size of JAMINFO structure (see #2517,#2518)
  3962.     DX = JAM.SYS segment address
  3963. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  3964.       Utilities by George A. Reznik and friends (JAM Software).
  3965. SeeAlso: AX=5201h
  3966.  
  3967. Format of JAMINFO v1.10 structure:
  3968. Offset    Size    Description    (Table 2517)
  3969.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  3970.  19h 11 BYTEs    ???
  3971.  25h    DWORD    total number of sectors in JAM archive file
  3972.         (size of compressed data area)
  3973.  29h    BYTE    flags (see #2519)
  3974.  2Ah 127 BYTEs    full JAM archive file name
  3975.  A9h    WORD    the number of fragments in archive file
  3976.  ABh 96 BYTEs    archive file fragmentation list -
  3977.         array of 16 FRAGMENT structures (see #2520)
  3978. 10Bh    DWORD    address of the host-drive DPB (Drive Parameter Block)
  3979. 10Fh    DWORD    number of free sectors in JAM archive file
  3980. 113h    WORD    device status word (see #2521)
  3981. SeeAlso: #2518
  3982.  
  3983. Format of JAMINFO v1.20 structure:
  3984. Offset    Size    Description    (Table 2518)
  3985.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  3986.  19h    BYTE    physical driver number
  3987.  1Ah    BYTE    reserved
  3988.  1Bh    BYTE    extended boot record signature
  3989.  1Ch    DWORD    volume serial number
  3990.  20h 11 BYTEs    volume label
  3991.  2Bh  8 BYTEs    file system ID
  3992.  33h    DWORD    total number of sectors in JAM archive file
  3993.         (size of compressed data area)
  3994.  37h    BYTE    flags (see #2519)
  3995.  38h 128 BYTEs    full JAM archive file name
  3996.  B8h    WORD    the number of fragments in archive file
  3997.  BAh 96 BYTEs    archive file fragmentation list -
  3998.         array of 16 FRAGMENT structures (see #2520)
  3999. 11Ah    DWORD    address of the host-drive DPB (Drive Parameter Block)
  4000. 11Eh    DWORD    number of free sectors in JAM archive file
  4001. 122h    WORD    device status word (see #2521)
  4002. Note:    the first 33h bytes are copied from the archive file's boot sector
  4003. SeeAlso: #2517
  4004.  
  4005. Bitfields for JAMINFO flags:
  4006. Bit(s)    Description    (Table 2519)
  4007.  2-0    reserved
  4008.  3    (v1.20+)
  4009.  4    enable direct write requests (Int 26h, non-DOS requests, etc.)
  4010.  5    read-only mode
  4011.  6    no write-behind caching
  4012.  7    full undelete-compatible allocation strategy
  4013. SeeAlso: #2517,#2518
  4014.  
  4015. Format of JAM FRAGMENT structure:
  4016. Offset    Size    Description    (Table 2520)
  4017.  00h    WORD    starting sector (low word)
  4018.  02h    BYTE    starting sector (high byte)
  4019.  03h    WORD    size of fragment (low word)
  4020.  05h    BYTE    size of fragment (high byte)
  4021. SeeAlso: #2517,#2518
  4022.  
  4023. (Table 2521)
  4024. Values for JAM.SYS status (high byte):
  4025.  00h    successful
  4026.  01h    drive is not a JAM drive
  4027.  02h    drive is already attached
  4028.  03h    archive file cluster size value is larger than driver's one
  4029.  04h    drive is not attached
  4030.  05h    drive is locked
  4031.  06h    drive is not locked
  4032.  07h    bad physical-level request
  4033.  08h    host drive reading/writing error
  4034.  09h    bad entries in JAM descriptor table
  4035.  0Ah    compressed data integrity error
  4036.  0Bh    archive file overflow
  4037.  0Ch    bad DOS request
  4038.  0Dh    incorrect parameters in JAMINFO structure
  4039. Note:    the low byte of the status is the DOS error code for the Host drive
  4040. SeeAlso: #2285 at INT 2F/AX=0802h
  4041. --------k-2F5201-----------------------------
  4042. INT 2F - JAM.SYS v1.10+ - "GetInfo" - GET COMPRESSED DRIVE INFORMATION
  4043.     AX = 5201h
  4044.     DL = compressed drive number (0-default, 1-A:, etc.)
  4045.     DS:BX -> buffer for JAMINFO structure (see #2517,#2518)
  4046. Return: AH = status (00h,01h) (see #2521)
  4047. SeeAlso: AX=5200h
  4048. --------k-2F5202-----------------------------
  4049. INT 2F - JAM.SYS v1.10+ - "Attach" - MOUNT COMPRESSED DRIVE
  4050.     AX = 5202h
  4051.     DL = drive number (0-default, 1-A:, etc.) to attach to the JAM
  4052.           archive file
  4053.     DS:BX -> pointer to JAMINFO structure (see #2517,#2518), which
  4054.           contains parameters of the JAM file to mount, and pointer
  4055.           to the host drive DPB (i.e. DPB of the drive on which the
  4056.           JAM file is located)
  4057. Return: AH = status (00h,02h,03h,08h,09h,0Dh) (see also #2521)
  4058.         03h archive file cluster size value is larger than driver's - not
  4059.           mounted
  4060.         09h bad entries in JAM descriptor table - file mounted read-only
  4061.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4062. SeeAlso: AX=5203h
  4063. --------k-2F5203-----------------------------
  4064. INT 2F - JAM.SYS v1.10+ - "Detach" - UNMOUNT COMPRESSED DRIVE
  4065.     AX = 5203h
  4066.     DL = drive number (0-default, 1-A:, etc.) to detach
  4067. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #2521)
  4068.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4069. SeeAlso: AX=5202h
  4070. --------k-2F5204-----------------------------
  4071. INT 2F - JAM.SYS v1.10+ - "Lock" - LOCK COMPRESSED DRIVE
  4072.     AX = 5204h
  4073.     DL = drive number (0-default, 1-A:, etc.) to lock
  4074. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #2521)
  4075.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4076. SeeAlso: AX=5205h, AX=5206h, AX=5207h
  4077. --------k-2F5205-----------------------------
  4078. INT 2F - JAM.SYS v1.10+ - "UnLock" - UNLOCK COMPRESSED DRIVE
  4079.     AX = 5205h
  4080.     DL = drive number (0-default, 1-A:, etc.) to unlock
  4081. Return: AH = status (00h,01h,04h,06h,08h,09h,0Dh) (see #2521)
  4082.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4083. SeeAlso: AX=5204h, AX=5206h, AX=5207h
  4084. Note:    Lock and UnLock functions were added to the JAM API to prevent
  4085.       asynchronous physical-level access (see AX=5206h,AX=5207h) to
  4086.       compressed data on JAM drives. In other words, two or more programs
  4087.       which use JAM API (say, JMAX optimizer and JCHKDSK - disk checker)
  4088.       cannot be run on the same JAM drive simultaneously.
  4089. --------k-2F5206-----------------------------
  4090. INT 2F - JAM.SYS v1.10+ - "Read" - PHYSICAL READ DATA FROM JAM ARCHIVE
  4091.     AX = 5206h
  4092.     DL = drive number (0-default, 1-A:, etc.)
  4093.     DS:BX -> disk transfer packet (see #2522)
  4094. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #2521)
  4095.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4096. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  4097.       Utilities by George A. Reznik and friends (JAM Software).
  4098. SeeAlso: AX=5207h
  4099.  
  4100. Format of disk transfer packet:
  4101. Offset    Size    Description    (Table 2522)
  4102.  00h    DWORD    sector number
  4103.  04h    WORD    number of sectors to read(write)
  4104.  06h    DWORD    transfer address
  4105. --------k-2F5207-----------------------------
  4106. INT 2F - JAM.SYS v1.10+ - "Write" - PHYSICAL WRITE DATA TO JAM ARCHIVE
  4107.     AX = 5207h
  4108.     DL = drive number (0-default, 1-A:, etc.)
  4109.     DS:BX -> disk transfer packet (see #2522)
  4110. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #2521)
  4111.     AL = host drive error code (see #2285 at INT 2F/AX=0802h)
  4112. SeeAlso: AX=5206h
  4113. --------p-2F53-------------------------------
  4114. INT 2F U - POWER.EXE - APM event broadcasting???
  4115.     AH = 53h
  4116.     AL = event???
  4117.         05h CPU idle
  4118.         0Bh PM event broadcast API
  4119. Return: ???
  4120. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  4121.       and PC-Cache v8.0
  4122. SeeAlso: AX=530Bh,AX=5400h,INT 33/AX=002Fh
  4123. --------p-2F530B-----------------------------
  4124. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  4125.     AX = 530Bh
  4126.     BX = subfunction
  4127.         0003h ???
  4128.         0004h ???
  4129.     ???
  4130. Return: ???
  4131. Note:    it appears that subfunction 0003h reads or restores the current mouse
  4132.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  4133.       the converse
  4134. --------p-2F5400-----------------------------
  4135. INT 2F U - POWER.EXE - INSTALLATION CHECK
  4136.     AX = 5400h
  4137. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  4138.     BX = 504Dh ("PM")
  4139.     CF clear
  4140. Note:    called by MS Windows 3.1 POWER.DRV
  4141. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  4142. --------p-2F5401-----------------------------
  4143. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  4144.     AX = 5401h
  4145.     BH = function
  4146.         00h get status
  4147.         Return: BL = current power management status (see #2523)
  4148.         01h set status
  4149.         BL = new power managment status (see #2523)
  4150. Return: AX = function status (see #2524)
  4151. Note:    called by MS Windows 3.1 POWER.DRV
  4152. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  4153.  
  4154. Bitfields for power management status:
  4155. Bit(s)    Description    (Table 2523)
  4156.  0    POWER.EXE power management enabled
  4157.  1    APM firmware power management enabled
  4158.  2-7    reserved (0)
  4159. Notes:    bit 1 is ignored if there is no APM firmware
  4160.     bits 1-0: 00 = POWER OFF, 10 = POWER STD, 11 = POWER ADV
  4161.  
  4162. (Table 2524)
  4163. Values for POWER.EXE function status:
  4164.  0000h    successful
  4165.  0002h    "ERROR_PM_ALREADY_CONNECTED"
  4166.  0003h    "ERROR_PM_NOT_CONNECTED"
  4167.  0087h    "ERROR_PM_INVALID_PARAMETER"
  4168. --------p-2F5402-----------------------------
  4169. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  4170.     AX = 5402h
  4171.     BH = subfunction
  4172.         00h get
  4173.         other set
  4174.         BL = detection strategy (00h-0Fh or FFh)
  4175. Return: BX = current/new detection strategy
  4176. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  4177. --------p-2F5403-----------------------------
  4178. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  4179.     AX = 5403h
  4180.     BX = new power management setting or 0000h to get current setting
  4181. Return: AX = status
  4182.         0000h successful
  4183.         BX = power management setting (see #2525)
  4184.         other error code
  4185. SeeAlso: AX=5401h,AX=5480h
  4186.  
  4187. (Table 2525)
  4188. Values for power management setting:
  4189.  0001h-0005h "min"
  4190.  0006h         "reg"
  4191.  0007h-0008h "max"
  4192. --------t-2F5453-----------------------------
  4193. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  4194.     AX = 5453h
  4195.     BX = subfunction
  4196.         00h installation check
  4197.         CX = 0000h
  4198.         DS:SI -> 8-char blank-padded name (see #2526)
  4199.         Return: AX = FFFFh installed
  4200.                 CX = ID number of already-installed copy
  4201.             AX = anything else, not installed
  4202.                 CX = ID number for TSR when installed
  4203.         01h get user parameters
  4204.         CX = TSR ID number
  4205.         Return: AX = status
  4206.                 0000h successful
  4207.                 ES:BX -> user parameter block (see #2527)
  4208.                 nonzero failed
  4209.         02h check if hotkey in use
  4210.         CL = scan code of hot key (see #0005)
  4211.         Return: AX = FFFFh hot key conflicts with another TSR
  4212.                  otherwise safe to use the hotkey
  4213.         03h replace default critical error handler
  4214.         CX = TSR ID number
  4215.         DS:SI -> new routine for INT 24h
  4216.         Return: AX = nonzero, unable to install new handler
  4217.         04h get internal data area
  4218.         CX = TSR ID number
  4219.         Return: AX = status
  4220.                 0000h successful
  4221.                 ES:BX -> TSR's internal data area (see #2528)
  4222.                 nonzero, TSR not found
  4223.         05h set multiple hot keys
  4224.         CX = TSR ID number
  4225.         DL = number of additional hot keys to allocate
  4226.         DS:SI -> table of hot keys
  4227.             BYTE  hotkey scan code (see #0005)
  4228.             BYTE  hotkey shift state
  4229.             BYTE  flag value to pass to TSR (nonzero)
  4230.         Return: AX = nonzero, unable to install hot keys
  4231.         06h - 0Fh reserved
  4232.         10h enable TSR
  4233.         CX = TSR ID number
  4234.         Return: AX = nonzero, unable to enable
  4235.         11h disable TSR
  4236.         CX = TSR ID number
  4237.         Return: AX = nonzero, unable to disable
  4238.         12h unload TSR
  4239.         CX = TSR ID number
  4240.         Return: AX = nonzero, invalid TSR number
  4241.         Note: if any interrupts used by TSR have been grabbed by
  4242.             another TSR, the TesSeRact routines will wait until
  4243.             it is safe to remove the indicated TSR from memory
  4244.         13h restart TSR
  4245.         CX = TSR ID number of TSR which was unloaded but is still in
  4246.              memory
  4247.         Return: AX = nonzero, unable to restart TSR
  4248.         14h get status word
  4249.         CX = TSR ID number
  4250.         Return: AX = FFFFh invalid ID number
  4251.                = other, successful
  4252.                 BX = bit flags
  4253.         15h set status word
  4254.         CX = TSR ID number
  4255.         DX = new bit flags
  4256.         Return: AX = nonzero, unable to set status word
  4257.         16h get INDOS state at popup
  4258.         CX = TSR ID number
  4259.         Return: AX = 0000h successful
  4260.                 BX = value of INDOS flag
  4261.         17h - 1Fh reserved
  4262.         20h call user procedure
  4263.         CX = TSR ID number
  4264.         ES:DI -> user-defined data
  4265.         Return: AX = 0000h successful
  4266.         21h stuff keystrokes into keyboard buffer
  4267.         CX = TSR ID number
  4268.         DL = speed
  4269.             00h stuff keystrokes only when buffer is empty
  4270.             01h stuff up to four keystrokes per clock tick
  4271.             02h stuff up to 15 keystrokes per clock tick
  4272.         DH = scan code flag
  4273.             if zero, buffer contains alternating ASCII and scan codes
  4274.             if nonzero, buffer contains only ASCII codes
  4275.         SI = number of keystrokes
  4276.         ES:DI -> buffer to stuff
  4277.         Return: AX = 0000h success
  4278.                  F0F0h user aborted with ^C or ^Break
  4279.                  other unable to stuff keystrokes
  4280.         22h (v1.10) trigger popup
  4281.         CX = TSR ID number
  4282.         Return: AX = 0000h success, TSR will either pop up or beep to
  4283.                    indicate that it is unable to pop up
  4284.                  nonzero invalid ID number
  4285.         23h (v1.10) invoke TSR's background function
  4286.         CX = TSR ID number
  4287.         Return: AX = 0000h success
  4288.                  FFFFh not safe to call background function
  4289.                  nonzero invalid ID number
  4290.         24h - 2Fh reserved
  4291. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  4292.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  4293.       do the SWAP?? programs by Innovative Data Concepts.
  4294.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  4295.       of the user parameter block) using the name "AVATAR  "
  4296. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  4297. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  4298.  
  4299. (Table 2526)
  4300. Values for TesSeRact names:
  4301.  "AVATAR  "    AVATAR.SYS
  4302.  "QeditTSR"    TSR version of SemWare's Qedit editor
  4303.  "SCRNBLNK"    Trusted Access screen blanker
  4304.  
  4305. Format of TesSeRact User Parameter Block:
  4306. Offset    Size    Description    (Table 2527)
  4307.  00h  8 BYTEs    blank-padded TSR name
  4308.  08h    WORD    TSR ID number
  4309.  0Ah    DWORD    bitmap of supported functions
  4310.  0Eh    BYTE    scan code of primary hotkey (see #0005)
  4311.         00h = pop up when shift states match
  4312.         FFh = no popup (if shift state also FFh)
  4313.  0Fh    BYTE    shift state of primary hotkey
  4314.         FFh = no popup (if scan code also FFh)
  4315.  10h    BYTE    number of secondary hotkeys
  4316.  11h    DWORD    pointer to extra hotkeys set by func 05h
  4317.  15h    WORD    current TSR status flags
  4318.  17h    WORD    PSP segment of TSR
  4319.  19h    DWORD    DTA for TSR
  4320.  1Dh    WORD    default DS for TSR
  4321.  1Fh    DWORD    stack at popup
  4322.  23h    DWORD    stack at background invocation
  4323. Index:    hotkeys;TesSeRact TSR interface
  4324.  
  4325. Format of TSR internal data area:
  4326. Offset    Size    Description    (Table 2528)
  4327.  00h    BYTE    revision level of TesSeRact library
  4328.  01h    BYTE    type of popup in effect
  4329.  02h    BYTE    INT 08 occurred since last invocation
  4330.  03h    BYTE    INT 13 occurred since last invocation
  4331.  04h    BYTE    active interrupts
  4332.  05h    BYTE    active soft interrupts
  4333.  06h    BYTE    DOS major version
  4334.  07h    BYTE    how long to wait before popping up
  4335.  08h    DWORD    pointer to INDOS flag
  4336.  0CH    DWORD    pointer to DOS critical error flag
  4337.  10h    WORD    PSP segment of interrupted program
  4338.  12h    WORD    PSP segment of prog interrupted by INT 28
  4339.  14h    DWORD    DTA of interrupted program
  4340.  18h    DWORD    DTA of program interrupted by INT 28
  4341.  1Ch    WORD    SS of interrupted program
  4342.  1Eh    WORD    SP of interrupted program
  4343.  20h    WORD    SS of program interrupted by INT 28
  4344.  22h    WORD    SP of program interrupted by INT 28
  4345.  24h    DWORD    INT 24 of interrupted program
  4346.  28h  3 WORDs    DOS 3.0+ extended error info
  4347.  2Eh    BYTE    old BREAK setting
  4348.  2Fh    BYTE    old VERIFY setting
  4349.  30h    BYTE    were running MS WORD 4.0 before popup
  4350.  31h    BYTE    MS WORD 4.0 special popup flag
  4351.  32h    BYTE    enhanced keyboard call in use
  4352.  33h    BYTE    delay for MS WORD 4.0
  4353. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  4354.     DWORD    old interrupt vector
  4355.     BYTE    interrupt number
  4356.     WORD    offset in TesSeRact code segment of new interrupt handler
  4357. --------p-2F5480-----------------------------
  4358. INT 2F U - POWER.EXE - GET/SET ???
  4359.     AX = 5480h
  4360.     BX = direction
  4361.         0000h get
  4362.         other set
  4363.     CX = size of buffer (at least 0010h)
  4364.     DS:SI -> buffer
  4365. Return: AX = status
  4366.         0000h successful
  4367.         other error code
  4368. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  4369. --------p-2F5481-----------------------------
  4370. INT 2F U - POWER.EXE - GET STATISTICS
  4371.     AX = 5481h
  4372.     BX = which statistics
  4373.         0000h idle detection
  4374.         0001h APM statistics
  4375.     CX = length of buffer in bytes
  4376.     DS:SI -> buffer for statistics (see #2529,#2530)
  4377. Return: AX = status
  4378.         0000h successful
  4379.         0071h "ERROR_PM_BUFFER_TOO_SMALL"
  4380.         0087h "ERROR_PM_INVALID_PARAMETER"
  4381. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  4382.  
  4383. Format of POWER.EXE idle detection statistics:
  4384. Offset    Size    Description    (Table 2529)
  4385.  00h    DWORD    "CPU_ON_TIME" total time CPU is active with POWER.EXE idle
  4386.           detection enabled, in timer ticks
  4387.  04h    DWORD    "CPU_IDLE_TIME" timer ticks during which CPU was idle
  4388.         (divide by previous to get idle    rate)
  4389.  08h    DWORD    total idle calls
  4390.  0Ch    DWORD    "TOTAL_APP_IDLE" total INT 2Fh idle calls
  4391.  10h    DWORD    "TOTAL_DOS_YIELD" total INT 28h idle calls
  4392.  14h    DWORD    "TOTAL_KEY_IDLE" total INT 16h idle calls
  4393.  18h    DWORD    "TOTAL_DOS_IDLE" total INT 2Ah idle calls
  4394.  
  4395. Format of APM statistics:
  4396. Offset    Size    Description    (Table 2530)
  4397.  00h    DWORD    "RESUME_COUNT" total number of resumes since last APM_ENABLE
  4398. --------p-2F5482-----------------------------
  4399. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  4400.     AX = 5482h
  4401.     BX = new polling frequency or 0000h to get current frequency
  4402. Return: AX = 0000h (successful)
  4403.     BX = current frequency if BX=0000h on entry
  4404. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  4405. --------p-2F548F-----------------------------
  4406. INT 2F U - POWER.EXE - GET/SET ???
  4407.     AX = 548Fh
  4408.     BX = ??? or 0000h to get current ???
  4409. Return: AX = 0000h (successful)
  4410.     BX = current ???
  4411.     CX = ???
  4412. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  4413. --------l-2F5500-----------------------------
  4414. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  4415.     AX = 5500h
  4416. Return: AX = 0000h if an instance of COMMAND.COM is already running
  4417.     DS:SI -> entry point table
  4418. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  4419.       been moved into the HMA; only the primary COMMAND.COM retains this
  4420.       portion
  4421.     procedures called from a dispatcher in COMMAND's resident portion;
  4422.       most assume that the segment address of the resident portion is on
  4423.       the stack and are thus not of general use
  4424. SeeAlso: AX=5501h
  4425. --------l-2F5501-----------------------------
  4426. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  4427.     AX = 5501h
  4428. Return: ???
  4429. Note:    used to determine whether the caller is the first instance of ROM
  4430.       COMMAND.COM
  4431. SeeAlso: AX=5500h
  4432. --------R-2F5600-----------------------------
  4433. INT 2F - INTERLNK - INSTALLATION CHECK
  4434.     AX = 5600h
  4435.     DX = magic value FFFFh
  4436.     BL = instance number (00h = any, 01h = first loaded, etc.)
  4437. Return: AL = FFh if installed
  4438.         BL = instance number
  4439.         CX = version number (CL = major, CH = minor)
  4440.         DX = resident CS of driver, DX:0000h -> header (see #2531)
  4441. SeeAlso: AX=5601h,AX=5602h,INT 60/AX=0000h
  4442.  
  4443. Format of Interlnk device driver header:
  4444. Offset    Size    Description    (Table 2531)
  4445.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  4446.  04h    WORD    device attributes (see #1333,#1334)
  4447.  06h    WORD    device strategy entry point
  4448.  08h    WORD    device interrupt entry point
  4449.  0Ah  8 BYTEs    character device name "NUL2    "
  4450.  12h 165 BYTEs    ???
  4451.  B7h 67 BYTEs    fully qualified Interlnk filename
  4452.  FAh  6 BYTEs    ???
  4453. 100h    DWORD    pointer back to Interlnk filename at offset B7h
  4454. 104h  8 BYTEs    ???
  4455. 10Ch    BYTE    total number of redirected drives
  4456. 10Dh    BYTE    first local drive number (0=A:)
  4457. 10Eh    BYTE    printer redirection (0=no, 1=yes)
  4458. 10Fh    BYTE    ???
  4459. 110h  3    BYTEs    LPT1...3 status (0FFh=invalid)
  4460. 113h 26 BYTEs    remote drive number (0=A:, 0FEh=unused) (refer to note below)
  4461. 12Dh 26 BYTEs    always 0FEh ???
  4462. 147h 26 BYTEs    always 0FFh ???
  4463. Note:    to obtain the remote drive number, subtract the value at offset 10Ch
  4464.       from the local drive number before indexing into the table at 113h
  4465.       (example: if local drives F, G, H are remote drives C, F, E then
  4466.       the first three bytes at offset 113h are 02h, 05h, 04h)
  4467.     for each instance of Interlnk, an extra device driver is loaded, but
  4468.       all have the same device name NUL2
  4469. SeeAlso: #1332 at INT 21/AH=52h
  4470. --------R-2F5601-----------------------------
  4471. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  4472.     AX = 5601h
  4473.     DX = magic value FFFFh
  4474.     BH = drive number (0=A:)
  4475.     BL = instance number (00h=any, 01h=first loaded, etc.)
  4476. Return: (as for AL=00h if redirected drive)
  4477. SeeAlso: AX=5600h,AX=5601h
  4478. --------R-2F5602-----------------------------
  4479. INT 2F - INTERLNK - CHECK IF PORT IN USE
  4480.     AX = 5602h
  4481.     DX = magic value FFFFh
  4482.     BL = instance number (00h=any, 01h=first loaded, etc.)
  4483.     CX = base port address of COM / LPT port to check
  4484. Return: (as for AL=00h if port in use for a redirected drive)
  4485. SeeAlso: AX=5600h
  4486. --------d-2F5700-----------------------------
  4487. INT 2F U - IOMEGA DRIVERS - INSTALLATION CHECK
  4488.     AX = 5700h
  4489.     BX = program ID??? (0201h used by GUEST.EXE)
  4490.     DX = 496Fh ('Io')
  4491. Return: AL = status
  4492.         00h not installed
  4493.         FFh installed
  4494. SeeAlso: AX=5701h,AX=5710h,AX=5711h,AX=5712h
  4495. --------d-2F5701-----------------------------
  4496. INT 2F U - IOMEGA DRIVERS - ???
  4497.     AX = 5701h
  4498.     BX = program ID??? (0201h used by GUEST.EXE)
  4499.     DX = 496Fh ('Io')
  4500. Return: AX = 0001h
  4501. SeeAlso: AX=5700h,AX=5710h,AX=5711h,AX=5712h
  4502. --------d-2F5710-----------------------------
  4503. INT 2F U - IOMEGA DRIVERS - GET DRIVER INFORMATION???
  4504.     AX = 5710h
  4505.     BX = program ID??? (0201h used by GUEST.EXE)
  4506.     DX = 496Fh ('Io')
  4507. Return: AX = ??? (BX ORed with ???)
  4508.     BX = ??? (internal variable)
  4509.     CX = ??? (internal variable)
  4510.     DX = ??? (CX ORed with ???)
  4511. SeeAlso: AX=5700h,AX=5701h,AX=5711h,AX=5712h
  4512. --------d-2F5711-----------------------------
  4513. INT 2F U - IOMEGA DRIVERS - LOCK MEDIA IN DRIVE
  4514.     AX = 5711h
  4515.     BX = program ID??? (0201h used by GUEST.EXE)
  4516.     DX = 496Fh ('Io')
  4517. Return: CF clear if successful (storage medium in drive)
  4518.         AX = new lock count
  4519.     CF set on error (drive empty)
  4520. SeeAlso: AX=5700h,AX=5701h,AX=5710h,AX=5712h
  4521. --------d-2F5712-----------------------------
  4522. INT 2F U - IOMEGA DRIVERS - UNLOCK MEDIA IN DRIVE / EJECT
  4523.     AX = 5712h
  4524.     BX = program ID??? (0201h used by GUEST.EXE)
  4525.     DX = 496Fh ('Io')
  4526. Return: AX = new lock count (00h = unlocked)
  4527. Note:    if the lock count was already zero, the storage medium is ejected
  4528.       from the drive
  4529. SeeAlso: AX=5700h,AX=5701h,AX=5710h,AX=5711h
  4530. --------c-2F5758BX4858-----------------------
  4531. INT 2F U - Helix Multimedia Cloaking - CACHECLK - INSTALLATION CHECK
  4532.     AX = 5758h
  4533.     BX = 4858h ('HX')
  4534.     DX = 4443h ('DC')
  4535.     CX <> 5758h
  4536. Return: BX = 6878h if installed
  4537.     DX = 6463h if installed
  4538.        CX = version (CH=major,CL=minor)
  4539. Program: CACHECLK is a 'Cloaked' disk cache by Helix Software
  4540. Note:    returns with registers unchanged if CX=5758h on entry
  4541. SeeAlso: INT 16/AX=5758h/BX=4858h,INT 2F/AX=4310h"Cloaking"
  4542. --------X-2F5D00-----------------------------
  4543. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  4544.     AX = 5D00h
  4545. Return: ES:BX -> ???
  4546. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  4547. SeeAlso: AX=5D01h,INT 21/AX=440Dh"DOS 3.2+"
  4548. --------X-2F5D01-----------------------------
  4549. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  4550.     AX = 5D01h
  4551.     ES:BX -> ???
  4552. Return: nothing
  4553. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  4554. SeeAlso: AX=5D00h,INT 21/AX=440Dh"DOS 3.2+"
  4555. --------s-2F60FFDL00-------------------------
  4556. INT 2F U - IPLAY v1.00b - INSTALLATION CHECK
  4557.     AX = 60FFh
  4558.     DL = 00h (function number)
  4559.     BX = 5344h ('SD')
  4560.     CX = 4D50h ('MP')
  4561. Return: AX = 4F4Bh ('OK') if installed
  4562. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  4563.       (digitized music files)
  4564. Note:    in version 1.00b, any value for DL except 01h invokes this function
  4565. SeeAlso: AX=60FFh/DL=01h
  4566. --------s-2F60FFDL01-------------------------
  4567. INT 2F U - IPLAY v1.00b - GET DATA SEGMENT
  4568.     AX = 60FFh
  4569.     DL = 01h (function number)
  4570.     BX = 5344h ('SD')
  4571.     CX = 4D50h ('MP')
  4572. Return: AX = data segment
  4573. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  4574.       (digitized music files)
  4575. SeeAlso: AX=60FFh/DL=00h
  4576. --------v-2F6282-----------------------------
  4577. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  4578.     AX = 6282h
  4579.     CX:DX -> ??? or 0000h:0000h
  4580.     DI = segment of ??? record (see #2532) or 0000h/FFFFh to ignore
  4581. Return: BX = 0062h
  4582. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  4583.       (DATAMON only)
  4584. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  4585.  
  4586. Format of VSAFE/VWATCH record:
  4587. Offset    Size    Description    (Table 2532)
  4588.  00h    DWORD    ???
  4589.  04h    WORD    offset of ??? in record's segment
  4590.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  4591.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  4592.  06h  2 BYTEs    ???
  4593.  08h    BYTE    ??? (01h/other)
  4594. --------v-2F6284BX0000-----------------------
  4595. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  4596.     AX = 6284h
  4597.     BX = 0000h
  4598.     CX = 0000h
  4599. Return: AX = segment of resident code
  4600.     BX = 5555h
  4601.     CX = 5555h
  4602. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  4603. SeeAlso: AX=6284h/BX=0001h,INT 16/AX=FFA3h/BX=0000h
  4604. --------v-2F6284BX0001-----------------------
  4605. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  4606.     AX = 6284h
  4607.     BX = 0001h
  4608.     CX = 0001h
  4609. Return: AX:BX -> ??? data (see #2533)
  4610.     CX = BX
  4611. SeeAlso: AX=6284h/BX=0000h
  4612.  
  4613. Format of DPROTECT data for v9.0:
  4614. Offset    Size    Description    (Table 2533)
  4615.  00h  5 BYTEs    ???
  4616.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  4617.  07h    DWORD    -> FAR function to sound alert tone
  4618.     ???
  4619. --------v-2F6284BX0002-----------------------
  4620. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  4621.     AX = 6284h
  4622.     BX = 0002h
  4623.     CX = 0002h
  4624. Return: AX = options (see #2534)
  4625.     BX = ??? (0000h for v9)
  4626.     CX = AX
  4627.     DX = BX
  4628. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  4629. SeeAlso: AX=6284h/BX=0000h,AX=6284h/BX=0003h
  4630.  
  4631. Bitfields for DATAMON/DPROTECT options:
  4632. Bit(s)    Description    (Table 2534)
  4633.  1    ???
  4634.  12    disabled
  4635.  13    using Delete Sentry
  4636.  14    using Delete Tracker
  4637. --------v-2F6284BX0003-----------------------
  4638. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET OPTION??? FLAGS
  4639.     AX = 6284h
  4640.     BX = 0003h
  4641.     CX = flags (see #2535)
  4642.     DX = flags
  4643.         bit 15: ???
  4644. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  4645. SeeAlso: AX=6284h/BX=0002h
  4646.  
  4647. Bitfields for DATAMON/DPROTECT CX flags:
  4648. Bit(s)    Description    (Table 2535)
  4649.  3    ???
  4650.  5    ???
  4651.  10    ???
  4652.  12    disable DATAMON/DPROTECT
  4653. --------v-2F6284BX0004-----------------------
  4654. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  4655.     AX = 6284h
  4656.     BX = 0004h
  4657.     CX = 0004h
  4658. Return: AX = 5555h
  4659.     BX = ??? (0800h)
  4660.     CX = ??? (FCCCh for v8, FCCBh for v9)
  4661. --------V-2F6400-----------------------------
  4662. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  4663.     AX = 6400h
  4664. Return: AL = installation state
  4665.         00h not installed
  4666.         FFh installed
  4667. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  4668. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  4669. Index:    screen saver;SCRNSAV2
  4670. --------N-2F7000-----------------------------
  4671. INT 2F - License Service API - INSTALLATION CHECK
  4672.     AX = 7000h
  4673.     CX = license server index (0000h to 001Fh)
  4674. Return: AL = status
  4675.         00h not installed
  4676.         FFh installed
  4677. Notes:    The License Service API is being maintained by Microsoft but is being
  4678.       supported by a large number of companies including Apple, Banyan,
  4679.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  4680.       and Wordperfect (not a complete list!)
  4681.     Each license service provider must search for the next free index
  4682.       slot to use
  4683. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  4684. --------N-2F7001-----------------------------
  4685. INT 2F - License Service API - REQUEST LICENSE
  4686.     AX = 7001h
  4687.     CX = license server index (0000h to 001Fh)
  4688.     DS:DX -> SLSREQUEST structure (see #2536)
  4689. Return: AX = status
  4690.         0000h success
  4691.         else  provider error code
  4692.     ES:BX = provider specific handle for the license context
  4693. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  4694.  
  4695. Format of License Service SLSREQUEST structure:
  4696. Offset    Size    Description    (Table 2536)
  4697.  00h    DWORD    (ret) status code
  4698.  04h    DWORD    (ret) handle identifying context
  4699.  08h    DWORD    (call) address of Publisher string
  4700.  0Ch    DWORD    (call) address of Product string
  4701.  10h    DWORD    (call) address of Version string
  4702.  14h    DWORD    units required
  4703.  18h    DWORD    address of comment string
  4704.  1Ch    DWORD    address of SLSCHALLENGE structure (see #2537)
  4705.  
  4706. Format of License Service SLSCHALLENGE structure:
  4707. Offset    Size    Description    (Table 2537)
  4708.  00h    DWORD    algorithm (currently always 1)
  4709.  04h    DWORD    secret to be challenged (1-255)
  4710.  08h    DWORD    size of challenge in bytes (1-255)
  4711.  0Ch  N BYTEs    challenge data
  4712. --------N-2F7002-----------------------------
  4713. INT 2F - License Service API - RELEASE LICENSE
  4714.     AX = 7002h
  4715.     CX = license server index (0000h to 001Fh)
  4716.     DS:DX -> SLSRELEASE structure (see #2538)
  4717.     ES:BX = provider specific handle for the license context
  4718. Return: AL = status
  4719.         00h not installed
  4720.         FFh installed
  4721. SeeAlso: AX=7001h,AX=7005h
  4722.  
  4723. Format of License Service SLSRELEASE structure:
  4724. Offset    Size    Description    (Table 2538)
  4725.  00h    DWORD    handle indentifying license context
  4726.  04h    DWORD    total units consumed
  4727.  08h    DWORD    address of comment string
  4728. --------N-2F7003-----------------------------
  4729. INT 2F - License Service API - UPDATE
  4730.     AX = 7003h
  4731.     CX = license server index (0000h to 001Fh)
  4732.     DS:DX -> SLSUPDATE structure (see #2539)
  4733.     ES:BX = provider specific handle for the license context
  4734. Return: AL = status
  4735.         00h not installed
  4736.         FFh installed
  4737. SeeAlso: AX=7004h,AX=7005h
  4738.  
  4739. Format of License Service SLSUPDATE structure:
  4740. Offset    Size    Description    (Table 2539)
  4741.  00h    DWORD    (ret) status code
  4742.  04h    DWORD    (call) handle identifying license context
  4743.  08h    DWORD    (call) total units consumed
  4744.  0Ch    DWORD    additional units required
  4745.  10h    DWORD    address of comment string
  4746.  14h    DWORD    address of SLSCHALLENGE structure (see #2537)
  4747. --------N-2F7004-----------------------------
  4748. INT 2F - License Service API - GET ERROR
  4749.     AX = 7004h
  4750.     CX = license server index (0000h to 001Fh)
  4751.     DS:DX -> SLSGETERROR structure (see #2540)
  4752.     ES:BX = provider specific handle for the license context
  4753. Return: AL = status
  4754.         00h not installed
  4755.         FFh installed
  4756. SeeAlso: AX=7000h,AX=7001h
  4757.  
  4758. Format of License Service SLSGETERROR structure:
  4759. Offset    Size    Description    (Table 2540)
  4760.  00h    DWORD    (ret) status code
  4761.  04h    DWORD    handle identifying license context
  4762.  08h    DWORD    error code
  4763.  0Ch    DWORD    buffer size in bytes
  4764.  10h  N BYTEs    data buffer
  4765. --------N-2F7005-----------------------------
  4766. INT 2F - License Service API - QUERY LICENSE
  4767.     AX = 7005h
  4768.     CX = license server index (0000h to 001Fh)
  4769.     DS:DX -> SLSQUERY structure (see #2541)
  4770.     ES:BX = provider specific handle for the license context
  4771. Return: AL = status
  4772.         00h not installed
  4773.         FFh installed
  4774. SeeAlso: AX=7001h,AX=7002h
  4775.  
  4776. Format of License Service SLSQUERY structure:
  4777. Offset    Size    Description    (Table 2541)
  4778.  00h    DWORD    (ret) status code
  4779.  04h    DWORD    handle identifying license context
  4780.  08h    DWORD    information index
  4781.  0Ch    DWORD    buffer size in bytes
  4782.  10h  N BYTEs    data buffer
  4783. --------K-2F7041BX4B70-----------------------
  4784. INT 2F U - HP 200LX - KEY200 - INSTALLATION CHECK
  4785.     AX = 7041h
  4786.     BX = 4B70h
  4787. Return: BX = 7965h if keyboard remapper KEY200.COM installed
  4788. --------d-2F7200-----------------------------
  4789. INT 2F - SRDISK v1.30+ - INSTALLATION CHECK
  4790.     AX = 7200h
  4791. Return: AL = FFh if installed
  4792.         ES = segment of device driver header (see #2542)
  4793. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  4794. SeeAlso: AX=7201h
  4795.  
  4796. Format of SRDISK device driver header:
  4797. Offset    Size    Description    (Table 2542)
  4798.  00h 10 BYTEs    same as standard device driver header
  4799.           (see #1332 at INT 21/AH=52h)
  4800.  0Ah    BYTE    number of subunits (drives) supported by driver
  4801.  0Bh  3 BYTEs    signature "SRD"
  4802.  0Eh  4 BYTEs    memory type string ("XMS "/"EMS ")
  4803.  12h  4 BYTEs    ASCII driver version string "N.NN"
  4804.  16h    BYTE    00h
  4805.  17h    BYTE    configuration format version (currently 00h or 01h)
  4806.  18h    WORD    offset of drive configuration data
  4807. SeeAlso: #1332
  4808. --------d-2F7201-----------------------------
  4809. INT 2F - SRDISK v2.02 - GET CODE/DATA SEGMENT
  4810.     AX = 7201h
  4811. Return: AL = FFh if installed
  4812.         ES = segment of device driver header (see #2542)
  4813. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  4814. SeeAlso: AX=7200h
  4815. --------N-2F7A00-----------------------------
  4816. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  4817.     AX = 7A00h
  4818. Return: AL = status
  4819.         00h not installed
  4820.         FFh installed
  4821.         ES:DI -> FAR entry point for routines accessed exclusively
  4822.               through INT 7A in NetWare versions through 2.0a.
  4823.               Call with same values as INT 7A
  4824.         ES:BX -> two bytes containing IPX major/minor version
  4825.             (IPXODI v2.12; BX unchanged by older IPX drivers)
  4826.         CX = ES ???
  4827. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"LOW-LEVEL API"
  4828. --------N-2F7A10-----------------------------
  4829. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  4830.     AX = 7A10h
  4831. Return: DH = major TBMI version number
  4832.     DL = minor TBMI version number (01h for v1.1)
  4833.     CX = segment address of TBMI resident part
  4834.     BX = status word of TBMI (see #2543)
  4835. Note:    TBMI is the Task-Switched Buffer Manager Interface
  4836. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  4837.  
  4838. Bitfields for NetWare TBMI status word:
  4839. Bit(s)    Description    (Table 2543)
  4840.  0    INT2F intercepted by TBMI
  4841.  1    INT7A intercepted by TBMI
  4842.  2    INT64 intercepted by TBMI
  4843.  3-14    reserved or unused ???
  4844.  15    outstanding task ID was detected
  4845. --------N-2F7A11-----------------------------
  4846. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  4847.     AX = 7A11h
  4848. Return: ES:BX -> old INT 2F handler
  4849.     DS:DX -> TBMI INT 2F handler
  4850. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  4851. --------N-2F7A12-----------------------------
  4852. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  4853.     AX = 7A12h
  4854. Return: ES:BX -> old INT 64 handler
  4855.     DS:DX -> TBMI INT 64 handler
  4856. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  4857. --------N-2F7A13-----------------------------
  4858. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  4859.     AX = 7A13h
  4860. Return: ES:BX -> old INT 7A handler
  4861.     DS:DX -> TBMI INT 7A handler
  4862. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  4863. --------N-2F7A14-----------------------------
  4864. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  4865.     AX = 7A14h
  4866.     CX = statistic to retrieve
  4867.         0000h available diagnostic functions???
  4868.         Return: CX = maximum available function??? (000Ch for v2.0)
  4869.         0001h buffers in use
  4870.         Return: CX = TBMI buffers currently in use
  4871.         0002h maximum buffers used
  4872.         Return: CX = maximum number of buffers ever in use
  4873.         0003h unavailable buffers
  4874.         Return: CX = count of unavailable TBMI buffers
  4875.         0004h old interrupt usage
  4876.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  4877.                   INT 64, and INT 7A
  4878.         0005h far call usage
  4879.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  4880.                   including internal accesses)
  4881.         0006h task buffering
  4882.         Return: CX = TBMI task buffering status (enabled/disabled or
  4883.                   disable/enable switch count???)
  4884.         0007h current task ID
  4885.         Return: CX = TBMI current task ID number (0000h if ???)
  4886.         0008h outstanding ID count
  4887.         Return: CX = number of outstanding TBMI IDs
  4888.         0009h configured ECBs
  4889.         Return: CX = number of TBMI Event Control Blocks configured
  4890.         000Ah configured data ECBs
  4891.         Return: CX = number of TBMI data ECBs configured
  4892.         000Bh configured sockets
  4893.         Return: CX = number of TBMI sockets configured (from NETCFG)
  4894.         000Ch current sockets
  4895.         Return: CX = number of TBMI sockets currently in use
  4896. Return: BX = maximum supported subfunction (000Ch)
  4897. SeeAlso: AX=7A10h
  4898. --------N-2F7A15-----------------------------
  4899. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  4900.     AX = 7A15h
  4901. Return: BX = new value of ???
  4902. Desc:    set ??? to its default value
  4903. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4904. SeeAlso: AX=7A17h
  4905. --------N-2F7A16-----------------------------
  4906. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  4907.     AX = 7A16h
  4908.     CX = ???
  4909.     ???
  4910. Return: ???
  4911. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4912. --------N-2F7A17-----------------------------
  4913. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  4914.     AX = 7A17h
  4915.     ???
  4916. Return: BX = old value of ???
  4917.     CX = new value of ???
  4918. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  4919. SeeAlso: AX=7A15h
  4920. --------N-2F7A18-----------------------------
  4921. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  4922.     AX = 7A18h
  4923. Return: AL = FFh if installed
  4924.         BX = configuration flags (see #2544)
  4925.         CX = resident code segment
  4926. SeeAlso: AX=7A10h
  4927.  
  4928. Bitfields for NetWare TASKID configuration flags:
  4929. Bit(s)    Description    (Table 2544)
  4930.  0    INT 2F hooked
  4931.  3    INT 08 hooked
  4932.  other    unused
  4933. --------N-2F7A19-----------------------------
  4934. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  4935.     AX = 7A19h
  4936. Return: AL = FFh
  4937.     DS:DX -> TASKID INT 08 handler
  4938.     ES:BX -> original INT 08 handler
  4939. --------N-2F7A1A-----------------------------
  4940. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  4941.     AX = 7A1Ah
  4942. Return: AL = FFh
  4943.     DX:DX -> TASKID INT 2F handler
  4944.     ES:BX -> original INT 2F handler
  4945. SeeAlso: AX=7A11h,AX=7A19h
  4946. --------N-2F7A1B-----------------------------
  4947. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  4948.     AX = 7A1Bh
  4949.     CX = desired information
  4950.         0000h supported functions
  4951.         0001h TASKID ID number
  4952.         Return: CX = ID number
  4953.         0002h set-ID count
  4954.         Return: CX = ID set count
  4955. Return: AL = FFh
  4956.     BX = highest supported subfunction number (0002h)
  4957. SeeAlso: AX=7A14h,AX=7A18h
  4958. --------N-2F7A1C-----------------------------
  4959. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4960.     AX = 7A1Ch
  4961.     BP = ???
  4962.     CX:DX = ???
  4963. Return: AX = 70FFh
  4964. --------N-2F7A1D-----------------------------
  4965. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4966.     AX = 7A1Dh
  4967.     ???
  4968. Return: ES = ???
  4969.     ???
  4970.     SI destroyed
  4971. --------N-2F7A1E-----------------------------
  4972. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  4973.     AX = 7A1Eh
  4974.     ES:SI -> ???
  4975.     ???
  4976. Return: ???
  4977. --------N-2F7A20BX0000-----------------------
  4978. INT 2F - Novell NetWare - Adv NetWare 4.0 DOS Requester - GET VLM CALL ADDRESS
  4979.     AX = 7A20h
  4980.     BX = 0000h
  4981. Return: AX = 0000h on success (installed)
  4982.         ES:BX -> far call address for DOS Requester (see #2545)
  4983. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  4984.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  4985.       is backward compatible with NetWare 2.1x through 3.11 servers as
  4986.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  4987.       can cause confusion.
  4988.     this call is used as the installation check by VLM.EXE, which is the
  4989.       loader for all the modules of the DOS Requester
  4990.     .VLMs are standard old .EXE format executables whose normal entry point
  4991.       merely terminates to prevent loading from the command line (Novell's
  4992.       VLMs all return errorlevel 6).  The real entry point is found by
  4993.       looking at the VLM header at the beginning of the load image
  4994.       (see #2548)
  4995. Index:    installation check;NetWare 4.0 DOS Requester
  4996. SeeAlso: AX=7A20h/BX=0001h,AX=7A20h/BX=0002h
  4997.  
  4998. (Table 2545)
  4999. Call DOS Requester entry point with:
  5000.     STACK:    WORD    destination function
  5001.         WORD    destination VLM ID (see #2547)
  5002.         WORD    source VLM ID (0000h = application program)
  5003.     other registers (except BP) as appropriate for function
  5004. Return: AX = status code (0000h,8811h,8846h,8848h,8853h) (see #2546)
  5005.     ZF set if successful, clear on error
  5006.     other registers as appropriate for function
  5007.     STACK popped
  5008.     BP destroyed
  5009.  
  5010. (Table 2546)
  5011. Values for VLM status code:
  5012.  0000h    successful
  5013.  88xxh    error generated by requester
  5014.  8801h    invalid or non-attached connection handle
  5015.  8802h    drive in use (OS/2 only)
  5016.  8803h    cannot add CDS
  5017.  8804h    bad path
  5018.  8805h    error sending or receiving NCP packets
  5019.  8806h    unknown network error
  5020.  8807h    invalid server connection slot
  5021.  8808h    no connection slots available
  5022.  880Ah    no route to server
  5023.  880Bh    "BAD_LOCAL_TARGET" (OS/2 only)
  5024.  880Ch    too many request fragments
  5025.  880Dh    "CONNECT_LIST_OVERFLOW" (OS/2 only)
  5026.  880Eh    buffer overflow on receive
  5027.  880Fh    no connection to server
  5028.  8810h    no router found (OS/2 only)
  5029.  8811h    nonexistent function called
  5030.  8830h    internal server request attempted between two separate connections
  5031.  8831h    no primary connection set
  5032.  8833h    invalid buffer length
  5033.  8834h    invalid user name
  5034.  8835h    no local print spooler installed
  5035.  8836h    attempted function with invalid parameter
  5036.  8837h    failed to open configuration file (OS/2 only)
  5037.  8838h    no configuration file (OS/2 only)
  5038.  8839h    configuration file read failed (OS/2 only)
  5039.  883Ah    line too long in configuration file (OS/2 only)
  5040.  883Bh    configuration lines ignored (OS/2 only)
  5041.  883Ch    foreign resource
  5042.  883Dh    daemon already installed (OS/2 only)
  5043.  883Eh    print spooler already installed
  5044.  883Fh    local connection table already full
  5045.  8840h    configuration section not found (OS/2 only)
  5046.  8841h    invalid transport type
  5047.  8842h    TDS tag in use (OS/2 only)
  5048.  8843h    TDS out of memory (OS/2 only)
  5049.  8844h    called TDS function with invalid tag
  5050.  8845h    TDS write was truncated
  5051.  8846h    called partially asynchronous function while it was busy
  5052.  8847h    unable to find any responding servers
  5053.  8848h    non-loaded or nonexistent VLM called
  5054.  8849h    network drive already mapped
  5055.  884Ah    attempted map to local drive which was already in use
  5056.  884Bh    no more drives available for mapping
  5057.  884Ch    device is not redirected
  5058.  884Dh    no more SFT entries (too many handles)
  5059.  884Eh    unable to unload
  5060.  884Fh    connection entry was already in use
  5061.  8850h    too many reply fragments
  5062.  8851h    name table already full
  5063.  8852h    socket not open
  5064.  8853h    memory management error
  5065.  8854h    SFT III switch occurred in mid-transfer
  5066.  8855h    preferred server was not found (alternate returned)
  5067.  8856h    device not recognized
  5068.  8857h    bad network byte
  5069.  88A0h    memory allocation error
  5070.  88A1h    connection timeout failure
  5071.  88A2h    transport: bad request
  5072.  88A3h    specified transport not installed
  5073.  88A4h    unable to open connection with specified parameters
  5074.  88A6h    unsupported function
  5075.  88A7h    no such task
  5076.  88A8h    too many tasks
  5077.  88A9h    version mismatch
  5078.  88AAh    request cancelled
  5079.  88ABh    invalid NDS name
  5080.  88ACh    unable to perform operation while logged into NDS
  5081.  88ADh    requester not available for use
  5082.  88AEh    MacIPX not configured properly
  5083.  88AFh    no servers found
  5084.  88B0h    no volume or session associated with identifier
  5085.  88B1h    not a NetWare volume
  5086.  88B2h    MacIPX version incompatible with Requester
  5087.  88B4h    MacIPX not open
  5088.  88B5h    insufficient stack
  5089.  88B6h    client API already initialized
  5090.  88B7h    checksums required by client are not available
  5091.  88B8h    packet signing required by client are not available
  5092.  88B9h    server requires checksum
  5093.  88BAh    server requires packet signing
  5094.  88BBh    already logged in
  5095.  88BCh    negotiated checksums but connection timed out
  5096.  89xxh    error generated by server
  5097.     low byte = return code from server (see also #1615,#1649)
  5098.  8900h    server successful
  5099.  8901h    out of disk space
  5100.  897Eh    NCP boundary check failed
  5101.  897Fh    ???
  5102.  8980h    lock failed; file in use
  5103.  8981h    out of handles
  5104.  8982h    no open privileges
  5105.  8983h    hard (non-correctable) I/O error
  5106.  8984h    no creation privileges
  5107.  8985h    no create/delete privileges
  5108.  8986h    attempted to create a file which already exists read-only
  5109.  8987h    filename error during creation (wildcards in name)
  5110.  8988h    invalid file handle
  5111.  8989h    no search privileges
  5112.  898Ah    no deletion privileges
  5113.  898Bh    no rename privileges
  5114.  898Ch    no modify privileges
  5115.  898Dh    some affected files are in use
  5116.  898Eh    all affected files are in use
  5117.  898Fh    some affected files are read-only
  5118.  8990h    all affected files are read-only; volume read-only
  5119.  8991h    some files could not be renamed because target names already exist
  5120.  8992h    all affected names exist
  5121.  8993h    no read privileges
  5122.  8994h    no write privileges
  5123.  8995h    file detached
  5124.  8996h    server out of memory
  5125.  8997h    no disk space for spool file
  5126.  8998h    disk map error; volume does not exist
  5127.  8999h    directory full
  5128.  899Ah    attempt to rename across volumes
  5129.  899Bh    bad directory handle
  5130.  899Ch    invalid path; no more trustees
  5131.  899Dh    no directory handles
  5132.  899Eh    bad filename
  5133.  899Fh    directory active
  5134.  89A0h    directory not empty
  5135.  89A1h    directory I/O error
  5136.  89A2h    I/O lock error
  5137.  89A3h-89A5h ???
  5138.  89A6h    auditing is active
  5139.  89A7h    auditing version error
  5140.  89A8h    no auditing rights
  5141.  89A3h-89BEh ???
  5142.  89BFh    invalid name space
  5143.  89C0h    no account privileges
  5144.  89C1h    no account balance
  5145.  89C2h    credit limit exceeded
  5146.  89C4h    account disabled
  5147.  89C5h    login lockout (intruder detection activated)
  5148.  89C6h    no console rights
  5149.  89C7h-89CFh
  5150.  89D0h    queue error
  5151.  89D1h    no queue
  5152.  89D2h    no queue server
  5153.  89D3h    no queue rights
  5154.  89D4h    queue full
  5155.  89D5h    no queue job
  5156.  89D6h    no job rights; unencrypted password
  5157.  89D7h    queue servicing error; duplicate password; bad account
  5158.  89D8h    queue not active; password too short
  5159.  89D9h    station not queue server; maximum logins exceeded
  5160.  89DAh    queue halted; bad login time
  5161.  89DBh    maximum queue servers; unauthorized login station
  5162.  89DCh    account disabled or expired
  5163.  89DEh    password expired (all grace logins used up)
  5164.  89DFh    password expired but login allowed (grace login)
  5165.  89E0h-89E6h ???
  5166.  89E7h    no disk track
  5167.  89E8h    property is not an item property; write to group
  5168.  89E9h    member exists
  5169.  89EAh    no such member
  5170.  89EBh    property is not a set property
  5171.  89ECh    no such set
  5172.  89EDh    property exists
  5173.  89EEh    object exists
  5174.  89EFh    illegal name
  5175.  89F0h    illegal wildcard
  5176.  89F1h    invalid bindery security level
  5177.  89F2h    not allowed to read object
  5178.  89F3h    not allowed to write/rename object
  5179.  89F4h    not allowed to delete object
  5180.  89F5h    not allowed to create object
  5181.  89F6h    not allowed to delete property
  5182.  89F7h    not allowed to create property; attempt to use non-local drive
  5183.  89F8h    not allowed to write property; already attached to server
  5184.  89F9h    not allowed to read property; no free connection slots
  5185.  89FAh    temporary remap error; no more server slots
  5186.  89FBh    no such property; invalid parameters
  5187.  89FCh    no such object; internet packet request canceled; unknown file server
  5188.  89FDh    bad station number; lock collision
  5189.  89FEh    directory locked; bindery locked; timeout
  5190.  89FFh    general error; hard error; lock error
  5191. Note:    some server-generated error codes have multiple interpretations; use
  5192.       the one appropriate to the failing call
  5193.  
  5194. (Table 2547)
  5195. Values for VLM identifier:
  5196.  0001h    VLM.EXE        Virtual Loadable Modules manager (see also #2550)
  5197.  0010h    CONN.VLM    connection table manager (see also #2553)
  5198.  0020h    TRAN.VLM    transport protocol multiplexor (see also #2557)
  5199.  0021h    IPXNCP.VLM    transport protocol implementation using IPX (see #2559)
  5200.  0022h    TCPNCP.VLM    TCP/IP transport
  5201.  0030h    NWP.VLM        NetWare protocol multiplexor (see also #2561)
  5202.  0031h    BIND.VLM    bindery
  5203.  0032h    NDS.VLM        NetWare Directory Services (see also #2563)
  5204.  0033h    PNW.VLM        Personal NetWare
  5205.  0034h    RSA.VLM        RSA encryption for directory services re-authentication
  5206.  0040h    REDIR.VLM    DOS redirector (see also #2565)
  5207.  0041h    FIO.VLM        file I/O (see also #2568)
  5208.  0042h    PRINT.VLM    printer redirector (see also #2570)
  5209.  0043h    GENERAL.VLM    misc functions for NETx and REDIR (see also #2574)
  5210.  0050h    NETX.VLM    NetWare shell compatibility (see also #2576)
  5211.  0060h    AUTO.VLM    auto-reconnect/auto-retry
  5212.  0061h    SECURITY.VLM    enhanced security module (see #2578)
  5213.  0100h    NMR.VLM        NetWare management responder
  5214.  09F2h    DRVPRN.VLM    Desktop SNMP Services - Drive/Printer Mappings
  5215.  09F5h    SAA.VLM        SAA client API for Netware
  5216.  09F6h    IPXMIB.VLM    SNMP IPX-monitoring Module???
  5217.  09F7h    PNWMIB.VLM    Personal Netware SNMP Instrumentation Module
  5218.  09F8h    PNWTRAP.VLM    Personal Netware SNMP Trap Module
  5219.  09F9h    MIB2PROT.VLM    MIB-II Protocol Groups
  5220.  09FAh    MIB2IF.VLM    MIB-II Interfaces Group
  5221.  09FBh    NVT.VLM        ???
  5222.  09FCh    WSTRAP.VLM    Desktop SNMP Services - Trap Module
  5223.  09FDh    WSREG.VLM    Desktop SNMP Services - Registration Module
  5224.  09FEh    WSASN1.VLM    Desktop SNMP Services - ASN.1 Module
  5225.  09FFh    WSSNMP.VLM    Desktop SNMP Services - Agent Module
  5226.  
  5227. Format of VLM header:
  5228. Offset    Size    Description    (Table 2548)
  5229.  00h    DWORD    -> initialization entry point
  5230.  04h    DWORD    -> VLM API entry point
  5231.  08h    DWORD    -> ??? entry point
  5232.  0Ch    DWORD    -> ??? entry point
  5233.  10h    DWORD    -> ??? entry point
  5234.     ...
  5235.  var    DWORD    00000000h (end of entry point list)
  5236.       4 BYTEs    signature "NVlm"
  5237.     WORD    VLM identifier (see #2547)
  5238. ---v1.20+ ---
  5239.  1Eh    WORD    ???
  5240.  20h    WORD    Transient Switch Count
  5241.  22h    WORD    VLM Call Count
  5242.  24h    WORD    Offset ControlBlocks (See #2549)
  5243.  26h    WORD    Current VLMID
  5244.  28h    BYTE    Memory Type
  5245.         00h=Conventional 02h=EMS 04h=XMS
  5246.  29h    BYTE    Modules Loaded
  5247.  2Ah    WORD    BlockId
  5248.  2Ch    WORD    Transient Block
  5249.  2Eh    WORD    Global Segment
  5250.  30h  3    DWORDs    pointers to AsyncQueue head, tail, and s???
  5251.  3Ch  3    DWORDs    pointers BusyQueue head, tail, and s???
  5252.  48h    WORD    ReEntrance Level
  5253.  4Ah    WORD    Full Map Count
  5254.  4Ch    WORD    ???
  5255.  4Eh 80 BYTEs    ASCIZ configuration file filename
  5256. Note:    the number of entry points in the header is reported as "Func" in the
  5257.       VLM /D display.
  5258.  
  5259. Format of VLM Control Block for VLM v1.20 [array]:
  5260. Offset    Size    Description    (Table 2549)
  5261.  00h    WORD    Flag
  5262.  02h    WORD    VLM Identifier (See #2547)
  5263.  04h    WORD    Func
  5264.  06h    WORD    Maps
  5265.  08h    WORD    number of times called
  5266.  0Ah    WORD    ???
  5267.  0Ch    WORD    Transient Segment
  5268.  0Eh    WORD    Global Segment
  5269.  10h    WORD    Address Low
  5270.  12h    WORD    Address High
  5271.  14h    WORD    TSegSize
  5272.  16h    WORD    GSegSize
  5273.  18h    WORD    SSegSize
  5274.  1Ah    BYTE    VLMName[9] ASCIZ
  5275. Note:    this information is shown in VLM /d under the dashed line. There are
  5276.       as many 35-byte blocks as modules loaded
  5277. SeeAlso: #2548
  5278.  
  5279. (Table 2550)
  5280. Call VLM Manager (VLM.EXE, ID 0001h) with:
  5281. Func    Description/Registers
  5282.  01h    VLM Notify
  5283.     BX = function
  5284.         0000h get version
  5285.         Return: AX = status (see #2546)
  5286.             BX = major version of VLM supported (0001h)
  5287.             CX = minor version of VLM supported (0000h)
  5288.  03h    VLM Statistics
  5289.     CX = length of buffer
  5290.     ES:DI -> buffer for statistics (see #2551)
  5291.     Return: AX = status (0000h if successful)
  5292.         buffer filled if successful
  5293.  04h    VLM internal use
  5294.     BX = function
  5295.         0000h get interrupt vector (calls INT 21/AH=35h)
  5296.         0001h begin critical section (calls INT 2F/AX=1681h)
  5297.         0002h end critical section (calls INT 2F/AX=1682h)
  5298.         0003h ???
  5299.  
  5300. Format of VLM.EXE statistics:
  5301. Offset    Size    Description    (Table 2551)
  5302.  00h    WORD    size of statistics record in bytes (including this word)
  5303.  02h    WORD    number of times a VLM has been mapped into memory
  5304.  04h    WORD    number of times a VLM has been called
  5305.  06h    WORD    offset of vcbArray buffer
  5306.  08h    WORD    VLM ID of VLM currently mapped into memory
  5307.  0Ah    BYTE    memory type: conventional/EMS/XMS
  5308.  0Bh    BYTE    number of loaded VLMs
  5309.  0Ch    WORD    EMS/XMS handle or 0000h if conventional memory
  5310.  0Eh    WORD    start segment for conventional memory swap
  5311.  10h    WORD    segment for global memory, or 0000h if conventional memory
  5312.  12h 12 BYTEs    queue structure for asynchronous calls (see #2552)
  5313.  1Eh 12 BYTEs    queue structure for synchronous calls (see #2552)
  5314.  2Ah    WORD    current re-entrance level
  5315.  2Ch    WORD    number of times EMS/XMS map-out performed
  5316.  2Eh    BYTE    stack switch control
  5317.  2Fh    BYTE    flag: nonzero if switcher loaded
  5318.  30h 80 BYTEs    pathname of configuration file
  5319. SeeAlso: #2550
  5320.  
  5321. Format of VLM.EXE queue structure:
  5322. Offset    Size    Description    (Table 2552)
  5323.  00h    DWORD    queue head (initially 00000000h)
  5324.  04h    DWORD    queue tail (initialized to be same as head)
  5325.  08h    WORD    current queue size (number of nodes in queue)
  5326.  0Ah    WORD    maximum queue size (in nodes)
  5327. SeeAlso: #2551
  5328.  
  5329. (Table 2553)
  5330. Call Connection Manager (CONN.VLM, ID 0010h) with:
  5331. Func    Description/Registers
  5332.  01h    Conn Get Version
  5333.     BX = function
  5334.         0000h get version
  5335.         Return: AX = status (see #2546)
  5336.             BX = major version of VLM supported (0001h)
  5337.             CX = minor version of VLM supported (0000h)
  5338.  03h    Conn Statistics
  5339.     CX = length of buffer
  5340.     ES:DI -> buffer for connection statistics (see #2554)
  5341.     Return: AX = status (0000h successful)
  5342.  04h    Conn Alloc Handle
  5343.     Return: AX = status (0000h successful)
  5344.         CX = connection handle
  5345.  05h    Conn Validate Handle
  5346.     CX = connection handle
  5347.     Return: AX = 0000h if valid handle
  5348.  06h    Conn Free Handle
  5349.     CX = connection handle
  5350.     Return: AX = status (0000h successful)
  5351.  07h    Conn Get Entry Field
  5352.     BH = connection parameter (see #2556)
  5353.     CX = connection handle
  5354.     DX = value if BH is non-array parameter
  5355.     DH = offset in array if BH is array parameter
  5356.     DL = number of bytes to copy if BH is array
  5357.     ES:DI -> return buffer if BH is array
  5358.     Return: AX = 0000h if successful
  5359.         DL/DX = value if non-array parameter
  5360.         DH = maximum number of bytes in buffer if array parameter
  5361.         DL = number of bytes copied if array
  5362.         BX destroyed
  5363.  08h    Conn Set Entry Field
  5364.     BH = connection parameter (see #2556)
  5365.     CX = connection handle
  5366.     DL/DX = value if BH is non-array parameter
  5367.     DH = offset in array if BH is array parameter
  5368.     DL = number of bytes to copy if BH is array
  5369.     DS:SI -> buffer if BH is array
  5370.     Return: AX = 0000h if successful
  5371.         DH = maximum number of bytes in buffer
  5372.         DL = number of bytes copied
  5373.         BX destroyed
  5374.  09h    Conn Reset Entry Field
  5375.     BH = connection parameter (see #2556)
  5376.     CX = connection handle
  5377.     Return: AX = 0000h if successful
  5378.         BX,DX destroyed
  5379.  0Ah    Conn Lookup Handle
  5380.     BL = lookup type (00h equal, 40h not equal)
  5381.     BH = connection parameter (see #2556)
  5382.     CX = connection handle, 0000h if first
  5383.     DL/DX = value if BH is non-array parameter
  5384.     DH = offset in array if BH is array parameter
  5385.     DL = number of bytes to copy if BH is array
  5386.     DS:SI (ES:DI???) -> buffer if BH is array
  5387.     Return: AX = 0000h if successful
  5388.         CX = handle matching given parameters
  5389.  0Dh    Conn Name Lookup
  5390.     CX = connection handle
  5391.     ES:DI -> 49-byte buffer for server name or 0000h:0000h
  5392.     Return: AX = 0000h if successful
  5393.         BX = length of server name
  5394.         ES:DI buffer filled if pointer not 0000h:0000h
  5395.  0Eh    Conn Name To Handle
  5396.     DS:SI -> uppercased server name
  5397.     CX = length of server name, 0000h if ASCIZ name
  5398.     Return: AX = error code or 0000h if successful
  5399.             CX = connection handle if successful
  5400.  0Fh    Conn Get Num Connections
  5401.     Return: AX = status (0000h if successful)
  5402.         DX = number of connections
  5403.         CX = segment of connection table
  5404.             first entry in table (See #2555)
  5405.  
  5406. Format of VLM connection statistics:
  5407. Offset    Size    Description    (Table 2554)
  5408.  00h    WORD    total length of statistics record (including this word)
  5409.  02h    WORD    number of connection handles allocated
  5410.  04h    WORD    average name length (configured in NET.CFG)
  5411.  06h    WORD    maximum number of tasks (configured in NET.CFG)
  5412.  08h    WORD    number of failed "allocate handle" calls
  5413.  0Ah    WORD    number of failed "add name" calls
  5414.  0Ch    WORD    number of failed task calls
  5415. Note:    some versions of the NetWare requester reportedly do not implement
  5416.       this correctly
  5417. SeeAlso: #2553
  5418.  
  5419. Format of NetWare VLM Connection Table [array]:
  5420. Offset    Size    Description    (Table 2555)
  5421.  00h    WORD    Protocol VLMid      0032(NDS) 0031(BIND)        Func 07 equiv.
  5422.                   0033(PNW) 0000(unused)       BH=01h
  5423.  02h    BYTE    (connection status)
  5424.         bit 6: connection locked               BH=16h
  5425.         bit 5: authenticated                   BH=03h
  5426.         bit 4: permanent                   BH=02h
  5427.         bit 2: broadcast msg waiting               BH=12h
  5428.  03h    BYTE    (connection capabilities)
  5429.         bit 5: Large Internet Packets               none
  5430.         bit 3: Packet Burst Reset               BH=07h
  5431.         bit 2: Max I/O                       BH=06h
  5432.         bit 1: SFT3 change                   BH=05h
  5433.         bit 0: Packet Burst Support               BH=04h
  5434.  04h    WORD    reference count                       BH=09h
  5435.  06h    WORD    soft resource count                   BH=15h
  5436.  08h    BYTE    NCP Order Number                   BH=0Eh
  5437.  09h    BYTE    Server security options                   BH=14h
  5438.         bit 0: CRC enabled
  5439.         bit 1: packet signing required
  5440.         bit 5: packet signing enabled
  5441.  0Ah    BYTE    OS Major Version                   BH=08h
  5442.  0Bh    BYTE    OS Minor Version                   BH=08h
  5443.  0Ch    WORD    Hops to Server                       BH=0Ah
  5444.  0Eh    WORD    Maximum Packet Size for this connection           BH=0Bh
  5445.  10h    WORD    LIP Parameters                       BH=13h
  5446.  12h    WORD    NCP Request Type                   BH=10h
  5447.  14h    BYTE    NCP Sequence                       BH=0Ch
  5448.  15h    WORD    Connection Number                   BH=0Dh
  5449.  17h    BYTE    ???                           none
  5450.  18h    WORD    Transport VLMid 21(IPXNCP) 22(TCPNCP)           BH=0Fh
  5451.  1Ah    BYTE    Node Address[4]                       BH=11h
  5452.  1Eh    BYTE    Network[6]                       BH=11h
  5453.  24h    BYTE    Socket[2]                       BH=11h
  5454.  26h    BYTE    Local Target[6]                       BH=11h
  5455.  2Ch    WORD    Round Trip Time                       BH=11h
  5456.  2Eh    WORD    ???                           none
  5457. SeeAlso: #2553
  5458.  
  5459. (Table 2556)
  5460. Values for NetWare Connection Manager CEI (Connection Entry Information):
  5461.  number    flags    description
  5462.  00h    FR    error
  5463.  01h    WL    VLM id of transport protocol (NDS/BIND/PNW)
  5464.         00h = wildcard
  5465.  02h    FR    permanent flag (01h if connection is permanent)
  5466.  03h    F    authenticated flag (01h if connection is authenticated)
  5467.  04h    F    packet burst supported
  5468.  05h    FR    SFT3 change status
  5469.  06h    FR    connection needs maximum I/O transmission
  5470.  07h    FR    packet burst reset needed
  5471.  08h    W    server version
  5472.  09h    W    reference count (tasks using connection, 00h = dynamic)
  5473.  0Ah    W    distance to server associated with connection
  5474.  0Bh    W    maximum packet size supported by transport protocol
  5475.  0Ch    B    NCP sequence number
  5476.  0Dh    W    connection number
  5477.  0Eh    B    NCP order number
  5478.  0Fh    WL    VLM id for transport protocol
  5479.         00h = wildcard, 21h = IPX, 22h = TCP
  5480.  10h    W    NCP request type
  5481.  11h    A    transport specific buffer
  5482.         12 byte server address
  5483.         6 byte    router address
  5484.         2 byte round trip time
  5485.  12h    FR    broadcast message waiting
  5486.  13h    W    large internet packets supported
  5487.  14h    B    security options
  5488.         bit 0: CRC enabled
  5489.         bit 1: packet signing enabled
  5490.         bit 5: packet signing active
  5491.  15h    W    soft resource count
  5492.  16h    FR    connection locked
  5493. Note:    flag meanings
  5494.         F=flag value
  5495.         B=byte value
  5496.         W=word value
  5497.         A=array
  5498.         R=resettable
  5499.         L=settable only before authentication
  5500.         others=read only
  5501. SeeAlso: #2553
  5502.  
  5503. (Table 2557)
  5504. Call TRAN.VLM (VLM ID 0020h) with:
  5505. Func    Description/Registers
  5506.  01h    TRAN Get Version
  5507.     BX = function
  5508.         0000h get version
  5509.         Return: AX = status (see #2546)
  5510.             BX = major version of VLM supported (0001h)
  5511.             CX = minor version of VLM supported (0000h)
  5512.  03h    TRAN Statistics
  5513.  06h    TRAN Request Reply (see INT 21/AH=F2h)
  5514.     AL = NCP request code (see #1783 at INT 21/AH=F2h)
  5515.     BH = error handler flag
  5516.         00h default error handler
  5517.         01h return network errors to caller
  5518.         02h handle network errors in requester
  5519.     BL = request list length (max 5 fragments) (see #2558)
  5520.     CX = connection handle
  5521.     DH = 00h (reserved)
  5522.     DL = reply list length (max 5 fragments) (see #2558)
  5523.     DS:SI -> address list (each element is DWORD address + WORD length)
  5524.     ES:DI -> address list
  5525.     Return: AX = error code, 0000h if successful (see #2546)
  5526.         BX,DX destroyed
  5527.         ES:DI buffer filled with reply packet fragments
  5528.  08h    TRAN Schedule/Cancel Event
  5529.     BX = subfunction
  5530.         0000h schedule event
  5531.         AX = number of timer ticks to delay before calling function
  5532.         ES:SI -> event control block (including valid call address)
  5533.         0001h cancel event
  5534.         ES:SI -> event control block (including call address)
  5535.     Return: AX = status (0000h = successful) (see #2546)
  5536.  09h    TRAN Get Max Phys Size
  5537.     BX = subfunction
  5538.         00h get maximum node size
  5539.         Return: AX = status (0000h = successful) (see #2546)
  5540.             BX = maximum supported physical packet size
  5541.             DX = size of protocol header
  5542.             SI = RequestReply socket number
  5543.         01h get maximum route size to specified server
  5544.         CX = connection handle for route to be checked
  5545.         Return: AX = status (0000h = successful) (see #2546)
  5546.             DX = maximum supported packet size for current route
  5547.  0Ah    TRAN Broadcast Mux
  5548.     BX = subfunction
  5549.         0001h get stored broadcast (Personal NetWare)
  5550.         ES:DI -> 60-byte buffer for counted ASCIZ message string
  5551.     Return: AX = status (0000h = successful) (see #2546)
  5552.  
  5553. Format of TRAN.VLM request/reply fragment descriptor (array):
  5554. Offset    Size    Description    (Table 2558)
  5555.  00h    DWORD    address of buffer
  5556.  04h    WORD    length of buffer
  5557.  
  5558. (Table 2559)
  5559. Call IPXNCP.VLM (VLM ID 0021h) with:
  5560. Func    Description/Registers
  5561.  01h    IPX Get Version
  5562.     BX = function
  5563.         0000h get version
  5564.         Return: AX = status (see #2546)
  5565.             BX = major version of VLM supported (0001h)
  5566.             CX = minor version of VLM supported (0000h)
  5567.  03h    IPX Statistics
  5568.     CX = length of buffer
  5569.     ES:DI -> buffer for statistics (see #2560)
  5570.     Return:    AX = status (see #2546)
  5571.  06h    IPXNCP Request Reply???
  5572.     functionally equivalent to Tran Request Reply???
  5573.  
  5574. Format of NetWare IPX statistics:
  5575. Offset    Size    Description    (Table 2560)
  5576.  00h    WORD    size of statistics, including this word
  5577.  02h    DWORD    number of TRAN Request Reply calls made
  5578.  06h    WORD    number of user aborts
  5579.  08h    WORD    number of user retries
  5580.  0Ah    WORD    IPX receive errors
  5581.  0Ch    WORD    IPX send errors
  5582.  0Eh    WORD    number of unrecognized responses
  5583.  10h    WORD    number of bad connection numbers in requests
  5584.  12h    WORD    number of bad sequence responses
  5585.  14h    WORD    receive buffer overflows
  5586.  16h    WORD    number of times route to attached server was lost
  5587.  18h    WORD    number of times server responded "busy"
  5588.  1Ah    WORD    number of unknown "NCPRepCompCode" values
  5589.  1Ch    WORD    number of bad connection numbers in responses
  5590.  1Eh    WORD    padding for NETX compatibility
  5591.  20h    WORD    padding for NETX compatibility
  5592.  22h    WORD    number of attach requests to server without route
  5593.  24h    WORD    number of times server responded to attach without slot
  5594.  26h    WORD    number of times a server went down during a request
  5595.  28h    DWORD    same-server optimizations
  5596.  2Ch    WORD    local route changes
  5597.  2Eh    WORD    IPX CRC errors
  5598.  30h    WORD    number of user fails
  5599.  32h    BYTE    flag: CRCs enabled
  5600.  33h    BYTE    flag: LIP enabled
  5601.  34h    BYTE    flag: configurable NET error handler
  5602. SeeAlso: #2559
  5603.  
  5604. (Table 2561)
  5605. Call NWP.VLM (VLM ID 0030h) with:
  5606. Func    Description/Registers
  5607.  01h    NWP Get Version
  5608.     BX = function
  5609.         0000h get version
  5610.         Return: AX = status (see #2546)
  5611.             BX = major version of VLM supported (0001h)
  5612.             CX = minor version of VLM supported (0000h)
  5613.  03h    NWP Statistics
  5614.     CX = size of buffer for statistics
  5615.     ES:DI -> buffer for statistics (see #2562)
  5616.     Return: AX = status (see #2546)
  5617.  04h    NWP Connect
  5618.     DL = resource count state (NDS connections only)
  5619.     CX = proposed connection handle (not yet connected to server)
  5620.     DS:SI -> 48-byte server name (NUL-terminated if less than 48 bytes)
  5621.     Return: AX = status (0000h = successful) (see #2546)
  5622.         CX = actual connection handle to use
  5623.     Note:    if the returned handle differs from the proposed handle, the
  5624.           proposed handle should be freed
  5625.  05h    NWP Disconnect
  5626.     DL = ???
  5627.         00h global disconnect -- clear all resources associated with conn.
  5628.         01h destroy connection -- send disconnect request to server
  5629.     CX = connected connection handle
  5630.     Return: AX = status (0000h = successful) (see #2546)
  5631.  06h    NWP Attach
  5632.     DL = resource count state (NDS connections only)
  5633.     CX = connection handle (allocated by not yet attached to server)
  5634.     DS:SI -> full network address for desired server
  5635.     Return: AX = status (0000h = successful) (see #2546)
  5636.  08h    NWP Login
  5637.     BX = object type
  5638.     CX = connection handle (must be connected) to be authenticated
  5639.     DS:SI -> ASCIZ user name (max 48 bytes)
  5640.     ES:DI -> ASCIZ user password (max 128 bytes)
  5641.     Return: AX = status (0000h = successful) (see #2546)
  5642.  09h    NWP Logout
  5643.     CX = connection handle
  5644.     Return: AX = status (0000h = successful) (see #2546)
  5645.  0Ah    NWP Get Bindery Object/Get Message Handler
  5646.     BX = subfunction
  5647.         0002h set workstation's broadcast message mode
  5648.         DL = message mode
  5649.             00h client hold client message set on, retrieve/display on
  5650.             01h client hold client message set off, retr/display on
  5651.             02h client hold client message set on, retrieve/dislay off
  5652.             03h client hold client message set off, retr/display off
  5653.             04h get current message mode
  5654.             05h set broadcast callback
  5655.             CX:SI -> callback handler
  5656.             06h get broadcast timeout
  5657.             07h set broadcast timeout
  5658.             CX = timeout in timer ticks (0000h = never)
  5659.         CX = connection handle, or 0000h to notify all servers
  5660.         0003h get object ID for object name
  5661.         AX = object type (big-endian)
  5662.         CX = connection handle
  5663.         DX = length of object name
  5664.         ES:DI -> uppercased ASCIZ object name
  5665.         Return: AX = status (see #2546)
  5666.             DX:BX = object ID
  5667.         0004h get object name for object ID
  5668.         DX:SI = object ID
  5669.         CX = connection handle for server which is to do the lookup
  5670.         ES:DI -> 48-byte buffer for object name
  5671.         Return: AX = status (see #2546)
  5672.         0005h retrieve broadcast message
  5673.  0Ch    NDS Fragment Request (passed to NDS.VLM's function 0Ch) (see #2563)
  5674.     AX = verb or request type
  5675.     CX = connection handle
  5676.     DS:SI -> request structure (DWORD data address followed by WORD size)
  5677.     ES:DI -> buffer for reply structure (same format as request)
  5678.     Return: AX = status (0000h = successful) (see #2546)
  5679.  0Eh    NWP Ordered Send To All
  5680.     AL = NCP request code
  5681.     AH = inverse request code (FFh if none) to back out from failures
  5682.     BX = number of fragments in request list
  5683.     DX = number of fragments in reply list buffer
  5684.     DS:SI -> request fragment list
  5685.     ES:DI -> reply fragment list
  5686.     Return: AX = status (see #2546)
  5687.         BX, CX, DX destroyed
  5688.     Note:    the available functions are described under INT 21/AX=F2xxh
  5689.  0Fh    NWP Preferred Handler
  5690.     BX = subfunction
  5691.         0000h get preferred connection name
  5692.         DX = VLM ID (NDS/BIND/PNW)
  5693.         ES:DI -> 49-byte buffer for connection name
  5694.         Return: ES:DI buffer filled
  5695.         0001h set preferred connection name
  5696.         DX = VLM ID (NDS/BIND/PNW)
  5697.         CX = length of connection name (may be 0000h, max 48)
  5698.         DS:SI -> name of preferred connection
  5699.         0002h get preferred connection ID
  5700.         DX = VLM ID (NDS/BIND/PNW)
  5701.         Return: AX = status (see #2546)
  5702.             CX = connection handle if successful
  5703.         0003h get server address
  5704.         CX = connection handle or 0000h
  5705.         DS:SI -> ASCIZ name to be resolved
  5706.         ES:DI -> 12-byte buffer for server address
  5707.  10h    NWP Security???
  5708.     BX = subfunction
  5709.         0001h get security flags (see also INT 21/AX=B301h)
  5710.         Return: BX:CX indicates signature level
  5711.                 = 0100h:0000h if signature level=0
  5712.                 = 0300h:0000h if signature level=1
  5713.                 = 0302h:0000h if signature level=2
  5714.                 = 0302h:0202h if signature level=3
  5715.         0002h create session keys (see also INT 21/AX=B302h)
  5716.         CX = server connection handle
  5717.         DS:SI -> 24-byte input buffer
  5718.         0004h set security flags (see also INT 21/AX=B304h)
  5719.         BL:CL = new flags
  5720.         0006h renegotiate security level (see also INT 21/AX=B306h)
  5721.         CX = server connection number (01h-08h)
  5722.  
  5723. Format of NWP.VLM statistics:
  5724. Offset    Size    Description    (Table 2562)
  5725.  00h    WORD    size of statistics record (including this byte)
  5726.  02h    BYTE    flag: Large Internet Packets enabled
  5727.  03h    BYTE    bit flags: enabled security features
  5728.  04h    BYTE    bit flags: preferred security features
  5729.  05h    BYTE    bit flags: required security features
  5730.  06h    BYTE    minimum level of required security
  5731. SeeAlso: #2561
  5732.  
  5733. (Table 2563)
  5734. Call NDS.VLM (VLM ID 0032h) with:
  5735. Func    Description/Registers
  5736.  01h    NDS Get Version
  5737.     BX = function
  5738.         0000h get version
  5739.         Return: AX = status (see #2546)
  5740.             BX = major version of VLM supported (0001h)
  5741.             CX = minor version of VLM supported (0000h)
  5742.  03h    NDS Statistics
  5743.  06h    NDS Attach
  5744.     CX = allocated connection handle
  5745.     DS:SI -> server address
  5746.  08h    NDS Fragment Requst
  5747.     Return: AX = 8836h (invalid parameter)
  5748.     Note:    this function was documented but does not work
  5749.  0Ch    NDS context
  5750.     BX = subfunction
  5751.         0000h get default name context
  5752.         CX = length of buffer for default context
  5753.         ES:DI -> buffer to receive name
  5754.         Return: ES:DI buffer filled
  5755.         0001h set default context
  5756.         CX = length of new default context name
  5757.         DS:SI -> context name
  5758.         0002h read from TDS
  5759.         CX = reply buffer length
  5760.         DX = 0110h ???
  5761.         SI = offset in TDS
  5762.         ES:DI -> reply buffer
  5763.         0003h write to TDS
  5764.         0005h "NWDSChangeResourceConnection/Lock Connection"
  5765.         CX = connection handle
  5766.         DL = subfunction (00h-09h)
  5767.             04h = NWDSChangeResourceOnConnection
  5768.             07h = NWDSChangeResourceOnConnection
  5769.             08h = NWDSLockConnection
  5770.         0006h NDS change connection state (internal)
  5771.         CX = connection handle
  5772.         AL = 00h or 01h
  5773.         0007h "NWDSSetMonitoredConnection"
  5774.         AX = subfunction
  5775.             0001h get monitored connection
  5776.             Return: CX = connection handle???
  5777.             0002h set monitored connection
  5778.             CX = connection handle???
  5779.         0008h send NDS request
  5780.         AX = NDS function
  5781.         CX = connection handle
  5782.         DS:SI -> request buffer descriptor (see #2564)
  5783.         ES:DI -> reply buffer descriptor (see #2564)
  5784.         000Ah set NDS CEI Info
  5785.         DL = buffer length
  5786.         DS:SI -> input buffer
  5787.  
  5788. Format of NetWare NDS request/reply buffer descriptor:
  5789. Offset    Size    Description    (Table 2564)
  5790.  00h    DWORD    -> buffer
  5791.  04h    WORD    length of buffer in bytes
  5792. SeeAlso: #2563
  5793.  
  5794. (Table 2565)
  5795. Call REDIR.VLM (VLM ID 0040h) with:
  5796. Func    Description/Registers
  5797.  01h    Redir Get Version
  5798.     BX = function
  5799.         0000h get version
  5800.         Return: AX = status (see #2546)
  5801.             BX = major version of VLM supported (0001h)
  5802.             CX = minor version of VLM supported (0000h)
  5803.  03h    Redir Statistics
  5804.     CX = length of buffer
  5805.     ES:DI -> buffer for statistics (see #2566)
  5806.     Return: AX = status (0000h if successful) (see #2546)
  5807.         buffer filled if successful
  5808.  04h    Redir Build SFT (see INT 21/AH=B4h"NetWare")
  5809.     CX = connection handle
  5810.     ES:DI -> SFT build request (see #2567)
  5811.     Return: AX = 0000h if successful
  5812.             BX = DOS file handle
  5813.  05h    Redir DOS To NW Handle
  5814.     BX = DOS file handle
  5815.     ES:DI -> 11-byte buffer for NetWare handle
  5816.  08h    Redir Specific
  5817.     BX = 0000h get item
  5818.         DS:SI -> ASCIZ string "LPTx" (x='1'-'9') or drive spec ("d:")
  5819.         ES:DI -> 512-byte reply buffer for
  5820.               "\\server\resource",00h,"path",00h
  5821.     Return: AX = status (0000h if successful) (see #2546)
  5822.  
  5823. Format of REDIR.VLM statistics:
  5824. Offset    Size    Description    (Table 2566)
  5825.  00h    WORD    size of statistics record (including this word)
  5826.  02h    WORD    number of network errors causing a critical error (see INT 24)
  5827.  04h    WORD    number of drives currently redirected
  5828. SeeAlso: #2565
  5829.  
  5830. Format of NetWare SFT build request:
  5831. Offset    Size    Description    (Table 2567)
  5832.  00h  6 BYTEs    NetWare handle
  5833.  06h    WORD    reserved for internal use
  5834.  08h 14 BYTEs    ASCIZ filename
  5835.  16h    BYTE    DOS file attributes
  5836.         bit 7: file is shareable
  5837.  17h    BYTE    reserved
  5838.  18h    LONG    file size
  5839.  1Ch    WORD    creation date
  5840.  1Eh    WORD    last access date or 0000h
  5841.  20h    WORD    last update date or 0000h
  5842.  22h    WORD    last update time or 0000h
  5843.  
  5844. (Table 2568)
  5845. Call File I/O FIO.VLM (VLM ID 0041h) with:
  5846. Func    Description/Registers
  5847.  01h    FIO Get Version
  5848.     BX = function
  5849.         0000h get version
  5850.         Return: AX = status (see #2546)
  5851.             BX = major version of VLM supported (0001h)
  5852.             CX = minor version of VLM supported (0000h)
  5853.  03h    FIO Statistics
  5854.     CX = length of buffer
  5855.     ES:DI -> buffer for statistics (see #2569)
  5856.     Return: AX = status (0000h if successful)
  5857.         buffer filled if successful
  5858.  04h    FIO Remote Copy
  5859.  
  5860. Format of NetWare FIO statistics:
  5861. Offset    Size    Description    (Table 2569)
  5862.  00h    WORD    length of statistics record (including this word)
  5863.  02h    WORD    number of read requests
  5864.  04h    WORD    number of write requests
  5865.  06h    WORD    number of cache read hits
  5866.  08h    WORD    number of cache write hits
  5867.  0Ah    WORD    number of cacheable files with free blocks
  5868.  0Ch    WORD    number of cacheable files without free blocks
  5869.  0Eh    WORD    number of standard read requests
  5870.  10h    WORD    number of standard write requests
  5871.  12h    WORD    number of burst read requests
  5872.  14h    WORD    number of burst write requests
  5873.  16h    BYTE    flag: cache writes enabled
  5874.  17h    BYTE    flag: true commits enabled
  5875.  18h    WORD    number of cache blocks
  5876.  1Ah    WORD    size of a cache buffer
  5877.  1Ch    WORD    number of ECBs for packet bursts (0000h if bursts disabled)
  5878. SeeAlso: #2568
  5879.  
  5880. (Table 2570)
  5881. Call PRINT.VLM (VLM ID 0042h) with:
  5882. Func    Description/Registers
  5883.  01h    Print Get Version
  5884.     BX = function
  5885.         0000h get version
  5886.         Return: AX = status (see #2546)
  5887.             BX = major version of VLM supported (0001h)
  5888.             CX = minor version of VLM supported (0000h)
  5889.  03h    Print Statistics
  5890.     CX = length of buffer
  5891.     ES:DI -> buffer for statistics (see #2571)
  5892.     Return: AX = status (0000h if successful) (see #2546)
  5893.         buffer filled if successful
  5894.  04h    Print Get/Set Data
  5895.     BX = subfunction
  5896.         00h set printer control flags (see #2572)
  5897.         01h get printer control flags
  5898.         02h set extended printer control flags (see #2573)
  5899.         03h get extended printer control flags
  5900.     AX = offset within Print structures at which to start read/write
  5901.     CX = number of bytes to transfer
  5902.     DX = printing device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5903.     DS:SI -> buffer containing values for flags (subfunctions 00h/02h)
  5904.     ES:DI -> buffer for flags (subfunctions 01h/03h
  5905.     Return: AX = status (see #2546)
  5906.         ---if successful---
  5907.         CX = number of bytes returned (subfunctions 01h/03h)
  5908.         DX = maximum supported size for function/type of data
  5909.  05h    Print Open Capture File
  5910.  07h    Print Get Num Of Printers
  5911.     BX = subfunction
  5912.         0000h get number of physical printers
  5913.         nonzero: get configured printer (from NET.CFG)
  5914.     Return: AX = status (see #2546)
  5915.         ---if successful---
  5916.         BX = number of physical/configured printers
  5917.  08h    Print Redirection
  5918.     BX = subfunction
  5919.         0000h redirect device to queue
  5920.         AX = length of queue name, 0000h to use queue ID
  5921.         CX = connection handle
  5922.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5923.         DS:SI -> uppercased ASCIZ queue name
  5924.         ES:DI -> DWORD queue ID, 00000000h to use queue name
  5925.         0001h test whether device is redirected
  5926.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5927.         0002h cancel redirection
  5928.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5929.         0003h redirect device to file
  5930.         AX = 0000h or 4E57h ('NW')
  5931.         CX = connection handle
  5932.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5933.         ES:DI -> ASCIZ path of file
  5934.         0004h get extended redirection information (see #2572)
  5935.         DX = printer/device number (00h=LPT1/PRN, 01h=LPT2, etc.)
  5936.         ES:DI -> buffer for server/queue name
  5937.         Return: ES:DI buffer filled
  5938.     Return: AX = 0000h if successful
  5939.  09h    Print Flush And Close Job
  5940.     BX = subfunction
  5941.         0000h unconditional close
  5942.         nonzero: conditional close -- close only if concatenate flag is
  5943.           clear
  5944.     DX = index of printing device (00h=LPT1/PRN, 01h=LPT2, etc.)
  5945.     Return: AX = status (see #2546)
  5946.  0Ch    Print Get/Set Banner Name
  5947.     BL = subfunction
  5948.         00h set banner name
  5949.         DS:SI -> ASCIZ banner name (12 bytes, including NUL)
  5950.         01h get banner name
  5951.         ES:DI -> 12-byte buffer for banner name
  5952.     Return: AX = status (see #2546)
  5953.  
  5954. Format of PRINT.VLM statistics:
  5955. Offset    Size    Description    (Table 2571)
  5956.  00h    WOFD    size of statistics buffer (including this word)
  5957.  02h    DWORD    -> old INT 17 handler
  5958.  06h    WORD    number of physical printers reported by BIOS
  5959. SeeAlso: #2570
  5960.  
  5961. Format of PRINT.VLM standard print control information:
  5962. Offset    Size    Description    (Table 2572)
  5963.  00h    BYTE    PFStatus (reserved, 00h)
  5964.  01h    BYTE    print flags (default 80h)
  5965.         bit 2: release job for printing if capture interrupted
  5966.         bit 3: suppress form feed
  5967.         bit 4: notify
  5968.         bit 6: text file
  5969.         bit 7: print banner
  5970.  02h    BYTE    tab size (01h-12h, default 08h)
  5971.  03h    BYTE    number of copies (default 01h)
  5972.  04h    BYTE    ??? (may be number of copies instead of offset 03h)
  5973.  05h    BYTE    form type to be mounted in printer (default 00h)
  5974.  06h    BYTE    reserved (00h)
  5975.  07h 14 BYTEs    banner
  5976.  15h    BYTE    capture printer (LPT) number
  5977.  16h    WORD    capture timeout in seconds
  5978.  18h    BYTE    job concatenation flag (00h or 01h, default 00h)
  5979.  19h    BYTE    maximum lines per page (default 66)
  5980.  1Ah    BYTE    ??? (may be maximum lines instead of offset 19h)
  5981.  1Bh    BYTE    maximum characters per line (default 132)
  5982.  1Ch    BYTE    ??? (may be maximum characters instead of offset 1Ch)
  5983.  1Dh 13 BYTEs    name of form to be mounted in printer
  5984.  2Ah    BYTE    flag: capture active (00h or FFh, default 00h)
  5985.  2Bh    BYTE    flag: capturing to file (00h or 01h, default 00h)
  5986.  2Ch    BYTE    flag: timeout field is being decremented (default 00h)
  5987.  2Dh    DWORD    -> printer setup string
  5988.  31h    DWORD    -> printer reset string
  5989.  35h    BYTE    reserved (01h)
  5990. ---remainder is read-only---
  5991.  36h    BYTE    flag: job has started printing (00h or FFh, default 00h)
  5992.  37h    BYTE    flag: job placed in queue (00h or FFh, default 00h)
  5993.  38h    BYTE    flag: PJobValid (00h or FFh, default 00h)
  5994.         FFh if associated capture file is open for capturing data
  5995.  39h    DWORD    print-queue ID
  5996.  3Dh    WORD    print-job number (default 00h) (1-999)
  5997.  3Fh    BYTE    number of chars in INT 17h print cache buffer (default 00h)
  5998.  40h    BYTE    ???
  5999.  41h    WORD    high word of print-job number (default 00h)
  6000. SeeAlso: #2570,#2573
  6001.  
  6002. Format of PRINT.VLM extended print control information:
  6003. Offset    Size    Description    (Table 2573)
  6004.  00h    DWORD    NDS printer object ID or directory entry number (when capturing
  6005.           to a file)
  6006.  04h    BYTE    connection handle for server
  6007.  06h 48 BYTEs    ASCIZ print queue name on server
  6008.  36h    DWORD    ID of target server, or FFFFFFFFh if any server may be used
  6009.  3Ah  6 BYTEs    target print time, FFFFFFFFFFFFh for immediate printing
  6010.  40h    BYTE    status flags
  6011.  41h    BYTE    ???
  6012.  42h 13 BYTEs    client's banner name (overrides global banner if set)
  6013.  4Fh 13 BYTEs    job description
  6014.  5Ch  4 BYTEs    reserved (0)
  6015. SeeAlso: #2570,#2572
  6016.  
  6017. (Table 2574)
  6018. Call GENERAL.VLM (VLM ID 0043h) with:
  6019. Func    Description/Registers
  6020.  01h    Gen Get Version
  6021.     BX = function
  6022.         0000h get version
  6023.         Return: AX = status (see #2546)
  6024.             BX = major version of VLM supported (0001h)
  6025.             CX = minor version of VLM supported (0000h)
  6026.  03h    Gen Statistics
  6027.     CX = length of statistics buffer
  6028.     ES:DI -> buffer for statistics (see #2575)
  6029.     Return: AX = status (see #2546)
  6030.  04h    Gen Get/Set Primary
  6031.     BX = subfunction
  6032.         0001h get primary connection
  6033.         CX = primary connection handle to be retrieved
  6034.         Return: AX = status (see #2546)
  6035.             CX = primary connection handle
  6036.         0002h set primary connection
  6037.         CX = primary connection handle to be stored
  6038.         Return: AX = status (see #2546)
  6039.  06h    Gen Specific
  6040.     BX = subfunction
  6041.         0000h get command processor and master environment addresses
  6042.         Return: DX = segment of master environment
  6043.             ES:DI -> command processor's private COMSPEC= copy
  6044.         0001h get default or primary connection
  6045.         Return: AX = status (0000h successful)
  6046.             CX = connection handle if successful
  6047.         0002h last queue information
  6048.         AL = operation
  6049.             00h zap
  6050.             01h set
  6051.             02h get
  6052.         DI:DX = queue file handle
  6053.         CX = connection handle
  6054.         Return: AX = status (0000h successful)
  6055.             DI:DX = queue file handle
  6056.             CX = connection handle or 0000h if queue info invalid
  6057.         0003h get/set machine name(s)
  6058.         AX = name type
  6059.             00h get short machine name
  6060.             02h get long machine name
  6061.             04h set short machine name
  6062.             06h set long machine name
  6063.             08h get DOS name
  6064.             0Ah set DOS name
  6065.         ES:SI -> ASCIZ name if setting
  6066.         Return: AX = status (0000h if successful)
  6067.             ES:SI -> ASCIZ name if getting
  6068.         0004h set per-task EXEC search mode
  6069.         Return: AX = status (0000h if successful)
  6070.  09h    Gen Return Drive Info
  6071.     BX = subfunction
  6072.         0000h get first available drive
  6073.         Return: AX = status (see #2546)
  6074.             BX = drive letter of first drive
  6075.         0001h get Lastdrive
  6076.         Return: AX = status (see #2546)
  6077.             CH = number lastdrive 1=A: - 1Ah=Z:
  6078.  
  6079. Format of NetWare GENERAL.VLM statistics:
  6080. Offset    Size    Description    (Table 2575)
  6081.  00h    WORD    size of statistics record, including this word
  6082.  02h    DWORD    previous INT 21 vector
  6083. SeeAlso: #2574
  6084.  
  6085. (Table 2576)
  6086. Call NETX.VLM (VLM ID 0050h) with:
  6087. Func    Description/Registers
  6088.  01h    NetX Get Version
  6089.     BX = function
  6090.         0000h get version
  6091.         Return: AX = status (see #2546)
  6092.             BX = major version of VLM supported (0001h)
  6093.             CX = minor version of VLM supported (0000h)
  6094.  03h    NetX Statistics
  6095.     CX = length of statistics buffer
  6096.     ES:DI -> buffer for statistics (see #2577)
  6097.     Return: AX = status (see #2546)
  6098.  
  6099. Format of NETX.VLM statistics:
  6100. Offset    Size    Description    (Table 2577)
  6101.  00h    WORD    buffer size, including this word
  6102.  02h    DWORD    previous INT 21 handler
  6103. SeeAlso: #2576
  6104.  
  6105. (Table 2578)
  6106. Call SECURITY.VLM (VLM ID 0061h) with:
  6107. Func    Description/Registers
  6108.  01h    Security Get Version
  6109.     BX = function
  6110.         0000h get version
  6111.         Return: AX = status (see #2546)
  6112.             BX = major version of VLM supported (0001h)
  6113.             CX = minor version of VLM supported (0000h)
  6114.  03h    Security Statistics
  6115.  04h    ???
  6116.     AL = subfunction
  6117.         01h compute session key
  6118.         DS:SI -> 24-byte input buffer
  6119.         ES:DI -> 8-byte output buffer
  6120. --------N-2F7A20BX0001-----------------------
  6121. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM CallA ADDRESS
  6122.     AX = 7A20h
  6123.     BX = 0001h
  6124. Return: AX = 0000h if request was handled
  6125.         ES:BX -> CallA entry point (see #2579)
  6126. SeeAlso: AX=7A20h/BX=0000h
  6127.  
  6128. (Table 2579)
  6129. Call VLM CallA entry point with:
  6130.     AX = function
  6131.         0000h submit
  6132.         0001h cancel (not implemented)
  6133.     ES:DI -> Overlay Asynchronous Control Block structure (see #2580)
  6134. Return: DI, DS, ES preserved; all other registers may be destroyed
  6135.     interrupts disabled
  6136. Desc:    asychronously call the specified VLM and then return to caller, which
  6137.       might be another VLM
  6138.  
  6139. Format of Overlay Asynchronous Control Block (OACB):
  6140. Offset    Size    Description    (Table 2580)
  6141.  00h    DWORD    link to next OACB, 0000h:0000h if last (filled by VLM.EXE)
  6142.  04h    DWORD    callback address or 0000h:0000h
  6143.  08h    BYTE    InUse flag (00h if complete) (set by VLM.EXE)
  6144.  09h    BYTE    flag, reserved for VLM use
  6145.  0Ah    WORD    destination VLM
  6146.  0Ch    WORD    destination function
  6147.  0Eh    WORD    temporary storage for VLM.EXE
  6148.  10h  6 BYTEs    reserved
  6149.  16h  6 DWORDs    EAX,EBX,ECX,EDX,ESI,EDI
  6150.  2Eh  4 WORDs    DS,ES,FS,GS (FS and GS not used)
  6151. --------N-2F7A20BX0002-----------------------
  6152. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTIPLEX ADDRESS
  6153.     AX = 7A20h
  6154.     BX = 0002h
  6155. Return: AX = 0000h
  6156.     ES:BX -> VLM multiplex entry point (see #2581)
  6157. Note:    for v1.10, this function is only available while VLM.EXE is loading
  6158.       the .VLM modules, because ES is destroyed on return
  6159. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0001h,AX=7A20h/BX=0003h
  6160.  
  6161. (Table 2581)
  6162. Call DOS Requester entry point with:
  6163.     BX = function???
  6164.         0000h
  6165.         DX = ???
  6166.         DI = ???
  6167.         BP = ???
  6168.         0002h
  6169.         CX = ???
  6170.         0003h
  6171.         DX = ???
  6172.         BP = ???
  6173.         0006h
  6174.         AH = subfunction???
  6175.         AL = ???
  6176.         STACK: variable (0, 4, 10, 14 bytes seen)
  6177. --------N-2F7A20BX0003-----------------------
  6178. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM PARSE API ADDRESS
  6179.     AX = 7A20h
  6180.     BX = 0003h
  6181. Return: AX = 0000h if request was handled
  6182.         ES:BX -> VLM parse API entry point
  6183. --------N-2F7A20BX0004-----------------------
  6184. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTICAST CALLOUT
  6185.     AX = 7A20h
  6186.     BX = 0004h
  6187. Return: AX = 0000h if request was handled
  6188.         ES:BX -> VLM multicast data (see #2582)
  6189. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0002h,AX=7A20h/BX=0005h
  6190.  
  6191. Format of DOS Requester data:
  6192. Offset    Size    Description    (Table 2582)
  6193.  00h    DWORD    pointer to ??? (code)
  6194.  04h  4 BYTEs    ???
  6195.  08h    DWORD    pointer to ??? (code) (see #2583)
  6196.     ???
  6197.  
  6198. (Table 2583)
  6199. Call offset 08h function with:
  6200.     AL = function (00h-07h)
  6201.     ???
  6202. Return: ???
  6203. --------N-2F7A20BX0005-----------------------
  6204. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM INT 24 ADDRESS
  6205.     AX = 7A20h
  6206.     BX = 0005h
  6207. Return: AX = 0000h if request was handled
  6208.         ES:BX -> VLM INT 24 handler
  6209. SeeAlso: AX=7A20h/BX=0000h,AX=7A20h/BX=0002h,AX=7A20h/BX=0004h
  6210. --------N-2F7A20BX0006-----------------------
  6211. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6212.     AX = 7A20h
  6213.     BX = 0006h
  6214. Return: AX = 0000h if request was handled
  6215.         ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6216. --------N-2F7A20BX0007-----------------------
  6217. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6218.     AX = 7A20h
  6219.     BX = 0007h
  6220. Return: AX = 0000h
  6221.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6222. --------N-2F7A20BX0008-----------------------
  6223. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6224.     AX = 7A20h
  6225.     BX = 0008h
  6226. Return: AX = 0000h
  6227.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6228. --------N-2F7A20BX0080-----------------------
  6229. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6230.     AX = 7A20h
  6231.     BX = 0080h
  6232. Return: AX = 0000h
  6233.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6234. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03 and v1.10
  6235. --------N-2F7A20BX0081-----------------------
  6236. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6237.     AX = 7A20h
  6238.     BX = 0081h
  6239. Return: AX = 0000h
  6240.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6241. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03 and v1.10
  6242. --------N-2F7A20BX0082-----------------------
  6243. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  6244.     AX = 7A20h
  6245.     BX = 0082h
  6246. Return: AX = 0000h
  6247.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  6248. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03 and v1.10
  6249. --------N-2F7A21-----------------------------
  6250. INT 2F C - Novell NetWare - DOS Requester - BROADCAST CALLBACK
  6251.     AX = 7A21h
  6252.     CX = server connection (FFFFh if message from Personal NetWare user)
  6253.     interrupts disabled
  6254. Return: CX = 0000h if broadcast handled
  6255.     interrupts disabled
  6256. Note:    this function is only linked into INT 2F when INT 21/AH=DEh/DL=05h
  6257.       has been issued
  6258. SeeAlso: AX=7A22h,AX=7A85h,INT 21/AH=DEh
  6259. --------N-2F7A22-----------------------------
  6260. INT 2F C - Novell NetWare - DOS Requester - BROADCAST/SFT3 INFORM
  6261.     AX = 7A22h
  6262.     DL = function
  6263.         21h ('!') broadcast waiting for workstation
  6264.         40h ('@') SFT3 server-change inform
  6265.     BX = transport type
  6266.         0021h IPX
  6267.         0022h TCP
  6268.     ES:SI -> transport-specific data block
  6269.         (ECB for IPX, undefined for TCP)
  6270.     interrupts disabled
  6271. Return: AX = 0000h if event handled, unchanged if not
  6272.     interrupts disabled
  6273. Note:    this callback is made from within a hardware interrupt handler; a
  6274.       separate call to AX=7A21h is made once the system is in a safe
  6275.       state for receiving the message
  6276. SeeAlso: AX=7A21h
  6277. --------N-2F7A2F-----------------------------
  6278. INT 2F - Novell NetWare - IPXODI v2.12 - GET GNMA SUPPORT
  6279.     AX = 7A2Fh
  6280. Return: AX = 0000h if supported and active
  6281.         BX = support level (0001h)
  6282.         ES:DI -> GNMA entry point (see #2584)
  6283. Program: GNMA is the Generic NetWare Management Agent
  6284. Note:    IPXODI v2.12 is distributed as part of the Personal NetWare system
  6285.       bundled with Novell DOS 7
  6286. SeeAlso: INT 7A/BX=001Fh
  6287.  
  6288. (Table 2584)
  6289. Call IPXODI GNMA entry point with:
  6290.     BX = function
  6291.         0000h Register Responder
  6292.         ES:SI -> responder structure (see #2585)
  6293.         Return: CF clear if successful
  6294.             CF set on error
  6295.             AX = status
  6296.                 FFFFh if specified responder is already registered
  6297.             interrupts enabled
  6298.             all other registers except DS, CS:IP, SS:SP destroyed
  6299.         Note:    the responder structure must not be deallocated until
  6300.               the responder is deregistered
  6301.         0001h Deregister Responder
  6302.         AX = type of responder to deregister
  6303.         Return: AX = status
  6304.                 FFFFh if specified responder not registered
  6305.             interrupts enabled
  6306.             ES:SI buffer from original registration may now be
  6307.                   freed
  6308.             all other registers except DS, CS:IP, SS:SP destroyed
  6309.         0002h Get Responders
  6310.         Return: ES:SI -> head of responder structure list (read-only)
  6311.             interrupts enabled
  6312.             all other registers except DS, CS:IP, SS:SP destroyed
  6313.         Note:    the returned list may change as tasks are swapped in
  6314.               and out
  6315.         0003h Send Acknowledgement
  6316.         AL = completion code
  6317.             00h successful
  6318.             01h-FCh responder-specific
  6319.             FDh invalid function
  6320.         CX = length of return data (0000h if none)
  6321.         DX:SI -> return data
  6322.         Return: interrupts enabled
  6323.             all other registers except DS, CS:IP, SS:SP destroyed
  6324.  
  6325. Format of NetWare GNMA responder structure:
  6326. Offset    Size    Description    (Table 2585)
  6327.  00h    DWORD    -> next responder structure (used by GNMA)
  6328.  04h    DWORD    -> responder's request handler (called by GNMA) (see #2586)
  6329.  08h    WORD    responder ID
  6330.  0Ah    WORD    number of functions supported by responder
  6331.  0Ch    DWORD    reserved for use by GNMA
  6332. SeeAlso: #2584
  6333.  
  6334. (Table 2586)
  6335. Values GNMA responder's request handler is called with:
  6336.     AL = function
  6337.         00h responder request
  6338.         CX = length of request data (not including header) (see #2587)
  6339.         DS:DI -> request data (see #2587)
  6340.         DS:BX -> 528-byte reply buffer
  6341.         ES:SI -> responder structure (see #2585) from registration
  6342.         DF clear
  6343.         interrupts disabled
  6344.         Return: AH = acknowledement status
  6345.                 00h acknowledgment being returned synchronously
  6346.                 nonzero: acknowledgment will be sent via GNMA
  6347.                   function 0003h (see #2584)
  6348.                 CX = length of acknowledement data
  6349.                 DX:BX -> acknowledgment (may use provided
  6350.                       buffer or another buffer)
  6351.             AL = completion code
  6352.                 00h successful
  6353.                 01h-FCh responder-specific
  6354.                 FDh invalid request
  6355.             DF clear
  6356.             interrupts disabled
  6357.             other registers may be destroyed
  6358.         01h responder acknowledgement complete
  6359.         ES:SI -> responder structure (see #2585) from registration
  6360.         DF clear
  6361.         interrupts disabled
  6362.         Return:    DF clear
  6363.             interrupts disabled
  6364.             all registers (except SS:SP) may be destroyed
  6365.         Note:    this function is called if function 00h returned a
  6366.               responder-provided data buffer; once this function
  6367.               is called, the responder may deallocate the buffer
  6368.         02h responder reset
  6369.         ES:SI -> responder structure (see #2585) from registration
  6370.         DF clear
  6371.         interrupts disabled
  6372.         Return:    DF clear
  6373.             interrupts disabled
  6374.             all registers (except SS:SP) may be destroyed
  6375.         Note:    called whenever a network managment application
  6376.               terminates
  6377. Note:    the responder handler should switch to a local stack if it enables
  6378.       interrupts or uses more than a few words of stack space
  6379. SeeAlso: #2585
  6380.  
  6381. Format of GNMA responder request data:
  6382. Offset    Size    Description    (Table 2587)
  6383.  00h    WORD    responder's assigned ID
  6384.  02h    WORD    function number (defined by responder)
  6385.  04h  N BYTEs    data for request (max 528 bytes; actual amount is determined
  6386.           by CX)
  6387. SeeAlso: #2586
  6388. --------N-2F7A2FBX0EDC-----------------------
  6389. INT 2F U - Personal NetWare - HRMIB - UNINSTALL
  6390.     AX = 7A2Fh
  6391.     BX = 0EDCh ('EDC' = Novell European Development Center)
  6392. Return: ???
  6393. SeeAlso: AX=7AA0h
  6394. --------N-2F7A40-----------------------------
  6395. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  6396.     AX = 7A40h
  6397. Return: AX = 7AFFh if installed
  6398.         0000h:BX = address of interrupt vector for MLID ISR
  6399.         CX = version (CH=major, CL=minor)
  6400.         DX = 0000h
  6401.         ES:DI -> entry point for TCP/IP stack (see #2589)
  6402. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  6403.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  6404.       but it only returns AL and ES:DI, and does not support AX=7A41h
  6405. SeeAlso: AX=7A41h,INT 15/AX=DE2Eh,INT 60"Excelan"
  6406.  
  6407.  
  6408. (Table 2588)
  6409. Values for NetWare TCP/IP function code:
  6410.  01h    "accept" accept a network connection request
  6411.  02h    "bind" associate an address with a socket
  6412.  03h    close socket
  6413.     Call:    socket number field set
  6414.  04h    "connect" connect to a remote host
  6415.  05h    "getmyipaddr" get IP address
  6416.     Call:    socket number field in sockaddr set to 0000h
  6417.  06h    "getmymacaddr" get hardware address
  6418.  07h    "getpeername"
  6419.  08h    "getsockname" get socket name
  6420.  09h    "getsockopt" get socket options
  6421.  0Ah    "getsubnetmask" get subnet mask
  6422.  0Bh    "ioctl"
  6423.  0Ch    "listen" wait for connection request on socket
  6424.  0Dh    "select"
  6425.     Return: socket bitmap updated (1=active)
  6426.  0Eh    "setmyipaddr" (obsolete) set IP address
  6427.  0Fh    "setsockopt" set socket options
  6428.  10h    "shutdown"
  6429.  11h    "socket" open socket
  6430.     Call:    socket number field set to 0000h
  6431.     Return: socket number set
  6432.  12h    "recv" get data from peer
  6433.  13h    "recvfrom" get data from specified remote host
  6434.     Call:    socket number set
  6435.         packet length and buffer descriptors set
  6436.     Return:    packet length and receive buffers updated
  6437.         sockaddr field set to source port number + IP address
  6438.  14h    "send" write data to socket
  6439.  15h    "sendto" write data to specified recipient
  6440.     Call:    socket number set
  6441.         flags at offset 18h = 0000h
  6442.         packet length and buffer descriptors set
  6443. ---v4.02+ ---
  6444.  16h    get BOOTP data
  6445.     Return: BOOTP data stored in parameter block (see #2592)
  6446.  17h    "getsnmpinfo"
  6447.  18h    "getpathinfo" get/set configuration???
  6448. ---v4.??? ---
  6449.  19h    "getifn"    get interface number
  6450.  1Ah    "setipinfo"    set IP information
  6451.  1Bh    "getipinfo"    get IP information
  6452.  1Ch    "setdnsinfo"    set DNS information
  6453.  1Dh    "getdnsinfo"    get DNS information
  6454.  1Eh    "setroutes"    set/modify route entry(ies)
  6455.  1Fh    "getroutes"    get route entry(ies)
  6456.  20h    "removeroutes"    remove route entry(ies)
  6457.  21h    "setarpe"    set/modify ARP entry(ies)
  6458.  22h    "getarpe"    get ARP entry(ies)
  6459.  23h    "removearpe"    remove ARP entry(ies)
  6460. Notes:    these functions are based on the Unix socket interface
  6461.     OR function number with 80h to call ESR
  6462. SeeAlso: #2590
  6463.  
  6464. (Table 2589)
  6465. Call NetWare TCP/IP entry point with:
  6466.     ES:SI -> parameter block (see #2590)
  6467. Return: ES:SI parameter block updated
  6468.     DX may be destroyed
  6469.  
  6470. Format of NetWare TCP/IP Request Control Block (RCB):
  6471. Offset    Size    Description    (Table 2590)
  6472.  00h    DWORD    -> next RCB
  6473.  04h    DWORD    -> previous RCB
  6474.  08h    DWORD    -> FAR post routine called if bit 7 of function code set
  6475.  0Ch    BYTE    flags (internal use)
  6476.         bit 0: request in progress
  6477.         bit 1: posted
  6478.         bit 2: Windows
  6479.         bit 3: "PROTBUF"
  6480.         bit 4: "ABORTRCB" for Ctrl-Break handling
  6481.         bit 5: call INT 21/AX=0B00h while blocking
  6482.  0Dh  7 BYTEs    ???
  6483.  14h    BYTE    (ret) temporary result code
  6484.  15h    BYTE    (call) function code (bit 7 set if non-blocking) (see #2588)
  6485.  16h    BYTE    socket number
  6486.  17h    BYTE    (ret) result or error code (see #2591)
  6487. ---accept/bind/connect/getmyipaddr/getpeername/getsockname commands---
  6488.  18h        sockaddr structure (WORD port + DWORD IP address)
  6489. ---close comand---
  6490.  no additional fields
  6491. ---getmymacaddr command---
  6492.  18h  6 BYTEs    low-level hardware network address
  6493. ---BOOTP command---
  6494.  18h 64 BYTEs    BOOTP VSA data (see #2592)
  6495. ---getpathinfo command
  6496.  18h  8 BYTEs    key
  6497.         "TCP_CFG" used by PING.EXE
  6498.  20h 128 BYTEs    path
  6499.  A0h    WORD    length of path in previous field
  6500. ---getsockopt/setsockopt commands---
  6501.  18h    WORD    option name
  6502.         0004h SO_REUSEADDR
  6503.         0008h SO_KEEPALIVE
  6504.         0080h SO_LINGER
  6505.  1Ah    WORD    option value
  6506.  1Ch    WORD    "linger"
  6507. ---getsubnetmask command---
  6508.  18h    DWORD    subnet mask
  6509. ---ioctl command---
  6510.  18h    DWORD    argument value
  6511.  1Ch    WORD    ioctl number
  6512. ---listen command---
  6513.  18h    WORD    maximum allowable connection backlog
  6514. ---select command---
  6515.  18h    WORD    number of sockets
  6516.  1Ah        fd_set readfds (bitmap of sockets)
  6517.         fd_set writefds
  6518.         fd_set expectionfds
  6519.     DWORD    timeout in clock ticks
  6520. ---shutdown command---
  6521.  18h    WORD    shutdown type
  6522. ---socket command---
  6523.  18h    WORD    protocol (1 = ICMP, 6 = TCP, 17 = UDP)
  6524. ---I/O commands (recv,recvfrom,send,sendto)---
  6525.  18h    WORD    flags
  6526.  1Ah  6 BYTEs    sockaddr from/to
  6527.         WORD    port number
  6528.         DWORD    IP address
  6529.  20h    WORD    length of packet sent/received
  6530.  22h    WORD    number of pointer/length pairs following (max 8)
  6531.  24h 6N BYTEs    buffer descriptors, each
  6532.         Offset    Size    Description
  6533.          00h    DWORD    pointer to buffer
  6534.          04h    WORD    length of buffer
  6535. ---getsnmpinfo command---
  6536.  18h    DWORD    (ret) -> ??? data in TCPIP code segment
  6537. --getifn command---
  6538.  18h    WORD    interface number
  6539.  1Ah    WORD    MLID instance number
  6540.  1Ch 128 BYTEs    MLID name
  6541. ---getipinfo/setipinfo commands---
  6542.  18h    WORD    interface number (00h = default)
  6543.  1Ah    DWORD    IP address
  6544.  1Eh    DWORD    IP netmask
  6545.  22h  3 DWORDs    router addresses (00000000h = unused entry)
  6546. ---getdnsinfo/setdnsinfo commands---
  6547.  18h    WORD    interface number (00h = default)
  6548.  1Ah  3 DWORDs    name server IP addresses (00000000h = unused entry)
  6549.  26h 128 BYTEs    domain name
  6550. ---getroutes/setroutes/removeroutes commands---
  6551.  18h    WORD    number of route entries to follow (max 5)
  6552.  1Ah 10N BYTEs    route entries
  6553.         DWORD    destination host/net IP address
  6554.         DWORD    IP address of first router
  6555.         WORD    route type
  6556. ---getarpe/setarpe/removearpe commands---
  6557.  18h    WORD    number of ARP entries to follow (max 16)
  6558.  1Ah 10N BYTEs    ARP entries
  6559.         DWORD    destination IP address
  6560.         6 BYTEs    destination hardware address
  6561. ---other commands---
  6562.  18h  4 WORDs    parameter words 0 to 3 (see #2588 for usage)
  6563.  
  6564. (Table 2591)
  6565. Values for NetWare TCP/IP status:
  6566.  00h    successful
  6567.  04h    would block
  6568.  09h    invalid socket
  6569.  23h    would block
  6570.  24h    operation in progress
  6571.  25h    already in progress
  6572.  26h    not a socket
  6573.  27h    destination address required
  6574.  28h    message too long
  6575.  29h    wrong protocol type for socket
  6576.  2Ah    protocol not available
  6577.  2Bh    protocol not supported
  6578.  2Ch    socket type not supported
  6579.  2Dh    operation not supported on socket
  6580.  2Eh    protocol family not supported
  6581.  2Fh    address family not supported by protocol family
  6582.  30h    address already in use
  6583.  31h    unable to assign requested address
  6584.  32h    network is down
  6585.  33h    network is unreachable
  6586.  34h    network dropped connection
  6587.  35h    software caused connection abort
  6588.  36h    connection reset by peer
  6589.  37h    no buffer space
  6590.  38h    socket is already connected
  6591.  39h    socket is not connected
  6592.  3Ah    socket is in shutdown mode
  6593.  3Bh    too many references
  6594.  3Ch    connection timed out
  6595.  3Dh    connection refused
  6596.  3Eh    too many levels of symbolic links
  6597.  3Fh    file name too long
  6598.  40h    host is down
  6599.  41h    host unreachable
  6600.  42h    protocol stack not installed
  6601.  43h    asynchronous operation not supported
  6602.  44h    synchronous operation not supported
  6603.  45h    no RCB available
  6604.  FFh    blocking (call has not yet returned)
  6605. SeeAlso: #2590
  6606.  
  6607. Format of BOOTP data (stored in parameter block):
  6608. Offset    Size    Description    (Table 2592)
  6609.  18h  4 BYTEs    ???
  6610.  1Ch    BYTE    ??? (01h)
  6611.  1Dh    BYTE    address length (04h)
  6612.  1Eh  4 BYTEs    subnet mask
  6613.  22h    BYTE    ??? (03h)
  6614.  23h    BYTE    ??? (04h)
  6615.  24h  4 BYTEs    IP address of nearest router
  6616.  28h    BYTE    ??? (06h)
  6617.  29h    BYTE    length of following data (08h)
  6618.  2Ah  4 BYTEs    IP address of nameserver 1
  6619.  2Eh  4 BYTEs    IP address of nameserver 2
  6620.  32h    BYTE    ??? (0Ch)
  6621.  33h    BYTE    length of local name
  6622.  34h  N BYTEs    local host name
  6623.     BYTE    FFh (end marker)
  6624. SeeAlso: #2590,#2588
  6625. --------N-2F7A41-----------------------------
  6626. INT 2F U - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  6627.     AX = 7A41h
  6628.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  6629. Return: AX = 7AFFh if supported
  6630.         0000h:BX = address of interrupt vector for MLID ISR
  6631.         CX = version (CH=major, CL=minor)
  6632.         DX = 0000h
  6633.         ES:SI -> DWORD containing passed value of ES:DI
  6634.         ES:DI -> entry point for TCP/IP stack
  6635. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  6636.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  6637.       a Windows exit broadcast is received
  6638. SeeAlso: AX=7A40h
  6639. --------N-2F7A42-----------------------------
  6640. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  6641.     AX = 7A42h
  6642. Return: AX = 7AFFh if supported
  6643.         ES:DI -> ??? entry point (see #2593)
  6644.  
  6645. (Table 2593)
  6646. Call NetWare TCPIP.EXE entry point with:
  6647.     DX = ???
  6648.     ES:DI -> ??? (see #2594)
  6649. Return: AX = 0000h
  6650.     other registers destroyed
  6651.  
  6652. Format of data buffer:
  6653. Offset    Size    Description    (Table 2594)
  6654.  00h    WORD    offset of WORD ??? or 0000h
  6655.  02h    WORD    offset of DWORD ??? or 0000h
  6656.  04h    WORD    offset of DWORD ??? or 0000h
  6657. --------N-2F7A43-----------------------------
  6658. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  6659.     AX = 7A43h
  6660. Return: AX = 7AFFh if supported
  6661.         DX = offset of ???
  6662. SeeAlso: AX=7A44h
  6663. --------N-2F7A44-----------------------------
  6664. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - SET ???
  6665.     AX = 7A44h
  6666.     DX = offset of ??? (see AX=7A43h)
  6667. Return: AX = 7AFFh if supported
  6668. SeeAlso: AX=7A43h
  6669. --------N-2F7A4C-----------------------------
  6670. INT 2F U - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  6671.     AX = 7A4Ch
  6672. Return: AX = 7AFFh if supported
  6673.         BX = ??? (0037h)
  6674.         CX = ??? (001Ch)
  6675. --------N-2F7A4DBX0001-----------------------
  6676. INT 2F U - Novell NetWare - ???
  6677.     AX = 7A4Dh
  6678.     BX = 0001h
  6679.     ES:DI -> ???
  6680. Return: AL = FFh if ???
  6681.         ES:DI -> ???
  6682. Note:    called by NETBIOS.EXE v3.01
  6683. --------N-2F7A4E-----------------------------
  6684. INT 2F U - Novell LAN Workplace for DOS - RARPD.EXE - INSTALLATION CHECK
  6685.     AX = 7A4Eh
  6686. Return: AX = 7AFFh if installed
  6687. SeeAlso: AX=7A4Fh"RARPD"
  6688. --------N-2F7A4F-----------------------------
  6689. INT 2F U - Novell LAN Workplace for DOS - RARPD.EXE - UNINSTALL
  6690.     AX = 7A4Fh
  6691. Return: AX = 7AFFh if installed
  6692.     DX,ES destroyed
  6693. Note:    this call conflicts with SNMP.EXE (both RARPD and SNMP are supplied
  6694.       with LAN Workplace for DOS!), such that running SNMP will uninstall
  6695.       RARPD as SNMP checks whether it is already installed!
  6696. SeeAlso: AX=7A4Eh"RARPD",AX=7A4Fh/BX=0001h
  6697. --------N-2F7A4FBX0001-----------------------
  6698. INT 2F U - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  6699.     AX = 7A4Fh
  6700.     BX = 0001h
  6701. Return: AX = 7AFFh if installed
  6702. Note:    this call conflicts with RARPD.EXE (both SNMP and RARPD are supplied
  6703.       with LAN Workplace for DOS!), such that running SNMP will uninstall
  6704.       RARPD as SNMP checks whether it is already installed!
  6705. SeeAlso: AX=7A4Fh"RARPD",AX=7A4Fh/BX=0002h
  6706. --------N-2F7A4FBX0002-----------------------
  6707. INT 2F U - Novell NetWare - SNMP.EXE - ???
  6708.     AX = 7A4Fh
  6709.     BX = 0002h
  6710. Return: AL = status
  6711.         4Fh if failed
  6712.         FFh if successful
  6713. SeeAlso: AX=7A4Fh/BX=0001h
  6714. --------N-2F7A80-----------------------------
  6715. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  6716.     AX = 7A80h
  6717. Return: nothing
  6718. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  6719.       TSRs that it is unsafe to call the shell in the future; also called
  6720.       by NETX.VLM when it is unloaded
  6721.     must be passed through so that all interested programs see the exit
  6722.     on receiving this call, IPXODI clears an internal pointer to a
  6723.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  6724.       0000h:0000h and stops calling it
  6725. SeeAlso: AX=7A81h
  6726. --------N-2F7A81-----------------------------
  6727. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  6728.     AX = 7A81h
  6729.     CX:DX -> shell's INT 21h entry point
  6730. Return: nothing
  6731. Notes:    the shell calls this function as it loads to allow interested TSRs
  6732.       and drivers to make a local copy of the shell's entry point
  6733.     must be passed through so that all interested programs see it
  6734. --------N-2F7A85-----------------------------
  6735. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  6736.     AX = 7A85h
  6737.     CX = broadcast server number
  6738. Return: CX = 0000h if broadcast message handled by another program
  6739.     CX unchanged if broadcast not handled
  6740. SeeAlso: AX=7A21h
  6741. --------N-2F7A90-----------------------------
  6742. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  6743.     AX = 7A90h
  6744. Return: AL = 00h if present
  6745.         BX = ???
  6746.         CX = PSP segment of NETBIOS resident code
  6747. SeeAlso: AX=7AFEh
  6748. --------N-2F7AA0-----------------------------
  6749. INT 2F U - Personal NetWare - HRMIB - ???
  6750.     AX = 7AA0h
  6751.     BX = function
  6752.         0000h ???
  6753.         0001h ???
  6754. Return: ???
  6755. SeeAlso: AX=7A2Fh/BX=0EDCh
  6756. --------N-2F7AC1-----------------------------
  6757. INT 2F - LAN HiJack - LHR - DISABLE???
  6758.     AX = 7AC1h
  6759. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6760.       to take over control of a workstation remotely; LHR is the program
  6761.       run on the slave workstation
  6762. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  6763. --------N-2F7AC2-----------------------------
  6764. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  6765.     AX = 7AC2h
  6766. Note:    sets BIOS keyboard status byte to an internal variable
  6767. SeeAlso: AX=7AC3h,AX=7ACFh
  6768. --------N-2F7AC3-----------------------------
  6769. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  6770.     AX = 7AC3h
  6771. SeeAlso: AX=7AC2h,AX=7ACFh
  6772. --------N-2F7AC8-----------------------------
  6773. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  6774.     AX = 7AC8h
  6775.     BL = function(s) to enable (see #2595)
  6776. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  6777.  
  6778. Bitfields for LAN HiJack function(s) to enable/disable:
  6779. Bit(s)    Description    (Table 2595)
  6780.  0    ???
  6781.  1    remote keyboard enabled
  6782.  2    support remote's mouse
  6783.  3-7    unused
  6784. --------N-2F7AC9-----------------------------
  6785. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  6786.     AX = 7AC9h
  6787.     BL = function(s) to disable (see #2595)
  6788. SeeAlso: AX=7AC1h,AX=7AC8h
  6789. --------N-2F7ACA-----------------------------
  6790. INT 2F - LAN HiJack - LHJ - ???
  6791.     AX = 7ACAh
  6792.     BL = ???
  6793. Return: ???
  6794. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6795.       to take over control of a workstation remotely; LHJ is the program
  6796.       run on the controlling workstation
  6797. --------N-2F7ACB-----------------------------
  6798. INT 2F - LAN HiJack - LHJ - ???
  6799.     AX = 7ACBh
  6800.     BX = ???
  6801. Return: ???
  6802. Note:    this function appears to be related to the keyboard
  6803. SeeAlso: AX=7ACCh
  6804. --------N-2F7ACC-----------------------------
  6805. INT 2F - LAN HiJack - LHJ - ???
  6806.     AX = 7ACCh
  6807.     BX = ???
  6808. Return: ???
  6809. Note:    this function appears to be related to the mouse
  6810. SeeAlso: AX=7ACBh
  6811. --------N-2F7ACFBX0000-----------------------
  6812. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  6813.     AX = 7ACFh
  6814.     BX = 0000h
  6815. Return: BX = segment of resident code if installed
  6816. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  6817.       to take over control of a workstation remotely; LHR is the program
  6818.       run on the slave workstation
  6819. --------N-2F7AF0-----------------------------
  6820. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  6821.     AX = 7AF0h
  6822. Return: AL = FFh if present
  6823.         ES = 7AF0h
  6824.         CX = PSP segment of resident code
  6825. --------N-2F7AF1-----------------------------
  6826. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  6827.     AX = 7AF1h
  6828.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  6829. Return: AX <> 7AF1h if present
  6830.         BH = total number of drivers
  6831.         ---if BL nonzero on entry---
  6832.         AL = number of ports provided by specified driver
  6833.         ES:DI -> driver entry point
  6834.               (see #2596,#2597,#2598,#2599,#2600,#2601,#2602,#2603)
  6835.         ES:DX -> ID string
  6836. SeeAlso: INT 7A/BX=001Ch
  6837.  
  6838. (Table 2596)
  6839. Call Access Server driver "initialize port" function with:
  6840.     AH = 01h
  6841.     AL = port number (00h-0Fh)
  6842.     ES:BX -> configuration parameter block (see #2609)
  6843.     interrupts disabled
  6844. Return: CF clear if successful
  6845.     CF set on error
  6846. SeeAlso: #2597
  6847.  
  6848. (Table 2597)
  6849. Call Access Server driver "get port status" function with:
  6850.     AH = 02h
  6851.     AL = port number (00h-0Fh)
  6852.     interrupts disabled
  6853. Return: CF clear if successful
  6854.         BL = transmitter status (see #2606)
  6855.         BH = receiver status (see #2607)
  6856.         DL = external status signals (see #2608)
  6857.     CF set on error
  6858.     interrupts disabled
  6859. SeeAlso: #2596,#2598,#2601
  6860.  
  6861. (Table 2598)
  6862. Call Access Server driver "get input from port" function with:
  6863.     AH = 03h
  6864.     AL = port number (00h-0Fh)
  6865.     CX = size of data buffer
  6866.     ES:BX -> buffer for data
  6867.     interrupts disabled
  6868. Return: CF clear if successful
  6869.     CF set on error
  6870.     interrupts disabled
  6871.     CX = number of bytes read
  6872. Note:    the driver will add a NUL to the buffer when a break signal is detected
  6873. SeeAlso: #2598,#2599
  6874.  
  6875. (Table 2599)
  6876. Call driver "send output data to port" function with:
  6877.     AH = 04h
  6878.     AL = port number (00h-0Fh)
  6879.     CX = number of bytes to send
  6880.     ES:BX -> buffer containing data
  6881.     interrupts disabled
  6882. Return: CF clear if successful
  6883.     CF set on error
  6884.     interrupts disabled
  6885.     CX = number of bytes actually written
  6886. SeeAlso: #2598,#2600
  6887.  
  6888. (Table 2600)
  6889. Call driver "get I/O character counts" function with:
  6890.     AH = 05h
  6891.     AL = port number (00h-0Fh)
  6892.     interrupts disabled
  6893. Return: CF clear if successful
  6894.         BX = number of bytes pending transmission
  6895.         CX = number of bytes available for reading
  6896.     CF set on error
  6897.     interrupts disabled
  6898. SeeAlso: #2598,#2599
  6899.  
  6900. (Table 2601)
  6901. Call driver "control XON/XOFF" function with:
  6902.     AH = 06h
  6903.     AL = port number (00h-0Fh)
  6904.     DL = new state
  6905.         (00h software flow control disabled, else enabled)
  6906.     interrupts disabled
  6907. Return: CF clear if successful
  6908.     CF set on error
  6909.     interrupts disabled
  6910. SeeAlso: #2602
  6911.  
  6912. (Table 2602)
  6913. Call driver "get error counts and statistics" function with:
  6914.     AH = 07h
  6915.     AL = port number (00h-0Fh)
  6916.     ES:BX -> buffer for statistics (see #2610)
  6917.     interrupts disabled
  6918. Return: CF clear if successful
  6919.         ES:BX buffer filled
  6920.     CF set on error
  6921.     interrupts disabled
  6922. SeeAlso: #2603,#2604,#2605
  6923.  
  6924. (Table 2603)
  6925. Call driver "general request" function with:
  6926.     AH = 08h
  6927.     AL = port number (00h-0Fh)
  6928.     DX = requested operations
  6929.         bit 0: flush transmit buffers
  6930.         bit 1: flush receive buffers
  6931.         bit 4: define XON/XOFF characters
  6932.     ES:BX -> XON/XOFF characters (see #2611) if DX bit 4 set
  6933.     interrupts disabled
  6934. Return: CF clear if successful
  6935.     CF set on error
  6936.     interrupts disabled
  6937.  
  6938. (Table 2604)
  6939. Call driver "deadman timer management" function with:
  6940.     AH = 09h
  6941.     AL = port number (00h-0Fh)
  6942.     BX = next time interval in seconds (0000h to disable timer)
  6943.     interrupts disabled
  6944. Return: CF clear
  6945.     interrupts disabled
  6946. SeeAlso: #2605
  6947.  
  6948. (Table 2605)
  6949. Call driver "get buffer sizes" function with:
  6950.     AH = 0Ah
  6951.     AL = port number (00h-0Fh)
  6952.     interrupts disabled
  6953. Return: CF clear if successful
  6954.        BX = size of transmit buffer
  6955.        CX = size of receive buffer
  6956.     CF set on error
  6957.     interrupts disabled
  6958. SeeAlso: #2604
  6959.  
  6960. (Table 2606)
  6961. Values for Access Server transmitter status:
  6962.  00h    uninitialized
  6963.  01h    ready, not transmitting
  6964.  02h    transmitting
  6965.  03h    XOFF received
  6966.  04h    transmitting, buffer full
  6967.  05h    XOFF received and buffer full
  6968.  
  6969. (Table 2607)
  6970. Values for Access Server receiver status:
  6971.  00h    uninitialized
  6972.  01h    ready
  6973.  02h    receive buffer full, data may have been lost
  6974.  
  6975. Bitfields for external status signals:
  6976. Bit(s)    Description    (Table 2608)
  6977.  7,6    undefined
  6978.  5    CTS active
  6979.  4    DSR active
  6980.  3    DCD active
  6981.  2,1    undefined
  6982.  0    ring indicator
  6983.  
  6984. Format of Access Server configuration parameter block:
  6985. Offset    Size    Description    (Table 2609)
  6986.  00h    BYTE    receive baud rate index
  6987.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  6988.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  6989.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  6990.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  6991.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  6992.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  6993.  02h    BYTE    receive stop bits
  6994.  03h    BYTE    receive parity
  6995.         00h none, 01h odd, 02h even, 03h mark, 04h space
  6996.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  6997.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  6998.  06h    BYTE    transmit stop bits
  6999.  07h    BYTE    transmit parity (same as receive parity)
  7000.  08h    BYTE    DTR state (00h off, 01h on)
  7001.  09h    BYTE    RTS state (00h off, 01h on)
  7002.  0Ah    BYTE    flow control (00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both)
  7003.  0Bh    BYTE    break control (00h off, 01h on)
  7004.  
  7005. Format of Access Server statistics:
  7006. Offset    Size    Description    (Table 2610)
  7007.  00h    BYTE    port number
  7008.  01h    BYTE    external status signals (see #2608)
  7009.  02h    BYTE    transmitter status (see #2606)
  7010.  03h    BYTE    receiver status (see #2607)
  7011.  04h    DWORD    number of characters received
  7012.  08h    DWORD    number of characters transmitted
  7013.  0Ch    WORD    input parity errors
  7014.  0Eh    WORD    input framing errors
  7015.  10h    WORD    lost characters due to hardware overrun
  7016.  12h    WORD    lost characters due to data buffer overrun
  7017. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  7018.       or FFFFFFFFh, it is no longer incremented
  7019.  
  7020. Format of Access Server XON/XOFF characters:
  7021. Offset    Size    Description    (Table 2611)
  7022.  00h    BYTE    04h (number of bytes following)
  7023.  01h    BYTE    transmit XON character
  7024.  02h    BYTE    transmit XOFF character
  7025.  03h    BYTE    receive XON character
  7026.  04h    BYTE    receive XOFF character
  7027. --------N-2F7AFE-----------------------------
  7028. INT 2F U - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  7029.     AX = 7AFEh
  7030. Return: AL = FFh if present
  7031.         ES = (data???) segment of DOSNP
  7032. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  7033.        NetWare
  7034. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  7035.       present
  7036. SeeAlso: AX=7A90h
  7037. --------N-2F7AFFBX0000-----------------------
  7038. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK / Windows SUPPORT
  7039.     AX = 7AFFh
  7040.     BX = 0000h
  7041.     CX = 4E65h ("Ne")
  7042.     DX = 7457h ("tW")
  7043.     ES:DI -> Windows support procedure (see #2612)
  7044. Return: AL = FFh if installed
  7045.         CX = configured sockets (14h)
  7046.         DS:SI -> data table ???
  7047.         ES:DI -> IPX far call handler
  7048. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  7049.       of pointers to service events queue head and tail
  7050.     this function is also supported by IPXODI; v2.12 does not change DS,
  7051.       but does set SI to an internal address
  7052. SeeAlso: AX=7AFFh/BX=0001h
  7053.  
  7054. (Table 2612)
  7055. Values Windows support procedure called with:
  7056.     BP = function
  7057.         0001h Get ECB
  7058.         BX = socket number
  7059.         Return: ES:SI -> ECB or 0000h:0000h if none available
  7060.         0002h Count Listen ECBs
  7061.         AX = BX = socket
  7062.         Return: CX = number of listen ECBs for socket
  7063.                 (must be >= 2 for SPX to work)
  7064.         0003h ???
  7065.         0004h Inform task switcher of ECB locations
  7066.         Note:    registers other than those listed above are equal
  7067.               to the values when IPX was called
  7068. Note:    the support function will not be called if IPX is called with BX
  7069.       bit 15 set
  7070. --------N-2F7AFFBX0001-----------------------
  7071. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  7072.     AX = 7AFFh
  7073.     BX = 0001h
  7074.     CX = 4E65h ("Ne")
  7075.     DX = 7457h ("tW")
  7076. Return: AL = FFh if installed
  7077.         CX = ???  (8000h)
  7078.         SI = ??? (or -> ???) (0002h and 0007h seen)
  7079.         ES:DI -> IPX far call handler
  7080.         ES:DX -> 6-byte data area ???
  7081. Note:    this function is also supported by IPXODI, but IPXODI v2.12 does not
  7082.       return ES:DX
  7083. SeeAlso: AX=7AFFh/BX=0000h
  7084. --------d-2F7F00-----------------------------
  7085. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  7086.     AX = 7F00h
  7087. Return: AL = FFh if installed
  7088. SeeAlso: AX=7F01h"Harper",AX=7F02h"Harper",AX=7F03h"Harper"
  7089. --------P-2F7F00-----------------------------
  7090. INT 2F - PRINDIR v9.0 - INSTALLATION CHECK
  7091.     AX = 7F00h
  7092. Return: AL = FFh if installed
  7093.         BX = version (BH = major, BL = minor)
  7094.         CX:DX -> ASCIZ signature "PRINDIR"
  7095. Range:    AH=7Fh is the default, may be changed at installation time
  7096. Note:    prior versions of PRINDIR used INT 7C or INT 7A
  7097. SeeAlso: AX=7F01h"PRINDIR",AX=7F02h"PRINDIR",AX=7F03h"PRINDIR"
  7098. SeeAlso: AX=7F06h"PRINDIR",AX=7F08h,AX=7F0Ah,AX=7F0Ch,AX=7F0Eh,INT 7C"PRINDIR"
  7099. --------d-2F7F01-----------------------------
  7100. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  7101.     AX = 7F01h
  7102.     DS:DX -> command record (see #2613)
  7103. Return: AL = status
  7104.         00h successful
  7105.         else error code
  7106. SeeAlso: AX=7F00h"Harper",AX=7F02h"Harper",INT 11/AH=FFh"SDLP"
  7107. SeeAlso: INT 21/AX=4402h"ASPI",INT 4F/AX=8100h
  7108.  
  7109. Format of CD-ROM redirector command record:
  7110. Offset    Size    Description    (Table 2613)
  7111.  00h    BYTE    ID
  7112.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation (see #2907,#2908)
  7113.  0Bh    WORD    segment of buffer
  7114.  0Dh    WORD    offset of buffer
  7115.  0Fh    BYTE    status
  7116.  10h    BYTE    sense
  7117.  12h    WORD    count
  7118. --------P-2F7F01-----------------------------
  7119. INT 2F - PRINDIR v9.0 - SET CAPTURE DEVICE
  7120.     AX = 7F01h
  7121.     DX = capture device (as used by /GET commandline option)
  7122. Return: AX = status
  7123.         0000h successful
  7124.         FFFFh invalid device
  7125. SeeAlso: AX=7F00h"PRINDIR",AX=7F02h"PRINDIR",AX=7F03h"PRINDIR"
  7126. SeeAlso: AX=7F05h"PRINDIR"
  7127. --------d-2F7F02-----------------------------
  7128. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  7129.     AX = 7F02h
  7130. SeeAlso: AX=7F00h,AX=7F01h
  7131. --------P-2F7F02-----------------------------
  7132. INT 2F - PRINDIR v9.0 - SET DESTINATION DEVICE
  7133.     AX = 7F02h
  7134.     DX = destination device number (as used by /PUT commandline option)
  7135. Return: AX = status
  7136.         0000h successful
  7137.         FFFFh invalid device number
  7138. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR"
  7139. SeeAlso: AX=7F06h"PRINDIR"
  7140. --------d-2F7F03-----------------------------
  7141. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  7142.     AX = 7F03h
  7143. Return: AL = status
  7144.         00h successful
  7145.         01h unable to uninstall
  7146. SeeAlso: AX=7F00h
  7147. --------P-2F7F03-----------------------------
  7148. INT 2F - PRINDIR v9.0 - SET CAPTURE FILENAME
  7149.     AX = 7F03h
  7150.     CX:DX -> ASCIZ name of capture file
  7151. Return: AX = status
  7152.         0000h successful
  7153.         FFFFh name too long
  7154. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR"
  7155. SeeAlso: AX=7F05h"PRINDIR",AX=7F07h"PRINDIR"
  7156. --------P-2F7F04-----------------------------
  7157. INT 2F - PRINDIR v9.0 - SET LOCK FILENAME
  7158.     AX = 7F04h
  7159.     CX:DX -> ASCIZ name of lock file
  7160. Return: AX = status
  7161.         0000h successful
  7162.         FFFFh invalid device number
  7163. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F03h"PRINDIR"
  7164. SeeAlso: AX=7F05h,AX=7F06h,AX=7F08h,AX=7F0Ah,AX=7F0Bh
  7165. --------P-2F7F05-----------------------------
  7166. INT 2F - PRINDIR v9.0 - DUMP CAPTURE BUFFER
  7167.     AX = 7F05h
  7168. Return: AX = status
  7169.         0000h successful
  7170. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F04h"PRINDIR",AX=7F06h
  7171. --------P-2F7F06-----------------------------
  7172. INT 2F - PRINDIR v9.0 - SET NORMAL TEXT COLOR
  7173.     AX = 7F06h
  7174.     DH = new attribute for normal text
  7175. Return: AX = status
  7176.         0000h successful
  7177. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F05h"PRINDIR",AX=7F07h
  7178. --------P-2F7F07-----------------------------
  7179. INT 2F - PRINDIR v9.0 - SET HIGHLIGHT TEXT COLOR
  7180.     AX = 7F07h
  7181.     DH = new attribute for highlighted text
  7182. Return: AX = status
  7183.         0000h successful
  7184. SeeAlso: AX=7F00h"PRINDIR",AX=7F01h"PRINDIR",AX=7F06h"PRINDIR",AX=7F08h
  7185. --------P-2F7F08-----------------------------
  7186. INT 2F - PRINDIR v9.0 - SET POPUP HOTKEY
  7187.     AX = 7F08h
  7188.     DH = new scancode for hotkey
  7189. Return: AX = status
  7190.         0000h successful
  7191. SeeAlso: AX=7F00h"PRINDIR",AX=7F05h"PRINDIR",AX=7F09h,AX=7F0Bh,AX=7F0Dh
  7192. --------P-2F7F09-----------------------------
  7193. INT 2F - PRINDIR v9.0 - SET BYTE COUNTER DISPLAY
  7194.     AX = 7F09h
  7195.     DH = new state (00h off, 01h on)
  7196. Return: AX = status
  7197.         0000h successful
  7198. SeeAlso: AX=7F00h"PRINDIR",AX=7F07h"PRINDIR",AX=7F08h,AX=7F0Ah,AX=7F0Ch
  7199. --------P-2F7F0A-----------------------------
  7200. INT 2F - PRINDIR v9.0 - SET FLUSH DELAY
  7201.     AX = 7F0Ah
  7202.     DX = number of clock ticks before flushing
  7203. Return: AX = status
  7204.         0000h successful
  7205. SeeAlso: AX=7F00h"PRINDIR",AX=7F07h"PRINDIR",AX=7F09h,AX=7F0Bh,AX=7F0Ch
  7206. --------P-2F7F0B-----------------------------
  7207. INT 2F - PRINDIR v9.0 - SET MINIMUM DUMP SIZE
  7208.     AX = 7F0Bh
  7209.     DX = number of kilobytes to accumulate before dumping
  7210. Return: AX = status
  7211.         0000h successful
  7212. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Ch,AX=7F0Dh,AX=7F0Eh
  7213. --------P-2F7F0C-----------------------------
  7214. INT 2F - PRINDIR v9.0 - SET ECHO STATE
  7215.     AX = 7F0Ch
  7216.     DX = new state (00h echo off, 01h echo on)
  7217. Return: AX = status
  7218.         0000h successful
  7219. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Dh,AX=7F0Eh
  7220. --------P-2F7F0D-----------------------------
  7221. INT 2F - PRINDIR v9.0 - SHOW POPUP PARAMETER MENU
  7222.     AX = 7F0Dh
  7223. Return: AX = status
  7224.         0000h successful
  7225.         else  failed
  7226. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Ch,AX=7F0Eh
  7227. --------P-2F7F0E-----------------------------
  7228. INT 2F - PRINDIR v9.0 - SUBMIT BYTE TO CURRENT DESTINATION DEVICE
  7229.     AX = 7F0Eh
  7230.     DL = byte to send to destination device
  7231. Return: AX = status
  7232.         0000h successful
  7233.         else  failed
  7234. SeeAlso: AX=7F00h"PRINDIR",AX=7F0Ah,AX=7F0Bh,AX=7F0Ch,AX=7F0Dh
  7235. ----------2F7F24-----------------------------
  7236. INT 2F - Multiplex - ???
  7237.     AX = 7F24h
  7238.     ???
  7239. Return: ???
  7240. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7241. ----------2F7F26-----------------------------
  7242. INT 2F - Multiplex - ???
  7243.     AX = 7F26h
  7244.     ???
  7245. Return: ???
  7246. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7247. --------N-2F8000-----------------------------
  7248. INT 2F - EASY-NET - INSTALLATION CHECK
  7249.     AX = 8000h
  7250. Return: AL = 00h not installed
  7251.          FFh installed
  7252. Program: EASY-NET is a shareware two-machine serial-port network
  7253. --------N-2F8000-----------------------------
  7254. INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK
  7255.     AX = 8000h
  7256. Return: AL = FFh if installed
  7257.         BX = CS of resident code
  7258.         CX = ??? (03FCh)
  7259. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7260.       demonstration version may be downloaded from Nanosoft's BBS
  7261. SeeAlso: AX=8100h
  7262. --------t-2F8000-----------------------------
  7263. INT 2F - CS_TSR specification - TSR INSTALLATION CHECK
  7264.     AX = 8000h
  7265.     DS:SI -> 4-byte CS_TSR signature (11h 43h 53h 10h)
  7266. Return: AL = status
  7267.         00h no CS_TSR-compliant TSRs installed
  7268.         01h installed, but signature did not match
  7269.         FFh installed, signature matches
  7270.         ES:DI -> resident process block (see #2614) of last installed
  7271.               TSR (if DS:SI pointed at signature on entry)
  7272. Program: the CS_TSR specification is a standardized TSR interface by Compact
  7273.       Soft group in Kiev, Ukraine
  7274. Desc:    determine whether any CS_TSR-compliant TSRs are installed on the
  7275.       selected multiplex number
  7276. Range:    AH=80h to AH=FFh
  7277. SeeAlso: AX=8001h"CS_TSR",AX=8002h"CS_TSR",AX=8003h"CS_TSR"
  7278.  
  7279. Format of CS_TSR process block:
  7280. Offset    Size    Description    (Table 2614)
  7281.  00h  4 BYTEs    CS_TSR signature 11h 43h 53h 10h
  7282.  04h    BYTE    INT 2F multiplex number
  7283.  05h    WORD    virtual process handle (unique among loaded TSRs)
  7284.  07h  2 BYTEs    version (binary minor version, then major version)
  7285.  09h    WORD    PSP segment of TSR
  7286.  0Bh    DWORD    pointer to ASCIZ program name
  7287.  0Fh  3 BYTEs    program creation date (day, month, year)
  7288.  12h  3 BYTEs    process start time (seconds, minutes, hours)
  7289.  15h  3 BYTEs    process start date (day, month, year)
  7290. --------F-2F8000DX0000-----------------------
  7291. INT 2F - FaxBIOS interface - INSTALLATION CHECK
  7292.     AX = 8000h
  7293.     DX = 0000h
  7294.     DI = 0000h
  7295. Return: AL = FFh if installed
  7296.     DX:DI -> signature "FaxBiosjpc"
  7297. Range:    AH=80h to AH=FFh, selected by scanning multiplex numbers for signature
  7298. SeeAlso: AH=2Ah,AX=80FBh
  7299. --------N-2F8001-----------------------------
  7300. INT 2F - Nanosoft, Inc. TurboNET server - ???
  7301.     AX = 8001h
  7302.     DS:SI -> 16-byte buffer for ???
  7303. Return: AH = status
  7304.         00h successful
  7305.         01h error (TurboNET busy)
  7306. Note:    makes NetBIOS calls
  7307. --------t-2F8001-----------------------------
  7308. INT 2F - CS_TSR specification - GET HANDLE (TSR-SPECIFIC INSTALLATION CHECK)
  7309.     AX = 8001h
  7310.     DS:SI -> ASCIZ signature string for desired TSR (see #2615)
  7311. Return: BX = process handle or 0000h if specified TSR not installed
  7312.     ES:DI -> process block for TSR (see #2614) if BX<>0000h
  7313. Note:    A widely-available copy of ASCII billing itself as "ASCII 2.OO by
  7314.       Nick Zaikin Jr." is in fact a hacked copy of the Compact Soft
  7315.       ASCII v4.23 which is identical except for the changed attribution
  7316.       and version (in fact, some instances of "4.23" were missed); the
  7317.       hacked copy requires the signature string
  7318.       "ASCII 2.OO by Nick Zaikin Jr." instead of the unhacked version's
  7319.       simple signature "ASCII"
  7320. SeeAlso: AX=8000h"CS_TSR",AX=8002h"CS_TSR"
  7321.  
  7322. (Table 2615)
  7323. Values for CS_TSR signature strings:
  7324.  "ASCII"    ASCII, a popup ASCII table with character input
  7325.  "Halculator"    HALC, a 32-bit RPN WYSIWIH calculator with undo and ptr support
  7326.  "AntiTurbo"    AT!, an intelligent system slow-down utility
  7327. --------t-2F8002-----------------------------
  7328. INT 2F - CS_TSR specification - GET PROCESS BLOCK BY PROCESS HANDLE
  7329.     AX = 8002h
  7330.     BX = process handle for TSR (see AX=8001h"CS_TSR")
  7331. Return: ES:DI -> process block for specified TSR (see #2614)
  7332.         unchanged if no match for process handle
  7333. Note:    This function is used to allocate a process handle when the TSR
  7334.       installs itself, by setting ES:DI to point at something other than
  7335.       a CS_TSR process block's signature string and iterating through the
  7336.       possible process handles (0001h to FFFFh) until ES:DI is returned
  7337.       unchanged
  7338. SeeAlso: AX=8000h"CS_TSR",AX=8001h"CS_TSR",AX=8003h"CS_TSR"
  7339. --------t-2F8003-----------------------------
  7340. INT 2F - CS_TSR specification - CUSTOM SUBFUNCTION
  7341.     AX = 8003h
  7342.     BX = process handle for TSR (see AX=8001h"CS_TSR")
  7343.     other registers vary by TSR
  7344. Return: vary by TSR, unchanged if not supported
  7345. Program: the CS_TSR specification is a standardized TSR interface by Compact
  7346.       Soft group in Kiev, Ukraine
  7347. SeeAlso: AX=8000h"CS_TSR",AX=8001h"CS_TSR",AX=8002h"CS_TSR"
  7348. --------F-2F80FB-----------------------------
  7349. INT 2F - FaxBIOS interface - COMMAND SUBMISSION
  7350.     AX = 80FBh
  7351.     BX = function number (see #2616)
  7352.     DX:DI -> command buffer
  7353.           (see #2618,#2621,#2622,#2623,#2624,#2625,#2630,#2636,#2643)
  7354. Return: AL = FFh if submitted OK
  7355.     CX = result code (see #2617)
  7356. Range:    AH=80h to AH=FFh, selected by scanning multiplex numbers for signature
  7357. SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh
  7358.  
  7359. (Table 2616)
  7360. Values for FaxBIOS function number:
  7361.  0001h    SYS_LOGIN
  7362.  0002h    SYS_LOGOUT
  7363.  0003h    SYS_GET_FAXAPP_INFO
  7364.  0004h    STAT_IO_GET
  7365.  0005h    STAT_FAXBIOS_GET
  7366.  0006h    PDIR_OPEN
  7367.  0007h    PDIR_CLOSE (see #2626)
  7368.  0008h    PDIR_READ_PERSON (see #2627)
  7369.  0009h    PDIR_PARTIAL_READ
  7370.  000Ah    PDIR_READ_GROUP
  7371.  000Bh    PDIR_READ_MEMBER_LIST
  7372.  000Ch    PDIR_WRITE_PERSON
  7373.  000Dh    PDIR_WRITE_GROUP
  7374.  000Eh    PDIR_DELETE_PERSON
  7375.  000Fh    PDIR_DELETE_GROUP
  7376.  0010h    PDIR_READ_GROUP_LIST
  7377.  0011h    PDIR_IN_GROUP
  7378.  0012h    PDIR_OUT_GROUP
  7379.  0013h    SCHED_OPEN (see #2628)
  7380.  0014h    SCHED_ADD_DEST (see #2629)
  7381.  0015h    SCHED_ADD_FILE (see #2630)
  7382.  0016h    SCHED_SET_PARAMS (see #2631)
  7383.  0017h    SCHED_CANCEL (see #2628)
  7384.  0018h    SCHED_CLOSE (see #2632)
  7385.  0019h    SLOG_OPEN (see #2633)
  7386.  001Ah    SLOG_CLOSE (see #2633)
  7387.  001Bh    SLOG_SHORT_ENV_STAT
  7388.  001Ch    SLOG_LONG_ENV_STAT
  7389.  001Dh    SLOG_DEST_STAT
  7390.  001Eh    SLOG_FILE_STAT
  7391.  001Fh    SLOG_CANCEL_ENV
  7392.  0020h    RLOG_OPEN (see #2633)
  7393.  0021h    RLOG_CLOSE (see #2633)
  7394.  0022h    RLOG_READ
  7395.  0023h    GRAPH_GET_FILE_TYPE (see #2634)
  7396.  0024h    GRAPH_EXPORT_FILE
  7397.  0025h    GRAPH_GET_LAYOUT_INFO
  7398.  0026h    GRAPH_CREATE_FILE (see #2635)
  7399.  0027h    GRAPH_CLOSE_FILE (see #2636)
  7400.  0028h    GRAPH_CREATE_PAGE (see #2637)
  7401.  0029h    GRAPH_WRITE (see #2638)
  7402.  002Ah    GRAPH_END_PAGE
  7403.  002Bh    GRAPH_OPEN_FILE (see #2639)
  7404.  002Ch    GRAPH_GOTO_PAGE (see #2640)
  7405.  002Dh    GRAPH_READ (see #2641)
  7406.  002Eh    IOCTL_GET
  7407.  002Fh    IOCTL_SET
  7408.  0030h    IOCTL_ANSWER_FAX (see #2642)
  7409.  0031h    IOCTL_DIAL (see #2643)
  7410.  
  7411. (Table 2617)
  7412. Values for FaxBIOS result code:
  7413.  0000h    successful
  7414.  0001h    not prepared or servicing another client (busy)
  7415.  0002h    call failed due to sharing (LOCKED)
  7416.  0003h    logged-in client limit reached (FULL)
  7417.  0004h    transport denied (TRANSPORT_DENIED)
  7418.  0005h    not implemented (NOT_IMPLEMENTED)
  7419.  0006h    aborted while in progress (ABORTED)
  7420.  0007h    permissions denied (PERMISSION_DENIED)
  7421.  0008h    requested data is no longer valid (NO_LONGER_VALID)
  7422.  0080h    unspecified system error occurred
  7423.  0081h    an internal file was not found
  7424.  0082h    an internal file could not be created
  7425.  0083h    an internal file could not be opened
  7426.  0084h    an internal file could not be closed
  7427.  0085h    error occurred writing to an internal file
  7428.  0086h    error occurred reading from an internal file
  7429.  0087h    bad or corrupted file encountered
  7430.  0088h    an access violation occurred
  7431.  0089h    an internal file is empty
  7432.  008Ah    insufficient memory to process request
  7433.  008Bh    FaxBIOS was unable to issue a handle
  7434.  008Ch    an error internal to FaxBIOS occurred
  7435.  008Dh    no room on disk
  7436.  0100h    unspecified error accessing client file
  7437.  0101h    file not found
  7438.  0102h    creation fault
  7439.  0103h    open fault
  7440.  0104h    close fault
  7441.  0105h    write fault
  7442.  0106h    read fault
  7443.  0107h    file corrupted
  7444.  0108h    access violation
  7445.  0109h    empty file
  7446.  0200h    unspecified argument error
  7447.  0201h    bad function
  7448.  0202h    bad option
  7449.  0203h    bad structure size
  7450.  0204h    bad buffer size
  7451.  0205h    bad client ID
  7452.  0300h    unspecified error with token
  7453.  0301h    cover sheet token was invalid
  7454.  0302h    logo token was invalid
  7455.  0303h    signature token was invalid
  7456.  0304h    font token was invalid
  7457.  0305h    phone directory token was invalid
  7458.  0306h    outbound route token was invalid
  7459.  0307h    priority token was invalid
  7460.  0308h    sort token was invalid
  7461.  0309h    billing token was invalid
  7462.  0400h    unspecified handle error
  7463.  0401h    bad Phone Directory handle
  7464.  0402h    bad scheduling handle
  7465.  0403h    bad read send log handle
  7466.  0404h    bad read receive log handle
  7467.  0405h    bad graphics handle
  7468.  0500h    data passed in structure was invalid
  7469.  0501h    name field given is invalid
  7470.  0502h    phone number given is invalid
  7471.  0503h    poll code submitted is invalid
  7472.  0504h    file type constant was invalid
  7473.  0505h    BFT constant not defined or supported
  7474.  0506h    resolution not defined or supported
  7475.  0507h    page length not defined or supported
  7476.  0508h    page width not defined or supported
  7477.  0509h    date & time requested are ridiculous
  7478.  050Ah    Subject text was not an ASCIZ string
  7479.  050Bh    From text was not an ASCIZ string
  7480.  050Ch    requested envelope ID was not found
  7481.  050Dh    requested envelope ID is not valid
  7482.  050Eh    envelope requested was not found
  7483.  050Fh    destination index is out of range
  7484.  0510h    file index is out of range
  7485.  0511h    index into receive log is out of range
  7486.  0512h    file name specified was incomplete or invalid
  7487.  0513h    page selected was out of range
  7488.  0514h    bit width more than byte width
  7489.  0515h    mode for open is not defined
  7490.  0516h    person index is out of range
  7491.  0517h    person ID is out of range
  7492.  0518h    group index out of range or invalid
  7493.  0519h    group ID out of range or invalid
  7494.  051Ah    range of indices to read is invalid
  7495.  051Bh    group name given is invalid
  7496.  051Ch    field_to_use is badly specified
  7497.  051Dh    predicate invalid for field specified
  7498.  0600h    unspecified client procedure error
  7499.  0601h    device of interest is not present
  7500.  0602h    device of interest has been removed
  7501.  0603h    device of interest is not responding
  7502.  0604h    device of interest is disabled
  7503.  0605h    could not dial because device was in use
  7504.  0606h    maximum destination limit exceeded
  7505.  0607h    maximum file limit exceeded
  7506.  0608h    scheduling closed with no destination
  7507.  0609h    scheduling closed with no files or poll
  7508.  060Ah    scheduling closed with no parameters specified
  7509.  060Bh    file type specified does not match file
  7510.  060Ch    file type specified is not supported
  7511.  060Dh    file submitted is not exportable
  7512.  060Eh    file type specified is not imageable
  7513.  060Fh    error converting file
  7514.  0610h    envelope could not be cancelled
  7515.  0611h    Phone Directory is full
  7516.  0612h    record is already in the Phone Directory
  7517.  0613h    selected group in Phone Directory is full
  7518.  0614h    person is already in the group
  7519.  0615h    person is not in the group & cannot be removed
  7520.  0616h    a graphics file to be created already exists
  7521.  0617h    a graphics file to be read is empty
  7522.  0618h    GRAPH_CREATE_PAGE called before GRAPH_END_PAGE
  7523.  0619h    graph read or write attempted without goto or create
  7524.  061Ah    graph page contains no data
  7525.  061Bh    Phone Directory is already open for this client
  7526.  061Ch    schedule log is already open for this client
  7527.  061Dh    receive log is aready open for this client
  7528.  061Eh    Phone Directory function requires write mode
  7529.  0800h    denied exclusive use of the API
  7530.  
  7531. Format of FaxBIOS SYS_LOGIN command buffer:
  7532. Offset    Size    Description    (Table 2618)
  7533.  00h    WORD    structure size
  7534.  02h    WORD    function number
  7535.  04h    WORD    return code
  7536.  06h    WORD    client ID
  7537.  08h    WORD    API Major Version
  7538.  0Ah    WORD    API Minor Version
  7539.  0Ch    DWORD    reserved for manufacturer's use
  7540.  10h 22 BYTEs    manufacturer's ID
  7541.  26h    WORD    highest possible device number
  7542.  28h    WORD    maximum destinations per envelope
  7543.  2Ah    WORD    maximum files per envelope
  7544.  2Ch    WORD    FaxBIOS capabilities (see #2619)
  7545.  2Eh    DWORD    T.30 capabilities (see #2620)
  7546.  32h    WORD    IPC handle
  7547.  34h    DWORD    amount of memory needed to load
  7548.  38h    WORD    scope (00h for public, nonzero for private)
  7549.  3Ah  6 BYTEs    future expansion
  7550.  40h    WORD    structure size
  7551.  
  7552. Bitfields for FaxBIOS capabilities:
  7553. Bit(s)    Description    (Table 2619)
  7554.  0    transmit supported
  7555.  1    receive supported
  7556.  2    IOCTL supported
  7557.  3    IOCTL_DIAL supported
  7558.  4    IOCTL_ANSWER_FAX supported
  7559.  5    manual transmit supported
  7560.  6    optional phone services supported
  7561.  7    canonical phone objects
  7562.  8    seam with next supported
  7563.  
  7564. Bitfields for T.30 capabilities:
  7565. Bit(s)    Description    (Table 2620)
  7566.  0    low vertical resolution (minimum)
  7567.  1    high vertical resolution
  7568.  2    page width 107mm (4.21 in)
  7569.  3    page width 151mm (5.91 in)
  7570.  4    page width 215mm (8.46 in) (minimum)
  7571.  5    page width 255mm (10.04 in)
  7572.  6    page width 303mm (11.93 in)
  7573.  7    unused
  7574.  8    page length 297mm (11.69 in) (minimum)
  7575.  9    page length 364mm (14.33 in)
  7576.  10    page length 279mm (11 in)
  7577.  11    page length unlimited
  7578.  12    Group 4 resolution 300x300
  7579.  13    Group 4 resolution 400x400
  7580.  14    able to respond to poll from remote
  7581.  15    able to poll remote
  7582.  16    binary file transfer supported
  7583.  
  7584. Format of FaxBIOS SYS_LOGOUT command buffer:
  7585. Offset    Size    Description    (Table 2621)
  7586.  00h    WORD    structure size
  7587.  02h    WORD    function number
  7588.  04h    WORD    return code
  7589.  06h    WORD    client ID
  7590.  08h    DWORD    client tag (for client's internal use)
  7591.  0Ch  6 BYTEs    future expansion
  7592.  12h    WORD    structure size
  7593.  
  7594. Format of FaxBIOS SYS_GET_FAXAPP_INFO command buffer:
  7595. Offset    Size    Description    (Table 2622)
  7596.  00h 12 BYTEs    common data (see #2621)
  7597.  0Ch 80 BYTEs    FaxBIOS data
  7598.  5Ch 80 BYTEs    default cover
  7599.  ACh 80 BYTEs    default logo
  7600.  FCh 80 BYTEs    default signature
  7601. 14Ch 80 BYTEs    default font 10
  7602. 19Ch 80 BYTEs    default font 165
  7603. 1ECh 80 BYTEs    default user font
  7604. 23Ch 80 BYTEs    default Pdir
  7605. 28Ch 80 BYTEs    default sort
  7606. 2DCh 10 BYTEs    default bill
  7607. 2E6h 10 BYTEs    default route
  7608. 2F0h 40 BYTEs    default cover sheet form
  7609. 318h 34 BYTEs    valid dial characters
  7610. 33Ah  6 BYTEs    local country code
  7611. 340h  6 BYTEs    local city or area code
  7612. 346h  6 BYTEs    future expansion
  7613. 34Ch    WORD    structure size
  7614.  
  7615. Format of FaxBIOS STAT_IO_GET command buffer:
  7616. Offset    Size    Description    (Table 2623)
  7617.  00h 12 BYTEs    common data (see #2621)
  7618.  0Ch    WORD    device number
  7619.  0Eh    WORD    current activity
  7620.  10h    WORD    number of rings (if ringing)
  7621.  12h    WORD    number of fascimiles transmitted
  7622.  14h    WORD    number of fascimiles received
  7623.  16h    WORD    status of last transmission
  7624.  18h    WORD    envelope number of last transmission
  7625.  1Ah    WORD    index of last destination in envelope
  7626.  1Ch    WORD    status of last reception
  7627.  1Eh    WORD    current page (if session in progress)
  7628.  20h 80 BYTEs    current file
  7629.  70h 104 BYTEs    remote number
  7630.  D8h 20 BYTEs    last name
  7631.  ECh 20 BYTEs    first name
  7632. 100h 32 BYTEs    company name
  7633. 120h 32 BYTEs    notes
  7634. 140h    WORD    current envelope ID (if sending)
  7635. 142h    WORD    total pages in transmission (if sending)
  7636. 144h  6 BYTEs    future expansion
  7637. 14h    WORD    structure size
  7638.  
  7639. Format of FaxBIOS STAT_FAXBIOS_GET command buffer:
  7640. Offset    Size    Description    (Table 2624)
  7641.  00h 12 BYTEs    common data (see #2621)
  7642.  0Ch    WORD    status ID
  7643.  0Eh    WORD    currenty FaxBIOS function number
  7644.  10h    WORD    current Client ID being serviced
  7645.  12h    WORD    number of things to do
  7646.  14h    WORD    number of them done
  7647.  16h    WORD    number of pages to do (if any)
  7648.  18h    WORD    number of them done
  7649.  1Ah    WORD    number of files to do
  7650.  1Ch    WORD    number of them done
  7651.  1Eh 80 BYTEs    current File
  7652.  6Eh    WORD    0 if all devices are idle
  7653.  70h    WORD    number of fascimiles transmitted
  7654.  72h    WORD    number of fascimiles received
  7655.  74h    WORD    status of last transmission in system
  7656.  76h    WORD    envelope ID of last transmission
  7657.  78h    WORD    index of last destination in envelope
  7658.  7Ah    WORD    status of last reception in system
  7659.  7Ch    DWORD    time of next transmission
  7660.  80h  6 BYTEs    future expansion
  7661.  86h    WORD    structure size
  7662.  
  7663. Format of FaxBIOS PDIR_OPEN command buffer:
  7664. Offset    Size    Description    (Table 2625)
  7665.  00h 12 BYTEs    common data (see #2621)
  7666.  0Ch 80 BYTEs    Phone Directory token
  7667.  5Ch 80 BYTEs    sort order token
  7668.  ACh    WORD    open Mode (0 = read, 1 = write)
  7669.  AEh    WORD    Phone Directory handle
  7670.  B0h    WORD    number of people
  7671.  B2h    WORD    number of groups
  7672.  B4h    WORD    bitmap of fields supported by partial read
  7673.  B6h  6 BYTEs    future expansion
  7674.  BCh    WORD    structure size
  7675.  
  7676. Format of FaxBIOS PDIR_CLOSE command buffer:
  7677. Offset    Size    Description    (Table 2626)
  7678.  00h 12 BYTEs    common data (see #2621)
  7679.  0Ch    WORD    Phone Directory handle
  7680.  0Eh  6 BYTEs    future expansion
  7681.  14h    WORD    structure size
  7682.  
  7683. Format of FaxBIOS PDIR_READ_PERSON command buffer:
  7684. Offset    Size    Description    (Table 2627)
  7685.  00h 12 BYTEs    common data (see #2621)
  7686.  0Ch    WORD    Phone Directory handle
  7687.  0Eh    WORD    retrieve by index
  7688.  10h    WORD    person ID or index
  7689.  12h    WORD    how many groups person is in
  7690.  14h    WORD    person ID
  7691.  16h 20 BYTEs    last name
  7692.  2Ah 20 BYTEs    first name
  7693.  3Eh 32 BYTEs    company
  7694.  5Eh 32 BYTEs    notes
  7695.  7Eh  6 BYTEs    FAX country code
  7696.  84h  6 BYTEs    FAX city/area code
  7697.  8Ah 14 BYTEs    FAX local number
  7698.  98h 14 BYTEs    FAX extension
  7699.  A6h 24 BYTEs    reserved
  7700.  BEh  6 BYTEs    voice country code
  7701.  C4h  6 BYTEs    voice city/area code
  7702.  CAh 14 BYTEs    voice local number
  7703.  D8h 14 BYTEs    voice extension
  7704.  E6h 24 BYTEs    reserved
  7705.  FEh 10 BYTEs    outbound routing information
  7706. 108h 10 BYTEs    billing information, credit card etc
  7707. 112h    DWORD    remote FAX capabilities
  7708. 116h 21 BYTEs    T.30 poll code of FAX number
  7709. 12Bh 15 BYTEs    reserved
  7710. 13Ah  6 BYTEs    future expansion
  7711. 140h    WORD    structure size
  7712.  
  7713. Format of FaxBIOS SCHED_OPEN, SCHED_CANCEL command buffer:
  7714. Offset    Size    Description    (Table 2628)
  7715.  00h 12 BYTEs    common data (see #2621)
  7716.  0Ch    WORD    scheduler handle
  7717.  0Eh  6 BYTEs    future expansion
  7718.  14h    WORD    structure size
  7719.  
  7720. Format of FaxBIOS SCHED_ADD_DEST command buffer:
  7721. Offset    Size    Description    (Table 2629)
  7722.  00h 12 BYTEs    common data (see #2621)
  7723.  0Ch    WORD    schedule handle
  7724.  0Eh    WORD    device number if manual send wanted
  7725.  10h    WORD    non-zero if poll desired
  7726.  12h    WORD    person ID
  7727.  14h 20 BYTEs    last name
  7728.  28h 20 BYTEs    first name
  7729.  3Ch 32 BYTEs    company
  7730.  5Ch 32 BYTEs    notes
  7731.  7Ch  6 BYTEs    FAX country code
  7732.  82h  6 BYTEs    FAX city/area code
  7733.  88h 14 BYTEs    FAX local number
  7734.  96h 14 BYTEs    FAX extension
  7735.  A4h 24 BYTEs    reserved
  7736.  BCh  6 BYTEs    voice country code
  7737.  C2h  6 BYTEs    voice city/area code
  7738.  C8h 14 BYTEs    voice local number
  7739.  D6h 14 BYTEs    voice extension
  7740.  E4h 24 BYTEs    reserved
  7741.  FCh 10 BYTEs    outbound routing information
  7742. 106h 10 BYTEs    billing information, credit card etc
  7743. 110h    DWORD    remote FAX capabilities
  7744. 114h 21 BYTEs    T.30 poll code of FAX number
  7745. 129h 15 BYTEs    reserved
  7746. 138h  6 BYTEs    future expansion
  7747. 13Eh    WORD    structure size
  7748. SeeAlso: #2630
  7749.  
  7750. Format of FaxBIOS SCHED_ADD_FILE command buffer:
  7751. Offset    Size    Description    (Table 2630)
  7752.  00h 12 BYTEs    common data (see #2621)
  7753.  0Ch    WORD    schedule handle
  7754.  0Eh    WORD    file type
  7755.         0000h unidentified
  7756.         0001h native file format
  7757.         0002h ASCII
  7758.         0003h FaxBIOS Tiff Class F
  7759.  10h 80 BYTEs    file name
  7760.  60h 80 BYTEs    font token
  7761.  B0h    WORD    conversion options bitmap
  7762.  B2h    WORD    resolution
  7763.         0000h standard 98 lines per inch, 204 dpi
  7764.         0001h fine 196 lines per inch, 204 dpi
  7765.         0002h Group4 300 dpi
  7766.         0003h Group4 400 dpi
  7767.  B4h    WORD    page length
  7768.         0000h 279 mm (11 in)
  7769.         0001h 297 mm (11.69 in)
  7770.         0002h 364 mm (14.33 in)
  7771.         0003h unlimited
  7772.  B6h    WORD    page width
  7773.         0000h 215 mm (8.46 in)
  7774.         0001h 255 mm (10.04 in)
  7775.         0002h 303 mm (11.93 in)
  7776.         0003h 151 mm (5.91 in)
  7777.         0004h 107 mm (4.21 in)
  7778.  B8h    WORD    binary file transfer specification
  7779.         0000h only as FAX
  7780.         0001h only as file (for non-faxable files)
  7781.         0002h as file when possible else FAX
  7782.  BAh    WORD    seam flag (nonzero for seam with next)
  7783.  BCh    WORD    delete flag (nonzero to delete when done)
  7784.  BEh  6 BYTEs    future expansion
  7785.  C4h    WORD    structure size
  7786. SeeAlso: #2629,#2631
  7787.  
  7788. Format of FaxBIOS SCHED_SET_PARAMS command buffer:
  7789. Offset    Size    Description    (Table 2631)
  7790.  00h 12 BYTEs    common data (see #2621)
  7791.  0Ch    WORD    scheduler handle
  7792.  0Eh    DWORD    time to send
  7793.  10h 10 BYTEs    priority token
  7794.  1Ch 80 BYTEs    logo file token
  7795.  6Ch 80 BYTEs    signature file token
  7796.  BCh 80 BYTEs    cover page token
  7797. 10Ch 40 BYTEs    Subject text
  7798. 134h 40 BYTEs    From text
  7799. 15Ch    WORD    user ID
  7800. 15Eh  6 BYTEs    future expansion
  7801. 164h    WORD    structure size
  7802. SeeAlso: #2629,#2630,#2632
  7803.  
  7804. Format of FaxBIOS SCHED_CLOSE command buffer:
  7805. Offset    Size    Description    (Table 2632)
  7806.  00h 12 BYTEs    common data (see #2621)
  7807.  0Ch    WORD    scheduler handle
  7808.  0Eh    WORD    envelope ID generated
  7809.  10h  6 BYTEs    future expansion
  7810.  16h    WORD    structure size
  7811. SeeAlso: #2631
  7812.  
  7813. Format of FaxBIOS SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer:
  7814. Offset    Size    Description    (Table 2633)
  7815.  00h 12 BYTEs    common data (see #2621)
  7816.  0Ch    WORD    log handle
  7817.  0Eh    WORD    number of entries
  7818.  10h  6 BYTEs    future expansion
  7819.  16h    WORD    structure size
  7820.  
  7821. Format of FaxBIOS GRAPH_GET_FILE_TYPE command buffer:
  7822. Offset    Size    Description    (Table 2634)
  7823.  00h 12 BYTEs    common data (see #2621)
  7824.  0Ch 80 BYTEs    filename
  7825.  5Ch    WORD    file type
  7826.         0000h unidentified
  7827.         0001h native file format
  7828.         0002h ASCII
  7829.         0003h FaxBIOS Tiff Class F
  7830.  5Eh    WORD    bitmap of supported capabilities
  7831.  60h  6 BYTEs    future expansion
  7832.  66h    WORD    structure size
  7833. SeeAlso: #2635,#2636
  7834.  
  7835. Format of FaxBIOS GRAPH_CREATE_FILE command buffer:
  7836. Offset    Size    Description    (Table 2635)
  7837.  00h 12 BYTEs    common data (see #2621)
  7838.  0Ch 80 BYTEs    filename
  7839.  5Ch    WORD    graph handle
  7840.  5Eh  6 BYTEs    future expansion
  7841.  64h    WORD    structure size
  7842. SeeAlso: #2634,#2636,#2637
  7843.  
  7844. Format of FaxBIOS GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer:
  7845. Offset    Size    Description    (Table 2636)
  7846.  00h 12 BYTEs    common data (see #2621)
  7847.  0Ch    WORD    graph handle
  7848.  0Eh  6 BYTEs    future expansion
  7849.  14h    WORD    structure size
  7850. SeeAlso: #2635,#2637
  7851.  
  7852. Format of FaxBIOS GRAPH_CREATE_PAGE command buffer:
  7853. Offset    Size    Description    (Table 2637)
  7854.  00h 12 BYTEs    common data (see #2621)
  7855.  0Ch    WORD    graph handle
  7856.  0Eh    WORD    resolution
  7857.  10h    WORD    page width
  7858.  12h  6 BYTEs    future expansion
  7859.  18h    WORD    structure size
  7860. SeeAlso: #2635,#2636,#2638
  7861.  
  7862. Format of FaxBIOS GRAPH_WRITE_PAGE command buffer:
  7863. Offset    Size    Description    (Table 2638)
  7864.  00h 12 BYTEs    common data (see #2621)
  7865.  0Ch    WORD    graph handle
  7866.  0Eh    DWORD    pointer to storage for image
  7867.  12h    WORD    band height in lines
  7868.  14h    WORD    width of page image in bytes
  7869.  16h    WORD    facsimile page width constant
  7870.  18h    WORD    width of page image in bits
  7871.  1Ah    WORD    number of bytes actually processed
  7872.  1Ch  6 BYTEs    future expansion
  7873.  22h    WORD    structure size
  7874. SeeAlso: #2637,#2639
  7875.  
  7876. Format of FaxBIOS GRAPH_OPEN_FILE command buffer:
  7877. Offset    Size    Description    (Table 2639)
  7878.  00h 12 BYTEs    common data (see #2621)
  7879.  0Ch 80 BYTEs    filename
  7880.  5Ch    WORD    file type
  7881.  5Eh    WORD    graph handle
  7882.  60h    WORD    number of pages
  7883.  62h  6 BYTEs    future expansion
  7884.  68h    WORD    structure size
  7885. SeeAlso: #2638,#2640
  7886.  
  7887. Format of FaxBIOS GRAPH_GOTO_PAGE command buffer:
  7888. Offset    Size    Description    (Table 2640)
  7889.  00h 12 BYTEs    common data (see #2621)
  7890.  0Ch    WORD    graph handle
  7891.  0Eh    WORD    page number
  7892.  10h    WORD    vertical resolution
  7893.  12h    WORD    page width
  7894.  14h    DWORD    page length
  7895.  18h  6 BYTEs    future expansion
  7896.  1Eh    WORD    structure size
  7897. SeeAlso: #2638,#2639,#2641
  7898.  
  7899. Format of FaxBIOS GRAPH_READ_PAGE command buffer:
  7900. Offset    Size    Description    (Table 2641)
  7901.  00h 12 BYTEs    common data (see #2621)
  7902.  0Ch    WORD    graph handle
  7903.  0Eh    DWORD    pointer to storage for image
  7904.  12h    WORD    band height in lines
  7905.  14h    WORD    width of page image in bytes
  7906.  16h    WORD    facsimile page width constant
  7907.  18h    WORD    width of page image in bits
  7908.  1Ah    WORD    number of bytes actually processed
  7909.  1Ch  6 BYTEs    future expansion
  7910.  22h    WORD    structure size
  7911.  
  7912. Format of FaxBIOS IOCTL_ANSWER_FAX command buffer:
  7913. Offset    Size    Description    (Table 2642)
  7914.  00h 12 BYTEs    common data (see #2621)
  7915.  0Ch    WORD    device number
  7916.  0Eh  6 BYTEs    future expansion
  7917.  14h    WORD    structure size
  7918. SeeAlso: #2643
  7919.  
  7920. Format of FaxBIOS IOCTL_DIAL command buffer:
  7921. Offset    Size    Description    (Table 2643)
  7922.  00h 12 BYTEs    common data (see #2621)
  7923.  0Ch    WORD    device number
  7924.  0Eh  6 BYTEs    country code
  7925.  14h  6 BYTEs    city or area code
  7926.  1Ah 14 BYTEs    local number
  7927.  28h 14 BYTEs    extension
  7928.  36h 14 BYTEs    reserved
  7929.  4Eh  6 BYTEs    future expansion
  7930.  54h    WORD    structure size
  7931. SeeAlso: #2642
  7932. --------N-2F8100-----------------------------
  7933. INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK
  7934.     AX = 8100h
  7935. Return: AL = FFh if installed
  7936. Program: TurboNET is a NetBIOS-based file redirector and server; a
  7937.       demonstration version may be downloaded from Nanosoft's BBS
  7938. SeeAlso: AX=8000h"TurboNET"
  7939. --------N-2F8101-----------------------------
  7940. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7941.     AX = 8101h
  7942. Return: AL = ???
  7943.     DL = ???
  7944. --------N-2F8102-----------------------------
  7945. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7946.     AX = 8102h
  7947. Return: AL = ???
  7948.     DL = ???
  7949. --------N-2F8103-----------------------------
  7950. INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME???
  7951.     AX = 8103h
  7952.     ES:DI -> 17-byte buffer
  7953. Return: buffer filled
  7954. --------N-2F8104-----------------------------
  7955. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7956.     AX = 8104h
  7957.     BL = ???
  7958.     BH = ???
  7959.     CX = ???
  7960.     DX = ???
  7961.     DS:SI -> 16-byte buffer containing ???
  7962. Return: AL = 00h ???
  7963. --------N-2F8105-----------------------------
  7964. INT 2F U - Nanosoft, Inc. TurboNET redirector - ???
  7965.     AX = 8105h
  7966.     CX = ??? (don't change current value if 0000h)
  7967.     DX = ??? (don't change current value if 0000h)
  7968. Return: AL = 00h successful
  7969. --------s-2F8200-----------------------------
  7970. INT 2F - RESPLAY - SAMPLE/PLAYBACK
  7971.     AX = 8200h
  7972.     DX:DI -> start of sample space
  7973.     CX:BX = length in bytes
  7974. Return: AX = status (see #2644)
  7975. Program: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  7976. SeeAlso: AX=8201h"RESPLAY",AX=8210h
  7977.  
  7978. (Table 2644)
  7979. Values for RESPLAY status:
  7980.  1000h    successful
  7981.  2000h    not initialized (see AX=8210h)
  7982.  other    RESPLAY not installed
  7983. --------G-2F8200-----------------------------
  7984. INT 2F U - Nanosoft, Inc. CAPDOS - INSTALLATION CHECK
  7985.     AX = 8200h
  7986. Return: AL = FFh if installed
  7987. Program: CAPDOS is a TSR by Nanosoft, Inc. which allows INT 21h calls to be
  7988.       captured and recorded for later analysis
  7989. SeeAlso: AX=8100h,AX=8201h"CAPDOS",AX=8202h"CAPDOS",AX=8203h"CAPDOS"
  7990. SeeAlso: AX=8204h"CAPDOS"
  7991. --------s-2F8201-----------------------------
  7992. INT 2F - RESPLAY - INSTALLATION CHECK
  7993.     AX = 8201h
  7994. Return: AX = 7746h if installed
  7995. SeeAlso: AX=8202h"RESPLAY",AX=8210h
  7996. --------G-2F8201-----------------------------
  7997. INT 2F - Nanosoft, Inc. CAPDOS - CLEAR QUEUE
  7998.     AX = 8201h
  7999. Note:    resets queue of captured INT 21 calls
  8000. SeeAlso: AX=8200h"CAPDOS"
  8001. --------s-2F8202-----------------------------
  8002. INT 2F - RESPLAY - UNINSTALL
  8003.     AX = 8202h
  8004. Return: AX = status
  8005.         1000h successful
  8006. SeeAlso: AX=8201h"RESPLAY",AX=8210h"RESPLAY"
  8007. --------G-2F8202-----------------------------
  8008. INT 2F - Nanosoft, Inc. CAPDOS - START COLLECTION
  8009.     AX = 8202h
  8010. SeeAlso: AX=8200h"CAPDOS",AX=8203h"CAPDOS"
  8011. --------G-2F8203-----------------------------
  8012. INT 2F - Nanosoft, Inc. CAPDOS - STOP COLLECTION
  8013.     AX = 8203h
  8014. SeeAlso: AX=8200h"CAPDOS",AX=8202h"CAPDOS",AX=8204h"CAPDOS"
  8015. --------G-2F8204-----------------------------
  8016. INT 2F - Nanosoft, Inc. CAPDOS - GET QUEUE PARAMETERS
  8017.     AX = 8204h
  8018. Return: AH = flag: queue wrapped if nonzero
  8019.     BX = index of current start of queue
  8020.     CX = size of queue in entries
  8021. SeeAlso: AX=8200h"CAPDOS",AX=8202h"CAPDOS",AX=8205h"CAPDOS"
  8022. --------G-2F8205-----------------------------
  8023. INT 2F - Nanosoft, Inc. CAPDOS - GET QUEUE ITEM
  8024.     AX = 8205h
  8025.     BX = queue item number
  8026. Return: AX,BX,CX,DX,SI,DI,DS,ES as on entry to captured DOS call
  8027. SeeAlso: AX=8200h"CAPDOS",AX=8204h"CAPDOS"
  8028. --------s-2F8210-----------------------------
  8029. INT 2F - RESPLAY - INITIALIZE
  8030.     AX = 8210h
  8031.     BL = sound device number (see #2645)
  8032.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  8033.     CL = direction
  8034.         00h playback
  8035.         01h sample
  8036. Return: AX = status (see #2644)
  8037. SeeAlso: AX=8200h"RESPLAY",AX=8220h"MODRES"
  8038.  
  8039. (Table 2645)
  8040. Values for RESPLAY sound device:
  8041.  00h    printer port LPT1
  8042.  01h    printer port LPT2
  8043.  02h    prototype board at I/O address 0300h
  8044.  03h    printer port (alternative LPT1)
  8045.  04h    internal speaker
  8046. --------s-2F8220-----------------------------
  8047. INT 2F - MODRES - PLAY MODULE
  8048.     AX = 8220h
  8049.     DX:CX -> MODPARM structure (see #2646)
  8050. Return: AX = status
  8051.         5722h succesful
  8052.         2000h parameters out of range
  8053.         other MODRES not installed
  8054. SeeAlso: AX=8221h,AX=8223h,AX=8225h,AX=8227h,AX=8200h"RESPLAY"
  8055.  
  8056. Format of MODPARM Structure:
  8057. Offset    Size    Description    (Table 2646)
  8058.  00h    WORD    signature 504Dh ("MP" = Modparm)
  8059.  02h    BYTE    output device (see #2648 at INT 2F/AX=8221h)
  8060.  03h    WORD    segment of start of main module (pattern) data
  8061.  05h 31    WORDs    segment of start of sample numbers 1-31
  8062.  43h    BYTE    pattern at which to start playing (00h to 7Fh)
  8063.  44h    BYTE    function
  8064.         00h play from pattern [offset 43h] until end of the song
  8065.         01h play indicated pattern [offset 43h] only
  8066.  45h    BYTE    Machine speed
  8067.         00h 10-12Mhz
  8068.         01h 12-25Mhz (default)
  8069.         02h 25Mhz+
  8070.         03h mix speed 10kHz (fast 8Mhz machines)
  8071.         04h mix speed 12kHz (10Mhz machines)
  8072.         05h mix speed 13kHz
  8073.         06h mix speed 8kHz (test for 8Mhz machines)
  8074.  46h    BYTE    allow >64k sample playing
  8075.         80h MOD has samples >64k in it
  8076.         else all samples in MOD are <64k
  8077. Notes:    Main module data and all samples must start on segment boundaries.
  8078.     In version 2.00 (ONLY) this function carries on playing (works in
  8079.       the background)
  8080. SeeAlso: #2647
  8081. --------s-2F8221-----------------------------
  8082. INT 2F - MODRES - INSTALLATION CHECK
  8083.     AX = 8221h
  8084. Return: AX = status
  8085.         5722h successful
  8086.         other MODRES not installed
  8087.     BX = BCD version number (BH = major, BL = minor)
  8088.     DX:CX -> Output Device structure (read-only) (see #2647)
  8089. SeeAlso: AX=8220h,AX=8222h,AX=8225h,AX=8227h
  8090.  
  8091. Format of Output Device structure [array]:
  8092. Offset    Size    Description    (Table 2647)
  8093.  00h 20 BYTEs    ASCIZ name of the output device
  8094.         (end of list if first char is FFh)
  8095.  14h    WORD    apparently always FFFFh
  8096.  16h    WORD    0000h if output device not available
  8097.         else first I/O port for the output device
  8098.  18h    WORD    second I/O port for the output device (for example
  8099.           if it is stereo)
  8100.         000oh if only one port used or device is not available
  8101.  1Ah  7 BYTEs    ???
  8102. SeeAlso: #2646,#2648
  8103.  
  8104. (Table 2648)
  8105. Values for MODRES v1.52 output device index:
  8106.  00h    PC speaker
  8107.  01h    D/A Converter on LPT1
  8108.  02h    D/A Converter on LPT2
  8109.  03h    D/A Converter on LPT3
  8110.  04h    D/A Converter on LPT4
  8111.  05h    D/A Converter on LPT1&LPT2 (stereo)
  8112.  06h    D/A Converter on LPT1&LPT2 (mono)
  8113.  07h    Sound Blaster (port 02x0h)
  8114.  08h    User Defined D/A (mono)
  8115.  09h    User Defined D/A (stereo)
  8116.  0Ah    Stereo-on-1
  8117.  0Bh    Disney SS su LPT1
  8118.  0Ch    Disney SS su LPT2
  8119.  0Dh    Disney SS su LPT3
  8120.  0Eh    Disney SS su LPT4
  8121. Note:    this list may vary between versions of MODRES
  8122. --------s-2F8222-----------------------------
  8123. INT 2F - MODRES - UNINSTALL
  8124.     AX = 8222h
  8125. Return: AX = code segment of the program
  8126. Note:    this function does not release the TSRs memory; the caller must do so
  8127. SeeAlso: AX=8220h,AX=8221h,AX=8223h
  8128. --------s-2F8223-----------------------------
  8129. INT 2F - MODRES - PLAY SAMPLE
  8130.     AX = 8223h
  8131.     DX:CX -> SAMPARM structure (see #2649)
  8132. Return: AX = status
  8133.         5722h succesful
  8134.         2000h parameters out of range
  8135.         other MODRES not installed
  8136. SeeAlso: AX=8221h,AX=8224h,AX=8225h,AX=8226h
  8137.  
  8138. Format of SAMPARM Structure:
  8139. Offset    Size    Description    (Table 2649)
  8140.  00h    WORD    signature 5053h ("SP" = SAMPARM)
  8141.  02h    WORD    segment of start of sample to play
  8142.  04h    WORD    length of sample (IN WORD)
  8143.  06h    BYTE    output device (see #2648 at INT 2F/AX=8221h)
  8144.  07h    WORD    pitch to play (see #2650)
  8145.  09h    BYTE    volume (from 00h to 40h)
  8146.  0Ah    WORD    loop start
  8147.  0Ch    WORD    loop length
  8148.  0Eh    BYTE    machine speed (see INT 2F/AX=8220h)
  8149. SeeAlso: #2646
  8150.  
  8151. (Table 2650)
  8152. Values for Pitch to play::
  8153.  C 0 is    06B0h
  8154.  C#0 is    06B0h / 2^(1/12)
  8155.  D 0 is    (06B0h / 2^(1/12)) / 2^(1/12)
  8156.  ...
  8157. Note:    C 1 is    06B0h / 2
  8158.     C 2 is    06B0h / 4
  8159.     etc.
  8160. SeeAlso: #2649
  8161. --------s-2F8224-----------------------------
  8162. INT 2F - MODRES - ???
  8163.     AX = 8224h
  8164.     DX:CX -> ???
  8165. Return: ???
  8166. SeeAlso: AX=8221h,AX=8223h,AX=8224h
  8167. --------s-2F8225-----------------------------
  8168. INT 2F - MODRES v2.00+ - GET LOCATION IN MOD
  8169.     AX = 8225h
  8170. Return: AL = status
  8171.        00h playing
  8172.        01h reached end or stopped
  8173.     AH = speed of MOD
  8174.     BX = position within pattern 0000h-0400h
  8175.     CL = position within the song (track number)
  8176. SeeAlso: AX=8220h,AX=8221h,AX=8223h,AX=8226h
  8177. --------s-2F8226-----------------------------
  8178. INT 2F - MODRES v2.00+ - STOP PLAYING
  8179.     AX = 8226h
  8180. Return: AX = status
  8181.         5722h succesful
  8182.         other MODRES not installed
  8183. Desc:    stops playing the MOD file before performing critical operations such
  8184.       as disk accesses
  8185. SeeAlso: AX=8220h,AX=8221h,AX=8223h,AX=8225h,AX=8227h
  8186. --------s-2F8227-----------------------------
  8187. INT 2F - MODRES - CONFIGURE
  8188.     AX = 8227h
  8189.     BX = function
  8190.         0001h set default playing speed (06h)
  8191.         0002h select output device
  8192.         CL = output device (see #2648 at INT 2F/AX=8221h)
  8193. Return: AX = status
  8194.         5722h succesful
  8195.         2000h parameters out of range
  8196.         other MODRES not installed
  8197. Note:    function 0001h should be called every time a new module is loaded
  8198. SeeAlso: AX=8220h,AX=8221h,AX=8222h,AX=8223h
  8199. ----------2F86-------------------------------
  8200. INT 2F U - ???
  8201.     AH = 86h
  8202.     AL = function (at least 06h and 07h)
  8203.     ???
  8204. Return: ???
  8205. Note:    called by Codeview for Windows
  8206. SeeAlso: AH=44h
  8207. --------U-2F8900-----------------------------
  8208. INT 2F - WHOA!.COM - INSTALLATION CHECK
  8209.     AX = 8900h
  8210. Return: AL = state
  8211.         00h not installed
  8212.         FFh installed
  8213. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  8214. SeeAlso: AX=8901h,AX=8902h
  8215. --------U-2F8901-----------------------------
  8216. INT 2F - WHOA!.COM - UNINSTALL
  8217.     AX = 8901h
  8218. Return: AL = status
  8219.         FDh successful
  8220.         FEh error
  8221. SeeAlso: AX=8900h
  8222. --------U-2F8902-----------------------------
  8223. INT 2F - WHOA!.COM - SET DELAY COUNT
  8224.     AX = 8902h
  8225.     BX = delay count (larger values slow system down more)
  8226. Return: AL = status
  8227.         FDh successful
  8228.         FEh error
  8229. Program: WHOA!.COM is a system slow-down utility by Brad D Crandall
  8230. SeeAlso: AX=8900h
  8231. --------U-2F9000-----------------------------
  8232. INT 2F U - RAID - INSTALLATION CHECK
  8233.     AX = 9000h
  8234. Return: AL = FFh if installed
  8235. Program: RAID (Resident AID) is a TSR utility program by Ross Neilson
  8236.       Wentworth that resides mostly in EMS
  8237. --------U-2F9001-----------------------------
  8238. INT 2F U - RAID - GET ???
  8239.     AX = 9001h
  8240. Return: DX:AX -> ???
  8241. SeeAlso: AX=9000h
  8242. --------U-2F9002-----------------------------
  8243. INT 2F U - RAID - GET RESIDENT SEGMENT
  8244.     AX = 9002h
  8245. Return: AX = segment of resident (conventional memory) portion
  8246. SeeAlso: AX=9000h
  8247. --------U-2F9003-----------------------------
  8248. INT 2F U - RAID - UNINSTALL
  8249.     AX = 9003h
  8250. Return: ???
  8251. SeeAlso: AX=9000h
  8252. --------U-2F9004-----------------------------
  8253. INT 2F U - RAID - GET ???
  8254.     AX = 9004h
  8255. Return: AX = first available paragraph past end of resident portion???
  8256.     CX destroyed
  8257. SeeAlso: AX=9000h
  8258. --------e-2F92-------------------------------
  8259. INT 2F - Network Courier E-Mail - API
  8260.     AH = 92h
  8261.     AL = function
  8262.         00h installation check
  8263.         01h uninstall
  8264.         02h pop down MICRO.EXE notification window
  8265.         03h ???
  8266.         04h ???
  8267.         05h ???
  8268. Return: ???
  8269. Program: The Network Courier is an electronic mail package by Consumers
  8270.       Software of Vancouver, BC which was bought by Microsoft in 1991 and
  8271.       renamed Microsoft Mail v3.0.
  8272. SeeAlso: AX=9400h,AX=9401h,AX=9402h,AH=9Ch
  8273. Index:    installation check;Network Courier E-Mail
  8274. Index:    uninstall;Network Courier E-Mail
  8275. --------R-2F9200-----------------------------
  8276. INT 2F U - PC Tools v8.0 DRIVEMAP - BUG
  8277.     AX = 9200h
  8278. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8279.       over the parallel or serial ports to appear as local drives
  8280. BUG:    jumps to data because jump table entry is 0000h
  8281. Note:    DRIVEMAP returns AX=FFFFh if not a valid function number in AL
  8282. --------R-2F9201-----------------------------
  8283. INT 2F U - PC Tools v8.0 DRIVEMAP - CHECK IF MAPPED DRIVE
  8284.     AX = 9201h
  8285.     DL = drive number (01h = A:, etc.)
  8286. Return: AL = 92h if mapped drive
  8287.     AH may be destroyed (v8.0 DRIVEMAP returns AX=0000h if not mapped)
  8288. SeeAlso: AX=9204h,AX=920Bh
  8289. --------R-2F9202-----------------------------
  8290. INT 2F U - PC Tools v8.0 DRIVEMAP - UNINSTALL
  8291.     AX = 9202h
  8292.     BX = caller's CS
  8293. Return: AX = status
  8294.         0000h failed
  8295.         nonzero successful
  8296. SeeAlso: AX=9204h
  8297. --------R-2F9203-----------------------------
  8298. INT 2F U - PC Tools v8.0 DRIVEMAP - GET VERSION
  8299.     AX = 9203h
  8300. Return: AH = major version
  8301.     AL = minor version
  8302.     CX = segment of resident code
  8303. Note:    the DRIVEMAP included with PC Tools v8.0 is version 1.00
  8304. SeeAlso: AX=9204h,INT 16/AX=FF70h
  8305. --------R-2F9204-----------------------------
  8306. INT 2F U - PC Tools v8.0 DRIVEMAP - INSTALLATION CHECK
  8307.     AX = 9204h
  8308. Return: AX = 9200h if installed
  8309.        BL = ???
  8310.        CX = segment of resident code
  8311. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8312.       over the parallel or serial ports to appear as local drives
  8313. SeeAlso: AX=9201h,AX=9202h,AX=9203h
  8314. --------R-2F9205-----------------------------
  8315. INT 2F U - PC Tools v8.0 DRIVEMAP - SET ???
  8316.     AX = 9205h
  8317.     BX = ??? to set
  8318. Return: CX = new value of ???
  8319. --------R-2F9206-----------------------------
  8320. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8321.     AX = 9206h
  8322.     ???
  8323. Return: ???
  8324. --------R-2F9207-----------------------------
  8325. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8326.     AX = 9207h
  8327.     ???
  8328. Return: AX = ???
  8329. --------R-2F9208-----------------------------
  8330. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8331.     AX = 9208h
  8332.     ???
  8333. Return: ???
  8334. --------R-2F9209-----------------------------
  8335. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8336.     AX = 9209h
  8337.     ???
  8338. Return: AX = ???
  8339.     BX = ???
  8340.     CX = ???
  8341.     DX = ???
  8342. --------R-2F920A-----------------------------
  8343. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8344.     AX = 920Ah
  8345.     BX = ???
  8346. Return: AX = ??? or FFFBh on error
  8347. --------R-2F920B-----------------------------
  8348. INT 2F U - PC Tools v8.0 DRIVEMAP - SET DRIVE MAPPING
  8349.     AX = 920Bh
  8350.     BL = drive letter (41h ['A'] = A:, etc)
  8351.     CX = ??? (0000h removes mapping)
  8352. Return: AX = ??? or FFF8h on error
  8353. SeeAlso: AX=9201h,AX=920Dh
  8354. --------R-2F920C-----------------------------
  8355. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8356.     AX = 920Ch
  8357.     ???
  8358. Return: AX = ??? (0002h)
  8359.     CX = ??? (0000h)
  8360. --------R-2F920D-----------------------------
  8361. INT 2F U - PC Tools v8.0 DRIVEMAP - GET DRIVE TYPE
  8362.     AX = 920Dh
  8363.     BL = drive letter (41h ['A'] = A:, etc)
  8364. Return: AX = type flags
  8365.         bit 0: ???
  8366.         bit 1: available
  8367.         bit 5: local
  8368.     BX = ???
  8369.     CX = segment of resident code (apparently an unintended side effect)
  8370. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8371.       over the parallel or serial ports to appear as local drives
  8372. SeeAlso: AX=9218h,INT 16/AX=FF70h
  8373. --------R-2F920E-----------------------------
  8374. INT 2F U - PC Tools v8.0 DRIVEMAP - SET LPT MAPPING
  8375.     AX = 920Eh
  8376.     BX = port number (0-2)
  8377.     CX = ??? (0000h to unmap)
  8378. Return: ???
  8379. --------R-2F920F-----------------------------
  8380. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8381.     AX = 920Fh
  8382.     ES:DI -> 3-byte buffer for ???
  8383. Return: CX = 0000h
  8384.     ES:DI buffer filled
  8385. --------R-2F9210-----------------------------
  8386. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8387.     AX = 9210h
  8388.     ???
  8389. Return: ???
  8390. --------R-2F9211-----------------------------
  8391. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8392.     AX = 9211h
  8393.     ES:DI -> 8-word buffer for ???
  8394. Return: CX = 0000h
  8395.     ES:DI buffer filled
  8396. --------R-2F9212-----------------------------
  8397. INT 2F U - PC Tools v8.0 DRIVEMAP - CRITICAL SECTION???
  8398.     AX = 9212h
  8399.     BX = phase
  8400.         0000h leave critical section???
  8401.         nonzero enter critical section???
  8402. --------R-2F9213-----------------------------
  8403. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8404.     AX = 9213h
  8405.     BX = function number (0000h-000Bh)
  8406.     ???
  8407. Return: ???
  8408. --------R-2F9214-----------------------------
  8409. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8410.     AX = 9214h
  8411.     ES:DI -> 6-word buffer for ???
  8412. Return: CX = 0000h
  8413.     AX = ???
  8414.     ES:DI buffer filled
  8415. --------R-2F9215-----------------------------
  8416. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8417.     AX = 9215h
  8418.     ES:DI -> 100-word buffer for ???
  8419. Return: CX = 0000h
  8420.     ES:DI buffer filled
  8421. --------R-2F9216-----------------------------
  8422. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8423.     AX = 9216h
  8424.     ES:DI -> ???
  8425. Return: ???
  8426. --------R-2F9217-----------------------------
  8427. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8428.     AX = 9217h
  8429.     DS:SI -> 25-word buffer containing ???
  8430. Return: ???
  8431. --------R-2F9218-----------------------------
  8432. INT 2F U - PC Tools v8.0 DRIVEMAP - GET LPT TYPE???
  8433.     AX = 9218h
  8434.     BX = port number???
  8435. Return: AX = ???
  8436.     BX = ??? (0000h)
  8437.     CX = ??? (0000h)
  8438. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8439.       over the parallel or serial ports to appear as local drives
  8440. --------R-2F9219-----------------------------
  8441. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8442.     AX = 9219h
  8443.     ???
  8444. Return: ???
  8445. --------R-2F921A-----------------------------
  8446. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8447.     AX = 921Ah
  8448.     ???
  8449. Return: AH = ???
  8450.     AL = ???
  8451.     BX = ???
  8452. --------R-2F921B-----------------------------
  8453. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8454.     AX = 921Bh
  8455.     ???
  8456. Return: AX = ???
  8457.     CX = segment of resident code (apparently an unintended side effect)
  8458. --------R-2F921C-----------------------------
  8459. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8460.     AX = 921Ch
  8461.     ???
  8462. Return: ???
  8463. --------R-2F921D-----------------------------
  8464. INT 2F U - PC Tools v8.0 DRIVEMAP - GET ???
  8465.     AX = 921Dh
  8466. Return: AX = ???
  8467. --------R-2F921E-----------------------------
  8468. INT 2F U - PC Tools v8.0 DRIVEMAP - ???
  8469.     AX = 921Eh
  8470.     ???
  8471. Return: ???
  8472. Program: DRIVEMAP is a redirector which allows drives on computers connected
  8473.       over the parallel or serial ports to appear as local drives
  8474. Note:    this function sets two variables to 24h each
  8475. SeeAlso: INT 16/AX=FF70h
  8476. --------V-2F93-------------------------------
  8477. INT 2F - InnerMission v1.7+ - INSTALLATION CHECK
  8478.     AH = 93h
  8479.     BX = CX = AX
  8480. Return: AL = state
  8481.         FFh if installed and BX=CX=AX on entry
  8482.         BX = segment of resident code
  8483.         01h if installed but BX or CX differ from AX (multiplex number not
  8484.           available)
  8485. Program: InnerMission is a shareware graphical screen blanker by Kevin Stokes
  8486. SeeAlso: INT 14/AX=AA01h,INT 2F/AX=6400h
  8487. Index:    screen saver;InnerMission
  8488. --------e-2F9400-----------------------------
  8489. INT 2F - MICRO.EXE - INSTALLATION CHECK
  8490.     AX = 9400h
  8491. Return: AL = 07h or 08h if installed
  8492. Program: MICRO.EXE is a TSR of the Microsoft Mail part of Workgroup Connection
  8493. SeeAlso: AH=92h"Network Courier",AX=9401h,AX=9402h,AX=9403h,AX=9404h
  8494. SeeAlso: INT 21/AH=3Fh"WORKGRP.SYS"
  8495. --------e-2F9401-----------------------------
  8496. INT 2F - MICRO.EXE - SET ??? FLAG
  8497.     AX = 9401h
  8498. SeeAlso: AX=9400h,AX=9403h
  8499. --------e-2F9402-----------------------------
  8500. INT 2F - MICRO.EXE - ???
  8501.     AX = 9402h
  8502.     ???
  8503. Return: ???
  8504. SeeAlso: AX=9400h
  8505. --------e-2F9403-----------------------------
  8506. INT 2F - MICRO.EXE - SET ??? FLAG
  8507.     AX = 9403h
  8508. SeeAlso: AX=9400h,AX=9404h
  8509. --------e-2F9404-----------------------------
  8510. INT 2F - MICRO.EXE - CLEAR ??? FLAG
  8511.     AX = 9404h
  8512.     ES:DI -> name of executable from which MICRO.EXE was started
  8513. Note:    if the specified name is identical to the name of the program file
  8514.       from which MICRO was started, the ??? flag is cleared; otherwise,
  8515.       it is left unchanged
  8516. SeeAlso: AX=9400h,AX=9403h
  8517. --------V-2F96C7-----------------------------
  8518. INT 2F U - STRETCH - INSTALLATION CHECK
  8519.     AX = 96C7h
  8520. Return: AX = AAAAh if installed
  8521. Program: stretch.exe is a TSR for Toshiba Laptops with WD90C24 video chip
  8522.       to avoid blank screen areas in VGA text modes by increasing
  8523.       inter-line spacing
  8524. ----------2F97-------------------------------
  8525. INT 2F U - Micro Focus COBOL v3.1.31 internal - ???
  8526.     AH = 97h
  8527.     AL = function
  8528.         00h installation check
  8529.         Return: AL = FFh if installed
  8530.         08h get ???
  8531.         Return: AL = ???
  8532.             BX = ???
  8533.             DX = ???
  8534.             AH destroyed
  8535.         20h get ???
  8536.         Return: AX:BX = far entry point of ???
  8537.             CX = segment of ???
  8538.         80h ???
  8539.         Return: ???
  8540. Notes:    Micro Focus COBOL compiler v3.1.31 and companion programs supply
  8541.       these functions for internal use; these programs call the
  8542.       installation check at startup (before installing the INT 2F
  8543.       handler) and crash the system if a not authorized program answers
  8544.       with AL=FFh
  8545.     the handler checks AL only if an internal flag is 1, otherwise ???
  8546. SeeAlso: AH=98h"COBOL",AH=99h"COBOL",AH=9Ah"COBOL"
  8547. ----------2F98-------------------------------
  8548. INT 2F U - Micro Focus COBOL v3.1.31 internal - ???
  8549.     AH = 98h
  8550.     AL = function
  8551.         00h installation check
  8552.         Return: AL = FFh if installed
  8553.         10h get ???
  8554.         Return: AX = ???
  8555.         18h get segment of ???
  8556.         Return: AX = segment of ???
  8557.         19h get pointer to ???
  8558.         Return: AX:BX -> ???
  8559. Notes:    Micro Focus COBOL compiler v3.1.31 and companion programs supply
  8560.       these functions for internal use; these programs call the
  8561.       installation check at startup (before installing the INT 2F
  8562.       handler) and crash the system if a not authorized program answers
  8563.       with AL=FFh
  8564.     the handler checks AL only if an internal flag is 0, otherwise ???
  8565. SeeAlso: AH=97h"COBOL",AH=99h"COBOL",AH=9Ah"COBOL"
  8566. --------V-2F9800-----------------------------
  8567. INT 2F U - S3RMDRV.SYS - INSTALLATION CHECK / VERSION CHECK
  8568.     AX = 9800h
  8569.     BX = function
  8570.         0000h installation check
  8571.         Return: AX = 524Dh ('RM') if installed
  8572.         0001h get driver version
  8573.         Return: AX = driver version (AH=major, AL=BCD minor)
  8574. Program: S3RMDRV.SYS provides support for the S3 MPEG driver FMPDRV
  8575. SeeAlso: AX=9803h
  8576. --------V-2F9803-----------------------------
  8577. INT 2F U - S3RMDRV.SYS - COPY ??? INTO USER BUFFER
  8578.     AX = 9803h
  8579.     DX:BX -> 116-byte buffer for ASCIZ ???
  8580. Return: AX = 0000h
  8581.     DX:BX buffer filled with string stored in driver from its parameter
  8582.       list when it was loaded
  8583. Note:    the examined version of the driver returns CF set for any AL other
  8584.       than 00h or 03h
  8585. SeeAlso: AX=9800h
  8586. ----------2F99-------------------------------
  8587. INT 2F U - Micro Focus COBOL v3.1.31 internal - ???
  8588.     AH = 99h
  8589.     ???
  8590. Return: ???
  8591. Note:    used internally by Micro Focus COBOL compiler v3.1.31 and companion
  8592.       programs
  8593. SeeAlso: AH=97h"COBOL",AH=98h"COBOL",AH=9Ah"COBOL"
  8594. --------l-2F9900-----------------------------
  8595. INT 2F U - DOS Navigator II - INSTALLATION CHECK
  8596.     AX = 9900h
  8597. Return: BX = 444Eh ('DN') if installed
  8598.         AX = number of DOS Navigator executions
  8599.         CL = child process exit code
  8600.         DX = version number (see #3759)
  8601. Notes:    old versions of DOS Navigator II always returned AH=1, while newer
  8602.       ones return AH=0 and store AL in the DN.FLG file
  8603. Program: DOS Navigator is a multi-window shell for MS-DOS by RIT S.R.L.
  8604.       DOS Navigator(TM) is a registered trademark of RIT S.R.L.
  8605. SeeAlso: AX=9901h,AX=9902h,AX=9903h,AX=9904h,AX=9905h,AX=9906h
  8606.  
  8607. (Table 3759)
  8608. Values for DOS Navigator II version code:
  8609.  2100h    version 1.35
  8610.  2138h    version 1.38
  8611.  2141h    version 1.41
  8612.  2150h    version 1.50
  8613. --------l-2F9901-----------------------------
  8614. INT 2F U - DOS Navigator II - RETURN POINTER TO COMMAND LINE
  8615.     AX = 9901h
  8616. Return: ES:BX -> command line (terminated with 0Dh)
  8617.     AX = ES
  8618. SeeAlso: AX=9900h,AX=9902h,AX=9903h
  8619. --------l-2F9902-----------------------------
  8620. INT 2F U - DOS Navigator II - SET 'TRUE' EXIT CODE OF DN.PRG
  8621.     AX = 9902h
  8622.     CL = exit code
  8623. Return: AX destroyed
  8624. SeeAlso: AX=9900h,AX=9901h,AX=9903h
  8625. --------l-2F9903-----------------------------
  8626. INT 2F U - DOS Navigator II - SPECIFY HOW TO EXECUTE COMMANDS
  8627.     AX = 9903h
  8628.     CL = 1 to use INT 2E
  8629.     CL <> 1 to use INT 21/AH=4Bh
  8630. SeeAlso: AX=9900h,AX=9901h,AX=9902h
  8631. --------l-2F9904-----------------------------
  8632. INT 2F U - DOS Navigator II v1.49 - SET ???
  8633.     AX = 9904h
  8634.     CX:DX = new value for ???
  8635. SeeAlso: AX=9900h,AX=9905h,AX=9906h
  8636. --------l-2F9905-----------------------------
  8637. INT 2F U - DOS Navigator II v1.49 - GET ???
  8638.     AX = 9905h
  8639. Return: CX:DX = current value of ??? (set by AX=9904h)
  8640. SeeAlso: AX=9900h,AX=9904h,AX=9906h
  8641. --------l-2F9906-----------------------------
  8642. INT 2F U - DOS Navigator II v1.49 - GET ???
  8643.     AX = 9906h
  8644.     DX = new value for ??? (bit 15 must be set, otherwise not changed)
  8645. Return: CX = previous value for ???
  8646. SeeAlso: AX=9900h,AX=9904h,AX=9905h
  8647. ----------2F9A-------------------------------
  8648. INT 2F U - Micro Focus COBOL v3.1.31 internal - ???
  8649.     AH = 9Ah
  8650.     ???
  8651. Return: ???
  8652. Note:    used internally by Micro Focus COBOL compiler v3.1.31 and companion
  8653.       programs
  8654. SeeAlso: AH=97h"COBOL",AH=98h"COBOL",AH=99h"COBOL"
  8655. --------e-2F9C-------------------------------
  8656. INT 2F - Network Courier E-Mail OPERATOR.EXE - API
  8657.     AH = 9Ch
  8658.     AL = subfunction
  8659.         01h uninstall
  8660. Return: ???
  8661. Program: The Network Courier is an electronic mail package by Consumers
  8662.       Software of Vancouver, BC which was bought by Microsoft in 1991 and
  8663.       renamed Microsoft Mail v3.0.
  8664. SeeAlso: AH=92h
  8665. Index:    uninstall;Network Courier E-Mail OPERATOR.EXE
  8666. --------G-2F9E00-----------------------------
  8667. INT 2F U - INTMON v2.1 - INSTALLATION CHECK
  8668.     AX = 9E00h
  8669. Return: AX = FFFFh if installed
  8670.         BX = segment of resident code
  8671. Program: INTMON is a shareware interactive interrupt monitoring TSR for 386
  8672.       and higher machines by Celso Minnitti, Jr.
  8673. SeeAlso: AX=9E01h,AX=9E02h,AX=9E03h,AX=9F00h
  8674. --------G-2F9E01-----------------------------
  8675. INT 2F U - INTMON v2.1 - RESET
  8676.     AX = 9E01h
  8677. Return: ???
  8678. Desc:    this function specifies that INTMON should assume that any interrupts
  8679.       on which it is currently awaiting a return have completed (i.e.
  8680.       interrupts which never return such as INT 20 and INT 27)
  8681. SeeAlso: AX=9E00h,AX=9E03h
  8682. --------G-2F9E02-----------------------------
  8683. INT 2F U - INTMON v2.1 - DISPLAY CPU REGISTERS???
  8684.     AX = 9E02h
  8685. Return: ???
  8686. SeeAlso: AX=9E00h
  8687. --------G-2F9E03-----------------------------
  8688. INT 2F U - INTMON v2.1 - HOOK INTERRUPT???
  8689.     AX = 9E03h
  8690.     BH = interrupt number???
  8691. Return: ???
  8692. Note:    if AL > 03h on entry, INTMON 2.1 returns immediately
  8693. SeeAlso: AX=9E00h,AX=9E01h
  8694. --------G-2F9F00-----------------------------
  8695. INT 2F U - INTCFG v2.1 - INSTALLATION CHECK
  8696.     AX = 9F00h
  8697. Return: AX = FFFFh if installed
  8698. Program: INTCFG is an optionally-resident control program for INTMON by Celso
  8699.       Minnitti, Jr.
  8700. SeeAlso: AX=9E00h,AX=9F01h,AX=9F30h,AX=9F49h
  8701. --------G-2F9F01-----------------------------
  8702. INT 2F U - INTCFG v2.1 - ???
  8703.     AX = 9F01h
  8704.     ???
  8705. Return: ???
  8706. SeeAlso: AX=9F00h
  8707. --------G-2F9F30-----------------------------
  8708. INT 2F U - INTCFG v2.1 - GET ???
  8709.     AX = 9F30h
  8710. Return: AX = ??? (0002h)
  8711. SeeAlso: AX=9F00h
  8712. --------G-2F9F49-----------------------------
  8713. INT 2F U - INTCFG v2.1 - UNINSTALL
  8714.     AX = 9F49h
  8715. Return: AX,DX,DS,ES destroyed
  8716. SeeAlso: AX=9F00h
  8717. --------E-2FA1--BX0081-----------------------
  8718. INT 2F - Ergo DOS extenders - INSTALLATION CHECK
  8719.     AH = A1h
  8720.     BX = 0081h
  8721.     AL = which
  8722.         FEh OS/286,OS/386
  8723.         FFh HummingBoard DOS extender
  8724.     ES:DI -> 16-byte buffer
  8725. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  8726. Note:    since TKERNEL is a licensed version, it is likely that subfunctions
  8727.       BX=0082h and BX=0084h are present and function identically to the
  8728.       AX=FBA1h/BX=008xh calls
  8729. SeeAlso: AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  8730. --------m-2FA189-----------------------------
  8731. INT 2F U - Biologic HRAMDEV.SYS - API
  8732.     AX = A189h
  8733.     BX = subfunction
  8734.         0000h set ???
  8735.         0001h remove ???
  8736.         0002h get status ???
  8737.         0003h enable ???
  8738.         0004h disable ???
  8739.         0005h set ??? flag
  8740.         0006h clear ??? flag
  8741.         0007h set ??? flag
  8742.         0008h clear ??? flag
  8743.         0009h set ???
  8744.     ES:DI -> function-specific arguments
  8745.         if func 0000h: 20-byte buffer containing ???
  8746.         if func 0001h: 20-byte buffer for returned ???
  8747.         if func 0002h: 16-byte buffer for returned ???
  8748.         if func 0009h: WORD containing ???
  8749. Return: BX = A189h if installed
  8750.     AH = status
  8751.         00h successful
  8752.         FFh failed or invalid function number
  8753. Program: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which
  8754.       provides improved high memory access under MS-DOS 5.0
  8755. Note:    functions 00h and 01h use a stack of four entries; function 01h always
  8756.       removes the values stored with the most recent function 00h call
  8757.       which has not yet been matched with a function 01h call.
  8758. --------U-2FA4E0-----------------------------
  8759. INT 2F - Futurus Team - INSTALLATION CHECK
  8760.     AX = A4E0h
  8761. Return: AL = 52h ("R") if installed
  8762.         AH = major version plus 30h ("0")
  8763.         ES:BX -> ??? (INT A4 handler???)
  8764. Note:    older versions of Right Hand Man (from which Team evolved) store the
  8765.       signature "RH" at offset 103h in the INT 2F handler's segment
  8766. SeeAlso: INT A4"Right Hand Man"
  8767. --------U-2FA900-----------------------------
  8768. INT 2F - METZTSR.COM - INSTALLATION CHECK
  8769.     AX = A900h
  8770.     CF set
  8771. Return: CF clear if resident
  8772.         AX = 97FFh
  8773.     CF set if not present
  8774. Notes:    METZTSR.COM prevents METZ applications (such as the MAGIC screen
  8775.       saver) inactivity timeout while running a DOSapp under MS Windows.
  8776.     the default multiplex number is A9h, but may be set to any value from
  8777.       80h to FFh with a commandline switch
  8778. SeeAlso: AX=A901h,AX=A902h
  8779. --------U-2FA901-----------------------------
  8780. INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY
  8781.     AX = A901h
  8782.     CF set
  8783. Return: CF clear if successful
  8784.         AX:DX = BIOS time at which INT 09 was last invoked
  8785.     CF set if not present
  8786. SeeAlso: INT 09,INT 1A/AH=00h
  8787. --------U-2FA902-----------------------------
  8788. INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG
  8789.     AX = A902h
  8790.     BL = new value
  8791.         00h Ctrl-Alt-Del not allowed
  8792.         else Ctrl-Alt-Del allowed (startup default is 01h)
  8793.     CF set
  8794. Return: CF clear if successful
  8795.         AX = 97FFh
  8796.     CF set if not resident
  8797. SeeAlso: AX=A903h
  8798. --------U-2FA903-----------------------------
  8799. INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG
  8800.     AX = A903h
  8801.     CF set
  8802. Return: CF clear if successful
  8803.         AX = 97FFh if Ctrl-Alt-Del allowed
  8804.         AX = 0000h if Ctrl-Alt-Del not allowed
  8805.     CF set if not resident
  8806. SeeAlso: AX=A902h
  8807. --------U-2FAA-------------------------------
  8808. INT 2F - Player's Tool 3.996b+ - UNINSTALL
  8809.     AH = AAh
  8810. Return: AL = status
  8811.         00h unloaded successfully
  8812.         01h unable to unload: in DOS shell
  8813. Program: Player's Tool is a game cheater by Dima Yakunin & Andy Robinson
  8814. SeeAlso: AH=ABh"Player's Tool",AH=ACh"Player's Tool",INT 10/AH=AAh
  8815. --------U-2FAA00-----------------------------
  8816. INT 2F - VIDCLOCK.COM - INSTALLATION CHECK
  8817.     AX = AA00h
  8818. Return: AL = 00h not installed
  8819.          FFh installed
  8820. Program: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  8821. --------U-2FAB-------------------------------
  8822. INT 2F - Player's Tool 3.996b+ - INSTALLATION CHECK
  8823.     AH = ABh
  8824. Return: BH = FFh if installed
  8825.         BL = DOS shell state
  8826.         01h in DOS shell
  8827.         00h not in DOS shell
  8828. SeeAlso: AH=AAh"Player's Tool",AH=ACh"Player's Tool",INT 10/AH=ABh
  8829. --------f-2FAB00-----------------------------
  8830. INT 2F - Btrieve Multi-User - INSTALLATION CHECK
  8831.     AX = AB00h
  8832. Return: AL = 4Dh if installed
  8833. SeeAlso: AX=AB01h,AX=AB02h,INT 7B"Btrieve"
  8834. ----------2FAB00-----------------------------
  8835. INT 2F - SRSoft MODAL PC v2+ - INSTALLATION CHECK / GET VERSION
  8836.     AX = AB00h
  8837. Return: AX = 5253h ('SR' byte-swapped) if installed
  8838.         BX = MODAL PC version (BL = major, BH = minor)
  8839. Program: MODAL PC is an algorithm/real-system simulation package by SR Soft
  8840.       using Petri-nets to describe simulated objects
  8841. SeeAlso: AX=AB01h"MODAL",AX=AB02h"MODAL",AX=AB06h"MODAL"
  8842. --------f-2FAB01-----------------------------
  8843. INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION
  8844.     AX = AB01h
  8845.     BX = process ID
  8846.     DS:DX -> 38-byte parameter record (see #3511 at INT 7B"Btrieve")
  8847. Return: AL = status
  8848.         00h OK
  8849.         other retry after calling INT 7F/AX=0200h
  8850. SeeAlso: AX=AB00h"Btrieve",AX=AB02h"Btrieve",INT 7B"Btrieve",INT 7F/AX=0200h
  8851. ----------2FAB01-----------------------------
  8852. INT 2F - SRSoft MODAL PC v2+ - GET PROCESS RUN PARAMETER
  8853.     AX = AB01h
  8854. Return: AX = 5253h ('SR' byte-swapped) if installed
  8855.     BL = run parameter
  8856.         00h normal process
  8857.         01h run with tracing enabled
  8858.         02h run initialization process (first thread of main task)
  8859. SeeAlso: AX=AB00h"MODAL",AX=AB02h"MODAL"
  8860. --------f-2FAB02-----------------------------
  8861. INT 2F - Btrieve Multi-User - GET NEW PROCESS ID
  8862.     AX = AB02h
  8863. Return: AL = 00h successful
  8864.         BX = process ID
  8865.     AL > 00h failed, retry after calling INT 7F/AX=0200h
  8866. SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h
  8867. ----------2FAB02-----------------------------
  8868. INT 2F - SRSoft MODAL PC v2+ - SET PROCESS EXIT CODE
  8869.     AX = AB02h
  8870.     BL = exit code
  8871. Return: AX = 5253h ('SR' byte-swapped) if installed
  8872. SeeAlso: AX=AB00h"MODAL",AX=AB01h"MODAL",AX=AB03h"MODAL"
  8873. ----------2FAB03-----------------------------
  8874. INT 2F - SRSoft MODAL PC v2+ - ALLOCATE COMMON MEMORY
  8875.     AX = AB03h
  8876.     BX = required size of common memory for variables/semaphores in bytes
  8877. Return: AX = 5253h ('SR' byte-swapped) if installed
  8878. SeeAlso: AX=AB00h"MODAL",AX=AB02h"MODAL",AX=AB04h"MODAL"
  8879. ----------2FAB04-----------------------------
  8880. INT 2F - SRSoft MODAL PC v2+ - GET ALL COMMON VARIABLES AND SEMAPHORES
  8881.     AX = AB04h
  8882.     DS:DX -> buffer for common data
  8883. Return: AX = 5253h ('SR' byte-swapped) if installed
  8884.     CF clear if successful
  8885.     CF set on error
  8886. SeeAlso: AX=AB00h"MODAL",AX=AB03h"MODAL",AX=AB05h"MODAL",AX=AB06h,AX=AB07h
  8887. ----------2FAB05-----------------------------
  8888. INT 2F - SRSoft MODAL PC v2+ - SET ALL COMMON VARIABLES AND SEMAPHORES
  8889.     AX = AB05h
  8890.     DS:DX -> buffer containing common data
  8891. Return: AX = 5253h ('SR' byte-swapped) if installed
  8892.     CF clear if successful
  8893.     CF set on error
  8894. SeeAlso: AX=AB00h"MODAL",AX=AB03h"MODAL",AX=AB04h"MODAL",AX=AB06h,AX=AB07h
  8895. ----------2FAB06-----------------------------
  8896. INT 2F - SRSoft MODAL PC v2+ - GET A COMMON VARIABLE OR SEMAPHORE
  8897.     AX = AB06h
  8898.     BX = offset of variable or semaphore in common memory
  8899.     CX = variable/semaphore size in bytes
  8900.     DS:DX -> buffer for variable or semaphore
  8901. Return: AX = 5253h ('SR' byte-swapped) if installed
  8902.     CF clear if successful
  8903.     CF set on error
  8904. SeeAlso: AX=AB00h"MODAL",AX=AB04h,AX=AB05h,AX=AB07h
  8905. ----------2FAB07-----------------------------
  8906. INT 2F - SRSoft MODAL PC v2+ - SET A COMMON VARIABLE OR SEMAPHORE
  8907.     AX = AB07h
  8908.     BX = offset of variable or semaphore in common memory
  8909.     CX = variable/semaphore size in bytes
  8910.     DS:DX -> buffer containing variable or semaphore
  8911. Return: AX = 5253h ('SR' byte-swapped) if installed
  8912.     CF clear if successful
  8913.     CF set on error
  8914. SeeAlso: AX=AB00h"MODAL",AX=AB04h,AX=AB05h,AX=AB06h
  8915. --------U-2FAC-------------------------------
  8916. INT 2F u - Player's Tool 3.996b+ - POP UP
  8917.     AH = ACh
  8918. Return: AX = 1001h
  8919. SeeAlso: AH=AAh"Player's Tool",AH=ABh"Player's Tool"
  8920. --------V-2FAC00-----------------------------
  8921. INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  8922.     AX = AC00h
  8923. Return: AX = FFFFh
  8924.     ES:DI -> ??? (graphics data?) (not documented)
  8925. Note:    this installation check was moved here to avoid the conflict with the
  8926.       CD-ROM extensions that occurred in DOS 4.00
  8927. SeeAlso: AX=1500h"GRAPHICS"
  8928. --------V-2FAC00DI1092-----------------------
  8929. INT 2F - QRIP/TSR - GIVE CPU TO QRIP
  8930.     AX = AC00h
  8931.     DI = 1092h
  8932. Return: nothing
  8933. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  8934.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  8935.       provide a graphical user interface
  8936. Desc:    give QRIP some CPU time to update music and flashing timers
  8937. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8938.     this function should be called regularly whenever the terminal program
  8939.       is otherwise idle; the updates are automatically performed on any
  8940.       other QRIP call
  8941. SeeAlso: AX=AC01h,AX=ACF0h
  8942. --------V-2FAC01DI1092-----------------------
  8943. INT 2F - QRIP/TSR - CHANGE INTERNAL FLAGS
  8944.     AX = AC01h
  8945.     DI = 1092h
  8946.     BX = flags to be turned on (see #2651)
  8947.     CX = flags to be turned off (see #2651)
  8948. Return: AX = 9142h if installed
  8949.         DX = DOS-takeover flag (nonzero if QRIP able to take over DOS)
  8950.         ---if DX nonzero---
  8951.         BX = QRIP version number in hex (BH = major, BL = minor)
  8952.         CX = new flags (see #2651)
  8953. Note:    if DI <> 1092h on entry, QRIP chains the call
  8954. SeeAlso: AX=AC00h/DI=1092h,AX=ACF0h
  8955.  
  8956. Bitfields for QRIP internal flags:
  8957. Bit(s)    Description    (Table 2651)
  8958.  0    ANSI emulation enabled (default on)
  8959.  1    RIP emulation enabled (default on)
  8960.  2    graphical commands allowed (default on)
  8961.  3    TTY text allowed (default on)
  8962.  4    disable @ variables (default off in TSR mode)
  8963.  5    wait for key on RIP "end scene" command (default off)
  8964.  6    anti-stripping (default off in TSR mode)
  8965.  7    sound enabled (default on)
  8966.  8    automatic message filter (default off in TSR mode)
  8967.  9    display-only mode (no user prompts)
  8968.  10    TTY text suppression (default off in TSR mode)
  8969.  11-15    reserved
  8970. --------V-2FAC02DI1092-----------------------
  8971. INT 2F - QRIP/TSR - TURN OFF GRAPHICS SCREEN
  8972.     AX = AC02h
  8973.     DI = 1092h
  8974. Return: nothing
  8975. Note:    if DI <> 1092h on entry, QRIP chains the call
  8976. SeeAlso: AX=AC03h,AX=ACF0h
  8977. --------V-2FAC03DI1092-----------------------
  8978. INT 2F - QRIP/TSR - TURN ON GRAPHICS SCREEN
  8979.     AX = AC03h
  8980.     DI = 1092h
  8981. Return: nothing
  8982. Notes:    if DI <> 1092h on entry, QRIP chains the call
  8983.     this function does not restore the contents of the screen (see AX=AC15h)
  8984. SeeAlso: AX=AC02h,AX=AC14h,AX=AC15h
  8985. --------V-2FAC04DI1092-----------------------
  8986. INT 2F - QRIP/TSR - OUTPUT STRING THROUGH QRIP
  8987.     AX = AC04h
  8988.     DI = 1092h
  8989.     DX:BX -> string
  8990.     CX = length of string
  8991. Return: nothing
  8992. Note:    if DI <> 1092h on entry, QRIP chains the call
  8993. SeeAlso: AX=AC05h,AX=AC09h,AX=AC0Ah,AX=ACF0h
  8994. --------V-2FAC05DI1092-----------------------
  8995. INT 2F - QRIP/TSR - OUTPUT NULL-TERMINATED STRING THROUGH QRIP
  8996.     AX = AC05h
  8997.     DI = 1092h
  8998.     DX:BX -> ASCIZ string
  8999. Return: nothing
  9000. Note:    if DI <> 1092h on entry, QRIP chains the call
  9001. SeeAlso: AX=AC04h,AX=AC06h,AX=AC09h,AX=AC0Ah,AX=ACF0h
  9002. --------V-2FAC06DI1092-----------------------
  9003. INT 2F - QRIP/TSR - RECEIVE CHARACTERS FROM QRIP
  9004.     AX = AC06h
  9005.     DI = 1092h
  9006. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2652)
  9007.     BX = string-waiting flag
  9008.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  9009.     CX = DX = AX
  9010. Note:    if DI <> 1092h on entry, QRIP chains the call
  9011. SeeAlso: AX=AC04h,AX=AC05h,AX=AC0Ch,AX=AC16h,AX=AC18h,AX=AC1Ah
  9012.  
  9013. (Table 2652)
  9014. Values for QRIP special codes:
  9015.  0000h    if none
  9016.  0100h    wait for user keypress (must call AX=AC16h/BL=00h or AX=AC18h)
  9017.  0101h    both/middle mouse button pressed
  9018.  0102h    entering block mode (up/download) (call AX=AC1Ah)
  9019.  0103h    right mouse button pressed
  9020.  0104h    BBS requested status bar on
  9021.  0105h    BBS requested status bar off
  9022.  0106h    BBS requested VT-102 terminal emulation
  9023.     (keypad keys should send VT-102 escape codes)
  9024.  0107h    BBS requested VT-102 mode off
  9025.  0108h    BBS requested doorway mode (raw IBM keyboard ASCII/scan code pairs)
  9026.  0109h    BBS requested doorway mode off
  9027.  010Ah    hotkey mode on
  9028.  010Bh    hotkey mode off
  9029.  010Ch    BBS requested Tab-key button changing on
  9030.  010Dh    BBS requested Tab-key mode off
  9031.  010Eh    XOFF (use flow control to stop incoming characters)
  9032.  010Fh    XON (use flow control to resume incoming characters)
  9033.  0110h-0119h BBS requested application (0-9) be run
  9034.     application 0 should be a standard text editor
  9035.  01FFh    send ASCII 00h to BBS
  9036. Note:    for special codes 0104h to 010Dh, the terminal program should report
  9037.       any mode changes it make in response by calling AX=AC16h
  9038. --------V-2FAC07DI1092-----------------------
  9039. INT 2F - QRIP/TSR - GET FONT DIRECTORY
  9040.     AX = AC07h
  9041.     DI = 1092h
  9042. Return: DX:BX -> 80-byte internal buffer containing ASCIZ font directory name
  9043. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9044.     the application may change the font directory by overwriting the
  9045.       returned buffer, ensuring that it does not exceed 80 bytes incl. NUL
  9046.     if changed, the new path will not become effective until the graphics
  9047.       screen is reinitialized
  9048. SeeAlso: AX=AC08h,AX=ACF0h
  9049. --------V-2FAC08DI1092-----------------------
  9050. INT 2F - QRIP/TSR - GET ICON DIRECTORY
  9051.     AX = AC08h
  9052.     DI = 1092h
  9053. Return: DX:BX -> 80-byte internal buffer containing ASCIZ icon directory name
  9054. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9055.     the application may change the icon directory by overwriting the
  9056.       returned buffer, ensuring that it does not exceed 80 bytes incl. NUL,
  9057.       and includes a trailing backslash
  9058.     if changed, the new path becomes effective immediately
  9059. SeeAlso: AX=AC07h,AX=ACF0h
  9060. --------V-2FAC09DI1092-----------------------
  9061. INT 2F - QRIP/TSR - OUTPUT STRING THROUGH QRIP
  9062.     AX = AC09h
  9063.     DI = 1092h
  9064.     DX:BX -> string
  9065.     CX = length of string
  9066. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2652)
  9067.     BX = string-waiting flag
  9068.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  9069.     CX = DX = AX
  9070. Note:    if DI <> 1092h on entry, QRIP chains the call
  9071. SeeAlso: AX=AC04h,AX=AC06h,AX=AC0Ah,AX=ACF0h
  9072. --------V-2FAC0ADI1092-----------------------
  9073. INT 2F - QRIP/TSR - OUTPUT NULL-TERMINATED STRING THROUGH QRIP
  9074.     AX = AC0Ah
  9075.     DI = 1092h
  9076.     DX:BX -> ASCIZ string
  9077. Return: AX = character to send to BBS (0001h-00FFh) or special code (see #2652)
  9078.     BX = string-waiting flag
  9079.         0001h entire string waiting to be sent to terminal (call AX=AC0Ch)
  9080.     CX = DX = AX
  9081. Note:    if DI <> 1092h on entry, QRIP chains the call
  9082. SeeAlso: AX=AC05h,AX=AC06h,AX=AC09h,AX=ACF0h
  9083. --------V-2FAC0BDI1092-----------------------
  9084. INT 2F - QRIP/TSR - EXECUTE RIP "END SCENE" COMMAND
  9085.     AX = AC0Bh
  9086.     DI = 1092h
  9087. Return: nothing
  9088. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9089.     enables all mouse buttons and cancels the RIP timeout
  9090. SeeAlso: AX=AC01h,AX=AC04h,AX=ACF0h
  9091. --------V-2FAC0CDI1092-----------------------
  9092. INT 2F - QRIP/TSR - GET STRING TO BE SENT TO BBS
  9093.     AX = AC0Ch
  9094.     DI = 1092h
  9095. Return: AX = status
  9096.         0000h nothing to be sent
  9097.         0001h a string is waiting to be sent
  9098.         DX:BX -> string to be sent (may contain NULs)
  9099.         CX = length of string
  9100.         0002h special code waiting (call AX=AC06h)
  9101. Note:    if DI <> 1092h on entry, QRIP chains the call
  9102. SeeAlso: AX=AC06h,AX=ACF0h
  9103. --------V-2FAC0DDI1092-----------------------
  9104. INT 2F - QRIP/TSR - SET PROTECTED SCREEN AREA
  9105.     AX = AC0Dh
  9106.     DI = 1092h
  9107.     CL = number of text lines at bottom of screen to protect (00h = off)
  9108.     BL = attribute with which to fill area (bit 7 = high-int. background)
  9109. Return: nothing
  9110. Note:    if DI <> 1092h on entry, QRIP chains the call
  9111. SeeAlso: AX=AC0Eh,AX=AC0Fh,AX=AC10h,AX=ACF0h
  9112. --------V-2FAC0EDI1092-----------------------
  9113. INT 2F - QRIP/TSR - WRITE ASCIZ STRING IN PROTECTED AREA
  9114.     AX = AC0Eh
  9115.     DI = 1092h
  9116.     DX:BX -> ASCIZ string to be written
  9117.     CL = column at which to begin writing
  9118.     CH = row number within protected area (00h = first line)
  9119. Return: nothing
  9120. Note:    if DI <> 1092h on entry, QRIP chains the call
  9121. SeeAlso: AX=AC0Dh,AX=AC0Fh,AX=AC10h,AX=ACF0h
  9122. --------V-2FAC0FDI1092-----------------------
  9123. INT 2F - QRIP/TSR - SCROLL PROTECTED AREA
  9124.     AX = AC0Fh
  9125.     DI = 1092h
  9126.     BH,BL = row,column of upper-left corner in protected area
  9127.     DH,DL = row,column of lower-right corner
  9128.     CL = number of lines to scroll up
  9129. Return: nothing
  9130. Note:    if DI <> 1092h on entry, QRIP chains the call
  9131. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC10h,AX=ACF0h
  9132. --------V-2FAC10DI1092-----------------------
  9133. INT 2F - QRIP/TSR - SET OUTPUT COLOR FOR PROTECTED AREA
  9134.     AX = AC10h
  9135.     DI = 1092h
  9136.     BL = new attribute (bit 7 set for high-intensity background)
  9137. Return: nothing
  9138. Note:    if DI <> 1092h on entry, QRIP chains the call
  9139. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC0Fh,AX=AC11h,AX=ACF0h
  9140. --------V-2FAC11DI1092-----------------------
  9141. INT 2F - QRIP/TSR - CONVERT PROTECTED AREA TO ENTIRE SCREEN
  9142.     AX = AC11h
  9143.     DI = 1092h
  9144.     BX = mode (0000h = normal protect, 0001h = allow full-screen access)
  9145. Note:    if DI <> 1092h on entry, QRIP chains the call
  9146. SeeAlso: AX=AC0Dh,AX=AC0Eh,AX=AC0Fh,AX=AC10h,AX=AC12h,AX=ACF0h
  9147. --------V-2FAC12DI1092-----------------------
  9148. INT 2F - QRIP/TSR - BEGIN POPUP-WINDOW MODE
  9149.     AX = AC12h
  9150.     DI = 1092h
  9151. Return: nothing
  9152. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9153.     while popup-mode is in effect, the terminal program can write to the
  9154.       screen (and easily restore it) by outputting a RIP file with AX=AC04h
  9155.       or AX=AC05h
  9156.     QRIP will automatically drop out of popup-window mode if the terminal
  9157.       program invokes RIP pick-lists
  9158.     any changes to the protected area will be restored when popup-window
  9159.       mode is cancelled
  9160. SeeAlso: AX=AC04h,AX=AC11h,AX=AC13h,AX=ACF0h
  9161. --------V-2FAC13DI1092-----------------------
  9162. INT 2F - QRIP/TSR - END POPUP-WINDOW MODE
  9163.     AX = AC13h
  9164.     DI = 1092h
  9165. Return: nothing
  9166. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9167.     restores screen
  9168. SeeAlso: AX=AC12h,AX=ACF0h
  9169. --------V-2FAC14DI1092-----------------------
  9170. INT 2F - QRIP/TSR - SAVE GRAPHICS SCREEN AND SWITCH TO TEXT MODE
  9171.     AX = AC14h
  9172.     DI = 1092h
  9173. Return: nothing
  9174. Note:    if DI <> 1092h on entry, QRIP chains the call
  9175. SeeAlso: AX=AC03h,AX=AC15h
  9176. --------V-2FAC15DI1092-----------------------
  9177. INT 2F - QRIP/TSR - RESTORE GRAPHICS SCREEN
  9178.     AX = AC15h
  9179.     DI = 1092h
  9180. Return: nothing
  9181. Desc:    restores the graphics screen saved by the last call to AX=AC14h
  9182. Note:    if DI <> 1092h on entry, QRIP chains the call
  9183. SeeAlso: AX=AC03h,AX=AC14h
  9184. --------V-2FAC16DI1092-----------------------
  9185. INT 2F - QRIP/TSR - REPORT MODE CHANGE TO QRIP
  9186.     AX = AC16h
  9187.     DI = 1092h
  9188.     BL = new mode
  9189.         00h terminate key wait
  9190.         01h status bar on
  9191.         02h status bar off
  9192.         03h VT-102 mode on
  9193.         04h VT-102 mode off
  9194.         05h doorway mode on
  9195.         06h doorway mode off
  9196.         07h hotkeys mode on
  9197.         08h hotkeys mode off
  9198.         09h tabkey mode on
  9199.         0Ah tabkey mode off
  9200. Return: nothing
  9201. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9202.     all modes default to OFF when QRIP is first installed
  9203. --------V-2FAC17DI1092-----------------------
  9204. INT 2F - QRIP/TSR - CALL (EXECUTE) A RIP FILE
  9205.     AX = AC17h
  9206.     DI = 1092h
  9207.     DX:BX -> ASCIZ filename for RIP file to be executed
  9208. Return: nothing
  9209. Notes:    if DI <> 1092h on entry, QRIP chains the call
  9210.     the specified file may be in the current icon directory, the QRIP
  9211.       startup directory, or the current directory; any pathnames specified
  9212.       with the filename are ignored
  9213. --------V-2FAC18DI1092-----------------------
  9214. INT 2F - QRIP/TSR - SEND USER KEY TO QRIP
  9215.     AX = AC18h
  9216.     DI = 1092h
  9217.     BX = key (00xxh is normal ASCII, xx00h is an extended key)
  9218. Return: nothing
  9219. Note:    if DI <> 1092h on entry, QRIP chains the call
  9220. SeeAlso: AX=AC06h,AX=ACF0h
  9221. --------V-2FAC19DI1092-----------------------
  9222. INT 2F - QRIP/TSR - HANGUP
  9223.     AX = AC19h
  9224.     DI = 1092h
  9225. Return: nothing
  9226. Desc:    inform QRIP that carrier has been lost
  9227. Note:    if DI <> 1092h on entry, QRIP chains the call
  9228. SeeAlso: AX=ACF0h
  9229. --------V-2FAC1ADI1092-----------------------
  9230. INT 2F - QRIP/TSR - GET RIP_ENTER_BLOCK_MODE INFORMATION
  9231.     AX = AC1Ah
  9232.     DI = 1092h
  9233. Return: AH = requested protocol (see #2653)
  9234.     AL = file type (see #2654)
  9235.     DX:BX -> ASCIZ filename or 0000h:0000h
  9236.     CX = length of filename
  9237. Note:    if DI <> 1092h on entry, QRIP chains the call
  9238. SeeAlso: AX=ACF0h
  9239.  
  9240. (Table 2653)
  9241. Values for QRIP protocol identifier:
  9242.  00h    Xmodem (checksum)
  9243.  01h    Xmodem-CRC
  9244.  02h    Xmodem-1K
  9245.  03h    Xmodem-1K-G
  9246.  04h    Kermit
  9247.  05h    Ymodem
  9248.  06h    Ymodem-G
  9249.  07h    Zmodem with crash recovery
  9250.  08h-0Fh same as 00h-07h, but for uploading instead of downloading
  9251. SeeAlso: #2654
  9252.  
  9253. (Table 2654)
  9254. Values for QRIP file type:
  9255.  00h    RIP file sequence to be displayed
  9256.  01h    RIP file sequence to be stored in icon directory
  9257.  02h    ICN file sequence to be stored in icon directory
  9258.  03h    HLP file sequence to be stored, then auto-loaded if needed
  9259.  04h    COMPOSITE DYNAMIC file sequence (batch protocols only)
  9260.  05h    ACTIVE DYNAMIC file sequence (batch protocols only)
  9261. Note:    for file types 04h and 05h, any .RIP or .ICN files are stored in
  9262.       the icon directory; in mode 05h, any .RIP files are also played
  9263.       back as they are received
  9264. SeeAlso: #2653
  9265. --------V-2FAC1BDI1092-----------------------
  9266. INT 2F - QRIP/TSR - SET SYSTEM FONT SIZE
  9267.     AX = AC1Bh
  9268.     DI = 1092h
  9269.     BX = font size (see #2655)
  9270. Return: nothing
  9271. Note:    if DI <> 1092h on entry, QRIP chains the call
  9272. SeeAlso: AX=AC04h,AX=ACF0h
  9273.  
  9274. (Table 2655)
  9275. Values for QRIP font size specifier:
  9276.  00h    8x8 font, 80x43 screen
  9277.  01h    7x8 font, 90x43 screen
  9278.  02h    8x14 font, 80x25 screen
  9279.  03h    7x14 font, 90x25 screen
  9280.  04h    16x14 font, 40x25 screen
  9281. --------V-2FACF0DI1092-----------------------
  9282. INT 2F - QRIP/TSR - INSTALLATION CHECK
  9283.     AX = ACF0h
  9284.     DI = 1092h
  9285. Return: AX = 9142h if installed
  9286.         DX = DOS-takeover flag (nonzero if QRIP able to take over DOS)
  9287.         ---if DX nonzero---
  9288.         BX = QRIP version number in hex (BH = major, BL = minor)
  9289.         CX = current flags (see AX=AC01h)
  9290. Note:    if DI <> 1092h on entry, QRIP chains the call
  9291. SeeAlso: AX=AC00h/DI=1092h,AX=AC01h,AX=AC04h,AX=AC06h,AX=AC1Ah,AX=ACFFh
  9292. --------V-2FACFFDI1092-----------------------
  9293. INT 2F - QRIP/TSR - UNINSTALL
  9294.     AX = ACFFh
  9295.     DI = 1092h
  9296. Return: AX = status
  9297.         0000h unable to remove (interrupt vector hooked by another prog)
  9298.         0001h successful
  9299.         0002h unable to take over DOS at this time (retry uninstall)
  9300. Note:    if DI <> 1092h on entry, QRIP chains the call
  9301. SeeAlso: AX=ACF0h
  9302. --------V-2FAD00-----------------------------
  9303. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  9304.     AX = AD00h
  9305. Return: AL = FFh if installed
  9306.         BX = ??? (0100h for MS-DOS 3.3+)
  9307. Note:    DOS 5+ DISPLAY.SYS chains to previous handler if AL is not one of the
  9308.       subfunctions listed here
  9309. SeeAlso: AX=AD01h"DISPLAY",AX=AD02h"DISPLAY"
  9310. --------O-2FAD00-----------------------------
  9311. INT 2F U - DR DOS 3.41-5.0, Novell DOS 7 KEYB - INSTALLATION CHECK
  9312.     AX = AD00h
  9313. Return: AX = FFFFh if installed
  9314.     flags destroyed
  9315. Note:    the Novell DOS 7 KEYB driver only checks AL to determine whether it
  9316.       is already installed
  9317. SeeAlso: AX=AD80h"Novell"
  9318. --------V-2FAD01-----------------------------
  9319. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE
  9320.     AX = AD01h
  9321.     BX = new code page (see #1446 at INT 21/AX=6602h)
  9322. Return: CF clear if successful
  9323.         AX = 0001h
  9324.     CF set on error (unsupported code page)
  9325.         AX = 0000h
  9326. SeeAlso: AX=AD02h"DISPLAY"
  9327. --------O-2FAD01-----------------------------
  9328. INT 2F U - DR DOS 3.41,5.0 KEYB - GET CONFIGURATION
  9329.     AX = AD01h
  9330. Return: BX = current code page (see #1446 at INT 21/AX=6602h)
  9331.     CX = current keyboard layout (0100h = US, 0102h = foreign)
  9332.     ES = resident code segment
  9333. SeeAlso: AX=AD01h"Novell",AX=AD00h"KEYB",AX=AD02h"KEYB",AX=AD83h"KEYB"
  9334. --------O-2FAD01-----------------------------
  9335. INT 2F U - Novell DOS 7 KEYB - GET/SET??? CONFIGURATION
  9336.     AX = AD01h
  9337.     CX = ??? (0000h)
  9338. Return: AX = FFFFh if Novell DOS 7 KEYB installed
  9339.     BX = current code page (see #1446 at INT 21/AX=6602h)
  9340.     CX = current keyboard layout (0100h = US, 0102h = foreign)
  9341.     ES = resident code segment
  9342. SeeAlso: AX=AD01h"DR DOS",AX=AD00h"KEYB",AX=AD02h"KEYB",AX=AD83h"KEYB"
  9343. --------V-2FAD02-----------------------------
  9344. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE
  9345.     AX = AD02h
  9346. Return: CF set if code page never set
  9347.         AX = 0001h
  9348.         BX = FFFFh (assume first hardware code page)
  9349.     CF clear if successful
  9350.         BX = current code page (see #1446 at INT 21/AX=6602h)
  9351. SeeAlso: AX=AD01h"DISPLAY",AX=AD03h
  9352. --------O-2FAD02-----------------------------
  9353. INT 2F U - Novell DOS 7 KEYB - ???
  9354.     AX = AD02h
  9355.     DX = ??? (0000h)
  9356. Return: AX = FFFFh if installed
  9357.     flags destroyed
  9358. SeeAlso: AX=AD01h"KEYB"
  9359. --------V-2FAD03-----------------------------
  9360. INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION
  9361.     AX = AD03h
  9362.     ES:DI -> buffer for code page information (see #2656)
  9363.     CX = size of buffer in bytes
  9364. Return: CF set if buffer too small
  9365.     CF clear if successful
  9366.         ES:DI buffer filled
  9367. SeeAlso: AX=AD01h,AX=AD02h
  9368.  
  9369. Format of DOS 5.0-6.0 DISPLAY.SYS code page information:
  9370. Offset    Size    Description    (Table 2656)
  9371.  00h    WORD    number of software code pages
  9372.  02h    WORD    ??? (0003h)
  9373.  04h    WORD    number of hardware code pages
  9374.  06h  N WORDs    hardware code page numbers (see #1446 at INT 21/AX=6602h)
  9375.       N WORDs    software (prepared) code pages (FFFFh if not yet prepared)
  9376. --------V-2FAD04-----------------------------
  9377. INT 2F U - DOS 4.x only DISPLAY.SYS internal - ???
  9378.     AX = AD04h
  9379.     ???
  9380. Return: ???
  9381. --------V-2FAD10-----------------------------
  9382. INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK???
  9383.     AX = AD10h
  9384.     ???
  9385. Return: AX = FFFFh
  9386.     BX = ??? (0100h in PC-DOS 4.01)
  9387. --------V-2FAD10-----------------------------
  9388. INT 2F U - DOS 5+ DISPLAY.SYS internal - ???
  9389.     AX = AD10h
  9390.     ???
  9391. Return: CF clear if successful
  9392.     CF set on error
  9393. Note:    this function is a NOP if the active code page has never been set
  9394.       (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known
  9395. --------V-2FAD40-----------------------------
  9396. INT 2F - DOS 4.0+ - ???
  9397.     AX = AD40h
  9398.     DX = ???
  9399.     ???
  9400. Return: ???
  9401. Note:    called by PC-DOS 4.01 PRINT.COM
  9402. --------K-2FAD80-----------------------------
  9403. INT 2F u - MS-DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  9404.     AX = AD80h
  9405. Return: AL = FFh if installed
  9406.         BX = version number (BH = major, BL = minor)
  9407.         ES:DI -> internal data (see #2657)
  9408.         AH destroyed (set to FFh by some implementations/versions)
  9409. Notes:    MS-DOS 3.30, PC-DOS 4.01, MS-DOS 5.00, and MS-DOS 6.22 all report
  9410.       version 1.00.
  9411.     this function was undocumented prior to the release of DOS 5.0
  9412.     most versions of KEYB completely replace the BIOS INT 09 handler, but
  9413.       Novell DOS's KEYB partially uses the BIOS code and thus continues
  9414.       to chain to the original INT 09 at times
  9415.     some utilities check for AX=FFFFh on return
  9416. SeeAlso: AX=AD80h"Novell",AX=AD81h,AX=AD82h,AX=AD83h
  9417.  
  9418. Format of KEYB internal data:
  9419. Offset    Size    Description    (Table 2657)
  9420.  00h    DWORD    original INT 09
  9421.  04h    DWORD    original INT 2F
  9422.  08h    DWORD    unused (0) original INT 16 in older KEYB versions???
  9423.  0Ch    WORD    flags A (see #3762)
  9424.  0Eh    WORD    flags B (see #2658)
  9425.  10h    BYTE    flags??? (bit1 used)
  9426.  11h    BYTE    ???
  9427.  12h  4 BYTEs    ???
  9428.  16h  2 BYTEs    country ID letters, default is "US"
  9429.  18h    WORD    current code page (see #1446 at INT 21/AX=6602h)
  9430. ---DOS 3.3---
  9431.  1Ah    WORD    pointer to first item in list of code page tables???
  9432.  1Ch    WORD    pointer to ??? item in list of code page tables
  9433.  1Eh  2 BYTEs    unused???
  9434.  20h    WORD    pointer to key translation data (see #2660)
  9435.  22h    WORD    pointer to last item in code page table list (see #2659)
  9436.  24h  9 BYTEs    ???
  9437. ---DOS 4.01---
  9438.  1Ah  2 BYTEs    ???
  9439.  1Ch    WORD    pointer to first item in list of code page tables???
  9440.  1Eh    WORD    pointer to ??? item in list of code page tables
  9441.  20h 2 BYTEs    unused???
  9442.  22h    WORD    pointer to key translation data (see #2660)
  9443.  24h    WORD    pointer to last item in code page table list (see #2659)
  9444.  26h  9 BYTEs    ???
  9445. ---DOS 6.22--- (checked out with 6.22, but might be earlier)
  9446.  1Ah  2 BYTEs    ???
  9447.  1Ch    WORD    pointer to current (first???) item in list of code page tables
  9448.         (corresponding to codepage indicated at offset 18h)
  9449.         (initial value is FFFFh)
  9450.  1Eh    WORD    pointer to (entry to) list of code page tables (see #2659)
  9451.         If not FFFFh, INT 2F/AX=AD81h scans this list of code page
  9452.           tables until the requested code page was found in list or
  9453.           end of table was reached (FFFFh). If found, offsets 18h and
  9454.           1Ch will be changed to requested new code page. If not found,
  9455.           it returns with AX=0001h 'code page not supported').
  9456.  20h    WORD    unused??? (initial value: FFFFh)
  9457.  22h    WORD    pointer to key translation data (see #2143)
  9458.  24h    WORD    pointer to last item in code page table list (see #2142)
  9459.  26h    WORD    CAPSLock/ShiftLock management flags??? (0)
  9460.         Note:    It appears that none of the bits is ever set inside
  9461.               KEYBs code!
  9462.               The following is guesswork:
  9463.         bit15: =1: With country specific keyboard mapping (<Ctrl>+
  9464.               <Alt>+<F2>) active, <CapsLock> works as CAPSLock
  9465.               instead of ShiftLock??? Pressing a key in first row
  9466.               resets CapsLock???
  9467.               (Effective only on PC Convertible or with Enhanced
  9468.               keyboard).
  9469.         bit14-10:  unused (0)
  9470.         bit 9: =1: With country specific keyboard mapping active:
  9471.               some kind of temporary (table) shift???
  9472.         bit 8-0: unused (0)
  9473.  28h    BYTE    unused (0)
  9474.  29h    BYTE    make code xx for <Ctrl>+<Alt>+<xx> to set keyboard mapping
  9475.           to US-layout (default is 3Bh=<F1>???)
  9476.           (see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
  9477.  2Ah    BYTE    make code yy for <Ctrl>+<Alt>+<yy> to set keyboard mapping
  9478.           to country specific layout (default is 3Ch=<F2>???),
  9479.           (see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
  9480.  2Bh 16 BYTEs    unused (0) ???
  9481. Note:    at least in MS-DOS v6.22, the signature "SHARED DATA" immediately
  9482.       precedes this structure
  9483.  
  9484. Bitfields for MS-DOS v6.22 KEYB flags A:
  9485. Bit(s)    Description    (Table 3762)
  9486.  15    unused??? (0)
  9487.  14    set on machine with BIOS machine type FBh or FEh/FFh without enh kbd
  9488.  13    not FAh: ???
  9489.  12    set on start of machine detection, cleared on machine types F9h, FBh,
  9490.       FEh, FFh
  9491.  11    not FAh: ???
  9492.     (on ATs: override bit12 NOT to set NumLock on)
  9493.  10    set on machine type F9h
  9494.  9    unused??? (0)
  9495.  8    unused??? (0)
  9496.  7    used by INT 09, but never set!
  9497.     =1: after keyboard self test resulting AAh, INT 09 handler will (re)set
  9498.           keyboard code-set 1 and temporarily disable a PS/2 mouseport.
  9499.  6    used by INT09, but never set!
  9500.     =1: after keyboard self test resulting AAh, INT 09 handler will (re)set
  9501.           keyboard code-set 1 and temporarily disable a PS/2 mouseport.
  9502.  5    set for JP, KO, PR, TA layouts during installation???
  9503.     =1: some special codepage (>932???) management???
  9504.  4-0    unused??? (0)
  9505. SeeAlso: #2658,MEM F000h:FFFEh,INT 15/AH=C0h
  9506.  
  9507. Bitfields for MS-DOS v6.22 KEYB flags B:
  9508. Bit(s)    Description    (Table 2658)
  9509.  15    INT 16/AH=1xh supported (INT 16h/AH=92h call returns AH<=80h)
  9510.     if clear, extended keyboard scan codes are immediately discarded
  9511.  14    INT 16/AH=2xh supported (INT 16h/AH=A2h call returns AH<=80h)
  9512.  13    unused (0)
  9513.  12    network installed (INT 2F/AX=B800h)
  9514.  11    original IBM PC (BIOS date 1981)
  9515.  10    PC or PC/XT (BIOS machine type byte of FBh or FEh)
  9516.  9    PC Convertible (BIOS machine type byte of F9h); use INT 15/AX=4104h
  9517.  8    unused (0)
  9518.  7    IBM PS/2 model 30 (BIOS machine type byte of FAh)
  9519.  6    IBM AT (BIOS machine type FCh)
  9520.  5    IBM PS/2 (BIOS machine type F8h)
  9521.  4    PS/2 and unknown only: non-standard 8042 reported by INT 15/AH=C0h
  9522.     =1: after keyboard self test resulting AAh, INT 09 handler will (re)set
  9523.           keyboard code-set 1 and temporarily disable a PS/2 mouseport.
  9524.  3    temporary flag???
  9525.  2-0    ???
  9526. SeeAlso: #2657,#3762
  9527.  
  9528. Format of code page table list entries:
  9529. Offset    Size    Description    (Table 2659)
  9530.  00h    WORD    pointer to next item, FFFFh = last
  9531.  02h    WORD    code page (see #1446 at INT 21/AX=6602h)
  9532.  04h  2 BYTEs    ???
  9533.  
  9534. Format of KEYB translation data:
  9535. Offset    Size    Description    (Table 2660)
  9536.  00h    WORD    size of data in bytes, including this word
  9537.  02h N-2 BYTEs    ???
  9538. --------K-2FAD80-----------------------------
  9539. INT 2F u - Novell DOS 7 KEYB.COM - INSTALLATION CHECK
  9540.     AX = AD80h
  9541. Return: AX = FFFFh if installed
  9542.         CX = Novell DOS KEYB version number (CL = major, CH = minor)
  9543.         DX = current keyboard codepage
  9544.         ES:DI -> internal data and tables (ES=FFFEh if KEYB in HMA)
  9545.     flags destroyed
  9546. Notes:    versions: v2.08 (original ship 4/94), v2.09 (Update 10, 11/18/94),
  9547.       v2.10 (Update 12, 2/22/95), v2.11 (Update 13, 5/8/95),
  9548.       v2.12 (Update 14, 7/31/95)
  9549.     although the installation check is via this INT 2F call, Novell DOS 7's
  9550.       KEYB has no known INT 2F entry point!     Presumably, the handler is
  9551.       either coded in the kernel or reached via a FAR JMP from the kernel
  9552. SeeAlso: AX=AD80h"MS-DOS"
  9553. --------K-2FAD81-----------------------------
  9554. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE
  9555.     AX = AD81h
  9556.     BX = code page (see #1446 at INT 21/AX=6601h)
  9557. Return: CF set on error
  9558.         AX = 0001h (code page not available)
  9559.     CF clear if successful
  9560. Notes:    called by DISPLAY.SYS
  9561.     this function was undocumented prior to the release of DOS 5.0
  9562. SeeAlso: AX=AD80h,AX=AD82h
  9563. --------K-2FAD82-----------------------------
  9564. INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING
  9565.     AX = AD82h
  9566.     BL = new state
  9567.         00h US keyboard (Control-Alt-F1)
  9568.         FFh foreign keyboard (Control-Alt-F2)
  9569. Return: CF set on error (BL not 00h or FFh)
  9570.     CF clear if successful
  9571. Note:    this function was undocumented prior to the release of DOS 5.0
  9572. SeeAlso: AX=AD80h,AX=AD81h,AX=AD83h
  9573. --------K-2FAD83-----------------------------
  9574. INT 2F - DOS 5+ KEYB.COM - GET KEYBOARD MAPPING
  9575.     AX = AD83h
  9576. Return: BL = current state
  9577.         00h US keyboard
  9578.         FFh foreign keyboard
  9579. SeeAlso: AX=AD82h
  9580. --------l-2FAE00-----------------------------
  9581. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK
  9582.     AX = AE00h
  9583.     DX = magic value FFFFh
  9584.     CH = FFh
  9585.     CL = length of command line tail (4DOS v4.0)
  9586.     DS:BX -> command line buffer (see #2661)
  9587.     DS:SI -> command name buffer (see #2662)
  9588.     DI = 0000h (4DOS v4.0)
  9589. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  9590.     AL = 00h if the command should be executed as usual
  9591. Notes:    This call provides a mechanism for TSRs to install permanent
  9592.       extensions to the command repertoire of COMMAND.COM.    It appears
  9593.       that COMMAND.COM makes this call before executing the current
  9594.       command line, and does not execute it itself if the return is FFh.
  9595.     APPEND hooks this call, to allow subsequent APPEND commands to
  9596.       execute without re-running APPEND
  9597. SeeAlso: AX=AE01h
  9598.  
  9599. Format of COMMAND.COM command line buffer:
  9600. Offset    Size    Description    (Table 2661)
  9601.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  9602.  01h    BYTE    count of bytes to follow, excluding terminating 0Dh
  9603.       N BYTEs    command line text, terminated by 0Dh
  9604.  
  9605. Format of command name buffer:
  9606. Offset    Size    Description    (Table 2662)
  9607.  00h    BYTE    length of command name
  9608.  01h  N BYTEs    uppercased command name (blank-padded to 11 chars by 4DOS v4)
  9609. --------l-2FAE01-----------------------------
  9610. INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  9611.     AX = AE01h
  9612.     DX = magic value FFFFh
  9613.     CH = 00h
  9614.     CL = length of command name (4DOS v4.0)
  9615.     DS:BX -> command line buffer (see #2661)
  9616.     DS:SI -> command name buffer (see #2662)
  9617. Return: DS:SI buffer updated
  9618.       if length byte is nonzero, the following bytes contain the uppercase
  9619.       internal command to execute and the command line buffer contains the
  9620.       command's parameters (the first DS:[SI] bytes are ignored)
  9621. Notes:    this call requests execution of the command which a previous call to
  9622.       AX=AE00h indicated was resident
  9623.     APPEND hooks this call
  9624. BUG:    Novell DOS 7.0's COMMAND.COM (prior to Update 12) will attempt to run
  9625.       a disk program with the indicated name even if the returned length
  9626.       byte is zero, because the register used to flag this case is
  9627.       clobbered without first checking it.    The workaround is to set the
  9628.       command name buffer to "REM" followed by enough blanks to pad out
  9629.       the original command's length, which will also work with MS-DOS 6.
  9630.       (from padgett@tccslr.dnet.mmc.com)
  9631. SeeAlso: AX=AE00h
  9632. --------!---Section--------------------------
  9633.