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

  1. Interrupt List, part 7 of 13
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------D-21FF-------------------------------
  4. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  5.     AH = FFh
  6. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  7. SeeAlso: AH=F8h"OEM",AH=FEh"OEM"
  8. --------K-21FF-------------------------------
  9. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  10.     AH = FFh
  11.     AL = subfunction
  12.         00h add installable command
  13.         BL = mode
  14.             bit 0 = 1 callable from DOS prompt
  15.             bit 1 = 1 callable from application
  16.         DS:SI -> CR-terminated command name
  17.         ES:DI -> FAR routine entry point
  18.         01h remove installable command
  19.         DS:SI -> CR-terminated command name
  20.         02h reserved, may be used to test for CED installation
  21. Return: CF clear if successful
  22.     CF set on error
  23.         AX = error code
  24.         01h invalid function
  25.         02h command not found (subfunction 01h only)
  26.         08h insufficient memory (subfunction 00h only)
  27.         0Eh bad data (subfunction 00h only)
  28.     AH = FFh if CED not installed
  29. Program: CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  30. SeeAlso: AX=0A00h
  31. --------E-21FF-------------------------------
  32. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  33.     AH = FFh
  34.     AL = function
  35.         01h create file
  36.         02h open file
  37.         03h get file statistics
  38.         04h get time of day
  39.         05h set time of day
  40.         06h stat
  41.         07h system
  42. Program: GO32.EXE is a DOS extender included as part of the 80386 port of the
  43.       GNU C/C++ compiler by DJ Delorie and distributed as DJGPP
  44. SeeAlso: INT 10/AH=FFh"GO32"
  45. --------K-21FF-------------------------------
  46. INT 21 - DOSED.COM - INSTALLATION CHECK
  47.     AH = FFh
  48.     DS:SI -> "DOSED"
  49.     ES = 0000h
  50. Return: ES:DI -> "DOSED" if installed
  51. Program: DOSED is a free DOS commandline editor/history buffer by Sverre H.
  52.       Huseby
  53. --------v-21FF-------------------------------
  54. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  55.     AH = FFh
  56. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  57.     AX = 0400h if "Sunday" resident
  58. SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh
  59. --------E-21FF-------------------------------
  60. INT 21 UP - Rational Systems DOS/4GW - API
  61.     AH = FFh
  62.     DH = function (00h-17h) (see also separate entries below)
  63.     DL = subfunction or argument
  64. Return: CF clear if valid function number
  65.         AX = status???
  66.     CF set if invalid function
  67. SeeAlso: INT 15/AX=BFDCh
  68. --------E-21FF--DH00-------------------------
  69. INT 21 UP - Rational Systems DOS/4GW - VERSION CHECK???
  70.     AH = FFh
  71.     DH = 00h
  72.     DL = ??? (78h seen)
  73. Return: CF clear
  74.     EAX = 4734FFFFh (high word is byte-swapped "4G") if DOS/4G installed
  75. Note:    Quarterdeck's DESQview/X X Toolkit library uses this call to determine
  76.       whether the direct-mapped linear 4GB segment's selector is 34h or 38h
  77. SeeAlso: INT 21/AH=FFh"DOS/4GW"
  78. --------E-21FF--DH02-------------------------
  79. INT 21 UP - Rational Systems DOS/4GW - SET ???
  80.     AH = FFh
  81.     DH = 02h
  82.     DL = ???
  83. Return: CF clear
  84. --------E-21FF--DH05-------------------------
  85. INT 21 UP - Rational Systems DOS/4GW - ???
  86.     AH = FFh
  87.     DH = 05h
  88.     BX = ???
  89. Return: ???
  90. --------E-21FF--DH06-------------------------
  91. INT 21 UP - Rational Systems DOS/4GW - ???
  92.     AH = FFh
  93.     DH = 06h
  94.     BX = ???
  95. Return: ???
  96. --------E-21FF--DH07-------------------------
  97. INT 21 UP - Rational Systems DOS/4GW - ???
  98.     AH = FFh
  99.     DH = 07h
  100.     BX = ???
  101. Return: ???
  102. --------E-21FF--DH08-------------------------
  103. INT 21 UP - Rational Systems DOS/4GW - ???
  104.     AH = FFh
  105.     DH = 08h
  106.     BX = ???
  107.     CX = ???
  108.     ES = ???
  109. Return: ???
  110. --------E-21FF--DH09-------------------------
  111. INT 21 UP - Rational Systems DOS/4GW - GET ???
  112.     AH = FFh
  113.     DH = 09h
  114. Return: ES:BX -> ???
  115. --------E-21FF--DH0A-------------------------
  116. INT 21 UP - Rational Systems DOS/4GW - ???
  117.     AH = FFh
  118.     DH = 0Ah
  119.     AL = ???
  120.     BX = ???
  121.     CX = ???
  122. Return: ES = ??? or 0000h
  123. --------E-21FF--DH0B-------------------------
  124. INT 21 UP - Rational Systems DOS/4GW - ???
  125.     AH = FFh
  126.     DH = 0Bh
  127.     AL = ???
  128.     BX = ???
  129.     CX = ???
  130. Return: ???
  131. --------E-21FF--DH0C-------------------------
  132. INT 21 UP - Rational Systems DOS/4GW - GET/SET ???
  133.     AH = FFh
  134.     DH = 0Ch
  135.     DL = ??? (00h or 01h)
  136. Return: CF clear if successful
  137.         AL = previous value of ???
  138.     CF set on error (DL out of range)
  139.         AX = FFFFh
  140. --------E-21FF--DH0D-------------------------
  141. INT 21 UP - Rational Systems DOS/4GW - ???
  142.     AH = FFh
  143.     DH = 0Dh
  144.     ???
  145. Return: ???
  146. --------E-21FF--DH0E-------------------------
  147. INT 21 UP - Rational Systems DOS/4GW - ???
  148.     AH = FFh
  149.     DH = 0Eh
  150. Return: DX:AX -> XBRK structure (see #0382 at INT 15/AX=BF02h)
  151.     BX = ???
  152.     CX = ???
  153. SeeAlso: INT 15/AX=BF02h
  154. --------E-21FF--DH0F-------------------------
  155. INT 21 UP - Rational Systems DOS/4GW - ???
  156.     AH = FFh
  157.     DH = 0Fh
  158.     ???
  159. Return: ???
  160. --------E-21FF--DH10-------------------------
  161. INT 21 UP - Rational Systems DOS/4GW - ???
  162.     AH = FFh
  163.     DH = 10h
  164.     AL = ???
  165.     BX = ???
  166.     CX = ???
  167.     DI = ???
  168.     SI = ???
  169. Return: ???
  170. Note:    among other things, frees two memory blocks via INT 21/AH=49h
  171. --------E-21FF--DH11-------------------------
  172. INT 21 UP - Rational Systems DOS/4GW - NOP
  173.     AH = FFh
  174.     DH = 11h
  175. --------E-21FF--DH12-------------------------
  176. INT 21 UP - Rational Systems DOS/4GW - EXCHANGE ??? POINTERS
  177.     AH = FFh
  178.     DH = 12h
  179.     DS:SI -> new ???
  180.     ES:DI -> new ???
  181. Return: DS:SI -> previous ???
  182.     ES:DI -> previous ???
  183. --------E-21FF--DH13-------------------------
  184. INT 21 UP - Rational Systems DOS/4GW - ???
  185.     AH = FFh
  186.     DH = 13h
  187.     AL = ???
  188.     ES = ???
  189. Return: ???
  190. --------E-21FF--DH14-------------------------
  191. INT 21 UP - Rational Systems DOS/4GW - ???
  192.     AH = FFh
  193.     DH = 14h
  194.     BX = ???
  195.     CX = ???
  196. Return: CF clear
  197.         AX = ???
  198.         DX = ???
  199. --------E-21FF--DH15-------------------------
  200. INT 21 UP - Rational Systems DOS/4GW - GET ??? FUNCTIONS
  201.     AH = FFh
  202.     DH = 15h
  203. Return: CF clear
  204.         DX:AX -> FAR function for ???
  205.         CX:BX -> FAR function for ???
  206.         SI:DI -> FAR function for ???
  207. --------E-21FF--DH16-------------------------
  208. INT 21 UP - Rational Systems DOS/4GW - GET ???
  209.     AH = FFh
  210.     DH = 16h
  211. Return: AX = ???
  212. --------E-21FF--DH17-------------------------
  213. INT 21 UP - Rational Systems DOS/4GW - ???
  214.     AH = FFh
  215.     DH = 17h
  216.     AL = ???
  217.     DL = ???
  218. Return: ???
  219. --------N-21FF00-----------------------------
  220. INT 21 - TopWare Network OS v5.10+ - GET SYSTEM INFORMATION
  221.     AX = FF00h
  222.     CL = what to get
  223.         00h user information (see #1319)
  224.         01h drive mapping (see #1320)
  225.         02h printer server(s)
  226.         05h local DOS drive number
  227. Return: ES:BX -> desired information
  228. Program: TopWare Network Operating System is manufactured by Grand Computer
  229.       Company
  230. Note:    this call is only supported on Workstations, not on the server
  231. SeeAlso: AX=FF04h,INT 2F/AX=FF00h
  232.  
  233. Format of TopWare user information:
  234. Offset    Size    Description    (Table 1319)
  235.  00h    BYTE    node ID
  236.  01h 15 BYTEs    user name
  237.  10h    WORD    user number
  238.  12h    BYTE    group number
  239.  
  240. Format of TopWare drive mapping [array]:
  241. Offset    Size    Description    (Table 1320)
  242.  00h    BYTE    bits 6-0: drive number (1=A:, etc.)
  243.         bit 7: this is a server drive
  244.  01h  3 BYTEs    mapping drive (for example, "C:\")
  245.  04h 64 BYTEs    current directory
  246. --------E-21FF00DX0078-----------------------
  247. INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
  248.     AX = FF00h
  249.     DX = 0078h
  250. Return: AL <> 00h if installed
  251.         GS = segment of kernel if nonzero
  252. SeeAlso: INT 15/AX=BF02h
  253. --------N-21FF04-----------------------------
  254. INT 21 - TopWare Network OS v5.10+ - GET/SET DEFAULT FILE PROTECTION ATTRIBS
  255.     AX = FF04h
  256.     CL = function
  257.         00h get protections
  258.         Return: BH = read attribute
  259.             BL = write attribute
  260.         01h set protections
  261.         BH = read attribute
  262.         BL = write attribute
  263. Note:    this function is supported only on Workstations, not on the server
  264. SeeAlso: AX=FF00h"TopWare"
  265. --------v-21FF0F-----------------------------
  266. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  267.     AX = FF0Fh
  268. Return: AX = 0101h if resident
  269. Program: FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  270.       Software Concepts Design
  271. Note:    the "PSQR/1720" virus calls this function to determine whether
  272.       FLU_SHOT+ is present
  273. SeeAlso: AH=FFh"VIRUS",AX=FF10h
  274. --------v-21FF10-----------------------------
  275. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  276.     AX = FF10h
  277. Return: AL = 07h if resident
  278. SeeAlso: AX=FF0Fh,AX=FFFEh
  279. --------N-21FF80DHFF-------------------------
  280. INT 21 - TopWare Network OS v5.10+ - SEND MESSAGE
  281.     AX = FF80h
  282.     DH = FFh
  283.     DL = destination address (FFh for broadcast)
  284.     CX = message length (max 2000)
  285.     DS:SI -> message to be sent (see #1321)
  286. Return: nothing
  287. Program: TopWare Network Operating System is manufactured by Grand Computer
  288.       Company
  289. Notes:    this function is supported on both Workstations and the server
  290.     there is no guarantee that the message will be received correctly, or
  291.       at all, by the destination
  292.  
  293. Format of TopWare message:
  294. Offset    Size    Description    (Table 1321)
  295.  00h    BYTE    type code
  296.         07h TopSend
  297.         11h user application
  298.         other reserved for TopWare
  299.  01h    var    data
  300. Note:    sending messages with a type code other than 11h will cause
  301.       unpredictable results
  302. --------N-21FF82-----------------------------
  303. INT 21 - TopWare Network OS v5.10+ - GET STATION ADDRESS
  304.     AX = FF82h
  305. Return: AL = station address
  306. Note:    this function is supported on both Workstations and the server
  307. SeeAlso: AX=FF91h
  308. --------N-21FF8C-----------------------------
  309. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF TopShow/Emulated FUNCTION
  310.     AX = FF8Ch
  311.     BL = subfunction
  312.         00h get TopShow status
  313.         FFh get Emulated status
  314. Return: AL = status
  315.         00h not installed
  316.         01h already installed
  317. --------N-21FF8D-----------------------------
  318. INT 21 - TopWare Network OS v5.10+ - CALL TopShow FUNCTION
  319.     AX = FF8Dh
  320.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  321.     CL = screen mode of station to be viewed (see #1322)
  322.     BL = graphic page number for monochrome
  323. Return: AL = status (00h successful, else failed)
  324. SeeAlso: AX=FF8Eh,AX=FFCFh
  325.  
  326. (Table 1322)
  327. Values for TopWare screen mode:
  328.  00h    text mode
  329.  01h    720x348
  330.  02h    640x408
  331.  03h    720x352
  332.  04h    640x390
  333.  05h    reserved
  334. --------N-21FF8E-----------------------------
  335. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  336.     AX = FF8Eh
  337. Return: AL = 00h (successful, TopShow removed)
  338. SeeAlso: AX=FF8Dh
  339. --------N-21FF91-----------------------------
  340. INT 21 - TopWare Network OS v5.10+ - GET FILE SERVER STATION NUMBER
  341.     AX = FF91h
  342. Return: AL = station number of file server
  343. SeeAlso: AX=FF82h
  344. --------N-21FF97-----------------------------
  345. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM STATION NUMBER (server only)
  346.     AX = FF97h
  347. Return: AL = maximum station number
  348. SeeAlso: AX=FF98h
  349. --------N-21FF98-----------------------------
  350. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM FILE NUMBER (server only)
  351.     AX = FF98h
  352. Return: AL = maximum file
  353. SeeAlso: AX=FF97h
  354. --------N-21FF9A-----------------------------
  355. INT 21 - TopWare Network OS v5.10+ - RECEIVE OF USER-DEFINED PACKETS
  356.     AX = FF9Ah
  357.     ES:BX -> buffer for user-defined packet (see #1323)
  358. Return: nothing
  359.  
  360. Format of TopWare user-defined packet:
  361. Offset    Size    Description    (Table 1323)
  362.  00h    BYTE    FFh
  363.  01h    WORD    (call) length of data field plus 3
  364.         (ret) length of received message (0000h if none received)
  365.  03h    BYTE    destination ID (FFh for broadcast message)
  366.  04h    BYTE    sending station ID
  367.  05h    BYTE    type code (11h; all other codes reserved for TopWare)
  368.  06h  N BYTEs    received message
  369. --------N-21FF9F-----------------------------
  370. INT 21 - TopWare Network OS v5.10+ - ENABLE/DISABLE TopTerm SERVICE
  371.     AX = FF9Fh
  372.     CL = new state (00h disable [disregard TopTerm packets], 01h enable)
  373. Return: AL = status (00h successful, FFh failed)
  374. Note:    this function is only supported by Workstations, not the server
  375. --------N-21FFB0-----------------------------
  376. INT 21 - TopWare Network OS v5.10+ - GET SPOOLER PRINTING PRIORITY
  377.     AX = FFB0h
  378. Return: AL = priority status (see #1324)
  379. SeeAlso: AX=FFB1h
  380.  
  381. Bitfields for TopWare printer priority status:
  382. Bit(s)    Description    (Table 1324)
  383.  2    LPT3 has high priority
  384.  1    LPT2 has high priority
  385.  0    LPT1 has high priority
  386. --------N-21FFB1-----------------------------
  387. INT 21 - TopWare Network OS v5.10+ - SET SPOOLER PRINTING PRIORITY
  388.     AX = FFB1h
  389.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  390.     CH = new priority (00h normal, 01h high)
  391. Return: nothing
  392. SeeAlso: AX=FFB0h
  393. --------N-21FFB3-----------------------------
  394. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT START-OF-JOB FORMFEED STATUS
  395.     AX = FFB3h
  396. Return: AL = starting formfeed status (see #1325)
  397. SeeAlso: AX=FFB4h,AX=FFC0h
  398.  
  399. Bitfields for TopWare printer start-of-job formfeed status:
  400. Bit(s)    Description    (Table 1325)
  401.  2    LPT3 has formfeed enabled
  402.  1    LPT2 has formfeed enabled
  403.  0    LPT1 has formfeed enabled
  404. --------N-21FFB4-----------------------------
  405. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT START-OF-JOB FORMFEED STATUS
  406.     AX = FFB4h
  407.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  408.     CH = new formfeed status (00h off, 01h on)
  409. Return: nothing
  410. SeeAlso: AX=FFB3h,AX=FFC1h
  411. --------N-21FFBB-----------------------------
  412. INT 21 - TopWare Network OS v5.10+ - GET PRINTER SERVER STATION ADDRESS
  413.     AX = FFBBh
  414.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  415. Return: AL = current mapping printer server station number
  416.         00h if local
  417. SeeAlso: AX=FFBCh
  418. --------N-21FFBC-----------------------------
  419. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  420.     AX = FFBCh
  421.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  422.     CL = printer server station address or 00h for local printer
  423. Return: AL = status (00h successful, else failed)
  424. SeeAlso: AX=FFBBh
  425. --------N-21FFBD-----------------------------
  426. INT 21 - TopWare Network OS v5.10+ - GET CURRENT AUTOPRINT TIME
  427.     AX = FFBDh
  428.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  429. Return: AX = current AutoPrint timeout in clock ticks
  430. SeeAlso: AX=FFBEh
  431. --------N-21FFBE-----------------------------
  432. INT 21 - TopWare Network OS v5.10+ - SET AUTOPRINT TIME
  433.     AX = FFBEh
  434.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  435.     BX = timeout in clock ticks
  436. SeeAlso: AX=FFBDh
  437. --------N-21FFBF-----------------------------
  438. INT 21 - TopWare Network OS v5.10+ - GET LOGON USER INFORMATION
  439.     AX = FFBFh
  440.     DX:BX -> buffer for logon information (see #1326)
  441. Return: AL = status (00h successful, else failed)
  442.     AH = number of logged-in stations
  443.  
  444. Format of TopWare logon information:
  445. Offset    Size    Description    (Table 1326)
  446.  00h    BYTE    station address
  447.  01h 15 BYTEs    username
  448. --------N-21FFC0-----------------------------
  449. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT END-OF-JOB FORMFEED STATUS
  450.     AX = FFC0h
  451. Return: AL = ending formfeed status (see #1327)
  452. SeeAlso: AX=FFB3h,AX=FFC1h
  453.  
  454. Bitfields for TopWare printer end-of-job formfeed status:
  455. Bit(s)    Description    (Table 1327)
  456.  2    LPT3 has formfeed enabled
  457.  1    LPT2 has formfeed enabled
  458.  0    LPT1 has formfeed enabled
  459. --------N-21FFC1-----------------------------
  460. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT END-OF-JOB FORMFEED STATUS
  461.     AX = FFC1h
  462.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  463.     CH = new formfeed status (00h off, 01h on)
  464. Return: nothing
  465. SeeAlso: AX=FFB4h,AX=FFC0h
  466. --------N-21FFC2-----------------------------
  467. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT COPIES OF SPOOLING FILE
  468.     AX = FFC2h
  469.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  470. Return: AL = default number of copies printed
  471. SeeAlso: AX=FFC7h
  472. --------N-21FFC3-----------------------------
  473. INT 21 - TopWare Network OS v5.10+ - GET SHARING STATUS OF PRINTER SERVER
  474.     AX = FFC3h
  475. Return: AL = sharing status of printers (see #1328)
  476.         FFh if not a printer server
  477.  
  478. Bitfields for TopWare printer sharing status:
  479. Bit(s)    Description    (Table 1328)
  480.  2    LPT3 is shared
  481.  1    LPT2 is shared
  482.  0    LPT1 is shared
  483. --------N-21FFC4-----------------------------
  484. INT 21 - TopWare Network OS v5.10+ - GET/SET LPT PORT ON PRINT SERVER
  485.     AX = FFC4h
  486.     BL = subfunction
  487.         00h get
  488.         Return: AL = mapped printer port on print server
  489.         01h set
  490.         CL = network printer port (00h LPT1, 01h LPT2, 02h LPT3)
  491.     CH = local printer (00h LPT1, 01h LPT2, 02h LPT3)
  492. --------N-21FFC6-----------------------------
  493. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT FILE HEADER
  494.     AX = FFC6h
  495.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  496.     CL = header state (00h off, 01h on)
  497. SeeAlso: AX=FFC8h
  498. --------N-21FFC7-----------------------------
  499. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT COPIES
  500.     AX = FFC7h
  501.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  502.     CL = new default number of copies to print
  503. SeeAlso: AX=FFC2h
  504. --------N-21FFC8-----------------------------
  505. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT PRINT FILE HEADER STATUS
  506.     AX = FFC8h
  507. Return: AL = header status for printers (see #1329)
  508. SeeAlso: AX=FFC6h
  509.  
  510. Bitfields for TopWare print header status:
  511. Bit(s)    Description    (Table 1329)
  512.  2    LPT3 has headers enabled
  513.  1    LPT2 has headers enabled
  514.  0    LPT1 has headers enabled
  515. --------N-21FFC9-----------------------------
  516. INT 21 - TopWare Network OS v5.10+ - SET PRINTER SHARING
  517.     AX = FFC9h
  518.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  519.     CL = new sharing state (00h off, 01h on)
  520. Return: AL = status (00h successful, FFh not printer server)
  521. --------N-21FFCA-----------------------------
  522. INT 21 - TopWare Network OS v5.10+ - MOVE FILE FROM ONE PRINT SERVER TO ANOTHER
  523.     AX = FFCAh
  524.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  525.     CL = original printer server station address
  526.     BL = target printer server station address
  527.     DS:DX -> filename (12 bytes)
  528. Return: AL = status (00h successful, else failed)
  529. SeeAlso: AX=FFCBh
  530. --------N-21FFCB-----------------------------
  531. INT 21 - TopWare Network OS v5.10+ - DELETE FILE FROM SPOOLING QUEUE
  532.     AX = FFCBh
  533.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  534.     CL = printer server station address
  535.     DS:DX -> filename (12 bytes)
  536. Return: AL = status (00h successful, else failed)
  537. SeeAlso: AX=FFCAh
  538. --------N-21FFCC-----------------------------
  539. INT 21 - TopWare Network OS v5.10+ - GET PRINT SERVER'S SPOOLING QUEUE STATUS
  540.     AX = FFCCh
  541.     CL = printer server station address
  542.     BH = start item number of spooling file for print server
  543.     BL = number of the item to be retrieved
  544.     DS:DX -> buffer for queued file information (see #1330)
  545. Return: AL = status
  546.         00h successful
  547.         AH = number of spool files
  548.         DS:DX buffer filled
  549.         nonzero failed
  550.  
  551. Format of TopWare queued file information buffer [16-item array, one element]:
  552. Offset    Size    Description    (Table 1330)
  553.  00h 12 BYTEs    filename
  554.  0Ch    DWORD    size
  555.  10h    WORD    date
  556.  12h    WORD    time
  557.  14h 15 BYTEs    username
  558.  23h    BYTE    count
  559.  24h    BYTE    flag: header
  560.  25h    BYTE    print number
  561. --------N-21FFCD-----------------------------
  562. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF ALL PRINT SERVERS
  563.     AX = FFCDh
  564.     DS:DX -> buffer for server status (see #1331)
  565. Return: AL = status
  566.         00h successful
  567.         AH = number of print servers
  568.         nonzero failed
  569.  
  570. Format of TopWare server status:
  571. Offset    Size    Description    (Table 1331)
  572.  00h    BYTE    station address
  573.  01h 15 BYTEs    username
  574.  10h    BYTE    flag: 01h printer is shared, 00h sharing disabled
  575.  11h    BYTE    number of files pending in queue
  576. --------N-21FFCF-----------------------------
  577. INT 21 - TopWare Network OS v5.10+ - CALL TopLook FUNCTION
  578.     AX = FFCFh
  579.     DH = page number (0-2, 2 is text mode)
  580.     DL = type
  581.         00h look at specific screen
  582.         01h AutoLook on
  583.         FFh AutoLook off
  584.     BH = station number wishing to look
  585.     BL = station number to be looked at
  586.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  587.     CL = screen mode (see #1322)
  588. Return: AL = status (00h successful, nonzero failed)
  589. SeeAlso: AX=FF8Dh
  590. --------N-21FFD6-----------------------------
  591. INT 21 - TopWare Network OS v5.10+ - GET KEYCARD SERIAL NUMBER AND MAX USERS
  592.     AX = FFD6h
  593.     ES:BX -> 12-byte buffer for keycard serial number
  594. Return: CX = maximum number of users
  595.     ES:BX buffer filled
  596. --------N-21FFD7-----------------------------
  597. INT 21 - TopWare Network OS v5.10+ - GET NETWORK PROTECTION ATTRIBUTES STATUS
  598.     AX = FFD7h
  599. Return: AL = status (00h disabled, 01h enabled)
  600. --------N-21FFE3DL00-------------------------
  601. INT 21 - TopWare Network OS v5.10+ - INITIATE ACCESS TO SPECIFIC PACKET TYPE
  602.     AX = FFE3h
  603.     DL = 00h
  604.     BX = packet type for Ethernet header (IP = 0800h, ARP = 0806h, etc.)
  605.     ES:DI -> receive routine (see #1333)
  606. Return: CF clear if successful
  607.         AX = handle number
  608.     CF set on error
  609.         DH = error code (03h,05h,09h,0Ah,11h) (see #1332)
  610. SeeAlso: AX=FFE3h/DL=01h
  611.  
  612. (Table 1332)
  613. Values for TopWare error code:
  614.  01h    invalid handle
  615.  03h    no interfaces of the specified type found
  616.  05h    bad packet type
  617.  09h    insufficient space
  618.  0Ah    type already being accessed
  619.  0Ch    unable to send packet (usually hardware error)
  620.  11h    invalid function
  621.  
  622. (Table 1333)
  623. Values TopWare receive routine is called with:
  624.     AX = function
  625.         0000h request packet buffer
  626.         CX = packet size
  627.         Return: ES:DI -> buffer or 0000h:0000h to discard packet
  628.         0001h packet copied
  629.         CX = packet size
  630.         DS:SI -> copied packet (same as returned ES:DI above)
  631. --------N-21FFE3DL01-------------------------
  632. INT 21 - TopWare Network OS v5.10+ - END ACCESS TO SPECIFIC PACKET TYPE
  633.     AX = FFE3h
  634.     DL = 01h
  635.     BX = handle returned by AX=FFE3h/DL=00h
  636. Return: CF clear if successful
  637.     CF set on error
  638.         DH = error code (01h,11h) (see #1332)
  639. Note:    the specified access handle will no longer be valid after this call
  640. SeeAlso: AX=FFE3h/DL=00h
  641. --------N-21FFE3DL02-------------------------
  642. INT 21 - TopWare Network OS v5.10+ - SEND PACKET
  643.     AX = FFE3h
  644.     DL = 02h
  645.     CX = length of data buffer
  646.     DS:SI -> buffer containing data
  647. Return: CF clear if successful
  648.     CF set on error
  649.         DH = error code (0Ch,11h) (see #1332)
  650. --------N-21FFE3DL03-------------------------
  651. INT 21 - TopWare Network OS v5.10+ - GET LOCAL NETWORK INTERFACE ADDRESS
  652.     AX = FFE3h
  653.     DL = 03h
  654.     ES:DI -> 6-byte buffer for address
  655. SeeAlso: AX=FFE3h/DL=00h
  656. --------v-21FFFE-----------------------------
  657. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  658.     AX = FFFEh
  659. Return: AX = 0815h if resident
  660. SeeAlso: AX=FF10h,AX=FFFFh
  661. --------v-21FFFF-----------------------------
  662. INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK
  663.     AX = FFFFh
  664. Return: AX = 0000h if "Ontario" resident
  665.     AX = 1992h if "Year 1992"/"B1M92" resident
  666. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  667. --------v-21FFFFCX0000-----------------------
  668. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  669.     AX = FFFFh
  670.     CX = 0000h
  671. Return: CX = 0006h if resident
  672. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  673. --------D-22---------------------------------
  674. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  675. Desc:    this vector specifies the address of the routine which is to be given
  676.       control after a program is terminated; it should never be called
  677.       directly, since it does not point at an interrupt handler
  678. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  679.       termination, and then a FAR JMP is performed to the address in INT 22
  680.     normally points at the instruction immediately following INT 21/AH=4Bh
  681.       call which loaded the current program
  682. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  683. --------G-22---------------------------------
  684. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  685.     AL = new firmware debugging port
  686. Return: ???
  687. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  688. --------D-23---------------------------------
  689. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  690. ---DOS 1.x---
  691. Return: AH = 00h abort program
  692.     if all registers preserved, restart DOS call
  693. ---DOS 2+---
  694.     CF clear
  695. Return: all registers preserved
  696.     return via RETF with CF set or (MS-DOS 1,DR-DOS) RETF 2 with CF set
  697.         DOS will abort program with errorlevel 0
  698.     else (RETF/RETF 2 with CF clear or IRET with CF ignored)
  699.         interrupted DOS call is restarted
  700. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  701.       should never be called directly
  702.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  703.     MS-DOS remembers the stack pointer before calling INT 23, and if it is
  704.       not the same on return, pops and discards the top word; this is what
  705.       permits a return with RETF as well as IRET or RETF 2
  706.     MS-DOS 2.1+ ignores the returned CF if SP is the same on return as it
  707.       was when DOS called INT 23, so RETF 2 will not terminate the program
  708.     Novell DOS 7 always pops a word if CF is set on return, so one should
  709.       not return with RETF 2 and CF set or IRET with the stored flags' CF
  710.       set
  711.     any DOS call may safely be made within the INT 23 handler, although
  712.       the handler must check for a recursive invocation if it does
  713.       call DOS
  714. SeeAlso: INT 1B
  715. --------G-23---------------------------------
  716. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  717.     AL = query type
  718.         00h get old config map
  719.         Return: AX = old config map
  720.         01h get dual-ported RAM map
  721.         Return: BX:AX = dual-ported RAM map
  722.         02h get SCC port map
  723.         Return: BX:AX = SCC port map
  724. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  725. --------D-24---------------------------------
  726. INT 24 C - DOS 1+ - CRITICAL ERROR HANDLER
  727. Notes:    invoked when a critical (usually hardware) error is encountered by DOS
  728.       (see #1334); should never be called directly
  729.     when DOS terminates a program, it copies the previous value of the
  730.       INT 24 vector out of the PSP (see #0603) and into the interrupt
  731.       vector table
  732. SeeAlso: INT 21/AH=95h
  733.  
  734. (Table 1334)
  735. Values critical error handler is called with:
  736.     AH = type and processing flags (see #1335)
  737.     AL = drive number if AH bit 7 clear
  738.     BP:SI -> device driver header (see #0858 at INT 21/AH=52h)
  739.         (BP:[SI+4] bit 15 set if character device)
  740.     DI low byte contains error code if AH bit 7 set (see #1336)
  741.     STACK:    DWORD    return address for INT 24 call
  742.         WORD    flags pushed by INT 24
  743.         WORD    original AX on entry to INT 21
  744.         WORD    BX
  745.         WORD    CX
  746.         WORD    DX
  747.         WORD    SI
  748.         WORD    DI
  749.         WORD    BP
  750.         WORD    DS
  751.         WORD    ES
  752.         DWORD    return address for INT 21 call
  753.         WORD    flags pushed by INT 21
  754. Return:    AL = action code (see #1337)
  755.     SS,SP,DS,ES,BX,CX,DX preserved
  756. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  757.     if the handler returns to the application by popping the stack, DOS
  758.       will be in an unstable state until the first call with AH > 0Ch
  759.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  760.       critical errors
  761.     if IGNORE specified but not allowed, it is turned into FAIL
  762.     if RETRY specified but not allowed, it is turned into FAIL
  763.     if FAIL specified but not allowed, it is turned into ABORT
  764.     (DOS 3.0+) if a critical error occurs inside the critical error
  765.       handler, the DOS call is automatically failed (AL set to 03h and
  766.       the INT 24 call skipped)
  767.  
  768. Bitfields for critical error type and processing flags:
  769. Bit(s)    Description    (Table 1335)
  770.  7    clear = disk I/O error
  771.     set   = -- if block device, bad FAT image in memory
  772.         -- if char device, error code in DI
  773.  6    unused
  774.  5    Ignore allowed (DOS 3.0+)
  775.  4    Retry allowed (DOS 3.0+)
  776.  3    Fail allowed (DOS 3.0+)
  777.  2-1    disk area of error
  778.     00 = DOS area    01 = FAT
  779.     10 = root dir    11 = data area
  780.  0    set if write, clear if read
  781.  
  782. (Table 1336)
  783. Values for critical error code:
  784.  00h    write-protection violation attempted
  785.  01h    unknown unit for driver
  786.  02h    drive not ready
  787.  03h    unknown command given to driver
  788.  04h    data error (bad CRC)
  789.  05h    bad device driver request structure length
  790.  06h    seek error
  791.  07h    unknown media type
  792.  08h    sector not found
  793.  09h    printer out of paper
  794.  0Ah    write fault
  795.  0Bh    read fault
  796.  0Ch    general failure
  797.  0Dh    (DOS 3.0+) sharing violation
  798.  0Eh    (DOS 3.0+) lock violation
  799.  0Fh    invalid disk change
  800.  10h    (DOS 3.0+) FCB unavailable
  801.  11h    (DOS 3.0+) sharing buffer overflow
  802.  12h    (DOS 4.0+) code page mismatch
  803.  13h    (DOS 4.0+) out of input
  804.  14h    (DOS 4.0+) insufficient disk space
  805.  
  806. (Table 1337)
  807. Values for critical error handler action code:
  808.  00h    ignore error and continue processing request
  809.  01h    retry operation
  810.  02h    terminate program as though INT 21/AH=4Ch called (INT 20h for DOS 1.x)
  811.  03h    fail system call in progress (DOS 3+)
  812. --------D-25---------------------------------
  813. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  814.     AL = drive number (00h = A:, 01h = B:, etc)
  815.     CX = number of sectors to read (not FFFFh)
  816.     DX = starting logical sector number (0000h - highest sector on drive)
  817.     DS:BX -> buffer for data
  818. Return: CF clear if successful
  819.     CF set on error
  820.         AH = status (see #1338)
  821.         AL = error code (same as passed to INT 24 in DI)
  822.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  823.     may destroy all other registers except segment registers
  824. Notes:    original flags are left on stack, and must be popped by caller
  825.     this call bypasses the DOS filesystem
  826.     examination of CPWIN386.CPL indicates that if this call fails with
  827.       error 0408h on an old-style (<32M) call, one should retry the
  828.       call with the high bit of the drive number in AL set
  829.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  830.       of INT 25 must be used solely on the basis of the partition's size,
  831.       thus forcing use of the new-style call even for data in the first
  832.       32M of the partition
  833. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  834.       invalid drive number
  835.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  836.       wrong number of bytes on the stack; use the huge-partition version
  837.       (INT 25/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  838. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26
  839.  
  840. (Table 1338)
  841. Values for disk I/O status:
  842.  80h    device failed to respond (timeout)
  843.  40h    seek operation failed
  844.  20h    controller failed
  845.  10h    data error (bad CRC)
  846.  08h    DMA failure
  847.  04h    requested sector not found
  848.  03h    write-protected disk (INT 26 only)
  849.  02h    bad address mark
  850.  01h    bad command
  851. --------D-25----CXFFFF-----------------------
  852. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  853.     CX = FFFFh
  854.     AL = drive number (0=A, 1=B, etc)
  855.     DS:BX -> disk read packet (see #1339)
  856. Return: CF clear if successful
  857.     CF set on error
  858.         AH = status (see #1338)
  859.         AL = error code (same as passed to INT 24 in DI)
  860.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  861.     may destroy all other registers except segment registers
  862. Notes:    partition is potentially >32M (and requires this form of the call) if
  863.       bit 1 of the device attribute word in the device driver is set
  864.     original flags are left on stack, and must be removed by caller
  865.     this call bypasses the DOS filesystem
  866. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  867.  
  868. Format of disk read packet:
  869. Offset    Size    Description    (Table 1339)
  870.  00h    DWORD    sector number
  871.  04h    WORD    number of sectors to read
  872.  06h    DWORD    transfer address
  873. --------k-25CDCD-----------------------------
  874. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  875.     AX = CDCDh
  876.     DS:BX -> buffer for address (see #1340)
  877.     CX = 0001h
  878.     DX = 0000h
  879. Return: AX = CDCDh if Stacker installed
  880.         DS:BX buffer filled
  881. Note:    not supported by Stacker Anywhere; to obtain the Stacker device
  882.       driver address and to detect drives controlled by all versions
  883.       of Stacker, INT 21/AX=4404h"Stacker" or lookup via the CDS and DPB
  884.       should be preferred (see INT 21/AH=52h)
  885.     Stacker Anywhere does not link its built-in device driver into
  886.       the standard device driver chain, but it can be found via CDS/DPB
  887. SeeAlso: INT 21/AX=4404h"Stacker"
  888.  
  889. Format of Stacker v2+ driver address buffer:
  890. Offset    Size    Description    (Table 1340)
  891.  00h    WORD    signature CDCDh
  892.  02h    WORD    ??? 0001h
  893.  04h    DWORD    pointer to Stacker signature at device driver offset 1Ah
  894.           (see #1341)
  895.  
  896. Format of Stacker v2+ device driver:
  897. Offset    Size    Description    (Table 1341)
  898.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  899.         FFFFh:FFFFh for Stacker Anywhere
  900.  04h    WORD    device attributes (see #0859,#0860)
  901.  06h    WORD    device strategy entry point
  902.  08h    WORD    device interrupt entry point
  903.  0Ah    BYTE    number of subunits (drives) supported by driver
  904.         0 for Stacker Anywhere
  905.  0Bh  7 BYTEs    signature "STAC-CD" for Stacker and Stacker Anywhere
  906.  12h  7 BYTEs    ???
  907.  19h    BYTE    always = 01h ?? (Stacker Anywhere points here)
  908.  1Ah    WORD    signature A55Ah (all other Stacker versions point here)
  909.  1Ch    WORD    Stacker version * 64h
  910.         0C8h = 200, 012Ch = 300, 0190h = 400 (also Stacker Anywhere)
  911.  1Eh    WORD    offset of volume-specific information offset table
  912.         (list of WORDs, one per drive, containing offsets to various
  913.           information)
  914.  20h 56 BYTEs    n/a
  915.  58h    BYTE    volume number, set after INT 21/AX=4404h, INT 21/AX=4408h
  916.         (use to index into volume-specific info offset table,
  917.         should be set to FFh before and tested for change after)
  918.  59h 19 BYTEs    n/a
  919.  6Ch  4 BYTEs    ASCII string "SWAP"
  920.  70h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  921.         (only used for drives swapped by SSWAP.COM; other drives
  922.         compressed by Stacker can be found with the standard device
  923.         driver header signature (see INT 21/AH=52h)
  924. ---Stacker 4, Stacker Anywhere---
  925.  8Ah 40    BYTEs    ???
  926.  B2h  4 BYTEs    ASCII string "SWP2"
  927.  B6h 26 BYTEs    drive table ???
  928.  D0h 150 BYTEs    ???
  929. 166h 60 BYTEs    LZSINFO structure (see #1523 at INT 2F/AX=4A12h)
  930. SeeAlso: #1342,#0858 at INT 21/AH=52h
  931.  
  932. Format of Stacker boot record:
  933. Offset    Size    Description    (Table 1342)
  934. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  935. 1F8h    DWORD    pointer to start of Stacker device driver
  936. 1FCh    WORD    Stacker volume number
  937. 1FEh    WORD    ???
  938. SeeAlso: #1341
  939. --------c-25--FFSI4358-----------------------
  940. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  941.     AL = FFh
  942.     SI = 4358h
  943. Return: SI = 6378h if installed
  944.         CX = segment of device driver PC-CACHE.SYS
  945.         DX = version (major in DH, minor in DL)
  946. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  947.       access to certain disk drivers for devices such as Bernoulli drives
  948. SeeAlso: INT 13/AH=A0h
  949. --------D-26---------------------------------
  950. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  951.     AL = drive number (00h = A:, 01h = B:, etc)
  952.     CX = number of sectors to write (not FFFFh)
  953.     DX = starting logical sector number (0000h - highest sector on drive)
  954.     DS:BX -> data to write
  955. Return: CF clear if successful
  956.     CF set on error
  957.         AH = status (see #1338)
  958.         AL = error code (same as passed to INT 24 in DI)
  959.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  960.     may destroy all other registers except segment registers
  961. Notes:    original flags are left on stack, and must be popped by caller
  962.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  963.       disk buffers referencing sectors which are written with this call
  964.     examination of CPWIN386.CPL indicates that if this call fails with
  965.       error 0408h on an old-style (<32M) call, one should retry the
  966.       call with the high bit of the drive number in AL set
  967.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  968.       of INT 26 must be used solely on the basis of the partition's size,
  969.       thus forcing use of the new-style call even for data in the first
  970.       32M of the partition
  971. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  972.       invalid drive number
  973.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  974.       wrong number of bytes on the stack; use the huge-partition version
  975.       (INT 26/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  976. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  977. --------D-26----CXFFFF-----------------------
  978. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  979.     CX = FFFFh
  980.     AL = drive number (0=A, 1=B, etc)
  981.     DS:BX -> disk write packet (see #1343)
  982. Return: CF clear if successful
  983.     CF set on error
  984.         AH = status (see #1338)
  985.         AL = error code (same as passed to INT 24 in DI)
  986.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  987.     may destroy all other registers except segment registers
  988. Notes:    partition is potentially >32M (and requires this form of the call) if
  989.       bit 1 of the device attribute word in the device driver is set
  990.     original flags are left on stack, and must be removed by caller
  991.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  992.       disk buffers referencing sectors which are written with this call
  993. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  994.  
  995. Format of disk write packet:
  996. Offset    Size    Description    (Table 1343)
  997.  00h    DWORD    sector number
  998.  04h    WORD    number of sectors to read
  999.  06h    DWORD    transfer address
  1000. --------G-26---------------------------------
  1001. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  1002.     ???
  1003. Return: ???
  1004. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  1005. --------D-27---------------------------------
  1006. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  1007.     DX = number of bytes to keep resident (max FFF0h)
  1008.     CS = segment of PSP
  1009. Return: never
  1010. Notes:    this is an obsolete call
  1011.     INT 22, INT 23, and INT 24 are restored from the PSP
  1012.     does not close any open files
  1013.     the minimum number of bytes which will remain resident is 110h for
  1014.       DOS 2.x and 60h for DOS 3.0+; there is no minimum for DOS 1.x, which
  1015.       implements this service in COMMAND.COM rather than the DOS kernel
  1016. SeeAlso: INT 21/AH=31h
  1017. --------G-27---------------------------------
  1018. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  1019.     ???
  1020. Return: ???
  1021. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  1022.       controller
  1023. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  1024. --------D-28---------------------------------
  1025. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  1026.     SS:SP = top of MS-DOS stack for I/O functions
  1027. Return: all registers preserved
  1028. Desc:    This interrupt is invoked each time one of the DOS character input
  1029.       functions loops while waiting for input.  Since a DOS call is in
  1030.       progress even though DOS is actually idle during such input waits,
  1031.       hooking this function is necessary to allow a TSR to perform DOS
  1032.       calls while the foreground program is waiting for user input.     The
  1033.       INT 28h handler may invoke any INT 21h function except functions
  1034.       00h through 0Ch.
  1035. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  1036.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  1037.       the INT 28h handler without destroying the DOS stacks.
  1038.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  1039.       handle which refers to CON
  1040.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  1041.       set to 01h; if larger, DOS is truly busy and should not be reentered
  1042.     the default handler is an IRET instruction
  1043.     supported in OS/2 compatibility box
  1044.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  1045.       this interrupt as superseded
  1046. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  1047. --------D-29---------------------------------
  1048. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  1049.     AL = character to display
  1050. Return: nothing
  1051. Notes:    automatically called when writing to a device with bit 4 of its device
  1052.       driver header set (see also INT 21/AH=52h)
  1053.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  1054.       vector and assume that ANSI.SYS is installed if the segment is larger
  1055.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  1056.     the default handler under DESQview 2.2 understands the <Esc>[2J
  1057.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  1058. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  1059. --------N-2A00-------------------------------
  1060. INT 2A - NETWORK - INSTALLATION CHECK
  1061.     AH = 00h
  1062. Return: AH <> 00h if installed
  1063.     CF set if NetWare v2.15 NetBIOS emulator installed
  1064. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1065.       etc.
  1066. SeeAlso: INT 5C
  1067. --------N-2A0000-----------------------------
  1068. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  1069.     AX = 0000h
  1070. Return: AH = DDh
  1071. SeeAlso: INT 5B
  1072. --------N-2A01-------------------------------
  1073. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  1074.     AH = 01h
  1075.     ES:BX -> NCB (see #1894 at INT 5C)
  1076. Return: AL = NetBIOS error code
  1077.     AH = status
  1078.         00h no error
  1079.         01h error occurred
  1080. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  1081. --------N-2A02-------------------------------
  1082. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  1083.     AH = 02h
  1084.     ???
  1085. Return: ???
  1086. --------N-2A0300-----------------------------
  1087. INT 2A - NETWORK - CHECK DIRECT I/O
  1088.     AX = 0300h
  1089.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  1090.           must include the colon)
  1091. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  1092.     CF set if access via files only
  1093. Notes:    do not use direct disk accesses if this function returns CF set or the
  1094.       device is redirected (INT 21/AX=5F02h)
  1095.     use AH=00h to determine whether the network is installed; if not,
  1096.       direct physical access is allowed
  1097.     may take some time to execute, so programs which need to check
  1098.       frequently should save the result of the first call
  1099.     this function is called by the DOS kernel on INT 25 and INT 26
  1100.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  1101.       etc.
  1102. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  1103. --------N-2A04-------------------------------
  1104. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  1105.     AH = 04h
  1106.     AL = error retry
  1107.         00h automatically retry request on errors 09h, 12h, and 21h
  1108.           (see #1893 at INT 5C"NetBIOS")
  1109.         01h no retry
  1110.         02h ???
  1111.     ES:BX -> Network Control Block (see #1894 at INT 5C"NetBIOS")
  1112. Return: AX = 0000h if successful
  1113.     AH = 01h on error
  1114.         AL = error code
  1115. Notes:    invokes either INT 5B or INT 5C as appropriate
  1116.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  1117.       etc.
  1118.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  1119.       on error
  1120.     PC LAN Program defines any non-zero return value in AH as an error
  1121.       indicator for subfunction 00h, and any non-zero return value in AX
  1122.       as an error indicator for subfunction 01h
  1123. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  1124. --------N-2A0500-----------------------------
  1125. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  1126.     AX = 0500h
  1127. Return: AX reserved
  1128.     BX = number of network names available
  1129.     CX = number of network control blocks available
  1130.     DX = number of network sessions available
  1131. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1132.       etc.
  1133.     the application should call this function before using any network
  1134.       resources, and maintain its own count to avoid exceeding the
  1135.       network's resource limits
  1136. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  1137. --------N-2A06-------------------------------
  1138. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  1139.     AH = 06h
  1140.     AL = function
  1141.         01h set concatenation mode
  1142.         all printer output put in one job until return to DOS prompt
  1143.         02h set truncation mode (default)
  1144.         printer open/close or BIOS/DOS output switch starts new job
  1145.         03h flush printer output and start new print job
  1146. Return: CF set on error
  1147.         AX = error code
  1148.     CF clear if successful
  1149. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  1150.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  1151.     LANtastic v4.x no longer supports this call
  1152.     this function sets the printer mode for all redirected printers
  1153. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  1154. --------N-2A07-------------------------------
  1155. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1156.     AH = 07h
  1157.     ???
  1158. Return: ???
  1159. Program: PC Network is an early networking package which was renamed the
  1160.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  1161. SeeAlso: AH=86h
  1162. --------N-2A2001-----------------------------
  1163. INT 2A - MS Networks or NETBIOS - ???
  1164.     AX = 2001h
  1165.     ???
  1166. Return: ???
  1167. Note:    intercepted by DESQview 2.x
  1168. --------N-2A2002-----------------------------
  1169. INT 2A - NETWORK - ???
  1170.     AX = 2002h
  1171.     ???
  1172. Return: ???
  1173. Note:    called by MS-DOS 3.30-6.00 APPEND
  1174. --------N-2A2003-----------------------------
  1175. INT 2A - NETWORK - ???
  1176.     AX = 2003h
  1177.     ???
  1178. Return: ???
  1179. Note:    called by MS-DOS 3.30-6.00 APPEND
  1180. --------N-2A7802-----------------------------
  1181. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  1182.     AX = 7802h
  1183.     ES:DI -> 8-byte buffer to be filled
  1184. Return: AL = 00h if no user logged on to Extended Services
  1185.     AL <> 00h if user logged on to Extended Services
  1186.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  1187. --------D-2A80-------------------------------
  1188. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  1189.     AH = 80h
  1190.     AL = critical section number (00h-0Fh) (see #1344)
  1191. Notes:    normally hooked to avoid interrupting a critical section, rather than
  1192.       called
  1193.     the handler should ensure that none of the critical sections are
  1194.       reentered, usually by suspending a task which attempts to reenter
  1195.       an active critical section
  1196.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  1197.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  1198.       beginning at offset -11 from the Swappable Data Area
  1199.       (see #0892 at INT 21/AX=5D06h); each word contains the offset within
  1200.       the DOS data segment of a byte which must be changed from C3h (RET)
  1201.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  1202.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  1203.       words in this list point at the byte at offset 0D0Ch.
  1204.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1205.       far calls to its own handler, and does not reflect the calls back
  1206.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1207.       ModifyDOSInt2A=0 in the [386Enh] section
  1208.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  1209.       it intercepts INT 21 calls and processes them itself
  1210. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  1211.  
  1212. (Table 1344)
  1213. Values for DOS critical section number:
  1214.  01h    DOS kernel, SHARE.EXE, DOSMGR
  1215.     apparently for maintaining the integrity of DOS/SHARE/NET
  1216.       data structures
  1217.  02h    DOS kernel, DOSMGR
  1218.     ensures that no multitasking occurs while DOS is calling an
  1219.       installable device driver
  1220.  05h    network redirector
  1221.  06h    DOS 4.x only IFSFUNC
  1222.  08h    ASSIGN.COM
  1223.  0Ah    MSCDEX, CORELCDX
  1224.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  1225. --------D-2A81-------------------------------
  1226. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  1227.     AH = 81h
  1228.     AL = critical section number (00h-0Fh) (see #1344)
  1229. Notes:    normally hooked rather than called
  1230.     the handler should reawaken any tasks which were suspended due to an
  1231.       attempt to enter the specified critical section
  1232.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1233.       far calls to its own handler, and does not reflect the calls back
  1234.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1235.       ModifyDOSInt2A=0 in the [386Enh] section
  1236. SeeAlso: AH=80h,AH=82h,AX=8700h
  1237. --------D-2A82-------------------------------
  1238. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  1239.     AH = 82h
  1240. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  1241.       greater than 0Ch except 59h, and on process termination
  1242.     the handler should reawaken any tasks which were suspended due to an
  1243.       attempt to enter one of the critical sections 0 through 7
  1244. SeeAlso: AH=81h
  1245. --------N-2A84-------------------------------
  1246. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  1247.     AH = 84h
  1248. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  1249.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  1250.       software to process requests
  1251. SeeAlso: INT 28
  1252. --------N-2A86-------------------------------
  1253. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1254.     AH = 86h
  1255.     ???
  1256. Return: ???
  1257. SeeAlso: AH=07h,AH=C4h
  1258. --------P-2A8700-----------------------------
  1259. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  1260.     AX = 8700h
  1261.     CF clear
  1262. Return: CF clear if OK to print in background now
  1263.     CF set if background printing not allowed at this time
  1264. Desc:    used to inform interested programs that PRINT is about to start its
  1265.       background processing, and allow those programs to postpone the
  1266.       processing if necessary
  1267. Notes:    when PRINT gains control and wants to begin printing, it calls this
  1268.       function.  If CF is clear on return, PRINT begins its background
  1269.       processing, and calls AX=8701h when it is done.  If CF is set on
  1270.       return, PRINT will relinquish control immediately, and will not
  1271.       call AX=8701h
  1272.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  1273.       prevent background printing while its own code is active
  1274. SeeAlso: AH=80h,AH=81h,AX=8701h
  1275. --------P-2A8701-----------------------------
  1276. INT 2A CU - PRINT - END BACKGROUND PRINTING
  1277.     AX = 8701h
  1278. Desc:    used to inform interested programs that PRINT has completed its
  1279.       background processing
  1280. Note:    called by PRINT after it has performed some background printing; not
  1281.       called if AX=8700h returned with CF set.
  1282. SeeAlso: AX=8700h
  1283. --------N-2A89-------------------------------
  1284. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1285.     AH = 89h
  1286.     AL = ???  (ASSIGN uses 08h)
  1287.     ???
  1288. Return: ???
  1289. --------I-2A90-------------------------------
  1290. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  1291.     AH = 90h
  1292.     ???
  1293. Return: ???
  1294. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  1295.       03h-07h,0Ch-11h
  1296. --------N-2AC2-------------------------------
  1297. INT 2A U - Network - ???
  1298.     AH = C2h
  1299.     AL = subfunction
  1300.         07h ???
  1301.         08h ???
  1302.     BX = 0001h
  1303.     ???
  1304. Return: ???
  1305. Note:    this function is called by the DOS 3.30-6.00 APPEND
  1306. --------N-2AC4-------------------------------
  1307. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1308.     AH = C4h
  1309.     AL = subfunction
  1310.         07h ???
  1311.         08h ???
  1312.     BX = ???
  1313.     ???
  1314. Return: ???
  1315. SeeAlso: AH=86h
  1316. --------N-2AD800-----------------------------
  1317. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  1318.     AX = D800h
  1319. Return: nothing
  1320. Desc:    sets ??? flag, and sets ??? to initial value
  1321. Note:    called by CLIENT
  1322. SeeAlso: AX=D801h,AX=D850h
  1323. --------N-2AD801-----------------------------
  1324. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  1325.     AX = D801h
  1326. Return: nothing
  1327. Desc:    clears the ??? flag set by AX=D800h
  1328. Note:    called by CLIENT
  1329. SeeAlso: AX=D800h,AX=D850h
  1330. --------N-2AD850-----------------------------
  1331. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  1332.     AX = D850h
  1333. Return: nothing
  1334. Desc:    increments an internal byte-sized counter
  1335. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1336.       Advanced NetWare 4.0 DOS Requester
  1337. SeeAlso: AX=D851h
  1338. --------N-2AD851-----------------------------
  1339. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  1340.     AX = D851h
  1341. Return: nothing
  1342. Desc:    resets an internal byte-sized counter to zero
  1343. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1344.       Advanced NetWare 4.0 DOS Requester
  1345. SeeAlso: AX=D850h
  1346. --------N-2AD852-----------------------------
  1347. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1348.     AX = D852h
  1349. Return: ???
  1350. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  1351. SeeAlso: AX=D853h,INT 2F/AX=D880h
  1352. --------N-2AD853-----------------------------
  1353. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1354.     AX = D853h
  1355. Return: ???
  1356. Note:    clears the pointer set by AX=D852h
  1357. SeeAlso: AX=D852h
  1358. --------N-2AE0-------------------------------
  1359. INT 2A U - PC Network 1.00 - ???
  1360.     AH = E0h
  1361.     AL = subfunction??? (01h,02h, maybe others)
  1362.     ???
  1363. Return: ???
  1364. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  1365. --------N-2AFF90-----------------------------
  1366. INT 2A - PC/TCP PREDIR.EXE - ???
  1367.     AX = FF90h
  1368. Return: AX = ???
  1369. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1370.       PC/TCP system by FTP Software, Inc.
  1371. --------N-2AFF91-----------------------------
  1372. INT 2A - PC/TCP PREDIR.EXE - ???
  1373.     AX = FF91h
  1374.     BX = ???
  1375. Return: AX = status???
  1376. --------N-2AFF92-----------------------------
  1377. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  1378.     AX = FF92h
  1379. Return: AX = 0000h if installed
  1380.        BX = redirected printer port (FFFFh if no printers redirected)
  1381.        CX = version (CH = major, CL = minor)
  1382. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1383.       PC/TCP system by FTP Software, Inc.
  1384. --------N-2AFF93-----------------------------
  1385. INT 2A - PC/TCP PREDIR.EXE - ???
  1386.     AX = FF93h
  1387. Return: AX = ???
  1388. --------N-2AFF94-----------------------------
  1389. INT 2A - PC/TCP PREDIR.EXE - ???
  1390.     AX = FF94h
  1391.     BX = ???
  1392.     CX = ???
  1393.     DX = ???
  1394. Return: AX = ???
  1395. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1396.       PC/TCP system by FTP Software, Inc.
  1397. --------N-2AFF95-----------------------------
  1398. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  1399.     AX = FF95h
  1400.     CX = what to get
  1401.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  1402.         0001h spooling program
  1403.         0002h ???
  1404.         0003h spool file name
  1405.         0004h swap file name
  1406. Return: AX = status
  1407.         0000h successful
  1408.     BX:DX -> ASCIZ configuration string
  1409. --------N-2AFF96-----------------------------
  1410. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  1411.     AX = FF96h
  1412.     CX = what to set
  1413.         0000h ???
  1414.         0001h print-on-hotkey state
  1415.         0002h print-on-exit state
  1416.         0003h print job timeout in clock ticks
  1417.         0004h print-on-EOF state
  1418.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  1419. Return: AX = ???
  1420. SeeAlso: AX=FF97h
  1421. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1422.       PC/TCP system by FTP Software, Inc.
  1423. --------N-2AFF97-----------------------------
  1424. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  1425.     AX = FF97h
  1426.     CX = what to get
  1427.         0000h ???
  1428.         0001h print-on-hotkey state
  1429.         0002h print-on-exit state
  1430.         0003h print job timeout in clock ticks
  1431.         0004h print-on-EOF state
  1432. Return: AX = status
  1433.         0000h successful
  1434.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  1435. SeeAlso: AX=FF96h
  1436. --------D-2B---------------------------------
  1437. INT 2B - DOS 2+ - RESERVED
  1438. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1439. --------D-2C---------------------------------
  1440. INT 2C - DOS 2+ - RESERVED
  1441. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1442. --------O-2C---------------------------------
  1443. INT 2C - STARLITE architecture - KERNEL API
  1444. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  1445.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  1446.       be released in 1991.    The interrupt number is subject to change
  1447.       before the actual release.
  1448. --------m-2C---------------------------------
  1449. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  1450. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  1451.       in a chain of protected-mode handlers, and will only pass execution
  1452.       to the V86-mode INT 2C handler if none of the handlers in the
  1453.       passalong chain handle the call instead.  This is the method by which
  1454.       the real-mode stub of a cloaked application communicates with the
  1455.       protected-mode portion.
  1456.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  1457.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  1458.       Windows shuts down; between these two broadcasts, the additional
  1459.       Windows-only Cloaking services are available
  1460.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1461.       memory manager included in Helix Software's Netroom
  1462. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  1463. --------m-2C0000-----------------------------
  1464. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  1465.     AX = 0000h
  1466.     EBX = base address
  1467.     CL = access mode byte
  1468.     CH = extended access mode byte (omit limit field)
  1469.     EDX = segment limit
  1470. Return: CF clear if successful
  1471.         AX = selector
  1472.     CF set on error
  1473.         AX = error code (see #1345)
  1474. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  1475.     to access extended memory, set the base address to the desired
  1476.       physical address plus 400000h (4M)
  1477.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1478.       memory manager included in Helix Software's Netroom
  1479. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#0377
  1480.  
  1481. (Table 1345)
  1482. Values for Cloaking error code:
  1483.  0001h    no more selectors
  1484.  0002h    not a GDT ring 0 selector
  1485.  0003h    invalid selector (out of range, not user selector)
  1486.  0004h    selector not allocated
  1487. --------m-2C0001-----------------------------
  1488. INT 2C P - Cloaking - FREE GDT SELECTOR
  1489.     AX = 0001h
  1490.     SI = selector
  1491. Return: CF clear if successful
  1492.     CF set on error
  1493.         AX = error code (see #1345)
  1494. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1495. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  1496. --------m-2C0002-----------------------------
  1497. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  1498.     AX = 0002h
  1499.     SI = selector
  1500.     EBX = new physical base addres
  1501. Return: CF clear if successful
  1502.     CF set on error
  1503.         AX = error code (see #1345)
  1504. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1505. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#0377
  1506. --------m-2C0003-----------------------------
  1507. INT 2C P - Cloaking - SET SEGMENT LIMIT
  1508.     AX = 0003h
  1509.     SI = selector
  1510.     EBX = new limit
  1511. Return: CF clear if successful
  1512.     CF set on error
  1513.         AX = error code (see #1345)
  1514. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1515. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  1516. --------m-2C0004-----------------------------
  1517. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  1518.     AX = 0004h
  1519.     SI = selector
  1520.     CL = new access mode byte (see #0378)
  1521. Return: CF clear if successful
  1522.     CF set on error
  1523.         AX = error code (see #1345)
  1524. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1525. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  1526. --------m-2C0005-----------------------------
  1527. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  1528.     AX = 0005h
  1529.     SI = selector
  1530.     CL = new extended access mode byte (limit field ignored) (see #1346)
  1531. Return: CF clear if successful
  1532.     CF set on error
  1533.         AX = error code (see #1345)
  1534. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1535. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  1536.  
  1537. Bitfields for extended access mode byte:
  1538. Bit(s)    Description    (Table 1346)
  1539.  7    4K granularity instead of byte granularity
  1540.  6    32-bit code segment
  1541.  5    reserved (0)
  1542.  4    segment available to system
  1543. SeeAlso: #0379
  1544. --------m-2C0006-----------------------------
  1545. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  1546.     AX = 0006h
  1547.     CL = vector (00h-7Fh)
  1548. Return: CF clear
  1549.     DX:EBX -> current interrupt handler
  1550. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1551. SeeAlso: AX=0007h,INT 31/AX=0204h
  1552. --------m-2C0007-----------------------------
  1553. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  1554.     AX = 0007h
  1555.     CL = vector (00h-7Fh)
  1556.     DX:EBX -> interrupt handler
  1557. Return: CF clear
  1558. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1559.     the IDT entry's type remains unchanged
  1560. SeeAlso: AX=0006h,INT 31/AX=0205h
  1561. --------m-2C0008-----------------------------
  1562. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  1563.     AX = 0008h
  1564. Return: CF clear
  1565.     DX:EBX = current passalong address
  1566. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1567. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  1568. --------m-2C0009-----------------------------
  1569. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  1570.     AX = 0009h
  1571.     DX:EBX = new value for passalong address (see #1347)
  1572. Return: CF clear
  1573. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  1574.       calls the passalong address.    The handler should check whether the
  1575.       upcall is of interest to it, and if not it should jump to the old
  1576.       passalong address (retrieved with AX=0008h before the handler was
  1577.       installed).  The final handler should return with CF clear to cause
  1578.       the interrupt to be reflected back to V86 mode if none of the
  1579.       passalong handlers is triggered
  1580.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1581. SeeAlso: AX=0008h,AX=002Dh,INT 2C"CLOAKING"
  1582.  
  1583. (Table 1347)
  1584. Values Cloaking passalong address is called with:
  1585.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  1586.     SS:EBX -> caller registers (see #1348)
  1587.     CF clear
  1588.     others undefined
  1589. Return: CF clear: pass along to V86-mode INT 2C handler
  1590.     CF set: return immediately to V86 mode
  1591.  
  1592. Format of Cloaking caller registers:
  1593. Offset    Size    Description    (Table 1348)
  1594.  00h    DWORD    EDI
  1595.  04h    DWORD    ESI
  1596.  08h    DWORD    EBP
  1597.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  1598.  10h    DWORD    EBX
  1599.  14h    DWORD    EDX
  1600.  18h    DWORD    ECX
  1601.  1Ch    DWORD    EAX
  1602.  20h    DWORD    error code
  1603.  24h    DWORD    EIP
  1604.  28h    WORD    CS
  1605.  2Ah    WORD    padding
  1606.  2Ch    DWORD    EFLAGS
  1607.  30h    DWORD    ESP
  1608.  34h    WORD    SS
  1609.  36h    WORD    padding
  1610. --remainder not available if protected-mode ring3 trap---
  1611.  38h    WORD    ES
  1612.  3Ah    WORD    padding
  1613.  3Ch    WORD    DS
  1614.  3Eh    WORD    padding
  1615.  40h    WORD    FS
  1616.  42h    WORD    padding
  1617.  44h    WORD    GS
  1618.  46h    WORD    padding
  1619. --------m-2C000A-----------------------------
  1620. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  1621.     AX = 000Ah
  1622.     SI = selector
  1623. Return: CF clear if successful
  1624.         EBX = segment base address
  1625.     CF set on error
  1626.         AX = error code (see #1345)
  1627. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1628.       memory manager included in Helix Software's Netroom
  1629. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  1630. --------m-2C000B-----------------------------
  1631. INT 2C P - Cloaking - GET SELECTOR LIMIT
  1632.     AX = 000Bh
  1633.     SI = selector
  1634. Return: CF clear if successful
  1635.         EBX = segment base address
  1636.     CF set on error
  1637.         AX = error code (see #1345)
  1638. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1639. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  1640. --------m-2C---------------------------------
  1641. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  1642.     AX = function (000Ch-001Fh)
  1643. --------m-2C000F-----------------------------
  1644. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  1645.     AX = 000Fh
  1646.     ECX = event code (see #1349)
  1647.     DX = subfunction for event
  1648.     EDX high word = boost value (see #1350)
  1649.     SI:EDI -> completion procedure
  1650. Return: CF clear if successful (event scheduled)
  1651.     CF set on error
  1652. Note:    this function is only available while MS Windows is running
  1653. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  1654.  
  1655. (Table 1349)
  1656. Values for Cloaking shell event code:
  1657.  0414h    Hot key event
  1658.     subevent 0000h: Alt-Space
  1659.     subevent 0001h: Alt-Enter
  1660.     subevent 0002h: Dir-VM
  1661.  0415h    Switch context
  1662.     subevent 0000h for DOS VM context, nonzero for System VM context
  1663.  0416h    Clipboard event
  1664.  0417h    Termination event
  1665.     subevent 0000h for normal termination, nonzero for error
  1666.  0418h    Display message
  1667.     subevent 0000h for normal message, nonzero for system model ASAP
  1668.  0419h    Crash
  1669.  041Ah    Paste complete
  1670.     subevent 0000h: normal
  1671.     subevent 0001h: cancelled by user
  1672.     subevent 0002h: cancelled
  1673.  041Bh    Contention event
  1674.  041Ch    Screen switch
  1675.     subevent 0000h: forward
  1676.     subevent 0001h: back
  1677.  041Dh    Filesystem change
  1678.  041Eh    Check Focus
  1679.  041Fh    Panic
  1680.  
  1681. Bitfields for boost value:
  1682. Bit(s)    Description    (Table 1350)
  1683.  0    boost system VM until focus changes
  1684.  1    boost system VM on Switcher screen
  1685.  2    boost system VM until response
  1686.  3    boost system VM during clipboard activity
  1687.  4    boost system VM during print screen
  1688.  5    boost system VM during update
  1689. --------m-2C0011-----------------------------
  1690. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  1691.     AX = 0011h
  1692.     EBX = handle of VM to be made active
  1693.     SI:EDI -> 32-bit FAR completion procedure
  1694. Return: CF clear if successful (scheduled)
  1695.     CF set on error
  1696. Notes:    this function is only available while MS Windows is running
  1697.     the completion procedure is called with CF clear if the specified
  1698.       VM has been made active, or with CF set on error
  1699. SeeAlso: AX=000Fh,AX=0012h
  1700. --------m-2C0012-----------------------------
  1701. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  1702.     AX = 0012h
  1703. Return: CF clear
  1704.     EBX = handle of active VM
  1705.     ESI = handle of system VM
  1706.     ECX = VM status flags (see #1351)
  1707.     EDX = shell flags (see #1352)
  1708. Note:    this function is only available while MS Windows is running in enhanced
  1709.       mode
  1710. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  1711.  
  1712. Bitfields for VM status flags:
  1713. Bit(s)    Description    (Table 1351)
  1714.  0    in exclusive mode
  1715.  1    runs in background
  1716.  2    being created
  1717.  3    suspended
  1718.  4    not executable
  1719.  5    executing in protected mode
  1720.  6    contains PM application
  1721.  7    32-bit PM application
  1722.  8    called from VxD
  1723.  9    high priority background
  1724.  10    blocked on semaphore
  1725.  11    awakening
  1726.  12    has pageable V86
  1727.  13    has locked V86
  1728.  14    is scheduled
  1729.  15    idle
  1730.  16    closing
  1731.  
  1732. Bitfields for shell flags:
  1733. Bit(s)    Description    (Table 1352)
  1734.  2    windowed
  1735.  5    Alt-Tab reserved
  1736.  6    Alt-Esc reserved
  1737.  7    Alt-Space reserved
  1738.  8    Alt-PrtSc reserved
  1739.  9    Alt-Enter reserved
  1740.  10    Alt-PrtSc reserved
  1741.  11    PrtSc reserved
  1742.  12    polling enabled
  1743.  13    no HMA
  1744.  14    has shortcut key
  1745.  15    locked EMS handles
  1746.  16    locked XMS handles
  1747.  17    fast paste enabled
  1748.  18    locked V86 memory
  1749.  30    close-on-exit enabled
  1750. --------m-2C0013-----------------------------
  1751. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  1752.     AX = 0013h
  1753.     EDX = message box flags (see #1353)
  1754.     DS:ECX -> ASCIZ message text
  1755.     DS:EDI -> ASCIZ caption
  1756. Return: CF clear
  1757.     EAX = response code
  1758. Note:    this function is only available while MS Windows is running in enhanced
  1759.       mode
  1760. SeeAlso: AX=000Fh,AX=0012h
  1761.  
  1762. Bitfields for message box flags:
  1763. Bit(s)    Description    (Table 1353)
  1764.  3-0    response codes (see #1354)
  1765.  7-4    icon codes
  1766.     1 = Warning hand
  1767.     2 = exclamation mark
  1768.     4 = asterisk
  1769.  9-8    default response (0 = first button, 1 = second, 2 = third)
  1770.  12    message is system model
  1771.  15    don't change focus
  1772.  29    hang with interrupts enabled
  1773.  30    do not window
  1774.  31    execute ASAP
  1775.  
  1776. (Table 1354)
  1777. Values for response codes:
  1778.  00h    OK
  1779.  01h    OK, Cancel
  1780.  02h    Abort, Retry, Ignore
  1781.  03h    Yes, No, Cancel
  1782.  04h    Yes, No
  1783.  05h    Retry, Cancel
  1784. --------m-2C001D-----------------------------
  1785. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  1786.     AX = 001Dh
  1787. Return: CF clear
  1788.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  1789. Desc:    get the Cloaking host's entry point to bypass any other programs
  1790.       which may have hooked INT 2C in protected mode
  1791. Note:    the returned entry point must be called with a simulated INT, i.e.
  1792.       a PUSHD must precede the far call to the handler
  1793. SeeAlso: INT 2F/AX=4310h"Cloaking"
  1794. --------m-2C001E-----------------------------
  1795. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  1796.     AX = 001Eh
  1797. Return: CF clear
  1798. Desc:    allow MS Windows to switch to another VM after having prevented it
  1799.       by invoking a critical section
  1800. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  1801. --------m-2C001F-----------------------------
  1802. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  1803.     AX = 001Fh
  1804. Return: CF clear
  1805. Desc:    prevent MS Windows from switching to another VM
  1806. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  1807. --------m-2C0020-----------------------------
  1808. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  1809.     AX = 0020h
  1810. Return: EAX = number of bytes required for storing state
  1811. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1812. SeeAlso: AX=0021h,AX=0022h
  1813. --------m-2C0021-----------------------------
  1814. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  1815.     AX = 0021h
  1816.     ES:EDI -> buffer for protected-mode state
  1817. Return: CF clear
  1818.     buffer filled
  1819. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1820. SeeAlso: AX=0020h,AX=0022h
  1821. --------m-2C0022-----------------------------
  1822. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  1823.     AX = 0022h
  1824.     DS:ESI -> buffer containing previously-saved protected-mode state
  1825. Return: CF clear if successful
  1826.         state restored
  1827.     CF set on error (invalid buffer contents)
  1828. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1829. SeeAlso: AX=0020h,AX=0021h
  1830. --------m-2C0023-----------------------------
  1831. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  1832.     AX = 0023h
  1833. Notes:    not currently implemented--NOP in RM386 v6.00
  1834.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1835. --------m-2C0024-----------------------------
  1836. INT 2C P - Cloaking - SET V86-MODE STACK
  1837.     AX = 0024h
  1838.     DX:EBX = new value for V86-mode SS:ESP
  1839. Return: nothing
  1840. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1841. --------m-2C0025-----------------------------
  1842. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  1843.     AX = 0025h
  1844.     DS:EBX -> client register structure (see #1348)
  1845. Return: CF clear if successful
  1846.         client register structure updated
  1847.     CF set if no more nested procedure call space available
  1848. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  1849.       calls the routine specified by CS:IP in the client structure
  1850.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1851. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  1852. --------m-2C0026-----------------------------
  1853. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  1854.     AX = 0026h
  1855.     DS:EBX -> client register structure (see #1348)
  1856.     CX = interrupt number
  1857. Return: CF clear if successful
  1858.         client register structure updated
  1859.     CF set if no more nested procedure call space available
  1860. Notes:    this call uses the V86-mode stack supplied in the client structure
  1861.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1862. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  1863. --------m-2C0027-----------------------------
  1864. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  1865.     AX = 0027h
  1866.     DS:EBX -> client register structure (see #1348)
  1867. Return: CF clear if successful
  1868.         client register structure updated
  1869.     CF set if no more nested procedure call space available
  1870. Notes:    this call uses the V86-mode stack supplied in the client structure,
  1871.       and jumps to the address specified by CS:IP in the client structure
  1872.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1873. SeeAlso: AX=0025h,AX=0026h
  1874. --------m-2C0028-----------------------------
  1875. INT 2C P - Cloaking - GET ESP0 FROM TSS
  1876.     AX = 0028h
  1877. Return: CF clear
  1878.     EAX = TSS's ESP0
  1879. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1880.       memory manager included in Helix Software's Netroom
  1881. --------m-2C0029-----------------------------
  1882. INT 2C P - Cloaking - SET SECONDARY STACK
  1883.     AX = 0029h
  1884.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  1885. Return: CF clear
  1886. Desc:    inform RM386 of the ring 3 interrupt stack location
  1887. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1888. --------m-2C002A-----------------------------
  1889. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  1890.     AX = 002Ah
  1891.     BL = base vector of master interrupt controller
  1892.     CL = base vector of slave interrupt controller
  1893. Notes:    this call merely informs RM386 that the caller has changed the
  1894.       interrupt mappings
  1895.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1896. SeeAlso: INT 67/AX=DE0Bh
  1897. --------m-2C002BCH81-------------------------
  1898. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  1899.     AX = 002Bh
  1900.     CH = 81h
  1901.     CL = subfunction (02h-0Ch)
  1902.     other registers as appropriate for subfunction
  1903. Return: varies by function
  1904.     CF set on error
  1905. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  1906.       with the same numbers
  1907.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1908. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  1909. --------m-2C002C-----------------------------
  1910. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  1911.     AX = 002Ch
  1912. Return: CF clear
  1913.     DX:EBX = current I/O trapping passalong address
  1914. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1915. SeeAlso: AX=0008h,AX=002Dh
  1916. --------m-2C002D-----------------------------
  1917. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  1918.     AX = 002Dh
  1919.     DX:EBX = new I/O trapping passalong address (see #1355)
  1920. Return: CF clear
  1921. Notes:    RM386 calls the passalong address whenever an access to a monitored
  1922.       I/O port is attempted; the handler should check whether it is a port
  1923.       that it is interested in, and if not call the previous passalong
  1924.       address (which was retrieved with AX=002Ch before installing the
  1925.       new handler)
  1926.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1927. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  1928.  
  1929. (Table 1355)
  1930. Values Cloaking port-trapping passalong address is called with:
  1931.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  1932.         ring 3)
  1933.     SS:EBX -> caller register structure (see #1348)
  1934.         check EFLAGS V86-mode bit for type
  1935.     CX = first two bytes of I/O instruction which was trapped
  1936.     DX = port to which I/O is being performed
  1937.     CF clear
  1938. Return: CF clear if RM386 should perform I/O operation
  1939.     CF set if I/O should be skipped
  1940. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  1941.       should not modify the client CS:EIP
  1942. --------m-2C002E-----------------------------
  1943. INT 2C P - Cloaking - TRAP I/O PORT
  1944.     AX = 002Eh
  1945.     DX = port number to trap
  1946. Return: CF clear if successful
  1947.     CF set on error (port out of range or reserved)
  1948. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1949. SeeAlso: AX=002Fh,AX=0030h
  1950. --------m-2C002F-----------------------------
  1951. INT 2C PU - Cloaking - UNTRAP I/O PORT
  1952.     AX = 002Fh
  1953.     DX = port number for which to cancel trapping
  1954. Return: CF clear if successful
  1955.     CF set on error (port out of range or reserved)
  1956. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1957. SeeAlso: AX=002Eh,AX=0030h
  1958. --------m-2C0030-----------------------------
  1959. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  1960.     AX = 0030h
  1961.     DX = port number
  1962. Return: CF clear if successful
  1963.        BX = current state (0000h not trapped, 0001h trapped)
  1964.     CF set on error (port out of range or reserved)
  1965. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1966. SeeAlso: AX=002Eh,AX=002Fh
  1967. --------m-2C0031-----------------------------
  1968. INT 2C PU - RM386 v6.00 - BUG
  1969.     AX = 0031h
  1970. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  1971.       Netroom
  1972. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  1973.       invoked with this function
  1974. --------m-2C0031-----------------------------
  1975. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  1976.     AX = 0031h
  1977.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  1978. Return: CF clear if successful
  1979.         EBX = CS:IP of V86-mode callback handler
  1980.     CF set on error
  1981. SeeAlso: AX=0032h
  1982. --------m-2C0032-----------------------------
  1983. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  1984.     AX = 0032h
  1985.     EBX = CS:IP of V86-mode callback handler
  1986. Return: CF clear if successful
  1987.     CF set on error
  1988.         AX = error code
  1989.         0005h invalid callback address
  1990.         0006h callback already free
  1991. SeeAlso: AX=0032h
  1992. --------m-2C0033-----------------------------
  1993. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  1994.     AX = 0033h
  1995.     DS:EDX -> client registration structure (see #1356)
  1996. Return: CF clear if successful
  1997.     CF set on error (linked list corrupt)
  1998. SeeAlso: AX=0034h,#1497 at INT 2F/AX=4310h"Cloaking"
  1999.  
  2000. Format of client registration structure:
  2001. Offset    Size    Description    (Table 1356)
  2002.  00h    PWORD    link to next structure
  2003.  06h    PWORD    link to previous structure
  2004.  0Ch  2 BYTEs    client version (major, minor)
  2005.  0Eh 20 BYTEs    client name
  2006.  22h    DWORD    physical address of client start
  2007.  26h    DWORD    client's total size in bytes
  2008. Note:    the link area should not be modified once the structure has been
  2009.       used for the registration call
  2010. --------m-2C0034-----------------------------
  2011. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  2012.     AX = 0034h
  2013.     DS:EDX -> client registration structure (see #1356)
  2014. Return: CF clear if successful
  2015.     CF set on error (linked list corrupt)
  2016. Note:    the client must unregister before freeing the XMS block containing
  2017.       its registration structure(s)
  2018. SeeAlso: AX=0033h,#1497 at INT 2F/AX=4310h"Cloaking"
  2019. --------D-2D---------------------------------
  2020. INT 2D - DOS 2+ - RESERVED
  2021. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  2022. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  2023.       a stack bug in its protected-mode INT 2D handler which causes a crash
  2024.       when INT 2D is invoked from V86 mode
  2025. --------t-2D---------------------------------
  2026. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  2027.     AH = multiplex number
  2028.     AL = function
  2029.         00h installation check
  2030.         Return: AL = 00h if free
  2031.             AL = FFh if multiplex number in use
  2032.                 CX = binary version number (CH = major, CL = minor)
  2033.                 DX:DI -> signature string (see #1357) identifying
  2034.                     the program using the multiplex number
  2035.         01h get entry point
  2036.         Return: AL = 00h if all API calls via INT 2D
  2037.             AL = FFh if entry point supported
  2038.                 DX:BX -> entry point for bypassing interrupt chain
  2039.         02h uninstall
  2040.         DX:BX = return address for successful uninstall (may be
  2041.             ignored by TSR)
  2042.         Return: AL = status
  2043.                 00h not implemented
  2044.                 01h unsuccessful
  2045.                 02h can not uninstall yet, will do so when able
  2046.                 03h safe to remove, but no resident uninstaller
  2047.                 (TSR still enabled)
  2048.                 BX = segment of memory block with resident code
  2049.                 04h safe to remove, but no resident uninstaller
  2050.                 (TSR now disabled)
  2051.                 BX = segment of memory block with resident code
  2052.                 05h not safe to remove now, try again later
  2053.                 FFh successful
  2054.             return at DX:BX with AX destroyed if successful and
  2055.               TSR honors specific return address
  2056.         03h request pop-up
  2057.         Return: AL = status
  2058.                 00h not implemented or TSR is not a pop-up
  2059.                 01h can not pop up at this time, try again later
  2060.                 02h can not pop up yet, will do so when able
  2061.                 03h already popped up
  2062.                 04h unable to pop up, user intervention required
  2063.                 BX = standard reason code
  2064.                     0000h unknown failure
  2065.                     0001h interrupt chain passes through memory
  2066.                       which must be swapped out to pop up
  2067.                     0002h swap-in failed
  2068.                 CX = application's reason code if nonzero
  2069.                 FFh TSR popped up and was exited by user
  2070.                 BX = return value
  2071.                     0000h no return value
  2072.                     0001h TSR unloaded
  2073.                     0002h-00FFh reserved
  2074.                     0100h-FFFFh application-dependent
  2075.         04h determine chained interrupts
  2076.         BL = interrupt number (except 2Dh)
  2077.         Return: AL = status
  2078.                 00h not implemented
  2079.                 01h (obsolete) unable to determine
  2080.                 02h (obsolete) interrupt hooked
  2081.                 03h (obsolete) interrupt hooked, address returned
  2082.                 DX:BX -> TSR's interrupt BL handler
  2083.                 04h list of hooked interrupts returned
  2084.                 DX:BX -> interrupt hook list (see #1358)
  2085.                 FFh interrupt not hooked
  2086.         Notes:    since INT 2D is known to be hooked, the resident code
  2087.               need not test for BL=2Dh (to minimize its size), and
  2088.               the return value is therefore undefined in that case.
  2089.             BL is ignored if the TSR returns AL=04h; in that case,
  2090.               the caller needs to scan the return list rather than
  2091.               making additional calls to this function.  If the
  2092.               return is not 00h or 04h, then the caller must cycle
  2093.               through the remaining interrupt numbers it wishes to
  2094.               check.
  2095.             return values 01h thru 03h are disparaged and will be
  2096.               removed from the next version of this specification;
  2097.               they are included for compatibility with version 3.3,
  2098.               though they were probably never used in any
  2099.               implementation
  2100.         05h get hotkeys
  2101.         Return: AL = status
  2102.                 00h not implemented
  2103.                 FFh supported
  2104.                 DX:BX -> hotkey list (see #1359)
  2105.         06h-0Fh reserved for future enhancements
  2106.         Return: AL = 00h (not implemented)
  2107.         other  application-dependent
  2108. Notes:    programs should not use fixed multiplex numbers; rather, a program
  2109.       should scan all multiplex numbers from 00h to FFh, remembering the
  2110.       first unused multiplex in case the program is not yet installed.
  2111.       For multiplex numbers which are in use, the program should compare
  2112.       the first 16 bytes of the signature string to determine whether it
  2113.       is already installed on that multiplex number.  If not previously
  2114.       installed, it should use the first free multiplex number.
  2115.     functions other than 00h are not valid unless a program is installed
  2116.       on the selected multiplex number
  2117.     to be considered fully compliant with version 3.5 of the specification,
  2118.       programs must implement at least functions 00h, 02h (no resident
  2119.       uninstall code required), and 04h (return value 04h).     TSRs that
  2120.       provide hotkeys with which the user can activate them must also
  2121.       implement function 05h.  The absolute minimum fully-compliant
  2122.       implementation has an overhead of 64 bytes (80 bytes with function
  2123.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  2124.       protocol header and hook list entry).
  2125.     the signature string and description may be used by memory mappers
  2126.       to display the installed programs
  2127.     users of this proposal should adhere to the IBM interrupt sharing
  2128.       protocol (see #1363), which will permit removal of TSRs in
  2129.       arbitrary order and interrupt handler reordering.  All TSRs
  2130.       following this proposal should be removable, though they need not
  2131.       keep the code for removing themselves resident; it is acceptable
  2132.       for a separate program to perform the removal.
  2133.     A sample implementation including example TSRs and utility programs
  2134.       may be found in a separate package distributed as AMISLnnn.ZIP
  2135.       (AMISL091.ZIP as of this writing).
  2136.     Please let me know if you choose to follow this proposal.  The
  2137.       signature and a list of the private API calls you use would be
  2138.       appreciated, as well.
  2139. SeeAlso: INT 2F
  2140. Index:    installation check;Alternate Multiplex Interrupt Specification
  2141. Index:    installation check;AMIS|installation check;FASTMOUS
  2142. Index:    installation check;SPELLER|installation check;Monitor
  2143. Index:    installation check;NOLPT|installation check;NOTE
  2144. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  2145. Index:    installation check;VGABLANK|installation check;EATMEM
  2146. Index:    installation check;RECALL|installation check;XPTR2
  2147. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  2148. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  2149.  
  2150. Format of AMIS signature string:
  2151. Offset    Size    Description    (Table 1357)
  2152.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  2153.  08h  8 BYTEs    blank-padded product name
  2154.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  2155. Note:    it is not necessary to reserve a full 64 bytes for the description,
  2156.       just enough to store the actual ASCIZ string
  2157. SeeAlso: #1364
  2158.  
  2159. Format of AMIS interrupt hook list [array]:
  2160. Offset    Size    Description    (Table 1358)
  2161.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  2162.  01h    WORD    offset within hook list's segment of the interrupt handler
  2163.         this will point at the initial short jump of the interrupt
  2164.           sharing protocol header (see #1363)
  2165.  
  2166. Format of AMIS hotkey list:
  2167. Offset    Size    Description    (Table 1359)
  2168.  00h    BYTE    type of hotkey checking (see #1360)
  2169.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  2170.  02h 6N BYTEs    array of hotkey definitions
  2171.         (one per hotkey, first should be primary hotkey)
  2172.         Offset    Size    Description
  2173.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  2174.                 hotkey triggers on release if bit 7 set
  2175.          01h    WORD    required shift states (see #1361)
  2176.          03h    WORD    disallowed shift states (see #1361)
  2177.          05h    BYTE    hotkey flags (see #1362)
  2178. Notes:    except for bit 7, the shift states correspond exactly to the return
  2179.       values from INT 16/AH=12h.  A set bit in the required states word
  2180.       indicates that the corresponding shift state must be active when the
  2181.       hotkey's scan code is received for the hotkey to be recognized; a
  2182.       clear bit means that the corresponding state may be ignored.    A set
  2183.       bit in the disallowed shift states word indicates that the
  2184.       corresponding shift state must be inactive.
  2185.     for the disallowed-states word, if one of the "either" bits is set,
  2186.       then both the corresponding left bit and right bit must be set
  2187.     examples:
  2188.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  2189.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  2190.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  2191. Index:    hotkeys;AMIS
  2192.  
  2193. Bitfields for type of AMIS hotkey checking:
  2194. Bit(s)    Description    (Table 1360)
  2195.  0    checks before chaining INT 09
  2196.  1    checks after chaining INT 09
  2197.  2    checks before chaining INT 15/AH=4Fh
  2198.  3    checks after chaining INT 15/AH=4Fh
  2199.  4    checks on INT 16/AH=00h,01h,02h
  2200.  5    checks on INT 16/AH=10h,11h,12h
  2201.  6    checks on INT 16/AH=20h,21h,22h
  2202.  7    reserved (0)
  2203.  
  2204. Bitfields for AMIS shift states:
  2205. Bit(s)    Description    (Table 1361)
  2206.  0    right shift pressed
  2207.  1    left shift pressed
  2208.  2    either control key pressed
  2209.  3    either Alt key pressed
  2210.  4    ScrollLock active
  2211.  5    NumLock active
  2212.  6    CapsLock active
  2213.  7    either shift key pressed
  2214.  8    left control key pressed
  2215.  9    left Alt key pressed
  2216.  10    right control key pressed
  2217.  11    right Alt key pressed
  2218.  12    ScrollLock pressed
  2219.  13    NumLock pressed
  2220.  14    CapsLock pressed
  2221.  15    SysReq key pressed
  2222. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  2223.       bits 8 and 10 are both set, then both control keys must be pressed.
  2224.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  2225.     the SysReq key is often labeled SysRq
  2226.  
  2227. Bitfields for AMIS hotkey flags:
  2228. Bit(s)    Description    (Table 1362)
  2229.  0    hotkey chained before processing
  2230.  1    hotkey chained after processing
  2231.  2    others should pass through this hotkey so that it can be monitored
  2232.  3    hotkey will not activate if other keys pressed/released before hotkey
  2233.       press is completed
  2234.  4    this key is remapped into some other key
  2235.  5-7    reserved (0)
  2236.  
  2237. Format of interrupt sharing protocol interrupt handler entry point:
  2238. Offset    Size    Description    (Table 1363)
  2239.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  2240.           following this data block (EBh 10h)
  2241.  02h    DWORD    address of next handler in chain
  2242.  06h    WORD    signature 424Bh
  2243.  08h    BYTE    EOI flag
  2244.         00h software interrupt or secondary hardware interrupt handler
  2245.         80h primary hardware interrupt handler (will issue EOI)
  2246.  09h  2 BYTEs    short jump to hardware reset routine
  2247.         must point at a valid FAR procedure (may be just RETF)
  2248.  0Bh  7 BYTEs    reserved (0)
  2249. SeeAlso: INT F1"Common ISDN API",#2615
  2250.  
  2251. (Table 1364)
  2252. Values of AMIS signatures known to be in use:
  2253.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  2254.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  2255.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  2256.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  2257.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  2258.               in product description field, if desired)
  2259.             (see also INT 2D/AL=DCh)
  2260.  'DTown SD' 'DTU     '  DTown Software Development's DTown Utilities
  2261.             (see also INT 2D/AL=20h)
  2262.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  2263.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  2264.  'heathh  ' 'Monitor '
  2265.  'Helge O '        TSRs by Helge Olav Helgesen
  2266.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  2267.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  2268.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  2269.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  2270.  'Pino Nav' 'Keybit  '  Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  2271.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  2272.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  2273.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  2274.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  2275.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  2276.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  2277.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  2278.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  2279.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  2280.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  2281.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  2282.             testing programs (v1.1+)
  2283.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  2284.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  2285. SeeAlso: #1357
  2286. --------N-2D--10-----------------------------
  2287. INT 2D - RATSR 2.0+ - GET STATUS
  2288.     AL = 10h
  2289.     AH = AMIS multiplex number for RATSR
  2290. Return: AL = status
  2291.         01h listening (no connection)
  2292.         02h receiving          \
  2293.         03h sending               > station being monitored
  2294.         04h initializing receive  /
  2295.     AH = keyboard lock status (00h unlocked, 01h locked)
  2296. Program: RATSR is a utility by James Berry provided with
  2297.       RemoteAccess/Professional, a commercial bulletin board system, that
  2298.       allows remote control of a station over a network
  2299. SeeAlso: INT 2D"AMIS"
  2300. --------d-2D--10-----------------------------
  2301. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  2302.     AL = 10h
  2303.     AH = AMIS multiplex number for dLite
  2304. Return: CF clear if successful
  2305.         ES:BX -> parameter block (see #1365)
  2306.     CF set on error
  2307. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  2308.       expands compressed files when they are read
  2309. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  2310.  
  2311. Format of dLite parameter block:
  2312. Offset    Size    Description    (Table 1365)
  2313.  00h    BYTE    TSR flags (see #1366)
  2314.  01h    WORD    maximum number of programs needing original filesize
  2315.  03h    WORD    current number of programs needing original filesize
  2316.  05h    WORD    maximum number of files that can be handled by dLite (should
  2317.           be the same as FILES= in CONFIG.SYS)
  2318.  07h    WORD    offset (in the same segment as the parameter block) of the
  2319.           table of programs needing the original filesize (8 bytes
  2320.           each,    without path or extension, uppercase, and zero \
  2321.           terminated if    shorter than 8 bytes)
  2322.  
  2323. Bitfields for dLite TSR flags:
  2324. Bit(s)    Description    (Table 1366)
  2325.  0    deny FCB access
  2326.  1    dLite sleeping rather than activated
  2327.  2    always indicate original filesize when reading directory entries,
  2328.       rather than only for specified programs
  2329.  3-7    reserved
  2330. SeeAlso: #1365
  2331. --------V-2D--10-----------------------------
  2332. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  2333.     AL = 10h
  2334.     AH = AMIS multiplex number for Burnout Plus
  2335. Return: AL = 01h
  2336.     BX = Burnout Plus status (see #1367)
  2337.     CX = record of features loaded (see #1368)
  2338.     ES:DI -> Burnout Plus control structure (see #1369)
  2339. Program: Burnout Plus is a DOS screen saver from Cove Software
  2340. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  2341. Index:    screen saver;Burnout Plus
  2342.  
  2343. Bitfields for Burnout Plus status:
  2344. Bit(s)    Description    (Table 1367)
  2345.  0    screen is blanked
  2346.  1    MS Windows is active (Burnout Plus deactivated)
  2347.  2-15    reserved
  2348.  
  2349. Bitfields for Burnout Plus features loaded/features enabled:
  2350. Bit(s)    Description    (Table 1368)
  2351.  0    mouse activity monitor
  2352.  1    passkey support
  2353.  2    password support
  2354.  3    continuous clear
  2355.  4    software blanking
  2356.  5    video activity monitor
  2357.  6    disk activity monitor
  2358.  7    activating keystroke suppression
  2359. SeeAlso: #1369
  2360.  
  2361. Format of Burnout Plus control structure:
  2362. Offset    Size    Description    (Table 1369)
  2363.  00h    BYTE    size of structure in bytes
  2364.  01h    WORD    Burnout Plus version
  2365.  03h    WORD    screen blanking reset count in clock ticks
  2366.  05h    WORD    current countdown value in clock ticks
  2367.  07h    BYTE    type of timeout specification
  2368.  08h    BYTE    instant-blank hotkey
  2369.  09h    WORD    extended status information (see #1370)
  2370.         the bits for password, passkey, and software blanking are
  2371.           ignored and cannot be enabled or disabled externally
  2372.  0Bh    WORD    features enabled (see #1368)
  2373. Note:    all fields except the first two may be modified by external programs
  2374.       to affect the operation of Burnout Plus
  2375. Index:    hotkeys;Burnout Plus
  2376.  
  2377. Bitfields for extended Burnout Plus status information:
  2378. Bit(s)    Description    (Table 1370)
  2379.  0    Burnout Plus disabled
  2380.  1    force screen to blank on next clock tick
  2381.  2    restore screen if currently blanked
  2382.  3-15    reserved
  2383. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  2384.       or restoring the screen
  2385. SeeAlso: #1369
  2386. --------V-2D--10-----------------------------
  2387. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  2388.     AL = 10h
  2389.     AH = AMIS multiplex number for Screen Thief
  2390. Return: nothing
  2391. Program: Screen Thief is a graphics screen grabber
  2392. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  2393.       does not release the low-memory stub; this may be used to effect a
  2394.       partial uninstall if INT 2D/AL=02h fails
  2395. SeeAlso: INT D8"Screen Thief"
  2396. --------i-2D--10-----------------------------
  2397. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  2398.     AL = 10h
  2399.     AH = AMIS multiplex number for RAMLIGHT
  2400. Return: ES:BX -> array of fake device driver headers used in monitoring
  2401.     CX = number of drives being monitored???
  2402. --------U-2D--10-----------------------------
  2403. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  2404.     AL = 10h
  2405. Return: AL = FFh
  2406.     BL = extended API availability (00h no, 01h API is loaded)
  2407. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2408. --------d-2D--11-----------------------------
  2409. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  2410.     AL = 11h
  2411.     AH = AMIS multiplex number for dLite
  2412.     BX = file handle
  2413. Return: CF clear if successful
  2414.         DX:AX = size of uncompressed file
  2415.     CF set on error (not dPressed file)
  2416. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  2417. --------U-2D--11-----------------------------
  2418. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  2419.     AL = 11h
  2420.     BL = function
  2421.         00h get number of installed utilities
  2422.         Return: BL = number of utilities
  2423.         01h get installed utilities
  2424.             DX:DI -> buffer containing one byte for each utility
  2425.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  2426.               whether the corresponding utility is loaded
  2427. Return: AL = FFh if supported
  2428. Note:    this function is only available if the extended API has been installed
  2429.       in the resident portion
  2430. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  2431. --------d-2D--12-----------------------------
  2432. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  2433.     AL = 12h
  2434.     AH = AMIS multiplex number for dLite
  2435.     BX = file handle
  2436. Return: CF clear if successful
  2437.         DX:AX = size of compressed file
  2438.     CF set on error (not dPressed file)
  2439. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  2440. --------U-2D--20-----------------------------
  2441. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  2442.     AL = 20h
  2443. Return: AL = FFh if available
  2444.         DX:DI -> DTU popup-handler
  2445. Note:    this function is only available if the extended API has been installed
  2446.       in the resident portion
  2447. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  2448. --------U-2D--21-----------------------------
  2449. INT 2D - DTown Utilities v1.40+ - POP UP
  2450.     AL = 21h
  2451.     BL = which utility to bring up
  2452.         00h active utility
  2453.         01h help screen
  2454.         0Ah ASCII table
  2455.         0Bh memory view
  2456.         0Ch CPU status
  2457.         0Dh calculator
  2458.         0Eh miscellaneous
  2459.         0Fh file viewer
  2460.         10h disassembler
  2461. Return: AL = status
  2462.         00h already active
  2463.         FFh popped up successfully
  2464.     BX = 0000h
  2465. Note:    this function is only available if the extended API has been installed
  2466.       in the resident portion
  2467. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2468. --------U-2D--50-----------------------------
  2469. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  2470.     AL = 50h
  2471.     CX:DX = new address for start of memory view utility's display
  2472. Note:    this function is only available if the extended API has been installed
  2473.       in the resident portion
  2474. Return: AL = FFh if supported
  2475. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  2476. --------U-2D--51-----------------------------
  2477. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  2478.     AL = 51h
  2479.     BL = reference ("bookmark") number
  2480.     CX:DX = new address for reference
  2481. Return: AL = status
  2482.         00h invalid index
  2483.         FFh reference set
  2484. Note:    this function is only available if the extended API has been installed
  2485.       in the resident portion
  2486. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2487. --------b-2D--DC-----------------------------
  2488. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  2489.     AL = DCh
  2490.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  2491.     DL = LPT Port Rescanned
  2492. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  2493.       conforming to the Advanced Parallel Port Committee's daisy chain
  2494.       specification.
  2495. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  2496.       warn parallel port device drivers that their daisy chain ID may
  2497.       have been changed.
  2498. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  2499. SeeAlso: INT 17/AX=0200h"Advanced Parallel Port"
  2500. --------l-2E---------------------------------
  2501. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2502.     DS:SI -> commandline to execute (see #1371)
  2503. Return: all registers except CS:IP destroyed
  2504.     AX = status (4DOS v4.0)
  2505.        0000h successful
  2506.        FFFFh error before processing command (not enough memory, etc)
  2507.        other error number returned by command
  2508. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2509.       internal commands) without loading another copy of COMMAND.COM
  2510.     if COMMAND.COM is the user's command interpreter, the primary copy
  2511.       executes the command; this allows the master environment to be
  2512.       modified by issuing a "SET" command, but changes in the master
  2513.       environment will not become effective until all programs descended
  2514.       from the primary COMMAND.COM terminate
  2515.     since COMMAND.COM processes the string as if typed from the keyboard,
  2516.       the transient portion needs to be present, and the calling program
  2517.       must ensure that sufficient memory to load the transient portion can
  2518.       be allocated by DOS if necessary
  2519.     results are unpredictable if invoked by a program run from a batch file
  2520.       because this call is not reentrant and COMMAND.COM uses the same
  2521.       internal variables when processing a batch file
  2522.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2523.       has been loaded
  2524.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  2525.  
  2526. Format of DOS commandline:
  2527. Offset    Size    Description    (Table 1371)
  2528.  00h    BYTE    length of command string, not counting trailing CR
  2529.  01h    var    command string
  2530.   N    BYTE    0Dh (CR)
  2531. --------O-2E---------------------------------
  2532. INT 2E UP - Windows NT - NATIVE API
  2533.     EAX = function number
  2534.     EDX = address of parameter block
  2535. Return: ???
  2536. --------l-2E----BXE22E-----------------------
  2537. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2538.     BX = E22Eh
  2539.     DS:SI -> zero byte
  2540. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2541. ----------2F---------------------------------
  2542. INT 2F - Multiplex - NOTES
  2543.     AH = identifier of program which is to handle the interrupt
  2544.        00h-7Fh reserved for DOS
  2545.        B8h-BFh reserved for networks
  2546.        C0h-FFh reserved for applications
  2547.     AL is the function code
  2548.    This is a general mechanism for verifying the presence of a TSR and
  2549.    communicating with it.  When searching for a free identifier code for AH
  2550.    using the installation check (AL=00h), the calling program should set
  2551.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2552.    and SS:SP to be valid on return, since numerous programs now use additional
  2553.    registers on input and/or output for the installation check.
  2554. Notes:    Since the multiplex chain is growing so long, and beginning to
  2555.       experience multiplex number collisions, I am proposing an alternate
  2556.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2557.       multiplex, please let me know.
  2558.     DOS and some other programs return values in the flags register, so
  2559.       any TSR which chains by calling the previous handler rather than
  2560.       jumping to it should ensure that the returned flags are preserved
  2561.       and passed back to the original caller
  2562. SeeAlso: INT 2D
  2563. --------t-2F---------------------------------
  2564. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2565.     AH = xx (dynamically assigned based upon a search for a multiplex
  2566.          number which doesn't answer installed)
  2567.     AL = 00h installation check
  2568.     ES:DI = EBEBh:BEBEh
  2569. Return: AL = 00h not installed
  2570.          01h not installed, not OK to install
  2571.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2572.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2573.          short form of the manufacturer's name, PPPPPPPP is a product
  2574.          name and NNNN is the product's version number
  2575. --------t-2F---------------------------------
  2576. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2577.     AH = programmer-selected multiplex number
  2578.     AL = function
  2579.         00h installation check
  2580.         Return: AL = FFh if installed
  2581.         01h get TSR interrupt vectors
  2582.         Return: DX:AX -> vector table (see #1372)
  2583.         02h get TSR code segment
  2584.         Return: AX = code segment for all interrupt handlers
  2585.         03h call user exit routine and release TSR's memory
  2586.         04h get signature string
  2587.         Return: DX:AX -> counted string containing signature
  2588.         05h get TSR's INT 2F handler
  2589.         Return: DX:AX -> INT 2F handler
  2590.         06h enable/disable TSR
  2591.         BL = new state (00h disabled, 01h enabled)
  2592.         07h activate TSR (popup if not disabled)
  2593.         08h get hotkeys
  2594.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2595.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2596.         09h set hotkey
  2597.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2598.         CX = new hotkey (CH = keyflags, CL = scancode)
  2599.         0Ah-1Fh reserved
  2600. Index:    installation check;Ross Wentworth POPUP library
  2601. Index:    hotkeys;Ross Wentworth POPUP library
  2602.  
  2603. Format of POPUP vector table entry:
  2604. Offset    Size    Description    (Table 1372)
  2605.  00h    BYTE    vector number (00h = end of table)
  2606.  01h    DWORD    original vector
  2607.  05h    WORD    offset of interrupt handler in TSR's code segment
  2608. --------t-2F---------------------------------
  2609. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2610.     AH = xx (dynamically assigned based upon a search for a multiplex
  2611.          number from C0h to FFh which doesn't answer installed)
  2612.     AL = 00h installation check
  2613.     ES:DI = 1492h:1992h
  2614. Return: AL = 00h not installed
  2615.          01h not installed, not OK to install
  2616.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2617.            point to author_name_ver table (see #1373)
  2618.     AH = FFh
  2619. Note:    this interface permits advanced communication with TSRs: it is possible
  2620.       to make a generic uninstall utility, advanced TSR relocator programs
  2621.       in order to fit fragmented memory areas, etc.
  2622. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2623. Index:    installation check;CiriSOFT TSR interface
  2624. Index:    uninstall;CiriSOFT TSR interface
  2625.  
  2626. Format of CiriSOFT author_name_ver table:
  2627. Offset    Size    Description    (Table 1373)
  2628.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  2629.           with PSP, XMS upper memory segment if installed as UMB...)
  2630.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  2631.           in *.COM programs and 0 in upper memory TSR's).
  2632.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  2633.           used by TSR is possible to determine if hooked vectors are
  2634.           still pointing it (and if it is safe to uninstall).
  2635.  -10    BYTE    characteristics byte (see #1374)
  2636.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  2637.           that the TSR must use THIS variable in it's INT 2Fh handler.
  2638.  -8    WORD    offset to vector_area table (see #1375)
  2639.  -6    WORD    offset to extra_area table (see #1376,bit 7 in offset -10)
  2640.  -4   4 BYTEs    signature string "*##*"
  2641.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  2642.           is used in order to determine if the TSR is already resident
  2643.           and it's version code; the ':' char is used as delimiter)
  2644.  
  2645. Bitfields for CiriSOFT characteristics byte:
  2646. Bit(s)    Description    (Table 1374)
  2647.  0-2    type
  2648.     000 normal program (with PSP)
  2649.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  2650.           when uninstalling)
  2651.     010 device driver (*.SYS)
  2652.     011 device driver in EXE format
  2653.     1xx others (reserved)
  2654.  3-6    reserved
  2655.  7    set if extra_table defined and supported (see #1376)
  2656. SeeAlso: #1373
  2657.  
  2658. Format of CiriSOFT vector_area table:
  2659. Offset    Size    Description    (Table 1375)
  2660.  -1    BYTE    number of vectors intercepted by TSR
  2661.  00h    BYTE    first vector number
  2662.  01h    DWORD    first vector pointer before installing the TSR
  2663.  05h    BYTE    second vector number
  2664.  06h    DWORD    second vector pointer before installing the TSR
  2665.  0Ah    ...    (and so on)
  2666. Note:    the TSR must use these variables to invoke the previous interrupt
  2667.       handler routines
  2668. SeeAlso: #1373
  2669.  
  2670. Format of extra_area table (needed only to improve relocation feature):
  2671. Offset    Size    Description    (Table 1376)
  2672.  00h    WORD    offset to external_ctrl table (see #1377)
  2673.         0000h if not supported
  2674.  02h    WORD    reserved for future use (0)
  2675. SeeAlso: #1373
  2676.  
  2677. Format of CiriSOFT external_ctrl table:
  2678. Offset    Size    Description    (Table 1377)
  2679.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  2680.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  2681.  ---And if bit 0 in offset 00h is off:
  2682.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  2683.           /SR parameter (silent installation & inhibit)
  2684.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  2685.           from the previous TSR still resident
  2686.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  2687. --------c-2F00-------------------------------
  2688. INT 2F U - DOS 2.x only PRINT.COM - ???
  2689.     AH = 00h
  2690.     ???
  2691. Return: ???
  2692. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2693.     values in AH other than 00h or 01h cause PRINT to return the number of
  2694.       files in the queue in AH
  2695. SeeAlso: AH=01h
  2696. --------P-2F00-------------------------------
  2697. INT 2F U - PSPRINT - PRINT JOB CONTROL
  2698.     AH = 00h
  2699.     ???
  2700. Return: ???
  2701. --------c-2F0080-----------------------------
  2702. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  2703.     AX = 0080h
  2704. Return: after PRINT executes
  2705. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  2706.     this function is not supported by the Novell DOS 7 PRINT.COM
  2707. --------N-2F00D8-----------------------------
  2708. INT 2F - Personal NetWare - VLM - ???
  2709.     AX = 00D8h
  2710.     ???
  2711. Return: ???
  2712. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  2713.       NOP
  2714. --------c-2F01-------------------------------
  2715. INT 2F U - DOS 2.x only PRINT.COM - ???
  2716.     AH = 01h
  2717.     ???
  2718. Return: ???
  2719. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2720.     values in AH other than 00h or 01h cause PRINT to return the number of
  2721.       files in the queue in AH
  2722. SeeAlso: AH=00h
  2723. --------c-2F0100-----------------------------
  2724. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  2725.     AX = 0100h
  2726. Return: AL = status
  2727.         00h not installed
  2728.         01h not installed, but not OK to install
  2729.         FFh installed
  2730.         AH = 00h (Novell DOS 7)
  2731. SeeAlso: AX=0101h
  2732. --------c-2F0100SI20D6-----------------------
  2733. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  2734.     AX = 0100h
  2735.     SI = 20D6h
  2736.     DI = 8761h
  2737. Return: AX = 00FFh if installed
  2738.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  2739.         SI = resident code segment
  2740. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2741.       LaserTools' PrintCache memory/disk-based print spooler package
  2742. Note:    if either of SI or DI differ from the indicated magic values, only AX
  2743.       will be modified on return, for compatibility with DOS PRINT
  2744. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  2745. --------c-2F0101-----------------------------
  2746. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  2747.     AX = 0101h
  2748.     DS:DX -> submit packet (see #1378)
  2749. Return: CF clear if successful
  2750.         AL = status
  2751.         01h added to queue
  2752.         9Eh now printing
  2753.     CF set on error
  2754.         AX = error code (see #1379,#0885 at INT 21/AH=59h)
  2755. SeeAlso: AX=0102h
  2756.  
  2757. Format of PRINT submit packet:
  2758. Offset    Size    Description    (Table 1378)
  2759.  00h    BYTE    level (must be 00h)
  2760.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2761.  
  2762. (Table 1379)
  2763. Values for PRINT error code:
  2764.  0001h    invalid function
  2765.  0002h    file not found
  2766.  0003h    path not found
  2767.  0004h    out of file handles
  2768.  0005h    access denied
  2769.  0008h    print queue full
  2770.  0009h    spooler busy
  2771.  000Ch    name too long
  2772.  000Fh    invalid drive
  2773. --------c-2F0101SI20D6-----------------------
  2774. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  2775.     AX = 0101h
  2776.     SI = 20D6h
  2777.     DI = 8761h
  2778.     DS:DX -> submit packet (see #1378)
  2779.     CL = print options
  2780.         bit 4: use default options
  2781. Return: CF clear if successful
  2782.         AL = status
  2783.         01h added to queue
  2784.         9Eh now printing
  2785.     CF set on error
  2786.         AX = error code (see #1379)
  2787. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  2788.       LaserTools' PrintCache memory/disk-based print spooler package
  2789. Note:    if either SI or DI differs from the indicated magic values on entry,
  2790.       PrintCache will use the default print options for the file for
  2791.       compatibility with DOS PRINT
  2792. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  2793. --------c-2F0102-----------------------------
  2794. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  2795.     AX = 0102h
  2796.     DS:DX -> ASCIZ filename (wildcards allowed)
  2797. Return: CF clear if successful
  2798.     CF set on error
  2799.         AX = error code (see #1379)
  2800. SeeAlso: AX=0101h,AX=0103h
  2801. --------c-2F0103-----------------------------
  2802. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  2803.     AX = 0103h
  2804. Return: CF clear if successful
  2805.     CF set on error
  2806.         AX = error code (see #1379)
  2807. SeeAlso: AX=0102h
  2808. --------c-2F0104-----------------------------
  2809. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  2810.     AX = 0104h
  2811. Return: CF clear if successful
  2812.         DX = error count since status last read
  2813.         DS:SI -> print queue
  2814.     CF set on error
  2815.         AX = error code (see #1379)
  2816. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  2817.       to avoid changing the list while it is being examined
  2818. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2819.       an empty filename; the first name is the file currently being printed
  2820.     printing is stopped until AX=0105h is called to prevent the queue
  2821.       from changing while the filenames are being read
  2822. SeeAlso: AX=0101h,AX=0105h
  2823. --------c-2F0105-----------------------------
  2824. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  2825.     AX = 0105h
  2826. Return: CF clear if successful
  2827.     CF set on error
  2828.         AX = error code (see #1379)
  2829. Desc:    restart PRINT's activities once an application finishes examining the
  2830.       print queue
  2831. SeeAlso: AX=0104h
  2832. --------c-2F0106-----------------------------
  2833. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  2834.     AX = 0106h
  2835. Return: CF set if files in print queue
  2836.         AX = error code 0008h (queue full)
  2837.         DS:SI -> device driver header
  2838.     CF clear if print queue empty
  2839.         AX = 0000h
  2840. Desc:    determine which device, if any, PRINT is currently using for output
  2841. Notes:    undocumented prior to the release of MS-DOS 5.0
  2842.     this function can be used to allow a program to avoid printing to the
  2843.       printer on which PRINT is currently performing output
  2844. SeeAlso: AX=0104h
  2845. --------c-2F0107-----------------------------
  2846. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  2847.     AX = 0107h
  2848.     CL bit 0: output form feed between print jobs
  2849. Return: AL destroyed
  2850. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  2851. --------N-2F0200-----------------------------
  2852. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2853.     AX = 0200h
  2854. Return: AL = FFh if installed
  2855. Desc:    determine whether the PC LAN Program redirector is installed
  2856. SeeAlso: AX=0201h,AX=0203h
  2857. --------N-2F0201-----------------------------
  2858. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2859.     AX = 0201h
  2860. Return: nothing???
  2861. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2862.     AX=0202h appears to be the opposite function
  2863.     these functions are supposedly used to signal opening and closing of
  2864.       printers
  2865. SeeAlso: AX=0202h
  2866. --------N-2F0202-----------------------------
  2867. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2868.     AX = 0202h
  2869.     ???
  2870. Return: nothing???
  2871. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2872.     these functions are supposedly used to signal opening and closing of
  2873.       printers
  2874. SeeAlso: AX=0201h
  2875. --------N-2F0203-----------------------------
  2876. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2877.     AX = 0203h
  2878. Return: nothing???
  2879. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2880.     AX=0204h appears to be the opposite function
  2881.     these functions are supposedly used to signal opening and closing of
  2882.       printers
  2883. SeeAlso: AX=0200h,AX=0204h
  2884. --------N-2F0204-----------------------------
  2885. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2886.     AX = 0204h
  2887.     ???
  2888. Return: nothing???
  2889. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  2890.     AX=0203h appears to be the opposite function
  2891.     these functions are supposedly used to signal opening and closing of
  2892.       printers
  2893. SeeAlso: AX=0200h,AX=0203h
  2894. --------N-2F---------------------------------
  2895. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2896.     AX = 02xxh
  2897.     ???
  2898. Return: ???
  2899. --------l-2F0500-----------------------------
  2900. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2901.     AX = 0500h
  2902. Return: AL = 00h not installed, OK to install
  2903.          01h not installed, can't install
  2904.          FFh installed
  2905. Desc:    determine whether a critical error message override is installed
  2906. Note:    this set of functions allows a user program to partially or completely
  2907.       override the default critical error handler's message in COMMAND.COM
  2908. SeeAlso: AH=05h,INT 24
  2909. --------l-2F05-------------------------------
  2910. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2911.     AH = 05h
  2912. ---DOS 3.x---
  2913.     AL = extended error code (not zero)
  2914. ---DOS 4.0+ ---
  2915.     AL = error type
  2916.         01h DOS extended error code
  2917.         02h parameter error
  2918.     BX = error code
  2919. Return: CF clear if successful
  2920.         ES:DI -> ASCIZ error message (read-only)
  2921.         AL = completion state
  2922.         00h message requires completion with device name, drive, etc.
  2923.         01h message is complete as returned
  2924.     CF set if error code can't be converted to string
  2925.         AX,DI,ES destroyed
  2926.     other flags corrupted
  2927. Notes:    called at start of COMMAND.COM's default critical error handler if
  2928.       installed by a user program, allowing partial or complete overriding
  2929.       of the default error messages
  2930.     subfunction 02h is called by many DOS 4 external programs
  2931.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  2932.       returned string
  2933. SeeAlso: AX=0500h,AX=122Eh,INT 24
  2934. --------U-2F0600-----------------------------
  2935. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  2936.     AX = 0600h
  2937. Return: AL = status
  2938.         00h not installed
  2939.         01h not installed, but not OK to install
  2940.         FFh installed
  2941. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  2942.       (see INT 21/AH=52h)
  2943.     undocumented prior to the release of DOS 5.0
  2944. SeeAlso: AX=0601h,INT 21/AH=52h
  2945. --------U-2F0601-----------------------------
  2946. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2947.     AX = 0601h
  2948. Return: ES = segment of ASSIGN work area and assignment table
  2949. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  2950.       is mapped to.     Initially set to 01h 02h 03h....
  2951. SeeAlso: AX=0600h
  2952. --------D-2F0800-----------------------------
  2953. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  2954.     AX = 0800h
  2955. Return: AL = status
  2956.         00h not installed, OK to install
  2957.         01h not installed, not OK to install
  2958.         FFh installed
  2959. Desc:    determine whether the internal support code used by DRIVER.SYS is
  2960.       present; it is always present in DOS 3.2+
  2961. Note:    supported by DR-DOS 5.0
  2962. --------D-2F0801-----------------------------
  2963. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2964.     AX = 0801h
  2965.     DS:DI -> drive data table (see #1386,#1387,#1388)
  2966. Return: AX,BX,SI,ES destroyed
  2967. Notes:    moves down internal list of drive data tables, copying and modifying
  2968.       the drive description flags word for tables referencing same physical
  2969.       drive
  2970.     the data table is appended to the chain of tables
  2971.     supported by DR-DOS 5.0
  2972. SeeAlso: AX=0803h
  2973. --------D-2F0802-----------------------------
  2974. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2975.     AX = 0802h
  2976.     ES:BX -> device driver request header (see #1382)
  2977. Return: request header updated as per requested operation
  2978. Notes:    supported by DR-DOS 5.0
  2979.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  2980.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  2981.     the command codes (see #1380) and structures described below apply
  2982.       to all drivers which support the appropriate commands; this call is
  2983.       just one of a number of ways in which a device driver request may
  2984.       be invoked
  2985.     this call reportedly leaves one word on the stack under MS-DOS 6.2,
  2986.       so the stack pointer should be saved and restored around the call
  2987.       to this function
  2988. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  2989.  
  2990. (Table 1380)
  2991. Values for device driver command code:
  2992.  00h    INIT
  2993.  01h    MEDIA CHECK (block devices)
  2994.  02h    BUILD BPB (block devices)
  2995.  03h    IOCTL INPUT
  2996.  04h    INPUT
  2997.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2998.  06h    INPUT STATUS (character devices)
  2999.  07h    INPUT FLUSH (character devices)
  3000.  08h    OUTPUT
  3001.  09h    OUTPUT WITH VERIFY
  3002.  0Ah    OUTPUT STATUS (character devices)
  3003.  0Bh    OUTPUT FLUSH (character devices)
  3004.  0Ch    IOCTL OUTPUT
  3005.  0Dh    (DOS 3.0+) DEVICE OPEN
  3006.  0Eh    (DOS 3.0+) DEVICE CLOSE
  3007.  0Fh    (DOS 3.0+) REMOVABLE MEDIA (block devices)
  3008.  10h    (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  3009.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  3010.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  3011.  13h    (DOS 3.2+) GENERIC IOCTL
  3012.  14h    unused
  3013.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  3014.  16h    unused
  3015.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  3016.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  3017.  19h    (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  3018.  80h    (CD-ROM) READ LONG
  3019.  81h    (CD-ROM) reserved
  3020.  82h    (CD-ROM) READ LONG PREFETCH
  3021.  83h    (CD-ROM) SEEK
  3022.  84h    (CD-ROM) PLAY AUDIO
  3023.  85h    (CD-ROM) STOP AUDIO
  3024.  86h    (CD-ROM) WRITE LONG
  3025.  87h    (CD-ROM) WRITE LONG VERIFY
  3026.  88h    (CD-ROM) RESUME AUDIO
  3027.  
  3028. Bitfields for device request status:
  3029. Bit(s)    Description    (Table 1381)
  3030.  15    error
  3031.  14-11    reserved
  3032.  10    ??? set by DOS kernel on entry to some driver calls
  3033.  9    busy
  3034.  8    done (may be clear on return under European MS-DOS 4.0)
  3035.  7-0    error code if bit 15 set (see #1383)
  3036.  
  3037. Format of device driver request header:
  3038. Offset    Size    Description    (Table 1382)
  3039.  00h    BYTE    length of request header
  3040.  01h    BYTE    subunit within device driver
  3041.  02h    BYTE    command code (see #1380)
  3042.  03h    WORD    status (filled in by device driver) (see #1381)
  3043. ---DOS---
  3044.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  3045.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  3046.               device's request queue
  3047.         (other versions) reserved (unused in DOS 2.x and 3.x)
  3048. ---STARLITE architecture---
  3049.  05h    DWORD    pointer to next request header
  3050.  09h  4 BYTEs    reserved
  3051. ---command code 00h---
  3052.  0Dh    BYTE    (ret) number of units
  3053.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1384)
  3054.               (European MS-DOS 4.0 only)
  3055.         (call) pointer past end of memory available to driver (DOS 5+)
  3056.         (ret) address of first free byte following driver
  3057.  12h    DWORD    (call) pointer to commandline arguments
  3058.         (ret) pointer to BPB array (block drivers) or
  3059.               0000h:0000h (character drivers)
  3060.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  3061.    ---European MS-DOS 4.0---
  3062.  17h    DWORD    pointer to function to save registers on stack
  3063.    ---DOS 5+ ---
  3064.  17h    WORD    (ret) error-message flag
  3065.         0001h MS-DOS should display error msg on init failure
  3066. ---command code 01h---
  3067.  0Dh    BYTE    media descriptor
  3068.  0Eh    BYTE    (ret) media status
  3069.         00h don't know
  3070.         01h media has not changed
  3071.         FFh media has been changed
  3072.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  3073.           OPEN/CLOSE/RM bit in device header is set and disk changed
  3074. ---command code 02h---
  3075.  0Dh    BYTE    media descriptor
  3076.  0Eh    DWORD    transfer address
  3077.         -> scratch sector if NON-IBM FORMAT bit in device header set
  3078.         -> first FAT sector otherwise
  3079.  12h    DWORD    pointer to BPB (set by driver) (see #0875 at INT 21/AH=53h)
  3080. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  3081.  0Dh    BYTE    media descriptor (block devices only)
  3082.  0Eh    DWORD    transfer address
  3083.  12h    WORD    (call) number of bytes to read/write
  3084.         (ret) actual number of bytes read or written
  3085. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR-DOS 6)---
  3086.  0Dh    BYTE    media descriptor (block devices only)
  3087.  0Eh    DWORD    transfer address
  3088.  12h    WORD    byte count (character devices) or sector count (block devices)
  3089.  14h    WORD    starting sector number (block devices only)
  3090.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  3091.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  3092.           device attribute word bit 1 set only) if starting sector
  3093.           number above is FFFFh (see INT 21/AH=52h)
  3094. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR-DOS 6)---
  3095.  0Dh    BYTE    media descriptor (block devices only)
  3096.  0Eh    DWORD    transfer address
  3097.  12h    WORD    byte count (character devices) or sector count (block devices)
  3098.  14h    DWORD    32-bit starting sector number (block devices only)
  3099.     Note:    to reliably determine which variant of the request block for
  3100.           functions 04h,08h,09h has been passed to the driver, check
  3101.           the length field as well as the word at offset 14h.  If the
  3102.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  3103.           starting sector number; if the length is 18h, use the DWORD
  3104.           at 14h; otherwise, use the WORD at 14h.
  3105. ---command code 05h---
  3106.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  3107. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  3108.  no further fields
  3109. ---command code 10h---
  3110.  0Dh    BYTE    unused
  3111.  0Eh    DWORD    transfer address
  3112.  12h    WORD    (call) number of bytes to write
  3113.         (ret) actual number of bytes written
  3114. ---command codes 11h,12h---
  3115.  0Dh    BYTE    reserved
  3116. ---command code 15h---
  3117.  no further fields
  3118. ---command codes 13h,19h---
  3119.  0Dh    BYTE    category code
  3120.         00h unknown
  3121.         01h COMn:
  3122.         03h CON
  3123.         05h LPTn:
  3124.         07h mouse (European MS-DOS 4.0)
  3125.         08h disk
  3126.         9Eh (STARLITE) Media Access Control driver
  3127.  0Eh    BYTE    function code
  3128.         00h (STARLITE) MAC Bind request
  3129.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  3130.         SI contents (European MS-DOS 4.0)
  3131.  11h    WORD    offset of device driver header
  3132.         DI contents (European MS-DOS 4.0)
  3133.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  3134. ---command codes 80h,82h---
  3135.  0Dh    BYTE    addressing mode
  3136.         00h HSG (default)
  3137.         01h Phillips/Sony Red Book
  3138.  0Eh    DWORD    transfer address (ignored for command 82h)
  3139.  12h    WORD    number of sectors to read
  3140.         (if 0 for command 82h, request is an advisory seek)
  3141.  14h    DWORD    starting sector number
  3142.         logical sector number in HSG mode
  3143.         frame/second/minute/unused in Red Book mode
  3144.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  3145.  18h    BYTE    data read mode
  3146.         00h cooked (2048 bytes per frame)
  3147.         01h raw (2352 bytes per frame, including EDC/ECC)
  3148.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3149.  1Ah    BYTE    interleave skip factor
  3150.         (number of sectors between consecutive portions)
  3151. ---command code 83h---
  3152.  0Dh    BYTE    addressing mode (see above)
  3153.  0Eh    DWORD    transfer address (ignored)
  3154.  12h    WORD    number of sectors to read (ignored)
  3155.  14h    DWORD    starting sector number (see also above)
  3156. ---command code 84h---
  3157.  0Dh    BYTE    addressing mode (see above)
  3158.  0Eh    DWORD    starting sector number (see also above)
  3159.  12h    DWORD    number of sectors to play
  3160. ---command codes 85h,88h---
  3161.  no further fields
  3162. ---command codes 86h,87h---
  3163.  0Dh    BYTE    addressing mode (see above)
  3164.  0Eh    DWORD    transfer address (ignored in write mode 0)
  3165.  12h    WORD    number of sectors to write
  3166.  14h    DWORD    starting sector number (see also above)
  3167.  18h    BYTE    write mode
  3168.         00h mode 0 (write all zeros)
  3169.         01h mode 1 (default) (2048 bytes per sector)
  3170.         02h mode 2 form 1 (2048 bytes per sector)
  3171.         03h mode 2 form 2 (2336 bytes per sector)
  3172.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3173.  1Ah    BYTE    interleave skip factor
  3174.         (number of sectors between consecutive portions)
  3175.  
  3176. (Table 1383)
  3177. Values for device driver error code:
  3178.  00h    write-protect violation
  3179.  01h    unknown unit
  3180.  02h    drive not ready
  3181.  03h    unknown command
  3182.  04h    CRC error
  3183.  05h    bad drive request structure length
  3184.  06h    seek error
  3185.  07h    unknown media
  3186.  08h    sector not found
  3187.  09h    printer out of paper
  3188.  0Ah    write fault
  3189.  0Bh    read fault
  3190.  0Ch    general failure
  3191.  0Dh    reserved
  3192.  0Eh    (CD-ROM) media unavailable
  3193.  0Fh    invalid disk change
  3194.  
  3195. (Table 1384)
  3196. Call European MS-DOS 4.0 device helper function with:
  3197.     DL = function
  3198.         00h "SchedClock" called on each timer tick
  3199.         AL = tick interval in milliseconds
  3200.         01h "DevDone" device I/O complete
  3201.         ES:BX -> request header
  3202.         Note:    must update status word first; may be called from
  3203.               an interrupt handler
  3204.         02h "PullRequest" pull next request from queue
  3205.         DS:SI -> DWORD pointer to start of device's request queue
  3206.         Return: ZF clear if pending request
  3207.                 ES:BX -> request header
  3208.             ZF set if no more requests
  3209.         03h "PullParticular" remove specific request from queue
  3210.         DS:SI -> DWORD pointer to start of device's request queue
  3211.         ES:BX -> request header
  3212.         Return: ZF set if request header not found
  3213.         04h "PushRequest" push the request onto the queue
  3214.         DS:SI -> DWORD pointer to start of device's request queue
  3215.         ES:BX -> request header
  3216.         interrupts disabled
  3217.         05h "ConsInputFilter" keyboard input check
  3218.         AX = character (high byte 00h if PC ASCII character)
  3219.         Return: ZF set if character should be discarded
  3220.             ZF clear if character should be handled normally
  3221.         Note:    called by keyboard interrupt handler so DOS can scan
  3222.               for special input characters
  3223.         06h "SortRequest" push request in sorted order by starting sector
  3224.         DS:SI -> DWORD pointer to start of device's request queue
  3225.         ES:BX -> request header
  3226.         interrupts disabled
  3227.         07h "SigEvent" send signal on keyboard event
  3228.         AH = event identifier
  3229.         Return: AL,FLAGS destroyed
  3230.         09h "ProcBlock" block on event
  3231.         AX:BX = event identifier (typically a pointer)
  3232.         CX = timeout in ms or 0000h for never
  3233.         DH = interruptable flag (nonzero if pause may be interrupted)
  3234.         interrupts disabled
  3235.         Return: after corresponding ProcRun call
  3236.             CF clear if event wakeup, set if unusual wakeup
  3237.             ZF set if timeout wakeup, clear if interrupted
  3238.             AL = wakeup code, nonzero if unusual wakeup
  3239.             interrupts enabled
  3240.             BX,CX,DX destroyed
  3241.         Note:    block process and schedules another to run
  3242.         0Ah "ProcRun" unblock process
  3243.         AX:BX = event identifier (typically a pointer)
  3244.         Return: AX = number of processes awakened
  3245.             ZF set if no processes awakened
  3246.             BX,CX,DX destroyed
  3247.         0Bh "QueueInit" initialize/clear character queue
  3248.         DS:BX -> character queue structure (see #1385)
  3249.         Note:    the queue size field must be set before calling
  3250.         0Dh "QueueWrite" put a character in the queue
  3251.         DS:BX -> character queue (see #1385)
  3252.         AL = character to append to end of queue
  3253.         Return: ZF set if queue is full
  3254.             ZF clear if character stored
  3255.         0Eh "QueueRead" get a character from the queue
  3256.         DS:BX -> character queue (see #1385)
  3257.         Return: ZF set if queue is empty
  3258.             ZF clear if characters in queue
  3259.                 AL = first character in queue
  3260.         10h "GetDOSVar" return pointer to DOS variable
  3261.         AL = index of variable
  3262.             03h current process ID
  3263.         BX = index into variable if AL specifies an array
  3264.         CX = expected length of variable
  3265.         Return: CF clear if successful
  3266.                 DX:AX -> variable
  3267.             CF set on error
  3268.                 AX,DX destroyed
  3269.             BX,CX destroyed
  3270.         Note:    the variables may not be modified
  3271.         14h "Yield" yield CPU if higher-priority task ready to run
  3272.         Return: FLAGS destroyed
  3273.         1Bh "CritEnter" begin system critical section
  3274.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3275.         Return: AX,BX,CX,DX destroyed
  3276.         1Ch "CritLeave" end system critical section
  3277.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3278.         Return: AX,BX,CX,DX destroyed
  3279.         Note:    must be called in the context of the process which
  3280.               called CritEnter on the semaphore
  3281. Note:    the DWORD pointing at the request queue must be allocated by the driver
  3282.       and initialized to 0000h:0000h.  It always points at the next request
  3283.       to be executed
  3284.  
  3285. Format of European MS-DOS 4.0 character queue:
  3286. Offset    Size    Description    (Table 1385)
  3287.  00h    WORD    size of queue in bytes
  3288.  02h    WORD    index of next character out
  3289.  04h    WORD    count of characters in the queue
  3290.  06h  N BYTEs    queue buffer
  3291. --------D-2F0803-----------------------------
  3292. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  3293.     AX = 0803h
  3294. Return: DS:DI -> first drive data table in list (see #1386,#1387,#1388)
  3295. Note:    not available under DR-DOS 5.0
  3296. SeeAlso: AX=0801h
  3297.  
  3298. Format of DOS 3.30 drive data table:
  3299. Offset    Size    Description    (Table 1386)
  3300.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3301.  04h    BYTE    physical unit number (for INT 13)
  3302.  05h    BYTE    logical drive number (0=A:)
  3303.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3304.         Offset    Size    Description
  3305.          00h    WORD    bytes per sector
  3306.          02h    BYTE    sectors per cluster, FFh if unknown
  3307.          03h    WORD    number of reserved sectors
  3308.          05h    BYTE    number of FATs
  3309.          06h    WORD    number of root dir entries
  3310.          08h    WORD    total sectors
  3311.          0Ah    BYTE    media descriptor, 00h if unknown
  3312.          0Bh    WORD    sectors per FAT
  3313.          0Dh    WORD    sectors per track
  3314.          0Fh    WORD    number of heads
  3315.          11h    WORD    number of hidden sectors
  3316.  19h    BYTE    flags
  3317.         bit 6: 16-bit FAT instead of 12-bit FAT
  3318.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3319.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3320.           fixed media)
  3321.  27h    BYTE    terminating null for volume label???
  3322.  28h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  3323.  29h    WORD    bit flags describing drive (see #1389)
  3324.  2Bh    WORD    number of cylinders
  3325.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3326.  40h  3 BYTEs    ???
  3327.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3328.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  3329.           media and PC-DOS 3.30)
  3330.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3331. ---removable media---
  3332.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3333. ---fixed media---
  3334.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3335.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3336.           drive (always FFFFh if primary partition)
  3337. SeeAlso: #1387,#1388
  3338.  
  3339. Format of COMPAQ DOS 3.31 drive data table:
  3340. Offset    Size    Description    (Table 1387)
  3341.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3342.  04h    BYTE    physical unit number (for INT 13)
  3343.  05h    BYTE    logical drive number (0=A:)
  3344.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  3345.  1Fh  6 BYTEs    reserved fields from BPB above???
  3346.  25h    BYTE    flags
  3347.         bit 6: 16-bit FAT instead of 12-bit FAT
  3348.         bit 5: large volume???
  3349.  26h    WORD    device-open count???
  3350.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3351.           fixed media)
  3352.  33h    BYTE    terminating null for volume label
  3353.  34h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  3354.  35h    WORD    bit flags describing drive (see #1389)
  3355.  37h    WORD    number of cylinders
  3356.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3357.  52h  6 BYTEs    ??? apparently always zeros
  3358.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3359. ---removable media---
  3360.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3361. ---fixed media---
  3362.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3363.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3364.           drive (always FFFFh if primary partition)
  3365. SeeAlso: #1386,#1388
  3366.  
  3367. Format of DOS 4.0-6.0 drive data table:
  3368. Offset    Size    Description    (Table 1388)
  3369.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3370.  04h    BYTE    physical unit number (for INT 13)
  3371.  05h    BYTE    logical drive number (0=A:)
  3372.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3373.         Offset    Size    Description
  3374.          00h    WORD    bytes per sector
  3375.          02h    BYTE    sectors per cluster, FFh if unknown
  3376.          03h    WORD    number of reserved sectors
  3377.          05h    BYTE    number of FATs
  3378.          06h    WORD    number of root dir entries
  3379.          08h    WORD    total sectors (see offset 15h if zero)
  3380.          0Ah    BYTE    media descriptor, 00h if unknown
  3381.          0Bh    WORD    sectors per FAT
  3382.          0Dh    WORD    sectors per track
  3383.          0Fh    WORD    number of heads
  3384.          11h    DWORD    number of hidden sectors
  3385.          15h    DWORD    total sectors if WORD at 08h is zero
  3386.  1Fh    BYTE    flags
  3387.         bit 6: 16-bit FAT instead of 12-bit
  3388.         bit 7: unsupportable disk (all accesses will return Not Ready)
  3389.  20h    WORD    device-open count
  3390.  22h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  3391.  23h    WORD    bit flags describing drive (see #1389)
  3392.  25h    WORD    number of cylinders (for partition only, if hard disk)
  3393.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  3394.  40h  6 BYTEs    reserved (part of BPB above)
  3395.  46h    BYTE    last track accessed
  3396. ---removable media---
  3397.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3398. ---fixed media---
  3399.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3400.         always 0001h for DOS 5+
  3401.  49h    WORD    absolute cylinder number of partition's start on physical drive
  3402.         (FFFFh if primary partition in DOS 4.x)
  3403. ------
  3404.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3405.           extended boot record rather than root directory)
  3406.  56h    BYTE    terminating null for volume label
  3407.  57h    DWORD    serial number
  3408.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3409.  63h    BYTE    terminating null for filesystem type
  3410. SeeAlso: #1386,#1387
  3411.  
  3412. Bitfields for flags describing drive:
  3413. Bit(s)    Description    (Table 1389)
  3414.  0    fixed media
  3415.  1    door lock ("changeline") supported
  3416.  2    current BPB locked
  3417.  3    all sectors in a track are the same size
  3418.  4    physical drive has multiple logical units
  3419.  5    current logical drive for shared physical drive
  3420.  6    disk change detected
  3421.  7    device parameters were changed (set DASD before formatting)
  3422.     (see #0780 at INT 21/AX=440Dh)
  3423.  8    disk reformatted (BPB of current media was changed)
  3424.  9    access flag (fixed media only, disables reads and writes)
  3425.     (see #0786 at INT 21/AX=440Dh)
  3426. --------f-2F1000-----------------------------
  3427. INT 2F - SHARE - INSTALLATION CHECK
  3428.     AX = 1000h
  3429. Return: AL = status
  3430.         00h not installed, OK to install
  3431.         01h not installed, not OK to install
  3432.         FFh installed
  3433. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3434.       (08E9: OR  AL,AL
  3435.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3436.     values of AL other than described here put PC-DOS 4.00 into the same
  3437.       loop (the buggy instructions are the same)
  3438. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3439.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3440.       inactive state (due to the undocumented /NC flag used by the autoload
  3441.       code) until this call is made
  3442.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  3443.     Windows Enhanced mode hooks this call and reports that SHARE is
  3444.       installed even when it is not
  3445. SeeAlso: AX=1080h,INT 21/AH=52h
  3446. --------d-2F1001-----------------------------
  3447. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  3448.     AX = 1001h
  3449.     DX:BX -> ???function
  3450. Notes:    this function is also supported by SuperStor, a disk-compression
  3451.       program by Addstor which is bundled with DR-DOS 6.0, and the
  3452.       Novell DOS 7 DELWATCH.EXE
  3453.     the default handler for the pointer set by this call under DELWATCH
  3454.       simply returns with CF set
  3455. SeeAlso: AX=1000h,AX=F800h
  3456. --------f-2F1040-----------------------------
  3457. INT 2F U - DOS 4 only SHARE internal - ???
  3458.     AX = 1040h
  3459.     ???
  3460. Return: AL = FFh???
  3461. SeeAlso: AX=1000h
  3462. --------f-2F1080-----------------------------
  3463. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3464.     AX = 1080h
  3465. Return: AL = status
  3466.         F0h successful
  3467.         FFh checking was already on
  3468. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3469.       and file sharing checks.  The undocumented commandline flag /NC can
  3470.       be used to disable the sharing code.
  3471. SeeAlso: AX=1000h,AX=1081h
  3472. --------f-2F1081-----------------------------
  3473. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3474.     AX = 1081h
  3475. Return: AL = status
  3476.         F0h successful
  3477.         FFh checking was already off
  3478. Note:    (see AX=1080h)
  3479. SeeAlso: AX=1000h,AX=1080h
  3480. ----------2F10FE-----------------------------
  3481. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3482.     AX = 10FEh
  3483. Return: AX = 20FFh if installed and active
  3484.         DX:BX -> private entry point (see #1390)
  3485.  
  3486. (Table 1390)
  3487. Call DELWATCH private entry point with:
  3488.     AH = function
  3489.         00h NOP???
  3490.         Return: AX = 0000h
  3491.             CX = 0004h (unsupported function)
  3492.         01h disable DELWATCH on drive
  3493.         AL = drive number (00h = A:)
  3494.         Return: AX = status (0000h if failed, FFFFh if successful)
  3495.         02h ???
  3496.         AL = drive number (00h = A:)
  3497.         ???
  3498.         Return: ???
  3499.         03h    ???
  3500.         AL = drive number (00h = A:)
  3501.         CX = ??? (0000h/0001h)
  3502.         ???
  3503.         Return: ???
  3504.         04h ???
  3505.         AL = drive number (00h = A:)
  3506.         ???
  3507.         Return: ???
  3508.         05h ???
  3509.         AL = drive number (00h = A:)
  3510.         ???
  3511.         Return: ???
  3512.         06h enable DELWATCH on drive
  3513.         AL = drive number with bit 7 set (80h = A:, etc.)
  3514.         BX = maximum files of same name in one directory to save
  3515.         CX = maximum files to save on this disk
  3516.         ???
  3517.         Return: AX = status
  3518.                 0000h failed
  3519.                 FFFFh successful
  3520.             CX = error code on failure
  3521.                 (0004h if AL < 80h on entry)
  3522.         07h ???
  3523.         08h set file extensions list
  3524.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3525.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3526.               per extension)
  3527.         Return: AX = FFFFh (successful)
  3528.         09h    ???
  3529.         AL = drive number (00h = A:)
  3530.         ???
  3531.         Return: ???
  3532.         0Ah ???
  3533.         AL = drive number (00h = A:)
  3534.         ???
  3535.         Return: ???
  3536.         0Bh reset ???
  3537.         Return: AX = FFFFh (successful)
  3538.         see also function 0Dh
  3539.         0Ch check if drive enabled
  3540.         AL = drive number with bit 7 set (80h = A:, etc.)
  3541.         Return: AX = state
  3542.                 0000h disabled or error (check CX)
  3543.                 0001h drive enabled
  3544.             CX = error code (0004h invalid drive number)
  3545.         0Dh set ???
  3546.         BX = ???
  3547.         Return: AX = FFFFh (successful)
  3548.         see also function 0Bh
  3549.         0Eh ???
  3550.         AL = drive number (00h = A:)
  3551.         ???
  3552.         Return: ???
  3553. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3554.     registers unchanged if AH >= 0Fh on entry
  3555. --------O-2F10FF-----------------------------
  3556. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  3557.     AX = 10FFh
  3558.     ES:BX -> ???
  3559. Note:    sets pointer in kernel
  3560. --------N-2F1100-----------------------------
  3561. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3562.     AX = 1100h
  3563. Return: AL = status
  3564.         00h not installed, OK to install
  3565.         01h not installed, not OK to install
  3566.         FFh installed
  3567.         AH = product identifier (ad hoc by various manufacturers)
  3568.             00h if PC Tools v8 DRIVEMAP
  3569.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3570.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3571. Notes:    this function is called by the DOS 3.1+ kernel
  3572.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3573.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3574.       redirector
  3575.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3576.       only supports AL=00h-27h
  3577. --------d-2F1100SFDADA-----------------------
  3578. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3579.     AX = 1100h subfn DADAh
  3580.     STACK: WORD DADAh
  3581. Return: AL = status
  3582.         00h not installed, OK to install
  3583.         STACK unchanged
  3584.         01h not installed, not OK to install
  3585.         STACK unchanged
  3586.         FFh installed
  3587.         STACK: WORD    ADADh if MSCDEX installed
  3588.                 DADBh if Lotus CD/Networker installed
  3589. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3590.       than DADAh is considered to mean that MSCDEX is already installed;
  3591.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3592.       thinking it is already installed when it is in fact CD/Networker
  3593.       that is installed
  3594. Index:    installation check;Lotus CD/Networker
  3595. Index:    Lotus CD/Networker;installation check
  3596. --------N-2F1101-----------------------------
  3597. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3598.     AX = 1101h
  3599.     SS = DOS DS
  3600.     SDA first filename pointer -> fully-qualified directory name
  3601.     SDA CDS pointer -> current directory structure for drive with dir
  3602. Return: CF set on error
  3603.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3604.     CF clear if successful
  3605. Note:    this function is called by the DOS 3.1+ kernel
  3606. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3607. --------N-2F1102-----------------------------
  3608. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3609.     AX = 1102h
  3610.     SS = DOS DS
  3611.     SDA first filename pointer -> fully-qualified directory name
  3612.     SDA CDS pointer -> current directory structure for drive with dir
  3613. Return: CF set on error
  3614.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3615.     CF clear if successful
  3616. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3617.       this function "SEQ_RMDIR"
  3618. SeeAlso: AX=1101h
  3619. --------N-2F1103-----------------------------
  3620. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3621.     AX = 1103h
  3622.     SS = DOS DS
  3623.     SDA first filename pointer -> fully-qualified directory name
  3624.     SDA CDS pointer -> current directory structure for drive with dir
  3625. Return: CF set on error
  3626.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3627.     CF clear if successful
  3628. Note:    this function is called by the DOS 3.1+ kernel
  3629. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3630. --------N-2F1104-----------------------------
  3631. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3632.     AX = 1104h
  3633.     SS = DOS DS
  3634.     SDA first filename pointer -> fully-qualified directory name
  3635.     SDA CDS pointer -> current directory structure for drive with dir
  3636. Return: CF set on error
  3637.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3638.     CF clear if successful
  3639. Note:    appears to be identical to AX=1103h
  3640. SeeAlso: AX=1103h
  3641. --------N-2F1105-----------------------------
  3642. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  3643.     AX = 1105h
  3644.     SS = DOS DS
  3645.     SDA first filename pointer -> fully-qualified directory name
  3646.     SDA CDS pointer -> current directory structure for drive with dir
  3647. Return: CF set on error
  3648.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3649.     CF clear if successful
  3650.         CDS updated with new path
  3651. Notes:    this function is called by the DOS 3.1+ kernel
  3652.     directory string in CDS should not have a terminating backslash unless
  3653.       the current directory is the root
  3654. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3655. --------N-2F1106-----------------------------
  3656. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3657.     AX = 1106h
  3658.     BX = device info word from SFT
  3659.     ES:DI -> SFT
  3660.         SFT DPB field -> DPB of drive containing file
  3661. Return: CF set on error
  3662.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3663.     CF clear if successful
  3664.         SFT updated (redirector must decrement open count, which may be
  3665.           done with INT 2F/AX=1208h)
  3666. Note:    this function is called by the DOS 3.1+ kernel
  3667. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  3668. --------N-2F1107-----------------------------
  3669. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3670.     AX = 1107h
  3671.     ES:DI -> SFT
  3672.         SFT DPB field -> DPB of drive containing file
  3673. Return: CF set on error
  3674.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3675.     CF clear if successful
  3676.         all buffers for file flushed
  3677.         directory entry updated
  3678. Note:    this function is called by the DOS 3.1+ kernel
  3679. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3680. --------N-2F1108-----------------------------
  3681. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3682.     AX = 1108h
  3683.     ES:DI -> SFT
  3684.         SFT DPB field -> DPB of drive containing file
  3685.     CX = number of bytes
  3686.     SS = DOS DS
  3687.     SDA DTA field -> user buffer
  3688. Return: CF set on error
  3689.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3690.     CF clear if successful
  3691.         CX = number of bytes read (0000h = end of file)
  3692.         SFT updated
  3693. Note:    this function is called by the DOS 3.1+ kernel
  3694. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  3695. --------N-2F1109-----------------------------
  3696. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3697.     AX = 1109h
  3698.     ES:DI -> SFT
  3699.         SFT DPB field -> DPB of drive containing file
  3700.     CX = number of bytes
  3701.     SS = DOS DS
  3702.     SDA DTA field -> user buffer
  3703. Return: CF set on error
  3704.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3705.     CF clear if successful
  3706.         CX = number of bytes written
  3707.         SFT updated
  3708. Notes:    this function is called by the DOS 3.1+ kernel
  3709.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  3710.       the Device Driver Header field points at PCACHE, but does not
  3711.       intercept any other network redirector functions
  3712. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3713. --------N-2F110A-----------------------------
  3714. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  3715.     AX = 110Ah
  3716.     BX = file handle
  3717.     CX:DX = starting offset
  3718.     SI = high word of size
  3719.     STACK: WORD low word of size
  3720.     ES:DI -> SFT
  3721.         SFT DPB field -> DPB of drive containing file
  3722.     SS = DOS DS
  3723. Return: CF set on error
  3724.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  3725.     STACK unchanged
  3726. Notes:    this function is called by the DOS 3.10-3.31 kernel
  3727.     the redirector is expected to resolve lock conflicts
  3728. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3729. --------N-2F110A-----------------------------
  3730. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  3731.     AX = 110Ah
  3732.     BL = function
  3733.         00h lock
  3734.         01h unlock
  3735.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  3736.     DS:DX -> parameter block (see #1391)
  3737.     ES:DI -> SFT
  3738.         SFT DPB field -> DPB of drive containing file
  3739.     SS = DOS DS
  3740. Return: CF set on error
  3741.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  3742. Notes:    this function is called by the DOS 4.0+ kernel
  3743.     the redirector is expected to resolve lock conflicts
  3744. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3745.  
  3746. Format of parameter block entry [array, but currently limited to single entry]:
  3747. Offset    Size    Description    (Table 1391)
  3748.  00h    DWORD    start offset
  3749.  04h    DWORD    size of region
  3750. --------N-2F110B-----------------------------
  3751. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3752.     AX = 110Bh
  3753.     BX = file handle
  3754.     CX:DX = starting offset
  3755.     SI = high word of size
  3756.     STACK: WORD low word of size
  3757.     ES:DI -> SFT for file
  3758.         SFT DPB field -> DPB of drive containing file
  3759. Return: CF set on error
  3760.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  3761.     STACK unchanged
  3762. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  3763. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3764. --------N-2F110C-----------------------------
  3765. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  3766.     AX = 110Ch
  3767.     ES:DI -> current directory structure for desired drive
  3768. Return: CF clear if data valid
  3769.         AL = sectors per cluster
  3770.         AH = media ID byte
  3771.         BX = total clusters
  3772.         CX = bytes per sector
  3773.         DX = number of available clusters
  3774.     CF set if data invalid
  3775. Note:    this function is called by the DOS 3.1+ kernel
  3776. SeeAlso: INT 21/AH=36h
  3777. --------N-2F110D-----------------------------
  3778. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  3779.     AX = 110Dh
  3780.     SDA first filename pointer -> name of file
  3781.     ???
  3782. Return: ???
  3783. Note:    similar to AX=110Eh
  3784. SeeAlso: AX=110Eh
  3785. --------N-2F110E-----------------------------
  3786. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3787.     AX = 110Eh
  3788.     SS = DOS DS
  3789.     SDA first filename pointer -> fully-qualified name of file
  3790.     SDA CDS pointer -> current directory structure for drive with file
  3791.     STACK: WORD new file attributes
  3792. Return: CF set on error
  3793.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3794.     CF clear if successful
  3795.     STACK unchanged
  3796. Note:    this function is called by the DOS 3.1+ kernel
  3797. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3798. --------N-2F110F-----------------------------
  3799. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3800.     AX = 110Fh
  3801.     SS = DOS DS
  3802.     SDA first filename pointer -> fully-qualified name of file
  3803.     SDA CDS pointer -> current directory structure for drive with file
  3804. Return: CF set on error
  3805.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3806.     CF clear if successful
  3807.         AX = file attributes
  3808.         BX:DI = file size
  3809. Note:    this function is called by the DOS 3.1+ kernel
  3810. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3811. --------N-2F1110-----------------------------
  3812. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3813.     AX = 1110h
  3814.     SDA first filename pointer -> name of file
  3815.     ???
  3816. Return: ???
  3817. Note:    appears to be similar to AX=110Fh
  3818. SeeAlso: AX=110Eh
  3819. --------N-2F1111-----------------------------
  3820. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3821.     AX = 1111h
  3822.     SS = DS = DOS DS
  3823.     SDA first filename pointer = offset of fully-qualified old name
  3824.     SDA second filename pointer = offset of fully-qualified new name
  3825.     SDA CDS pointer -> current directory structure for drive with file
  3826. Return: CF set on error
  3827.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3828.     CF clear if successful
  3829. Note:    this function is called by the DOS 3.1+ kernel
  3830. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  3831. --------N-2F1112-----------------------------
  3832. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  3833.     AX = 1112h
  3834.     SS = DS = DOS DS
  3835.     SDA first filename pointer -> name of file
  3836.     ???
  3837. Return: ???
  3838. Note:    similar to AX=1111h
  3839. SeeAlso: AX=1111h
  3840. --------N-2F1113-----------------------------
  3841. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3842.     AX = 1113h
  3843.     SS = DS = DOS DS
  3844.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3845.     SDA CDS pointer -> current directory structure for drive with file
  3846. Return: CF set on error
  3847.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3848.     CF clear if successful
  3849. Notes:    this function is called by the DOS 3.1+ kernel
  3850.     the filespec may contain wildcards
  3851. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  3852. --------N-2F1114-----------------------------
  3853. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  3854.     AX = 1114h
  3855.     SDA first filename pointer -> name of file
  3856.     ???
  3857. Return: ???
  3858. Note:    similar to AX=1113h
  3859. SeeAlso: AX=1113h
  3860. --------N-2F1115-----------------------------
  3861. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  3862.     AX = 1115h
  3863.     SS = DOS DS
  3864.     ES:DI -> SFT ???
  3865.     ???
  3866. Return: ???
  3867. Note:    similar to AX=1116h
  3868. SeeAlso: AX=1116h,AX=112Eh
  3869. --------N-2F1116-----------------------------
  3870. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3871.     AX = 1116h
  3872.     ES:DI -> uninitialized SFT
  3873.     SS = DOS DS
  3874.     SDA first filename pointer -> fully-qualified name of file to open
  3875.     STACK: WORD file access and sharing modes (see #0627 at INT 21/AH=3Dh)
  3876. Return: CF set on error
  3877.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3878.     CF clear if successful
  3879.         SFT filled (except handle count, which DOS manages itself)
  3880.     STACK unchanged
  3881. Note:    this function is called by the DOS 3.1+ kernel
  3882. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  3883. SeeAlso: INT 21/AH=60h
  3884. --------N-2F1117-----------------------------
  3885. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3886.     AX = 1117h
  3887.     ES:DI -> uninitialized SFT
  3888.     SS = DOS DS
  3889.     SDA first filename pointer -> fully-qualified name of file to open
  3890.     SDA CDS pointer -> current directory structure for drive with file
  3891.     STACK: WORD file creation mode
  3892.             low byte = file attributes (see #0626 at INT 21/AH=3Ch)
  3893.             high byte = 00h normal create, 01h create new file
  3894. Return: CF set on error
  3895.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3896.     CF clear if successful
  3897.         SFT filled (except handle count, which DOS manages itself)
  3898.     STACK unchanged
  3899. Note:    this function is called by the DOS 3.1+ kernel
  3900. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3901. --------N-2F1118-----------------------------
  3902. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3903.     AX = 1118h
  3904.     ES:DI -> uninitialized SFT
  3905.     SS = DOS DS
  3906.     SDA first filename pointer -> fully-qualified name of file
  3907.     STACK: WORD file creation mode
  3908.             low byte = file attributes
  3909.             high byte = 00h normal create, 01h create new file
  3910. Return: ???
  3911.     STACK unchanged
  3912. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  3913.       on a drive for which the SDA CDS pointer has offset FFFFh
  3914. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3915. --------N-2F1119-----------------------------
  3916. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3917.     AX = 1119h
  3918.     SS = DS = DOS DS
  3919.     [DTA] = uninitialized 21-byte findfirst search data
  3920.           (see #0839 at INT 21/AH=4Eh)
  3921.     SDA first filename pointer -> fully-qualified search template
  3922.     SDA search attribute = attribute mask for search
  3923. Return: CF set on error
  3924.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3925.     CF clear if successful
  3926.         [DTA] = updated findfirst search data
  3927.             (bit 7 of first byte must be set)
  3928.         [DTA+15h] = standard directory entry for file
  3929. Notes:    this function is called by the DOS 3.1+ kernel
  3930.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  3931. SeeAlso: AX=111Ah,AX=111Bh
  3932. --------N-2F111A-----------------------------
  3933. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  3934.     AX = 111Ah
  3935.     ???
  3936. Return: CF set
  3937.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3938. Note:    use AX=111Ch for DOS 5+
  3939. SeeAlso: AX=1119h,AX=111Ch
  3940. --------N-2F111B-----------------------------
  3941. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  3942.     AX = 111Bh
  3943.     SS = DS = DOS DS
  3944.     [DTA] = uninitialized 21-byte findfirst search data
  3945.           (see #0839 at INT 21/AH=4Eh)
  3946.     SDA first filename pointer -> fully-qualified search template
  3947.     SDA CDS pointer -> current directory structure for drive with file
  3948.     SDA search attribute = attribute mask for search
  3949. Return: CF set on error
  3950.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3951.     CF clear if successful
  3952.         [DTA] = updated findfirst search data
  3953.             (bit 7 of first byte must be set)
  3954.         [DTA+15h] = standard directory entry for file
  3955. Note:    this function is called by the DOS 3.1+ kernel
  3956. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  3957. --------N-2F111C-----------------------------
  3958. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  3959.     AX = 111Ch
  3960.     SS = DS = DOS DS
  3961.     ES:DI -> CDS
  3962.     ES:DI -> DTA (MSDOS v5.0)
  3963.     [DTA] = 21-byte findfirst search data
  3964.           (see #0839 at INT 21/AH=4Eh)
  3965. Return: CF set on error
  3966.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  3967.     CF clear if successful
  3968.         [DTA] = updated findfirst search data
  3969.             (bit 7 of first byte must be set)
  3970.         [DTA+15h] = standard directory entry for file
  3971. Note:    this function is called by the DOS 3.1+ kernel
  3972. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  3973. --------N-2F111D-----------------------------
  3974. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  3975.     AX = 111Dh
  3976.     SS = DOS DS
  3977.     SDA PSP segment field = PSP of terminating process
  3978. Return: nothing
  3979. Notes:    used when a process is aborted; the process being terminated is
  3980.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  3981.     this function is called by the DOS 3.1+ kernel
  3982.     closes all FCBs opened by process
  3983. SeeAlso: INT 21/AX=5D04h
  3984. --------N-2F111E-----------------------------
  3985. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  3986.     AX = 111Eh
  3987.     SS = DOS DS
  3988.     STACK: WORD function to execute
  3989.         5F00h  get redirection mode
  3990.             BL = type (03h printer, 04h disk)
  3991.             Return: BH = state (00h off, 01h on)
  3992.         5F01h  set redirection mode
  3993.             BL = type (03h printer, 04h disk)
  3994.             BH = state (00h off, 01h on)
  3995.         5F02h  get redirection list entry
  3996.             BX = redirection list index
  3997.             DS:SI -> 16-byte local device name buffer
  3998.             ES:DI -> 128-byte network name buffer
  3999.             Return: must set user's BX to device type and CX to
  4000.                 stored parameter value, using AX=1218h to get
  4001.                 stack frame address
  4002.         5F03h  redirect device
  4003.             BL = device type (see INT 21/AX=5F03h)
  4004.             CX = stored parameter value
  4005.             DS:SI -> ASCIZ source device name
  4006.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  4007.         5F04h  cancel redirection
  4008.             DS:SI -> ASCIZ device name or network path
  4009.         5F05h  get redirection list extended entry
  4010.             BX = redirection list index
  4011.             DS:SI -> buffer for ASCIZ source device name
  4012.             ES:DI -> buffer for destination ASCIZ network path
  4013.             Return: BH = status flag
  4014.                 BL = type (03h printer, 04h disk)
  4015.                 CX = stored parameter value
  4016.                 BP = NETBIOS local session number
  4017.         5F06h  similar to 5F05h???
  4018. Return: CF set on error
  4019.         AX = error code (see #0885 at INT 21/AH=59h)
  4020.     STACK unchanged
  4021. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  4022.       (including LAN Manager calls)
  4023.     the PC Network 1.00 redirector does not support function 5F06h
  4024. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  4025. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  4026. --------N-2F111F-----------------------------
  4027. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  4028.     AX = 111Fh
  4029.     STACK: WORD function
  4030.         5E02h  set printer setup
  4031.         5E03h  get printer setup
  4032.         5E04h  set printer mode
  4033.         5E05h  get printer mode
  4034. Return: CF set on error
  4035.         AX = error code (see #0885 at INT 21/AH=59h)
  4036.     STACK unchanged
  4037. Note:    this function is called by the DOS 3.1+ kernel
  4038. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  4039. --------N-2F1120-----------------------------
  4040. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  4041.     AX = 1120h
  4042.     DS = DOS DS
  4043.     ???
  4044. Return: CF clear (successful)
  4045. Notes:    this function is called by the DOS 3.1+ kernel
  4046.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  4047. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  4048. --------N-2F1121-----------------------------
  4049. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  4050.     AX = 1121h
  4051.     CX:DX = offset (in bytes) from end
  4052.     ES:DI -> SFT
  4053.         SFT DPB field -> DPB of drive with file
  4054.     SS = DOS DS
  4055. Return: CF set on error
  4056.         AL = DOS error code (see #0885 at INT 21/AH=59h)
  4057.     CF clear if successful
  4058.         DX:AX = new file position
  4059. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  4060.       from the end of a file opened with sharing modes set in such a
  4061.       manner that another process is able to change the size of the file
  4062.       while it is already open
  4063. SeeAlso: AX=1228h,INT 21/AH=42h
  4064. --------N-2F1122-----------------------------
  4065. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  4066.     AX = 1122h
  4067.     SS = DOS DS
  4068.     DS = PSP of process about to terminate
  4069. Return: ???
  4070. Notes:    this function is called by the DOS 3.1+ kernel
  4071.     after calling this function, the kernel calls INT 2F/AX=111Dh
  4072. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  4073. --------N-2F1123-----------------------------
  4074. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  4075.     AX = 1123h
  4076.     DS:SI -> ASCIZ filename to canonicalize
  4077.     ES:DI -> 128-byte buffer for qualified name
  4078. Return: CF set if not resolved
  4079. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  4080.       filename matches the name of a character device
  4081.     called first when DOS attempts to resolve a filename (unless inside an
  4082.       AX=5D00h server call); if this fails, DOS resolves the name locally
  4083. SeeAlso: AX=1221h,INT 21/AH=60h
  4084. --------N-2F1124-----------------------------
  4085. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  4086.     AX = 1124h
  4087.     ES:DI -> SFT
  4088.     SS = DOS DS
  4089.     ???
  4090. Return: CX = ???
  4091. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  4092. SeeAlso: AX=1126h
  4093. --------N-2F1125-----------------------------
  4094. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  4095.     AX = 1125h
  4096.     STACK: WORD subfunction
  4097.         5D07h get print stream state
  4098.             Return: DL = current state
  4099.         5D08h set print stream state
  4100.             DL = new state
  4101.         5D09h finish print job
  4102. Return: CF set on error
  4103.         AX = error code (see #0885 at INT 21/AH=59h)
  4104.     STACK unchanged
  4105. Note:    this function is called by the DOS 3.1+ kernel
  4106. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  4107. --------N-2F1126-----------------------------
  4108. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  4109.     AX = 1126h
  4110.     ES:DI -> SFT for file handle 4???
  4111.     SS = DOS DS???
  4112.     ???
  4113. Return: CF set on error
  4114. Notes:    this function is called by the DOS 3.1+ kernel
  4115.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  4116.       bit 11 of the device information word in the SFT set
  4117. SeeAlso: AX=1124h
  4118. --------N-2F1127-----------------------------
  4119. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4120.     AX = 1127h
  4121. Return: CF set
  4122.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  4123. Note:    used by NetWare 4.0 for remote file copy within a server
  4124. --------N-2F1128-----------------------------
  4125. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4126.     AX = 1128h
  4127. Return: CF set
  4128.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  4129. --------N-2F1129-----------------------------
  4130. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4131.     AX = 1129h
  4132. Return: CF set
  4133.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  4134. --------N-2F112A-----------------------------
  4135. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  4136.     AX = 112Ah
  4137.     DS = DOS DS
  4138.     ???
  4139. Return: ???
  4140. Note:    does something to each IFS driver
  4141. --------N-2F112B-----------------------------
  4142. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  4143.     AX = 112Bh
  4144.     SS = DOS DS
  4145.     CX = function/category
  4146.     DS:DX -> parameter block
  4147.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  4148.     ???
  4149. Return: CF set on error
  4150.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  4151.     CF clear if successful
  4152. Note:    this function is called by the DOS 4.0 kernel
  4153. --------N-2F112C-----------------------------
  4154. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  4155.     AX = 112Ch
  4156.     SS = DOS DS
  4157.     SDA current SFT pointer -> SFT for file
  4158.     ???
  4159. Return: CF set on error
  4160. Note:    called by SHARE in DOS 5.0-6.0
  4161. --------N-2F112D-----------------------------
  4162. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  4163.     AX = 112Dh
  4164.     BL = subfunction (value of AL on INT 21)
  4165.         02h get extended attributes
  4166.         03h get extended attribute properties
  4167.         04h set extended attributes
  4168.         Return: CF clear
  4169.         else ???
  4170.         Return: CX = ??? (00h or 02h for DOS 4.01)
  4171.     ES:DI -> SFT for file
  4172.     SS = DOS DS
  4173. Return: DS = DOS DS
  4174. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  4175.       INT 21/AX=5703h, and INT 21/AX=5704h
  4176. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  4177. --------N-2F112E-----------------------------
  4178. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  4179.     AX = 112Eh
  4180.     SS = DS = DOS DS
  4181.     ES:DI -> uninitialized SFT for file
  4182.     STACK: WORD file attribute for created/truncated file
  4183.             low byte = file attributes
  4184.             high byte = 00h normal create/open, 01h create new file
  4185.     SDA first filename pointer -> fully-qualified filename
  4186.     SDA extended file open action = action code
  4187.           (see #0966 at INT 21/AX=6C00h)
  4188.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  4189. Return: CF set on error
  4190.         AX = error code
  4191.     CF clear if successful
  4192.         CX = result code
  4193.         01h file opened
  4194.         02h file created
  4195.         03h file replaced (truncated)
  4196.         SFT initialized (except handle count, which DOS manages itself)
  4197. Note:    this function is called by the DOS 4.0+ kernel
  4198. BUG:    this function is not called correctly under some DOS versions
  4199.       (at least 5.0 and 6.2):
  4200.         the file attribute on the stack is not correct if the action
  4201.           code is 11h,
  4202.         the result code in CX is not passed back to the application.
  4203. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  4204. --------N-2F112F-----------------------------
  4205. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  4206.     AX = 112Fh
  4207.     SS = DOS DS
  4208.     STACK: WORD function in low byte
  4209.         00h ???
  4210.             DS:SI -> Current Directory Structure???
  4211.             CL = drive (1=A:)
  4212.         01h ???
  4213.             DS:SI -> ???
  4214.             CL = file handle???
  4215.         02h ???
  4216.             DS:SI -> Current Directory Structure???
  4217.             DI = ???
  4218.             CX = drive (1=A:)
  4219.     ???
  4220. Return: CF set on error
  4221.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  4222.     CF clear if successful
  4223. Note:    this function is called by the DOS 4.0 kernel
  4224. SeeAlso: INT 21/AH=6Bh
  4225. --------N-2F1130-----------------------------
  4226. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  4227.     AX = 1130h
  4228. Return: ES = CS of resident IFSFUNC
  4229. --------N-2F1180-----------------------------
  4230. INT 2F - LAN Manager Enhanced DOS Services - ???
  4231.     AX = 1180h
  4232.     ???
  4233. Return: ???
  4234. --------N-2F1182-----------------------------
  4235. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  4236.     AX = 1182h
  4237.     ???
  4238. Return: ???
  4239. --------N-2F1184-----------------------------
  4240. INT 2F - LAN Manager Enhanced DOS - ???
  4241.     AX = 1184h
  4242.     ???
  4243. Return: ???
  4244. --------N-2F1186-----------------------------
  4245. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  4246.     AX = 1186h
  4247.     DS:SI -> stack frame (see #1392)
  4248. Return: CF clear if successful
  4249.     CF set if error
  4250.         AX = error code
  4251. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  4252.       file/printer services
  4253. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  4254.  
  4255. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4256. Offset    Size    Description    (Table 1392)
  4257.  00h    DWORD    -> number of bytes read
  4258.  04h    WORD    size of buffer
  4259.  06h    DWORD    -> buffer
  4260.  0Ah    DWORD    -> return code
  4261.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4262.  12h    WORD    handle
  4263. --------N-2F118A-----------------------------
  4264. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  4265.     AX = 118Ah
  4266.     BX = function (0000h or 0001h)
  4267. Return: CF clear if successful
  4268.         AX = 1100h success
  4269.     CF set if error
  4270.         AX = 0001h, etc.
  4271. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  4272. --------N-2F118B-----------------------------
  4273. INT 2F - LAN Manager Enhanced DOS - ???
  4274.     AX = 118Bh
  4275.     ???
  4276. Return: ???
  4277. --------N-2F118C-----------------------------
  4278. INT 2F - LAN Manager Enhanced DOS - ???
  4279.     AX = 118Ch
  4280.     ???
  4281. Return: ???
  4282. --------N-2F118E-----------------------------
  4283. INT 2F - LAN Manager Enhanced DOS - ???
  4284.     AX = 118Eh
  4285.     ???
  4286. Return: ???
  4287. --------N-2F118F-----------------------------
  4288. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  4289.     AX = 118Fh
  4290.     DS:SI -> stack frame (see #1393)
  4291. Return: CF clear if successful
  4292.     CF set if error
  4293.         AX = error code
  4294. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  4295.  
  4296. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4297. Offset    Size    Description    (Table 1393)
  4298.  00h    DWORD    -> number of bytes read
  4299.  04h    WORD    Size of buffer
  4300.  06h    DWORD    -> buffer
  4301.  0Ah    DWORD    -> return code
  4302.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4303.  12h    WORD    handle
  4304. --------N-2F1190-----------------------------
  4305. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  4306.     AX = 1190h
  4307.     DS:SI -> stack frame (see #1394)
  4308. Return: CF clear if successful
  4309.     CF set if error
  4310.         AX = error code
  4311. SeeAlso: AX=1186h,AX=1191h
  4312.  
  4313. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4314. Offset    Size    Description    (Table 1394)
  4315.  00h    DWORD    -> number of bytes read
  4316.  04h    WORD    size of buffer
  4317.  06h    DWORD    -> buffer
  4318.  0Ah    DWORD    -> return code
  4319.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4320.  12h    WORD    handle
  4321.  14h    DWORD    ???
  4322. --------N-2F1191-----------------------------
  4323. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  4324.     AX = 1191h
  4325.     DS:SI -> stack frame (see #1395)
  4326. Return: CF clear if successful
  4327.     CF set if error
  4328.         AX = error code
  4329. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  4330.  
  4331. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4332. Offset    Size    Description    (Table 1395)
  4333.  00h    DWORD    -> number of bytes read
  4334.  04h    WORD    size of buffer
  4335.  06h    DWORD    -> buffer
  4336.  0Ah    DWORD    -> return code
  4337.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4338.  12h    WORD    handle
  4339.  14h    DWORD    ???
  4340. --------D-2F1200-----------------------------
  4341. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  4342.     AX = 1200h
  4343. Return: AL = FFh (for compatibility with other INT 2F functions)
  4344. --------D-2F1201-----------------------------
  4345. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  4346.     AX = 1201h
  4347.     SS = DOS DS (must be using a DOS internal stack)
  4348.     SDA current SFT pointer -> SFT of file to close
  4349. Return: CF set on error
  4350.     BX???
  4351.     CX new reference count of SFT
  4352.     ES:DI -> SFT for file
  4353. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  4354. --------D-2F1202-----------------------------
  4355. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  4356.     AX = 1202h
  4357.     STACK: WORD vector number
  4358. Return: ES:BX -> interrupt vector
  4359.     STACK unchanged
  4360. --------D-2F1203-----------------------------
  4361. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  4362.     AX = 1203h
  4363. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  4364. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  4365.       segment
  4366. --------D-2F1204-----------------------------
  4367. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  4368.     AX = 1204h
  4369.     STACK: WORD character to normalize
  4370. Return: AL = normalized character (forward slash turned to backslash, all
  4371.           others unchanged)
  4372.     ZF set if path separator
  4373.     STACK unchanged
  4374. --------D-2F1205-----------------------------
  4375. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  4376.     AX = 1205h
  4377.     STACK: WORD character to output
  4378. Return: STACK unchanged
  4379. Note:    can be called only from within DOS
  4380. --------D-2F1206-----------------------------
  4381. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  4382.     AX = 1206h
  4383.     DI = error code
  4384.     BP:SI -> device driver header
  4385.     SS = DOS DS (must be using a DOS internal stack)
  4386.     STACK: WORD value to be passed to INT 24 in AX
  4387. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  4388.     STACK unchanged
  4389. SeeAlso: INT 24
  4390. --------D-2F1207-----------------------------
  4391. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  4392.     AX = 1207h
  4393.     DS:DI -> disk buffer
  4394. Return: nothing
  4395. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4396.       recently used is first); under DOS 3.3, the buffer is then moved to
  4397.       the start of the disk buffer chain if it was marked unused
  4398. Notes:    can be called only from within DOS
  4399.     this function is nearly the same as AX=120Fh
  4400. SeeAlso: AX=120Fh
  4401. --------D-2F1208-----------------------------
  4402. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  4403.     AX = 1208h
  4404.     ES:DI -> SFT
  4405. Return: AX = original value of reference count
  4406. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  4407.       that the SFT is not in use).    It is the caller's responsibility to
  4408.       set the reference count to zero after cleaning up.
  4409.     used by network redirectors such as MSCDEX
  4410. SeeAlso: AX=1106h
  4411. --------D-2F1209-----------------------------
  4412. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  4413.     AX = 1209h
  4414.     DS:DI -> disk buffer
  4415. Return: disk buffer marked unused, contents written to disk if buffer dirty
  4416. Note:    can be called only from within DOS
  4417. SeeAlso: AX=120Eh,AX=1215h
  4418. --------D-2F120A-----------------------------
  4419. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  4420.     AX = 120Ah
  4421.     DS = SS = DOS DS (must be using a DOS internal stack)
  4422.     STACK: WORD extended error code
  4423. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  4424.     CF clear if retry, set otherwise
  4425.     STACK unchanged
  4426. Notes:    can only be called during a DOS function call, as it uses various
  4427.       fields in the SDA to set up the registers for the INT 24
  4428.     reportedly sets current DPB's first root directory sector to 1
  4429. SeeAlso: INT 24
  4430. --------D-2F120B-----------------------------
  4431. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  4432.     AX = 120Bh
  4433.     ES:DI -> system file table entry for previous open of file
  4434.     STACK: WORD extended error code (should be 20h--sharing violation)
  4435. Return: CF clear if operation should be retried
  4436.     CF set if operation should not be retried
  4437.         AX = error code (20h) (see #0885 at INT 21/AH=59h)
  4438.     STACK unchanged
  4439. Notes:    can only be called during a DOS function call
  4440.     should only be called if an attempt was made to open an already-open
  4441.       file contrary to the sharing rules
  4442.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4443.       inheritance allowed
  4444. --------D-2F120C-----------------------------
  4445. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4446.     AX = 120Ch
  4447.     SDA current SFT pointer -> SFT for file
  4448.     DS = DOS DS
  4449.     SS = DOS DS (must be using a DOS internal stack)
  4450. Return: ES, DI, AX destroyed
  4451. Notes:    invokes "device open" call on device driver for SFT
  4452.     changes owner of last-accessed SFT to calling process if it was opened
  4453.       via FCB
  4454.     called by network redirectors such as MSCDEX
  4455. --------D-2F120D-----------------------------
  4456. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4457.     AX = 120Dh
  4458.     SS = DOS DS (must be using a DOS internal stack)
  4459. Return: AX = current date in packed format (see #0877 at INT 21/AX=5700h)
  4460.     DX = current time in packed format (see #0876 at INT 21/AX=5700h)
  4461. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4462. --------D-2F120E-----------------------------
  4463. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4464.     AX = 120Eh
  4465.     SS = DOS DS (must be using a DOS internal stack)
  4466. Return: DS:DI -> first disk buffer
  4467. Notes:    clears "referenced" flag on all disk buffers
  4468.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4469.       used by AX=1224h (SHARING DELAY)
  4470. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4471. --------D-2F120F-----------------------------
  4472. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4473.     AX = 120Fh
  4474.     DS:DI -> disk buffer
  4475.     SS = DOS DS (must be using a DOS internal stack)
  4476. Return: DS:DI -> next buffer in buffer list
  4477. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4478.       recently used is first); under DOS 3.3, the buffer is then moved to
  4479.       the start of the disk buffer chain if it was marked unused
  4480. Note:    this function is the same as AX=1207h except that it returns a
  4481.       pointer to the buffer following the specified buffer in the buffer
  4482.       chain
  4483. SeeAlso: AX=1207h
  4484. --------D-2F1210-----------------------------
  4485. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4486.     AX = 1210h
  4487.     DS:DI -> first disk buffer to check
  4488. Return: ZF clear if found
  4489.         DS:DI -> first unreferenced disk buffer
  4490.     ZF set if not found
  4491. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4492.       used by AX=1224h (SHARING DELAY)
  4493. SeeAlso: AX=120Eh
  4494. --------D-2F1211-----------------------------
  4495. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4496.     AX = 1211h
  4497.     DS:SI -> ASCIZ filename to normalize
  4498.     ES:DI -> buffer for normalized filename
  4499. Return: destination buffer filled with uppercase filename, with slashes turned
  4500.     to backslashes
  4501. SeeAlso: AX=121Eh,AX=1221h
  4502. --------D-2F1212-----------------------------
  4503. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4504.     AX = 1212h
  4505.     ES:DI -> ASCIZ string
  4506. Return: CX = length of string
  4507. SeeAlso: AX=1225h
  4508. --------D-2F1213-----------------------------
  4509. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4510.     AX = 1213h
  4511.     STACK: WORD character to convert to uppercase
  4512. Return: AL = uppercase character
  4513.     STACK unchanged
  4514. --------D-2F1214-----------------------------
  4515. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4516.     AX = 1214h
  4517.     DS:SI = first pointer
  4518.     ES:DI = second pointer
  4519. Return: ZF set if pointers are equal, ZF clear if not equal
  4520. --------D-2F1215-----------------------------
  4521. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4522.     AX = 1215h
  4523.     DS:DI -> disk buffer
  4524.     SS = DOS DS (must be using a DOS internal stack)
  4525.     STACK: WORD drives for which to skip buffer
  4526.         ignore buffer if drive same as high byte, or bytes differ and
  4527.           the buffer is for a drive OTHER than that given in low byte
  4528. Return: STACK unchanged
  4529. Note:    can be called only from within DOS
  4530. SeeAlso: AX=1209h
  4531. --------D-2F1216-----------------------------
  4532. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4533.     AX = 1216h
  4534.     BX = system file table entry number
  4535. Return: CF clear if successful
  4536.         ES:DI -> system file table entry
  4537.         BX = relative entry number in system file table containing entry
  4538.         AX destroyed
  4539.     CF set if BX greater than FILES=
  4540. Note:    supported by DR-DOS 5+
  4541. SeeAlso: AX=1220h
  4542. --------D-2F1217-----------------------------
  4543. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4544.     AX = 1217h
  4545.     SS = DOS DS (must be using a DOS internal stack)
  4546.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4547. Return: CF set on error
  4548.         (drive > LASTDRIVE)
  4549.     CF clear if successful
  4550.         DS:SI -> current directory structure for specified drive
  4551.     STACK unchanged
  4552. SeeAlso: AX=1219h
  4553. --------D-2F1218-----------------------------
  4554. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4555.     AX = 1218h
  4556. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4557. Note:    only valid while within DOS
  4558. --------D-2F1219-----------------------------
  4559. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4560.     AX = 1219h
  4561.     SS = DOS DS (must be using a DOS internal stack)
  4562.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4563. Return: ???
  4564.     STACK unchanged
  4565. Notes:    calls AX=1217h
  4566.     builds a current directory structure if inside server call
  4567.       (INT 21/AX=5D00h)
  4568. SeeAlso: AX=1217h,AX=121Fh
  4569. --------D-2F121A-----------------------------
  4570. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4571.     AX = 121Ah
  4572.     DS:SI -> filename
  4573. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4574.     DS:SI -> filename without leading X: (if present)
  4575. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4576. --------D-2F121B-----------------------------
  4577. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4578.     AX = 121Bh
  4579.     CL = year - 1980
  4580. Return: AL = number of days in February
  4581. Note:    requires DS to be set to the DOS data segment
  4582. SeeAlso: INT 21/AH=2Bh
  4583. --------D-2F121C-----------------------------
  4584. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4585.     AX = 121Ch
  4586.     DS:SI -> start of memory to checksum
  4587.     CX = number of bytes
  4588.     DX = initial checksum
  4589.     SS = DOS DS (must be using a DOS internal stack)
  4590. Return: AX, CX destroyed
  4591.     DX = checksum
  4592.     DS:SI -> first byte after checksummed range
  4593. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4594.     supported by DR-DOS 5.0+
  4595. SeeAlso: AX=121Dh
  4596. --------D-2F121D-----------------------------
  4597. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4598.     AX = 121Dh
  4599.     DS:SI -> memory to add up
  4600.     CX = 0000h
  4601.     DX = limit
  4602. Return: AL = byte which exceeded limit
  4603.     CX = number of bytes before limit exceeded
  4604.     DX = remainder after adding first CX bytes
  4605.     DS:SI -> byte beyond the one which exceeded the limit
  4606. Notes:    used by DOS to determine year or month given day count since 1/1/80
  4607.     supported by DR-DOS 5.0+
  4608. SeeAlso: AX=121Ch
  4609. --------D-2F121E-----------------------------
  4610. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  4611.     AX = 121Eh
  4612.     DS:SI -> first ASCIZ filename
  4613.     ES:DI -> second ASCIZ filename
  4614. Return: ZF set if filenames equivalent, ZF clear if not
  4615. Note:    supported by DR-DOS 5.0+
  4616. SeeAlso: AX=1211h,AX=1221h
  4617. --------D-2F121F-----------------------------
  4618. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4619.     AX = 121Fh
  4620.     SS = DOS DS (must be using a DOS internal stack)
  4621.     STACK: WORD drive letter
  4622. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4623.     STACK unchanged
  4624. --------D-2F1220-----------------------------
  4625. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  4626.     AX = 1220h
  4627.     BX = file handle
  4628. Return: CF set on error
  4629.         AL = 6 (invalid file handle)
  4630.     CF clear if successful
  4631.         ES:DI -> JFT entry for file handle in current process
  4632. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  4633.       file handle, or FFh if the handle is not open
  4634.     supported by DR-DOS 5.0+
  4635. SeeAlso: AX=1216h,AX=1229h
  4636. --------D-2F1221-----------------------------
  4637. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  4638.     AX = 1221h
  4639.     DS:SI -> file name to be fully qualified
  4640.     ES:DI -> 128-byte buffer for resulting canonical file name
  4641.     SS = DOS DS (must be using a DOS internal stack)
  4642. Return: (see INT 21/AH=60h)
  4643. Note:    identical to INT 21/AH=60h
  4644. SeeAlso: AX=1123h,INT 21/AH=60h
  4645. --------D-2F1222-----------------------------
  4646. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  4647.     AX = 1222h
  4648.     SS = DOS data segment
  4649.     SS:SI -> 4-byte records
  4650.         BYTE    error code, FFh = last record
  4651.         BYTE    error class, FFh = don't change
  4652.         BYTE    suggested action, FFh = don't change
  4653.         BYTE    error locus, FFh = don't change
  4654.     SDA error code set
  4655. Return: SI destroyed
  4656.     SDA error class, error locus, and suggested action fields set
  4657. Note:    can be called only from within DOS
  4658. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  4659. --------D-2F1223-----------------------------
  4660. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  4661.     AX = 1223h
  4662.     DS = DOS DS
  4663.     SS = DOS DS (must be using a DOS internal stack)
  4664.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4665.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  4666. Return: CF set if no character device by that name found
  4667.     CF clear if found
  4668.         BH = low byte of device attribute word
  4669. Note:    can only be called from within DOS
  4670. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4671. --------D-2F1224-----------------------------
  4672. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  4673.     AX = 1224h
  4674.     SS = DOS DS (must be using a DOS internal stack)
  4675. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4676.       (INT 21/AX=5D00h)
  4677. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4678.       inside a server call
  4679. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  4680. --------D-2F1225-----------------------------
  4681. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4682.     AX = 1225h
  4683.     DS:SI -> ASCIZ string
  4684. Return: CX = length of string
  4685. Note:    supported by DR-DOS 5.0+
  4686. SeeAlso: AX=1212h
  4687. --------D-2F1226-----------------------------
  4688. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4689.     AX = 1226h
  4690.     CL = access mode
  4691.     DS:DX -> ASCIZ filename
  4692.     SS = DOS DS (must be using a DOS internal stack)
  4693. Return: CF set on error
  4694.         AL = error code (see #0885 at INT 21/AH=59h)
  4695.     CF clear if successful
  4696.         AX = file handle
  4697. Notes:    can only be called from within DOS
  4698.     equivalent to INT 21/AH=3Dh
  4699.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4700. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4701. --------D-2F1227-----------------------------
  4702. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  4703.     AX = 1227h
  4704.     BX = file handle
  4705.     SS = DOS DS (must be using a DOS internal stack)
  4706. Return: CF set on error
  4707.         AL = 06h invalid file handle
  4708.     CF clear if successful
  4709. Notes:    can only be called from within DOS
  4710.     equivalent to INT 21/AH=3Eh
  4711.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4712. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4713. --------D-2F1228BP4200-----------------------
  4714. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  4715.     AX = 1228h
  4716.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4717.     BX = file handle
  4718.     CX:DX = offset in bytes
  4719.     SS = DOS DS (must be using a DOS internal stack)
  4720. Return: as for INT 21/AH=42h
  4721. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4722.       function call
  4723.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4724.       LSEEK, and restores frame pointer
  4725.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4726. SeeAlso: INT 21/AH=42h
  4727. --------D-2F1229-----------------------------
  4728. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  4729.     AX = 1229h
  4730.     BX = file handle
  4731.     CX = number of bytes to read
  4732.     DS:DX -> buffer
  4733.     SS = DOS DS (must be using a DOS internal stack)
  4734. Return: as for INT 21/AH=3Fh
  4735. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4736.       a DOS function call
  4737.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  4738. SeeAlso: AX=1226h,INT 21/AH=3Fh
  4739. --------D-2F122A-----------------------------
  4740. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4741.     AX = 122Ah
  4742.     BX = entry point to set (0001h or 0002h)
  4743.     DS:SI -> FASTOPEN entry point (see #1396,#1397)
  4744.         (entry point not set if SI = FFFFh for DOS 4.0+)
  4745. Return: CF set if specified entry point already set
  4746. Notes:    entry point in BX is ignored under DOS 3.30
  4747.     both entry points set to same handler by DOS 4.01
  4748.     DOS 5.0 and 6.0 only set entry point 1
  4749.  
  4750. (Table 1396)
  4751. Values DOS 3.30+ FASTOPEN entry point is called with:
  4752.     AL = 01h  Lookup
  4753.         CX = ??? seems to be offset
  4754.         DI = ??? seems to be offset
  4755.         SI = offset in DOS DS of filename
  4756.     AL = 02h  insert file into FASTOPEN cache
  4757.     AL = 03h  delete file from FASTOPEN cache
  4758.         SI = offset in DOS DS of filename
  4759.     AL = 04h  purge FASTOPEN cache
  4760.         AH = subfunction (00h,01h,02h)
  4761.         ES:DI -> ???
  4762.         CX = ??? (subfunctions 01h and 02h only)
  4763. Returns: CF set on error or not installed
  4764. Note: function 03h calls function 01h first
  4765. SeeAlso: #1397,#1398
  4766.  
  4767. (Table 1397)
  4768. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  4769.     AL = 04h ???
  4770.         AH = 03h
  4771.         ???
  4772.     AL = 05h ???
  4773.     AL = 0Bh ???
  4774.     AL = 0Ch ???
  4775.     AL = 0Dh ???
  4776.     AL = 0Eh ???
  4777.     AL = 0Fh ???
  4778.     AL = 10h ???
  4779. SeeAlso: #1396,#1398
  4780.  
  4781. (Table 1398)
  4782. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  4783.     AL = 04h  purge FASTOPEN cache
  4784.         AH = 03h
  4785.         ???
  4786.     AL = 05h ???
  4787.         DL = drive (00h = A:)
  4788.         ???
  4789.     AL = 06h ???
  4790.         ???
  4791. SeeAlso: #1396,#1397
  4792. --------D-2F122B-----------------------------
  4793. INT 2F U - DOS 3.3+ internal - IOCTL
  4794.     AX = 122Bh
  4795.     BP = 44xxh
  4796.     SS = DOS DS (must be using a DOS internal stack)
  4797.     additional registers as appropriate for INT 21/AX=44xxh
  4798. Return: as for INT 21/AH=44h
  4799. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4800.       a DOS function call
  4801.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4802.       IOCTL, and restores frame pointer
  4803.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  4804. SeeAlso: INT 21/AH=44h
  4805. --------D-2F122C-----------------------------
  4806. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  4807.     AX = 122Ch
  4808. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4809. Note:    although this function exists in DR-DOS 5.0 and Novell DOS 7, it
  4810.       always returns 0000h:0000h
  4811. SeeAlso: INT 21/AH=52h
  4812. --------D-2F122D-----------------------------
  4813. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4814.     AX = 122Dh
  4815. Return: AX = current extended error code
  4816. SeeAlso: AX=1222h,INT 21/AH=59h
  4817. --------D-2F122E-----------------------------
  4818. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  4819.     AX = 122Eh
  4820.     DL = subfunction
  4821.         00h get standard DOS error table (see #1399)
  4822.         Return: ES:DI -> error table
  4823.                  (DOS 4: errors 00h-12h,50h-5Bh)
  4824.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  4825.         01h set standard DOS error table
  4826.         ES:DI -> error table
  4827.         02h get parameter error table (errors 00h-0Ah)
  4828.         Return: ES:DI -> error table
  4829.         03h set parameter error table
  4830.         ES:DI -> error table
  4831.         04h get critical/SHARE error table (errors 13h-2Bh)
  4832.         Return: ES:DI -> error table
  4833.         05h set critical/SHARE error table
  4834.         ES:DI -> error table
  4835.         06h get ??? error table
  4836.         Return: ES:DI -> error table or 0000h:0000h
  4837.         07h set ??? error table
  4838.         ES:DI -> error table
  4839.         08h get error message retriever (see #1400)
  4840.         Return: ES:DI -> FAR procedure to fetch error message
  4841.         09h set ??? error table
  4842.         ES:DI -> error table
  4843. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4844.       the offset of the error message table within COMMAND.COM, and the
  4845.       procedure returned by DL=08h should be called
  4846.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  4847.       with DL odd are ignored); they are always returned with segment 0001h
  4848.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  4849.       into a single error table
  4850. SeeAlso: AX=0500h,INT 21/AH=59h
  4851.  
  4852. Format of DOS 4.x error table:
  4853. Offset    Size    Description    (Table 1399)
  4854.  00h    BYTE    FFh
  4855.  01h  2 BYTEs    04h,00h (DOS version???)
  4856.  03h    BYTE    number of error headers following
  4857.  04h 2N WORDs    table of all error headers for table
  4858.         Offset    Size    Description
  4859.          00h    WORD    error message number
  4860.          02h    WORD    offset of error message from start of header
  4861.                 error messages are count byte followed by msg
  4862. Note:    DOS 5 error tables consist of one word per error number; each word
  4863.       contains either the offset of a counted string or 0000h
  4864.  
  4865. (Table 1400)
  4866. Call error retrieval function with:
  4867.     AX = error number (see #1401)
  4868.     DI = offset of error table
  4869. Return: ES:DI -> error message (counted string)
  4870. Notes:    this function needs to access COMMAND.COM if the messages were not
  4871.       loaded into memory permanently with /MSG; the caller should assume
  4872.       that the returned message will be overwritten by the next call of
  4873.       the function
  4874.     supported by DR-DOS 5.0
  4875.  
  4876. (Table 1401)
  4877. Values for parameter errors:
  4878.  01h    Too many parameters
  4879.  02h    Required Parameter missing
  4880.  03h    Invalid switch
  4881.  04h    Invalid keyword
  4882.  06h    Parameter value not in allowed range
  4883.  07h    Parameter value not allowed
  4884.  08h    Parameter value not allowed
  4885.  09h    Parameter format not correct
  4886.  0Ah    Invalid parameter
  4887.  0Bh    Invalid parameter combination
  4888. --------D-2F122F-----------------------------
  4889. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  4890.     AX = 122Fh
  4891.     DX = DOS version number (0000h = return true DOS version)
  4892. Note:    not available under DR-DOS 5.0 or 6.0
  4893. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  4894. --------m-2F12FFBX0006-----------------------
  4895. INT 2F U - DR-DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  4896.     AX = 12FFh
  4897.     BX = 0006h
  4898.     DX = 0000h
  4899.     CX = function
  4900.         0000h get status of video memory space (MEMMAX /V)
  4901.         0001h map memory into video memory space (MEMMAX +V)
  4902.         0002h unmap memory from video memory space (MEMMAX -V)
  4903. Return: CF clear if successful
  4904.         AX = 0000h (successful)
  4905.         BX = segment of reserved video RAM
  4906.         CX = segment of used video RAM
  4907.         DX = segment of first upper MCB
  4908. Notes:    this functionality is provided by EMM386, and partially supported by
  4909.       HIDOS.SYS
  4910.     BL specifies which program handles the call, BH is the function number
  4911. SeeAlso: AX=D201h/BX=4849h
  4912. --------O-2F12FFBX0007-----------------------
  4913. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  4914.     AX = 12FFh
  4915.     BX = 0007h
  4916.     CX = 0000h
  4917. Return: CF clear if installed
  4918.         AX = 0000h
  4919.         BX = ??? (4426h)
  4920.         CX = ??? (0068h)
  4921.         DX = PSP segment of resident code???
  4922.         SI = ??? (4AFAh)
  4923.         ES = resident code segment
  4924. --------m-2F12FFBX0106-----------------------
  4925. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  4926.     AX = 12FFh
  4927.     BX = 0106h
  4928. Return:    CF clear if successful
  4929.         AX = 0000h (successful)
  4930.         BX = EDC0h (signature)
  4931.         CL = memory manager variant (02h,03h)
  4932.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  4933.         CH = ??? (00h)
  4934.         DX = version??? (0300h for v3.0)
  4935.         ES = segment of EMM386 low-memory stub
  4936. Notes:    BL specifies which program handles the call, BH is the function number
  4937.     if the word at ES:0012h is nonzero, if contains the offset within
  4938.       segment ES of the CEMM-compatible entry point (see #1402)
  4939.     if no other program has hooked INT 67, an alternate installation
  4940.       check is to test for the string
  4941.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  4942.       handler's segment; the word immediately preceding this string
  4943.       contains the offset of the API entry point if it is nonzero
  4944. Index:    entry point;Novell EMM386
  4945.  
  4946. (Table 1402)
  4947. Call Novell EMM386.EXE entry point with:
  4948.     AH = 00h get memory manager's status???
  4949.         ???
  4950.     AH = 01h set memory manager's status???
  4951.         ???
  4952.     AH = 02h Weitek coprocessor support???
  4953.         AL = subfunction???
  4954.     more functions???
  4955. SeeAlso: #0733 at INT 21/AX=4402h/SF=02h,#2271 at INT 67/AX=FFA5h
  4956. --------m-2F12FFBL06-------------------------
  4957. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  4958.     AX = 12FFh
  4959.     BL = 06h
  4960.     BH = function (02h-09h)
  4961.     ???
  4962. Return: ???
  4963. --------O-2F12FFBX0EDC-----------------------
  4964. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  4965.     AX = 12FFh
  4966.     BX = 0EDCh ('EDC' = Novell European Development Center)
  4967. Return: AX = 0000h if ??? loaded
  4968.         CF clear
  4969.         BX = 0000h
  4970. Notes:    called by Novell DOS 7 TaskMgr
  4971.     if this function returns with AX=0000h, then the code necessary to
  4972.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  4973.       available for use
  4974.     because the request is handled on the initial trap to the memory
  4975.       manager caused by INT instructions, this function must be invoked
  4976.       with an actual INT 2F instruction instead of some simulation such
  4977.       as a far call to the address in the interrupt vector table
  4978. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4979. --------D-2F13-------------------------------
  4980. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  4981.     AH = 13h
  4982.     DS:DX -> interrupt handler disk driver calls on read/write
  4983.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4984.          shell) or warm boot (INT 19)
  4985. Return: DS:DX set by previous invocation of this function
  4986.     ES:BX set by previous invocation of this function
  4987. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4988.       original INT 13 handler.  The first is for disk change detection
  4989.       on floppy drives, the second is for tracking formatting calls and
  4990.       correcting DMA boundary errors, the third is for working around
  4991.       problems in a particular version of IBM's ROM BIOS
  4992.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4993.       also points there unless IO.SYS has installed a special filter for
  4994.       hard disk reads (on systems with model byte FCh and BIOS date
  4995.       "01/10/84" only), in which case it points at the special filter
  4996.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  4997.       functions are still invoked via an INT 13 instruction
  4998.     this is a dangerous security loophole for any virus-monitoring software
  4999.       which does not trap this call ("INT13", "Nomenklatura", and many
  5000.       Bulgarian viruses are known to use it to get the original ROM entry
  5001.       point)
  5002. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  5003. --------N-2F13-------------------------------
  5004. INT 2F U - MS-NET - ???
  5005.     AH = 13h
  5006.     ???
  5007. Return: ???
  5008. Note:    supposedly used to move (or control the movement of) NCBs
  5009. --------U-2F1400-----------------------------
  5010. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  5011.     AX = 1400h
  5012. Return: AL = 00h not installed, OK to install
  5013.          01h not installed, not OK
  5014.          FFh installed
  5015. Notes:    this function is called by the DOS v3.3+ kernel
  5016.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  5017.     supported by DR-DOS 5.0
  5018.     documented for MS-DOS 5+, but undocumented in prior versions
  5019. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  5020. --------D-2F1400-----------------------------
  5021. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  5022.     AX = 1400h
  5023. Return: AX = FFFFh if installed
  5024.         BX = maximum memory required to save screen and keyboard info
  5025.     CF clear if successful
  5026.     CF set on error
  5027.         AX = error code
  5028.         0002h invalid function
  5029.         0004h unknown error
  5030. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  5031.       to communicate with the user
  5032. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5033. --------U-2F1401-----------------------------
  5034. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  5035.     AX = 1401h
  5036.     DS:SI -> internal code page structure (see #1403)
  5037.     BX = new code page (see #0962 at INT 21/AX=6602h)
  5038.     DX = country code???
  5039. Return: AL = status
  5040.          00h successful
  5041.          else DOS error code
  5042. Note:    this function is called by the DOS v3.3+ kernel
  5043. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  5044.  
  5045. Format of DOS 3.30 internal code page structure:
  5046. Offset    Size    Description    (Table 1403)
  5047.  00h  8 BYTEs    ???
  5048.  08h 64 BYTEs    name of country information file
  5049.  48h    WORD    system code page
  5050.  4Ah    WORD    number of supported subfunctions
  5051.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  5052.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  5053.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  5054.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  5055.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  5056. --------D-2F1401-----------------------------
  5057. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  5058.     AX = 1401h
  5059.     DL = function (00h open, 01h close)
  5060.     DH = wait flag
  5061.         00h block until screen opens
  5062.         01h return error if screen is not available
  5063.         02h urgent--always open screen immediately
  5064. Return: CF clear if successful
  5065.         BX = amount of memory needed to save screen and keyboard info,
  5066.         0000h if default save location can be used (only if DH was 02h)
  5067.     CF set on error
  5068. Note:    the application using the screen is frozen until the popup screen is
  5069.       closed
  5070. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5071. --------U-2F1402-----------------------------
  5072. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  5073.     AX = 1402h
  5074.     BP = subfunction (same as AL for INT 21/AH=65h)
  5075.     BX = code page (see #0962 at INT 21/AX=6602h)
  5076.     DX = country code (see #0625 at INT 21/AH=38h)
  5077.     DS:SI -> internal code page structure (see #1403)
  5078.     ES:DI -> user buffer
  5079.     CX = size of user buffer
  5080. Return: AL = status
  5081.         00h successful
  5082.         else DOS error code
  5083. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  5084.     code page structure apparently only needed for COUNTRY.SYS pathname
  5085. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  5086. --------D-2F1402-----------------------------
  5087. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  5088.     AX = 1402h
  5089.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  5090. Return: CF clear if successful
  5091.     CF set on error
  5092.         AX = error code (see #1404)
  5093. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  5094.  
  5095. (Table 1404)
  5096. Values for POPUP error code:
  5097.  0001h    process does not own screen
  5098.  0004h    unknown error
  5099.  0005h    invalid pointer
  5100. --------U-2F1403-----------------------------
  5101. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  5102.     AX = 1403h
  5103.     DS:SI -> internal code page structure (see #1403)
  5104.     BX = code page (see #0962 at INT 21/AX=6602h)
  5105.     DX = country code (see #0625 at INT 21/AH=38h)
  5106. Return: AL = status
  5107.          ???
  5108. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5109. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  5110. --------D-2F1403-----------------------------
  5111. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  5112.     AX = 1403h
  5113.     ES:DI -> buffer containing saved screen
  5114.         (0000h:0000h for default buffer in POPUP)
  5115. Return: CF clear if successful
  5116.     CF set on error
  5117.         AX = error code (see #1404)
  5118. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  5119. --------U-2F1404-----------------------------
  5120. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  5121.     AX = 1404h
  5122.     BX = code page (see #0962 at INT 21/AX=6602h)
  5123.     DX = country code (see #0625 at INT 21/AH=38h)
  5124.     DS:SI -> internal code page structure (see #1403)
  5125.     ES:DI -> user buffer
  5126. Return: AL = status
  5127.          ???
  5128. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5129.     code page structure apparently only needed for COUNTRY.SYS pathname
  5130. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  5131. --------U-2F14FE-----------------------------
  5132. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  5133.     AX = 14FEh
  5134.     BX = code page (FFFFh=global code page) (see #0962 at INT 21/AX=6602h)
  5135.     DX = country ID (FFFFh=current country) (see #0625 at INT 21/AH=38h)
  5136.     ES:DI -> country information buffer
  5137.     CL = info ID
  5138.         01h get general internationalization info
  5139.         02h get pointer to uppercase table
  5140.         04h get pointer to filename uppercase table
  5141.         05h get pointer to filename terminator table
  5142.         06h get pointer to collating sequence table
  5143.         07h get pointer to Double-Byte Character Set table
  5144.     CF set (used to return error if not installed)
  5145. Return: CF clear if successful
  5146.         DS:SI -> requested information
  5147.     CF set on error
  5148. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5149.       or FFh on entry.
  5150.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  5151.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  5152. SeeAlso: #1405,AX=14FFh,INT 21/AH=65h
  5153.  
  5154. Format of DR-DOS COUNTRY.SYS file:
  5155. Offset    Size    Description    (Table 1405)
  5156.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  5157.  7Eh    WORD    signature EDC1h
  5158.  80h    var    country pointer records
  5159.     Offset    Size    Description
  5160.      00h    WORD    country code (0000h if end of array)
  5161.      02h    WORD    code page
  5162.      04h    WORD    ??? (0000h)
  5163.      06h  7 WORDs    offsets in file for data tables for subfunctions
  5164.               01h-07h
  5165.  var    var    country information
  5166. --------U-2F14FF-----------------------------
  5167. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  5168.     AX = 14FFh
  5169.     BX = code page
  5170. Return: AX = ???
  5171.     ZF set if AX=0000h
  5172. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5173.       or FFh on entry.
  5174.     passes codepage preparation request to each character device supporting
  5175.       the generic IOCTL call
  5176. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  5177. --------U-2F1500-----------------------------
  5178. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  5179.     AX = 1500h
  5180. Return: AX = FFFFh
  5181.     ES:DI -> ??? (graphics data?)
  5182. Note:    this installation check conflicts with the CD-ROM Extensions
  5183.       installation check; moved to AX=AC00h in later versions
  5184. SeeAlso: AX=AC00h
  5185. --------d-2F1500BX0000-----------------------
  5186. INT 2F - CD-ROM - INSTALLATION CHECK
  5187.     AX = 1500h
  5188.     BX = 0000h
  5189. Return: BX = number of CD-ROM drive letters used
  5190.     CX = starting drive letter (0=A:)
  5191. Notes:    this installation check DOES NOT follow the format used by other
  5192.       software
  5193.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5194.       installation check
  5195. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h/BX=4D44h"Lotus"
  5196. --------c-2F1500CH90-------------------------
  5197. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5198.     AX = 1500h
  5199.     CH = 90h (function number)
  5200.     BX = 1234h (magic value for CDBLITZ)
  5201. Return: CX = 1234h if installed
  5202.         CF clear
  5203.         DX = BCD version number (DH = major, DL = minor)
  5204. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5205. SeeAlso: AX=1500h/CH=99h
  5206. --------c-2F1500CH91-------------------------
  5207. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5208.     AX = 1500h
  5209.     CH = 91h (function number)
  5210.     BX = 1234h (magic value for CDBLITZ)
  5211. Return: CF clear
  5212.     ES:BX -> statistics record (see #1406)
  5213. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5214.  
  5215. Format of CDBLITZ statistics record:
  5216. Offset    Size    Description    (Table 1406)
  5217.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5218.         0001h 'min', 0002h 'max'
  5219.  02h    DWORD    number of read calls???
  5220.  06h    DWORD    total number of sectors read
  5221.  0Ah    DWORD    unused??? (zero)
  5222.  0Eh    DWORD    number of cache hit sectors
  5223.  12h    WORD    cache size in KB
  5224.  14h    WORD    unused??? (zero)
  5225.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5226. --------c-2F1500CH92-------------------------
  5227. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5228.     AX = 1500h
  5229.     CH = 92h (function number)
  5230.     BX = 1234h (magic value for CDBLITZ)
  5231. Return: CF clear
  5232. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5233. --------c-2F1500CH93-------------------------
  5234. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5235.     AX = 1500h
  5236.     CH = 93h (function number)
  5237.     BX = 1234h (magic value for CDBLITZ)
  5238. Return: CF clear
  5239. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5240. --------c-2F1500CH94-------------------------
  5241. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5242.     AX = 1500h
  5243.     CH = 94h (function number)
  5244.     BX = 1234h (magic value for CDBLITZ)
  5245. Return: CF clear
  5246. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5247. --------c-2F1500CH95-------------------------
  5248. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5249.     AX = 1500h
  5250.     CH = 95h (function number)
  5251.     BX = 1234h (magic value for CDBLITZ)
  5252. Return: CF clear
  5253. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5254. --------c-2F1500CH96-------------------------
  5255. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5256.     AX = 1500h
  5257.     CH = 96h (function number)
  5258.     BX = 1234h (magic value for CDBLITZ)
  5259. Return: CF clear
  5260. Note:    this function resets the counts for number of sectors read and number
  5261.       of cache hits, but no other values in the statistics record
  5262.       (see #1406)
  5263. SeeAlso: AX=1500h/CH=90h
  5264. --------c-2F1500CH97-------------------------
  5265. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5266.     AX = 1500h
  5267.     CH = 97h (function number)
  5268.     BX = 1234h (magic value for CDBLITZ)
  5269. Return: CF clear
  5270.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5271.     AH = cache state (00h disabled, 01h enabled)
  5272.     BX = cache size in KB
  5273.     DX:CX = total number of reads
  5274.     DI:SI = number of cache hits
  5275. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5276. --------c-2F1500CH99-------------------------
  5277. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5278.     AX = 1500h
  5279.     CH = 99h (function number)
  5280.     BX = 1234h (magic value for CDBLITZ)
  5281. Return: CF clear
  5282.     ???
  5283. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5284. SeeAlso: AX=1500h/CH=90h
  5285. --------d-2F1501-----------------------------
  5286. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5287.     AX = 1501h
  5288.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5289. Return: buffer filled, for each drive letter
  5290.       BYTE    subunit number in driver
  5291.       DWORD address of device driver header
  5292. --------d-2F1502-----------------------------
  5293. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5294.     AX = 1502h
  5295.     ES:BX -> 38-byte buffer for name of copyright file
  5296.     CX = drive number (0=A:)
  5297. Return: CF set if drive is not a CD-ROM drive
  5298.         AX = 000Fh (invalid drive)
  5299.     CF clear if successful
  5300. SeeAlso: AX=1503h
  5301. --------d-2F1503-----------------------------
  5302. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5303.     AX = 1503h
  5304.     ES:BX -> 38-byte buffer for name of abstract file
  5305.     CX = drive number (0=A:)
  5306. Return: CF set if drive is not a CD-ROM drive
  5307.         AX = 000Fh (invalid drive)
  5308.     CF clear if successful
  5309. SeeAlso: AX=1502h,AX=1504h
  5310. --------d-2F1504-----------------------------
  5311. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5312.     AX = 1504h
  5313.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5314.     CX = drive number (0=A:)
  5315. Return: CF set if drive is not a CD-ROM drive
  5316.         AX = 000Fh (invalid drive)
  5317.     CF clear if successful
  5318. SeeAlso: AX=1502h,AX=1503h
  5319. --------d-2F1505-----------------------------
  5320. INT 2F - CD-ROM - READ VTOC
  5321.     AX = 1505h
  5322.     ES:BX -> 2048-byte buffer
  5323.     CX = drive number (0=A:)
  5324.     DX = sector index (0=first volume descriptor,1=second,...)
  5325. Return: CF set on error
  5326.         AX = error code (15=invalid drive,21=not ready)
  5327.     CF clear if successful
  5328.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5329. Note:   This function was not supported by Novell DOS 7 NWCDEX prior to the
  5330.           08/16/94 update
  5331. --------d-2F1506-----------------------------
  5332. INT 2F - CD-ROM - TURN DEBUGGING ON
  5333.     AX = 1506h
  5334.     BX = debugging function to enable
  5335. Note:    reserved for development
  5336. SeeAlso: AX=1507h
  5337. --------d-2F1507-----------------------------
  5338. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5339.     AX = 1507h
  5340.     BX = debugging function to disable
  5341. Note:    reserved for development
  5342. SeeAlso: AX=1506h
  5343. --------d-2F1508-----------------------------
  5344. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5345.     AX = 1508h
  5346.     ES:BX -> buffer
  5347.     CX = drive number (0=A:)
  5348.     SI:DI = starting sector number
  5349.     DX = number of sectors to read
  5350. Return: CF set on error
  5351.         AL = error code (15=invalid drive,21=not ready)
  5352.     CF clear if successful
  5353. SeeAlso: AX=1509h
  5354. --------d-2F1509-----------------------------
  5355. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5356.     AX = 1509h
  5357.     ES:BX -> buffer
  5358.     CX = drive number (0=A:)
  5359.     SI:DI = starting sector number
  5360.     DX = number of sectors to write
  5361. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  5362. SeeAlso: AX=1508h
  5363. --------d-2F150A-----------------------------
  5364. INT 2F - CD-ROM - RESERVED
  5365.     AX = 150Ah
  5366. --------d-2F150B-----------------------------
  5367. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5368.     AX = 150Bh
  5369.     CX = drive number (0=A:)
  5370. Return: BX = ADADh if MSCDEX.EXE installed
  5371.         AX = support status
  5372.         0000h if drive not supported
  5373.         nonzero if supported
  5374. SeeAlso: AX=150Dh
  5375. --------d-2F150C-----------------------------
  5376. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (VERSION CHECK)
  5377.     AX = 150Ch
  5378. Return: BH = major version
  5379.     BL = minor version
  5380. Notes:    MSCDEX.EXE versions prior to 2.00 return BX=0
  5381.         Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5382.         Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5383. SeeAlso: AX=1500h
  5384. --------d-2F150D-----------------------------
  5385. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5386.     AX = 150Dh
  5387.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5388. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5389.     to the drive in the same position for function 1501h
  5390. SeeAlso: AX=150Bh
  5391. --------d-2F150E-----------------------------
  5392. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5393.     AX = 150Eh
  5394.     BX = subfunction
  5395.         00h get preference
  5396.         DX = 0000h
  5397.         Return: DX = preference settings
  5398.         01h set preference
  5399.         DH = volume descriptor preference
  5400.             01h = primary volume descriptor
  5401.             02h = supplementary volume descriptor
  5402.         DL = supplementary volume descriptor preference
  5403.             01h = shift-Kanji
  5404.     CX = drive number (0=A:)
  5405. Return: CF set on error
  5406.         AX = error code (15=invalid drive,1=invalid function)
  5407.     CF clear if successful
  5408. --------d-2F150F-----------------------------
  5409. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5410.     AX = 150Fh
  5411.     CL = drive number (0=A:)
  5412.     CH bit 0 = copy flag
  5413.         clear if direct copy
  5414.         set if copy to structure which removes ISO/High Sierra diffs
  5415.     ES:BX -> ASCIZ path name
  5416.     SI:DI -> buffer for directory entry (see #1407,#1408)
  5417.          minimum 255 bytes for direct copy
  5418. Return: CF set on error
  5419.         AX = error code
  5420.     CF clear if successful
  5421.         AX = disk format (0=High Sierra,1=ISO 9660)
  5422. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5423.       08/16/94 update
  5424.  
  5425. Format of CD-ROM directory entry (direct copy):
  5426. Offset    Size    Description    (Table 1407)
  5427.  00h    BYTE  length of directory entry
  5428.  01h    BYTE  length of XAR in Logical Block Numbers
  5429.  02h    DWORD LBN of data, Intel (little-endian) format
  5430.  06h    DWORD LBN of data, Motorola (big-endian) format
  5431.  0Ah    DWORD length of file, Intel format
  5432.  0Eh    DWORD length of file, Motorola format
  5433. ---High Sierra---
  5434.  12h  6 BYTEs date and time
  5435.  18h    BYTE  bit flags
  5436.  19h    BYTE  reserved
  5437. ---ISO 9660---
  5438.  12h  7 BYTEs date and time
  5439.  19h    BYTE  bit flags
  5440. ---both formats---
  5441.  1Ah    BYTE  interleave size
  5442.  1Bh    BYTE  interleave skip factor
  5443.  1Ch    WORD  volume set sequence number, Intel format
  5444.  1Eh    WORD  volume set sequence number, Motorola format
  5445.  20h    BYTE  length of file name
  5446.  21h  N BYTEs file name
  5447.     BYTE (optional) padding if filename is odd length
  5448.       N BYTEs system data
  5449. SeeAlso: #1408
  5450.  
  5451. Format of CD-ROM directory entry (canonicalized):
  5452. Offset    Size    Description    (Table 1408)
  5453.  00h    BYTE    length of XAR in Logical Block Numbers
  5454.  01h    DWORD    Logical Block Number of file start
  5455.  05h    WORD    size of disk in logical blocks
  5456.  07h    DWORD    file length in bytes
  5457.  0Bh  7 BYTEs    date and time
  5458.  12h    BYTE    bit flags
  5459.  13h    BYTE    interleave size
  5460.  14h    BYTE    interleave skip factor
  5461.  15h    WORD    volume set sequence number
  5462.  17h    BYTE    length of file name
  5463.  18h 38 BYTEs    ASCIZ filename
  5464.  3Eh    WORD    file version number
  5465.  40h    BYTE    number of bytes of system use data
  5466.  41h 220 BYTEs    system use data
  5467. SeeAlso: #1407
  5468. --------d-2F1510-----------------------------
  5469. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5470.     AX = 1510h
  5471.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5472.     ES:BX -> CD-ROM device driver request header (see #1382 at AX=0802h)
  5473. Note:    MSCDEX initializes the device driver request header's subunit field
  5474.       based on the drive number specified in CX
  5475. BUG:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5476.       the subunit field
  5477. --------d-2F15FFBX0000-----------------------
  5478. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5479.         AX = 15FFh
  5480.         BX = 0000h
  5481. Return: BX = ABCDh if CORELCDX loaded
  5482. Note:   Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5483.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5484. SeeAlso: AX=1500h,AX=150Ch
  5485. --------W-2F1600-----------------------------
  5486. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5487.     AX = 1600h
  5488. Return: AL = status
  5489.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5490.         01h Windows/386 2.x running
  5491.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5492.           mode nor Windows/386 2.x running) (obsolete--see note)
  5493.         FFh Windows/386 2.x running
  5494.     AL = anything else
  5495.         AL = Windows major version number >= 3
  5496.         AH = Windows minor version number
  5497. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5498.       drivers, TSRs, and applications) to cooperate with multitasking
  5499.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5500.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5501.       Windows standard mode
  5502.     this function served as the installation check and AX=1610h served to
  5503.       get the driver entry point for XMS version 1, which is now obsolete.
  5504.       Use AX=4300h and AX=4310h instead
  5505. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  5506. Index:    installation check;XMS version 1
  5507. --------W-2F1602-----------------------------
  5508. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  5509.     AX = 1602h
  5510. Return: ES:DI -> Windows/386 2.x API procedure entry point
  5511. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  5512.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  5513.         AX = 0000h
  5514.         ES:DI -> return address
  5515.         JUMP to address returned from INT 2F/AX=1602h
  5516.     After JUMP, at return address:
  5517.         BX = current VM ID.
  5518. SeeAlso: AX=C020h
  5519. --------W-2F1603-----------------------------
  5520. INT 2F - MS Windows/386 - GET INSTANCE DATA
  5521.     AX = 1603h
  5522. Return: AX = 5248h ('RH') if supported
  5523.         DS:SI -> Windows/386 instance data (see #1409)
  5524. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  5525.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  5526.       supported, as is the case in DOS versions prior to 5.0
  5527.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5528.       this function, DOSMGR's behavior, and instancing in general
  5529. SeeAlso: AX=1607h/BX=0015h
  5530.  
  5531. Format of Windows/386 instance data:
  5532. Offset    Size    Description    (Table 1409)
  5533.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  5534.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  5535.         0000h if not applicable
  5536.  04h    WORD    number of instance data entries (max 32)
  5537.  06h    Array of instance data entries
  5538.     Offset    Size    Description
  5539.      00h    WORD    segment (0002h = DOS kernel)
  5540.      02h    WORD    offset
  5541.      04h    WORD    size
  5542. --------W-2F1605-----------------------------
  5543. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  5544.     AX = 1605h
  5545.     ES:BX = 0000h:0000h
  5546.     DS:SI = 0000h:0000h
  5547.     CX = 0000h
  5548.     DX = flags
  5549.         bit 0 = 0 if Windows enhanced-mode initialization
  5550.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  5551.         bits 1-15 reserved (undefined)
  5552.     DI = version number (major in upper byte, minor in lower)
  5553. Return: CX = 0000h if okay for Windows to load
  5554.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  5555.     CX <> 0 if Windows should not load
  5556.     ES:BX -> startup info structure (see #1410)
  5557.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  5558.           (see #1413)
  5559. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  5560.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  5561.       driver or TSR can watch for this broadcast and return the appropriate
  5562.       values.  If the driver or TSR returns CX <> 0, it is also its
  5563.       responsibility to display an error message.
  5564.     each handler must first chain to the prior INT 2F handler with
  5565.       registers unchanged before processing the call
  5566.     if the handler requires local data on a per-VM basis, it must store the
  5567.       returned ES:BX in the "next" field of a startup info structure and
  5568.       return a pointer to that structure in ES:BX
  5569.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  5570.       already nonzero, the TSR must fail the initialization by setting CX
  5571.       nonzero
  5572.     MSD checks for Windows 3.0 running in standard mode by testing whether
  5573.       CX=FFFFh and other registers are unchanged on return
  5574.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  5575.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5576.     Micrsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  5577.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  5578.       active
  5579. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  5580.  
  5581. Format of Windows Startup Information Structure:
  5582. Offset    Size    Description    (Table 1410)
  5583.  00h  2 BYTEs    major, minor version of info structure
  5584.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5585.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  5586.  0Ah    DWORD    virtual device reference data (see #1412)
  5587.         (only used if above nonzero)
  5588.  0Eh    DWORD    pointer to instance data records (see #1411) or 0000h:0000h
  5589.  
  5590. Format of one Instance Item in array:
  5591. Offset    Size    Description    (Table 1411)
  5592.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5593.  04h    WORD    size of instance data
  5594.  
  5595. Format of Virtual Device Reference Data:
  5596. Offset    Size    Description    (Table 1412)
  5597.  00h    DWORD    physical address of ??? or 00000000h
  5598.  04h    DWORD    physical address of ??? table
  5599.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  5600.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  5601.         00000000h = end of table
  5602. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  5603.       chain, the second pointer to a field of 40h bytes followed by a
  5604.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  5605.       the start segment of the UMB area
  5606.  
  5607. (Table 1413)
  5608. Values Windows virtual mode enable/disable procedure is called with:
  5609.     AX = 0000h disable V86 mode
  5610.     AX = 0001h enable V86 mode
  5611.     interrupts disabled
  5612. Return: CF set on error
  5613.     CF clear if successful
  5614.     interrupts disabled
  5615. --------W-2F1606-----------------------------
  5616. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  5617.     AX = 1606h
  5618.     DX = flags
  5619.         bit 0 = 0 if Windows enhanced-mode exit
  5620.         bit 0 = 1 if Microsoft 286 DOS extender exit
  5621.         bits 1-15 reserved (undefined)
  5622. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  5623.       broadcast will be issued immediately.
  5624.     this call will be issued in real mode
  5625.     Novell DOS v7.0 (Update 8 - Update 10) TASKMGR in multitasking mode
  5626.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5627. SeeAlso: AX=1605h,AX=1609h
  5628. --------W-2F1607-----------------------------
  5629. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  5630.     AX = 1607h
  5631.     BX = virtual device ID (see #1419)
  5632.     CX = (usually) callout subfunction
  5633. Return: (usually) AX,BX,CX,DX,ES contain results
  5634. Notes:    more of a convention than an API, this call specifies a standard
  5635.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  5636.       to DOS device drivers and TSRs
  5637.     see below for details on several virtual devices
  5638. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5639. SeeAlso: AX=1607h/BX=0018h,AX=1684h,AX=C020h
  5640. --------W-2F1607BX0006-----------------------
  5641. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  5642.     AX = 1607h
  5643.     BX = 0006h (VxD identifier of "V86MMGR")
  5644.     CX = 0000h
  5645. Return: AX = status
  5646.         0000h if local A20 state changed
  5647.         1607h if A20 unchanged
  5648.         other if global A20 state changed
  5649. --------W-2F1607BX000C-----------------------
  5650. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  5651.     AX = 1607h
  5652.     BX = 000Ch (VxD identifier of "VMD")
  5653. Return: CX = nonzero if mouse driver already virtualized
  5654. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  5655.       nonzero; if yes, it will not automatically virtualize the mouse
  5656.       driver.  This would be used if MOUSE.COM already virtualizes
  5657.       itself using the Windows API.
  5658. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5659. --------W-2F1607BX0010-----------------------
  5660. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  5661.     AX = 1607h
  5662.     BX = 0010h (VxD identifier of "BLOCKDEV")
  5663.     CX = function
  5664.         0001h starting FastDisk compatibility tests
  5665.         0002h ending FastDisk compatibility tests
  5666.         0003h check if FastDisk installation allowed
  5667.         Return: CX = 0000h if allowed
  5668. Note:    this interface is called by the Windows FastDisk driver (such as
  5669.       WDCTRL) when it thinks that the INT 13h handler immediately below
  5670.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  5671.       program which hooks itself underneath IO.SYS's INT 13h code with
  5672.       INT 2F/AH=13h
  5673. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  5674. --------W-2F1607BX0014-----------------------
  5675. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  5676.     AX = 1607h
  5677.     BX = 0014h (VxD identifier of "VNETBIOS")
  5678. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  5679.         command code (see #1414)
  5680. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  5681.       the NetBIOS has an extensions Windows should know about
  5682. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  5683.  
  5684. (Table 1414)
  5685. Values for VNETBIOS action code:
  5686.  00h    "VN_Unknown" unknown command
  5687.  04h    "VN_No_Map"  no memory mapping necessary
  5688.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  5689.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  5690.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  5691.  14h    "VN_Chain_Send"     the chain-send command
  5692.  18h    "VN_Cancel"    special case for cancel command
  5693.  1Ch    "VN_Buffer_In"    buffer is incoming
  5694.  20h    "VN_Buffer_Out" buffer is outgoing
  5695.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  5696. --------D-2F1607BX0015-----------------------
  5697. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  5698.     AX = 1607h
  5699.     BX = 0015h (VxD identifier of "DOSMGR")
  5700.     CX = function
  5701.         0000h query instance processing
  5702.         DX = 0000h
  5703.         Return: CX = state
  5704.                 0000h not instanced
  5705.                 other instanced (DOS 5+ kernel returns 0001h)
  5706.                 DX = segment of DOS drivers or 0000h for
  5707.                     default of 0070h
  5708.                 ES:BX -> patch table (see #1416)
  5709.         0001h set patches in DOS
  5710.         DX = bit mask of patch requests (see #1415)
  5711.         Return: AX = B97Ch
  5712.             BX = bit mask of patches applied (see #1415)
  5713.             DX = A2ABh
  5714.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  5715.         DX = bit mask of patch requests (see function 0001h)
  5716.         Return: CX = 0000h (DOS 5-6)
  5717.         Note:    return values are ignored by DOSMGR in Windows 3.1
  5718.         0003h get size of DOS data structures
  5719.         DX = bit mask of request (only one bit can be set)
  5720.             bit 0: Current Directory Structure size
  5721.         Return: if supported request:
  5722.                 AX = B97Ch
  5723.                 CX = size in bytes of requested structure
  5724.                 DX = A2ABh
  5725.             else:
  5726.                 CX = 0000h
  5727.                 all other registers preserved
  5728.         0004h determine instanced data structures
  5729.         Return: AX = B97Ch if supported
  5730.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  5731.             BX = bit mask of instanced items
  5732.                 bit 0: CDS
  5733.                 bit 1: SFT
  5734.                 bit 2: device list
  5735.                 bit 3: DOS swappable data area
  5736.         0005h get device driver size
  5737.         ES = segment of device driver
  5738.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  5739.             DX:AX = A2ABh:B97Ch if successful
  5740.                 BX:CX = size of device driver in bytes
  5741. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  5742.       been instanced via this API and will not perform its own default
  5743.       instancing of the normal DOS/BIOS data if so; if this API is not
  5744.       supported, DOSMGR will also try to access instancing data through
  5745.       INT 2F/AX=1603h
  5746.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  5747.       tables of instancing information for earlier versions of DOS
  5748.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5749.       DOSMGR's behavior and instancing in general
  5750. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  5751.  
  5752. Bitfields for DOSMGR patch requests:
  5753. Bit(s)    Description    (Table 1415)
  5754.  0    enable critical sections
  5755.  1    NOP setting/checking user ID
  5756.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  5757.  3    trap stack fault in "SYSINIT" to WIN386
  5758.  4    BIOS patch to trap "Insert disk X:" to WIN386
  5759.  
  5760. Format of DOSMGR patch table:
  5761. Offset    Size    Description    (Table 1416)
  5762.  00h  2 BYTEs    DOS version (major, minor)
  5763.  02h    WORD    offset in DOS data segment of "SAVEDS"
  5764.  04h    WORD    offset in DOS data segment of "SAVEBX"
  5765.  06h    WORD    offset in DOS data segment of InDOS flag
  5766.  08h    WORD    offset in DOS data segment of User ID word
  5767.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  5768.           critical section calls (see INT 2A/AH=80h)
  5769.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  5770.           containing segment of last MCB in conventional memory
  5771. --------W-2F1607BX0018-----------------------
  5772. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  5773.     AX = 1607h
  5774.     BX = 0018h (VMPoll VxD ID)
  5775.     CX = 0000h
  5776. Return: AX = status
  5777.         0000h if timeslice used
  5778.         nonzero if timeslice not needed
  5779. Note:    when VMPoll makes this callout, all virtual machines are idle
  5780. SeeAlso: AX=1607h
  5781. --------W-2F1607BX0021--------------------------------------
  5782. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  5783.     AX = 1607h
  5784.     BX = 0021h (PageFile VxD ID)
  5785.     CX = 0000h
  5786. Return: AX = status
  5787.         0000h success
  5788.         ES:DI -> cache lock byte in disk cacher
  5789.         other no disk cache or unsupported
  5790. Notes:    PageFile issues this call on real-mode initialization in order to allow
  5791.       disk caches to provide it with a byte which it can use to temporarily
  5792.       lock the disk cache; VMPOLL also issues this call, so it is made
  5793.       twice each time Windows starts up
  5794.     if this call fails, PageFile falls back to other techniques for locking
  5795.       the disk cache
  5796. SeeAlso: AX=1607h
  5797. --------E-2F1607BX22C0-----------------------
  5798. INT 2F - Rational Systems DOS/4GW - ???
  5799.     AX = 1607h
  5800.     BX = 22C0h
  5801.     ???
  5802. Return: ???
  5803. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  5804. --------W-2F1608-----------------------------
  5805. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  5806.     AX = 1608h
  5807. Notes:    called after all installable devices have been initialized
  5808.     real-mode software may be called between the Windows enhanced-mode init
  5809.       call (AX=1605h) and this call; the software must detect this
  5810.       situation
  5811. SeeAlso: AX=1605h,AX=1609h
  5812. --------W-2F1609-----------------------------
  5813. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  5814.     AX = 1609h
  5815. Note:    called at the beginning of a normal exit sequence; not made in the
  5816.       event of a fatal system crash
  5817. SeeAlso: AX=1606h,AX=1608h
  5818. --------W-2F160A-----------------------------
  5819. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  5820.     AX = 160Ah
  5821. Return: AX = 0000h if call supported
  5822.         BX = version (BH=major, BL=minor)
  5823.         CX = mode (0002h = standard, 0003h = enhanced)
  5824. SeeAlso: AX=1600h,AX=4680h
  5825. --------W-2F160B-----------------------------
  5826. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  5827.     AX = 160Bh
  5828.     ES:DI -> communication structure (see #1417) or 0000h:0000h
  5829. Return: ES:DI -> communication structure
  5830. Desc:    this call allows Windows-aware TSRs to make themselves known to
  5831.       Windows.
  5832. Note:    the TSR should allocate a communication structure, place the given
  5833.       ES:DI pointer in the first field, and return a pointer to the new
  5834.       structure
  5835. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  5836.  
  5837. Format of TSR-to-Windows communication structure:
  5838. Offset    Size    Description    (Table 1417)
  5839.  00h    DWORD    pointer to next structure
  5840.  04h    WORD    PSP segment
  5841.  06h    WORD    API version ID (0100h)
  5842.  08h    WORD    EXEC flags
  5843.         bit 0: "WINEXEC"
  5844.         bit 1: "LOADLIBRARY"
  5845.         bit 2: "OPENDRIVER"
  5846.  0Ah    WORD    "exec_cmd_show"
  5847.  0Ch    DWORD    "exec_cmd"
  5848.  10h  4 BYTEs    reserved (0)
  5849.  14h    DWORD    pointer to TSR ID block (see #1418)
  5850.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  5851.  
  5852. Format of Norton Utilities 6.0 TSR ID block:
  5853. Offset    Size    Description    (Table 1418)
  5854.  00h    WORD    length of name string
  5855.  02h  N BYTEs    name of TSR's executable
  5856. --------W-2F160C-----------------------------
  5857. INT 2F - MS Windows 3.1 - DETECT ROMs
  5858.     AX = 160Ch
  5859.     ???
  5860. Return: ???
  5861. Note:    used by ROM Windows
  5862. SeeAlso: AX=160Bh
  5863. --------m-2F1610-----------------------------
  5864. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  5865.     AX = 1610h
  5866.     details unavailable
  5867. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  5868.       obsolete.  Use AX=4300h and AX=4310h instead
  5869. SeeAlso: AX=1600h,AX=4310h
  5870. --------W-2F1680-----------------------------
  5871. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  5872.     AX = 1680h
  5873. Return: AL = status
  5874.         00h if the call is supported
  5875.         80h (unchanged) if the call is not supported
  5876. Notes:    programs can use this function in idle loops to enhance performance
  5877.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  5878.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  5879.     does not block the program; it just gives up the remainder of the time
  5880.       slice
  5881.     should not be used by Windows-specific programs
  5882.     when called very often without intermediate screen output under WIN 3+,
  5883.       the VM will go into an idle-state and will not receive the next slice
  5884.       before 8 seconds. This time can be changed in SYSTEM.INI through
  5885.       "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  5886. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  5887. --------W-2F1681-----------------------------
  5888. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  5889.     AX = 1681h
  5890. Notes:    used to prevent a task switch from occurring
  5891.     should be followed by an INT 2F/AX=1682h call as soon as possible
  5892.     nested calls are allowed, and must be followed by an appropriate number
  5893.       of "end critical section" calls
  5894.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  5895.       increment by hand.
  5896. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  5897. --------W-2F1682-----------------------------
  5898. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  5899.     AX = 1682h
  5900. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  5901.       and decrement by hand, taking care not to decrement InDOS flag
  5902.       through zero
  5903. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  5904. --------W-2F1683-----------------------------
  5905. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  5906.     AX = 1683h
  5907. Return: BX = current virtual machine (VM) ID
  5908. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  5909.     VM IDs are reused when VMs are destroyed
  5910.     an ID of 0 will never be returned
  5911. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  5912. --------W-2F1684-----------------------------
  5913. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  5914.     AX = 1684h
  5915.     BX = virtual device (VxD) ID (see #1419)
  5916.     ES:DI = 0000h:0000h
  5917. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  5918. Note:    some Windows enhanced-mode virtual devices provide services that
  5919.       applications can access.  For example, the Virtual Display Device
  5920.       (VDD) provides an API used in turn by WINOLDAP.
  5921. SeeAlso: AX=1683h
  5922.  
  5923. (Table 1419)
  5924. Values for MS Windows VxD ID:
  5925. Value    Name   CallOut V86 PM    Description
  5926.  0000h    LPT        N    N  N    DOS386 LPT Device (Windows for Workgroups 3.11)
  5927.  0000h    MSODISUP    N    N  N    MS ODI Support (Windows for Workgroups 3.11)
  5928.  0000h    NWNBLINK    N    N  N    Netware NetBIOS (Windows for Workgroups 3.11)
  5929.  0000h    SERIAL        N    N  N    DOS386 Serial Device (Windows for Workgrp 3.11)
  5930.  0001h    VMM        N  N    Virtual Machine Manager
  5931.  0002h    Debug
  5932.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  5933.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  5934.  0005h    VTD        Y  Y    Virtual Timer Device
  5935.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  5936.  0007h    PageSwap    N  N    Paging Device
  5937.  0008h    Parity        N  N    Parity-check trapper
  5938.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  5939.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  5940.  000Bh    VSD        N  N    Virtual Sound Device
  5941.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  5942.  000Dh    VKD        N  Y    Virtual Keyboard Device
  5943.  000Eh    VCD        N  Y    Virtual COMM Device
  5944.  000Fh    VPD            Virtual Printer Device
  5945.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  5946.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  5947.  0010h    IOS        N    N  N    DOS386 IOS Device (Windows for Workgroups 3.11)
  5948.  0010h    IOS        N  Y    (Chicago)
  5949.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  5950.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  5951.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  5952.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  5953.  0015h    DOSMGR        Y    Y  N    DOS data instancing (see #1422)
  5954.  0016h    WINLOAD
  5955.  0017h    SHELL        N  Y
  5956.  0018h    VMPOLL        N  N
  5957.  0019h    VPROD
  5958.  001Ah    DOSNET        N  N    assures network integrity across VMs
  5959.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  5960.  001Bh    VFD        N  N    Virtual Floppy Device
  5961.  001Ch    VDD2            Secondary display adapter
  5962.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  5963.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  5964.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  5965.  001Dh    WINDEBUG    N  Y
  5966.  001Dh    TDDebug        N  Y
  5967.  001Eh    TSRLoad            TSR instance utility
  5968.  001Fh    BiosHook        BIOS interrupt hooker VxD
  5969.  0020h    Int13        N    N  N
  5970.  0021h    PageFile    N  Y    Paging File device
  5971.  0022h    SCSI
  5972.  0023h    MCA_POS
  5973.  0024h    SCSIFD            SCSI FastDisk device
  5974.  0025h    VPEND            Pen device
  5975.  0026h    APM            Advanced Power Management
  5976.  0027h    VXDLDR         N    Y  Y    VXDLDR (Windows for Workgroups 3.11)
  5977.  0028h    NDIS         N    Y  Y    Network Driver Interface Specification
  5978.                   (Windows for Workgroups 3.11)
  5979.  002Ah    VWIN32        N  Y    (Chicago)
  5980.  002Bh    VCOMM         N    Y  Y    DOS386 VCOMM Device (Windows for Workgrps 3.11)
  5981.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  5982.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  5983.  0031h    NETBEUI         N    N  N    NETBEUI (Windows for Workgroups 3.11)
  5984.  0032h    SERVER         N    Y  Y    Int21 File Server (Windows for Workgroups 3.11)
  5985.  0033h    CONFIGMG    Y  Y    (Chicago)
  5986.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  5987.  0034h    DWCFGMG.SYS        Plug-and-Play configuration manager
  5988.  0036h    VFBACKUP    Y  Y    (Chicago)
  5989.  0038h    VCOND        Y  Y    (Chicago)
  5990.  003Ah    VPMTD         N    N  Y    IFAX Scheduler Device (Windows for Workgr 3.11)
  5991.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  5992.  0051h    ISAPNP        N  N
  5993.  008Dh    ESDI_506    N  N    (Chicago)
  5994.  0090h    voltrack    N  N
  5995.  00FDh    FAKEIDE        N  N    (Chicago)
  5996.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  5997.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  5998.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  5999.  0202h    WINICE        Y  Y    SoftICE/W
  6000.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6001.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6002.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6003.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6004.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6005.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6006.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6007.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6008.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6009.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6010.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6011.  0460h    UNIMODEM    N  Y
  6012.  0480h    VNetSup         N    Y  Y    Virtual Net Support (Windows for Workgrps 3.11)
  6013.  0481h    VRedir         N    N  N    Redirector File System Driver
  6014.                   (Windows for Workgroups 3.11)
  6015.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6016.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  6017.  0484h    IFSMgr         Y    Y  N    Installable File System Manager
  6018.                   (Windows for Workgroups 3.11)
  6019.  0486h    VFAT         N    Y  Y    Win386 HPFS Driver (Windows for Workgrps 3.11)
  6020.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6021.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6022.  048Bh    VCache         N    Y  Y    Virtual File Cache (Windows for Workgrps 3.11)
  6023.  048Bh    VCACHE        Y  Y
  6024.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6025.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6026.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6027.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6028.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6029.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6030.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6031.  22C0h    ???        Y        Rational Systems DOS/4GW ???
  6032.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6033.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6034.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6035.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6036.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6037.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6038.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  6039.                   A. Kenemuth of Interabang Computing
  6040.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6041.  28A1h    PharLap        Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6042.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  6043.                   Andrew Schulman in MSJ February 1993
  6044.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6045.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6046.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  6047.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6048.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6049.  4321h    POSTMSG        Y  Y    (see #1436)
  6050.  7A5Fh    SIWVID        Y    Y  Y    Soft-ICE for Windows video driver
  6051.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6052.  7FE0h    VWFD        N    Y  Y    reports windowed/fullscreen state
  6053.                   by Neil Sandlin of Microsoft
  6054.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  6055.                   by Keith Jin of Microsoft PSS
  6056.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6057.                   Sandlin of Microsoft
  6058.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  6059.                   Neil Sandlin of Microsoft
  6060.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6061.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  6062.                   Bernie McIlroy of Microsoft
  6063.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6064.                   Sandlin of Microsoft
  6065.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6066.                   Sandlin of Microsoft
  6067.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6068.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6069.                   Borland C++ v4.0
  6070. Note:    The high bit of the VxD ID is reserved for future use. The
  6071.     next 10 bits are the OEM number which is assigned by Microsoft. The
  6072.     low 5 bits are the device number.  Naturally, this scheme has not
  6073.     been adhered to since there are now more than 32 different VxDs.
  6074. --------W-2F1684BX0003-----------------------
  6075. INT 2F - MS Windows - VPICD - GET DEVICE API ENTRY POINT
  6076.     AX = 1684h
  6077.     BX = 0003h (virtual device ID for VPICD device) (see #1419)
  6078.     ES:DI = 0000h:0000h
  6079. Return: ES:DI -> VxD API entry point
  6080.           0000h:0000h if the VxD does not support an API
  6081. --------W-2F1684BX0005-----------------------
  6082. INT 2F - MS Windows - VTD - GET DEVICE API ENTRY POINT
  6083.     AX = 1684h
  6084.     BX = 0005h (virtual device ID for VTD device) (see #1419)
  6085.     ES:DI = 0000h:0000h
  6086. Return: ES:DI -> VxD API entry point (see #1420)
  6087.           0000h:0000h if the VxD does not support an API
  6088.  
  6089. (Table 1420)
  6090. Call VTD.386 entry point with:
  6091.     AX = function number
  6092.         0000h get VTD version number
  6093.         Return: AH = major version
  6094.             AL = minor version
  6095.         0100h get current clock tick time
  6096.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6097.                   was started
  6098.         0101h get current system time in milliseconds
  6099.         Return: EAX = time in milliseconds that Windows has been
  6100.                   running
  6101.         0102h get current virtual machine time
  6102.         Return: EAX = cumulative amount of time the virtual machine has
  6103.                   been active, in milliseconds
  6104. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6105.       TimerCount() cannot be called
  6106. SeeAlso: #2633,#2634,#2654 at INT 20"Windows"
  6107. --------W-2F1684BX0009-----------------------
  6108. INT 2F - MS Windows - REBOOT - GET DEVICE API ENTRY POINT
  6109.     AX = 1684h
  6110.     BX = 0009h (virtual device ID for REBOOT device) (see #1419)
  6111.     ES:DI = 0000h:0000h
  6112. Return: ES:DI -> VxD API entry point (see #1421)
  6113.           0000h:0000h if the VxD does not support an API
  6114. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6115.  
  6116. (Table 1421)
  6117. Call REBOOT protected-mode entry point with:
  6118.     AX = function
  6119.         0100h warm boot
  6120.         Return: never
  6121.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6122.               by the VKD device
  6123.         0201h set KERNEL Ctrl-Alt-Del handler
  6124.         ES:DI -> new Ctrl-Alt-Del handler
  6125.         DS:SI -> KERNEL reboot sanity check byte
  6126.         Return: CF clear
  6127.         Notes:    if an application installs its own handler and then
  6128.               chains to Windows' handler, Windows will no longer
  6129.               be able to detect hung applications, and will always
  6130.               produce an "Application not responding" dialog
  6131.             DS must contain a writable, fixed selector because
  6132.               the provided address is converted to a linear address
  6133.               before being stored
  6134.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6135.               sets the sanity check byte to zero, schedules a
  6136.               750ms wait, and then tests whether the check byte is
  6137.               still zero; if not, it displays a message that there
  6138.               is no hung application and then exits
  6139.         0202h get KERNEL Ctrl-Alt-Del handler
  6140.         Return: CF clear
  6141.             ES:DI -> current Ctrl-Alt-Del handler
  6142.         Note:    the default handler is located in KERNEL
  6143.         0203h display "Application not responding" dialog box
  6144.         ES:DI -> ASCIZ name of hung application
  6145.         Return: never if user pressed Ctrl-Alt-Del a second time
  6146.             CF clear
  6147.             AX = result
  6148.                 0000h user pressed Esc
  6149.                 0001h user pressed Enter
  6150.         Note:    this function is used by the default Windows
  6151.               Ctrl-Alt-Del handler
  6152.         0204h set/reset protected-mode INT 01 handler
  6153.         CX:EDX -> new protected-mode INT 01 handler
  6154.         CX = 0000h restore protected-mode INT 01 handler
  6155.         Return: CF clear
  6156.         Notes:    if CX is nonzero, the current handler address is saved
  6157.               internally before the new handler is set; this saved
  6158.               address is then used when CX is zero on entry
  6159.             used by Windows' default Ctrl-Alt-Del handler; actual
  6160.               fatal exit to DOS will be done on next INT 01
  6161.         Warning: opened files are not closed and remain open as
  6162.               orphaned files in DOS
  6163. Note:    functions 0201h and 0203h are not useful outside the system VM
  6164. SeeAlso: #2635,#2636
  6165. --------W-2F1684BX000C-----------------------
  6166. INT 2F - MS Windows - VMD - GET DEVICE API ENTRY POINT
  6167.     AX = 1684h
  6168.     BX = 000Ch (virtual device ID for VMD device) (see #1419)
  6169.     ES:DI = 0000h:0000h
  6170. Return: ES:DI -> VxD API entry point
  6171.           0000h:0000h if the VxD does not support an API
  6172. --------W-2F1684BX0015-----------------------
  6173. INT 2F - MS Windows - DOSMGR - GET DEVICE API ENTRY POINT
  6174.     AX = 1684h
  6175.     BX = 0015h (virtual device ID for DOSMGR device) (see #1419)
  6176.     ES:DI = 0000h:0000h
  6177. Return: ES:DI -> VxD API entry point (see #1422,#2647)
  6178.           0000h:0000h if the VxD does not support an API
  6179.  
  6180. (Table 1422)
  6181. Call DOSMGR entry point with:
  6182.     AX = 0000h get DOSMGR version
  6183.         Return: CF clear
  6184.             AX = version (AH = major, AL = minor)
  6185.     AX = 0001h set critical focus
  6186.         Return: CF clear
  6187.     AX = 0002h crash current virtual machine
  6188.         Return: never
  6189.         Note:   displays message box stating that "application has been
  6190.               stopped by the DOSMGR device"
  6191.     AX = 0003h enter critical section
  6192.         Note:   this function assumes that the code for INT 2A/AX=8001h
  6193.               and INT 2A/AX=8002h have been modified for Windows
  6194.     AX = 0004h get VM ID byte
  6195.         Return: CF clear if successful
  6196.             ES:DI -> VM ID byte
  6197.             CF set on error
  6198.         Note:   this function fails if the INT 2A modifications have not
  6199.               yet been applied
  6200.     AX = 0005h inform Windows of possible media change
  6201.         BL = drive number (00h=A:)
  6202.         Return: CF clear if successful
  6203.             CF set on error
  6204. SeeAlso: #2647 at INT 20"Windows"
  6205. --------W-2F1684BX0017-----------------------
  6206. INT 2F U - MS Windows - SHELL - GET DEVICE API ENTRY POINT
  6207.     AX = 1684h
  6208.     BX = 0017h (virtual device ID for SHELL device) (see #1419)
  6209.     ES:DI = 0000h:0000h
  6210. Return: ES:DI -> VxD API entry point (see #1423)
  6211.           0000h:0000h if the VxD does not support an API
  6212. SeeAlso: AX=1684h/BX=0021h
  6213.  
  6214. (Table 1423)
  6215. Call SHELL entry point with:
  6216.     EDX = function number (0000h-0016h, mostly unknown)
  6217.         0000h get version number
  6218.         Return: AX = version number
  6219.             EBX = system VM handle
  6220.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  6221.         Return: CF clear
  6222.             AX bit 0 set if system VM executing exclusively
  6223.             BX = background time slice priority
  6224.             CX = foreground time slice priority
  6225.             SI = minimum time slice in milliseconds
  6226.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  6227.         AX bit 0 set if system VM should execute exclusively (ignored?)
  6228.         BX = background time slice priority (1-10000)
  6229.         CX = foreground time slice priority (1-10000)
  6230.         SI = minimum time slice in milliseconds (1-10000)
  6231.         Return: CF clear if successful
  6232.         0003h "SHELL_Crt_VM" create a virtual machine
  6233.         ES:EDI -> SEB structure (see #1424)
  6234.         Return: CF clear if successful
  6235.                EAX = VM handle
  6236.             CF set on error
  6237.                EDX,EAX = result from GetSetDetailedVMError()
  6238.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  6239.         EBX = VM handle (not system VM)
  6240.         Return: nothing
  6241.         0005h "SHELL_Set_Focus"
  6242.         EBX = VM handle
  6243.         ECX = ???
  6244.         Return: nothing
  6245.         0006h "SHELL_Get_VM_State"
  6246.         EBX = VM handle (not system VM)
  6247.         ES:EDI -> ??? structure
  6248.         Return: CF clear if successful
  6249.         0007h "SHELL_Set_VM_State"
  6250.         EBX = VM handle (not system VM)
  6251.         ES:EDI -> ??? structure
  6252.         0008h "SHELL_Debug_Out"
  6253.         ???
  6254.         Return: ???
  6255.         Note:    dummy function in retail version of MS Windows
  6256.         0009h "SHELL_VMDA_Init"
  6257.         ???
  6258.         Return: ???
  6259.         000Ah "SHELL_VMDA_Exit"
  6260.         ???
  6261.         Return: ???
  6262.         000Bh "SHELL_Get_Message_Txt"
  6263.         ???
  6264.         Return: ???
  6265.         000Ch "SHELL_Event_Complete"
  6266.         ???
  6267.         Return: ???
  6268.         000Dh "SHELL_Get_Contention_Info"
  6269.         ???
  6270.         Return: ???
  6271.         000Eh "SHELL_Get_Clip_Info"
  6272.         ???
  6273.         Return: ???
  6274.         000Fh "SHELL_Set_Paste"
  6275.         ???
  6276.         Return: ???
  6277.         0010h "SHELL_Switcher_Assist"
  6278.         ???
  6279.         Return: ???
  6280.         0011h "SHELL_Get_FileSysChng"
  6281.         ???
  6282.         Return: ???
  6283.         0012h "SHELL_Query_Destroy"
  6284.         ???
  6285.         Return: ???
  6286.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  6287.         ???
  6288.         Return: ???
  6289.         0014h "SHELL_User_Busy_API"
  6290.         ???
  6291.         Return: ???
  6292.         0015h "SHELL_Chng_Hot_Key"
  6293.         ???
  6294.         Return: ???
  6295.         0016h "SHELL_Get_TermInfo"
  6296.         ???
  6297.         Return: ???
  6298. Return: CF set if called from VM other than system VM
  6299.         EAX = FFFFFFFFh
  6300. Note:    except for function 0013h, this API may only be called from the system
  6301.       VM
  6302. SeeAlso: #2655 at INT 20"Windows"
  6303.  
  6304. Format of Shell Execution Block (SEB):
  6305. Offset    Size    Description    (Table 1424)
  6306.  00h    DWORD    PIF flags (see #1425)
  6307.  04h    DWORD    display flags (see #1426)
  6308.  08h    PWORD    -> pathname of .EXE to run
  6309.  0Eh    PWORD    -> argument list
  6310.  14h    PWORD    -> working drive/directory
  6311.  1Ah    WORD    desired number of V86 pages for virtual machine
  6312.  1Ch    WORD    minimum number of V86 pages for VM
  6313.  1Eh    WORD    foreground priority
  6314.  20h    WORD    background priority
  6315.  22h    WORD    maximum KB of EMS
  6316.  24h    WORD    minimum KB of EMS
  6317.  26h    WORD    maximum KB of XMS
  6318.  28h    WORD    minimum KB of XMS
  6319.  2Ah    WORD    ???
  6320.  2Ch    WORD    ???
  6321.  2Eh 128 BYTEs    title
  6322. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  6323.       followed by a WORD selector
  6324.  
  6325. Bitfields for 386 Enhanced Mode PIF flags:
  6326. Bit(s)    Description    (Table 1425)
  6327.  0    exclusive use of processor when VM is fullscreen
  6328.  1    VM runs in background
  6329.  2    VM runs in window
  6330.  3-4    ???
  6331.  5    Alt-Tab reserved
  6332.  6    Alt-Esc reserved
  6333.  7    Alt-Space reserved
  6334.  8    Alt-Enter reserved
  6335.  9    Alt-PrtSc reserved
  6336.  10    PrtSc reserved
  6337.  11    Ctrl-Esc reserved
  6338.  12    VM will release idle time slice
  6339.  13    VM not allowed to use high mem
  6340.  14    unknown
  6341.  15    VM expanded mem not pageable
  6342.  16    VM extended mem not pageable
  6343.  17    Fast paste from clipboard enabled
  6344.  18    VM app memory not pageable
  6345.  30    Close VM when app exits
  6346.  
  6347. Bitfields for SHELL display options:
  6348. Bit(s)    Description    (Table 1426)
  6349.  0    emulate text mode
  6350.  1    monitor text port
  6351.  2    monitor low graphics port
  6352.  3    monitor high graphics port
  6353.  7    Retain video memory
  6354. --------W-2F1684BX0021-----------------------
  6355. INT 2F U - MS Windows - PAGEFILE - GET DEVICE API ENTRY POINT
  6356.     AX = 1684h
  6357.     BX = 0021h (virtual device ID for PAGEFILE device) (see #1419)
  6358.     ES:DI = 0000h:0000h
  6359. Return: ES:DI -> VxD API entry point (see #1427)
  6360.           0000h:0000h if the VxD does not support an API
  6361. SeeAlso: AX=1684h/BX=0017h
  6362.  
  6363. (Table 1427)
  6364. Call PAGEFILE entry point with:
  6365.     AX = function
  6366.         0000h get version
  6367.         Return: CF clear
  6368.             AX = version (AH = major, AL = minor)
  6369.         0001h get swap file info
  6370.         DS:SI -> 128-byte buffer for swap file full pathname
  6371.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  6372.         Return: CF clear
  6373.             AL = pager type (see #1428)
  6374.             AH = flags
  6375.                 bit 7: swap file corrupted
  6376.             ECX = maximum size of swap file
  6377.             DS:SI buffer filled if paging enabled
  6378.             DS:DI buffer filled if permanent swap file
  6379.         0002h delete permanent swap file on exit
  6380.         Return: CF clear
  6381.         0003h get current temporary swap file size
  6382.         Return: CF clear
  6383.             DX:AX = current swap file size in bytes
  6384.                 0000h:0000h if permanent swap file
  6385. Note:    this API is only available in protected mode, and may only be called
  6386.       from the system VM
  6387. SeeAlso: #2656 at INT 20"Windows"
  6388.  
  6389. (Table 1428)
  6390. Values for MS Windows PAGEFILE pager type:
  6391.  00h    paging disabled
  6392.  01h    MSDOS
  6393.  02h    BIOS
  6394.  03h    32-bit disk access
  6395. SeeAlso: #1427
  6396. --------W-2F1684BX0034-----------------------
  6397. INT 2F U - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  6398.     AX = 1684h
  6399.     BX = 0034h (ID for Configuration Manager) (see #1419)
  6400.     ES:DI = 0000h:0000h
  6401. Return: ES:DI -> API entry point (see #1429)
  6402.           0000h:0000h if Configuration Manager not loaded
  6403. Index:    installation check;Plug-and-Play Configuration Manager
  6404.  
  6405. (Table 1429)
  6406. Call Configuration Manager entry point with:
  6407.     AX = function
  6408.         0000h "CM_GetVersion" get supported DDI version
  6409.         Return: AH = major version (01h)
  6410.             AL = minor version (00h)
  6411.             BX = number of devices identified by configuration
  6412.         Note:    returns AX = 0000h if no config manager installed
  6413.         0001h "CM_GetConfig" get device configuration
  6414.         BX = device index
  6415.         ES:DI -> buffer for configuration information (see #1430)
  6416.         Return: AX = status
  6417.                 0000h successful
  6418.                 ES:DI buffer filled
  6419.                 other error code (0001h = index out of range)
  6420.         0002h "CM_LockConfig" lock device configuration
  6421.         ES:DI -> configuration information
  6422.         Return: AX = status
  6423.                 0000h successful
  6424.                 ES:DI buffer filled with assigned config
  6425.                 0001h resources conflict
  6426.                 0002h invalid request or configuration info
  6427.         0003h "CM_UnlockConfig" unlock device configuration
  6428.         ES:DI -> configuration information
  6429.         Return: AX = status
  6430.                 0000h successful
  6431.                 ES:DI buffer filled with assigned config
  6432.                 0001h invalid request or configuration info
  6433.  
  6434. Format of Configuration Information Structure:
  6435. Offset    Size    Description    (Table 1430)
  6436.  00h    DWORD    bus ID
  6437.  04h    DWORD    device ID
  6438.  08h    DWORD    serial number
  6439.  0Ch    DWORD    logical ID
  6440.  10h    DWORD    flags
  6441. ---ISA bus---
  6442.  14h    BYTE    Card Select Number
  6443.  15h    BYTE    logical device number
  6444.  16h    WORD    Read Data port
  6445. ------
  6446.  18h    WORD    number of memory windows
  6447.  1Ah  9 DWORDs    physical base addresses of memory windows
  6448.  3Eh  9 DWORDs    length of memory windows
  6449.  62h  9 WORDs    memory window attributes
  6450.  74h    WORD    number of I/O ports
  6451.  76h 20 WORDs    I/O port base addresses
  6452.  B6h 20 WORDs    lengths of I/O port ranges
  6453.  F6h    WORD    number of IRQs
  6454.  F8h  7 BYTEs    IRQ registers
  6455.  FFh  7 BYTEs    IRQ attributes
  6456. 106h    WORD    number of DMA channels
  6457. 108h  7 BYTEs    DMA channels used
  6458. 10Fh  7 WORDs    DMA channel attributes
  6459. 11Dh  3 BYTEs    reserved
  6460. SeeAlso: #1429
  6461. --------W-2F1684BX0444-----------------------
  6462. INT 2F - MS Windows - VADMAD - GET DEVICE API ENTRY POINT
  6463.     AX = 1684h
  6464.     BX = 0444h (virtual device ID for VADMAD device) (see #1419)
  6465.     ES:DI = 0000h:0000h
  6466. Return: ES:DI -> VxD API entry point (see #1431)
  6467.           0000h:0000h if the VxD does not support an API
  6468.  
  6469. (Table 1431)
  6470. Call VADMAD entry point with:
  6471.     DX = operation
  6472.         0000h set VADMAD mode
  6473.         AX = desired mode
  6474.         0001h set VADMAD channel
  6475.         AX = desired channel
  6476. Note:    after setting mode/channel, start the DMA operation with an OUT to
  6477.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  6478. SeeAlso: #2633 at INT 20"Windows"
  6479. --------W-2F1684BX0750-----------------------
  6480. INT 2F - MS Windows - VSWITCHD - GET DEVICE API ENTRY POINT
  6481.     AX = 1684h
  6482.     BX = 0750h (virtual device ID for VSWITCHD device) (see #1419)
  6483.     ES:DI = 0000h:0000h
  6484. Return: ES:DI -> VxD API entry point (see #1432)
  6485.           0000h:0000h if the VxD does not support an API
  6486.  
  6487. (Table 1432)
  6488. Call VSWITCHD entry point with:
  6489.     AX = function
  6490.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  6491.         Return: nothing
  6492.         0001h get windowed mode
  6493.         Return: CF clear if VM is windowed
  6494.             CF set if VM is full-screen
  6495. --------W-2F1684BX28A0-----------------------
  6496. INT 2F - MS Windows - PHARLAPX - GET DEVICE API ENTRY POINT
  6497.     AX = 1684h
  6498.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #1419)
  6499.     ES:DI = 0000h:0000h
  6500. Return: ES:DI -> VxD API entry point (see #2648)
  6501.           0000h:0000h if the VxD does not support an API
  6502.  
  6503. (Table 2648)
  6504. Call PHARLAPX VxD entry point with:
  6505.     AX = function
  6506.         0001h get PHARLAP.386 version
  6507.         Return: AX = version number (AH = major, AL = minor)
  6508.     ---queue functions---
  6509.         0101h allocate a new message queue
  6510.         CX = size of queue data buffer in bytes
  6511.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  6512.         0102h allocate a new key queue
  6513.         CX = size of queue data buffer in bytes
  6514.         EDX = VM handle into which keys will be pasted
  6515.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  6516.         0103h free message queue
  6517.         EDX = queue handle
  6518.         Return: AX = status (0000h,0003h,0007h) (see #2649)
  6519.         0104h free key queue
  6520.         EDX = queue handle
  6521.         Return: AX = status (0000h,0003h,0005h) (see #2649)
  6522.         0105h add message to communications queue
  6523.         EDX = queue handle
  6524.         BX = length of message data in bytes
  6525.         CX = length of message header in bytes
  6526.         ES:(E)SI -> message header
  6527.         GS:(E)DI -> message data
  6528.         Return: AX = status (0000h-0003h,0007h) (see #2649)
  6529.         0106h remove message from queue
  6530.         EDX = queue handle
  6531.         CX = length of buffer in bytes
  6532.         ES:(E)SI -> buffer for message
  6533.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #2649)
  6534.             CX = length of returned message (if AX=0000h or 0008h)
  6535.         0107h flush queue (remove all data)
  6536.         EDX = queue handle
  6537.         Return: AX = status (0000h,0003h) (see #2649)
  6538.         0108h add PasteKey structure(s) to key queue
  6539.         EDX = queue handle
  6540.         CX = number of PasteKey structures in buffer
  6541.         ES:(E)SI -> PasteKey array (see #2650)
  6542.         Return: AX = status (0000h-0003h) (see #2649)
  6543.         0109h register enqueueing callback function
  6544.         EDX = queue handle
  6545.         ECX = function argument
  6546.         ES:(E)SI -> callback function
  6547.         Return: AX = status (0000h,0003h,0009h) (see #2649)
  6548.         010Ah register dequeueing callback function
  6549.         EDX = queue handle
  6550.         ECX = function argument
  6551.         ES:(E)SI -> callback function
  6552.         Return: AX = status (0000h,0003h,0009h) (see #2649)
  6553.         010Bh unregister enqueueing callback function
  6554.         EDX = queue handle
  6555.         Return: AX = status (0000h,0003h,0009h) (see #2649)
  6556.         010Ch unregister dequeueing callback function
  6557.         EDX = queue handle
  6558.         Return: AX = status (0000h,0003h,0009h) (see #2649)
  6559.         010Dh get message queue status
  6560.         EDX = queue handle
  6561.         Return: AX = status (0000h,0003h) (see #2649)
  6562.             CX = number of pending messages
  6563.         010Eh peek at message in queue
  6564.         EDX = queue handle
  6565.         BX = number of message in queue (0000h = first)
  6566.         CX = size of buffer in bytes
  6567.         ES:(E)SI -> buffer for message
  6568.         Return: AX = status (0000h,0003h,0006h,0008h) (see #2649)
  6569.             CX = length of returned message (if AX=0000h or 0008h)
  6570.         010Fh peek at last message in queue
  6571.         EDX = queue handle
  6572.         CX = size of buffer in bytes
  6573.         ES:(E)SI -> buffer for message
  6574.         Return: AX = status (0000h,0003h,0006h,0008h) (see #2649)
  6575.             CX = length of returned message (if AX=0000h or 0008h)
  6576.         0110h replace last message in queue
  6577.         EDX = queue handle
  6578.         CX = length of message header in bytes
  6579.         BX = length of message data in bytes
  6580.         ES:(E)SI -> message header
  6581.         GS:(E)DI -> message data
  6582.         Return: AX = status (0000h,0002h,0003h) (see #2649)
  6583.         0111h set permitted message count for queue
  6584.         EDX = queue handle
  6585.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  6586.         Return: AX = status (0000h,0003h) (see #2649)
  6587.     ---generalized VxD services---
  6588.         0202h call VxD function
  6589.         ES:(E)BX -> in/out register-set buffer
  6590.         Return: buffer updated
  6591.         0203h map flat
  6592.         ???
  6593.     --system register functions---
  6594.         0301h read system registers into buffer
  6595.         ES:(E)SI -> 512-byte buffer
  6596.         Return: AX = 0000h
  6597.             buffer filled (mostly zeros)
  6598.         0302h copy linear memory into buffer
  6599.         EDX = linear address
  6600.         CX = number of bytes to copy
  6601.         ES:(E)SI -> buffer
  6602.         Return: AX = 0000h
  6603.         0303h copy data into linear memory
  6604.         EDX = linear address
  6605.         CX = number of bytes to copy
  6606.         ES:(E)SI -> buffer
  6607.         Return: AX = 0000h
  6608.         0304h freeze VM
  6609.         ???
  6610.         0305h unfreeze VM
  6611.         ???
  6612.     ---name registration functions---
  6613.         0401h register name
  6614.         EDX = magic number to associate with name
  6615.         ES:(E)SI -> name to register
  6616.         Return: AX = status (0000h,0009h) (see #2649)
  6617.         0402h unregister name
  6618.         ES:(E)SI -> name to be unregistered
  6619.         Return: AX = status (0000h,0009h) (see #2649)
  6620.         0403h look up name
  6621.         ES:(E)SI -> name to look up
  6622.         Return: DX:AX = magic number or 0000h:0000h if not registered
  6623.         0404h get name list handle
  6624.         Return: DX:AX = name list handle
  6625.                 0000h:0000h if not initialized
  6626.     ---special DOS server routines (undocumented)---
  6627.         0501h register
  6628.         0502h unregister
  6629.         0503h validate VM
  6630.         0504h get INT9 count
  6631.         0505h get screen line
  6632.         0506h get shift status
  6633.         0507h get server PB pointer
  6634.         0508h initialize DOS shell
  6635.         0509h get last VM handle
  6636.  
  6637. (Table 2649)
  6638. Values for PHARLAPX function status:
  6639.  00h    successful
  6640.  01h    data is too large to fit in queue
  6641.  02h    queue is full
  6642.  03h    invalid queue handle
  6643.  04h    invalid VM handle for queue
  6644.  05h    error starting a paste operation
  6645.  06h    queue is empty
  6646.  07h    a VM is blocked waiting on the queue
  6647.  08h    message was too long (truncated)
  6648.  09h    unable to register or unregister specified callback
  6649. SeeAlso: #2648
  6650.  
  6651. Format of PHARLAPX PasteKey structure:
  6652. Offset    Size    Description    (Table 2650)
  6653.  00h    BYTE    ASCII code
  6654.  01h    BYTE    scan code
  6655.  02h    WORD    shift states
  6656. SeeAlso: #2648
  6657.  
  6658. Format of PHARLAPX VxD-call register structure:
  6659. Offset    Size    Description    (Table 2651)
  6660.  00h    DWORD    call number
  6661.  04h    WORD    input register map (see #2652)
  6662.  06h    WORD    output register map (see #2652)
  6663.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  6664.  24h  4    WORDs    values for DS, ES, FG, GS on call
  6665.  2Ch    DWORD    EFLAGS on call
  6666.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  6667.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  6668.  54h    DWORD    returned EFLAGS
  6669. SeeAlso: #2648
  6670.  
  6671. Bitfields for PHARLAPX VxD-call register map:
  6672. Bit(s)    Description    (Table 2652)
  6673.  0    value in EAX field is valid
  6674.  1    value in EBX field is valid
  6675.  2    value in ECX field is valid
  6676.  3    value in EDX field is valid
  6677.  4    value in EBP field is valid
  6678.  5    value in ESI field is valid
  6679.  6    value in EDI field is valid
  6680.  7    value in DS field is valid
  6681.  8    value in ES field is valid
  6682.  9    value in FS field is valid
  6683.  10    value in GS field is valid
  6684.  11    value in EFLAGS field is valid
  6685. SeeAlso: #2651
  6686. --------W-2F1684BX2925-----------------------
  6687. INT 2F - MS Windows - EDOS - GET DEVICE API ENTRY POINT
  6688.     AX = 1684h
  6689.     BX = 2925h (virtual device ID for EDOS device) (see #1419)
  6690.     ES:DI = 0000h:0000h
  6691. Return: ES:DI -> VxD API entry point (see #1433)
  6692.           0000h:0000h if the VxD does not support an API
  6693.  
  6694. (Table 1433)
  6695. Call EDOS entry point with:
  6696.     AX = 0000h get EDOS version number
  6697.         Return: AH = major version
  6698.             AL = minor version
  6699.     AX = 0001h display message
  6700.         CX = 0
  6701.         DX:BX -> ASCIZ Message
  6702.     AX = 0002h get EDOS error coded
  6703.         Return: EAX = time in milliseconds that Windows has been running
  6704.     AX = 0003h execute windows program
  6705.         Return: EAX = cumulative amount of time the virtual machine has
  6706.             been active, in milliseconds
  6707.     AX = 0008h get/set priority
  6708.         BX = 0000h??? foreground
  6709.          0001h background
  6710.         DI = 0000h get
  6711.          0001h set
  6712.         DX = priority setting
  6713.         Return: CX = foreground priority
  6714.             DX = background priority
  6715.             BX:AX = flags
  6716.             00000001h exclusive ON
  6717.             00000010h background ON
  6718.             SI = CPU percentage
  6719. --------W-2F1684BX310E-----------------------
  6720. INT 2F - MS Windows - WPS - GET DEVICE API ENTRY POINT
  6721.     AX = 1684h
  6722.     BX = 310Eh (virtual device ID for WPS device) (see #1419)
  6723.     ES:DI = 0000h:0000h
  6724. Return: ES:DI -> VxD API entry point (see #1434)
  6725.           0000h:0000h if the VxD does not support an API
  6726.  
  6727. (Table 1434)
  6728. Call WPS protected-mode entry point with:
  6729.     DX = function
  6730.         0000h get WPS.386 version
  6731.         Return: CF clear
  6732.             AX = version (AH = major, AL = minor)
  6733.         0001h get number of installed VxDs
  6734.         Return: CF clear
  6735.             AX = number of installed VxDs
  6736.         0002h get VxD characteristics
  6737.         AX = number of VxD
  6738.         ES:BX -> buffer for VxD characteristics structure (see #1435)
  6739.         Return: CF clear
  6740.             ES:BX buffer filled
  6741.  
  6742. Format of WPS.386 VxD characteristics structure:
  6743. Offset    Size    Description    (Table 1435)
  6744.  00h    WORD    VxD ID number
  6745.  02h    BYTE    VxD minor version
  6746.  03h    BYTE    VxD major version
  6747.  04h    BYTE    DDK minor version
  6748.  05h    BYTE    DDK major version
  6749.  06h    WORD    flags
  6750.         bit 0: V86 API supported
  6751.         bit 1: PM API supported
  6752.         bit 2: services supported
  6753.  08h    DWORD    start order
  6754.  0Ch  9 BYTEs    ASCIZ VxD name
  6755. --------W-2F1684BX8888-----------------------
  6756. INT 2F - MS Windows - POSTMSG - GET DEVICE API ENTRY POINT
  6757.     AX = 1684h
  6758.     BX = 8888h (virtual device ID for POSTMSG device) (see #1419)
  6759.     ES:DI = 0000h:0000h
  6760. Return: ES:DI -> VxD API entry point (see #1436,#1438)
  6761.           0000h:0000h if the VxD does not support an API
  6762.  
  6763. (Table 1436)
  6764. Call POSTMSG protected-mode entry point with:
  6765.     AX = window handle
  6766.     CX:BX -> callback procedure (see #1437)
  6767. Return: nothing
  6768. Note:    this call registers a WinApp with the VxD; the callback must be in a
  6769.       fixed, non-discardable code segment
  6770. SeeAlso: #1438
  6771.  
  6772. (Table 1437)
  6773. Values POSTMSG callback routine is called with:
  6774.     STACK:    DWORD    "lParam" parameter from DOSApp
  6775.         WORD    "wParam" parameter from DOSApp
  6776.         WORD    Windows message number (WM_USER + 100)
  6777.         DWORD    registered hwnd
  6778.  
  6779. (Table 1438)
  6780. Call POSTMSG V86-mode entry point with:
  6781.     BX = wParam value to pass to protected-mode callback
  6782.     DX:AX = lParam value to pass to protected-mode callback
  6783. Return: CF clear if successful
  6784.     CF set on error (no WinApp registered)
  6785. SeeAlso: #1436
  6786. --------W-2F1684BX8888-----------------------
  6787. INT 2F - MS Windows - VbillD - GET DEVICE API ENTRY POINT
  6788.     AX = 1684h
  6789.     BX = 8888h (virtual device ID for VbillD device) (see #1419)
  6790.     ES:DI = 0000h:0000h
  6791. Return: ES:DI -> VxD API entry point (see #1439)
  6792.           0000h:0000h if the VxD does not support an API
  6793.  
  6794. (Table 1439)
  6795. Call VbillD entry point with:
  6796.     AX = function
  6797.         0001h set reverse video
  6798.         0002h set normal video
  6799. Return: ???
  6800. --------W-2F1685-----------------------------
  6801. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  6802.     AX = 1685h
  6803.     BX = VM ID of virtual machine to switch to
  6804.     CX = flags (see #1440)
  6805.     DX:SI = priority boost (see VMM.INC)
  6806.     ES:DI -> FAR procedure to callback
  6807. Return: CF set on error
  6808.         AX = error code
  6809.         01h invalid VM ID
  6810.         02h invalid priority boost
  6811.         03h invalid flags
  6812.     CF clear if successful
  6813.         event will be or has been called
  6814. Notes:    some DOS devices, such as networks, need to call functions in a
  6815.       specific VM. This call forces the appropriate VM to be installed.
  6816.     the callback procedure must preserve all registers and return with IRET
  6817. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  6818.  
  6819. Bitfields for VM switching flags:
  6820. Bit(s)    Description    (Table 1440)
  6821.  0    wait until interrupts enabled
  6822.  1    wait until critical section unowned
  6823.  2-15    reserved (zero)
  6824. --------E-2F1686-----------------------------
  6825. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  6826.     AX = 1686h
  6827. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  6828.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  6829. SeeAlso: AX=1687h
  6830. --------E-2F1687-----------------------------
  6831. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  6832.     AX = 1687h
  6833. Return: AX = 0000h if installed
  6834.         BX = flags
  6835.         bit 0: 32-bit programs supported
  6836.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  6837.         DH = DPMI major version
  6838.         DL = two-digit DPMI minor version (binary)
  6839.         SI = number of paragraphs of DOS extender private data
  6840.         ES:DI -> DPMI mode-switch entry point (see #1441)
  6841.     AX nonzero if not installed
  6842. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  6843. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  6844.  
  6845. (Table 1441)
  6846. Call DPMI mode switch entry point with:
  6847.     AX = flags
  6848.         bit 0: set if 32-bit program
  6849.     ES = real mode segment of buffer for DPMI private data (ignored if
  6850.         SI was zero)
  6851. Return: CF set on error
  6852.         program still in real mode
  6853.         AX = error code (DPMI 1.0+)
  6854.            8011h unable to allocate all necessary descriptors
  6855.            8021h 32-bit program specified, but 16-bit DPMI host
  6856.     CF clear if successful
  6857.         CS = 16-bit selector corresponding to real-mode CS
  6858.         SS = selector corresponding to real-mode SS (64K limit)
  6859.         DS = selector corresponding to real-mode DS (64K limit)
  6860.         ES = selector to program's PSP (100h byte limit)
  6861.         FS = GS = 0
  6862.         high word of ESP = 0 if 32-bit program
  6863.         program now in protected mode
  6864. Note:    this entry point is only called for the initial switch to protected
  6865.       mode
  6866. --------W-2F1688BX0BAD-----------------------
  6867. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  6868.     AX = 1688h
  6869.     BX = 0BADh
  6870. Return: AX = 0000h if supported
  6871.         BX = alias selector for LDT
  6872. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  6873.     this call should be considered obsolete for Windows 3.1+, as the
  6874.       alias selector can be retrieved via the API entry point for
  6875.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #1443)
  6876. --------W-2F1689-----------------------------
  6877. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  6878.     AX = 1689h
  6879.     ???
  6880. Return: ???
  6881. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  6882. --------E-2F168A-----------------------------
  6883. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  6884.     AX = 168Ah
  6885.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #1442)
  6886. Return: AL = status
  6887.         00h successful
  6888.            ES:(E)DI -> extended API entry point
  6889.         8Ah unsuccessful
  6890. Notes:    the vendor name is used to determine which entry point to return; it is
  6891.       case-sensitive
  6892.     available in protected mode only
  6893.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  6894.     this call is present but not documented for DPMI 0.9
  6895.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  6896.       other than the MS-DOS one gracefully, producing an unhandled
  6897.       exception report; this has been fixed in the Borland Pascal 7 version
  6898. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  6899.  
  6900. (Table 1442)
  6901. Values for DPMI vendor-specific API names:
  6902.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #1443)
  6903.  "386MAX"    386MAX v6.00+
  6904.  "HELIX_DPMI"    Helix Netroom's DPMI server
  6905.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #1444)
  6906.  
  6907. (Table 1443)
  6908. Call Windows-support ("MS-DOS") entry point with:
  6909.     AX = 0100h get LDT alias selector
  6910. Return: CF clear if successful
  6911.         AX = alias selector
  6912.     CF set on error
  6913.  
  6914. (Table 1444)
  6915. Call Phar Lap RUN286 entry point with:
  6916.     AX = 0000h (function "load MSW")
  6917.     BX = new value for MSW register (low word of CR0)
  6918. Return: ???
  6919. --------W-2F168B-----------------------------
  6920. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  6921.     AX = 168Bh
  6922.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  6923. Return: AL = 00h if focus set to specified VM
  6924. Notes:    documented on the Microsoft Developer's Network CD-ROM
  6925.     if the VM is a windowed DOS box, it will be set to full screen
  6926. SeeAlso: AX=1683h
  6927. --------W-2F168C-----------------------------
  6928. INT 2F - MS Windows 3.1 - RESTART COMMAND
  6929.     AX = 168Ch
  6930.     ???
  6931. Return: ???
  6932. Note:    WIN.COM executes specified application
  6933. --------W-2F1700-----------------------------
  6934. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  6935.     AX = 1700h
  6936. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  6937.     AX <> 1700h
  6938.         AL = WINOLDAP major version
  6939.         AH = WINOLDAP minor version
  6940. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  6941.       "old" (character-mode) application access to Dynamic Data Exchange,
  6942.       menus, and the Windows clipboard.
  6943. Note:    this installation check DOES NOT follow the format used by other
  6944.       software of returning AL=FFh
  6945. SeeAlso: AX=1701h,AX=4601h
  6946. Index:    installation check;WINOLDAP
  6947. --------W-2F1701-----------------------------
  6948. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  6949.     AX = 1701h
  6950. Return: AX = status
  6951.         nonzero success
  6952.         0000h   clipboard is already open
  6953. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h,INT 16/AX=CB00h
  6954. --------W-2F1702-----------------------------
  6955. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  6956.     AX = 1702h
  6957. Return: AX = status
  6958.         nonzero clipboard has been emptied
  6959.         0000h   failure
  6960. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h,INT 16/AX=CB05h
  6961. --------W-2F1703-----------------------------
  6962. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  6963.     AX = 1703h
  6964.     DX = clipboard format supported by WinOldAp (see #1445)
  6965.     ES:BX -> data (see #1446,#1447)
  6966.     SI:CX = size of data
  6967. Return: AX = status
  6968.         nonzero data copied into the Clipboard
  6969.         0000h   failure
  6970. SeeAlso: AX=1701h,AX=1705h,INT 16/AX=CB04h
  6971.  
  6972. (Table 1445)
  6973. Values for WinOldAp clipboard format:
  6974.  01h    text
  6975.  02h    bitmap
  6976.  03h    metafile picture
  6977.  04h    SYLK
  6978.  05h    DIF
  6979.  06h    TIFF
  6980.  07h    OEM text
  6981.  08h    DIB bitmap
  6982.  80h    special format (used by Windows WRITE, maybe other Windows applets???)
  6983.  81h    DSP text
  6984.  82h    DSP bitmap
  6985.  
  6986. Format of Windows Clipboard bitmap:
  6987. Offset    Size    Description    (Table 1446)
  6988.  00h    WORD    type (0000h)
  6989.  02h    WORD    width of bitmap in pixels
  6990.  04h    WORD    height of bitmap in pixels
  6991.  06h    WORD    bytes per line
  6992.  08h    BYTE    number of color planes
  6993.  09h    BYTE    number of adjacent color bits in pixel
  6994.  0Ah    DWORD    pointer to start of data
  6995.  0Eh    WORD    width in 0.1mm units
  6996.  10h    WORD    height in 0.1mm units
  6997.  12h  N BYTEs    bitmap data
  6998.  
  6999. Format of Windows metafile picture:
  7000. Offset    Size    Description    (Table 1447)
  7001.  00h    WORD    mapping mode
  7002.  02h    WORD    X extent
  7003.  04h    WORD    Y extent
  7004.  06h    WORD    picture data
  7005. --------W-2F1704-----------------------------
  7006. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  7007.     AX = 1704h
  7008.     DX = clipboard format supported by WinOldAp (see #1445)
  7009. Return:    DX:AX = size of data in bytes, including any headers
  7010.         0000h:0000h if no data in this format in the Clipboard
  7011. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  7012.       bytes
  7013. SeeAlso: AX=1700h,AX=1703h,AX=1705h
  7014. --------W-2F1705-----------------------------
  7015. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  7016.     AX = 1705h
  7017.     DX = clipboard format supported by WinOldAp (see #1445)
  7018.     ES:BX -> buffer
  7019. Return: AX = status
  7020.         nonzero success
  7021.         0000h   error, or no data in this format in Clipboard
  7022. SeeAlso: AX=1700h,AX=1704h,INT 16/AX=CB03h
  7023. --------W-2F1708-----------------------------
  7024. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  7025.     AX = 1708h
  7026. Return: AX = status
  7027.         0000h failure
  7028.         nonzero success
  7029. --------W-2F1709-----------------------------
  7030. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  7031.     AX = 1709h
  7032.     SI:CX = desired size in bytes
  7033. Return: DX:AX = number of bytes in largest block of free memory
  7034. Note:    WinOldAp is responsible for including the size of any headers
  7035. --------W-2F170A-----------------------------
  7036. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  7037.     AX = 170Ah
  7038.     DX = GDI information index (see #1448)
  7039. Return: AX = integer value of the desired item
  7040.           (see #1449,#1450,#1451,#1452,#1453,#1454,#1455)
  7041. Note:    This function returns the device-capability bits for the given display
  7042.  
  7043. (Table 1448)
  7044. Values for GDI information index:
  7045.  00h    device driver version
  7046.  02h    device classification
  7047.  04h    width in mm
  7048.  06h    height in mm
  7049.  08h    width in pixels
  7050.  0Ah    height in pixels
  7051.  0Ch    bits per pixel
  7052.  0Eh    number of bit planes
  7053.  10h    number of brushes supported by device
  7054.  12h    number of pens supported by device
  7055.  14h    number of markers supported by device
  7056.  16h    number of fonts supported by device
  7057.  18h    number of colors
  7058.  1Ah    size required for device descriptor
  7059.  1Ch    curve capabilities
  7060.  1Eh    line capabilities
  7061.  20h    polygon capabilities
  7062.  22h    text capabilities
  7063.  24h    clipping capabilities
  7064.  26h    bitblt capabilities
  7065.  28h    X aspect
  7066.  2Ah    Y aspect
  7067.  2Ch    length of hypotenuse of aspect
  7068.  58h    logical pixels per inch of width
  7069.  5Ah    logical pixels per inch of height
  7070. SeeAlso: #1449,#1450,#1451,#1452,#1453,#1454,#1455
  7071.  
  7072. (Table 1449)
  7073. Values for device classification:
  7074.  00h    vector plotter
  7075.  01h    raster display
  7076.  02h    raster printer
  7077.  03h    raster camera
  7078.  04h    character-stream, PLP
  7079.  05h    Metafile, VDM
  7080.  06h    display-file
  7081. SeeAlso: #1448,#1450,#1451,#1452,#1453,#1454,#1455
  7082.  
  7083. Bitfields for curve capabilities:
  7084. Bit(s)    Description    (Table 1450)
  7085.  0    circles
  7086.  1    pie wedges
  7087.  2    chord arcs
  7088.  3    ellipses
  7089.  4    wide lines
  7090.  5    styled lines
  7091.  6    wide styled lines
  7092.  7    interiors
  7093. SeeAlso: #1448,#1449,#1451,#1452,#1453,#1454,#1455
  7094.  
  7095. Bitfields for line capabilities:
  7096. Bit(s)    Description    (Table 1451)
  7097.  1    polylines
  7098.  2    markers
  7099.  3    polymarkers
  7100.  4    wide lines
  7101.  5    styled lines
  7102.  6    wide styled lines
  7103.  7    interiors
  7104. SeeAlso: #1448,#1449,#1450,#1452,#1453,#1454,#1455
  7105.  
  7106. Bitfields for polygon capabilities:
  7107. Bit(s)    Description    (Table 1452)
  7108.  0    polygons
  7109.  1    rectangles
  7110.  2    trapezoids
  7111.  3    scanlines
  7112.  4    wide borders
  7113.  5    styled borders
  7114.  6    wide styled borders
  7115.  7    interiors
  7116. SeeAlso: #1448,#1449,#1450,#1451,#1453,#1454,#1455
  7117.  
  7118. Bitfields for text capabilities:
  7119. Bit(s)    Description    (Table 1453)
  7120.  0    output precision character
  7121.  1    output precision stroke
  7122.  2    clippping precision stroke
  7123.  3    90-degree character rotation
  7124.  4    arbitrary character rotation
  7125.  5    independent X and Y scaling
  7126.  6    double-size
  7127.  7    integer scaling
  7128.  8    continuous scaling
  7129.  9    bold
  7130.  10    italic
  7131.  11    underline
  7132.  12    strikeout
  7133.  13    raster fonts
  7134.  14    vector fonts
  7135.  15    reserved
  7136. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1454,#1455
  7137.  
  7138. (Table 1454)
  7139. Values for clipping capabilities:
  7140.  00h    none
  7141.  01h    clipping to rectangles
  7142. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1455
  7143.  
  7144. Bitfields for raster capabilities:
  7145. Bit(s)    Description    (Table 1455)
  7146.  0    simple bitBLT
  7147.  1    device requires banding support
  7148.  2    device requires scaling support
  7149.  3    supports >64K bitmap
  7150. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1454
  7151. ----------2F18-------------------------------
  7152. INT 2F U - MS-Manager
  7153.     AH = 18h
  7154.     ???
  7155. Return: ???
  7156. --------l-2F1900-----------------------------
  7157. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  7158.     AX = 1900h
  7159. Return: AL = status
  7160.         00h not installed
  7161.         FFh installed
  7162. --------l-2F1901-----------------------------
  7163. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  7164.     AX = 1901h
  7165.     BL = SHELLC type
  7166.         00h transient
  7167.         01h resident
  7168.     DS:DX -> far call entry point for resident SHELLC.EXE
  7169. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  7170. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  7171. --------l-2F1902-----------------------------
  7172. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  7173.     AX = 1902h
  7174.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  7175.           final filename element uppercased
  7176.     DS:DX -> buffer for results
  7177. Return: AL = 00h  failed, either
  7178.         (a) final filename element quoted at ES:DI does not match
  7179.               identity of shell batch file quoted as parameter of most
  7180.               recent call of SHELLB command, or
  7181.         (b) no more Program Start Commands available.
  7182.     AL= FFh     success, then:
  7183.         memory at DS:[DX+1] onwards filled as:
  7184.         DX+1:    BYTE    count of bytes of PSC
  7185.         DX+2: N BYTEs    Program Start Command text
  7186.             BYTE    0Dh terminator
  7187. Desc:    COMMAND.COM executes the result of this call in preference to
  7188.       reading a command from a batch file.    Thus the batch file does not
  7189.       advance in execution for so long as SHELLB provides PSCs from its
  7190.       workspace.
  7191. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  7192.       menu interface.  The final PSC of a sequence is finished with a
  7193.       GOTO COMMON, which causes a loop back in the batch file which called
  7194.       SHELLC so as to execute SHELLC again.     The check on batch file name
  7195.       permits PSCs to CALL nested batch files while PSCs are still stacked
  7196.       up for subsequent execution.
  7197. --------l-2F1903-----------------------------
  7198. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  7199.     AX = 1903h
  7200.     ES:DI -> ASCIZ batch file name as for AX=1902h
  7201. Return: AL = status
  7202.         FFh quoted batch file name matches last SHELLB parameter
  7203.         00h it does not
  7204. --------l-2F1904-----------------------------
  7205. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  7206.     AX = 1904h
  7207. Return: ES:DI -> name of current shell batch file:
  7208.         WORD    number of bytes of name following
  7209.         BYTEs    (8 max) uppercase name of shell batch file
  7210. --------V-2F1A00-----------------------------
  7211. INT 2F - DOS 4.0+ ANSI.SYS - INSTALLATION CHECK
  7212.     AX = 1A00h
  7213. Return: AL = FFh if installed
  7214. Notes:    AVATAR.SYS also responds to this call
  7215.     documented for DOS 5+, but undocumented for DOS 4.x
  7216. --------V-2F1A00BX414E-----------------------
  7217. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  7218.     AX = 1A00h
  7219.     BX = 414Eh ('AN')
  7220.     CX = 5349h ('SI')
  7221.     DX = 2B2Bh ('++')
  7222. Return: AL = FFh if installed
  7223.         CF clear
  7224.         ES:BX -> INT 29 entry point
  7225.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  7226.         DL = capabilities (v4.00+)
  7227.         00h full capability driver
  7228.         01h reduced capability driver
  7229.         2Bh full capability driver (before v4.00)
  7230. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  7231.       replaces the normal ANSI.SYS is a more powerful version with many
  7232.       additional features
  7233. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  7234.       from the magic values above
  7235.     an additional installation check is to test for the signature
  7236.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  7237.       number is also available as a four-character ASCII string (e.g.
  7238.       "4.00") four bytes before the entry point
  7239. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  7240. --------V-2F1A00BX4156-----------------------
  7241. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  7242.     AX = 1A00h
  7243.     BX = 4156h ('AV')
  7244.     CX = 4154h ('AT')
  7245.     DX = 4152h ('AR')
  7246. Return: AL = FFh if installed
  7247.         CF clear
  7248.         BX = AVATAR protocol level supported
  7249.         CX = driver type
  7250.         0000h AVATAR.SYS
  7251.         4456h DVAVATAR.COM inside DESQview window
  7252.         DX = 0016h
  7253. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  7254.       interprets AVATAR command codes in the same way that ANSI interprets
  7255.       ANSI command codes
  7256. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  7257.       the magic values
  7258. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  7259. --------V-2F1A01-----------------------------
  7260. INT 2F U - DOS 4.0+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  7261.     AX = 1A01h
  7262.     CL = function
  7263.         7Fh for GET
  7264.         5Fh for SET
  7265.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  7266. Return:    CF clear if successful
  7267.         AX destroyed
  7268.     CF set on error
  7269.         AX = error code (many non-standard)
  7270. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  7271. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  7272. --------V-2F1A02-----------------------------
  7273. INT 2F U - DOS 4.0+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  7274.     AX = 1A02h
  7275.     DS:DX -> parameter block (see #1456)
  7276. Return: CF clear if successful
  7277.     CF set on error
  7278.         AX = error code
  7279. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  7280. SeeAlso: AX=1A01h
  7281.  
  7282. Format of ANSI.SYS parameter block:
  7283. Offset    Size    Description    (Table 1456)
  7284.  00h    BYTE    subfunction
  7285.         00h set/reset interlock
  7286.         01h get /L flag
  7287.  01h    BYTE    interlock state
  7288.         00h=reset, 01h=set
  7289.           This interlock prevents some of the ANSI.SYS post-processing
  7290.           in its hook onto INT 10, AH=00h mode set
  7291.  02h    BYTE    (returned)
  7292.         00h if /L not in effect
  7293.         01h if /L in effect
  7294. --------V-2F1A21-----------------------------
  7295. INT 2F - AVATAR.SYS - SET DRIVER STATE
  7296.     AX = 1A21h (AL='!')
  7297.     DS:SI -> command string with one or more state characters (see #1457)
  7298.     CX = length of command string
  7299. Return: CF set on error (invalid subfunction)
  7300.     CF clear if successful
  7301. Note:    the characters in the state string are interpreted left to right, and
  7302.       need not be in any particular order
  7303. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  7304.  
  7305. (Table 1457)
  7306. Values for AVATAR.SYS state characters:
  7307.  'a'    activate driver
  7308.  'd'    disable driver
  7309.  'f'    use fast screen output
  7310.  'g'    always convert gray keys (+ and -) to function keys
  7311.  'G'    never convert gray keys
  7312.  'l'    convert gray keys only when ScrollLock active
  7313.  's'    use slow screen output
  7314.  't'    Tandy 1000 keyboard (not yet implemented)
  7315. --------V-2F1A3C-----------------------------
  7316. INT 2F U - AVATAR.SYS v0.11 - ???
  7317.     AX = 1A3Ch
  7318.     ???
  7319. Return: CX = 0000h
  7320. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  7321. --------V-2F1A3E-----------------------------
  7322. INT 2F U - AVATAR.SYS v0.11 - ???
  7323.     AX = 1A3Eh
  7324.     CL = ???
  7325.     CH = ???
  7326.     DL = ???
  7327.     DH = ???
  7328. Return: CL = ???
  7329.     CH = ???
  7330.     DL = ???
  7331.     DH = ???
  7332. SeeAlso: AX=1A3Ch,AX=1A3Fh
  7333. --------V-2F1A3F-----------------------------
  7334. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  7335.     AX = 1A3Fh (AL='?')
  7336.     ES:DI -> buffer
  7337.     CX = length of buffer in bytes
  7338. Return: CF clear
  7339.     CX = actual size of returned info
  7340. Note:    the returned information consists of multiple letters whose meanings
  7341.       are described under AX=1A21h
  7342. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  7343. --------S-2F1A42BX4156-----------------------
  7344. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  7345.     AX = 1A42h
  7346.     BX = 4156h ('AV')
  7347.     ES:DI -> FAR handler for serial port using IRQ3
  7348.     DS = data segment needed by handler
  7349. Return: AX = status/return value
  7350.         0000h if no more room
  7351.         1A42h if ASD not installed
  7352.         else handle to use when uninstalling
  7353. Notes:    the handler need not save/restore registers or signal EOI to the
  7354.       interrupt controller
  7355.     the handler should return AX=0000h if the interrupt was meant for it,
  7356.       and either leave AX unchanged or return a non-zero value otherwise
  7357.     the most recently installed handler will be called first, continuing
  7358.       to earlier handlers until one returns AX=0000h
  7359. SeeAlso: AX=1A43h,AX=1A62h
  7360. --------S-2F1A43BX4156-----------------------
  7361. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  7362.     AX = 1A43h
  7363.     BX = 4156h ('AV')
  7364.     ES:DI -> FAR handler for serial port using IRQ4
  7365.     DS = data segment needed by handler
  7366. Return: AX = status/return value
  7367.         0000h if no more room
  7368.         1A43h if ASD not installed
  7369.         else handle to use when uninstalling
  7370. Notes:    (see AX=1A42h)
  7371. SeeAlso: AX=1A42h,AX=1A63h
  7372. --------V-2F1A44BX4156-----------------------
  7373. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  7374.     AX = 1A44h
  7375.     BX = 4156h ('AV')
  7376. Return: AX = 0000h
  7377.     DS = data segment
  7378.     CX = size of data segment
  7379. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  7380.       process under a multitasker hooks this function and provides a
  7381.       separate data segment, AVATAR.SYS becomes fully reentrant.
  7382. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  7383. --------V-2F1A52-----------------------------
  7384. INT 2F U - AVATAR.SYS v0.11 - GET ???
  7385.     AX = 1A52h
  7386.     CX = size of buffer
  7387.     ES:DI -> buffer
  7388. Return: ??? copied into user buffer
  7389. Note:    the maximum size of the data which may be copied is returned by
  7390.       AX=1A72h
  7391. SeeAlso: AX=1A53h,AX=1A72h
  7392. --------V-2F1A53-----------------------------
  7393. INT 2F U - AVATAR.SYS v0.11 - ???
  7394.     AX = 1A53h
  7395.     CL = ??? (00h-05h)
  7396.     ???
  7397. Return: ???
  7398. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  7399. --------S-2F1A62BX4156-----------------------
  7400. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  7401.     AX = 1A62h
  7402.     BX = 4156h ('AV')
  7403.     CX = handle for IRQ routine returned by AX=1A42h
  7404. SeeAlso: AX=1A42h,AX=1A63h
  7405. --------S-2F1A63BX4156-----------------------
  7406. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  7407.     AX = 1A63h
  7408.     BX = 4156h ('AV')
  7409.     CX = handle for IRQ routine returned by AX=1A43h
  7410. SeeAlso: AX=1A43h,AX=1A62h
  7411. --------V-2F1A72-----------------------------
  7412. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  7413.     AX = 1A72h
  7414. Return: CX = maximum size of ???
  7415. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  7416. --------V-2F1A7B-----------------------------
  7417. INT 2F U - AVATAR.SYS v0.11 - ???
  7418.     AX = 1A7Bh
  7419. Return: AX = 0000h
  7420.     CX = 0000h
  7421. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  7422. --------V-2F1A7D-----------------------------
  7423. INT 2F U - AVATAR.SYS v0.11 - ???
  7424.     AX = 1A7Dh
  7425. Return: AX = ???
  7426. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  7427. --------V-2F1AA5-----------------------------
  7428. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  7429.     AX = 1AA5h
  7430.     DH = subfunction
  7431.         00h get clipboard information
  7432.         01h get clipboard text
  7433.         02h set clipboard text
  7434.         03h append text to clipboard
  7435.         04h clear clipboard
  7436.         05h paste clipboard to keyboard
  7437.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  7438.     CX = size of data area (maximum size for subfunction 01h, actual size
  7439.         to add to clipboard for subfunctions 02h and 03h)
  7440. Return: AL = status
  7441.         00h successful
  7442.         01h unsupported subfunction (reduced capability driver)
  7443.         02h insufficient space
  7444.         A5h unsupported function (ANSIPLUS before v4.00)
  7445.     ES:BX -> ANSIPLUS local clipboard data
  7446.     CX = number of bytes currently in local clipboard
  7447.     DX = maximum size of local clipboard
  7448. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA6h
  7449. --------V-2F1AA6-----------------------------
  7450. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  7451.     AX = 1AA6h
  7452.     BH = function
  7453.         00h get hooked interrupts
  7454.         01h set hooked interrupts mask
  7455.         BL = new interrupts mask (see #1458)
  7456. Return: BL = previous interrupts mask (see #1458)
  7457. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  7458.  
  7459. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  7460.       copy is installed, such as in a multitasking system like DESQview
  7461. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  7462.       chain responds to this call
  7463.  
  7464. Bitfields for ANSIPLUS hooked interrupts mask:
  7465. Bit(s)    Description    (Table 1458)
  7466.  0    INT 09 hook disabled
  7467.  1    INT 10 hook disabled
  7468.  2    INT 15 hook disabled
  7469.  3    INT 16 hook disabled
  7470.  4    INT 1C hook disabled
  7471.  5    reset all bits when INT 29 called
  7472.  6    INT 29 hook disabled
  7473.  7    INT 33, INT 74, or other mouse event hook disabled
  7474. --------V-2F1AA7-----------------------------
  7475. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  7476.     AX = 1AA7h
  7477.     BL = function
  7478.         00h prevent scroll-back saves
  7479.         01h enable scroll-back saves
  7480.         02h disable key reprogramming and lock changes by escape sequences
  7481.         03h enable key reprogramming by escape sequences
  7482.         04h    disable and lock key stacking changes by escape sequences
  7483.         05h allow key stacking by escape sequences
  7484. Return: nothing
  7485. SeeAlso: AX=1AA6h
  7486. --------V-2F1AA8-----------------------------
  7487. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  7488.     AX = 1AA8h
  7489. Return: AL = status
  7490.         00h successful
  7491.         ES:BX -> screen line (character and attribute pairs)
  7492.         CX = length of line in bytes, 0000h if no more lines or
  7493.               unsupported video mode
  7494.         01h unsupported video mode active
  7495.         02h screen currently scrolled back
  7496.         03h reduced capability driver
  7497.         A8h unsupported function (driver before v3.10)
  7498. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  7499. --------V-2F1AA9-----------------------------
  7500. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  7501.     AX = 1AA9h
  7502. Return: AL = status
  7503.         00h successful
  7504.         BX = current number of lines in scrollback buffer
  7505.         CX = number of bytes in one line
  7506.         01h unsupported video mode active
  7507.         02h screen currently scrolled back
  7508.         03h reduced capability driver
  7509.         A9h unsupported function (driver before v3.10)
  7510. Desc:    determine how much data is in the scrollback buffer and initialize
  7511.       scrollback retrieval to return the first line on the next call to
  7512.       AX=1AA8h
  7513. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  7514. --------V-2F1AAA-----------------------------
  7515. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  7516.     AX = 1AAAh
  7517.     BX = function
  7518.         FFFFh to get current blanking time
  7519.         other to set time
  7520.         CX = blanking time in clock ticks (0000h-7FFFh)
  7521. Return: BX = current blanking time
  7522.     CX = blanking time when last set
  7523. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  7524. --------V-2F1AAB-----------------------------
  7525. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  7526.     AX = 1AABh
  7527.     BX = repeat rate in characters per second
  7528.         0000h use BIOS repeat rate
  7529. Return: nothing
  7530. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  7531. --------V-2F1AAC-----------------------------
  7532. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  7533.     AX = 1AACh
  7534.     BH = number of bytes per character pattern
  7535.     BL = VGA/EGA character table to be loaded
  7536.     CX = number of characters to load
  7537.     DX = starting character code (offset into Map2 block)
  7538.     ES:BP -> user character table to be loaded
  7539. Return: AX = 1100h
  7540. Desc:    load the EGA/VGA character generator without the BIOS function's
  7541.       side effects of resetting the video mode and color palette
  7542. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  7543. --------V-2F1AAD-----------------------------
  7544. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  7545.     AX = 1AADh
  7546.     BL = report request code (81h-96h for v4.00)
  7547.     CX = color selector or key code, if required by request
  7548. Return: AX = first reported result
  7549.     BX = second result
  7550.     CX = third result, if applicable (unchanged otherwise)
  7551.     DX = fourth result, if applicable (unchanged otherwise)
  7552. Desc:    get device status reports equivalent to those for Esc [#n sequences
  7553.       while bypassing any device redirection and avoiding the need to
  7554.       parse the returned result
  7555. Note:    the report request code in BL is identical to the number in the
  7556.       corresponding Esc [#n sequence
  7557. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  7558. --------V-2F1AADDX0000-----------------------
  7559. INT 2F U - AVATAR.SYS v0.11 - ???
  7560.     AX = 1AADh
  7561.     DX = 0000h
  7562.     CX = subfunction (00h-0Ch)
  7563.     ???
  7564. Return: AX = 0000h if DX was nonzero
  7565.     ???
  7566. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  7567. --------V-2F1AAC-----------------------------
  7568. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  7569.     AX = 1AACh
  7570. --------m-2F1B00-----------------------------
  7571. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  7572.     AX = 1B00h
  7573. Return: AL = FFh if installed
  7574. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  7575.     This extension hooks onto INT 67/AH=58h and returns from that call data
  7576.       which excludes the physical pages being used by DOS.
  7577. SeeAlso: AH=1Bh"FRAME INFO"
  7578. --------m-2F1B-------------------------------
  7579. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  7580.     AH = 1Bh
  7581.     AL <> 00h
  7582.     DI = hidden physical page number
  7583. Return: AX = FFFFh if failed (no such hidden page)
  7584.     AX = 0000h if OK, then
  7585.         ES = segment of page frame
  7586.         DI = physical page number
  7587. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  7588.     FASTOPEN makes this call with AL = FFh
  7589. SeeAlso: AX=1B00h
  7590. --------V-2F2300-----------------------------
  7591. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  7592.     AX = 2300h
  7593. Return: AH = FFh
  7594. Note:    this installation check does not follow the usual format
  7595. SeeAlso: AH=23h,AX=2E00h
  7596. --------V-2F23-------------------------------
  7597. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  7598.     AH = 23h
  7599.     AL nonzero
  7600. Return: AH = FFh
  7601.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  7602. SeeAlso: AX=2300h,AX=2E00h
  7603. --------T-2F2700-----------------------------
  7604. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  7605.     AX = 2700h
  7606. Return: AL = status
  7607.         00h not installed
  7608.         FFh installed
  7609. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  7610.       taskswitching and multitasking modes
  7611. --------T-2F2701-----------------------------
  7612. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  7613.     AX = 2701h
  7614. Return: AX = maximum simultaneous tasks
  7615.     BX = index into TASK_IDS of current foreground task
  7616.     CX = currently-active tasks
  7617.     DX = version number (DL = major, DH = minor)
  7618.         (DR-DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  7619.     ES:SI -> TASK_IDS
  7620.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  7621. Notes:    do not attempt to create a new task if CX == AX
  7622.     the task's index is its position on the task menu, while its ID is the
  7623.       position within the internal task name table
  7624. SeeAlso: AX=2714h,AX=2716h
  7625. --------T-2F2702-----------------------------
  7626. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  7627.     AX = 2702h
  7628. Return: DX = maximum pages INT 67/AH=42h will report available
  7629. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  7630.       amount which is reported as being available at a given time
  7631. SeeAlso: AX=2703h,INT 67/AH=42h
  7632. --------T-2F2703-----------------------------
  7633. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  7634.     AX = 2703h
  7635.     DX = maximum pages INT 67/AH=42h should report available
  7636. Return: DX = new maximum for reporting
  7637. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  7638.       both taskswitching and multitasking modes
  7639. SeeAlso: AX=2702h,INT 67/AH=42h
  7640. --------T-2F2704-----------------------------
  7641. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  7642.     AX = 2704h
  7643.     DL = subfunction
  7644.         00h unregister task manager
  7645.         01h register task manager
  7646. Return: DL = status
  7647.         00h registered
  7648.         01h unregistered
  7649. Notes:    a task manager replaces TaskMAX's menu system with its own user
  7650.       interface; while one is registered, the TaskMAX hotkeys and
  7651.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  7652.     unregister the task manager before terminating it
  7653. SeeAlso: AX=2705h
  7654. Index:    hotkeys;TaskMAX
  7655. --------T-2F2705-----------------------------
  7656. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  7657.     AX = 2705h
  7658.     DL = subfunction
  7659.         00h disable keystrokes for switching to next/prev/specified task
  7660.         01h enable
  7661. Return: nothing
  7662. Note:    should only be called by a registered task manager (see AX=2704h)
  7663. SeeAlso: AX=2704h,AX=2706h
  7664. --------T-2F2706-----------------------------
  7665. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  7666.     AX = 2706h
  7667.     DX = task index (see AX=2701h) of task to be activated
  7668. Return: DX = task index of previously-active task
  7669. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  7670.       both taskswitching and multitasking modes
  7671. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  7672. --------T-2F2707-----------------------------
  7673. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  7674.     AX = 2707h
  7675.     DS:DX -> ASCIZ pathname of executable
  7676.     ES:BX -> parameter block (see #1459)
  7677.     CX = number of ticks before automatic return to task manager
  7678.         (0000h = run until termination or explicitly switched)
  7679. Return: DX = new task's task index (FFFFh if task terminated)
  7680. SeeAlso: AX=2706h,AX=2708h
  7681.  
  7682. Format of TaskMAX parameter block:
  7683. Offset    Size    Description    (Table 1459)
  7684.  00h    WORD    reserved, should be 0000h
  7685.  02h    DWORD    pointer to command tail to be copied into child's PSP
  7686.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  7687.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  7688. --------T-2F2708-----------------------------
  7689. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  7690.     AX = 2708h
  7691.     DX = task index
  7692. Return: DX = FFFFh (task deleted)
  7693. Notes:    this call should only be used for abnormal task termination, after
  7694.       first checking for open files with AX=270Ch; should not be used
  7695.       with programs that allocate EMS or XMS memory
  7696.     switches to specified task first
  7697. SeeAlso: AX=2707h
  7698. --------T-2F2709-----------------------------
  7699. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  7700.     AX = 2709h
  7701.     DX = task index
  7702.     DS:SI -> 8-byte name (8 NULs = remove name)
  7703. Return: AL = task flags
  7704.         00h ID unused or task terminated
  7705.         01h ID in use, task name table entry valid
  7706.         81h ID in use, task name fixed
  7707.     BX = task ID
  7708.     ES:DI -> name in task name table (see AX=2701h)
  7709. Note:    the task retains the given name until it terminates or the name is
  7710.       removed by specifying a name of 8 NULs.
  7711. SeeAlso: AX=2701h,AX=2707h
  7712. --------T-2F270A-----------------------------
  7713. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  7714.     AX = 270Ah
  7715.     DX = task index
  7716. Return: DX = task ID (FFFFh if index invalid)
  7717. Note:    task IDs stay constant, while indexes can change when other tasks are
  7718.       deleted
  7719. SeeAlso: AX=2701h,AX=270Bh
  7720. --------T-2F270B-----------------------------
  7721. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  7722.     AX = 270Bh
  7723.     DX = task ID
  7724. Return: DX = task index (FFFFh if task not active)
  7725. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  7726.       taskswitching and multitasking modes
  7727. SeeAlso: AX=270Ah
  7728. --------T-2F270C-----------------------------
  7729. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  7730.     AX = 270Ch
  7731.     DX = task index
  7732. Return: AX = number of files currently open for specified task
  7733. SeeAlso: AX=2708h
  7734. --------T-2F270D-----------------------------
  7735. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  7736.     AX = 270Dh
  7737.     DX = task index
  7738. Return: DX = status
  7739.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  7740.         0001h if not in root shell for task
  7741. Note:    TaskMAX will return 0001h if the specified task has spawned another
  7742.       command interpreter with AX=2707h
  7743. SeeAlso: AX=2707h,AX=270Ch
  7744. --------T-2F270E-----------------------------
  7745. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  7746.     AX = 270Eh
  7747.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  7748.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  7749. Return: ES:DI -> current lead-in string
  7750. Note:    the specified sequence of keystrokes is sent to the application before
  7751.       every line of a text-mode spreadsheet paste
  7752. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  7753. --------T-2F270F-----------------------------
  7754. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  7755.     AX = 270Fh
  7756.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  7757.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  7758. Return: ES:DI -> current lead-in string
  7759. Note:    the specified sequence of keystrokes is sent to the application before
  7760.       every number in a numeric-mode spreadsheet paste
  7761. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  7762. --------T-2F2710-----------------------------
  7763. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  7764.     AX = 2710h
  7765.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  7766.     DS:SI -> pasting terminator string (character/scan-code pairs)
  7767. Return: ES:DI -> current terminator string
  7768. Note:    the specified sequence of keystrokes is sent to the application after
  7769.       every line of a spreadsheet paste operation
  7770. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  7771. --------T-2F2711-----------------------------
  7772. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  7773.     AX = 2711h
  7774.     DX = ASCII code for separator (FFFFh to get current)
  7775. Return: DL = current separator character
  7776. SeeAlso: AX=270Fh
  7777. --------T-2F2712-----------------------------
  7778. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  7779.     AX = 2712h
  7780.     DX = task index
  7781. --------T-2F2713-----------------------------
  7782. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  7783.     AX = 2713h
  7784.     DX = task index
  7785.     CX = paste mode
  7786.         0000h alphanumeric
  7787.         0001h numeric
  7788.         0002h text
  7789. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  7790. --------T-2F2714-----------------------------
  7791. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  7792.     AX = 2714h
  7793. Return: CX = total KB of swap space
  7794.     DX = available KB of swap space
  7795. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  7796.       taskswitching and multitasking modes
  7797. SeeAlso: AX=2701h
  7798. --------T-2F2715-----------------------------
  7799. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  7800.     AX = 2715h
  7801. Return: only after calling task is again selected
  7802. SeeAlso: AX=2706h
  7803. --------T-2F2716-----------------------------
  7804. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  7805.     AX = 2716h
  7806. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  7807.         CX = bytes in paste buffer
  7808.         DX = current generation number (updated after every copy operation)
  7809. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  7810. --------T-2F2717-----------------------------
  7811. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  7812.     AX = 2717h
  7813.     CX = bytes in destination buffer
  7814.     ES:DI -> destination buffer
  7815. Return: AX = 0000h if function supported
  7816.         CX = bytes actually copied (FFFFh if buffer too small)
  7817.         DX = current generation number for paste buffer
  7818. Note:    the destination buffer may be too small if another task adds more data
  7819.       to the paste buffer after the AX=2716h call but before this call
  7820. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  7821. --------T-2F2718-----------------------------
  7822. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  7823.     AX = 2718h
  7824.     CX = bytes in source buffer
  7825.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  7826. Return: AX = 0000h if function supported
  7827.         CX = bytes actually copied
  7828.         DX = current generation number for paste buffer
  7829. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  7830. --------T-2F2719-----------------------------
  7831. INT 2F - Novell DOS 7 TaskMGR - NOP
  7832.     AX = 2719h to 271Bh
  7833. --------T-2F271C-----------------------------
  7834. INT 2F U - Novell DOS 7 TaskMGR - ???
  7835.     AX = 271Ch
  7836.     DX = ???
  7837.         bit 0: ???
  7838. Return: ???
  7839.     ---if DX bit 0 set---
  7840.     AX = 0031h
  7841.     CX = 0000h
  7842. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  7843.       function will crash because its exit code attempts to pop several
  7844.       registers which are not pushed when DX bit 0 is set
  7845. --------m-2F2780CL01-------------------------
  7846. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  7847.     AX = 2780h
  7848.     CL = 01h (function number)
  7849.     CH = subfunction
  7850.         00h unused
  7851.         Return: CX = status (0002h) (see #1460)
  7852.         01h unused
  7853.         Return: CX = status (0002h) (see #1460)
  7854.         02h ???
  7855.         BX = ??? (0005h-000Fh)
  7856.         Return: CX = status (0000h,0030h) (see #1460)
  7857.         03h allocate ???
  7858.         DX = ???
  7859.         Return: CX = status (0000h,0003h) (see #1460)
  7860.         04h get ???
  7861.         Return: CX = 0000h (successful)
  7862.             BX = selector for EMM386 data segment
  7863.             EBX high word cleared
  7864.         05h ???
  7865.         EDX = ???
  7866.         Return: ???
  7867.         06h return to real mode via triple fault
  7868.         07h debugger break
  7869.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  7870.               mark
  7871.         08h get ???
  7872.         Return: CX = 0000h (successful)
  7873.             EBX = ??? (0 or 2)
  7874.         09h ???
  7875.         0Ah ???
  7876.         0Bh unused
  7877.         Return: CX = status (0002h) (see #1460)
  7878.         0Ch ??? manipulates DOS memory chain
  7879.         0Dh ???
  7880.         EBX = ???
  7881.         EDX = ???
  7882.         Return: ???
  7883.         0Eh ???
  7884.         Return: CX = 0000h (successful)
  7885.             BL = ???     \ or BX = 0000h
  7886.             BH = ???     /
  7887.         0Fh get ???
  7888.         Return: CX = 0000h (successful)
  7889.             EBX = ???
  7890.         10h get and set ???
  7891.         EDX = ???
  7892.         Return: CX = 0000h (successful)
  7893.             EBX = old value of ???
  7894.         11h get ???
  7895.         Return: CX = 0000h (successful)
  7896.             EBX = ??? (0100h)
  7897.         12h get and set ???
  7898.         DX = ???
  7899.         Return: CX = 0000h (successful)
  7900.             AX = old value of ???
  7901.         13h ???
  7902.         Return: CX = status (0000h,003Fh) (see #1460)
  7903.             AX = ???
  7904.         14h ???
  7905.         EDX = ???
  7906.         Return: CX = status (0000h,003Fh) (see #1460)
  7907.         15h ???
  7908.         BX = segment of ???
  7909.         Return: CX = 0000h (successful)
  7910.             BX = segment of ???
  7911.         16h ???
  7912.         17h ???
  7913.         EBX = subfunction (0-2)
  7914.         Return: CX = status (0002h if EBX>2) (see #1460)
  7915.             ???
  7916.         18h unused
  7917.         Return: CX = status (0002h) (see #1460)
  7918. Return: CX = status (most subfunctions)
  7919.     (E)AX and/or (E)BX contain return values, depending on function
  7920. Notes:    called by DPMS.EXE and EMM386.EXE
  7921.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  7922.       because the request is handled on the initial trap to the memory
  7923.       manager caused by INT instructions, this API must be invoked with
  7924.       an actual INT 2F instruction instead of some simulation such as a
  7925.       far call to the address in the interrupt vector table
  7926. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  7927.  
  7928. (Table 1460)
  7929. Values for Novell DOS 7 EMM386 function status:
  7930.  0000h    successful
  7931.  0001h    invalid function???
  7932.  0002h    invalid subfunction
  7933.  0003h    ???
  7934.  0004h    invalid ??? index
  7935.  0005h    ???
  7936.  0006h    ???
  7937.  0007h    ???
  7938.  0009h    ???
  7939.  000Ah    ???
  7940.  000Bh    invalid ??? handle
  7941.  000Ch    ???
  7942.  000Dh    ???
  7943.  000Eh    ???
  7944.  000Fh    ???
  7945.  0014h    ???
  7946.  0023h    ???
  7947.  0030h    ???
  7948.  003Fh    ???
  7949. --------m-2F2780CL02-------------------------
  7950. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  7951.     AX = 2780h
  7952.     CL = 02h (function number)
  7953.     CH = subfunction
  7954.         00h ???
  7955.         ???
  7956.         Return: CX = status (0000h,0023h, others???) (see #1460)
  7957.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  7958.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  7959.               func 02h/sf 0Bh, and func 04h/sf 01h
  7960.         01h get and clear ???
  7961.         DX = ??? handle or 0000h for default
  7962.         Return: CX = status (0000h,000Bh) (see #1460)
  7963.             EBX = old value of ??? if successful
  7964.             EDX destroyed
  7965.         02h ???
  7966.         DX = index of ???
  7967.         Return: CX = status (0000h,0004h,0005h) (see #1460)
  7968.             EBX = 0000FFFFh on error, 00000000h if successful
  7969.         03h ???
  7970.         DX = index of ???
  7971.         Return: CX = status (0000h,0004h,0006h) (see #1460)
  7972.             BX = FFFFh on error, 0000h if successful
  7973.         04h ???
  7974.         Return: CX = status (0000h,0007h,000Ah) (see #1460)
  7975.         05h ???
  7976.         EDX -> ??? data (first 8 bytes seem to be name)
  7977.         Return: CX = status (0000h,0009h,000Dh) (see #1460)
  7978.         06h ???
  7979.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  7980.         07h ???
  7981.         EDX = ???
  7982.         Return: CX = status (0000h,0009h,000Eh) (see #1460)
  7983.         08h ???
  7984.         EDX = ???
  7985.         Return: CX = status (0000h,0009h,000Eh) (see #1460)
  7986.         09h ???
  7987.         EDX = ???
  7988.         Return: CX = status (0000h,0009h,000Fh) (see #1460)
  7989.         0Ah ???
  7990.         EDX = ???
  7991.         Return: CX = status (0000h,0009h,000Fh) (see #1460)
  7992.         0Bh ???
  7993.         DX = ???
  7994.         Return: CX = 0000h (successful)
  7995.         0Ch ???
  7996.         Return: CX = 0000h (successful)
  7997.         0Dh ???
  7998.         Return: CX = status (0000h,0023h) (see #1460)
  7999.             BX = FFFFh on error, 0000h if successful
  8000.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  8001.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  8002.         0Eh ???
  8003.         ???
  8004.         Return: CX = status (0000h,000Ch) (see #1460)
  8005.             EBX = ??? if successful
  8006.         0Fh ???
  8007.         BX = ???
  8008.         DX = ??? handle or 0000h for default
  8009.         Return: CX = status (0000h,000Bh) (see #1460)
  8010.         10h get ??? handle
  8011.         Return: CX = 0000h (successful)
  8012.             BX = handle of default ???
  8013.             EBX high word cleared
  8014.         11h ???
  8015.         DX = ??? handle or 0000h for default
  8016.         BX = ??? (handle???)
  8017.         Return:    CX = status (0000h,000Bh,0014h) (see #1460)
  8018.         12h ???
  8019.         BX = ???
  8020.         DX = ???
  8021.         Return: CX = 0000h (successful)
  8022.         13h ???
  8023.         DX = ???
  8024.         Return: CX = status (see #1460)
  8025.         14h ???
  8026.         BX = ???
  8027.         DX = ???
  8028.         Return: CX = status (0000h,0014h) (see #1460)
  8029.             BX = FFFFh on error, ??? if successful
  8030.         15h set ??? flags
  8031.         BX = ??? (low two bits only)
  8032.         DX = ??? handle or 0000h for default
  8033.         Return: CX = status (0000h,000Bh) (see #1460)
  8034.             BX = new value of ??? flags (entire word)
  8035.             EBX high register cleared
  8036.         16h clear ??? flag for default ???
  8037.         Return: CX = 0000h (successful)
  8038.         17h ???
  8039.         18h ???
  8040.         19h ???
  8041.         1Ah ???
  8042.         1Bh ???
  8043.         1Ch ???
  8044.         1Dh ???
  8045.         1Eh ???
  8046.         1Fh ???
  8047.         20h ???
  8048.         21h ???
  8049.         22h ???
  8050.         23h ???
  8051.         24h ???
  8052.         25h ???
  8053.         26h ???
  8054.         27h ???
  8055.         28h ???
  8056.         29h ???
  8057.         2Ah ???
  8058.         2Bh ???
  8059.         2Ch ???
  8060.         2Dh ???
  8061.         2Eh ???
  8062.         2Fh ???
  8063.         30h ???
  8064.         31h ???
  8065.         32h ???
  8066.         33h ???
  8067.         34h ???
  8068.         35h ???
  8069.         36h ???
  8070.         37h ???
  8071.         38h ???
  8072.         39h ???
  8073.         3Ah ???
  8074.         3Bh ???
  8075.         3Ch ???
  8076.         3Eh ???
  8077.         3Fh ???
  8078.         40h ???
  8079.         41h ???
  8080.         42h ???
  8081.         43h ???
  8082.         44h ???
  8083.         45h ???
  8084.         46h ???
  8085.         47h ???
  8086. Return: CX = status (most subfunctions)
  8087.     (E)AX and/or (E)BX contain return values, depending on function
  8088. Notes:    called by DPMS.EXE and EMM386.EXE
  8089.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8090.       because the request is handled on the initial trap to the memory
  8091.       manager caused by INT instructions, this API must be invoked with
  8092.       an actual INT 2F instruction instead of some simulation such as a
  8093.       far call to the address in the interrupt vector table
  8094. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  8095. --------m-2F2780CL03-------------------------
  8096. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8097.     AX = 2780h
  8098.     CL = 03h (function number)
  8099.     CH = subfunction
  8100.         00h ???
  8101.         01h ???
  8102.         02h ???
  8103.         03h ???
  8104.         04h ???
  8105.         05h ???
  8106.         06h ???
  8107.         07h ???
  8108.         08h ???
  8109.         09h ???
  8110.         0Ah ???
  8111.         0Bh ???
  8112.         0Ch ???
  8113.         0Dh ???
  8114.         0Eh ???
  8115.         0Fh ???
  8116.         10h ???
  8117.         11h ???
  8118.         12h ???
  8119.         13h ???
  8120.         14h ???
  8121.         15h ???
  8122.         16h ???
  8123.         17h ???
  8124.         18h ???
  8125.         19h ???
  8126.         1Ah ???
  8127.         1Bh ???
  8128.         1Ch ???
  8129.         1Dh ???
  8130.         1Eh ???
  8131.         1Fh ???
  8132.         20h ???
  8133.         21h ???
  8134.         22h ???
  8135.         23h ???
  8136.         24h ???
  8137.         25h ???
  8138.         26h ???
  8139.         27h ???
  8140.         28h ???
  8141.         29h ???
  8142.         2Ah ???
  8143.         2Bh ???
  8144.         2Ch ???
  8145.         2Dh ???
  8146.         2Eh ???
  8147.         2Fh ???
  8148.         30h ???
  8149.         31h ???
  8150.         32h ???
  8151.         33h ???
  8152.         34h ???
  8153.         35h ???
  8154.         36h ???
  8155.         37h ???
  8156. Return: CX = status (most subfunctions)
  8157.     (E)AX and/or (E)BX contain return values, depending on function
  8158. Notes:    called by DPMS.EXE and EMM386.EXE
  8159.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8160.       because the request is handled on the initial trap to the memory
  8161.       manager caused by INT instructions, this API must be invoked with
  8162.       an actual INT 2F instruction instead of some simulation such as a
  8163.       far call to the address in the interrupt vector table
  8164. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  8165. --------m-2F2780CL04-------------------------
  8166. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8167.     AX = 2780h
  8168.     CL = 04h (function number)
  8169.     CH = subfunction
  8170.         00h ???
  8171.         01h ???
  8172.         02h ???
  8173.         03h ???
  8174.         04h ???
  8175.         05h ???
  8176.         06h ???
  8177.         07h ???
  8178.         08h ???
  8179.         09h ???
  8180.         0Ah ???
  8181.         0Bh ???
  8182.         0Ch ???
  8183.         0Dh ???
  8184.         0Eh ???
  8185.         0Fh ???
  8186.         10h ???
  8187.         11h ???
  8188.         12h ???
  8189.         13h ???
  8190.         14h ???
  8191.         15h ???
  8192.         16h ???
  8193.         17h ???
  8194.         18h ???
  8195.         19h ???
  8196.         1Ah ???
  8197.         1Bh ???
  8198.         1Ch ???
  8199.         1Dh ???
  8200.         1Eh ???
  8201.         1Fh ???
  8202.         20h ???
  8203.         21h ???
  8204.         22h ???
  8205.         23h ???
  8206.         24h ???
  8207.         25h ???
  8208.         26h ???
  8209.         27h ???
  8210.         28h ???
  8211.         29h ???
  8212.         2Ah ???
  8213.         2Bh ???
  8214.         2Ch ???
  8215.         2Dh ???
  8216.         2Eh ???
  8217.         2Fh ???
  8218.         30h ???
  8219.         31h ???
  8220.         32h ???
  8221. Return: CX = status (most subfunctions)
  8222.     (E)AX and/or (E)BX contain return values, depending on function
  8223. Notes:    called by DPMS.EXE and EMM386.EXE
  8224.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8225.       because the request is handled on the initial trap to the memory
  8226.       manager caused by INT instructions, this API must be invoked with
  8227.       an actual INT 2F instruction instead of some simulation such as a
  8228.       far call to the address in the interrupt vector table
  8229. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8230. --------m-2F2780CL05-------------------------
  8231. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8232.     AX = 2780h
  8233.     CL = 05h
  8234.     ???
  8235. Return: ???
  8236. Notes:    called by DPMS.EXE and EMM386.EXE
  8237.     the handler for this function may be set by one of the subfunctions
  8238.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  8239.       CX=0001h (see #1460)
  8240.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8241.       because the request is handled on the initial trap to the memory
  8242.       manager caused by INT instructions, this API must be invoked with
  8243.       an actual INT 2F instruction instead of some simulation such as a
  8244.       far call to the address in the interrupt vector table
  8245. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8246. --------m-2F2780CL06-------------------------
  8247. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8248.     AX = 2780h
  8249.     CL = 06h
  8250.     ???
  8251. Return: ???
  8252. Notes:    called by DPMS.EXE and EMM386.EXE
  8253.     the handler for this function may be set by one of the subfunctions
  8254.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  8255.       CX=0001h (see #1460)
  8256.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8257.       because the request is handled on the initial trap to the memory
  8258.       manager caused by INT instructions, this API must be invoked with
  8259.       an actual INT 2F instruction instead of some simulation such as a
  8260.       far call to the address in the interrupt vector table
  8261. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8262. --------m-2F2780-----------------------------
  8263. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8264.     AX = 2780h
  8265.     CL = function (07h-0Fh)
  8266.     ???
  8267. Return: ???
  8268. Notes:    called by DPMS.EXE and EMM386.EXE
  8269.     the handlers for each of these functions may be set individually by
  8270.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  8271.       return with all registers unchanged
  8272.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8273.       because the request is handled on the initial trap to the memory
  8274.       manager caused by INT instructions, this API must be invoked with
  8275.       an actual INT 2F instruction instead of some simulation such as a
  8276.       far call to the address in the interrupt vector table
  8277. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8278. --------T-2F2781-----------------------------
  8279. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  8280.     AX = 2781h
  8281. Return: ???
  8282. SeeAlso: AX=2782h
  8283. --------T-2F2782-----------------------------
  8284. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  8285.     AX = 2782h
  8286. Return: ???
  8287. SeeAlso: AX=2781h
  8288. --------m-2F2783-----------------------------
  8289. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  8290.     AX = 2783h
  8291. Return: AX = ???
  8292.     BX = ???
  8293. --------T-2F278F-----------------------------
  8294. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  8295.     AX = 278Fh
  8296.     as for INT 2F/AX=2780h
  8297. Return: as for INT 2F/AX=2780h
  8298. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  8299.       without changing any other registers
  8300. SeeAlso: AX=2780h,AX=2782h
  8301. --------F-2F2A-------------------------------
  8302. INT 2F - Gammafax DOS Dispatcher INTERFACE
  8303.     AH = 2Ah
  8304. Note:    details not available at this time
  8305. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  8306. --------V-2F2E00-----------------------------
  8307. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  8308.     AX = 2E00h
  8309. Return: AH = FFh if installed
  8310. Note:    this installation check does not follow the usual format of setting
  8311.       AL to FFh
  8312. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  8313. --------V-2F2E-------------------------------
  8314. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  8315.     AH = 2Eh
  8316.     AL nonzero
  8317. Return: AH = FFh if installed
  8318.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  8319. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  8320. --------t-2F3900-----------------------------
  8321. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  8322.     AX = 3900h
  8323. Return: AL = status
  8324.         00h not installed
  8325.         FFh one or more TSRs using this interface is installed
  8326.         DX may be destroyed
  8327. Note:    this function is provided to that the multiplex number will appear used
  8328.       to other programs
  8329. SeeAlso: AH=39h/BL=00h
  8330. --------t-2F39--BL00-------------------------
  8331. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  8332.     AH = 39h
  8333.     BL = 00h
  8334.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #1461)
  8335. Return: AL = status
  8336.         00h not installed
  8337.         FFh installed
  8338.         DX = segment address of resident module
  8339. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  8340.       resident module is installed by allocating a block of upper memory,
  8341.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  8342.       field with the TSR's name.
  8343. SeeAlso: #1462,AX=3900h,AH=39h/BL=01h
  8344.  
  8345. (Table 1461)
  8346. Values for Kingswood TSR ID number:
  8347.  01h    TSR Windows
  8348.  02h    NOBUSY
  8349.  03h    CD STACK
  8350.  04h    DISK WATCH
  8351.  05h    PUSHBP
  8352.  06h    ALIAS
  8353.  07h    KEYMACRO
  8354.  08h    SLOWDOWN
  8355.  09h    ANSIGRAB
  8356.  0Ah    TEE
  8357.  0Bh    FASTMOUS
  8358.  0Ch    EXTWILD
  8359.  0Dh    BREAKOUT
  8360.  0Eh    STOPDISK
  8361.  0Fh    MEMINIT
  8362.  10h    JANUSEXT
  8363.  11h    CAPS
  8364.  12h    ANSI
  8365.  13h    TRAPPER
  8366.  14h    EATMEM
  8367.  15h    WPJOKE
  8368.  16h    SHOWDOS
  8369.  17h    LOGINTS
  8370.  18h    BLANKVGA
  8371.  19h    SWAPEXEC
  8372.  1Ah    SHELL
  8373.  1Bh    TSRGAMES
  8374.  
  8375. Format of Kingswood TSR modules:
  8376. Offset    Size    Description    (Table 1462)
  8377.  00h  4 BYTEs    signature "FTSR"
  8378.  04h    WORD    segment address of this module (used to check validity)
  8379.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  8380.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  8381.         (usually only a PSP if file access is required)
  8382.      5N BYTEs    interrupt list (see #1463)
  8383.     BYTE    FFh terminator
  8384.  
  8385. Format of Kingswood TSR interrupt list entry:
  8386. Offset    Size    Description    (Table 1463)
  8387.  00h    BYTE    interrupt number (00h-FEh)
  8388.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  8389.  03h    WORD    offset within segment of begin of interrupt handler code
  8390. --------t-2F39--BL01-------------------------
  8391. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  8392.     AH = 39h
  8393.     BL = 01h
  8394.     AL = TSR ID number (01h-FFh) (see #1461)
  8395. Return: AL = status
  8396.         00h not ready to be removed
  8397.         FFh resident module may be removed by deassigning the interrupts
  8398.           hooked by the TSR and deallocating the TSR's memory block
  8399.     AH,BX,CX,DX,ES may be destroyed
  8400. SeeAlso: AX=3900h,AH=39h/BL=00h
  8401. --------t-2F39-------------------------------
  8402. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  8403.     AH = 39h
  8404.     BL = function number (02h-FFh)
  8405.     AL = TSR ID number (01h-FFh) (see #1461)
  8406.     CX,DX,SI,DI,DS,ES may contain parameters
  8407.     BH reserved for use by the function dispatcher
  8408. Return: as appropriate for the called function
  8409. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  8410. --------r-2F3901BL02-------------------------
  8411. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  8412.     AX = 3901h
  8413.     BL = 02h
  8414. Return: AX = error code (0000h if successful)
  8415.     SI,DI,DS,ES preserved
  8416. Notes:    opens the next TSR window on top of any others.     Only three
  8417.       TSR windows can be opened at any one time.  The three windows
  8418.       are all 40x11 characters, partly overlapping.
  8419. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  8420. --------r-2F3901BL03-------------------------
  8421. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  8422.     AX = 3901h
  8423.     BL = 03h
  8424. Return: AX = error code (0000h if successful)
  8425.     SI,DI,DS,ES preserved
  8426. Notes:    Hide any visible TSR windows from view.
  8427. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  8428. --------r-2F3901BL04-------------------------
  8429. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  8430.     AX = 3901h
  8431.     BL = 04h
  8432. Return: AX = error code (0000h if successful)
  8433.     SI,DI,DS,ES preserved
  8434. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  8435. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  8436. --------r-2F3901BL05-------------------------
  8437. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  8438.     AX = 3901h
  8439.     BL = 05h
  8440. Return: AX = error code (0000h if successful)
  8441.     SI,DI,DS,ES preserved
  8442. Notes:    Close the last opened TSR window.
  8443. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8444. --------r-2F3901BL06-------------------------
  8445. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  8446.     AX = 3901h
  8447.     BL = 06h
  8448.     DS:SI -> title string
  8449. Return: AX = error code (0000h if successful)
  8450.     SI,DI,DS,ES preserved
  8451. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8452. --------r-2F3901BL07-------------------------
  8453. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  8454.     AX = 3901h
  8455.     BL = 07h
  8456.     CH = Y coordinate (0-10)
  8457.     CL = X coordinate (0-39)
  8458. Return: AX = error code (0000h if successful)
  8459.     SI,DI,DS,ES preserved
  8460. Note:    the hardware cursor is always disabled when a TSR window is opened;
  8461.       this call only sets a text position
  8462. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  8463. --------r-2F3901BL08-------------------------
  8464. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  8465.     AX = 3901h
  8466.     BL = 08h
  8467.     DS:SI -> string
  8468. Return: AX = error code (0000h if successful)
  8469.     SI,DI,DS,ES preserved
  8470. Notes:    The text is not clipped.
  8471.     This routine understands Tab, NewLine and Carriage Return
  8472. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  8473. --------r-2F3901BL09-------------------------
  8474. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  8475.     AX = 3901h
  8476.     BL = 09h
  8477.     CL = scroll direction: 01h up, FFh down, 00h clear window
  8478. Return: AX = error code (0000h if successful)
  8479.     SI,DI,DS,ES preserved
  8480. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  8481. --------r-2F3901BL0A-------------------------
  8482. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  8483.     AX = 3901h
  8484.     BL = 0Ah
  8485.     DX = sound divisor, or 0 for silence.
  8486.          (divide 1843200 by required frequency to get value for DX)
  8487.     CL = sound length in 18.2 Hz clock ticks
  8488. Return: AX = error code (0000h if successful)
  8489.     SI,DI,DS,ES preserved
  8490. SeeAlso: AH=39h/BL=00h
  8491. --------r-2F3901BL0B-------------------------
  8492. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  8493.     AX = 3901h
  8494.     BL = 0Bh
  8495.     CL = number of users increment: +1 if adding a new user
  8496.                     -1 if removing a user
  8497. Return: AX = error code (0000h if successful)
  8498.     SI,DI,DS,ES preserved
  8499. Note:    the TSR windows resident module may only be removed when the internal
  8500.       user count is zero
  8501. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8502. --------V-2F3912BL03-------------------------
  8503. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  8504.     AX = 3912h
  8505.     BL = 03h
  8506.     CL = new mode (00h fast, FFh BIOS)
  8507. Return: AL = old compatibility mode
  8508.     SI,DI,DS,ES preserved
  8509. SeeAlso: AX=3900h,AX=3912h/BL=04h
  8510. --------V-2F3912BL04-------------------------
  8511. INT 2F - Kingswood ANSI display driver - SET FLAGS
  8512.     AX = 3912h
  8513.     BL = 04h
  8514.     CL = new flags (see #1464)
  8515. Return: AL = old flags
  8516.     SI,DI,DS,ES preserved
  8517. SeeAlso: AX=3900h,AX=3912h/BL=03h
  8518.  
  8519. Bitfields for Kingswood ANSI flags:
  8520. Bit(s)    Description    (Table 1464)
  8521.  0    do not wrap at end of line
  8522.  1    wait for beeps to end before displaying next character
  8523.  2    do not use graphics cursor
  8524. --------W-2F4000-----------------------------
  8525. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  8526.     AX = 4000h
  8527. Return: AL = video virtualization (see #1465)
  8528. Note:    this function is used by display drivers to find out what capabilities
  8529.       exist for the VDD driver and also trigger the VDD driver to call
  8530.       functions 4005h and 4006h.  This function also gives the Video Driver
  8531.       hardware access to the video registers.
  8532.  
  8533. (Table 1465)
  8534. Values for Windows video virtualization:
  8535.  01h    does not virtualize video access
  8536.  02h    virtualizes the video when in text mode
  8537.  03h    virtualizes the video when in text mode or single plane graphics modes
  8538.  04h    virtualizes the video when in text mode, single plane graphics modes,
  8539.       and VGA multiplane modes
  8540.  FFh    virtualizes the video fully
  8541. --------O-2F4001-----------------------------
  8542. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  8543.     AX = 4001h
  8544. Note:    called by OS/2 when the DOS box is about to be placed in the background
  8545.       and the video driver should save any necessary state
  8546. SeeAlso: AX=4002h,AX=4005h
  8547. --------O-2F4002-----------------------------
  8548. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  8549.     AX = 4002h
  8550. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  8551.       and the video driver should restore the previously-saved state
  8552. SeeAlso: AX=4001h,AX=4006h
  8553. --------W-2F4003-----------------------------
  8554. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  8555.     AX = 4003h
  8556. Note:    This critical section must be exited within 1 second.
  8557. SeeAlso: AX=4004h
  8558. --------W-2F4004-----------------------------
  8559. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  8560.     AX = 4004h
  8561. SeeAlso: AX=4003h
  8562. --------W-2F4005-----------------------------
  8563. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  8564.     AX = 4005h
  8565. Note:    called by Windows when the DOS box is about to be placed in the
  8566.       background and the video driver should save any necessary state
  8567.       information (this may be called only in Standard mode)
  8568. SeeAlso: AX=4001h,AX=4006h
  8569. --------W-2F4006-----------------------------
  8570. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  8571.     AX = 4006h
  8572. Note:    called by Windows when the DOS box is about to be placed in the
  8573.       foreground and the video driver should restore any necessary state
  8574.       information (this may be called only in Standard mode)
  8575. SeeAlso: AX=4002h,AX=4005h
  8576. --------W-2F4007-----------------------------
  8577. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  8578.     AX = 4007h
  8579. Note:    used by Windows Standard mode
  8580. --------O-2F4010-----------------------------
  8581. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  8582.     AX = 4010h
  8583. Return: AX = 4010h if OS/2 not installed
  8584.     AX = 0000h for OS/2 Warp 3.0
  8585.     BX = OS/2 version if installed
  8586. Note:    OS/2 Warp 3.0
  8587. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  8588. --------E-2F4040-----------------------------
  8589. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  8590.     AX = 4040h
  8591. Return: BX:CX -> ???
  8592. --------N-2F4100-----------------------------
  8593. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  8594.     AX = 4100h
  8595. Return: CF clear if successful
  8596.         AL = FFh
  8597.     CF set on error
  8598.         AX = ???
  8599. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  8600.     LAN Manager enhanced mode adds features beyond the standard redirector
  8601.       file/printer services
  8602. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  8603. --------N-2F4103-----------------------------
  8604. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  8605.     AX = 4103h
  8606. Return: ???
  8607. SeeAlso: AX=4100h,AX=4104h
  8608. --------N-2F4104-----------------------------
  8609. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  8610.     AX = 4104h
  8611. Return: ???
  8612. SeeAlso: AX=4100h,AX=4103h
  8613. --------N-2F42-------------------------------
  8614. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  8615.     AH = 42h
  8616.     ???
  8617. Return: ???
  8618. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  8619.       file/printer services
  8620. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  8621. --------!---Section--------------------------
  8622.