home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / TEXT / INFO / INTER30A.ZIP / INTERRUP.D < prev    next >
Encoding:
Text File  |  1992-04-26  |  245.5 KB  |  6,848 lines

  1. Interrupt List, part 4 of 7
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------2180-------------------------------
  4. INT 21 U - European MSDOS 4.0 - EXECUTE PROGRAM IN BACKGROUND
  5.     AH = 80h
  6.     DS:DX -> ASCIZ full program name
  7.     ES:BX -> parameter block (as for AX=4B00h)
  8. Return: CF clear if successful
  9.         AX = CSID
  10.     CF set on error
  11.         AX = error code (see AH=59h)
  12. Note:    this function is called by the DETACH command
  13. SeeAlso: AX=8700h
  14. ----------218080-----------------------------
  15. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  16.     AX = 8080h
  17. Return: ???
  18. SeeAlso: AX=7070h/BX=7070h
  19. ----------2181-------------------------------
  20. INT 21 U - European MSDOS 4.0 - ???
  21.     AH = 81h
  22.     ???
  23. Return: ???
  24. ----------2182-------------------------------
  25. INT 21 U - European MSDOS 4.0 - ???
  26.     AH = 82h
  27.     ???
  28. Return: ???
  29. ----------2183-------------------------------
  30. INT 21 U - European MSDOS 4.0 - ???
  31.     AH = 83h
  32.     ???
  33. Return: ???
  34. ----------2183-------------------------------
  35. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  36.     AH = 83h
  37. Return: DX = 1990h if resident
  38. SeeAlso: AH=76h,AH=84h"VIRUS"
  39. ----------2184-------------------------------
  40. INT 21 U - European MSDOS 4.0 - ???
  41.     AH = 84h
  42.     ???
  43. Return: ???
  44. ----------2184-------------------------------
  45. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  46.     AH = 84h
  47. Return: DX = 1990h if resident
  48.         BH = version number (major in high nybble, minor in low)
  49. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  50. ----------2185-------------------------------
  51. INT 21 U - European MSDOS 4.0 - ???
  52.     AH = 85h
  53.     ???
  54. Return: ???
  55. ----------2186-------------------------------
  56. INT 21 U - European MSDOS 4.0 - ???
  57.     AH = 86h
  58.     ???
  59. Return: ???
  60. ----------218700-----------------------------
  61. INT 21 U - European DOS 4.0 - GET PID???
  62.     AX = 8700h
  63. Return: AX = PID if AL nonzero
  64.     BX = ???
  65.     CX = ???
  66. Notes:    called by MS C v5.1 getpid() function
  67.     this function apparently must return AX=0001h for INT 21/AH=80h to
  68.       succeed
  69. SeeAlso: AH=62h,AH=80h
  70. ----------2188-------------------------------
  71. INT 21 U - European MSDOS 4.0 - ???
  72.     AH = 88h
  73.     ???
  74. Return: ???
  75. ----------2189-------------------------------
  76. INT 21 U - European MSDOS 4.0 - ???
  77.     AH = 89h
  78.     ???
  79. Return: ???
  80. Note:    reportedly called by Microsoft C 4.0 startup code
  81. ----------2189-------------------------------
  82. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  83.     AH = 89h
  84. Return: AX = 0123h if resident
  85. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  86. ----------218A-------------------------------
  87. INT 21 U - European MSDOS 4.0 - ???
  88.     AH = 8Ah
  89.     ???
  90. Return: ???
  91. ----------218B-------------------------------
  92. INT 21 U - European MSDOS 4.0 - ???
  93.     AH = 8Bh
  94.     ???
  95. Return: ???
  96. ----------218C-------------------------------
  97. INT 21 U - European MSDOS 4.0 - ???
  98.     AH = 8Ch
  99.     ???
  100. Return: ???
  101. ----------218D-------------------------------
  102. INT 21 U - European MSDOS 4.0 - ???
  103.     AH = 8Dh
  104.     ???
  105. Return: ???
  106. ----------218E-------------------------------
  107. INT 21 U - European MSDOS 4.0 - ???
  108.     AH = 8Eh
  109.     ???
  110. Return: ???
  111. ----------218F-------------------------------
  112. INT 21 U - European MSDOS 4.0 - ???
  113.     AH = 8Fh
  114.     ???
  115. Return: ???
  116. ----------2190-------------------------------
  117. INT 21 U - European MSDOS 4.0 - ???
  118.     AH = 90h
  119.     ???
  120. Return: ???
  121. ----------2190-------------------------------
  122. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  123.     AH = 90h
  124. Return: AH = 01h if resident
  125. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  126. ----------2191-------------------------------
  127. INT 21 U - European MSDOS 4.0 - ???
  128.     AH = 91h
  129.     ???
  130. Return: ???
  131. ----------2192-------------------------------
  132. INT 21 U - European MSDOS 4.0 - ???
  133.     AH = 92h
  134.     ???
  135. Return: ???
  136. ----------2193-------------------------------
  137. INT 21 U - European MSDOS 4.0 - ???
  138.     AH = 93h
  139.     ???
  140. Return: ???
  141. ----------2194-------------------------------
  142. INT 21 U - European MSDOS 4.0 - ???
  143.     AH = 94h
  144.     ???
  145. Return: ???
  146. ----------2195-------------------------------
  147. INT 21 U - European MSDOS 4.0 - ???
  148.     AH = 95h
  149.     ???
  150. Return: ???
  151. ----------2196-------------------------------
  152. INT 21 U - European MSDOS 4.0 - ???
  153.     AH = 96h
  154.     ???
  155. Return: ???
  156. ----------2197-------------------------------
  157. INT 21 U - European MSDOS 4.0 - ???
  158.     AH = 97h
  159.     ???
  160. Return: ???
  161. ----------219753-----------------------------
  162. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  163.     AX = 9753h
  164. Return: never (executes original program) if virus resident
  165. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
  166. ----------2198-------------------------------
  167. INT 21 U - European MSDOS 4.0 - ???
  168.     AH = 98h
  169.     ???
  170. Return: ???
  171. ----------2199-------------------------------
  172. INT 21 U - European MSDOS 4.0 - ???
  173.     AH = 99h
  174.     ???
  175. Return: ???
  176. ----------219A-------------------------------
  177. INT 21 U - European MSDOS 4.0 - ???
  178.     AH = 9Ah
  179.     ???
  180. Return: ???
  181. ----------21A0-------------------------------
  182. INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
  183.     AH = A0h
  184. Return: AL = display status
  185.         bit     7  : 0=windowed, 1=enlarged
  186.         bits 6-3: current screen profile number 0-9
  187.         bits 2-0: active window number
  188.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  189.     BX = host window status
  190.         bit 15:  reserved
  191.         bit 14:  0=host E window installed, 1=not
  192.         bit 13:  0=host E terminal on, 1=off
  193.         bit 12:  0=host E window displayed, 1=not
  194.         bit 11:  reserved
  195.         bit 10:  0=host D window installed, 1=not
  196.         bit     9:  0=host D terminal on, 1=off
  197.         bit     8:  0=host D window displayed, 1=not
  198.         bit     7:  reserved
  199.         bit     6:  0=host C window installed, 1=not
  200.         bit     5:  0=host C terminal on, 1=off
  201.         bit     4:  0=host C window displayed, 1=not
  202.         bit     3:  reserved
  203.         bit     2:  0=host B window installed, 1=not
  204.         bit     1:  0=host B terminal on, 1=off
  205.         bit     0:  0=host B window displayed, 1=not
  206. Note:    Attachmate Extra is a 3270 emulator by Attachmate Corporation
  207. SeeAlso: AH=A1h
  208. ----------21A1-------------------------------
  209. INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
  210.     AH = A1h
  211.     AL = set status byte
  212.         bit     7  : 0=windowed, 1=enlarged
  213.         bits 6-3: current screen profile number 0-9
  214.         bits 2-0: active window number
  215.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  216. SeeAlso: AH=A0h,AH=A2h
  217. ----------21A1D5-----------------------------
  218. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  219.     AX = A1D5h
  220. Return: AX = 900Dh if resident
  221. SeeAlso: AX=9753h,AX=A55Ah
  222. ----------21A2-------------------------------
  223. INT 21 - Attachmate Extra - SET HOST WINDOW STATE
  224.     AH = A2h
  225.     AL = set status byte
  226.         bit     7  : 0=power off, 1=power on
  227.         bit     6  : 0=not installed, 1=installed
  228.         bits 5-3: reserved
  229.         bits 2-0: window number 1-4=host B-E
  230. SeeAlso: AH=A1h
  231. ----------21A3-------------------------------
  232. INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
  233.     AH = A3h
  234.     AL = window number (1-4=host B-E)
  235.     CX = 0001h
  236.     DS:BX -> keystroke buffer
  237.     DL = zero if keystroke buffer contains host function code,
  238.          non-zero if keystroke buffer contains ASCII character
  239. Return: CX = zero if character sent, non-zero if not
  240.     BX incremented if CX=0
  241.  
  242. Values for host function code:
  243.     00h=reserved    10h=PF16    20h=Clear    30h=SysRq
  244.     01h=PF1        11h=PF17    21h=Print    31h=ErInp
  245.     02h=PF2        12h=PF18    22h=Left    32h=ErEof
  246.     03h=PF3        13h=PF19    23h=Right    33h=Ident
  247.     04h=PF4        14h=PF20    24h=Up        34h=Test
  248.     05h=PF5        15h=PF21    25h=Down    35h=Reset
  249.     06h=PF6        16h=PF22    26h=Home    36h=DevCncl
  250.     07h=PF7        17h=PF23    27h=Fast Left    37h=Dup
  251.     08h=PF8        18h=PF24    28h=Fast Right    38h=FldMark
  252.     09h=PF9        19h=Alt on    29h=Bksp    39h=Enter
  253.     0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  254.     0Bh=PF11    1Bh=Shift on    2Bh=Delete
  255.     0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  256.     0Dh=PF13    1Dh=PA1        2Dh=Tab
  257.     0Eh=PF14    1Eh=PA2        2Eh=Newline
  258.     0Fh=PF15    1Fh=PA3        2Fh=Attn
  259. ----------21A4-------------------------------
  260. INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
  261.     AH = A4h
  262.     AL = window number (1-4=host B-E)
  263. Return: DS:BX -> 3270 display buffer
  264. SeeAlso: AH=A5h,AH=B8h
  265. ----------21A5-------------------------------
  266. INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
  267.     AH = A5h
  268.     AL = window number (1-4=host B-E)
  269. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  270. Note:    if the host window is configured with the Extended Attribute (EAB)
  271.       feature, multiply the cursor position by 2 to obtain the byte offset
  272.       into the display buffer
  273. SeeAlso: AH=A4h
  274. ----------21A55A-----------------------------
  275. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  276.     AX = A55Ah
  277. Return: AX = 5AA5h if resident
  278. SeeAlso: AX=A1D5h,AX=AA00h
  279. ----------21AA00-----------------------------
  280. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  281.     AX = AA00h
  282. Return: AX = 00AAh if resident
  283. SeeAlso: AX=A55Ah,AX=AA03h
  284. ----------21AA03-----------------------------
  285. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  286.     AX = AA03h
  287. Return: AX = 03AAh if resident
  288. SeeAlso: AX=AA00h,AH=ABh
  289. ----------21AB-------------------------------
  290. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  291.     AH = ABh
  292. Return: AX = 5555h if resident
  293. SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
  294. ----------21AF-------------------------------
  295. INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
  296.     AH = AFh
  297. Return: DS:BX -> translate tables (see below)
  298.  
  299. Format of translate tables:
  300. Offset    Size    Description
  301.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  302. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  303. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  304. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  305. ----------21B5-------------------------------
  306. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  307.     AH = B5h
  308.     AL = subfunction
  309.         03h get task mode
  310.         Return: AH = 00h
  311.             AL = current task mode byte
  312.         04h get task mode pointer
  313.         Return: ES:BX -> task mode byte
  314. Notes:    the task mode byte specifies how task cleanup should be performed, but
  315.       is declared to be version-dependent
  316.     allows a program to disable the automatic cleanup for programs managing
  317.       task swapping, etc.
  318.  
  319. Values for task mode byte in version 3.01:
  320.  00h-03h reserved
  321.  04h     no task cleanup
  322. ----------21B6-------------------------------
  323. INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES
  324.     AH = B6h
  325.     AL = subfunction
  326.         00h get extended file attributes
  327.         01h set extended file attributes
  328.     CL = attributes
  329.         bits 2-0: search mode (executables only)
  330.             000 none (use shell's default search)
  331.             001 search on all opens without path
  332.             010 do not search
  333.             011 search on read-only opens without path
  334.             100 reserved
  335.             101 search on all opens
  336.             110 reserved
  337.             111 search on all read-only opens
  338.         3: reserved
  339.         4: transaction tracking file
  340.         5: indexing file
  341.         6: read audit (to be implemented)
  342.         7: write audit (to be implemented)
  343.     DS:DX -> ASCIZ pathname
  344. Return: CF set on error
  345.         AL = error code
  346.         8Ch caller lacks privileges
  347.         FFh file not found
  348.     CL = current extended file attributes
  349. SeeAlso: AX=4300h
  350. ----------21B8-------------------------------
  351. INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS
  352.     AH = B8h
  353.     AL = subfunction
  354.         00h get default print job flags
  355.         01h set default capture flags (see below)
  356.         02h get specific capture flags
  357.         03h set specific print job flags
  358.         04h get default local printer
  359.         05h set default local printer
  360.         06h set capture print queue
  361.         07h set capture print job
  362.         08h get banner user name
  363.         09h set banner user name
  364.     CX = buffer size
  365.     ES:BX -> buffer
  366. Return: none
  367.  
  368. Format of capture flags table:
  369. Offset    Size    Description
  370.  00h    BYTE    status (used internally, should be set to 00h)
  371.  01h    BYTE    print flags
  372.         bit 2: print capture file if interrupted by loss of connection
  373.             3: no automatic form feed after print job
  374.             6: printing control sequences interpreted by print service
  375.             7: print banner page before capture file
  376.  02h    BYTE    printer number on server
  377.  03h    BYTE    number of copies to print
  378.  04h    BYTE    form type required in printer (default 00h)
  379.  05h 13 BYTEs    text to be placed on banner page
  380.  12h    BYTE    reserved
  381.  13h    BYTE    default local printer (00h = LPT1)
  382.  14h    BYTE    flush capture file on LPT close if nonzero
  383.  15h    WORD    timeout in clock ticks for flushing capture file on inactivity
  384.         (high byte first)
  385.         0000h = never timeout
  386.  17h    WORD    maximum lines per page (high byte first)
  387.  19h    WORD    maximum characters per line (high byte first)
  388.  1Bh 13 BYTEs    name of form required in printer
  389.  28h    BYTE    LPT capture flag
  390.         00h inactive, FFh LPT device is being captured
  391.  29h    BYTE    file capture flag
  392.         00h if no file specified, FFh if capturing to file
  393.  2Ah    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  394.         running)
  395.  2Bh    WORD    offset of printer setup string (high byte first)
  396.  2Dh    WORD    offset of printer reset string (high byte first)
  397.  2Fh    BYTE    target connection ID
  398.  30h    BYTE    capture in progress if FFh
  399.  31h    BYTE    print job number assigned to capture if FFh
  400.  32h    WORD    bindery object ID of print queue if previous byte FFh
  401.  34h    WORD    print job number (high byte first)
  402. ----------21B8-------------------------------
  403. INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
  404.     AH = B8h
  405.     AL = window number (1-4=host B-E)
  406.     DL = 01h
  407. Notes:    only valid in CUT mode
  408.     next AID keystroke (eg Enter) enables host buffer updates
  409. SeeAlso: AH=A4h
  410. ----------21BB-------------------------------
  411. INT 21 - Novell NetWare 4.0, Alloy NTNX - SET END OF JOB STATUS
  412.     AH = BBh
  413.     AL = new EOJ flag
  414.         00h disable EOJs
  415.         otherwise enable EOJs
  416. Return: AL = old EOJ flag
  417. SeeAlso: AH=D6h
  418. ----------21BBBB-----------------------------
  419. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  420.     AX = BBBBh
  421. Return: AX = 6969h
  422. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  423. ----------21BC-------------------------------
  424. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK PHYSICAL RECORD
  425.     AH = BCh
  426.     AL = flags
  427.         bit 0: lock as well as log record
  428.         1: non-exclusive lock
  429.     BX = file handle
  430.     CX:DX = offset
  431.     BP = timeout in timer ticks (1/18 sec)
  432.     SI:DI = length of region to lock
  433. Return: AL = error code
  434.         00h successful
  435.         96h no dynamic memory for file
  436.         FEh timed out
  437.         FFh failed
  438. SeeAlso: AH=BDh,AH=BFh
  439. ----------21BD-------------------------------
  440. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD
  441.     AH = BDh
  442.     BX = file handle
  443.     CX:DX = offset
  444. Return: AL = error code (see AH=BCh)
  445. Note:    unlocks record but does not remove it from log table
  446. SeeAlso: AH=BCh,AH=BEh"Novell",AH=C0h
  447. ----------21BE-------------------------------
  448. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD
  449.     AH = BEh
  450.     BX = file handle
  451.     CX:DX = offset
  452. Return: AL = error code (see AH=BCh)
  453. Note:    unlocks record and removes it from log table
  454. SeeAlso: AH=BCh,AH=BDh,AH=C1h
  455. ----------21BE-------------------------------
  456. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  457.     AH = BEh
  458. Return: AX = 1234h if resident
  459. SeeAlso: AX=BBBBh,AX=BE00h
  460. ----------21BE00-----------------------------
  461. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  462.     AX = BE00h
  463.     CF set
  464. Return: CF clear if resident
  465. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  466. ----------21BF-------------------------------
  467. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
  468.     AH = BFh
  469.     AL = flags
  470.         bit 0: lock as well as log record
  471.         1: non-exclusive lock
  472.     DS:DX -> opened FCB (see AH=0Fh)
  473.     BX:CX = offset
  474.     BP = lock timeout in timer ticks (1/18 sec)
  475.     SI:DI = length
  476. Return: AL = error code (see AH=BCh)
  477. SeeAlso: AH=BCh,AH=C0h"Novell",AH=C2h"Novell"
  478. ----------21C0-------------------------------
  479. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
  480.     AH = C0h
  481.     DS:DX -> FCB (see AH=0Fh)
  482.     BX:CX = offset
  483. Return: AL = error code (see AH=BCh)
  484. Note:    unlocks record but does not remove it from log table
  485. SeeAlso: AH=BDh,AH=BFh,AH=C1h"Novell",AH=C3h
  486. ----------21C0-------------------------------
  487. INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
  488.     AH = C0h
  489. Return: AX = 0300h if "Slow"/"Zerotime" resident
  490.     AX = 1234h if "Solano" resident
  491. SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS"
  492. ----------21C1-------------------------------
  493. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
  494.     AH = C1h
  495.     DS:DX -> opened FCB (see AH=0Fh)
  496.     BX:CX = offset
  497. Return: AL = error code (see AH=BCh)
  498. Note:    unlocks record and removes it from log table
  499. SeeAlso: AH=BEh,AH=C0h"Novell",AH=C4h
  500. ----------21C1-------------------------------
  501. INT 21 - VIRUS - "Solano" - ???
  502.     AH = C1h
  503.     ???
  504. Return: ???
  505. SeeAlso: AH=C0h"VIRUS"
  506. ----------21C2-------------------------------
  507. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOCK PHYSICAL RECORD SET
  508.     AH = C2h
  509.     AL = flags
  510.         bit 1: non-exclusive lock
  511.     BP = lock timeout in timer ticks (1/18 sec)
  512. Return: AL = error code
  513.         00h successful
  514.         FEh timed out
  515.         FFh failed
  516. SeeAlso: AH=BFh,AH=C3h
  517. ----------21C2-------------------------------
  518. INT 21 - VIRUS - "Scott's Valley" - ???
  519.     AH = C2h
  520.     ???
  521. Return: ???
  522. SeeAlso: AH=C0h"VIRUS"
  523. ----------21C3-------------------------------
  524. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD SET
  525.     AH = C3h
  526. Return: AL = error code
  527. Note:    unlocks but does not remove from log table
  528. SeeAlso: AH=C0h,AH=C2h"Novell",AH=C4h
  529. ----------21C301DXF1F1-----------------------
  530. INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
  531.     AX = C301h
  532.     DX = F1F1h
  533. Return: DX = 0E0Eh if resident
  534. SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
  535. ----------21C4-------------------------------
  536. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD SET
  537.     AH = C4h
  538. Return: AL = error code
  539. Note:    unlocks and removes from log table
  540. SeeAlso: AH=C1h
  541. ----------21C5-------------------------------
  542. INT 21 - Novell NetWare 4.6, Alloy NTNX - SEMAPHORES
  543.     AH = C5h
  544.     AL = subfunction
  545.         00h open semaphore
  546.         DS:DX -> semaphore name (counted string)
  547.         CL = initial value
  548.         Return: CX:DX = semaphore handle
  549.             BL = open count
  550.         01h examine semaphore
  551.         Return: CX = semaphore value (sign extended)
  552.             DL = open count
  553.         02h wait on semaphore
  554.         BP = timeout in timer ticks (1/18 sec) (0000h = no wait)
  555.         03h signal semaphore
  556.         04h close semaphore
  557.     CX:DX = semaphore handle (except function 00h)
  558. Return: AL = error code
  559.         00h successful
  560.         01h semaphore value overflow
  561.         96h out of string space on server
  562.         FEh invalid string length (AL=00h) or timeout
  563.         FFh invalid initial value (AL=00h) or invalid handle
  564. ----------21C500-----------------------------
  565. INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
  566.     AX = C500h
  567. Return: AX = 6731h if resident
  568. SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
  569. ----------21C6-------------------------------
  570. INT 21 - Novell NetWare 4.6, Alloy NTNX - GET OR SET LOCK MODE
  571.     AH = C6h
  572.     AL = subfunction
  573.         00h set old "compatibility" mode
  574.         01h set new extended locks mode 
  575.         02h get lock mode
  576. Return: AL = current lock mode
  577. ----------21C6-------------------------------
  578. INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
  579.     AH = C6h
  580. Return: AL = 55h if resident
  581. SeeAlso: AX=C500h"VIRUS",AX=C603h
  582. ----------21C603-----------------------------
  583. INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK
  584.     AX = C603h
  585.     CF set
  586. Return: CF clear if resident
  587. SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
  588. ----------21C7-------------------------------
  589. INT 21 - Novell NetWare 4.0 - TRANSACTION TRACKING SYSTEM
  590.     AH = C7h
  591.     AL = subfunction
  592.         00h begin transaction (NetWare SFT level II)
  593.         Return: AL = error code
  594.         01h end transaction (NetWare SFT level II)
  595.         Return: AL = error code
  596.             CX:DX = transaction reference number
  597.         02h TTS available (NetWare SFT level II)
  598.         Return: AL = completion code
  599.                 00h TTS not available
  600.                 01h TTS available
  601.                 FDh TTS available but disabled
  602.         03h abort transaction (NetWare SFT level II)
  603.         Return: AL = error code
  604.         04h transaction status
  605.         05h get application thresholds
  606.         06h set application thresholds
  607.         07h get workstation thresholds
  608.         08h set workstation thresholds
  609. Return: ???
  610. ----------21C700-----------------------------
  611. INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
  612.     AX = C700h
  613. Return: AL = 07h if resident
  614. SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
  615. ----------21C8-------------------------------
  616. INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
  617.     AH = C8h
  618.     if function C6h lock mode 00h:
  619.         DL = mode
  620.         00h no wait
  621.         01h wait
  622.     if function C6h lock mode 01h:
  623.         BP = timeout in timer ticks (1/18 sec)
  624. Return: AL = error code
  625. SeeAlso: AH=C9h
  626. ----------21C9-------------------------------
  627. INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
  628.     AH = C9h
  629. Return: AL = error code
  630. SeeAlso: AH=C8h
  631. ----------21CA-------------------------------
  632. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
  633.     AH = CAh
  634.     DS:DX -> FCB (see AH=0Fh)
  635.     if function C6h lock mode 01h:
  636.         AL = log and lock flag
  637.         00h log file only
  638.         01h lock as well as log file
  639.         BP = lock timeout in timer ticks (1/18 sec)
  640. Return: AL = error code
  641.         00h successful
  642.         96h no dynamic memory for file
  643.         FEh timeout
  644.         FFh failed
  645. SeeAlso: AH=CBh
  646. ----------21CA15-----------------------------
  647. INT 21 - VIRUS - "Piter" - ???
  648.     AX = CA15h
  649.     ???
  650. Return: ???
  651. SeeAlso: AH=CCh"VIRUS"
  652. ----------21CB-------------------------------
  653. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOCK FILE SET
  654.     AH = CBh
  655.     if function C6h lock mode 00h:
  656.         DL = mode
  657.         00h no wait
  658.         01h wait
  659.     if function C6h lock mode 01h:
  660.         BP = lock timeout in timer ticks (1/18 sec)
  661. Return: AL = error code
  662.         00h successful
  663.         FEh timed out
  664.         FFh failed
  665. Note:    attempts to lock all logged personal files
  666. SeeAlso: AH=CAh
  667. ----------21CB-------------------------------
  668. INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
  669.     AH = CBh
  670. Return: AL = 07h if resident
  671. SeeAlso: AX=C700h"VIRUS",AX=CB02h
  672. ----------21CB02-----------------------------
  673. INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
  674.     AX = CB02h
  675. Return: AX = 02CBh if resident
  676. SeeAlso: AX=CBh"VIRUS",AH=CCh"VIRUS"
  677. ----------21CC-------------------------------
  678. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
  679.     AH = CCh
  680.     DS:DX -> FCB (see AH=0Fh)
  681. Return: none
  682. Note:    unlocks file, but does not remove it from the log table or close it
  683. SeeAlso: AH=CAh,AH=CDh
  684. ----------21CC-------------------------------
  685. INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
  686.     AH = CCh
  687. Return: AX = 0700h if resident
  688. SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
  689. ----------21CD-------------------------------
  690. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE SET
  691.     AH = CDh
  692. Return: none
  693. Note:    unlocks all personal files, but does not remove them from log table
  694. SeeAlso: AH=CAh,AH=CCh
  695. ----------21CD-------------------------------
  696. INT 21 - VIRUS - "Westwood" - ???
  697.     AH = CDh
  698.     ???
  699. Return: ???
  700. SeeAlso: AH=CCh"VIRUS"
  701. ----------21CE-------------------------------
  702. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
  703.     AH = CEh
  704.     DS:DX -> FCB (see AH=0Fh)
  705. Return: AL = error code
  706. Note:    unlocks file and removes it from log table, then closes all opened and
  707.       logged occurrences
  708. SeeAlso: AH=CAh,AH=CFh,AH=EDh"Novell"
  709. ----------21CF-------------------------------
  710. INT 21 - LANstep - ???
  711.     AH = CFh
  712.     ???
  713. Return: ???
  714. Note:    LANstep is a redesign of the Waterloo Microsystems PORT network
  715. ----------21CF-------------------------------
  716. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE SET
  717.     AH = CFh
  718. Return: AL = 00h
  719. Note:    clears all entries in personal file log table
  720. SeeAlso: AH=CAh,AH=CEh
  721. ----------21D0-------------------------------
  722. INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD
  723.     AH = D0h
  724.     DS:DX -> record string (counted string, max 100 data bytes)
  725.     if function C6h lock mode 01h: (Novell, NTNX only)
  726.         AL = flags
  727.         bit 0: lock as well as log the record
  728.         bit 1: non-exclusive lock
  729.         BP = lock timeout in timer ticks (1/18 sec)
  730. Return: AL = error code
  731.         00h successful
  732.         96h no dynamic memory for file
  733.         FEh timed out
  734.         FFh unsuccessful
  735. SeeAlso: AH=D1h,AH=D2h
  736. ----------21D000-----------------------------
  737. INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
  738.     AX = D000h
  739. Return: BX = 1234h if resident
  740. SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh
  741. ----------21D1-------------------------------
  742. INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD SET
  743.     AH = D1h
  744.     if function C6h lock mode 00h:
  745.         DL = mode
  746.         00h no wait
  747.         01h wait
  748.     if function C6h lock mode 01h: (Novell only)
  749.        BP = lock timeout in timer ticks (1/18 sec)
  750.         0000h no wait
  751. Return: AL = error code (see AH=D0h)
  752. SeeAlso: AH=D0h,AH=D3h
  753. ----------21D2-------------------------------
  754. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - UNLOCK LOGICAL RECORD
  755.     AH = D2h
  756.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  757. Return: AL = error code (see AH=D0h)
  758. Note:    unlocks record but does not remove it from log table
  759. SeeAlso: AH=D0h,AH=D3h
  760. ----------21D3-------------------------------
  761. INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - UNLOCK LOGICAL RECORD SET
  762.     AH = D3h
  763. Return: AL = error code (see AH=D0h)
  764. Note:    unlocks all semaphores logged in the semaphore set of the requesting PC
  765. SeeAlso: AH=D1h,AH=D2h
  766. ----------21D4-------------------------------
  767. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - CLEAR LOGICAL RECORD
  768.     AH = D4h
  769.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  770. Return: AL = error code
  771.         00h successful
  772.         FFh not successful
  773. Note:    unlocks record and removes it from log table
  774. SeeAlso: AH=D5h
  775. ----------21D5-------------------------------
  776. INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - CLEAR LOGICAL RECORD SET
  777.     AH = D5h
  778. Return: AL = error code (see AH=D4h)
  779. Note:    unlocks and clears all semaphores associated with the semaphore set
  780.       of the requesting PC
  781. SeeAlso: AH=D4h
  782. ----------21D5-------------------------------
  783. INT 21 - VIRUS - "Carfield" - ???
  784.     AH = D5h
  785.     ???
  786. Return: ???
  787. SeeAlso: AX=D5AAh,AH=F3h"Carfield"
  788. ----------21D5AA-----------------------------
  789. INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
  790.     AX = D5AAh
  791. Return: AX = 2A55h if "Diamond-A" resident
  792.     AX = 2A03h if "Diamond-B"-family virus resident
  793. SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
  794. ----------21D5AABPDEAA-----------------------
  795. INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
  796.     AX = D5AAh
  797.     BP = DEAAh
  798. Return: SI = 4321h if resident
  799. SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
  800. ----------21D6-------------------------------
  801. INT 21 - Novell NetWare 4.0, Alloy NTNX - END OF JOB
  802.     AH = D6h
  803. Return: AL = error code
  804. Note:    unlocks and clears all locked or logged files and records held by
  805.       process, closes all files, resets error and lock modes, and releases
  806.       all network resources
  807. SeeAlso: AH=BBh
  808. ----------21D7-------------------------------
  809. INT 21 - Novell NetWare 4.0, Alloy NTNX - SYSTEM LOGOUT
  810.     AH = D7h
  811. Return: AL = error code
  812. ----------21D8-------------------------------
  813. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  814.     AH = D8h
  815.     DL = resource number
  816. Return: AL = status
  817.         00h successful
  818.         FFh unsucessful
  819. SeeAlso: AH=D9h
  820. ----------21D9-------------------------------
  821. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  822.     AH = D9h
  823.     DL = resource number
  824. Return:    AL = status (see AH=D8h)
  825. SeeAlso: AH=D8h
  826. ----------21DA-------------------------------
  827. INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
  828.     AH = DAh
  829.     DL = volume number
  830.     ES:DI -> reply buffer (see below)
  831. Return: AL = 00h
  832. SeeAlso: AH=36h
  833.  
  834. Format of reply buffer:
  835. Offset    Size    Description
  836.  00h    WORD    sectors/block
  837.  02h    WORD    total blocks
  838.  04h    WORD    unused blocks
  839.  06h    WORD    total directory entries
  840.  08h    WORD    unused directory entries
  841.  0Ah 16 BYTEs    volume name, null padded
  842.  1Ah    WORD    removable flag, 0000h = not removable
  843. ----------21DADA-----------------------------
  844. INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
  845.     AX = DADAh
  846. Return: AH = A5h
  847. SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS"
  848. ----------21DAFE-----------------------------
  849. INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
  850.     AX = DAFEh
  851. Return: AX = 1234h if resident
  852. SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
  853. ----------21DB-------------------------------
  854. INT 21 - Novell NetWare 4.0, Alloy NTNX - GET NUMBER OF LOCAL DRIVES
  855.     AH = DBh
  856. Return: AL = number of local disks
  857. SeeAlso: AH=0Eh
  858. ----------21DC-------------------------------
  859. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - GET STATION NUMBER
  860.     AH = DCh
  861. Return: AL = station number
  862.         00h if NetWare not loaded or this machine is a non-dedicated server
  863.     CX = station number in ASCII
  864. Note:    station number only unique for those PCs connected to same semaphore
  865.       service
  866. ----------21DC-------------------------------
  867. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  868.     AH = DCh
  869.     DX = state
  870.         0000h turn on
  871.         0001h turn off
  872. SeeAlso: AX=FEDCh
  873. ----------21DD-------------------------------
  874. INT 21 - Novell NetWare 4.0, Alloy NTNX - SET ERROR MODE
  875.     AH = DDh
  876.     DL = error mode
  877.         00h invoke INT 24 on critical I/O errors
  878.         01h return NetWare extended error code in AL
  879.         02h return error code in AL, mapped to standard DOS error codes
  880. Return: AL = previous error mode
  881. ----------21DD-------------------------------
  882. INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS???
  883.     AH = DDh
  884.     CX = number of bytes to copy
  885.     DS:SI -> source of copy
  886.     ES:DI -> destination of copy
  887. Return: does not return normally; return address is caller's CS:0100h with
  888.       AX = ???
  889. SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS"
  890. ----------21DE-------------------------------
  891. INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
  892.     AH = DEh
  893.     AL = broadcast mode
  894.         00h receive console and workstation broadcasts
  895.         01h receive console broadcasts only
  896.         02h receive no broadcasts
  897.         03h store all broadcasts for retrieval
  898.         04h get broadcast mode
  899.         05h disable shell timer interrupt checks
  900.         06h enable shell timer interrupt checks
  901. Return: AL = old broadcast mode
  902. ----------21DE-------------------------------
  903. INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
  904.     AH = DEh
  905. Return: AH = DFh if resident
  906. SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS"
  907. ----------21DE-------------------------------
  908. INT 21 - VIRUS - "April 1st EXE" - ???
  909.     AH = DEh
  910.     ???
  911. Return: ???
  912. ----------21DEDE-----------------------------
  913. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  914.     AX = DEDEh
  915. Return: AH = 41h if resident
  916. SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS"
  917. ----------21DF-------------------------------
  918. INT 21 - Novell NetWare 4.0, Alloy NTNX - CAPTURE
  919.     AH = DFh
  920.     AL = subfunction
  921.         00h start LPT capture
  922.         01h end LPT capture
  923.         02h cancel LPT capture
  924.         03h flush LPT capture
  925.         04h start specific capture
  926.         05h end specific capture
  927.         06h cancel specific capture
  928.         07h flush specific capture
  929. Return: AL = error code
  930. Note:    under NTNX, only AL=00h-03h are supported, and all four send a print
  931.       break (see INT 17/AH=84h)
  932. ----------21E0-------------------------------
  933. INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING
  934.     AH = E0h
  935.     DS:SI -> request buffer
  936.     ES:DI -> reply buffer
  937.     subfunction in third byte of request buffer
  938.         00h spool data to a capture file
  939.         01h close and queue capture file
  940.         02h set spool flags
  941.         03h spool existing file
  942.         04h get spool queue entry
  943.         05h remove entry from spool queue
  944.         06h get printer status
  945.         09h create a disk capture file
  946. Return: AL = error code
  947. ----------21E0-------------------------------
  948. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  949.     AH = E0h
  950.     ???
  951. Return: ???
  952. SeeAlso: AH=E1h"OS/286"
  953. ----------21E0-------------------------------
  954. INT 21 - DoubleDOS - MENU CONTROL
  955.     AH = E0h
  956.     AL = subfunction
  957.         01h exchange tasks
  958.         73h resume invisible job if suspended
  959.         74h kill other job
  960.         75h suspend invisible job
  961. Note:    identical to AH=F0h
  962. SeeAlso: AH=F0h"DoubleDOS"
  963. ----------21E0-------------------------------
  964. INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
  965.     AH = E0h
  966. Return: AX = 0300h if "Jerusalem" resident
  967.     AX = DADAh if "Armagedon" resident
  968. SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
  969. ----------21E00F-----------------------------
  970. INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
  971.     AX = E00Fh
  972. Return: AX = 4C31h if resident
  973. SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
  974. ----------21E1-------------------------------
  975. INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
  976.     AH = E1h
  977.     DS:SI -> request buffer
  978.     ES:DI -> reply buffer
  979.     subfunction in third byte of request buffer
  980.         00h send broadcast message
  981.         01h get broadcast message
  982.         02h disable station broadcasts
  983.         03h enable station broadcasts
  984.         04h send personal message
  985.         05h get personal message
  986.         06h open message pipe
  987.         07h close message pipe
  988.         08h check pipe status
  989.         09h broadcast to console
  990. Return: AL = error code
  991. ----------21E1-------------------------------
  992. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  993.     AH = E1h
  994.     ???
  995. Return: ???
  996. Note:    protected mode only???
  997. SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
  998. ----------21E1-------------------------------
  999. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  1000.     AH = E1h
  1001. SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  1002. SeeAlso: AH=F1h"DoubleDOS"
  1003. ----------21E1-------------------------------
  1004. INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
  1005.     AH = E1h
  1006. Return: AX = 0300h if "Mendoza" resident
  1007.     AX = 0400h if "Fu Manchu" resident
  1008. SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
  1009. ----------21E2-------------------------------
  1010. INT 21 - Novell NetWare 4.0, Alloy NTNX - DIRECTORY FUNCTIONS
  1011.     AH = E2h
  1012.     DS:SI -> request buffer
  1013.     ES:DI -> reply buffer
  1014.     subfunction in third byte of request buffer
  1015.         00h set directory handle
  1016.         01h get directory path
  1017.         02h scan directory information
  1018.         03h get effective directory rights
  1019.         04h modify maximum rights mask
  1020.         05h get volume number
  1021.         06h get volume name
  1022.         0Ah create directory
  1023.         0Bh delete directory
  1024.         0Ch scan directory for trustees
  1025.         0Dh add trustee to directory
  1026.         0Eh delete trustee from directory
  1027.         0Fh rename directory
  1028.         10h purge erased files
  1029.         11h restore erased file
  1030.         12h allocate permanent directory handle
  1031.         13h allocate temporary directory handle
  1032.         14h deallocate directory handle
  1033.         15h get volume info with handle
  1034.         16h allocate special temporary directory handle
  1035.         17h retrieve a short base handle (Advanced NetWare 2.0)
  1036.         18h restore a short base handle (Advanced NetWare 2.0)
  1037.         19h set directory information
  1038. Return: AL = error code
  1039. ----------21E2-------------------------------
  1040. INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
  1041.     AH = E2h
  1042.     ???
  1043. Return: ???
  1044. SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286"
  1045. ----------21E2-------------------------------
  1046. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  1047.     AH = E2h
  1048.     AL = character
  1049. Return: AL = 00h successful
  1050.          01h buffer full (128 characters)
  1051. SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  1052. SeeAlso: AH=F2h"DoubleDOS"
  1053. ----------21E3-------------------------------
  1054. INT 21 - Novell NetWare 4.0, Alloy NTNX - CONNECTION CONTROL
  1055.     AH = E3h
  1056.     DS:SI -> request buffer
  1057.     ES:DI -> reply buffer
  1058.     subfunction in third byte of request buffer
  1059.         00h login
  1060.         01h change password
  1061.         02h map user to station set
  1062.         03h map object to number
  1063.         04h map number to object
  1064.         05h get station's logged information
  1065.         06h get station's root mask (obsolete)
  1066.         07h map group name to number
  1067.         08h map number to group name
  1068.         09h get memberset M of group G
  1069.         0Ah enter login area
  1070.         0Bh ???
  1071.         0Ch ???
  1072.         0Dh log network message
  1073.         0Eh get disk utilization (Advanced NetWare 1.0)
  1074.         0Fh scan file information (Advanced NetWare 1.0)
  1075.         10h set file information (Advanced NetWare 1.0)
  1076.         11h get file server information (Advanced NetWare 1.0)
  1077.         12h ???
  1078.         13h get internet address (Advanced NetWare 1.02)
  1079.         14h login to file server (Advanced NetWare 2.0)
  1080.         15h get object connection numbers (Advanced NetWare 2.0)
  1081.         16h get connection information (Advanced NetWare 1.0)
  1082.         32h create object (Advanced NetWare 1.0)
  1083.         33h delete object (Advanced NetWare 1.0)
  1084.         34h rename object (Advanced NetWare 1.0)
  1085.         35h get object ID (Advanced NetWare 1.0)
  1086.         36h get object name (Advanced NetWare 1.0)
  1087.         37h scan object (Advanced NetWare 1.0)
  1088.         38h change object security (Advanced NetWare 1.0)
  1089.         39h create property (Advanced NetWare 1.0)
  1090.         3Ah delete property (Advanced NetWare 1.0)
  1091.         3Bh change property security (Advanced NetWare 1.0)
  1092.         3Ch scan property (Advanced NetWare 1.0)
  1093.         3Dh read property value (Advanced NetWare 1.0)
  1094.         request buffer contains the property name in all caps
  1095.         property "IDENTIFICATION" returns the user's name
  1096.         3Eh write property value (Advanced NetWare 1.0)
  1097.         3Fh verify object password (Advanced NetWare 1.0)
  1098.         40h change object password (Advanced NetWare 1.0)
  1099.         41h add object to set (Advanced NetWare 1.0)
  1100.         42h delete object from set (Advanced NetWare 1.0)
  1101.         43h is object in set? (Advanced NetWare 1.0)
  1102.         44h close bindery (Advanced NetWare 1.0)
  1103.         45h open bindery (Advanced NetWare 1.0)
  1104.         46h get bindery access level (Advanced NetWare 1.0)
  1105.         47h scan object trustee paths (Advanced NetWare 1.0)
  1106.         C8h check console priviledges
  1107.         C9h get file server description strings
  1108.         CAh set file server date and time
  1109.         CBh disable file server login
  1110.         CCh enable file server login
  1111.         CDh get file server login status
  1112.         CEh purge all erased files
  1113.         CFh disable transaction tracking
  1114.         D0h enable transaction tracking
  1115.         D1h send console broadcast
  1116.         D2h clear connection number
  1117.         D3h down file server
  1118.         D4h get file system statistics
  1119.         D5h get transaction tracking statistics
  1120.         D6h read disk cache statistics
  1121.         D7h get drive mapping table
  1122.         D8h read physical disk statistics
  1123.         D9h get disk channel statistics
  1124.         DAh get connection's task information
  1125.         DBh get list of a connection's open files
  1126.         DCh get list of connections using a file
  1127.         DDh get physical record locks by connection and file
  1128.         DEh get physical record locks by file
  1129.         DFh get logical records by connection
  1130.         E0h get logical record information
  1131.         E1h get connection's semaphores
  1132.         E2h get semaphore information
  1133.         E3h get LAN driver's configuration information
  1134.         E5h get connection's usage statistics
  1135.         E6h get object's remaining disk space
  1136.         E7h get server LAN I/O statistics
  1137.         E8h get server miscellaneous information
  1138.         E9h get volume information
  1139. Return: AL = error code
  1140.  
  1141. Format of object property:
  1142. Offset    Size    Description
  1143.  00h 1-16 BYTEs    property name
  1144.   N    BYTE    flags
  1145.         bit 0: property is dynamic
  1146.             4: property belongs to set rather than item
  1147.  N+1    BYTE    security levels (see below)
  1148.     ???
  1149.  
  1150. Values for security levels:
  1151.  00h    everyone may access
  1152.  01h    only logged-in clients may access
  1153.  02h    only clients logged-in with object's name, type, and password
  1154.  03h    only clients logged-in with supervisor privileges
  1155.  04h    only NetWare may access
  1156. Note:    the above values are stored in a nybble; the high half-byte is write
  1157.       access and the low half-byte is read access
  1158.  
  1159. Values for object type:
  1160.  00h    unknown
  1161.  01h    user
  1162.  02h    user group
  1163.  03h    print queue
  1164.  04h    file server
  1165.  05h    job server
  1166.  06h    gateway
  1167.  07h    print server
  1168.  08h    archive queue
  1169.  09h    archive server
  1170.  0Ah    job queue
  1171.  0Bh    administration
  1172.  24h    remote bridge server
  1173.  47h    advertising print server
  1174.  FFh    wild (used only for finding objects)
  1175. ----------21E3-------------------------------
  1176. INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
  1177.     AH = E3h
  1178.     AL = interrupt number
  1179.     ???
  1180. Return: ???
  1181. Note:    protected mode only???
  1182. SeeAlso: AH=E1h"OS/286",INT 31/AX=0300h
  1183. ----------21E3-------------------------------
  1184. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  1185.     AH = E3h
  1186.     AL = character
  1187. Return: AL = 00h successful
  1188.          01h buffer full (128 characters)
  1189. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E8h"DoubleDOS"
  1190. SeeAlso: AH=F3h"DoubleDOS"
  1191. ----------21E4-------------------------------
  1192. INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
  1193.     AH = E4h
  1194.     CL = file attributes
  1195.         bit 0: read only
  1196.         1: hidden
  1197.         2: system
  1198.         7: shareable
  1199.     DX:DX -> FCB (see AH=0Fh)
  1200. Return: AL = error code
  1201. SeeAlso: AX=4301h
  1202. ----------21E4-------------------------------
  1203. INT 21 - VIRUS - "Anarkia" - INSTALLATION CHECK
  1204.     AH = E4h
  1205. Return: AH = 04h if resident
  1206. SeeAlso: AH=E1h"VIRUS",AH=E7h"VIRUS"
  1207. ----------21E400-----------------------------
  1208. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  1209.     AX = E400h
  1210. Return: AL = 00h if DoubleDOS not present
  1211.        = 01h if running in visible DoubleDOS partition
  1212.        = 02h if running in the invisible DoubleDOS partition
  1213. SeeAlso: AH=E5h"DoubleDOS",AX=F400h
  1214. ----------21E400-----------------------------
  1215. INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
  1216.     AX = E400h
  1217.     ???
  1218. Return: ???
  1219. Note:    protected mode only???
  1220. ----------21E402-----------------------------
  1221. INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
  1222.     AX = E402h
  1223.     ???
  1224. Return: ???
  1225. Note:    protected mode only???
  1226. SeeAlso: AX=E403h
  1227. ----------21E403-----------------------------
  1228. INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
  1229.     AX = E403h
  1230.     ???
  1231. Return: ???
  1232. Note:    protected mode only???
  1233. SeeAlso: AX=E402h
  1234. ----------21E5-------------------------------
  1235. INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
  1236.     AH = E5h
  1237.     DS:DX -> FCB (see AH=0Fh)
  1238. Return: AL = error code
  1239. ----------21E5-------------------------------
  1240. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  1241.     AH = E5h
  1242. Return: AL = 00h no program in other partition
  1243.        = 01h program in other partition is running
  1244.        = 02h program in other partition is suspended
  1245. SeeAlso: AX=E400h"DoubleDOS",AH=F5h"DoubleDOS"
  1246. ----------21E500-----------------------------
  1247. INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
  1248.     AX = E500h
  1249.     ???
  1250. Return: ???
  1251. SeeAlso: AX=E501h
  1252. ----------21E501-----------------------------
  1253. INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
  1254.     AX = E501h
  1255.     ???
  1256. Return: ???
  1257. SeeAlso: AX=E500h
  1258. ----------21E6-------------------------------
  1259. INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
  1260.     AH = E6h
  1261.     CX:DX = number of bytes to copy
  1262.     DS:SI -> source FCB
  1263.     ES:DI -> destination FCB
  1264. Return: AL = error code
  1265. ----------21E6-------------------------------
  1266. INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
  1267.     AH = E6h
  1268.     ???
  1269. Return: ???
  1270. SeeAlso: AX=E2h"OS/286"
  1271. ----------21E7-------------------------------
  1272. INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME
  1273.     AH = E7h
  1274.     DS:DX -> date/time buffer (see below)
  1275. Return: AL = error code
  1276.         00h successful
  1277.         FFh unsuccessful
  1278. Note:    also supported by Alloy NTNX
  1279. SeeAlso: AH=2Ah,AH=2Ch
  1280.  
  1281. Format of date/time buffer:
  1282. Offset    Size    Description
  1283.  00h    BYTE    year - 1900
  1284.  01h    BYTE    month (1=Jan)
  1285.  02h    BYTE    day
  1286.  03h    BYTE    hours
  1287.  04h    BYTE    minutes
  1288.  05h    BYTE    seconds
  1289.  06h    BYTE    day of week (0 = Sunday) (Novell and NTNX only)
  1290. ----------21E7-------------------------------
  1291. INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
  1292.     AH = E7h
  1293.     ???
  1294. Return: ???
  1295. SeeAlso: AH=E8h"OS/286",AH=E9h"OS/286",AH=EAh"OS/286"
  1296. ----------21E7-------------------------------
  1297. INT 21 - VIRUS - "Spyer"/"Kiev" - INSTALLATION CHECK
  1298.     AH = E7h
  1299. Return: AH = 78h if resident
  1300. SeeAlso: AH=E4h"VIRUS",AX=EC59h
  1301. ----------21E8-------------------------------
  1302. INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE
  1303.     AH = E8h
  1304.     DL = mode
  1305.         00h no automatic re-open
  1306.         01h auto re-open
  1307. Return: AL = error code
  1308. ----------21E8-------------------------------
  1309. INT 21 - OS/286, OS/386 - SEGMENT CREATION
  1310.     AH = E8h
  1311.     AL = type
  1312.         00h data segment
  1313.         01h data window/alias
  1314.         02h real segment
  1315.         03h real window/alias
  1316.         06h shareable segment
  1317.     ???
  1318. Return: ???
  1319. SeeAlso: AH=E7h"OS/286",AH=E9h"OS/286"
  1320. ----------21E8-------------------------------
  1321. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  1322.     AH = E8h
  1323.     AL = 00h set flags for this program
  1324.        = 01h set flags for other program
  1325.     DX = keyboard control flags (bit set enables, cleared disables
  1326.         bit 0: menu
  1327.         bit 1: exchange
  1328.         bit 2: entire keyboard enable/disable
  1329.         bit 3: Ctrl-C
  1330.         bit 4: Ctrl-PrtSc
  1331.         bit 5: Alt/Erase
  1332.         bit 6: Ctrl-Break
  1333.         bit 7: Ctrl-NumLock
  1334.         bit 8: shift-PrtSc
  1335.         bit 9-13: undefined
  1336.         bit 14: cancel key (clear keyboard buffer)
  1337.         bit 15: suspend key
  1338. Return: DX = previous flags
  1339. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  1340.       disabling any of the other keystrokes disables them completely
  1341.     identical to AH=F8h
  1342. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E3h"DoubleDOS"
  1343. SeeAlso: AH=F8h"DoubleDOS"
  1344. ----------21E9-------------------------------
  1345. INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS
  1346.     AH = E9h
  1347.     AL = function
  1348.         01h change code segment parameters
  1349.         02h    change data segment parameters
  1350.         05h adjust segment limit
  1351.         06h change segment base address
  1352.     ???
  1353. Return: ???
  1354. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=EAh"OS/286",AH=EDh"OS/286"
  1355. SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h
  1356. ----------21E9-------------------------------
  1357. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  1358.     AH = E9h
  1359.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  1360.        = 01h visible program gets 50%, invisible gets 50%
  1361.        = 02h visible program gets 30%, invisible gets 70%
  1362.        = 03h Top program gets 70%, bottom program gets 30%
  1363.        = 04h Top program gets 30%, bottom program gets 70%
  1364.        = 05h get current priority
  1365.         Return: AL = priority setting
  1366. Note:    identical to AH=F9h
  1367. SeeAlso: AH=EAh"DoubleDOS",AH=EBh"DoubleDOS",AH=F9h"DoubleDOS"
  1368. ----------21E900-----------------------------
  1369. INT 21 - Novell NetWare 4.6, Alloy NTNX - SHELL'S "GET BASE STATUS"
  1370.     AX = E900h
  1371.     DX = drive number to check (0 = A:)
  1372. Return: AL = network pathbase
  1373.     AH = base flags
  1374.         00h drive not currently mapped to a base
  1375.         01h drive is mapped to a permanent base
  1376.         02h drive is mapped to a temporary base
  1377.         03h drive exists locally
  1378. ----------21E905-----------------------------
  1379. INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
  1380.     AX = E905h
  1381.     BL = drive number (0=default, 1=A:, ...)
  1382.     DS:DX -> ASCIZ path for fake root (may include server name or be empty)
  1383. Return: CF set on error
  1384.         AL = error code (03h,0Fh,11h) (see AH=59h)
  1385.     CF clear if successful
  1386. Note:    if drive is not currently mapped, a drive mapping will be created
  1387. SeeAlso: AX=E906h
  1388. ----------21E906-----------------------------
  1389. INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
  1390.     AX = E906h
  1391.     BL = drive number (0=default, 1=A:, ...)
  1392. Note:    drive remains mapped
  1393. SeeAlso: AX=E905h
  1394. ----------21E907-----------------------------
  1395. INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
  1396.     AX = E907h
  1397.     BL = drive number (0=default, 1=A:, ...)
  1398. Return: AL = number of directories below the fake root
  1399.         FFh if no fake root assigned
  1400. SeeAlso: AX=E905h
  1401. ----------21E908BL00-------------------------
  1402. INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
  1403.     AX = E908h
  1404.     BL = 00h    don't return '.' or '..' during directory scans
  1405.        = nonzero    directory scans will return '.' or '..' entries
  1406. Return: BL = previous show-dots setting
  1407. ----------21EA-------------------------------
  1408. INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION
  1409.     AH = EAh
  1410.     AL = return version environment string
  1411.         00h        don't return string
  1412.         nonzero    return string in 40-byte buffer pointed to by ES:DI
  1413.         Return: buffer filled with three null-terminated entries:
  1414.             major operating system
  1415.             version
  1416.             hardware type
  1417. Return: AH = operating system (00h = MSDOS)
  1418.     AL = hardware type
  1419.         00h IBM PC
  1420.         01h Victor 9000
  1421.     BH = major shell version
  1422.     BL = minor shell version
  1423.     CH = (v3.01+) shell type
  1424.         00h conventional memory
  1425.         01h expanded memory
  1426.         02h extended memory
  1427.     CL = shell revision number
  1428. ----------21EA-------------------------------
  1429. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  1430.     AH = EAh
  1431. Return: task switching turned off
  1432. SeeAlso: AH=E9h"DoubleDOS",AH=EBh"DoubleDOS",AH=FAh"DoubleDOS"
  1433. SeeAlso: INT FA"DoubleDOS"
  1434. ----------21EA-------------------------------
  1435. INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
  1436.     AH = EAh
  1437.     ???
  1438. Return: ???
  1439. Note:    protected mode only???
  1440. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=E9h"OS/286"
  1441. ----------21EB-------------------------------
  1442. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG FILE
  1443.     AH = EBh
  1444.     DS:DX -> ASCIZ filename
  1445.     if function C6h lock mode 01h:
  1446.         AL = flags
  1447.         00h log file only
  1448.         01h lock as well as log file
  1449.         BP = lock timeout in timer ticks (1/18 second)
  1450. Return: AL = error code
  1451.         00h successful
  1452.         96h no dynamic memory for file
  1453.         FEh timed out
  1454.         FFh failed
  1455. SeeAlso: AH=CAh,AH=ECh"Novell"
  1456. ----------21EB-------------------------------
  1457. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  1458.     AH = EBh
  1459. Return: task switching turned on
  1460. SeeAlso: AH=E9h"DoubleDOS",AH=EAh"DoubleDOS",AH=FBh"DoubleDOS"
  1461. SeeAlso: INT FB"DoubleDOS"
  1462. ----------21EB00-----------------------------
  1463. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
  1464.     AX = EB00h
  1465.     ???
  1466. Return: ???
  1467. Note:    protected mode only???
  1468. SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h
  1469. ----------21EB02-----------------------------
  1470. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
  1471.     AX = EB02h
  1472.     ???
  1473. Return: ???
  1474. Note:    protected mode only???
  1475. SeeAlso: AX=EB00h,AX=EB04h
  1476. ----------21EB03-----------------------------
  1477. INT 21 - OS/386 VMM - FREE MAPPED PAGES
  1478.     AX = EB03h
  1479.     ???
  1480. Return: ???
  1481. Note:    protected mode only???
  1482. SeeAlso: AX=EB05h,INT 31/AX=0801h
  1483. ----------21EB04-----------------------------
  1484. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
  1485.     AX = EB04h
  1486.     ???
  1487. Return: ???
  1488. Note:    protected mode only???
  1489. SeeAlso: AX=EB00h,AX=EB02h
  1490. ----------21EB05-----------------------------
  1491. INT 21 - OS/386 VMM - MAP PAGES
  1492.     AX = EB05h
  1493.     ???
  1494. Return: ???
  1495. Note:    protected mode only???
  1496. SeeAlso: AX=EB03h,INT 31/AX=0800h
  1497. ----------21EB06-----------------------------
  1498. INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
  1499.     AX = EB06h
  1500.     ???
  1501. Return: ???
  1502. Note:    protected mode only???
  1503. SeeAlso: AX=EB07h,INT 31/AX=0600h
  1504. ----------21EB07-----------------------------
  1505. INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
  1506.     AX = EB07h
  1507.     ???
  1508. Return: ???
  1509. Note:    protected mode only???
  1510. SeeAlso: AX=EB06h,INT 31/AX=0601h
  1511. ----------21EC-------------------------------
  1512. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE FILE
  1513.     AH = ECh
  1514.     DS:DX -> ASCIZ filename
  1515. Return: none
  1516. SeeAlso: AH=EBh"Novell"
  1517. ----------21EC-------------------------------
  1518. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  1519.     AH = ECh
  1520. Return: ES = segment of virtual screen
  1521. Notes:    screen address can change if task-switching is on!!
  1522.     identical to AH=FCh
  1523. SeeAlso: AH=FCh"DoubleDOS",INT FC"DoubleDOS"
  1524. ----------21EC-------------------------------
  1525. INT 21 - OS/286, OS/386 - BLOCK TRANSFER
  1526.     AH = ECh
  1527.     ???
  1528. Return: ???
  1529. ----------21EC59-----------------------------
  1530. INT 21 - VIRUS - "Terror" - INSTALLATION CHECK
  1531.     AX = EC59h
  1532. Return: BP = EC59h if resident
  1533. SeeAlso: AH=E7h"VIRUS",AH=EEh"VIRUS"
  1534. ----------21ED-------------------------------
  1535. INT 21 - Novell NetWare, Alloy NTNX - CLEAR FILE
  1536.     AH = EDh
  1537.     DS:DX -> ASCIZ filename
  1538. Return: AL = error code
  1539. SeeAlso: AH=CEh,AH=EBh"Novell"
  1540. ----------21ED-------------------------------
  1541. INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
  1542.     AH = EDh
  1543.     ???
  1544. Return: ???
  1545. Note:    protected mode only???
  1546. SeeAlso: AH=E9h"OS/286"
  1547. ----------21EE-------------------------------
  1548. INT 21 - Novell NetWare 4.6, Alloy NTNX - GET PHYSICAL STATION NUMBER
  1549.     AH = EEh
  1550. Return: CX:BX:AX = six-byte address
  1551. ----------21EE-------------------------------
  1552. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  1553.     AH = EEh
  1554.     AL = number of 55ms time slices to give away
  1555. Return: returns after giving away time slices
  1556. SeeAlso: AH=FEh"DoubleDOS",INT FE"DoubleDOS"
  1557. ----------21EE-------------------------------
  1558. INT 21 - VIRUS - "Jerusalem-G", "Pregnant" - INSTALLATION CHECK
  1559.     AH = EEh
  1560. Return: AX = 0300h if "Jerusalem-G" resident
  1561.     AL = 05h if "Pregnant" resident
  1562. SeeAlso: AH=DDh"VIRUS",AX=EC59h,AH=F0h"VIRUS"
  1563. ----------21EF-------------------------------
  1564. INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
  1565.     AH = EFh
  1566.     AL = subfunction
  1567.         00h get drive handle table
  1568.         01h get drive flag table
  1569.         02h get drive connection ID table
  1570.         03h get connection ID table (see below)
  1571.         04h get file server name table
  1572. Return: ES:DI -> shell status table
  1573. Note:    drive handle, flag, and connection ID tables each contain 32 entries
  1574.  
  1575. Format of connection ID table:
  1576. Offset    Size    Description
  1577.  00h    BYTE    in use flag
  1578.         E0h AES temporary
  1579.         F8h IPX in critical section
  1580.         FAh processing
  1581.         FBh holding
  1582.         FCh AES waiting
  1583.         FDh waiting
  1584.         FEh receiving
  1585.         FFh sending
  1586.  01h    BYTE    order number
  1587.  02h    DWORD    file server's network address (high byte first)
  1588.  06h  6 BYTEs    file server's node address (high byte first)
  1589.  0Ch    WORD    socket number (high byte first)
  1590.  0Eh    WORD    base receive timeout in clock ticks (high byte first)
  1591.  10h  6 BYTEs    preferred routing node (high byte first)
  1592.  16h    BYTE    packet sequence number
  1593.  17h    BYTE    connection number
  1594.  18h    BYTE    connection status (FFh if active)
  1595.  19h    WORD    maximum receive timeout in clock ticks (high byte first)
  1596.  1Bh  5 BYTEs    reserved
  1597.  
  1598. Values in drive flag table:
  1599.  00h    drive is not mapped
  1600.  01h    permanent network drive
  1601.  02h    temporary network drive
  1602.  80h    mapped to local drive
  1603.  81h    local drive used as permanent network drive
  1604.  82h    local drive used as temporary network drive
  1605. ----------21F0-------------------------------
  1606. INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
  1607.     AH = F0h
  1608.     AL = subfunction
  1609.         00h set preferred connection ID
  1610.         01h get preferred connection ID
  1611.         02h get default connection ID
  1612.         03h LPT capture active
  1613.         04h set primary connection ID
  1614.         05h get primary connection ID
  1615.     DL = preferred file server
  1616. Return: AL = selected file server
  1617. ----------21F0-------------------------------
  1618. INT 21 - DoubleDOS - MENU CONTROL
  1619.     AH = F0h
  1620.     AL = subfunction
  1621.         01h exchange tasks
  1622.         73h resume invisible job if suspended
  1623.         74h kill other job
  1624.         75h suspend invisible job
  1625. Note:    identical to AH=E0h
  1626. SeeAlso: AH=E0h"DoubleDOS"
  1627. ----------21F0-------------------------------
  1628. INT 21 - VIRUS - "Frere Jacques" - INSTALLATION CHECK
  1629.     AH = F0h
  1630. Return: AX = 0300h if resident
  1631. SeeAlso: AH=EEh"VIRUS",AH=F1h"VIRUS"
  1632. ----------21F1-------------------------------
  1633. INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
  1634.     AH = F1h
  1635.     AL = subfunction
  1636.         00h attach to file server
  1637.         DL = preferred file server
  1638.         01h detach from file server
  1639.         02h logout from file server
  1640. Return: AL = completion code
  1641. ----------21F1-------------------------------
  1642. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  1643.     AH = F1h
  1644. SeeAlso: AH=E1h"DoubleDOS",AH=F2h"DoubleDOS",AH=F3h"DoubleDOS"
  1645. SeeAlso: AH=F8h"DoubleDOS"
  1646. ----------21F1-------------------------------
  1647. INT 21 - VIRUS - "F1-337" - ???
  1648.     AH = F1h
  1649.     ???
  1650. Return: ???
  1651. SeeAlso: AH=F0h"VIRUS",AX=F2AAh
  1652. ----------21F2-------------------------------
  1653. INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR
  1654.     AH = F2h
  1655.     AL = function
  1656.         15h broadcast services (see AH=E1h)
  1657.         17h connection control (see AH=E3h)
  1658.     DS:SI -> request buffer
  1659.     ES:DI -> reply buffer
  1660. Return: ???
  1661. Notes:    this is a multiplexor to access other net interface functions which
  1662.       were accessed via a separate AH function in older versions
  1663.     the function number in AL is added to CCh to get the old function
  1664.       number which is desired
  1665. ----------21F2-------------------------------
  1666. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  1667.     AH = F2h
  1668.     AL = character
  1669. Return: AL = 00h successful
  1670.          01h buffer full (128 characters)
  1671. SeeAlso: AH=E2h"DoubleDOS",AH=F1h"DoubleDOS",AH=F3h"DoubleDOS"
  1672. SeeAlso: AH=F8h"DoubleDOS"
  1673. ----------21F2AA-----------------------------
  1674. INT 21 - VIRUS - "PcVrsDs" - INSTALLATION CHECK
  1675.     AX = F2AAh
  1676. Return: AH = AAh if resident
  1677. SeeAlso: AH=F1h"VIRUS",AH=F3h"VIRUS"
  1678. ----------21F3-------------------------------
  1679. INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
  1680.     AH = F3h
  1681.     ES:DI -> request string (see below)
  1682. Return: AL = status/error code
  1683.     CX:DX = number of bytes copied
  1684.  
  1685. Format of request string:
  1686. Offset    Size    Description
  1687.  00h    WORD    source file handle
  1688.  02h    WORD    destination file handle
  1689.  04h    DWORD    starting offset in source
  1690.  08h    DWORD    starting offset in destination
  1691.  0Ch    DWORD    number of bytes to copy
  1692. ----------21F3-------------------------------
  1693. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  1694.     AH = F3h
  1695.     AL = character
  1696. Return: AL = 00h successful
  1697.          01h buffer full (128 characters)
  1698. SeeAlso: AH=E3h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  1699. SeeAlso: AH=F8h"DoubleDOS"
  1700. ----------21F3-------------------------------
  1701. INT 21 - VIRUS - "Carfield" - INSTALLATION CHECK
  1702.     AH = F3h
  1703. Return: AX = 0400h if resident
  1704. SeeAlso: AH=D5h"Carfield",AX=F2AAh,AH=F7h"VIRUS"
  1705. ----------21F400-----------------------------
  1706. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  1707.     AX = F400h
  1708. Return: AL = 00h if DoubleDOS not present
  1709.        = 01h if running in visible DoubleDOS partition
  1710.        = 02h if running in the invisible DoubleDOS partition
  1711. SeeAlso: AX=E400h,AH=F5h"DoubleDOS"
  1712. ----------21F5-------------------------------
  1713. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  1714.     AH = F5h
  1715. Return: AL = 00h no program in other partition
  1716.        = 01h program in other partition is running
  1717.        = 02h program in other partition is suspended
  1718. SeeAlso: AH=E5h"DoubleDOS",AX=F400h"DoubleDOS"
  1719. ----------21F7-------------------------------
  1720. INT 21 - VIRUS - "GP1" - INSTALLATION CHECK
  1721.     AH = F7h
  1722. Return: AX = 0300h if resident
  1723. SeeAlso: AH=F0h"VIRUS",AH=FBh"VIRUS"
  1724. ----------21F8-------------------------------
  1725. INT 21 - DOS v??? - SET OEM INT 21 HANDLER
  1726.     AH = F8h
  1727.     DS:DX -> OEM INT 21 handler for functions F9h to FFh
  1728.          FFFFh:FFFFh resets to original handlers
  1729.  
  1730. Notes:    calls to AH=F9h through AH=FFH will return CF set and AX=1 (invalid
  1731.       function) if no handler set
  1732.     handler is called with all registers exactly as set by caller, and
  1733.       should exit with IRET
  1734. SeeAlso: AH=F9h"OEM"
  1735. ----------21F8-------------------------------
  1736. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  1737.     AH = F8h
  1738.     AL = 00h set flags for this program
  1739.        = 01h set flags for other program
  1740.     DX = keyboard control flags (bit set enables, cleared disables)
  1741.         bit 0: menu
  1742.         bit 1: exchange
  1743.         bit 2: entire keyboard enable/disable
  1744.         bit 3: Ctrl-C
  1745.         bit 4: Ctrl-PrtSc
  1746.         bit 5: Alt/Erase
  1747.         bit 6: Ctrl-Break
  1748.         bit 7: Ctrl-NumLock
  1749.         bit 8: shift-PrtSc
  1750.         bit 9-13: undefined
  1751.         bit 14: cancel key (clear keyboard buffer)
  1752.         bit 15: suspend key
  1753. Return: DX = previous flags
  1754. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  1755.       disabling any of the other keystrokes disables them completely
  1756.     identical to AH=E8h
  1757. SeeAlso: AH=E8h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  1758. SeeAlso: AH=F3h"DoubleDOS"
  1759. ----------21F9-------------------------------
  1760. INT 21 - DOS v??? - OEM FUNCTION
  1761.     AH = F9h
  1762. SeeAlso: AH=F8h"OEM",AH=FAh"OEM"
  1763. ----------21F9-------------------------------
  1764. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  1765.     AH = F9h
  1766.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  1767.        = 01h visible program gets 50%, invisible gets 50%
  1768.        = 02h visible program gets 30%, invisible gets 70%
  1769.        = 03h Top program gets 70%, bottom program gets 30%
  1770.        = 04h Top program gets 30%, bottom program gets 70%
  1771.        = 05h get current priority
  1772.         Return: AL = priority setting
  1773. Note:    identical to AH=E9h
  1774. SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS"
  1775. ----------21FA-------------------------------
  1776. INT 21 - DOS v??? - OEM FUNCTION
  1777.     AH = FAh
  1778. SeeAlso: AH=F9h"OEM",AH=FBh"OEM"
  1779. ----------21FA-------------------------------
  1780. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  1781.     AH = FAh
  1782. Return: task switching turned off
  1783. SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS"
  1784. SeeAlso: INT FA"DoubleDOS"
  1785. ----------21FA--DX5945-----------------------
  1786. INT 21 - PC Tools 7 VDEFEND - API
  1787.     AH = FAh
  1788.     DX = 5945h
  1789.     AL = function
  1790.         00h NOP
  1791.         01h uninstall
  1792.         Return: CF clear if successful
  1793.             DI = 4559h
  1794.         02h ???
  1795.         BL = ???
  1796.         Return: CF clear
  1797.             CL = old value of ???
  1798. SeeAlso: INT 2F/AX=6282h
  1799. ----------21FB-------------------------------
  1800. INT 21 - DOS v??? - OEM FUNCTION
  1801.     AH = FBh
  1802. SeeAlso: AH=FAh"OEM",AH=FCh"OEM"
  1803. ----------21FB-------------------------------
  1804. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  1805.     AH = FBh
  1806. Return: task switching turned on
  1807. SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS"
  1808. SeeAlso: INT FB"DoubleDOS"
  1809. ----------21FB-------------------------------
  1810. INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK
  1811.     AH = FBh
  1812. Return: AH = 00h if resident
  1813. SeeAlso: AH=F7h"VIRUS",AX=FB0Ah
  1814. ----------21FB0A-----------------------------
  1815. INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK
  1816.     AX = FB0Ah
  1817. Return: AX = 0AFBh if resident
  1818. SeeAlso: AH=FBh"VIRUS",AH=FCh"VIRUS"
  1819. ----------21FC-------------------------------
  1820. INT 21 - DOS v??? - OEM FUNCTION
  1821.     AH = FCh
  1822. SeeAlso: AH=FBh"OEM",AH=FDh"OEM"
  1823. ----------21FC-------------------------------
  1824. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  1825.     AH = FCh
  1826. Return: ES = segment of virtual screen
  1827. Notes:    screen address can change if task-switching is on!!
  1828.     identical to AH=ECh
  1829. SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS"
  1830. ----------21FC-------------------------------
  1831. INT 21 - VIRUS - "Troi" - INSTALLATION CHECK
  1832.     AH = FCh
  1833. Return: AL = A5h if resident
  1834. SeeAlso: AH=FB0Ah"VIRUS",AH=FDh"VIRUS"
  1835. ----------21FD-------------------------------
  1836. INT 21 - DOS v??? - OEM FUNCTION
  1837.     AH = FDh
  1838. SeeAlso: AH=FCh"OEM",AH=FEh"DOS"
  1839. ----------21FD-------------------------------
  1840. INT 21 - VIRUS - "Border" - INSTALLATION CHECK
  1841.     AH = FDh
  1842. Return: AH = 13h if resident
  1843. SeeAlso: AH=FCh"VIRUS",AH=FEh"VIRUS"
  1844. ----------21FE-------------------------------
  1845. INT 21 - DOS v??? - OEM FUNCTION
  1846.     AH = FEh
  1847. SeeAlso: AH=FDh"OEM",AH=FFh"OEM"
  1848. ----------21FE-------------------------------
  1849. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  1850.     AH = FEh
  1851.     AL = number of 55ms time slices to give away
  1852. Return: returns after giving away time slices
  1853. SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS"
  1854. ----------21FE-------------------------------
  1855. INT 21 - VIRUS - "483" - INSTALLATION CHECK
  1856.     AH = FEh
  1857. Return: AH = 00h if resident
  1858. SeeAlso: AH=FDh"VIRUS",AX=FE01h
  1859. ----------21FE01-----------------------------
  1860. INT 21 - VIRUS - "Flip" - INSTALLATION CHECK
  1861.     AX = FE01h
  1862. Return: AX = 01FEh if resident
  1863. SeeAlso: AH=FEh"VIRUS",AX=FE02h
  1864. ----------21FE02-----------------------------
  1865. INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK
  1866.     AX = FE02h
  1867. Return: AX = 01FDh if resident
  1868. SeeAlso: AX=FE01h,AX=FEDCh"VIRUS"
  1869. ----------21FEDC-----------------------------
  1870. INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
  1871.     AX = FEDCh
  1872. Return: AX = CDEFh if installed
  1873. SeeAlso: AH=DCh
  1874. ----------21FEDC-----------------------------
  1875. INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK
  1876.     AX = FEDCh
  1877. Return: AL = DCh if resident
  1878. SeeAlso: AX=FE02h,AH=FFh"VIRUS"
  1879. ----------21FF-------------------------------
  1880. INT 21 - DOS v??? - OEM FUNCTION
  1881.     AH = FFh
  1882. SeeAlso: AH=FEh"OEM"
  1883. ----------21FF-------------------------------
  1884. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  1885.     AH = FFH
  1886.     AL = subfunction
  1887.         00h add installable command
  1888.            BL = mode - bit 0 = 1 callable from DOS prompt
  1889.                bit 1 = 1 callable from application
  1890.            DS:SI -> CR-terminated command name
  1891.            ES:DI -> FAR routine entry point
  1892.         01h remove installable command
  1893.            DS:SI -> CR-terminated command name
  1894.         02h reserved, may be used to test for CED installation
  1895. Return: CF clear if successful
  1896.     CF set on error
  1897.         AX = 01h invalid function
  1898.          02h command not found (subfunction 01h only)
  1899.          08h insufficient memory (subfunction 00h only)
  1900.          0Eh bad data (subfunction 00h only)
  1901.     AH = FFh if CED not installed
  1902. Note:    CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  1903. SeeAlso: AX=0A00h
  1904. ----------21FF-------------------------------
  1905. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  1906.     AH = FFh
  1907.     AL = function
  1908.         01h create file
  1909.         02h open file
  1910.         03h get file statistics
  1911.         04h get time of day
  1912.         05h set time of day
  1913.         06h stat
  1914.         07h system
  1915. SeeAlso: INT 10/AH=FFh"GO32"
  1916. ----------21FF-------------------------------
  1917. INT 21 - DOSED.COM - INSTALLATION CHECK
  1918.     AH = FFh
  1919.     DS:SI -> "DOSED"
  1920.     ES = 0000h
  1921. Return: ES:DI -> "DOSED" if installed
  1922. Note:    DOSED is a free DOS commandline editor/history buffer by Sverre H.
  1923.       Huseby
  1924. ----------21FF-------------------------------
  1925. INT 21 - Topware Network Operating System - ???
  1926.     AH = FFh
  1927.     ???
  1928. Return: ???
  1929. SeeAlso: INT 2F/AX=FF00h
  1930. ----------21FF-------------------------------
  1931. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  1932.     AH = FFh
  1933. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  1934.     AX = 0400h if "Sunday" resident
  1935. SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh
  1936. ----------21FF00DX0078-----------------------
  1937. INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
  1938.     AX = FF00h
  1939.     DX = 0078h
  1940. Return: AL <> 00h if installed
  1941.         GS = segment of kernel if nonzero
  1942. SeeAlso: INT 15/AX=BF02h
  1943. ----------21FF0F-----------------------------
  1944. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  1945.     AX = FF0Fh
  1946. Return: AX = 0101h if resident
  1947. Notes:    FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  1948.       Software Concepts Design
  1949.     the "PSQR/1720" virus calls this function to determine whether
  1950.       FLU_SHOT+ is present
  1951. SeeAlso: AH=FFh"VIRUS",AX=FF10h
  1952. ----------21FF10-----------------------------
  1953. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  1954.     AX = FF10h
  1955. Return: AL = 07h if resident
  1956. SeeAlso: AX=FF0Fh,AX=FFFEh
  1957. ----------21FFFE-----------------------------
  1958. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  1959.     AX = FFFEh
  1960. Return: AX = 0815h if resident
  1961. SeeAlso: AX=FF10h,AX=FFFFh
  1962. ----------21FFFF-----------------------------
  1963. INT 21 - VIRUS - "Ontario" - INSTALLATION CHECK
  1964.     AX = FFFFh
  1965. Return: AX = 0000h if resident
  1966. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  1967. ----------21FFFFCX0000-----------------------
  1968. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  1969.     AX = FFFFh
  1970.     CX = 0000h
  1971. Return: CX = 0006h if resident
  1972. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  1973. ----------22---------------------------------
  1974. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  1975.    specifies the address of the routine which is to be given control after
  1976.    a program is terminated; should never be called directly, since it does not
  1977.    point at an interrupt handler
  1978. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  1979.       termination, and then a FAR JMP is performed to the address in INT 22
  1980.     normally points at the instruction immediately following INT 21/AH=4Bh
  1981.       call which loaded the current program
  1982. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  1983. ----------23---------------------------------
  1984. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  1985.    invoked whenever DOS detects a ^C or ^Break; should never be called directly
  1986. ---DOS 1.x---
  1987. Return: AH = 00h abort program
  1988.     if all registers preserved, restart DOS call
  1989. ---DOS 2+---
  1990. Return: all registers preserved
  1991.     return via RETF or RETF 2 with CF set
  1992.         DOS will abort program with errorlevel 0
  1993.     else (RETF/RETF 2 with CF clear or IRET)
  1994.         interrupted DOS call is restarted
  1995. Notes:    MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  1996.     any DOS call may safely be made within the INT 23 handler, although
  1997.       the handler must to check for a recursive invocation if it does
  1998.       call DOS
  1999. SeeAlso: INT 1B
  2000. ----------24---------------------------------
  2001. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  2002.    invoked when a critical (usually hardware) error is encountered; should
  2003.    never be called directly
  2004.  
  2005. Critical error handler is invoked with:
  2006.     AH = type and processing flags
  2007.         bit 7 clear = disk I/O error
  2008.           set    = -- if block device, bad FAT image in memory
  2009.               -- if char device, error code in DI
  2010.         bit 6  unused
  2011.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  2012.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  2013.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  2014.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  2015.         bit 1 /            10 = root dir  11 = data area
  2016.         bit 0 = 1 if write, 0 if read
  2017.     AL = drive number if AH bit 7 clear
  2018.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  2019.     DI low byte contains error code if AH bit 7 set
  2020.        00h write-protection violation attempted
  2021.        01h unknown unit for driver
  2022.        02h drive not ready
  2023.        03h unknown command given to driver
  2024.        04h data error (bad CRC)
  2025.        05h bad device driver request structure length
  2026.        06h seek error
  2027.        07h unknown media type
  2028.        08h sector not found
  2029.        09h printer out of paper
  2030.        0Ah write fault
  2031.        0Bh read fault
  2032.        0Ch general failure
  2033.        0Dh (DOS 3+) sharing violation
  2034.        0Eh (DOS 3+) lock violation
  2035.        0Fh invalid disk change
  2036.        10h (DOS 3+) FCB unavailable
  2037.        11h (DOS 3+) sharing buffer overflow
  2038.        12h (DOS 4+) code page mismatch
  2039.        13h (DOS 4+) out of input
  2040.        14h (DOS 4+) insufficient disk space
  2041.     STACK:    DWORD    return address for INT 24 call
  2042.         WORD    flags pushed by INT 24
  2043.         WORD    original AX on entry to INT 21
  2044.         WORD    BX
  2045.         WORD    CX
  2046.         WORD    DX
  2047.         WORD    SI
  2048.         WORD    DI
  2049.         WORD    BP
  2050.         WORD    DS
  2051.         WORD    ES
  2052.         DWORD    return address for INT 21 call
  2053.         WORD    flags pushed by INT 21
  2054. Handler must return:
  2055.     AL = action code
  2056.         00h ignore error and continue processing request
  2057.         01h retry operation
  2058.         02h terminate program through the equivalent of INT 21/AH=4Ch
  2059.             (INT 20h for DOS 1.x)
  2060.         03h fail system call in progress
  2061.     SS,SP,DS,ES,BX,CX,DX preserved
  2062. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  2063.     if the handler returns to the application by popping the stack, DOS
  2064.       will be in an unstable state until the first call with AH > 0Ch
  2065.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  2066.       critical errors
  2067.     if IGNORE specified but not allowed, it is turned into FAIL
  2068.     if RETRY specified but not allowed, it is turned into FAIL
  2069.     if FAIL specified but not allowed, it is turned into ABORT
  2070.     (DOS 3+) if a critical error occurs inside the critical error handler,
  2071.       the DOS call is automatically failed
  2072. ----------25---------------------------------
  2073. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  2074.     AL = drive number (00h = A:, 01h = B:, etc)
  2075.     CX = number of sectors to read
  2076.     DX = starting logical sector number (0000h - highest sector on drive) 
  2077.     DS:BX -> buffer for data
  2078. Return: CF clear if successful
  2079.     CF set on error
  2080.         AH = status
  2081.          80h device failed to respond (timeout)
  2082.          40h seek operation failed
  2083.          20h controller failed
  2084.          10h data error (bad CRC)
  2085.          08h DMA failure
  2086.          04h requested sector not found
  2087.          03h write-protected disk (INT 26 only)
  2088.          02h bad address mark
  2089.          01h bad command
  2090.         AL = error code (same as passed to INT 24 in DI)
  2091.     may destroy all other registers except segment registers
  2092. Notes:    original flags are left on stack, and must be popped by caller
  2093.     this call bypasses the DOS filesystem
  2094. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  2095.     invalid drive number
  2096. SeeAlso: INT 13/AH=02h,INT 26
  2097. ----------25---------------------------------
  2098. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  2099.     AL = drive number (0=A, 1=B, etc)
  2100.     CX = FFFFh
  2101.     DS:BX -> disk read packet (see below)
  2102. Return: same as above
  2103. Notes:    partition is potentially >32M (and requires this form of the call) if
  2104.       bit 1 of device attribute word in device driver is set
  2105.     original flags are left on stack, and must be removed by caller
  2106.     this call bypasses the DOS filesystem
  2107. SeeAlso: INT 13/AH=02h,INT 26
  2108.  
  2109. Format of disk read packet:
  2110. Offset    Size    Description
  2111.  00h    DWORD    sector number
  2112.  04h    WORD    number of sectors to read
  2113.  06h    DWORD    transfer address
  2114. ----------25CDCD-----------------------------
  2115. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  2116.     AX = CDCDh
  2117.     DS:BX -> buffer for address (see below)
  2118.     CX = 0001h
  2119.     DX = 0000h
  2120. Return: AX = CDCDh if Stacker installed
  2121.         DS:BX buffer filled
  2122.  
  2123. Format of driver address buffer:
  2124. Offset    Size    Description
  2125.  00h    WORD    signature CDCDh
  2126.  02h    WORD    ??? 0001h
  2127.  04h    DWORD    pointer to start of Stacker device driver
  2128.  
  2129. Format of device driver:
  2130. Offset    Size    Description
  2131.  00h    WORD    signature A55Ah
  2132.  02h    WORD    Stacker version * 64h
  2133.  04h    WORD    offset of volume-specific information offset table
  2134.         (list of WORDs, one per drive, containing offsets to various
  2135.         information)
  2136.  06h 56 BYTEs    n/a
  2137.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  2138.         (use to index into volume-specific info offset table)
  2139.  3Fh 19 BYTEs    n/a
  2140.  52h  4 BYTEs    ASCII string "SWAP"
  2141.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  2142.  
  2143. Format of Stacker boot record:
  2144. Offset    Size    Description
  2145. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  2146. 1F8h    DWORD    pointer to start of Stacker device driver
  2147. 1FCh    WORD    Stacker volume number
  2148. 1FEh    WORD    ???
  2149. ----------25----ALFF-------------------------
  2150. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  2151.     AL = FFh
  2152.     SI = 4358h
  2153. Return: SI = 6378h if installed
  2154.         CX = segment of device driver PC-CACHE.SYS
  2155.         DX = version (major in DH, minor in DL)
  2156. Note:    PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  2157.       access to certain disk drivers for devices such as Bernoulli drives
  2158. SeeAlso: INT 13/AH=A0h
  2159. ----------26---------------------------------
  2160. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  2161.     AL = drive number (00h = A:, 01h = B:, etc)
  2162.     CX = number of sectors to write
  2163.     DX = starting logical sector number (0000h - highest sector on drive) 
  2164.     DS:BX -> data to write
  2165. Return: CF clear if successful
  2166.     CF set on error
  2167.         AH = status
  2168.          80h device failed to respond (timeout)
  2169.          40h seek operation failed
  2170.          20h controller failed
  2171.          10h data error (bad CRC)
  2172.          08h DMA failure
  2173.          04h requested sector not found
  2174.          03h write-protected disk (INT 26 only)
  2175.          02h bad address mark
  2176.          01h bad command
  2177.         AL = error code (same as passed to INT 24 in DI)
  2178.     may destroy all other registers except segment registers
  2179. Notes:    original flags are left on stack, and must be popped by caller
  2180.     this call bypasses the DOS filesystem
  2181. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  2182.     invalid drive number
  2183. SeeAlso: INT 13/AH=03h,INT 25
  2184. ----------26---------------------------------
  2185. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  2186.     AL = drive number (0=A, 1=B, etc)
  2187.     CX = FFFFh
  2188.     DS:BX -> disk write packet (see below)
  2189. Return: same as above
  2190. Notes:    partition is potentially >32M (and requires this form of the call) if
  2191.       bit 1 of device attribute word in device driver is set
  2192.     original flags are left on stack, and must be removed by caller
  2193.     this call bypasses the DOS filesystem
  2194. SeeAlso: INT 13/AH=03h,INT 25
  2195.  
  2196. Format of disk write packet:
  2197. Offset    Size    Description
  2198.  00h    DWORD    sector number
  2199.  04h    WORD    number of sectors to read
  2200.  06h    DWORD    transfer address
  2201. ----------27---------------------------------
  2202. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  2203.     DX = number of bytes to keep resident (max FFF0h)
  2204.     CS = segment of PSP
  2205. Return: never
  2206. Notes:    this is an obsolete call
  2207.     INT 22, INT 23, and INT 24 are restored from the PSP
  2208.     does not close any open files
  2209.     the minimum number of bytes which will remain resident is 110h for
  2210.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  2211.       implements this service in COMMAND.COM rather than the DOS kernel
  2212. SeeAlso: INT 21/AH=31h
  2213. ----------28---------------------------------
  2214. INT 28 - DOS 2+ - DOS IDLE INTERRUPT
  2215.    Invoked each time one of the DOS character input functions loops while
  2216.    waiting for input.  Since a DOS call is in progress even though DOS is
  2217.    actually idle during such input waits, hooking this function is necessary
  2218.    to allow a TSR to perform DOS calls while the foreground program is
  2219.    waiting for user input.  The INT 28h handler may invoke any INT 21 function
  2220.    except functions 00h through 0Ch.  Under DOS 2.x, the critical error flag
  2221.    (the byte immediately after the InDOS flag) must be set in order to call
  2222.    DOS functions 50h/51h without destroying the DOS stacks.
  2223.  
  2224. Notes:    calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON
  2225.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  2226.       set to 01h; if larger, DOS is truly busy and should not be reentered
  2227.     the default handler is an IRET instruction
  2228.     supported in OS/2 compatibility box
  2229. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h
  2230. ----------29---------------------------------
  2231. INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
  2232.     AL = character to display
  2233. Return: nothing
  2234. Notes:    automatically called when writing to a device with bit 4 of its device
  2235.       driver header set (see also INT 21/AH=52h)
  2236.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  2237.       vector and assume that ANSI.SYS is installed if the segment is larger
  2238.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  2239.     the default handler under DESQview 2.2 understands the <Esc>[2J
  2240.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  2241. SeeAlso: INT 79
  2242. ----------2A00-------------------------------
  2243. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  2244.     AH = 00h
  2245. Return: AH <> 00h if installed
  2246. SeeAlso: INT 5C
  2247. ----------2A0000-----------------------------
  2248. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  2249.     AX = 0000h
  2250. Return: AH = DDh
  2251. SeeAlso: INT 5B
  2252. ----------2A01-------------------------------
  2253. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  2254.     AH = 01h
  2255.     ES:BX -> NCB (see INT 5C)
  2256. Return: AL = NetBIOS error code
  2257.     AH = 00h if no error
  2258.        = 01h on error
  2259. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  2260. ----------2A02-------------------------------
  2261. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  2262.     AH = 02h
  2263.     ???
  2264. Return: ???
  2265. ----------2A0300-----------------------------
  2266. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  2267.     AX = 0300h
  2268.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  2269.         must include the colon)
  2270. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  2271.     CF set if access via files only
  2272. Notes:    do not use direct disk accesses if this function returns CF set or the
  2273.       device is redirected (INT 21/AX=5F02h)
  2274.     may take some time to execute
  2275.     called by DOS kernel on INT 25 and INT 26
  2276. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  2277. ----------2A04-------------------------------
  2278. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  2279.     AH = 04h
  2280.     AL = error retry
  2281.         00h automatically retry request on errors 09h, 12h, and 21h
  2282.         01h no retry
  2283.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  2284. Return: AX = 0000h if successful
  2285.     AH = 01h on error
  2286.         AL = error code
  2287. Note:    invokes either INT 5B or INT 5C as appropriate
  2288. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  2289. ----------2A0500-----------------------------
  2290. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  2291.     AX = 0500h
  2292. Return: AX reserved
  2293.     BX = number of network names available
  2294.     CX = number of network control blocks available
  2295.     DX = number of network sessions available
  2296. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  2297. ----------2A06-------------------------------
  2298. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  2299.     AH = 06h
  2300.     AL = 01h set concatenation mode (all printer output put in one job)
  2301.          02h set truncation mode (default)
  2302.          printer open/close starts new print job
  2303.          03h flush printer output and start new print job
  2304. Return: CF set on error
  2305.         AX = error code
  2306.     CF clear if successful
  2307. Note:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  2308. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  2309. ----------2A2001-----------------------------
  2310. INT 2A - MS Networks or NETBIOS - ???
  2311.     AX = 2001h
  2312.     ???
  2313. Return: ???
  2314. Note:    intercepted by DESQview 2.x
  2315. ----------2A2002-----------------------------
  2316. INT 2A - NETWORK - ???
  2317.     AX = 2002h
  2318.     ???
  2319. Return: ???
  2320. Note:    called by MSDOS 3.30 APPEND
  2321. ----------2A2003-----------------------------
  2322. INT 2A - NETWORK - ???
  2323.     AX = 2003h
  2324.     ???
  2325. Return: ???
  2326. Note:    called by MSDOS 3.30 APPEND
  2327. ----------2A7802-----------------------------
  2328. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  2329.     AX = 7802h
  2330.     ES:DI -> 8-byte buffer to be filled
  2331. Return: AL = 00h if no user logged on to Extended Services
  2332.     AL <> 00h if user logged on to Extended Services
  2333.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  2334. ----------2A80-------------------------------
  2335. INT 2A - NETWORK - BEGIN DOS CRITICAL SECTION
  2336.     AH = 80h
  2337.     AL = critical section number (00h-0Fh)
  2338.         01h DOS kernel, SHARE.EXE
  2339.         apparently for maintaining the integrity of DOS/SHARE/NET
  2340.           data structures
  2341.         02h DOS kernel
  2342.         ensures that no multitasking occurs while DOS is calling an
  2343.           installable device driver
  2344.         05h DOS 4.x only IFSFUNC
  2345.         06h DOS 4.x only IFSFUNC
  2346.         08h ASSIGN.COM
  2347. Notes:    normally hooked to avoid interrupting a critical section, rather than
  2348.       called
  2349.     the handler should ensure that none of the critical sections are
  2350.       reentered, usually by suspending a task which attempts to reenter
  2351.       an active critical section
  2352.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  2353.       is patched.  DOS 3.1 through 3.31 contain a zero-terminated list of
  2354.       words beginning at offset 02C3h in the IBMDOS segment; each word
  2355.       contains the offset within the IBMDOS segment of a byte which must
  2356.       be changed from C3h to 50h to enable use of critical sections.
  2357. SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2358. ----------2A81-------------------------------
  2359. INT 2A - NETWORK - END DOS CRITICAL SECTION
  2360.     AH = 81h
  2361.     AL = critical section number (00h-0Fh) (see AH=80h)
  2362. Notes:    normally hooked rather than called
  2363.     the handler should reawaken any tasks which were suspended due to an
  2364.       attempt to enter the specified critical section
  2365. SeeAlso: AH=80h,AH=82h,AH=87h
  2366. ----------2A82-------------------------------
  2367. INT 2A - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  2368.     AH = 82h
  2369. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  2370.       greater than 0Ch except 59h, and on process termination
  2371.     the handler should reawaken any tasks which were suspended due to an
  2372.       attempt to enter one of the critical sections 0 through 7
  2373. SeeAlso: AH=81h
  2374. ----------2A84-------------------------------
  2375. INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
  2376.     AH = 84h
  2377. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  2378.       loop
  2379. SeeAlso: INT 28
  2380. ----------2A87-------------------------------
  2381. INT 2A - PRINT??? - CRITICAL SECTION
  2382.     AH = 87h
  2383.     AL = start/end
  2384.         00h start
  2385.         01h end
  2386. Note:    called by PRINT.COM
  2387. SeeAlso: AH=80h,AH=81h
  2388. ----------2A89-------------------------------
  2389. INT 2A - Network - ???
  2390.     AH = 89h
  2391.     AL = ???  (ASSIGN uses 08h)
  2392.     ???
  2393. Return: ???
  2394. ----------2A90-------------------------------
  2395. INT 2A - IBM PC 3270 EMULATION PROGRAM - ???
  2396.     AH = 90h
  2397.     ???
  2398. Return: ???
  2399. ----------2AC2-------------------------------
  2400. INT 2A - Network - ???
  2401.     AH = C2h
  2402.     AL = subfunction
  2403.         07h ???
  2404.         08h ???
  2405.     BX = 0001h
  2406.     ???
  2407. Return: ???
  2408. Note:    called by DOS 3.30 APPEND
  2409. ----------2B---------------------------------
  2410. INT 2B - DOS 2+ - RESERVED
  2411. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2412. ----------2C---------------------------------
  2413. INT 2C - DOS 2+ - RESERVED
  2414. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2415. ----------2C---------------------------------
  2416. INT 2C - STARLITE architecture - KERNEL API
  2417. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  2418.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  2419.       be released in 1991.    The interrupt number is subject to change
  2420.       before the actual release.
  2421. ----------2D---------------------------------
  2422. INT 2D - DOS 2+ - RESERVED
  2423. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2424. ----------2D---------------------------------
  2425. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [proposal v3.4]
  2426.     AH = multiplex number
  2427.     AL = function
  2428.         00h installation check
  2429.         Return: AL = FFh if multiplex number in use
  2430.                 CX = version number (CH = major, CL = minor)
  2431.                 DX:DI -> signature string (see below) identifying
  2432.                     the program using the multiplex number
  2433.             AL = 00h if free
  2434.         01h get entry point
  2435.         Return: AL = FFh if entry point supported
  2436.                 DX:BX -> entry point for bypassing interrupt chain
  2437.             AL = 00h if all API calls via INT 2D
  2438.         02h uninstall
  2439.             DX:BX = return address for successful uninstall (may be
  2440.             ignored by TSR)
  2441.         Return: AL = status
  2442.                 00h not implemented
  2443.                 01h unsuccessful
  2444.                 02h can not uninstall yet, will do so when able
  2445.                 03h safe to remove, but no resident uninstaller
  2446.                     (TSR still enabled)
  2447.                     BX = segment of memory block with resident code
  2448.                 04h safe to remove, but no resident uninstaller
  2449.                     (TSR now disabled)
  2450.                     BX = segment of memory block with resident code
  2451.                 05h not safe to remove now, try again later
  2452.                 FFh successful
  2453.             return at DX:BX with AX destroyed if successful and
  2454.               TSR honors specific return address
  2455.         03h request pop-up
  2456.         Return: AL = status
  2457.                 00h not implemented or TSR is not a pop-up
  2458.                 01h can not pop up at this time, try again later
  2459.                 02h can not pop up yet, will do so when able
  2460.                 03h already popped up
  2461.                 04h unable to pop up, user intervention required
  2462.                     BX = standard reason code
  2463.                     0000h unknown failure 
  2464.                     0001h interrupt chain passes through memory
  2465.                           which must be swapped out to pop up
  2466.                     0002h swap-in failed
  2467.                 CX = application's reason code if nonzero
  2468.                 FFh TSR popped up and was exited by user
  2469.                 BX = return value
  2470.                     0000h no return value
  2471.                     0001h TSR unloaded
  2472.                     0002h-00FFh reserved
  2473.                     0100h-FFFFh application-dependent
  2474.         04h determine chained interrupts
  2475.             BL = interrupt number (except 2Dh)
  2476.         Return: AL = status
  2477.                 00h not implemented
  2478.                 01h unable to determine
  2479.                 02h interrupt hooked
  2480.                 03h interrupt hooked, address returned
  2481.                     DX:BX -> TSR's interrupt BL handler
  2482.                 04h list of hooked interrupts returned
  2483.                     DX:BX -> interrupt hook list (see below)
  2484.                 FFh interrupt not hooked
  2485.         Notes:    since INT 2D is known to be hooked, the resident code
  2486.               need not test for BL=2Dh (to minimize its size), and
  2487.               the return value is therefore undefined in that case.
  2488.             BL is ignored if the TSR returns AL=04h; in that case,
  2489.               the caller needs to scan the return list rather than
  2490.               making additional calls to this function.  If the
  2491.               return is not 00h or 04h, then the caller must cycle
  2492.               through the remaining interrupt numbers it wishes to
  2493.               check.
  2494.             return values 01h thru 03h are disparaged and may be
  2495.               removed from future versions of the specification;
  2496.               they are included for compatibility with version 3.3
  2497.         05h-0Fh reserved for future enhancements
  2498.         Return: AL = 00h (not implemented)
  2499.         other  application-dependent
  2500. Notes:    programs should not use fixed multiplex numbers; rather, a program
  2501.       should scan all multiplex numbers from 00h to FFh, remembering the
  2502.       first unused multiplex in case the program is not yet installed.
  2503.       For multiplex numbers which are in use, the program should compare
  2504.       the first 16 bytes of the signature string to determine whether it
  2505.       is already installed on that multiplex number.  If not previously
  2506.       installed, it should use the first free multiplex number.
  2507.     functions other than 00h are not valid unless a program is installed
  2508.       on the selected multiplex number
  2509.     to be considered fully compliant with version 3.4 of the specification,
  2510.       programs must implement at least functions 00h, 02h (no resident
  2511.       uninstall code required), and 04h (return value 04h).  The absolute
  2512.       minimum implementation has an overhead of 64 bytes plus 22 bytes per
  2513.       hooked interrupt (for the interrupt sharing protocol header and hook
  2514.       list entry).
  2515.     the signature string and description may be used by memory mappers
  2516.       to display the installed programs
  2517.     users of this proposal should adhere to the IBM interrupt sharing
  2518.       protocol (see below), which will permit removal of TSRs in
  2519.       arbitrary order and interrupt handler reordering.  All TSRs
  2520.       following this proposal should be removable, though they need not
  2521.       keep the code for removing themselves resident; it is acceptable
  2522.       for a separate program to perform the removal.
  2523.     A sample implementation including example TSRs and utility programs
  2524.       may be found in a separate package distributed as AMISLnnn.ZIP
  2525.       (AMISL081.ZIP as of this writing).
  2526.     Please let me know if you choose to follow this proposal.  A list of
  2527.       the private API calls you use would be appreciated, as well.
  2528. SeeAlso: INT 2F
  2529.  
  2530. Format of signature string:
  2531. Offset    Size    Description
  2532.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  2533.  08h  8 BYTEs    blank-padded product name
  2534.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  2535. Note:    it is not necessary to reserve a full 64 bytes for the description,
  2536.       just enough to store the actual ASCIZ string
  2537.  
  2538. Format of interrupt hook list [array]:
  2539. Offset    Size    Description
  2540.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  2541.  01h    WORD    offset within hook list's segment of the interrupt handler
  2542.          this will point at the initial short jump of the interrupt
  2543.         sharing protocol header (see below)
  2544.  
  2545. Format of interrupt sharing protocol interrupt handler entry point:
  2546. Offset    Size    Description
  2547.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  2548.         following this data block (EBh 10h)
  2549.  02h    DWORD    address of next handler in chain
  2550.  06h    WORD    signature 424Bh
  2551.  08h    BYTE    EOI flag
  2552.         00h software interrupt or secondary hardware interrupt handler
  2553.         80h primary hardware interrupt handler (will issue EOI)
  2554.  09h  2 BYTEs    short jump to hardware reset routine
  2555.         must point at a valid FAR procedure (may be just RETF)
  2556.  0Bh  7 BYTEs    reserved (0)
  2557.  
  2558. Signatures known to be in use:
  2559.  'heathh  ' 'Monitor '
  2560.  'Ralf B  ' 'FASTMOUS'  example TSR included with sample AMIS library code
  2561.  'Ralf B  ' 'NOLPT n '  example TSR -- turn LPTn into bit-bucket
  2562.  'Ralf B  ' 'NOTE    '  example TSR -- popup note-taker
  2563.  'Ralf B  ' 'SWITCHAR'  example TSR -- add switchar() support removed from DOS5
  2564.  'Ralf B  ' 'VGABLANK'  example TSR -- VGA-only screen blanker
  2565.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  2566.              testing programs (v1.1+)
  2567.         'RECALL  '    public domain commandline editor and history (v1.2+)
  2568. ----------2E---------------------------------
  2569. INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2570.     DS:SI -> commandline to execute (see below)
  2571. Return: all registers except CS:IP destroyed
  2572.     AX = status (4DOS v4.0)
  2573.        0000h successful
  2574.        FFFFh error before processing command (not enough memory, etc)
  2575.        other error number returned by command
  2576. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2577.       internal commands) without loading another copy of COMMAND.COM
  2578.     if COMMAND.COM is the user's command interpreter, the primary copy
  2579.       executes the command; this allows the master environment to be
  2580.       modified by issuing a "SET" command, but changes in the master
  2581.       environment will not become effective until all programs descended
  2582.       from the primary COMMAND.COM terminate
  2583.     since COMMAND.COM processes the string as if typed from the keyboard,
  2584.       the transient portion needs to be present, and the calling program
  2585.       must ensure that sufficient memory to load the transient portion can
  2586.       be allocated by DOS if necessary
  2587.     results are unpredictable if invoked by a program run from a batch file
  2588.       because this call is not reentrant and COMMAND.COM uses the same
  2589.       internal variables when processing a batch file
  2590.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2591.       has been loaded
  2592.  
  2593. Format of commandline:
  2594. Offset    Size    Description
  2595.  00h    BYTE    length of command string, not counting trailing CR
  2596.  01h    var    command string
  2597.   N    BYTE    0Dh (CR)
  2598. ----------2E----BXE22E-----------------------
  2599. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2600.     BX = E22Eh
  2601.     DS:SI -> zero byte
  2602. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2603. ----------2F---------------------------------
  2604. INT 2F - Multiplex - NOTES
  2605.     AH = identifier of program which is to handle the interrupt
  2606.        00h-7Fh reserved for DOS
  2607.        C0h-FFh reserved for applications
  2608.     AL is the function code
  2609.    This is a general mechanism for verifying the presence of a TSR and 
  2610.    communicating with it.  When searching for a free identifier code for AH
  2611.    using the installation check (AL=00h), the calling program should set
  2612.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2613.    and SS:SP to be valid on return, since numerous programs now use additional
  2614.    registers on input and/or output for the installation check.
  2615. Note:    Since the multiplex chain is growing so long, and beginning to
  2616.       experience multiplex number collisions, I am proposing an alternate
  2617.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2618.       multiplex, please let me know.
  2619. SeeAlso: INT 2D
  2620. ----------2F---------------------------------
  2621. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  2622.     AH = xx (dynamically assigned based upon a search for a multiplex
  2623.          number which doesn't answer installed)
  2624.     AL = 00h installation check
  2625.     ES:DI = EBEBh:BEBEh
  2626. Return: AL = 00h not installed
  2627.          01h not installed, not OK to install
  2628.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2629.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2630.          short form of the manufacturer's name, PPPPPPPP is a product
  2631.          name and NNNN is the product's version number
  2632. ----------2F---------------------------------
  2633. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2634.     AH = programmer-selected multiplex number
  2635.     AL = function
  2636.         00h installation check
  2637.         Return: AL = FFh if installed
  2638.         01h get TSR interrupt vectors
  2639.         Return: DX:AX -> vector table (see below)
  2640.         02h get TSR code segment
  2641.         Return: AX = code segment for all interrupt handlers
  2642.         03h call user exit routine and release TSR's memory
  2643.         04h get signature string
  2644.         Return: DX:AX -> counted string containing signature
  2645.         05h get TSR's INT 2F handler
  2646.         Return: DX:AX -> INT 2F handler
  2647.         06h enable/disable TSR
  2648.         BL = new state (00h disabled, 01h enabled)
  2649.         07h activate TSR (popup if not disabled)
  2650.         08h get hotkeys
  2651.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2652.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2653.         09h set hotkey
  2654.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2655.         CX = new hotkey (CH = keyflags, CL = scancode)
  2656.         0Ah-1Fh reserved
  2657.  
  2658. Format of vector table entry:
  2659. Offset    Size    Description
  2660.  00h    BYTE    vector number (00h = end of table)
  2661.  01h    DWORD    original vector
  2662.  05h    WORD    offset of interrupt handler in TSR's code segment
  2663. ----------2F00-------------------------------
  2664. INT 2F U - DOS 2.x PRINT.COM - ???
  2665.     AH = 00h
  2666.     ???
  2667. Return: ???
  2668. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2669.     values in AH other than 00h or 01h cause PRINT to return the number of
  2670.       files in the queue in AH
  2671. SeeAlso: AH=01h
  2672. ----------2F0080-----------------------------
  2673. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  2674.     AX = 0080h
  2675. Return: after PRINT executes
  2676. ----------2F01-------------------------------
  2677. INT 2F U - DOS 2.x PRINT.COM - ???
  2678.     AH = 01h
  2679.     ???
  2680. Return: ???
  2681. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2682.     values in AH other than 00h or 01h cause PRINT to return the number of
  2683.       files in the queue in AH
  2684. SeeAlso: AH=00h
  2685. ----------2F0100-----------------------------
  2686. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  2687.     AX = 0100h
  2688. Return: AL = status
  2689.         00h not installed
  2690.         01h not installed, but not OK to install
  2691.         FFh installed
  2692. SeeAlso: AX=0101h
  2693. ----------2F0101-----------------------------
  2694. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  2695.     AX = 0101h
  2696.     DS:DX -> submit packet (see below)
  2697. Return: CF clear if successful
  2698.         AL = 01h added to queue
  2699.          9Eh now printing
  2700.     CF set on error
  2701.         AX = error code (see also INT 21/AH=59h)
  2702.         01h invalid function
  2703.         02h file not found
  2704.         03h path not found
  2705.         04h out of file handles
  2706.         05h access denied
  2707.         08h print queue full
  2708.         09h spooler busy
  2709.         0Ch name too long
  2710.         0Fh invalid drive
  2711. SeeAlso: AX=0102h
  2712.  
  2713. Format of submit packet:
  2714. Offset    Size    Description
  2715.  00h    BYTE    level (must be 00h)
  2716.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2717. ----------2F0102-----------------------------
  2718. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  2719.     AX = 0102h
  2720.     DS:DX -> ASCIZ filename (wildcards allowed)
  2721. Return: CF clear if successful
  2722.     CF set on error
  2723.         AX = error code (see AX=0101h)
  2724. SeeAlso: AX=0101h,AX=0103h
  2725. ----------2F0103-----------------------------
  2726. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  2727.     AX = 0103h
  2728. Return: CF clear if successful
  2729.     CF set on error
  2730.         AX = error code (see AX=0101h)
  2731. SeeAlso: AX=0102h
  2732. ----------2F0104-----------------------------
  2733. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  2734.     AX = 0104h
  2735. Return: CF clear if successful
  2736.         DX = error count
  2737.         DS:SI -> print queue
  2738.     CF set on error
  2739.         AX = error code (see AX=0101h)
  2740. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2741.       an empty filename; the first name is the file currently being printed
  2742.     printing is stopped until AX=0105h is called to prevent the queue
  2743.       from changing while the filenames are being read
  2744. SeeAlso: AX=0101h,AX=0105h
  2745. ----------2F0105-----------------------------
  2746. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  2747.     AX = 0105h
  2748. Return: CF clear if successful
  2749.     CF set on error
  2750.         AX = error code (see AX=0101h)
  2751. SeeAlso: AX=0104h
  2752. ----------2F0106-----------------------------
  2753. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  2754.     AX = 0106h
  2755. Return: CF set if files in print queue
  2756.         AX = error code 0008h (queue full)
  2757.         DS:SI -> device driver header
  2758.     CF clear if print queue empty
  2759.         AX = 0000h
  2760. Note:    documented for DOS 5+, but not documented for prior versions
  2761. SeeAlso: AX=0104h
  2762. ----------2F0200-----------------------------
  2763. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2764.     AX = 0200h
  2765. Return: AL = FFh if installed
  2766. ----------2F0201-----------------------------
  2767. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2768.     AX = 0201h
  2769. Return: nothing???
  2770. Notes:    called by DOS 3.3+ PRINT.COM
  2771.     AX=0202h appears to be the opposite function
  2772. SeeAlso: AX=0202h
  2773. ----------2F0202-----------------------------
  2774. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2775.     AX = 0202h
  2776.     ???
  2777. Return: nothing???
  2778. Note:    called by DOS 3.3+ PRINT.COM
  2779. SeeAlso: AX=0201h
  2780. ----------2F0203-----------------------------
  2781. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2782.     AX = 0203h
  2783. Return: nothing???
  2784. Notes:    called by DOS 3.3+ PRINT.COM
  2785.     AX=0204h appears to be the opposite function
  2786. SeeAlso: AX=0204h
  2787. ----------2F0204-----------------------------
  2788. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2789.     AX = 0204h
  2790.     ???
  2791. Return: nothing???
  2792. Note:    called by DOS 3.3 PRINT.COM
  2793. ----------2F---------------------------------
  2794. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2795.     AX = 02xxh
  2796.     ???
  2797. Return: ???
  2798. ----------2F0500-----------------------------
  2799. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2800.     AX = 0500h
  2801. Return: AL = 00h not installed, OK to install
  2802.          01h not installed, can't install
  2803.          FFh installed
  2804. Note:    this set of functions allows a user program to partially or completely
  2805.       override the default critical error handler's message in COMMAND.COM
  2806. SeeAlso: AH=05h,INT 24
  2807. ----------2F05-------------------------------
  2808. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2809.     AH = 05h
  2810. ---DOS 3.x---
  2811.     AL = extended error code (not zero)
  2812. ---DOS 4+ ---
  2813.     AL = error type
  2814.         01h DOS extended error code
  2815.         02h parameter error
  2816.     BX = error code
  2817. Return: CF clear if successful
  2818.         ES:DI -> ASCIZ error message (read-only)
  2819.         AL = ???
  2820.     CF set if error code can't be converted to string
  2821. Notes:    called at start of COMMAND.COM's default critical error handler if 
  2822.       installed by a user program, allowing partial or complete overriding
  2823.       of the default error message
  2824.     subfunction 02h called by many DOS 4 external programs
  2825. SeeAlso: AX=122Eh,INT 24
  2826. ----------2F0600-----------------------------
  2827. INT 2F - DOS v3.0+ ASSIGN - INSTALLATION CHECK
  2828.     AX = 0600h
  2829. Return: AL = status
  2830.         00h not installed
  2831.         01h not installed, but not OK to install
  2832.         FFh installed
  2833. Note:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  2834.       (see INT 21/AX=2152h)
  2835. SeeAlso: AX=0601h,INT 21/AX=2152h
  2836. ----------2F0601-----------------------------
  2837. INT 2F U - DOS v3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2838.     AX = 0601h
  2839. Return: ES = segment of ASSIGN work area and assignment table
  2840. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  2841.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  2842. SeeAlso: AX=0600h
  2843. ----------2F0800-----------------------------
  2844. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  2845.     AX = 0800h
  2846. Return:    AL = 00h not installed, OK to install
  2847.          01h not installed, not OK to install
  2848.          FFh installed
  2849. Note:    supported by DR-DOS 5.0
  2850. ----------2F0801-----------------------------
  2851. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2852.     AX = 0801h
  2853.     DS:DI -> drive data table (see AX=0803h)
  2854. Notes:    moves down internal list of drive data tables, copying and modifying
  2855.       the drive description flags word for tables referencing same physical
  2856.       drive
  2857.     data table appended to chain of tables
  2858.     supported by DR-DOS 5.0
  2859. SeeAlso: AX=0803h
  2860. ----------2F0802-----------------------------
  2861. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2862.     AX = 0802h
  2863.     ES:BX -> device driver request header (see below)
  2864. Return: request header updated as per requested operation
  2865. Note:    supported by DR-DOS 5.0
  2866.  
  2867. Format of device driver request header:
  2868. Offset    Size    Description
  2869.  00h    BYTE    length of request header
  2870.  01h    BYTE    subunit within device driver
  2871.  02h    BYTE    command code (see below)
  2872.  03h    WORD    status (filled in by device driver)
  2873.         bit 15: error
  2874.         bits 14-11: reserved
  2875.         bit 10: ??? set by DOS kernel on entry to some driver calls
  2876.         bit 9: busy
  2877.         bit 8: done
  2878.         bits 7-0: error code if bit 15 set (see below)
  2879. ---DOS---
  2880.  05h  8 BYTEs    reserved (unused in DOS 2.x and 3.x)
  2881. ---STARLITE architecture---
  2882.  05h    DWORD    pointer to next request header
  2883.  09h  4 BYTEs    reserved
  2884. ---command code 00h---
  2885.  0Dh    BYTE    number of units (set by driver)
  2886.  0Eh    DWORD    address of first free byte following driver (set by driver)
  2887.  12h    DWORD    pointer to BPB array (set by block drivers only)
  2888.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  2889. ---command code 01h---
  2890.  0Dh    BYTE    media descriptor
  2891.  0Eh    BYTE    returned status
  2892.         00h don't know
  2893.         01h media has not changed
  2894.         FFh media has been changed
  2895.  0Fh    DWORD    (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in
  2896.           device header set and disk changed (set by driver)
  2897. ---command code 02h---
  2898.  0Dh    BYTE    media descriptor
  2899.  0Eh    DWORD    transfer address
  2900.         -> scratch sector if NON-IBM FORMAT bit in device header set
  2901.         -> first FAT sector otherwise
  2902.  12h    DWORD    pointer to BPB (set by driver)
  2903. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  2904.  0Dh    BYTE    media descriptor (block devices only)
  2905.  0Eh    DWORD    transfer address
  2906.  12h    WORD    byte count (character devices) or sector count (block devices)
  2907.  14h    WORD    starting sector number (block devices only)
  2908.  16h    DWORD    (DOS 3+) pointer to volume label if error 0Fh (set by driver)
  2909. ---command codes 04h,08h,09h---
  2910.  0Dh    BYTE    media descriptor (block devices only)
  2911.  0Eh    DWORD    transfer address
  2912.  12h    WORD    byte count (character devices) or sector count (block devices)
  2913.  14h    WORD    starting sector number (block devices only)
  2914.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  2915.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  2916.         device attribute word bit 1 set only) (see INT 21/AH=52h)
  2917. ---command code 05h---
  2918.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  2919. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh,85h,88h---
  2920.  no further fields
  2921. ---command code 10h---
  2922.  0Dh    BYTE    unused
  2923.  0Eh    DWORD    transfer address
  2924.  12h    WORD    byte count
  2925. ---command codes 13h,19h---
  2926.  0Dh    BYTE    category code
  2927.         00h unknown
  2928.         01h COMn:
  2929.         03h CON
  2930.         05h LPTn:
  2931.         08h disk
  2932.         9Eh (STARLITE) Media Access Control driver
  2933.  0Eh    BYTE    function code
  2934.         00h (STARLITE) MAC Bind request
  2935.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  2936.  11h    WORD    offset of device driver header
  2937.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  2938. ---command codes 80h,82h---
  2939.  0Dh    BYTE    addressing mode
  2940.         00h HSG (default)
  2941.         01h Phillips/Sony Red Book
  2942.  0Eh    DWORD    transfer address (ignored for command 82h)
  2943.  12h    WORD    number of sectors to read
  2944.         (if 0 for command 82h, request is an advisory seek)
  2945.  14h    DWORD    starting sector number
  2946.         logical sector number in HSG mode
  2947.         frame/second/minute/unused in Red Book mode
  2948.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2949.  18h    BYTE    data read mode
  2950.         00h cooked (2048 bytes per frame)
  2951.         01h raw (2352 bytes per frame, including EDC/ECC)
  2952.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2953.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2954. ---command code 83h---
  2955.  0Dh    BYTE    addressing mode (see above)
  2956.  0Eh    DWORD    transfer address (ignored)
  2957.  12h    WORD    number of sectors to read (ignored)
  2958.  14h    DWORD    starting sector number (see also above)
  2959. ---command code 84h---
  2960.  0Dh    BYTE    addressing mode (see above)
  2961.  0Eh    DWORD    starting sector number (see also above)
  2962.  12h    DWORD    number of sectors to play
  2963. ---command codes 86h,87h---
  2964.  0Dh    BYTE    addressing mode (see above)
  2965.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2966.  12h    WORD    number of sectors to write
  2967.  14h    DWORD    starting sector number (see also above)
  2968.  18h    BYTE    write mode
  2969.         00h mode 0 (write all zeros)
  2970.         01h mode 1 (default) (2048 bytes per sector)
  2971.         02h mode 2 form 1 (2048 bytes per sector)
  2972.         03h mode 2 form 2 (2336 bytes per sector)
  2973.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2974.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2975.  
  2976. Values for command code:
  2977.     00h INIT
  2978.     01h MEDIA CHECK (block devices)
  2979.     02h BUILD BPB (block devices)
  2980.     03h IOCTL INPUT
  2981.     04h INPUT
  2982.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2983.     06h INPUT STATUS (character devices)
  2984.     07h INPUT FLUSH (character devices)
  2985.     08h OUTPUT
  2986.     09h OUTPUT WITH VERIFY
  2987.     0Ah OUTPUT STATUS (character devices)
  2988.     0Bh OUTPUT FLUSH (character devices)
  2989.     0Ch IOCTL OUTPUT
  2990.     0Dh (DOS 3+) DEVICE OPEN
  2991.     0Eh (DOS 3+) DEVICE CLOSE
  2992.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  2993.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  2994.     11h unused
  2995.     12h unused
  2996.     13h (DOS 3.2+) GENERIC IOCTL
  2997.     14h unused
  2998.     15h unused
  2999.     16h unused
  3000.     17h (DOS 3.2+) GET LOGICAL DEVICE
  3001.     18h (DOS 3.2+) SET LOGICAL DEVICE
  3002.     19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  3003.     80h (CD-ROM) READ LONG
  3004.     81h (CD-ROM) reserved
  3005.     82h (CD-ROM) READ LONG PREFETCH
  3006.     83h (CD-ROM) SEEK
  3007.     84h (CD-ROM) PLAY AUDIO
  3008.     85h (CD-ROM) STOP AUDIO
  3009.     86h (CD-ROM) WRITE LONG
  3010.     87h (CD-ROM) WRITE LONG VERIFY
  3011.     88h (CD-ROM) RESUME AUDIO
  3012.  
  3013. Values for error code:
  3014.     00h write-protect violation
  3015.     01h unknown unit
  3016.     02h drive not ready
  3017.     03h unknown command
  3018.     04h CRC error
  3019.     05h bad drive request structure length
  3020.     06h seek error
  3021.     07h unknown media
  3022.     08h sector not found
  3023.     09h printer out of paper
  3024.     0Ah write fault
  3025.     0Bh read fault
  3026.     0Ch general failure
  3027.     0Dh reserved
  3028.     0Eh (CD-ROM) media unavailable
  3029.     0Fh invalid disk change
  3030. ----------2F0803-----------------------------
  3031. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  3032.     AX = 0803h
  3033. Return: DS:DI -> first drive data table in list
  3034. Note:    not available under DR-DOS 5.0
  3035. SeeAlso: AX=0801h
  3036.  
  3037. Format of DOS 3.30 drive data table:
  3038. Offset    Size    Description
  3039.  00h    DWORD    pointer to next table
  3040.  04h    BYTE    physical unit number (for INT 13)
  3041.  05h    BYTE    logical drive number
  3042.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3043.         Offset    Size    Description
  3044.          00h    WORD    bytes per sector
  3045.          02h    BYTE    sectors per cluster, FFh if unknown
  3046.          03h    WORD    number of reserved sectors
  3047.          05h    BYTE    number of FATs
  3048.          06h    WORD    number of root dir entries
  3049.          08h    WORD    total sectors
  3050.          0Ah    BYTE    media descriptor, 00h if unknown
  3051.          0Bh    WORD    sectors per FAT
  3052.          0Dh    WORD    sectors per track
  3053.          0Fh    WORD    number of heads
  3054.          11h    WORD    number of hidden sectors
  3055.  19h    BYTE    flags
  3056.         bit 6: 16-bit FAT instead of 12-bit FAT
  3057.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3058.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3059.         fixed media)
  3060.  27h    BYTE    terminating null for volume label???
  3061.  28h    BYTE    device type (see INT 21/AX=440Dh)
  3062.  29h    WORD    bit flags describing drive
  3063.         bit 0: fixed media
  3064.         bit 1: door lock supported
  3065.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  3066.         bit 3: all sectors in a track are the same size
  3067.         bit 4: physical drive has multiple logical units
  3068.         bit 5: current logical drive for physical drive
  3069.         bit 6: ???
  3070.         bit 7: ???
  3071.         bit 8: ??? (related to disk change detection)
  3072.  2Bh    WORD    number of cylinders
  3073.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3074.  40h  3 BYTEs    ???
  3075.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3076.         (apparently only MSDOS 3.30 fixed media, nulls for removable
  3077.         media and PCDOS 3.30)
  3078.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3079. ---removable media---
  3080.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3081. ---fixed media---
  3082.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3083.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3084.         drive (always FFFFh if primary partition)
  3085.  
  3086. Format of COMPAQ DOS 3.31 drive data table:
  3087. Offset    Size    Description
  3088.  00h    DWORD    pointer to next table
  3089.  04h    BYTE    physical unit number (for INT 13)
  3090.  05h    BYTE    logical drive number
  3091.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.01 drive data table below)
  3092.  1Fh  6 BYTEs    ??? apparently always zeros
  3093.  25h    BYTE    flags
  3094.         bit 6: 16-bit FAT instead of 12-bit FAT
  3095.             5: large volume???
  3096.  26h    WORD    device-open count???
  3097.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3098.         fixed media)
  3099.  33h    BYTE    terminating null for volume label
  3100.  34h    BYTE    device type (see INT 21/AX=440Dh)
  3101.  35h    WORD    bit flags describing drive
  3102.  37h    WORD    number of cylinders
  3103.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3104.  52h  6 BYTEs    ??? apparently always zeros
  3105.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3106. ---removable media---
  3107.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3108. ---fixed media---
  3109.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3110.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3111.         drive (always FFFFh if primary partition)
  3112.  
  3113. Format of DOS 4.0-5.0 drive data table:
  3114. Offset    Size    Description
  3115.  00h    DWORD    pointer to next table
  3116.  04h    BYTE    physical unit number (for INT 13)
  3117.  05h    BYTE    logical drive number
  3118.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3119.         Offset    Size    Description
  3120.          00h    WORD    bytes per sector
  3121.          02h    BYTE    sectors per cluster, FFh if unknown
  3122.          03h    WORD    number of reserved sectors
  3123.          05h    BYTE    number of FATs
  3124.          06h    WORD    number of root dir entries
  3125.          08h    WORD    total sectors (see offset 15h if zero)
  3126.          0Ah    BYTE    media descriptor, 00h if unknown
  3127.          0Bh    WORD    sectors per FAT
  3128.          0Dh    WORD    sectors per track
  3129.          0Fh    WORD    number of heads
  3130.          11h    DWORD    number of hidden sectors
  3131.          15h    DWORD    total sectors if WORD at 08h is zero
  3132.  1Fh    BYTE    flags
  3133.         bit 6: 16-bit FAT instead of 12-bit
  3134.  20h  2 BYTEs    ???
  3135.  22h    BYTE    device type (see INT 21/AX=440Dh)
  3136.  23h    WORD    bit flags describing drive
  3137.         bit 0: fixed media
  3138.         bit 1: door lock supported
  3139.         bit 2: ???
  3140.         bit 3: all sectors in a track are the same size
  3141.         bit 4: physical drive has multiple logical units
  3142.         bit 5: current logical drive for physical drive
  3143.         bit 6: ???
  3144.         bit 7: ???
  3145.         bit 8: ???
  3146.  25h    WORD    number of cylinders
  3147.  27h 25 BYTEs    BIOS Parameter Block for highest capacity supported
  3148.  40h  7 BYTEs    ???
  3149. ---removable media---
  3150.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3151. ---fixed media, DOS 4.x---
  3152.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3153.  49h    WORD    absolute cylinder number of partition's start on phys drive
  3154.         (FFFFh if primary partition)
  3155. ---fixed media, DOS 5.0---
  3156.  47h    WORD    ??? apparently always 0001h
  3157.  49h    WORD    absolute cylinder number of partition's start on phys drive
  3158. ------
  3159.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3160.         extended boot record rather than root directory)
  3161.  56h    BYTE    terminating null for volume label???
  3162.  57h    DWORD    serial number
  3163.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3164.  63h    BYTE    terminating null for filesystem type???
  3165. ----------2F1000-----------------------------
  3166. INT 2F - SHARE - INSTALLATION CHECK
  3167.     AX = 1000h
  3168. Return: AL = 00h  not installed, OK to install
  3169.          01h  not installed, not OK to install
  3170.          FFh  installed
  3171. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3172.       (08E9: OR  AL,AL
  3173.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3174.     values of AL other than described here put PCDOS 4.00 into the same
  3175.       loop (the buggy instructions are the same)
  3176. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3177.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3178.       inactive state (due to the undocumented /NC flag used by the autoload
  3179.       code) until this call is made
  3180.     DOS 5.0 chains to the previous handler if AL <> 00h on entry
  3181. SeeAlso: AX=1080h,INT 21/AH=52h
  3182. ----------2F1040-----------------------------
  3183. INT 2F U - DOS 4 only SHARE internal - ???
  3184.     AX = 1040h
  3185.     ???
  3186. Return: AL = FFh???
  3187. SeeAlso: AX=1000h
  3188. ----------2F1080-----------------------------
  3189. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3190.     AX = 1080h
  3191. Return: AL = status
  3192.         F0h successful
  3193.         FFh checking was already on
  3194. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3195.       and file sharing checks.  The undocumented commandline flag /NC can
  3196.       be used to disable the sharing code.
  3197. SeeAlso: AX=1000h,AX=1081h
  3198. ----------2F1081-----------------------------
  3199. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3200.     AX = 1081h
  3201. Return: AL = status
  3202.         F0h successful
  3203.         FFh checking was already off
  3204. Note:    (see AX=1080h)
  3205. SeeAlso: AX=1000h,AX=1080h
  3206. ----------2F10FF-----------------------------
  3207. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  3208.     AX = 10FFh
  3209.     ES:BX -> ???
  3210. Note:    sets pointer in kernel
  3211. ----------2F1100-----------------------------
  3212. INT 2F - NETWORK REDIRECTOR - INSTALLATION CHECK
  3213.     AX = 1100h
  3214. Return: AL = 00h  not installed, OK to install
  3215.          01h  not installed, not OK to install
  3216.          FFh  installed
  3217. Notes:    called by DOS 3.1+ kernel
  3218.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3219.       PC LAN Program redirector; DOS 5.0 moves the calls back into the
  3220.       redirector
  3221. ----------2F1100-----------------------------
  3222. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3223.     AX = 1100h
  3224.     STACK: WORD DADAh
  3225. Return: AL = 00h not installed, OK to install
  3226.         STACK unchanged
  3227.        = 01h not installed, not OK to install
  3228.         STACK unchanged
  3229.        = FFh installed
  3230.         STACK: WORD ADADh
  3231. ----------2F1101-----------------------------
  3232. INT 2F U - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3233.     AX = 1101h
  3234.     SS = DOS DS
  3235.     SDA first filename pointer -> fully-qualified directory name
  3236.     SDA CDS pointer -> current directory structure for drive with dir
  3237. Return: CF set on error
  3238.         AX = DOS error code (see INT 21/AH=59h)
  3239.     CF clear if successful
  3240. Note:    called by DOS 3.1+ kernel
  3241. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3242. ----------2F1102-----------------------------
  3243. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3244.     AX = 1102h
  3245.     SS = DOS DS
  3246.     SDA first filename pointer -> fully-qualified directory name
  3247.     SDA CDS pointer -> current directory structure for drive with dir
  3248. Return: CF set on error
  3249.         AX = DOS error code (see INT 21/AH=59h)
  3250.     CF clear if successful
  3251. Note:    appears to be identical to AX=1101h
  3252. SeeAlso: AX=1101h
  3253. ----------2F1103-----------------------------
  3254. INT 2F U - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3255.     AX = 1103h
  3256.     SS = DOS DS
  3257.     SDA first filename pointer -> fully-qualified directory name
  3258.     SDA CDS pointer -> current directory structure for drive with dir
  3259. Return: CF set on error
  3260.         AX = DOS error code (see INT 21/AH=59h)
  3261.     CF clear if successful
  3262. Note:    called by DOS 3.1+ kernel
  3263. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3264. ----------2F1104-----------------------------
  3265. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3266.     AX = 1104h
  3267.     SS = DOS DS
  3268.     SDA first filename pointer -> fully-qualified directory name
  3269.     SDA CDS pointer -> current directory structure for drive with dir
  3270. Return: CF set on error
  3271.         AX = DOS error code (see INT 21/AH=59h)
  3272.     CF clear if successful
  3273. Note:    appears to be identical to AX=1103h
  3274. SeeAlso: AX=1103h
  3275. ----------2F1105-----------------------------
  3276. INT 2F U - NETWORK REDIRECTOR - CHDIR
  3277.     AX = 1105h
  3278.     SS = DOS DS
  3279.     SDA first filename pointer -> fully-qualified directory name
  3280.     SDA CDS pointer -> current directory structure for drive with dir
  3281. Return: CF set on error
  3282.         AX = DOS error code (see INT 21/AH=59h)
  3283.     CF clear if successful
  3284.         CDS updated with new path
  3285. Notes:    called by DOS 3.1+ kernel
  3286.     directory string in CDS should not have a terminating backslash unless
  3287.       the current directory is the root
  3288. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3289. ----------2F1106-----------------------------
  3290. INT 2F U - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3291.     AX = 1106h
  3292.     ES:DI -> SFT
  3293.         SFT DPB field -> DPB of drive containing file
  3294. Return: CF set on error
  3295.         AX = DOS error code (see INT 21/AH=59h)
  3296.     CF clear if successful
  3297.         SFT updated (except handle count, which DOS manages itself)
  3298. Note:    called by DOS 3.1+ kernel
  3299. SeeAlso: AX=1201h,AX=1227h,INT 21/AH=3Eh
  3300. ----------2F1107-----------------------------
  3301. INT 2F U - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3302.     AX = 1107h
  3303.     ES:DI -> SFT
  3304.         SFT DPB field -> DPB of drive containing file
  3305. Return: CF set on error
  3306.         AX = DOS error code (see INT 21/AH=59h)
  3307.     CF clear if successful
  3308.         all buffers for file flushed
  3309.         directory entry updated
  3310. Note:    called by DOS 3.1+ kernel
  3311. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3312. ----------2F1108-----------------------------
  3313. INT 2F U - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3314.     AX = 1108h
  3315.     ES:DI -> SFT
  3316.         SFT DPB field -> DPB of drive containing file
  3317.     CX = number of bytes
  3318.     SS = DOS DS
  3319.     SDA DTA field -> user buffer
  3320. Return: CF set on error
  3321.         AX = DOS error code (see INT 21/AH=59h)
  3322.     CF clear if successful
  3323.         CX = number of bytes read (0000h = end of file)
  3324.         SFT updated
  3325. Note:    called by DOS 3.1+ kernel
  3326. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  3327. ----------2F1109-----------------------------
  3328. INT 2F U - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3329.     AX = 1109h
  3330.     ES:DI -> SFT
  3331.         SFT DPB field -> DPB of drive containing file
  3332.     CX = number of bytes
  3333.     SS = DOS DS
  3334.     SDA DTA field -> user buffer
  3335. Return: CF set on error
  3336.         AX = DOS error code (see INT 21/AH=59h)
  3337.     CF clear if successful
  3338.         CX = number of bytes written
  3339.         SFT updated
  3340. Note:    called by DOS 3.1+ kernel
  3341. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3342. ----------2F110A-----------------------------
  3343. INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  3344.     AX = 110Ah
  3345.     BX = file handle
  3346.     CX:DX = starting offset
  3347.     SI = high word of size
  3348.     STACK: WORD low word of size
  3349.     ES:DI -> SFT
  3350.         SFT DPB field -> DPB of drive containing file
  3351.     SS = DOS DS
  3352. Return: CF set on error
  3353.        AL = DOS error code (see INT 21/AH=59h)
  3354.     STACK unchanged
  3355. Notes:    called by DOS 3.10-3.31 kernel
  3356.     the redirector is expected to resolve lock conflicts
  3357. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3358. ----------2F110A-----------------------------
  3359. INT 2F U - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  3360.     AX = 110Ah
  3361.     BL = function
  3362.         00h lock
  3363.         01h unlock
  3364.     DS:DX -> parameter block (see below)
  3365.     ES:DI -> SFT
  3366.         SFT DPB field -> DPB of drive containing file
  3367.     SS = DOS DS
  3368. Return: CF set on error
  3369.        AL = DOS error code (see INT 21/AH=59h)
  3370. Notes:    called by DOS 4.0+ kernel
  3371.     the redirector is expected to resolve lock conflicts
  3372. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3373.  
  3374. Format of parameter block:
  3375. Offset    Size    Description
  3376.  00h    DWORD    start offset
  3377.  04h    DWORD    size of region
  3378. ----------2F110B-----------------------------
  3379. INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3380.     AX = 110Bh
  3381.     BX = file handle
  3382.     CX:DX = starting offset
  3383.     SI = high word of size
  3384.     STACK: WORD low word of size
  3385.     ES:DI -> SFT for file
  3386.         SFT DPB field -> DPB of drive containing file
  3387. Return: CF set on error
  3388.        AL = DOS error code (see INT 21/AH=59h)
  3389.     STACK unchanged
  3390. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  3391. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3392. ----------2F110C-----------------------------
  3393. INT 2F U - NETWORK REDIRECTOR - GET DISK SPACE
  3394.     AX = 110Ch
  3395.     ES:DI -> current directory structure for desired drive
  3396. Return: AL = sectors per cluster
  3397.     AH = media ID byte
  3398.     BX = total clusters
  3399.     CX = bytes per sector
  3400.     DX = number of available clusters
  3401. Note:    called by DOS 3.1+ kernel
  3402. SeeAlso: INT 21/AH=36h
  3403. ----------2F110D-----------------------------
  3404. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3405.     AX = 110Dh
  3406.     SDA first filename pointer -> name of file
  3407.     ???
  3408. Return: ???
  3409. Note:    appears to be similar to AX=110Fh
  3410. SeeAlso: AX=110Fh
  3411. ----------2F110E-----------------------------
  3412. INT 2F U - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3413.     AX = 110Eh
  3414.     SS = DOS DS
  3415.     SDA first filename pointer -> fully-qualified name of file
  3416.     SDA CDS pointer -> current directory structure for drive with file
  3417.     STACK: WORD new file attributes
  3418. Return: CF set on error
  3419.         AX = DOS error code (see INT 21/AH=59h)
  3420.     CF clear if successful
  3421.     STACK unchanged
  3422. Note:    called by DOS 3.1+ kernel
  3423. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3424. ----------2F110F-----------------------------
  3425. INT 2F U - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3426.     AX = 110Fh
  3427.     SS = DOS DS
  3428.     SDA first filename pointer -> fully-qualified name of file
  3429.     SDA CDS pointer -> current directory structure for drive with file
  3430. Return: CF set on error
  3431.         AX = DOS error code (see INT 21/AH=59h)
  3432.     CF clear if successful
  3433.         AX = file attributes
  3434.         BX:DI = file size
  3435. Note:    called by DOS 3.1+ kernel
  3436. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3437. ----------2F1110-----------------------------
  3438. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3439.     AX = 1110h
  3440.     SDA first filename pointer -> name of file
  3441.     ???
  3442. Return: ???
  3443. Note:    appears to be similar to AX=110Eh
  3444. SeeAlso: AX=110Eh
  3445. ----------2F1111-----------------------------
  3446. INT 2F U - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3447.     AX = 1111h
  3448.     SS = DS = DOS DS
  3449.     SDA first filename pointer = offset of fully-qualified old name
  3450.     SDA second filename pointer = offset of fully-qualified new name
  3451.     SDA CDS pointer -> current directory structure for drive with file
  3452. Return: CF set on error
  3453.         AX = DOS error code (see INT 21/AH=59h)
  3454.     CF clear if successful
  3455. Note:    called by DOS 3.1+ kernel
  3456. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  3457. ----------2F1112-----------------------------
  3458. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3459.     AX = 1112h
  3460.     SS = DS = DOS DS
  3461.     SDA first filename pointer -> name of file
  3462.     ???
  3463. Return: ???
  3464. SeeAlso: AX=1111h
  3465. ----------2F1113-----------------------------
  3466. INT 2F U - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3467.     AX = 1113h
  3468.     SS = DS = DOS DS
  3469.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3470.     SDA CDS pointer -> current directory structure for drive with file
  3471. Return: CF set on error
  3472.         AX = DOS error code (see INT 21/AH=59h)
  3473.     CF clear if successful
  3474. Notes:    called by DOS 3.1+ kernel
  3475.     the filespec may contain wildcards
  3476. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  3477. ----------2F1114-----------------------------
  3478. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3479.     AX = 1114h
  3480.     SDA first filename pointer -> name of file
  3481.     ???
  3482. Return: ???
  3483. SeeAlso: AX=1113h
  3484. ----------2F1115-----------------------------
  3485. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3486.     AX = 1115h
  3487.     SS = DOS DS
  3488.     ES:DI -> SFT ???
  3489.     ???
  3490. Return: ???
  3491. SeeAlso: AX=112Eh
  3492. ----------2F1116-----------------------------
  3493. INT 2F U - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3494.     AX = 1116h
  3495.     ES:DI -> uninitialized SFT
  3496.     SS = DOS DS
  3497.     SDA first filename pointer -> fully-qualified name of file to open
  3498.     STACK: WORD file open mode (see INT 21/AH=3Dh)
  3499. Return: CF set on error
  3500.         AX = DOS error code (see INT 21/AH=59h)
  3501.     CF clear if successful
  3502.         SFT filled (except handle count, which DOS manages itself)
  3503.     STACK unchanged
  3504. Note:    called by DOS 3.1+ kernel
  3505. SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h
  3506. ----------2F1117-----------------------------
  3507. INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3508.     AX = 1117h
  3509.     ES:DI -> uninitialized SFT
  3510.     SS = DOS DS
  3511.     SDA first filename pointer -> fully-qualified name of file to open
  3512.     SDA CDS pointer -> current directory structure for drive with file
  3513.     STACK: WORD file creation mode
  3514.             low byte = file attributes
  3515.             high byte = 00h normal create, 01h create new file
  3516. Return: CF set on error
  3517.         AX = DOS error code (see INT 21/AH=59h)
  3518.     CF clear if successful
  3519.         SFT filled (except handle count, which DOS manages itself)
  3520.     STACK unchanged
  3521. Note:    called by DOS 3.1+ kernel
  3522. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3523. ----------2F1118-----------------------------
  3524. INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3525.     AX = 1118h
  3526.     ES:DI -> uninitialized SFT
  3527.     SS = DOS DS
  3528.     SDA first filename pointer -> fully-qualified name of file
  3529.     STACK: WORD file creation mode
  3530.             low byte = file attributes
  3531.             high byte = 00h normal create, 01h create new file
  3532. Return: ???
  3533.     STACK unchanged
  3534. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  3535.       SDA CDS pointer has offset FFFFh
  3536. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3537. ----------2F1119-----------------------------
  3538. INT 2F U - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3539.     AX = 1119h
  3540.     SS = DS = DOS DS
  3541.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  3542.     SDA first filename pointer -> fully-qualified search template
  3543.     SDA search attribute = attribute mask for search
  3544. Return: CF set on error
  3545.         AX = DOS error code (see INT 21/AH=59h)
  3546.     CF clear if successful
  3547.         [DTA] = updated findfirst search data
  3548.             (bit 7 of first byte must be set)
  3549.         [DTA+15h] = standard directory entry for file
  3550. Notes:    called by DOS 3.1+ kernel
  3551.     DOS 4.x IFSFUNC returns CF set, AX=0003h    
  3552. ----------2F111A-----------------------------
  3553. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3554.     AX = 111Ah
  3555.     ???
  3556. Return: CF set
  3557.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3558. ----------2F111B-----------------------------
  3559. INT 2F U - NETWORK REDIRECTOR - FINDFIRST
  3560.     AX = 111Bh
  3561.     SS = DS = DOS DS
  3562.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  3563.     SDA first filename pointer -> fully-qualified search template
  3564.     SDA CDS pointer -> current directory structure for drive with file
  3565.     SDA search attribute = attribute mask for search
  3566. Return: CF set on error
  3567.         AX = DOS error code (see INT 21/AH=59h)
  3568.     CF clear if successful
  3569.         [DTA] = updated findfirst search data
  3570.             (bit 7 of first byte must be set)
  3571.         [DTA+15h] = standard directory entry for file
  3572. Note:    called by DOS 3.1+ kernel
  3573. SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  3574. ----------2F111C-----------------------------
  3575. INT 2F U - NETWORK REDIRECTOR - FINDNEXT
  3576.     AX = 111Ch
  3577.     SS = DS = DOS DS
  3578.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  3579. Return: CF set on error
  3580.         AX = DOS error code (see INT 21/AH=59h)
  3581.     CF clear if successful
  3582.         [DTA] = updated findfirst search data
  3583.             (bit 7 of first byte must be set)
  3584.         [DTA+15h] = standard directory entry for file
  3585. Note:    called by DOS 3.1+ kernel
  3586. SeeAlso: AX=111Bh,INT 21/AH=4Fh
  3587. ----------2F111D-----------------------------
  3588. INT 2F U - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  3589.     AX = 111Dh
  3590.     DS???
  3591.     SS = DOS DS
  3592. Return: ???
  3593. Notes:    called by DOS 3.1+ kernel
  3594.     closes all FCBs opened by process
  3595. ----------2F111E-----------------------------
  3596. INT 2F U - NETWORK REDIRECTOR - DO REDIRECTION
  3597.     AX = 111Eh
  3598.     SS = DOS DS
  3599.     STACK: WORD function to execute
  3600.         5F00h  get redirection mode
  3601.             BL = type (03h printer, 04h disk)
  3602.             Return: BH = state (00h off, 01h on)
  3603.         5F01h  set redirection mode
  3604.             BL = type (03h printer, 04h disk)
  3605.             BH = state (00h off, 01h on)
  3606.         5F02h  get redirection list entry
  3607.             BX = redirection list index
  3608.             DS:SI -> 16-byte local device name buffer
  3609.             ES:DI -> 128-byte network name buffer
  3610.             Return: must set user's BX to device type and CX to
  3611.                 stored parameter value, using AX=1218h to get
  3612.                 stack frame address
  3613.         5F03h  redirect device
  3614.             BL = device type (see INT 21/AX=5F03h)
  3615.             CX = stored parameter value
  3616.             DS:SI -> ASCIZ source device name
  3617.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  3618.         5F04h  cancel redirection
  3619.             DS:SI -> ASCIZ device name or network path
  3620.         5F05h  get redirection list extended entry
  3621.             BX = redirection list index
  3622.             DS:SI -> buffer for ASCIZ source device name
  3623.             ES:DI -> buffer for destination ASCIZ network path
  3624.             Return: BH = status flag
  3625.                 BL = type (03h printer, 04h disk)
  3626.                 CX = stored parameter value
  3627.                 BP = NETBIOS local session number
  3628.         5F06h  similar to 5F05h???
  3629. Return: CF set on error
  3630.         AX = error code (see INT 21/AH=59h)
  3631.     STACK unchanged
  3632. Note:    called by DOS 3.1+ kernel
  3633. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  3634. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  3635. ----------2F111F-----------------------------
  3636. INT 2F U - NETWORK REDIRECTOR - PRINTER SETUP
  3637.     AX = 111Fh
  3638.     STACK: WORD function
  3639.         5E02h  set printer setup
  3640.         5E03h  get printer setup
  3641.         5E04h  set printer mode
  3642.         5E05h  get printer mode
  3643. Return: CF set on error
  3644.         AX = error code (see INT 21/AH=59h)
  3645.     STACK unchanged
  3646. Note:    called by DOS 3.1+ kernel
  3647. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  3648. ----------2F1120-----------------------------
  3649. INT 2F U - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  3650.     AX = 1120h
  3651.     DS = DOS DS
  3652.     ???
  3653. Return: CF clear (successful)
  3654. Notes:    called by DOS 3.1+ kernel
  3655.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  3656. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  3657. ----------2F1121-----------------------------
  3658. INT 2F U - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  3659.     AX = 1121h
  3660.     CX:DX = offset (in bytes) from end
  3661.     ES:DI -> SFT
  3662.         SFT DPB field -> DPB of drive with file
  3663.     SS = DOS DS
  3664. Return: CF set on error
  3665.         AL = DOS error code (see INT 21/AH=59h)
  3666.     CF clear if successful
  3667.         DX:AX = new file position
  3668. Note:    called by DOS 3.1+ kernel
  3669. SeeAlso: AX=1228h,INT 21/AH=42h
  3670. ----------2F1122-----------------------------
  3671. INT 2F U - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  3672.     AX = 1122h
  3673.     SS = DOS DS
  3674.     ???
  3675. Return: ???
  3676. Note:    called by DOS 3.1+ kernel
  3677. ----------2F1123-----------------------------
  3678. INT 2F U - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  3679.     AX = 1123h
  3680.     DS:SI -> ASCIZ filename to canonicalize
  3681.     ES:DI -> 128-byte buffer for qualified name
  3682. Return: CF set if not resolved
  3683. Notes:    called by MSDOS 3.1+ kernel, but not called by DRDOS 5.0 unless the
  3684.       filename matches the name of a character device
  3685.     called first when DOS attempts to resolve a filename (unless inside an
  3686.       AX=5D00h server call); if this fails, DOS resolves the name locally
  3687. SeeAlso: AX=1221h,INT 21/AH=60h
  3688. ----------2F1124-----------------------------
  3689. INT 2F U - NETWORK REDIRECTOR - PRINTER OFF???
  3690.     AX = 1124h
  3691.     ES:DI -> SFT
  3692.     SS = DOS DS
  3693.     ???
  3694. Return: CX = ???
  3695. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  3696. SeeAlso: AX=1126h
  3697. ----------2F1125-----------------------------
  3698. INT 2F U - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  3699.     AX = 1125h
  3700.     STACK: WORD subfunction
  3701.         5D07h get print stream state
  3702.             Return: DL = current state
  3703.         5D08h set print stream state
  3704.             DL = new state
  3705.         5D09h finish print job
  3706. Return: CF set on error
  3707.         AX = error code (see INT 21/AH=59h)
  3708.     STACK unchanged
  3709. Note:    called by DOS 3.1+ kernel
  3710. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  3711. ----------2F1126-----------------------------
  3712. INT 2F U - NETWORK REDIRECTOR - PRINTER ON/OFF???
  3713.     AX = 1126h
  3714.     ES:DI -> SFT for file handle 4???
  3715.     SS = DOS DS???
  3716.     ???
  3717. Return: CF set on error
  3718. Notes:    called by DOS 3.1+ kernel
  3719.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  3720.       bit 11 of the device information word in the SFT set
  3721. SeeAlso: AX=1124h
  3722. ----------2F1127-----------------------------
  3723. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3724.     AX = 1127h
  3725. Return: CF set
  3726.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3727. ----------2F1128-----------------------------
  3728. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3729.     AX = 1128h
  3730. Return: CF set
  3731.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3732. ----------2F1129-----------------------------
  3733. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  3734.     AX = 1129h
  3735. Return: CF set
  3736.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3737. ----------2F112A-----------------------------
  3738. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3739.     AX = 112Ah
  3740.     DS = DOS DS
  3741.     ???
  3742. Return: ???
  3743. Note:    does something to each IFS driver
  3744. ----------2F112B-----------------------------
  3745. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL???
  3746.     AX = 112Bh
  3747.     SS = DOS DS
  3748.     CX = function/category
  3749.     DS:DX -> parameter block
  3750.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  3751.     ???
  3752. Return: CF set on error
  3753.         AX = DOS error code (see INT 21/AH=59h)
  3754.     CF clear if successful
  3755. Note:    called by DOS 4.0 kernel
  3756. ----------2F112C-----------------------------
  3757. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3758.     AX = 112Ch
  3759.     SS = DOS DS
  3760.     SDA current SFT pointer -> SFT for file
  3761.     ???
  3762. Return: CF set on error
  3763. ----------2F112D-----------------------------
  3764. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3765.     AX = 112Dh
  3766.     BL = subfunction (value of AL on INT 21)
  3767.         04h truncate open file to zero length
  3768.         ES:DI -> SFT for file
  3769.         Return: CF clear
  3770.         else ???
  3771.         Return: CX = ??? (00h or 02h for DOS 4.01)
  3772.     ES:DI -> SFT
  3773.     SS = DOS DS
  3774. Return: DS = DOS DS
  3775. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  3776.       INT 21/AX=5704h
  3777. ----------2F112E-----------------------------
  3778. INT 2F U - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  3779.     AX = 112Eh
  3780.     SS = DS = DOS DS
  3781.     ES:DI -> uninitialized SFT for file
  3782.     STACK: WORD file attribute for created/truncated file
  3783.             low byte = file attributes
  3784.             high byte = 00h normal create/open, 01h create new file
  3785.     SDA first filename pointer -> fully-qualified filename
  3786.     SDA extended file open action -> action code (see INT 21/AX=6C00h)
  3787.     SDA extended file open mode -> open mode for file (see INT 21/AX=6C00h)
  3788. Return: CF set on error
  3789.         AX = error code
  3790.     CF clear if successful
  3791.         CX = result code
  3792.         01h file opened
  3793.         02h file created
  3794.         03h file replaced (truncated)
  3795.         SFT initialized (except handle count, which DOS manages itself)
  3796. Note:    called by DOS 4.0 kernel
  3797. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  3798. ----------2F112F-----------------------------
  3799. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ???
  3800.     AX = 112Fh
  3801.     SS = DOS DS
  3802.     STACK: WORD function in low byte
  3803.         00h ???
  3804.             DS:SI -> Current Directory Structure???
  3805.             CL = drive (1=A:)
  3806.         01h ???
  3807.             DS:SI -> ???
  3808.             CL = file handle???
  3809.         02h ???
  3810.             DS:SI -> Current Directory Structure???
  3811.             DI = ???
  3812.             CX = drive (1=A:)
  3813.     ???
  3814. Return: CF set on error
  3815.         AX = DOS error code (see INT 21/AH=59h)
  3816.     CF clear if successful
  3817. Note:    called by DOS 4.0 kernel
  3818. SeeAlso: INT 21/AH=6Bh
  3819. ----------2F1130-----------------------------
  3820. INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  3821.     AX = 1130h
  3822. Return: ES = CS of resident IFSFUNC
  3823. ----------2F1186-----------------------------
  3824. INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe
  3825.     AX = 1186h
  3826.     ???
  3827. Return: ???
  3828. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3829.       file/printer services
  3830. SeeAlso: AX=118Fh,INT 21/AX=5F39h
  3831. ----------2F118A-----------------------------
  3832. INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  3833.     AX = 118Ah
  3834.     ???
  3835. Return: ???
  3836. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  3837. ----------2F118F-----------------------------
  3838. INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe
  3839.     AX = 118Fh
  3840.     ???
  3841. Return: ???
  3842. SeeAlso: AX=1186h,INT 21/AX=5F3Ah
  3843. ----------2F1200-----------------------------
  3844. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  3845.     AX = 1200h
  3846. Return: AL = FFh (for compatibility with other INT 2F functions)
  3847. ----------2F1201-----------------------------
  3848. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  3849.     AX = 1201h
  3850.     SS = DOS DS
  3851.     SDA current SFT pointer -> SFT of file to close
  3852. Return: CF set on error
  3853.     BX???
  3854.     CX new reference count of SFT
  3855.     ES:DI -> SFT for file
  3856. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3857. ----------2F1202-----------------------------
  3858. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  3859.     AX = 1202h
  3860.     STACK: WORD vector number
  3861. Return: ES:BX -> interrupt vector
  3862.     STACK unchanged
  3863. ----------2F1203-----------------------------
  3864. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  3865.     AX = 1203h
  3866. Return: DS = segment of IBMDOS.COM/MSDOS.SYS
  3867. ----------2F1204-----------------------------
  3868. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  3869.     AX = 1204h
  3870.     STACK: WORD character to normalize
  3871. Return: AL = normalized character (forward slash turned to backslash, all
  3872.         others unchanged)
  3873.     ZF set if path separator
  3874.     STACK unchanged
  3875. ----------2F1205-----------------------------
  3876. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3877.     AX = 1205h
  3878.     STACK: WORD character to output
  3879. Return: STACK unchanged
  3880. Note:    can be called only from within DOS
  3881. ----------2F1206-----------------------------
  3882. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  3883.     AX = 1206h
  3884.     DI = error code
  3885.     BP:SI -> device driver header
  3886.     SS = DOS DS
  3887.     STACK: WORD value to be passed to INT 24 in AX
  3888. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3889.     STACK unchanged
  3890. SeeAlso: INT 24
  3891. ----------2F1207-----------------------------
  3892. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3893.     AX = 1207h
  3894.     DS:DI -> disk buffer
  3895. Return: nothing
  3896. Notes:    can be called only from within DOS
  3897.     buffer is moved to end of buffer list (least-recently used is first)
  3898. SeeAlso: AX=120Fh
  3899. ----------2F1208-----------------------------
  3900. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  3901.     AX = 1208h
  3902.     ES:DI -> SFT
  3903. Return: AX = original value of reference count
  3904. Note:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  3905.       that the SFT is not in use).    It is the caller's responsibility to
  3906.       set the reference count to zero after cleaning up.
  3907. ----------2F1209-----------------------------
  3908. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  3909.     AX = 1209h
  3910.     DS:DI -> disk buffer
  3911. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3912. Note:    can be called only from within DOS
  3913. SeeAlso: AX=120Eh,AX=1215h
  3914. ----------2F120A-----------------------------
  3915. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3916.     AX = 120Ah
  3917.     DS = SS = DOS DS
  3918.     STACK: WORD extended error code
  3919. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3920.     CF clear if retry, set otherwise
  3921.     STACK unchanged
  3922. Notes:    can only be called during a DOS function call, as it uses various
  3923.       fields in the SDA to set up the registers for the INT 24
  3924.     reportedly sets current DPB's first root directory sector to 1
  3925. SeeAlso: INT 24
  3926. ----------2F120B-----------------------------
  3927. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  3928.     AX = 120Bh
  3929.     ES:DI -> system file table entry for previous open of file
  3930.     STACK: WORD extended error code (should be 20h--sharing violation)
  3931. Return: CF clear if operation should be retried
  3932.     CF set if operation should not be retried
  3933.         AX = error code (20h) (see AH=59h)
  3934.     STACK unchanged
  3935. Notes:    can only be called during a DOS function call
  3936.     should only be called if an attempt was made to open an already-open
  3937.       file contrary to the sharing rules
  3938.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  3939.       inheritance allowed
  3940. ----------2F120C-----------------------------
  3941. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???
  3942.     AX = 120Ch
  3943.     SDA current SFT pointer -> SFT for file
  3944.     DS = SS = DOS DS
  3945. Return: ES, DI, AX destroyed
  3946. Notes:    invoked "device open" call on device driver for SFT
  3947.     changes owner of last-accessed SFT to calling process if it was opened
  3948.       via FCB
  3949.     called by network redirectors
  3950. ----------2F120D-----------------------------
  3951. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  3952.     AX = 120Dh
  3953.     SS = DOS DS
  3954. Return: AX = current date in packed format (see INT 21/AX=5700h)
  3955.     DX = current time in packed format (see INT 21/AX=5700h)
  3956. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  3957. ----------2F120E-----------------------------
  3958. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  3959.     AX = 120Eh
  3960.     SS = DOS DS
  3961. Return: DS:DI -> first disk buffer
  3962. Note:    clears "referenced" flag on all disk buffers
  3963. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  3964. ----------2F120F-----------------------------
  3965. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  3966.     AX = 120Fh
  3967.     DS:DI -> disk buffer
  3968.     SS = DOS DS
  3969. Return: DS:DI -> next buffer in buffer list
  3970. Note:    indicated buffer moved to end of chain
  3971. SeeAlso: AX=1207h
  3972. ----------2F1210-----------------------------
  3973. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  3974.     AX = 1210h
  3975.     DS:DI -> first disk buffer to check
  3976. Return: ZF clear if found
  3977.         DS:DI -> first unreferenced disk buffer
  3978.     ZF set if not found
  3979. SeeAlso: AX=120Eh
  3980. ----------2F1211-----------------------------
  3981. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  3982.     AX = 1211h
  3983.     DS:SI -> ASCIZ filename to normalize
  3984.     ES:DI -> buffer for normalized filename
  3985. Return: destination buffer filled with uppercase filename, with slashes turned
  3986.     to backslashes
  3987. SeeAlso: AX=121Eh,AX=1221h
  3988. ----------2F1212-----------------------------
  3989. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3990.     AX = 1212h
  3991.     ES:DI -> ASCIZ string
  3992. Return: CX = length of string
  3993. SeeAlso: AX=1225h
  3994. ----------2F1213-----------------------------
  3995. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  3996.     AX = 1213h
  3997.     STACK: WORD character to convert to uppercase
  3998. Return: AL = uppercase character
  3999.     STACK unchanged
  4000. ----------2F1214-----------------------------
  4001. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  4002.     AX = 1214h
  4003.     DS:SI = first pointer
  4004.     ES:DI = second pointer
  4005. Return: ZF set if pointers are equal, ZF clear if not equal
  4006. ----------2F1215-----------------------------
  4007. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  4008.     AX = 1215h
  4009.     DS:DI -> disk buffer
  4010.     SS = DOS DS
  4011.     STACK: WORD drives for which to skip buffer
  4012.         ignore buffer if drive same as high byte, or bytes differ and
  4013.         the buffer is for a drive OTHER than that given in low byte
  4014. Return: STACK unchanged
  4015. Note:    can be called only from within DOS
  4016. SeeAlso: AX=1209h
  4017. ----------2F1216-----------------------------
  4018. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  4019.     AX = 1216h
  4020.     BX = system file table entry number
  4021. Return: CF clear if successful
  4022.         ES:DI -> system file table entry
  4023.     CF set if BX greater than FILES=
  4024. SeeAlso: AX=1220h
  4025. ----------2F1217-----------------------------
  4026. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTRY STRUCTURE FOR DRIVE
  4027.     AX = 1217h
  4028.     SS = DOS DS
  4029.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4030. Return: CF set on error
  4031.         (drive > LASTDRIVE)
  4032.     CF clear if successful
  4033.         DS:SI -> current directory structure for specified drive
  4034.     STACK unchanged
  4035. SeeAlso: AX=1219h
  4036. ----------2F1218-----------------------------
  4037. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  4038.     AX = 1218h
  4039. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4040. Note:    only valid while within DOS
  4041. ----------2F1219-----------------------------
  4042. INT 2F U - DOS 3+ internal - SET DRIVE???
  4043.     AX = 1219h
  4044.     SS = DOS DS
  4045.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4046. Return: ???
  4047.     STACK unchanged
  4048. Notes:    calls AX=1217h
  4049.     builds a current directory structure if inside server call
  4050.       (INT 21/AX=5D00h)
  4051. SeeAlso: AX=1217h,AX=121Fh
  4052. ----------2F121A-----------------------------
  4053. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  4054.     AX = 121Ah
  4055.     DS:SI -> filename
  4056. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4057.     DS:SI -> filename without leading X: (if present)
  4058. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4059. ----------2F121B-----------------------------
  4060. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  4061.     AX = 121Bh
  4062.     CL = year - 1980
  4063. Return: AL = number of days in February
  4064. Note:    requires DS to be set to the DOS code segment
  4065. SeeAlso: INT 21/AH=2Bh
  4066. ----------2F121C-----------------------------
  4067. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  4068.     AX = 121Ch
  4069.     DS:SI -> start of memory to checksum
  4070.     CX = number of bytes
  4071.     DX = initial checksum
  4072.     SS = DOS DS
  4073. Return: AX, CX destroyed
  4074.     DX = checksum
  4075.     DS:SI -> first byte after checksummed range
  4076. Note:    used by DOS to determine day count since 1/1/80 given a date
  4077. SeeAlso: AX=121Dh
  4078. ----------2F121D-----------------------------
  4079. INT 2F U - DOS 3+ internal - SUM MEMORY
  4080.     AX = 121Dh
  4081.     DS:SI -> memory to add up
  4082.     CX = 0000h
  4083.     DX = limit
  4084. Return: AL = byte which exceeded limit
  4085.     CX = number of bytes before limit exceeded
  4086.     DX = remainder after adding first CX bytes
  4087.     DS:SI -> byte beyond the one which exceeded the limit
  4088. Note:    used by DOS to determine year or month given day count since 1/1/80
  4089. SeeAlso: AX=121Ch
  4090. ----------2F121E-----------------------------
  4091. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  4092.     AX = 121Eh
  4093.     DS:SI -> first ASCIZ filename
  4094.     ES:DI -> second ASCIZ filename
  4095. Return: ZF set if filenames equivalent, ZF clear if not
  4096. SeeAlso: AX=1211h,AX=1221h
  4097. ----------2F121F-----------------------------
  4098. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4099.     AX = 121Fh
  4100.     SS = DOS DS
  4101.     STACK: WORD drive letter
  4102. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4103.     STACK unchanged
  4104. ----------2F1220-----------------------------
  4105. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  4106.     AX = 1220h
  4107.     BX = file handle
  4108. Return: CF set on error
  4109.         AL = 6 (invalid file handle)
  4110.     CF clear if successful
  4111.         ES:DI -> JFT entry for file handle in current process
  4112. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  4113.       file handle, or FFh if the handle is not open
  4114. SeeAlso: AX=1216h,AX=1229h
  4115. ----------2F1221-----------------------------
  4116. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  4117.     AX = 1221h
  4118.     DS:SI -> file name to be fully qualified
  4119.     ES:DI -> 128-byte buffer for resulting canonical file name
  4120.     SS = DOS DS
  4121. Return: (see INT 21/AH=60h)
  4122. Note:    identical to INT 21/AH=60h
  4123. SeeAlso: AX=1123h,INT 21/AH=60h
  4124. ----------2F1222-----------------------------
  4125. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  4126.     AX = 1222h
  4127.     SS = DOS data segment
  4128.     SS:SI -> 4-byte records
  4129.         BYTE    error code, FFh = last record
  4130.         BYTE    error class, FFh = don't change
  4131.         BYTE    suggested action, FFh = don't change
  4132.         BYTE    error locus, FFh = don't change
  4133.     SDA error code set
  4134. Return: SI destroyed
  4135.     SDA error class, error locus, and suggested action fields set
  4136. Note:    can be called only from within DOS
  4137. SeeAlso: AX=122Dh,INT 21/AH=59h
  4138. ----------2F1223-----------------------------
  4139. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  4140.     AX = 1223h
  4141.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4142.     SDA+22Bh (DOS 4.0x) = eight-character blank-padded name
  4143. Return: CF set if no character device by that name found
  4144.     CF clear if found
  4145.         BH = low byte of device attribute word
  4146. Note:    can only be called from within DOS (assumes DS=SS=DOS DS)
  4147. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4148. ----------2F1224-----------------------------
  4149. INT 2F U - DOS 3+ internal - DELAY
  4150.     AX = 1224h
  4151.     SS = DOS DS
  4152. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4153.       (INT 21/AX=5D00h)
  4154. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4155.       inside a server call
  4156. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h
  4157. ----------2F1225-----------------------------
  4158. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  4159.     AX = 1225h
  4160.     DS:SI -> ASCIZ string
  4161. Return: CX = length of string
  4162. SeeAlso: AX=1212h
  4163. ----------2F1226-----------------------------
  4164. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4165.     AX = 1226h
  4166.     CL = access mode
  4167.     DS:DX -> ASCIZ filename
  4168. Return: CF set on error
  4169.         AL = error code (see INT 21/AH=59h)
  4170.     CF clear if successful
  4171.         AX = file handle
  4172. Notes:    can only be called from within DOS (assumes SS=DOS DS)
  4173.     equivalent to INT 21/AH=3Dh    
  4174. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4175. ----------2F1227-----------------------------
  4176. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  4177.     AX = 1227h
  4178.     BX = file handle
  4179. Return: CF set on error
  4180.         AL = 06h invalid file handle
  4181.     CF clear if successful
  4182. Notes:    can only be called from within DOS (assumes SS=DOS DS)
  4183.     equivalent to INT 21/AH=3Eh
  4184. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4185. ----------2F1228BP4200-----------------------
  4186. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  4187.     AX = 1228h
  4188.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4189.     BX = file handle
  4190.     CX:DX = offset in bytes
  4191.     SS = DOS DS
  4192. Return: as for INT 21/AH=42h
  4193. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4194.       function call
  4195.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4196.       LSEEK, and restores frame pointer
  4197. SeeAlso: INT 21/AH=42h
  4198. ----------2F1229-----------------------------
  4199. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  4200.     AX = 1229h
  4201.     BX = file handle
  4202.     CX = number of bytes to read
  4203.     DS:DX -> buffer
  4204.     SS = DOS DS
  4205. Return: as for INT 21/AH=3Fh
  4206. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4207.       a DOS function call
  4208. SeeAlso: AX=1226h,INT 21/AH=3Fh
  4209. ----------2F122A-----------------------------
  4210. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4211.     AX = 122Ah
  4212.     BX = entry point to set (0001h or 0002h)
  4213.     DS:SI -> FASTOPEN entry point
  4214.         (entry point not set if SI = FFFFh for DOS 4+)
  4215. Return: CF set if specified entry point already set
  4216. Notes:    entry point in BX is ignored under DOS 3.30
  4217.     both entry points set to same handler by DOS 4.01
  4218.  
  4219. DOS 3.30 FASTOPEN is called with:
  4220.     AL = 01h  ???
  4221.         CX = ??? seems to be offset
  4222.         DI = ??? seems to be offset
  4223.         SI = offset in DOS DS of filename
  4224.     AL = 02h  ???
  4225.     AL = 03h  open file???
  4226.         SI = offset in DOS DS of filename
  4227.     AL = 04h  ???
  4228.         AH = subfunction (00h,01h,02h)
  4229.         ES:DI -> ???
  4230.         CX = ??? (subfunctions 01h and 02h only)
  4231. Returns: CF set on error or not installed
  4232. Note: function 03h calls function 01h first
  4233.  
  4234. PCDOS 4.01 FASTOPEN is additionally called with:
  4235.     AL = 04h ???
  4236.         AH = 03h
  4237.         ???
  4238.     AL = 05h ???
  4239.     AL = 0Bh ???
  4240.     AL = 0Ch ???
  4241.     AL = 0Dh ???
  4242.     AL = 0Eh ???
  4243.     AL = 0Fh ???
  4244.     AL = 10h ???
  4245. ----------2F122B-----------------------------
  4246. INT 2F U - DOS 3.3+ internal - IOCTL
  4247.     AX = 122Bh
  4248.     BP = 44xxh
  4249.     SS = DOS DS
  4250.     additional registers as appropriate for INT 21/AX=44xxh
  4251. Return: as for INT 21/AH=44h
  4252. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4253.       a DOS function call
  4254.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4255.       IOCTL, and restores frame pointer
  4256. SeeAlso: INT 21/AH=44h
  4257. ----------2F122C-----------------------------
  4258. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  4259.     AX = 122Ch
  4260. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4261. SeeAlso: INT 21/AH=52h
  4262. ----------2F122D-----------------------------
  4263. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4264.     AX = 122Dh
  4265. Return: AX = current extended error code
  4266. SeeAlso: AX=1222h,INT 21/AH=59h
  4267. ----------2F122E-----------------------------
  4268. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  4269.     AX = 122Eh
  4270.     DL = subfunction
  4271.         00h get standard DOS error table (errors 00h-12h,50h-5Bh)
  4272.         Return: ES:DI -> error table
  4273.         01h set standard DOS error table
  4274.         ES:DI -> error table
  4275.         02h get parameter error table (errors 00h-0Ah)
  4276.         Return: ES:DI -> error table
  4277.         03h set parameter error table
  4278.         ES:DI -> error table
  4279.         04h get critical/SHARE error table (errors 13h-2Bh)
  4280.         Return: ES:DI -> error table
  4281.         05h set critical/SHARE error table
  4282.         ES:DI -> error table
  4283.         06h get ??? error table
  4284.         Return: ES:DI -> error table or 0000h:0000h
  4285.         07h set ??? error table
  4286.         ES:DI -> error table
  4287.         08h get error message retriever (see below)
  4288.         Return: ES:DI -> FAR procedure to fetch error message 
  4289.         09h set ??? error table
  4290.         ES:DI -> error table
  4291. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4292.       the offset of the error message table within COMMAND.COM, and the
  4293.       procedure returned by DL=08h should be called
  4294.     DOS 5.0 COMMAND.COM does not allow setting any of the addresses; they
  4295.       are always returned with segment 0001h
  4296. SeeAlso: AX=0500h,INT 21/AH=59h
  4297.  
  4298. Format of DOS 4.x error table:
  4299. Offset    Size    Description
  4300.  00h    BYTE    FFh
  4301.  01h  2 BYTEs    04h,00h (DOS version???)
  4302.  03h    BYTE    number of error headers following
  4303.  04h 2N WORDs    table of all error headers for table
  4304.         Offset    Size    Description
  4305.          00h    WORD    error message number
  4306.          02h    WORD    offset of error message from start of header
  4307.                 error messages are count byte followed by msg
  4308. Note:    DOS 5 error tables consist of one word per error number; each word
  4309.       contains either the offset of a counted string or 0000h
  4310.  
  4311. Call error retrieval function with:
  4312.     AX = error number
  4313.     DI = offset of error table
  4314. Return: ES:DI -> error message (counted string)
  4315. Notes:    this function needs to access COMMAND.COM if the messages were not
  4316.       loaded into memory permanently with /MSG; the caller should assume
  4317.       that the returned message will be overwritten by the next call of
  4318.       the function
  4319.     supported by DR-DOS 5.0
  4320. ----------2F122F-----------------------------
  4321. INT 2F U - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN
  4322.     AX = 122Fh
  4323.     DX = DOS version number (0000h = return true DOS version)
  4324. Note:    not available under DR-DOS 5.0
  4325. SeeAlso: INT 21/AH=30h
  4326. ----------2F13-------------------------------
  4327. INT 2F U - DOS 3.3+ - SET DISK INTERRUPT HANDLER
  4328.     AH = 13h
  4329.     DS:DX -> interrupt handler disk driver calls on read/write
  4330.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4331.          shell) or warm boot (INT 19)
  4332. Return: DS:DX from previous invocation of this function
  4333.     ES:BX from previous invocation of this function
  4334. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4335.       original INT 13 handler.  The first is for disk change detection
  4336.       on floppy drives, the second is for tracking formatting calls and
  4337.       correcting DMA boundary errors, the third is for working around
  4338.       problems in a particular version of IBM's ROM BIOS
  4339.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4340.       also points there unless IO.SYS has installed a special filter for
  4341.       hard disk reads (on systems with model byte FCh and BIOS date
  4342.       "01/10/84" only), in which case it points at the special filter
  4343.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  4344.       functions are still invoked via an INT 13 instruction
  4345.     this is a dangerous security loophole for any virus-monitoring software
  4346.       which does not trap this call (many Bulgarian viruses are known to
  4347.       use it to get the original ROM entry point)
  4348. SeeAlso: INT 13/AH=01h,INT 19
  4349. ----------2F1400-----------------------------
  4350. INT 2F - NLSFUNC.COM - INSTALLATION CHECK
  4351.     AX = 1400h
  4352. Return: AL = 00h not installed, OK to install
  4353.          01h not installed, not OK
  4354.          FFh installed
  4355. Notes:    called by DOS v3.3+ kernel
  4356.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  4357.     supported by DR-DOS 5.0
  4358.     documented for MS-DOS 5.0, but undocumented in prior versions
  4359. ----------2F1401-----------------------------
  4360. INT 2F U - NLSFUNC.COM - CHANGE CODE PAGE
  4361.     AX = 1401h
  4362.     DS:SI -> internal code page structure (see below)
  4363.     BX = new code page
  4364.     DX = country code???
  4365. Return: AL = status
  4366.          00h successful
  4367.          else DOS error code
  4368. Note:    called by DOS v3.3+ kernel
  4369. SeeAlso: INT 21/AH=66h
  4370.  
  4371. Format of DOS 3.30 internal code page structure:
  4372. Offset    Size    Description
  4373.  00h  8 BYTEs    ???
  4374.  08h 64 BYTEs    name of country information file
  4375.  48h    WORD    system code page
  4376.  4Ah    WORD    number of supported subfunctions
  4377.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  4378.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  4379.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  4380.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  4381.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  4382. ----------2F1402-----------------------------
  4383. INT 2F U - NLSFUNC.COM - GET COUNTRY INFO
  4384.     AX = 1402h
  4385.     BP = subfunction (same as AL for INT 21/AH=65h)
  4386.     BX = code page
  4387.     DX = country code
  4388.     DS:SI -> internal code page structure (see AX=1401h)
  4389.     ES:DI -> user buffer
  4390.     CX = size of user buffer
  4391. Return: AL = status
  4392.         00h successful
  4393.         else DOS error code
  4394. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  4395.     code page structure apparently only needed for COUNTRY.SYS pathname
  4396. SeeAlso: AX=1403h,AX=1404h,INT 21/AH=65h
  4397. ----------2F1403-----------------------------
  4398. INT 2F U - NLSFUNC.COM - SET COUNTRY INFO
  4399.     AX = 1403h
  4400.     DS:SI -> internal code page structure (see AX=1401h)
  4401.     BX = code page
  4402.     DX = country code
  4403. Return: AL = status 
  4404.          ???
  4405. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  4406. SeeAlso: AX=1402h,AX=1404h,INT 21/AH=38h"SET"
  4407. ----------2F1404-----------------------------
  4408. INT 2F U - NLSFUNC.COM - GET COUNTRY INFO
  4409.     AX = 1404h
  4410.     BX = code page
  4411.     DX = country code
  4412.     DS:SI -> internal code page structure (see AX=1401h)
  4413.     ES:DI -> user buffer
  4414. Return: AL = status
  4415.          ???
  4416. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  4417.     code page structure apparently only needed for COUNTRY.SYS pathname
  4418. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  4419. ----------2F14FE-----------------------------
  4420. INT 2F U - DR-DOS 5.0 NLSFUNC - ???
  4421.     AX = 14FEh
  4422.     DI = ???
  4423.     ???
  4424. Return: ???
  4425. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4426.       or FFh on entry.
  4427. SeeAlso: AX=14FFh
  4428. ----------2F14FF-----------------------------
  4429. INT 2F U - DR-DOS 5.0 NLSFUNC - ???
  4430.     AX = 14FFh
  4431.     ???
  4432. Return: ???
  4433. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4434.       or FFh on entry.
  4435. SeeAlso: AX=14FEh
  4436. ----------2F1500-----------------------------
  4437. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  4438.     AX = 1500h
  4439. Return: AX = FFFFh
  4440.     ES:DI -> ??? (graphics data?)
  4441. Note:    this installation check conflicts with the CD-ROM Extensions
  4442.       installation check; moved to AX=AC00h in later versions
  4443. SeeAlso: AX=AC00h
  4444. ----------2F1500BX0000-----------------------
  4445. INT 2F - CD-ROM - INSTALLATION CHECK
  4446.     AX = 1500h
  4447.     BX = 0000h
  4448. Return: BX = number of CD-ROM drive letters used
  4449.     CX = starting drive letter (0=A:)
  4450. Notes:    this installation check DOES NOT follow the format used by other
  4451.       software
  4452.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  4453.       installation check
  4454. ----------2F1501-----------------------------
  4455. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  4456.     AX = 1501h
  4457.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  4458. Return: buffer filled, for each drive letter
  4459.       BYTE    subunit number in driver
  4460.       DWORD address of device driver header
  4461. ----------2F1502-----------------------------
  4462. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  4463.     AX = 1502h
  4464.     ES:BX -> 38-byte buffer for name of copyright file
  4465.     CX = drive number (0=A:)
  4466. Return: CF set if drive is not a CD-ROM drive
  4467.         AX = 15 (invalid drive)
  4468.     CF clear if successful
  4469. SeeAlso: AX=1503h
  4470. ----------2F1503-----------------------------
  4471. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  4472.     AX = 1503h
  4473.     ES:BX -> 38-byte buffer for name of abstract file
  4474.     CX = drive number (0=A:)
  4475. Return: CF set if drive is not a CD-ROM drive
  4476.         AX = 15 (invalid drive)
  4477.     CF clear if successful
  4478. SeeAlso: AX=1502h
  4479. ----------2F1504-----------------------------
  4480. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  4481.     AX = 1504h
  4482.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  4483.     CX = drive number (0=A:)
  4484. Return: CF set if drive is not a CD-ROM drive
  4485.         AX = 15 (invalid drive)
  4486.     CF clear if successful
  4487. ----------2F1505-----------------------------
  4488. INT 2F - CD-ROM - READ VTOC
  4489.     AX = 1505h
  4490.     ES:BX -> 2048-byte buffer
  4491.     CX = drive number (0=A:)
  4492.     DX = sector index (0=first volume descriptor,1=second,...)
  4493. Return: CF set on error
  4494.         AX = error code (15=invalid drive,21=not ready)
  4495.     CF clear if successful
  4496.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  4497. ----------2F1506-----------------------------
  4498. INT 2F - CD-ROM - TURN DEBUGGING ON
  4499.     AX = 1506h
  4500.     BX = debugging function to enable
  4501. Note:    reserved for development
  4502. SeeAlso: AX=1507h
  4503. ----------2F1507-----------------------------
  4504. INT 2F - CD-ROM - TURN DEBUGGING OFF
  4505.     AX = 1507h
  4506.     BX = debugging function to disable
  4507. Note:    reserved for development
  4508. SeeAlso: AX=1506h
  4509. ----------2F1508-----------------------------
  4510. INT 2F - CD-ROM - ABSOLUTE DISK READ
  4511.     AX = 1508h
  4512.     ES:BX -> buffer
  4513.     CX = drive number (0=A:)
  4514.     SI:DI = starting sector number
  4515.     DX = number of sectors to read
  4516. Return: CF set on error
  4517.         AL = error code (15=invalid drive,21=not ready)
  4518.     CF clear if successful
  4519. SeeAlso: AX=1509h
  4520. ----------2F1509-----------------------------
  4521. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  4522.     AX = 1509h
  4523.     ES:BX -> buffer
  4524.     CX = drive number (0=A:)
  4525.     SI:DI = starting sector number
  4526.     DX = number of sectors to write
  4527. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  4528. SeeAlso: AX=1508h
  4529. ----------2F150A-----------------------------
  4530. INT 2F - CD-ROM - RESERVED
  4531.     AX = 150Ah
  4532. ----------2F150B-----------------------------
  4533. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  4534.     AX = 150Bh
  4535.     CX = drive number (0=A:)
  4536. Return: BX = ADADh if MSCDEX.EXE installed
  4537.         AX = 0000h if drive not supported
  4538.         nonzero if supported
  4539. SeeAlso: AX=150Dh
  4540. ----------2F150C-----------------------------
  4541. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  4542.     AX = 150Ch
  4543. Return: BH = major version
  4544.     BL = minor version
  4545. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  4546. ----------2F150D-----------------------------
  4547. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  4548.     AX = 150Dh
  4549.     ES:BX -> buffer for drive letter list (1 byte per drive)
  4550. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  4551.     to the drive in the same position for function 1501h
  4552. SeeAlso: AX=150Bh
  4553. ----------2F150E-----------------------------
  4554. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  4555.     AX = 150Eh
  4556.     BX = subfunction
  4557.         00h get preference
  4558.         DX = 0000h
  4559.         Return: DX = preference settings
  4560.         01h set preference
  4561.         DH = volume descriptor preference
  4562.             01h = primary volume descriptor
  4563.             02h = supplementary volume descriptor
  4564.         DL = supplementary volume descriptor preference
  4565.             01h = shift-Kanji
  4566.     CX = drive number (0=A:)
  4567. Return: CF set on error
  4568.         AX = error code (15=invalid drive,1=invalid function)
  4569.     CF clear if successful
  4570. ----------2F150F-----------------------------
  4571. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  4572.     AX = 150Fh
  4573.     CL = drive number (0=A:)
  4574.     CH bit 0 = copy flag
  4575.         clear if direct copy
  4576.         set if copy to structure which removed ISO/High Sierra diffs
  4577.     ES:BX -> ASCIZ path name
  4578.     SI:DI -> buffer for directory entry (see below)
  4579.          minimum 255 bytes for direct copy
  4580. Return: CF set on error
  4581.         AX = error code
  4582.     CF clear if succesful
  4583.         AX = disk format (0=High Sierra,1=ISO 9660)
  4584.  
  4585. Format of directory entry (direct copy):
  4586. Offset    Size    Description
  4587.  00h    BYTE  length of directory entry
  4588.  01h    BYTE  length of XAR in Logical Block Numbers
  4589.  02h    DWORD LBN of data, Intel (little-endian) format
  4590.  06h    DWORD LBN of data, Motorola (big-endian) format
  4591.  0Ah    DWORD length of file, Intel format
  4592.  0Eh    DWORD length of file, Motorola format
  4593. ---High Sierra---
  4594.  12h  6 BYTEs date and time
  4595.  18h    BYTE  bit flags
  4596.  19h    BYTE  reserved
  4597. ---ISO 9660---
  4598.  12h  7 BYTEs date and time
  4599.  19h    BYTE  bit flags
  4600. ---both formats---
  4601.  1Ah    BYTE  interleave size
  4602.  1Bh    BYTE  interleave skip factor
  4603.  1Ch    WORD  volume set sequence number, Intel format
  4604.  1Eh    WORD  volume set sequence number, Motorola format
  4605.  20h    BYTE  length of file name
  4606.  21h  N BYTEs file name
  4607.     BYTE (optional) padding if filename is odd length
  4608.       N BYTEs system data
  4609.  
  4610. Format of directory entry (canonicalized):
  4611. Offset    Size    Description
  4612.  00h    BYTE    length of XAR in Logical Block Numbers
  4613.  01h    DWORD    Logical Block Number of file start
  4614.  05h    WORD    size of disk in logical blocks
  4615.  07h    DWORD    file length in bytes
  4616.  0Bh  7 BYTEs    date and time
  4617.  12h    BYTE    bit flags
  4618.  13h    BYTE    interleave size
  4619.  14h    BYTE    interleave skip factor
  4620.  15h    WORD    volume set sequence number
  4621.  17h    BYTE    length of file name
  4622.  18h 38 BYTEs    ASCIZ filename
  4623.  3Eh    WORD    file version number
  4624.  40h    BYTE    number of bytes of system use data
  4625.  41h 220 BYTEs    system use data
  4626. ----------2F1510-----------------------------
  4627. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  4628.     AX = 1510h
  4629.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  4630.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  4631. ----------2F1600-----------------------------
  4632. INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK
  4633.     AX = 1600h
  4634. Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running
  4635.     AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running
  4636.     AL = 01h if Windows/386 2.x running
  4637.     AL = FFh if Windows/386 2.x running
  4638.     AL = anything else
  4639.         AL = Windows major version number >= 3
  4640.         AH = Windows minor version number
  4641. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  4642.       drivers, TSRs, and applications) to cooperate with multitasking
  4643.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  4644.     certain calls are also supported in the Microsoft 80286 DOS extender in
  4645.       Windows standard mode
  4646. SeeAlso: AX=4680h
  4647. ----------2F1602-----------------------------
  4648. INT 2F - MS WINDOWS/386 2.x - GET API ENTRY POINT
  4649.     AX = 1602h
  4650. Return: ES:DI -> Windows/386 2.x API procedure entry point
  4651. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  4652.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  4653.         AX = 0000h
  4654.         ES:DI -> return address
  4655.         JUMP to address returned from INT 2F/AX=1602h
  4656.     After JUMP, at return address:
  4657.         BX = current VM ID.
  4658. ----------2F1605-----------------------------
  4659. INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  4660.     AX = 1605h
  4661.     ES:BX = 0000h:0000h
  4662.     DS:SI = 0000h:0000h
  4663.     CX = 0000h
  4664.     DX = flags
  4665.         bit 0 = 0 if Windows enhanced-mode initialization
  4666.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  4667.         bits 1-15 reserved (undefined)
  4668.     DI = version number (major in upper byte, minor in lower)
  4669. Return: CX = 0000h if okay for Windows to load
  4670.     CX <> 0 if Windows should not load
  4671.     ES:BX -> startup info structure (see below)
  4672.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  4673. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  4674.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  4675.       driver or TSR can watch for this broadcast and return the appropriate
  4676.       values.  If the driver or TSR returns CX <> 0, it is also its
  4677.       responsibility to display an error message.
  4678.     each handler must first chain to the prior INT 2F handler with
  4679.       registers unchanged before processing the call
  4680.     if the handler requires local data on a per-VM basis, it must store the
  4681.       returned ES:BX in the "next" field of a startup info structure and
  4682.       return a pointer to that structure in ES:BX
  4683.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  4684.       already nonzero, the TSR must fail the initialization by setting CX
  4685.       nonzero
  4686. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  4687.  
  4688. Format of Startup Information Structure:
  4689. Offset    Size    Description
  4690.  00h  2 BYTEs    major, minor version of info structure
  4691.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  4692.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  4693.  0Ah    DWORD    virtual device reference data (only used if above nonzero)
  4694.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  4695.  
  4696. Format of one Instance Item in array:
  4697. Offset    Size    Description
  4698.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  4699.  04h    WORD    size of instance data
  4700.  
  4701. Virtual mode enable/disable procedure called with:
  4702.     AX = 0000h disable V86 mode
  4703.     AX = 0001h enable V86 mode
  4704.     interrupts disabled
  4705. Return: CF set on error
  4706.     CF clear if successful
  4707.     interrupts disabled
  4708. ----------2F1606-----------------------------
  4709. INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  4710.     AX = 1606h
  4711.     DX = flags
  4712.         bit 0 = 0 if Windows enhanced-mode exit
  4713.         bit 0 = 1 if Microsoft 286 DOS extender exit
  4714.         bits 1-15 reserved (undefined)
  4715. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  4716.       broadcast will be issued immediately.
  4717.     this call will be issued in real mode
  4718. SeeAlso: AX=1605h,AX=1609h
  4719. ----------2F1607-----------------------------
  4720. INT 2F - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  4721.     AX = 1607h
  4722.     BX = virtual device ID (see INT 2F/AX=1684h)
  4723. Notes:    more of a convention than an API, this call specifies a standard
  4724.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  4725.       to DOS device drivers and TSRs
  4726.     VNETBIOS calls this function and then checks ES:DI to determine whether
  4727.       the NetBIOS has any extensions Windows should know about
  4728.     VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  4729.       nonzero; if yes, it will not automatically virtualize the mouse
  4730.       driver.  This would be used if MOUSE.COM already virtualizes
  4731.       itself using the Windows API.
  4732. SeeAlso: AX=1605h,AX=1684h
  4733. ----------2F1608-----------------------------
  4734. INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  4735.     AX = 1608h
  4736. Notes:    called after all installable devices have been initialized
  4737.     real-mode software may be called between the Windows enhanced-mode init
  4738.       call (AX=1605h) and this call; the software must detect this
  4739.       situation
  4740. SeeAlso: AX=1605h,AX=1609h
  4741. ----------2F1609-----------------------------
  4742. INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  4743.     AX = 1609h
  4744. Note:    called at the beginning of a normal exit sequence; not made in the
  4745.       event of a fatal system crash
  4746. SeeAlso: AX=1606h,AX=1608h
  4747. ----------2F1680-----------------------------
  4748. INT 2F - MS WINDOWS, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  4749.     AX = 1680h
  4750. Return: AL = 00h if the call is supported
  4751.     AL = 80h (unchanged) if the call is not supported
  4752. Notes:    programs can use this function in idle loops to enhance performance
  4753.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  4754.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  4755.       applications
  4756.     does not block the program; it just gives up the remainder of the time
  4757.       slice
  4758.     should not be used by Windows programs
  4759. SeeAlso: INT 15/AX=1000h
  4760. ----------2F1681-----------------------------
  4761. INT 2F - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  4762.     AX = 1681h
  4763. Notes:    used to prevent a task switch from occurring
  4764.     should be followed by an INT 2F/AX=1682h call as soon as possible
  4765.     nested calls are allowed, and must be followed by an appropriate number
  4766.       of "end critical section" calls
  4767.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  4768.       and increment by hand.
  4769. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  4770. ----------2F1682-----------------------------
  4771. INT 2F - MS WINDOWS 3+ - END CRITICAL SECTION
  4772.     AX = 1682h
  4773. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  4774.       and decrement by hand, taking care not to decrement InDOS flag
  4775.       through zero
  4776. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  4777. ----------2F1683-----------------------------
  4778. INT 2F - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  4779.     AX = 1683h
  4780. Return: BX = current virtual machine (VM) ID
  4781. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  4782.     VM IDs are reused when VMs are destroyed
  4783.     an ID of 0 will never be returned
  4784. SeeAlso: AX=1684h,AX=1685h
  4785. ----------2F1684-----------------------------
  4786. INT 2F - MS WINDOWS - GET DEVICE API ENTRY POINT
  4787.     AX = 1684h
  4788.     BX = virtual device (VxD) ID (see below)
  4789.     ES:DI = 0000h:0000h
  4790. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  4791. Note:    some Windows enhanced-mode virtual devices provide services that
  4792.       applications can access.  For example, the Virtual Display Device
  4793.       (VDD) provides an API used in turn by WINOLDAP.
  4794. SeeAlso: AX=1683h
  4795.  
  4796. Values for VxD ID:
  4797.  01h    VMM        Virtual Machine Manager
  4798.  02h    Debug
  4799.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  4800.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  4801.  05h    VTD        Virtual Timer Device
  4802.  06h    V86MMGR        Virtual 8086 Mode Device
  4803.  07h    PAGESWAP    Paging Device
  4804.  08h    Parity
  4805.  09h    Reboot
  4806.  0Ah    VDD        Virtual Display Device (GRABBER)
  4807.  0Bh    VSD        Virtual Sound Device
  4808.  0Ch    VMD        Virtual Mouse Device
  4809.  0Dh    VKD        Virtual Keyboard Device
  4810.  0Eh    VCD        Virtual COMM Device
  4811.  0Fh    VPD        Virtual Printer Device
  4812.  10h    VHD        Virtual Hard Disk Device
  4813.  11h    VMCPD
  4814.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  4815.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  4816.  14h    VNETBIOS    Virtual NetBIOS Device
  4817.  15h    DOSMGR
  4818.  16h    WINLOAD
  4819.  17h    SHELL
  4820.  18h    VMPoll
  4821.  19h    VPROD
  4822.  1Ah    DOSNET        assures network integrity across VMs
  4823.  1Bh    VFD        Virtual Floppy Device
  4824.  1Ch    VDD2        Secondary display adapter
  4825.  1Dh    WINDEBUG
  4826.  1Eh    TSRLoad        TSR instance utility
  4827. Note:    The high bit of the VxD ID is reserved for future use. The
  4828.     next 10 bits are the OEM # which is assigned by Microsoft. The
  4829.     low 5 bits are the device number. 
  4830.  
  4831. Call VTD.386 entry point with:
  4832.     AX = 0000h get VTD version number
  4833.         Return: AH = major version
  4834.                 AL = minor version
  4835.     AX = 0100h get current clock tick time
  4836.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  4837.                     started
  4838.     AX = 0101h get current system time in milliseconds
  4839.         Return: EAX = time in milliseconds that Windows has been running
  4840.     AX = 0102h get current virtual machine time
  4841.         Return: EAX = cumulative amount of time the virtual machine has
  4842.                 been active, in milliseconds
  4843. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  4844.       be called
  4845. ----------2F1685-----------------------------
  4846. INT 2F - MS WINDOWS - SWITCH VMs AND CALLBACK
  4847.     AX = 1685h
  4848.     BX = VM ID of virtual machine to switch to
  4849.     CX = flags
  4850.         bit 0 wait until interrupts enabled
  4851.         bit 1 wait until critical section unowned
  4852.         bits 2-15 reserved (zero)
  4853.     DX:SI = priority boost (see VMM.INC)
  4854.     ES:DI -> FAR procedure to callback
  4855. Return: CF set on error
  4856.         AX = error code
  4857.         01h invalid VM ID
  4858.         02h invalid priority boost
  4859.         03h invalid flags
  4860.     CF clear if successful
  4861.         event will be or has been called
  4862. Notes:    some DOS devices, such as networks, need to call functions in a
  4863.       specific VM. This call forces the appropriate VM to be installed.
  4864.     the callback procedure must preserve all registers and return with IRET
  4865. SeeAlso: AX=1683h,INT 15/AX=1117h
  4866. ----------2F1686-----------------------------
  4867. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4868.     AX = 1686h
  4869. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4870.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4871. SeeAlso: AX=1687h
  4872. ----------2F1687-----------------------------
  4873. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4874.     AX = 1687h
  4875. Return: AX = 0000h if installed
  4876.         BX = flags
  4877.         bit 0: 32-bit programs supported
  4878.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4879.         DH = DPMI major version
  4880.         DL = two-digit DPMI minor version
  4881.         SI = number of paragraphs of DOS extender private data
  4882.         ES:DI -> DPMI mode-switch entry point
  4883.     AX nonzero if not installed
  4884. SeeAlso: AX=1686h
  4885.  
  4886. Call mode switch entry point with:
  4887.     AX = flags
  4888.         bit 0: set if 32-bit program
  4889.     ES = real mode segment of buffer for DPMI private data (ignored if
  4890.         SI was zero)
  4891. Return: CF set on error
  4892.         program still in real mode
  4893.         AX = error code (DPMI 1.0+)
  4894.            8011h unable to allocate all necessary descriptors
  4895.            8021h 32-bit program specified, but 16-bit DPMI host
  4896.     CF clear if successful
  4897.         CS = 16-bit selector corresponding to real-mode CS
  4898.         SS = selector corresponding to real-mode SS (64K limit)
  4899.         DS = selector corresponding to real-mode DS (64K limit)
  4900.         ES = selector to program's PSP (100h byte limit)
  4901.         FS = GS = 0
  4902.         high word of ESP = 0 if 32-bit program
  4903.         program now in protected mode
  4904. Note:    this entry point is only called for the initial switch to protected
  4905.       mode
  4906. ----------2F1688-----------------------------
  4907. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT???
  4908.     AX = 1688h
  4909. Return: AX = status??? (0000h for 386MAX)
  4910.     BX = selector for ???
  4911. ----------2F1689-----------------------------
  4912. INT 2F U - MS Windows 3.0 - IDLE CALL???
  4913.     AX = 1689h
  4914.     ???
  4915. Return: ???
  4916. ----------2F168A-----------------------------
  4917. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4918.     AX = 168Ah
  4919.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4920. Return: AL = status
  4921.         00h successful
  4922.            ES:(E)DI -> extended API entry point
  4923.         8Ah unsuccessful
  4924. Notes:    the vendor name is used to determine which entry point to return; it is
  4925.       case-sensitive
  4926.     available in protected mode only
  4927.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4928.     this call is present but not documented for DPMI 0.9
  4929. SeeAlso: INT 31/AX=0A00h
  4930.  
  4931. Vendor names:
  4932.  "MS-DOS"    ??? and 386MAX v6.00+
  4933.  "386MAX"    386MAX v6.00+
  4934. ----------2F1700-----------------------------
  4935. INT 2F - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4936.     AX = 1700h
  4937. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4938.     AX <> 1700h
  4939.         AL = WINOLDAP major version
  4940.         AH = WINOLDAP minor version
  4941. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4942.       "old" (character-mode) application access to Dynamic Data Exchange,
  4943.       menus, and the Windows clipboard.
  4944.     this installation check DOES NOT follow the format used by other
  4945.       software
  4946. ----------2F1701-----------------------------
  4947. INT 2F - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  4948.     AX = 1701h
  4949. Return:    AX <> 0     success
  4950.     AX = 0     clipboard is already open
  4951. ----------2F1702-----------------------------
  4952. INT 2F - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  4953.     AX = 1702h
  4954. Return: AX <> 0     clipboard has been emptied
  4955.     AX = 0     failure
  4956. ----------2F1703-----------------------------
  4957. INT 2F - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  4958.     AX = 1703h
  4959.     DX = clipboard format supported by WinOldAp:
  4960.         01h text
  4961.         02h bitmap
  4962.         03h metafile picture
  4963.         04h SYLK
  4964.         05h DIF
  4965.         06h TIFF
  4966.         07h OEM text
  4967.     ES:BX -> data (see below for formats)
  4968.     SI:CX = size of data
  4969. Return: AX <> 0 data copied into the Clipboard
  4970.     AX = 0 failure
  4971.  
  4972. Format of bitmap:
  4973. Offset    Size    Description
  4974.  00h    WORD    type (0000h)
  4975.  02h    WORD    width of bitmap in pixels
  4976.  04h    WORD    height of bitmap in pixels
  4977.  06h    WORD    bytes per line
  4978.  08h    BYTE    number of color planes
  4979.  09h    BYTE    number of adjacent color bits in pixel
  4980.  0Ah    DWORD    pointer to start of data
  4981.  0Eh    WORD    width in 0.1mm units
  4982.  10h    WORD    height in 0.1mm units
  4983.  12h  N BYTEs    bitmap data
  4984.  
  4985. Format of metafile picture:
  4986. Offset    Size    Description
  4987.  00h    WORD    mapping mode
  4988.  02h    WORD    X extent
  4989.  04h    WORD    Y extent
  4990.  06h    WORD    picture data
  4991. ----------2F1704-----------------------------
  4992. INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4993.     AX = 1704h
  4994.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4995. Return:     DX:AX = size of data in bytes, including any headers
  4996. Failure: DX:AX = 0  no data in this format in the Clipboard
  4997. ----------2F1705-----------------------------
  4998. INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  4999.     AX = 1705h
  5000.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  5001.     ES:BX -> buffer
  5002. Return: AX <> 0     success
  5003.     AX = 0     error, or no data in this format in Clipboard
  5004. ----------2F1708-----------------------------
  5005. INT 2F - MS WINDOWS "WINOLDAP" - CloseClipboard
  5006.     AX = 1708h
  5007. Return: AX <> 0 success
  5008.     AX = 0 failure
  5009. ----------2F1709-----------------------------
  5010. INT 2F - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  5011.     AX = 1709h
  5012.     SI:CX = desired size in bytes
  5013. Return: DX:AX = number of bytes in largest block of free memory
  5014. Note:    WinOldAp is responsible for including the size of any headers
  5015. ----------2F170A-----------------------------
  5016. INT 2F - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  5017.     AX = 170Ah
  5018.     DX = GDI information index
  5019.         00h device driver version
  5020.         02h device classification
  5021.         04h width in mm
  5022.         06h height in mm
  5023.         08h width in pixels
  5024.         0Ah height in pixels
  5025.         0Ch bits per pixel
  5026.         0Eh number of bit planes
  5027.         10h number of brushes supported by device
  5028.         12h number of pens supported by device
  5029.         14h number of markers supported by device
  5030.         16h number of fonts supported by device
  5031.         18h number of colors
  5032.         1Ah size required for device descriptor
  5033.         1Ch curve capabilities
  5034.         1Eh line capabilities
  5035.         20h polygon capabilities
  5036.         22h text capabilities
  5037.         24h clipping capabilities
  5038.         26h bitblt capabilities
  5039.         28h X aspect
  5040.         2Ah Y aspect
  5041.         2Ch length of hypotenuse of aspect
  5042.         58h logical pixels per inch of width
  5043.         5Ah logical pixels per inch of height
  5044. Return:     AX = integer value of the desired item
  5045.         device classification
  5046.             00h vector plotter
  5047.             01h raster display
  5048.             02h raster printer
  5049.             03h raster camera
  5050.             04h character-stream, PLP
  5051.             05h Metafile, VDM
  5052.             06h display-file
  5053.         curve capabilities
  5054.             bit 0  circles
  5055.             bit 1  pie wedges
  5056.             bit 2  chord arcs
  5057.             bit 3  ellipses
  5058.             bit 4  wide lines
  5059.             bit 5  styled lines
  5060.             bit 6  wide styled lines
  5061.             bit 7  interiors
  5062.         line capabilities
  5063.             bit 1  polylines
  5064.             bit 2  markers
  5065.             bit 3  polymarkers
  5066.             bit 4  wide lines
  5067.             bit 5  styled lines
  5068.             bit 6  wide styled lines
  5069.             bit 7  interiors
  5070.         polygon capabilities
  5071.             bit 0  polygons
  5072.             bit 1  rectangles
  5073.             bit 2  trapezoids
  5074.             bit 3  scanlines
  5075.             bit 4  wide borders
  5076.             bit 5  styled borders
  5077.             bit 6  wide styled borders
  5078.             bit 7  interiors
  5079.         text capabilities
  5080.             bit 0  output precision character
  5081.             bit 1  output precision stroke
  5082.             bit 2  clippping precision stroke
  5083.             bit 3  90-degree character rotation
  5084.             bit 4  arbitrary character rotation
  5085.             bit 5  independent X and Y scaling
  5086.             bit 6  double-size
  5087.             bit 7  integer scaling
  5088.             bit 8  continuous scaling
  5089.             bit 9  bold
  5090.             bit 10 italic
  5091.             bit 11 underline
  5092.             bit 12 strikeout
  5093.             bit 13 raster fonts
  5094.             bit 14 vector fonts
  5095.             bit 15 reserved
  5096.         clipping capabilities
  5097.             00h none
  5098.             01h clipping to rectangles
  5099.         raster capabilities
  5100.             bit 0  simple bitBLT
  5101.             bit 1  device requires banding support
  5102.             bit 2  device requires scaling support
  5103.             bit 3  supports >64K bitmap
  5104. Note:  This function returns the device-capability bits for the given display
  5105. ----------2F1900-----------------------------
  5106. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  5107.     AX = 1900h
  5108. Return: AL = 00h  not installed
  5109.          FFh  installed
  5110. ----------2F1901BL00-------------------------
  5111. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  5112.     AX = 1901h
  5113.     BL = 00h if SHELLC transient
  5114.          01h if SHELLC resident
  5115.     DS:DX -> far call entry point for resident SHELLC.EXE
  5116. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  5117. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  5118. ----------2F1902-----------------------------
  5119. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  5120.     AX = 1902h
  5121.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  5122.          final filename element uppercased
  5123.     DS:DX -> buffer for results
  5124. Return: AL = 00h  failed, either
  5125.           (a) final filename element quoted at ES:DI does not match
  5126.               identity of shell batch file quoted as parameter of most
  5127.               recent call of SHELLB command, or
  5128.           (b) no more Program Start Commands available.
  5129.     AL= FFh     success, then:
  5130.         memory at DS:[DX+1] onwards filled as:
  5131.         DX+1:    BYTE    count of bytes of PSC
  5132.         DX+2: N BYTEs    Program Start Command text
  5133.             BYTE    0Dh terminator 
  5134. Explanation: COMMAND.COM executes the result of this call in preference to 
  5135.     reading a command from a batch file. Thus the batch file does not
  5136.     advance in execution for so long as SHELLB provides PSCs from its
  5137.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  5138.     menu interface. The final PSC of a sequence is finished with a 
  5139.     GOTO COMMON, which causes a loop back in the batch file which called
  5140.     SHELLC so as to execute SHELLC again. The check on batch file name
  5141.     permits PSCs to CALL nested batch files while PSCs are still stacked
  5142.     up for subsequent execution.
  5143. ----------2F1903-----------------------------
  5144. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  5145.     AX = 1903h
  5146.     ES:DI -> ASCIZ batch file name as for AX=1902h
  5147. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  5148.     AL = 00h if it does not
  5149. ----------2F1904-----------------------------
  5150. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  5151.     AX = 1904h
  5152. Return: ES:DI -> name of current shell batch file:
  5153.         WORD    number of bytes of name following
  5154.         BYTEs    (8 max) uppercase name of shell batch file
  5155. ----------2F1A00-----------------------------
  5156. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  5157.     AX = 1A00h
  5158. Return: AL = FFh if installed
  5159. Notes:    AVATAR.SYS also responds to this call
  5160.     documented for DOS 5+, but undocumented for DOS 4.x
  5161. ----------2F1A00BX4156-----------------------
  5162. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  5163.     AX = 1A00h
  5164.     BX = 4156h ('AV')
  5165.     CX = 4154h ('AT')
  5166.     DX = 4152h ('AR')
  5167. Return: AL = FFh if installed
  5168.         CF clear
  5169.         BX = AVATAR protocol level supported
  5170.         CX = driver type
  5171.         0000h AVATAR.SYS
  5172.         4456h DVAVATAR.COM inside DESQview window
  5173.         DX = 0016h
  5174. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  5175.       the magic values
  5176.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  5177.       interprets AVATAR command codes in the same way that ANSI interprets
  5178.       ANSI command codes
  5179. ----------2F1A01-----------------------------
  5180. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  5181.     AX = 1A01h
  5182.     CL = function
  5183.         7Fh for GET
  5184.         5Fh for SET
  5185.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  5186. Return: CF set on error
  5187.         AX = error code (many non-standard)
  5188.     CF clear if successful
  5189.         AX destroyed
  5190. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  5191. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  5192. ----------2F1A02-----------------------------
  5193. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  5194.     AX = 1A02h
  5195.     DS:DX -> parameter block (see below)
  5196. Note:    DOS 5.0 chains to previous handler if AL > 02h on call
  5197. SeeAlso: AX=1A01h
  5198.  
  5199. Format of parameter block:
  5200. Offset    Size    Description
  5201.  00h    BYTE    subfunction
  5202.         00h set/reset interlock
  5203.         01h get /L flag
  5204.  01h    BYTE    interlock state
  5205.         00h=reset, 01h=set
  5206.           This interlock prevents some of the ANSI.SYS post-processing
  5207.           in its hook onto INT 10, AH=00h mode set
  5208.  02h    BYTE    (returned)
  5209.         00h if /L not in effect
  5210.         01h if /L in effect
  5211. ----------2F1A21-----------------------------
  5212. INT 2F - AVATAR.SYS - SET DRIVER STATE
  5213.     AX = 1A21h (AL='!')
  5214.     DS:SI -> command string with one or more state characters
  5215.     CX = length of command string
  5216. Return: CF set on error (invalid subfunction)
  5217.     CF clear if successful
  5218. Note:    the characters in the state string are interpreted left to right, and
  5219.       need not be in any particular order
  5220. SeeAlso: AX=1A3Fh
  5221.  
  5222. Values of state characters:
  5223.  'a'    activate driver
  5224.  'd'    disable driver
  5225.  'f'    use fast screen output
  5226.  'g'    always convert gray keys (+ and -) to function keys
  5227.  'G'    never convert gray keys
  5228.  'l'    convert gray keys only when ScrollLock active
  5229.  's'    use slow screen output
  5230.  't'    Tandy 1000 keyboard (not yet implemented)
  5231. ----------2F1A3C-----------------------------
  5232. INT 2F U - AVATAR.SYS v0.11 - ???
  5233.     AX = 1A3Ch
  5234.     ???
  5235. Return: CX = 0000h
  5236. ----------2F1A3E-----------------------------
  5237. INT 2F U - AVATAR.SYS v0.11 - ???
  5238.     AX = 1A3Eh
  5239.     CL = ???
  5240.     CH = ???
  5241.     DL = ???
  5242.     DH = ???
  5243. Return: CL = ???
  5244.     CH = ???
  5245.     DL = ???
  5246.     DH = ???
  5247. ----------2F1A3F-----------------------------
  5248. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  5249.     AX = 1A3Fh (AL='?')
  5250.     ES:DI -> buffer
  5251.     CX = length of buffer in bytes
  5252. Return: CF clear
  5253.     CX = actual size of returned info
  5254. Note:    the returned information consists of multiple letters whose meanings
  5255.       are described under AX=1A21h
  5256. SeeAlso: AX=1A21h
  5257. ----------2F1A42BX4156-----------------------
  5258. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  5259.     AX = 1A42h
  5260.     BX = 4156h ('AV')
  5261.     ES:DI -> FAR handler for serial port using IRQ3
  5262.     DS = data segment needed by handler
  5263. Return: AX = 1A42h if ASD not installed
  5264.        = 0000h if no more room
  5265.        else handle to use when uninstalling
  5266. Notes:    the handler need not save/restore registers or signal EOI to the
  5267.       interrupt controller
  5268.     the handler should return AX=0000h if the interrupt was meant for it,
  5269.       and either leave AX unchanged or return a non-zero value otherwise
  5270.     the most recently installed handler will be called first, continuing
  5271.       to earlier handlers until one returns AX=0000h
  5272. SeeAlso: AX=1A43h,AX=1A62h
  5273. ----------2F1A43BX4156-----------------------
  5274. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  5275.     AX = 1A43h
  5276.     BX = 4156h ('AV')
  5277.     ES:DI -> FAR handler for serial port using IRQ4
  5278.     DS = data segment needed by handler
  5279. Return: AX = 1A43h if ASD not installed
  5280.        = 0000h if no more room
  5281.        else handle to use when uninstalling
  5282. Notes:    (see AX=1A42h)
  5283. SeeAlso: AX=1A42h,AX=1A63h
  5284. ----------2F1A44BX4156-----------------------
  5285. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  5286.     AX = 1A44h
  5287.     BX = 4156h ('AV')
  5288. Return: AX = 0000h
  5289.     DS = data segment
  5290.     CX = size of data segment
  5291. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  5292.       process under a multitasker hooks this function and provides a
  5293.       separate data segment, AVATAR.SYS becomes fully reentrant.
  5294. SeeAlso: AX=1A21h,AX=1A3Fh
  5295. ----------2F1A52-----------------------------
  5296. INT 2F U - AVATAR.SYS v0.11 - GET ???
  5297.     AX = 1A52h
  5298.     CX = size of buffer
  5299.     ES:DI -> buffer
  5300. Return: ??? copied into user buffer
  5301. Note:    the maximum size of the data which may be copied is returned by
  5302.       AX=1A72h
  5303. SeeAlso: AX=1A72h
  5304. ----------2F1A53-----------------------------
  5305. INT 2F U - AVATAR.SYS v0.11 - ???
  5306.     AX = 1A53h
  5307.     CL = ??? (00h-05h)
  5308.     ???
  5309. Return: ???
  5310. ----------2F1A62BX4156-----------------------
  5311. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  5312.     AX = 1A62h
  5313.     BX = 4156h ('AV')
  5314.     CX = handle for IRQ routine returned by AX=1A42h
  5315. SeeAlso: AX=1A42h,AX=1A63h
  5316. ----------2F1A63BX4156-----------------------
  5317. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  5318.     AX = 1A63h
  5319.     BX = 4156h ('AV')
  5320.     CX = handle for IRQ routine returned by AX=1A43h
  5321. SeeAlso: AX=1A43h,AX=1A62h
  5322. ----------2F1A72-----------------------------
  5323. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  5324.     AX = 1A72h
  5325. Return: CX = maximum size of ???
  5326. SeeAlso: AX=1A52h
  5327. ----------2F1A7B-----------------------------
  5328. INT 2F U - AVATAR.SYS v0.11 - ???
  5329.     AX = 1A7Bh
  5330. Return: AX = 0000h
  5331.     CX = 0000h
  5332. ----------2F1A7D-----------------------------
  5333. INT 2F U - AVATAR.SYS v0.11 - ???
  5334.     AX = 1A7Dh
  5335. Return: AX = ???
  5336. ----------2F1AADDX0000-----------------------
  5337. INT 2F U - AVATAR.SYS v0.11 - ???
  5338.     AX = 1AADh
  5339.     DX = 0000h
  5340.     CX = subfunction (00h-0Ch)
  5341.     ???
  5342. Return: AX = 0000h if DX was nonzero
  5343.     ???
  5344. ----------2F1B00-----------------------------
  5345. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  5346.     AX = 1B00h
  5347. Return: AL = FFh if installed
  5348. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  5349.     This extension hooks onto INT 67/AH=58h and returns from that call data
  5350.       which excludes the physical pages being used by DOS.
  5351. SeeAlso: AX=1Bh"FRAME INFO"
  5352. ----------2F1B-------------------------------
  5353. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  5354.     AH = 1Bh
  5355.     AL <> 00h
  5356.     DI = hidden physical page number
  5357. Return: AX = FFFFh if failed (no such hidden page)
  5358.     AX = 0000h if OK, then
  5359.          ES = segment of page frame
  5360.          DI = physical page number
  5361. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  5362.     FASTOPEN makes this call with AL = FFh
  5363. SeeAlso: AX=1B00h
  5364. ----------2F2300-----------------------------
  5365. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  5366.     AX = 2300h
  5367. Return: AH = FFh
  5368. Note:    this installation check does not follow the usual format
  5369. SeeAlso: AH=23h
  5370. ----------2F23-------------------------------
  5371. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  5372.     AH = 23h
  5373.     AL nonzero
  5374. Return: AH = FFh
  5375.     ES:BX -> graphics data
  5376. SeeAlso: AX=2300h
  5377. ----------2F2700-----------------------------
  5378. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  5379.     AX = 2700h
  5380. Return: AL = 00h not installed
  5381.        = FFh installed
  5382. ----------2F2701-----------------------------
  5383. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  5384.     AX = 2701h
  5385. Return: AX = maximum simultaneous tasks
  5386.     BX = index into TASK_IDS of current foreground task
  5387.     CX = currently-active tasks
  5388.     DX = version number (DR-DOS 6.0 = 0001h)
  5389.     ES:SI -> TASK_IDS
  5390.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  5391. Notes:    do not attempt to create a new task if CX == AX
  5392.     the task's index is its position on the task menu, while its ID is the
  5393.       position within the internal task name table
  5394. SeeAlso: AX=2714h,AX=2716h
  5395. ----------2F2702-----------------------------
  5396. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  5397.     AX = 2702h
  5398. Return: DX = maximum pages INT 67/AH=42h will report available
  5399. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  5400.       amount which is reported as being available at a given time
  5401. SeeAlso: AX=2703h,INT 67/AH=42h
  5402. ----------2F2703-----------------------------
  5403. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  5404.     AX = 2703h
  5405.     DX = maximum pages INT 67/AH=42h should report available
  5406. Return: DX = new maximum for reporting
  5407. SeeAlso: AX=2702h,INT 67/AH=42h
  5408. ----------2F2704-----------------------------
  5409. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  5410.     AX = 2704h
  5411.     DL = subfunction
  5412.         00h unregister task manager
  5413.         01h register task manager
  5414. Return: DL = status
  5415.         00h registered
  5416.         01h unregistered
  5417. Notes:    a task manager replaces TaskMAX's menu system with its own user
  5418.       interface; while one is registered, the TaskMAX hotkeys and
  5419.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  5420.     unregister the task manager before terminating it
  5421. SeeAlso: AX=2705h
  5422. ----------2F2705-----------------------------
  5423. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  5424.     AX = 2705h
  5425.     DL = subfunction
  5426.         00h disable keystrokes for switching to next/prev/specified task
  5427.         01h enable
  5428. Return: nothing
  5429. Note:    should only be called by a registered task manager (see AX=2704h)
  5430. SeeAlso: AX=2704h,AX=2706h
  5431. ----------2F2706-----------------------------
  5432. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  5433.     AX = 2706h
  5434.     DX = task index (see AX=2701h) of task to be activated
  5435. Return: DX = task index of previously-active task
  5436. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  5437. ----------2F2707-----------------------------
  5438. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  5439.     AX = 2707h
  5440.     DS:DX -> ASCIZ pathname of executable
  5441.     ES:BX -> parameter block (see below)
  5442.     CX = number of ticks before automatic return to task manager
  5443.         (0000h = run until termination or explicitly switched)
  5444. Return: DX = new task's task index (FFFFh if task terminated)
  5445. SeeAlso: AX=2706h,AX=2708h
  5446.  
  5447. Format of parameter block:
  5448. Offset    Size    Description
  5449.  00h    WORD    reserved, should be 0000h
  5450.  02h    DWORD    pointer to command tail to be copied into child's PSP
  5451.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  5452.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  5453. ----------2F2708-----------------------------
  5454. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  5455.     AX = 2708h
  5456.     DX = task index
  5457. Return: DX = FFFFh (task deleted)
  5458. Notes:    this call should only be used for abnormal task termination, after
  5459.       first checking for open files with AX=270Ch; should not be used
  5460.       with programs that allocate EMS or XMS memory
  5461.     switches to specified task first
  5462. SeeAlso: AX=2707h
  5463. ----------2F2709-----------------------------
  5464. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  5465.     AX = 2709h
  5466.     DX = task index
  5467.     DS:SI -> 8-byte name (8 NULs = remove name)
  5468. Return: AL = task flags
  5469.         00h ID unused or task terminated
  5470.         01h ID in use, task name table entry valid
  5471.         81h ID in use, task name fixed
  5472.     BX = task ID
  5473.     ES:DI -> name in task name table (see AX=2701h)
  5474. Note:    the task retains the given name until it terminates or the name is
  5475.       removed by specifying a name of 8 NULs.
  5476. SeeAlso: AX=2701h,AX=2707h
  5477. ----------2F270A-----------------------------
  5478. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  5479.     AX = 270Ah
  5480.     DX = task index
  5481. Return: DX = task ID (FFFFh if index invalid)
  5482. Note:    task IDs stay constant, while indexes can change when other tasks are
  5483.       deleted
  5484. SeeAlso: AX=2701h,AX=270Bh
  5485. ----------2F270B-----------------------------
  5486. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  5487.     AX = 270Bh
  5488.     DX = task ID
  5489. Return: DX = task index (FFFFh if task not active)
  5490. SeeAlso: AX=270Ah
  5491. ----------2F270C-----------------------------
  5492. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  5493.     AX = 270Ch
  5494.     DX = task index
  5495. Return: AX = number of files currently open for specified task
  5496. SeeAlso: AX=2708h
  5497. ----------2F270D-----------------------------
  5498. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  5499.     AX = 270Dh
  5500.     DX = task index
  5501. Return: DX = status
  5502.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5503.         0001h if not in root shell for task
  5504. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5505.       command interpreter with AX=2707h
  5506. SeeAlso: AX=2707h,AX=270Ch
  5507. ----------2F270E-----------------------------
  5508. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5509.     AX = 270Eh
  5510.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5511.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5512. Return: ES:DI -> current lead-in string
  5513. Note:    the specified sequence of keystrokes is sent to the application before
  5514.       every line of a text-mode spreadsheet paste
  5515. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5516. ----------2F270F-----------------------------
  5517. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5518.     AX = 270Fh
  5519.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5520.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5521. Return: ES:DI -> current lead-in string
  5522. Note:    the specified sequence of keystrokes is sent to the application before
  5523.       every number in a numeric-mode spreadsheet paste
  5524. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5525. ----------2F2710-----------------------------
  5526. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5527.     AX = 2710h
  5528.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5529.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5530. Return: ES:DI -> current lead-in string
  5531. Note:    the specified sequence of keystrokes is sent to the application after
  5532.       every line of a spreadsheet paste operation
  5533. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5534. ----------2F2711-----------------------------
  5535. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5536.     AX = 2711h
  5537.     DX = ASCII code for separator (FFFFh to get current)
  5538. Return: DL = current separator character
  5539. SeeAlso: AX=270Fh
  5540. ----------2F2712-----------------------------
  5541. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5542.     AX = 2712h
  5543.     DX = task index
  5544. ----------2F2713-----------------------------
  5545. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5546.     AX = 2713h
  5547.     DX = task index
  5548.     CX = past mode
  5549.         0000h alphanumeric
  5550.         0001h numeric
  5551.         0002h text
  5552. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5553. ----------2F2714-----------------------------
  5554. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5555.     AX = 2714h
  5556. Return: CX = total KB of swap space
  5557.     DX = available KB of swap space
  5558. SeeAlso: AX=2701h
  5559. ----------2F2715-----------------------------
  5560. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5561.     AX = 2715h
  5562. Return: only after calling task is again selected
  5563. SeeAlso: AX=2706h
  5564. ----------2F2716-----------------------------
  5565. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5566.     AX = 2716h
  5567. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5568.         CX = bytes in paste buffer
  5569.         DX = current generation number (updated after every copy operation)
  5570. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5571. ----------2F2717-----------------------------
  5572. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5573.     AX = 2717h
  5574.     CX = bytes in destination buffer
  5575.     ES:DI -> destination buffer
  5576. Return: AX = 0000h if function supported
  5577.         CX = bytes actually copied (FFFFh if buffer too small)
  5578.         DX = current generation number for paste buffer
  5579. Note:    the destination buffer may be too small if another task adds more data
  5580.       to the paste buffer after the AX=2716h call but before this call
  5581. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5582. ----------2F2718-----------------------------
  5583. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5584.     AX = 2718h
  5585.     CX = bytes in source buffer
  5586.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5587. Return: AX = 0000h if function supported
  5588.         CX = bytes actually copied
  5589.         DX = current generation number for paste buffer
  5590. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5591. ----------2F2A-------------------------------
  5592. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5593.     AH = 2Ah
  5594. Note:    details not available at this time
  5595. SeeAlso: AX=8000h"FaxBIOS",AX=CB00h,INT 66"BitFax"
  5596. ----------2F3900-----------------------------
  5597. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5598.     AX = 3900h
  5599. Return: AL = status
  5600.         00h not installed
  5601.         FFh one or more TSRs using this interface is installed
  5602. Note:    this function is provided to that the multiplex number will appear used
  5603.       to other programs
  5604. SeeAlso: AH=39h/BL=00h
  5605. ----------2F39--BL00-------------------------
  5606. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5607.     AH = 39h
  5608.     BL = 00h
  5609.     AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)
  5610. Return: AL = status
  5611.         00h not installed
  5612.         FFh installed
  5613.         DX = segment address of resident module
  5614. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5615.       resident module is installed by allocating a block of upper memory,
  5616.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  5617.       field with the TSR's name.
  5618. SeeAlso: AX=3900h,AH=39h/BL=01h
  5619.  
  5620. Values for TSR ID number:
  5621.  01h TSR Windows
  5622.  02h NOBUSY
  5623.  03h CD STACK
  5624.  04h DISK WATCH
  5625.  05h PUSHBP
  5626.  06h ALIAS
  5627.  07h KEYMACRO
  5628.  08h SLOWDOWN
  5629.  09h ANSIGRAB
  5630.  0Ah TEE
  5631.  0Bh FASTMOUS
  5632.  0Ch EXTWILD
  5633.  0Dh BREAKOUT
  5634.  0Eh STOPDISK
  5635.  
  5636. Format of TSR modules:
  5637. Offset    Size    Description
  5638.  00h  4 BYTEs    signature "FTSR"
  5639.  04h    WORD    segment address of this module
  5640.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5641.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5642.         (usually only a PSP if file access is required)
  5643.      5N BYTEs    interrupt list (see below)
  5644.     BYTE    FFh terminator
  5645.  
  5646. Format of interrupt list entry:
  5647. Offset    Size    Description
  5648.  00h    BYTE    interrupt number (00h-FEh)
  5649.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5650.  03h    WORD    offset within segment of begin of interrupt handler code
  5651. ----------2F39--BL01-------------------------
  5652. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5653.     AH = 39h
  5654.     BL = 01h
  5655.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  5656. Return: AL = status
  5657.         00h not ready to be removed
  5658.         FFh resident module may be removed by deassigning the interrupts
  5659.         hooked by the TSR and deallocating the TSR's memory block
  5660.     AH,BX,CX,DX,ES may be destroyed
  5661. SeeAlso: AX=3900h,AH=39h/BL=00h
  5662. ----------2F39-------------------------------
  5663. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5664.     AH = 39h
  5665.     BL = function number (02h-FFh)
  5666.     AL = TSR ID number (01h-FFh)
  5667.     CX,DX,SI,DI,DS,ES may contain parameters
  5668. Return: as appropriate for the called function
  5669. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5670. ----------2F3901BL02-------------------------
  5671. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5672.     AX = 3901h
  5673.     BL = 02h
  5674. Return: AX = error code (0000h if successful)
  5675. Notes:    opens the next TSR window on top of any others.     Only three
  5676.       TSR windows can be opened at any one time.  The three windows
  5677.       are all 40x11 characters, partly overlapping.
  5678. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5679. ----------2F3901BL03-------------------------
  5680. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5681.     AX = 3901h
  5682.     BL = 03h
  5683. Return: AX = error code (0000h if successful)
  5684. Notes:    Hide any visible TSR windows from view.
  5685. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5686. ----------2F3901BL04-------------------------
  5687. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5688.     AX = 3901h
  5689.     BL = 04h
  5690. Return: AX = error code (0000h if successful)
  5691. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5692. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5693. ----------2F3901BL05-------------------------
  5694. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5695.     AX = 3901h
  5696.     BL = 05h
  5697. Return: AX = error code (0000h if successful)
  5698. Notes:    Close the last opened TSR window.
  5699. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5700. ----------2F3901BL06-------------------------
  5701. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5702.     AX = 3901h
  5703.     BL = 06h
  5704.     DS:SI -> title string
  5705. Return: AX = error code (0000h if successful)
  5706. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5707. ----------2F3901BL07-------------------------
  5708. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5709.     AX = 3901h
  5710.     BL = 07h
  5711.     CH = Y coordinate (0-10)
  5712.     CL = X coordinate (0-39)
  5713. Return: AX = error code (0000h if successful)
  5714. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5715.       this call only sets a text position
  5716. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5717. ----------2F3901BL08-------------------------
  5718. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5719.     AX = 3901h
  5720.     BL = 08h
  5721.     DS:SI -> string
  5722. Return: AX = error code (0000h if successful)
  5723. Notes:    The text is not clipped.
  5724.     This routine understands Tab, NewLine and Carriage Return
  5725. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5726. ----------2F3901BL09-------------------------
  5727. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5728.     AX = 3901h
  5729.     BL = 09h
  5730.     CL = scroll direction: 00h up, FFh down, 00h clear window
  5731. Return: AX = error code (0000h if successful)
  5732. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5733. ----------2F3901BL0A-------------------------
  5734. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5735.     AX = 3901h
  5736.     BL = 0Ah
  5737.     DX = sound divisor, or 0 for silence.
  5738.          (divide 1843200 by required frequency to get value for DX)
  5739.     CL = sound length in 18.2 Hz clock ticks
  5740. Return: AX = error code (0000h if successful)
  5741. SeeAlso: AH=39h/BL=00h
  5742. ----------2F3901BL0B-------------------------
  5743. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5744.     AX = 3901h
  5745.     BL = 0Bh
  5746.     CL = number of users increment: +1 if adding a new user
  5747.                     -1 if removing a user
  5748. Return: AX = error code (0000h if successful)
  5749. Note:    the TSR windows resident module may only be removed when the internal
  5750.       user count is zero
  5751. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5752. ----------2F4000-----------------------------
  5753. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5754.     AX = 4000h
  5755. Return: AL = 01h does not virtualize video access
  5756.          02h virtualizes the video when in text mode
  5757.          03h virtualizes the video when in text mode or single plane
  5758.          graphics modes
  5759.          04h virtualizes the video when in text mode, single plane
  5760.          graphics modes, and VGA multiplane modes
  5761.          FFh virtualizes the video fully
  5762. Note:    this function is used by display drivers to find out what capabilities
  5763.       exist for the VDD driver and also trigger then VDD driver to call
  5764.       functions 4005h and 4006h.  This function also gives the Video Driver
  5765.       hardware access to the video registers.
  5766. ----------2F4001-----------------------------
  5767. INT 2F - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5768.     AX = 4001h
  5769. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5770.       and the video driver should save any necessary state
  5771. SeeAlso: AX=4002h,AX=4005h
  5772. ----------2F4002-----------------------------
  5773. INT 2F - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5774.     AX = 4002h
  5775. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5776.       and the video driver should restore the previously-saved state
  5777. SeeAlso: AX=4001h,AX=4006h
  5778. ----------2F4003-----------------------------
  5779. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5780.     AX = 4003h
  5781. Note:    This critical section must be exited within 1 second.
  5782. SeeAlso: AX=4004h
  5783. ----------2F4004-----------------------------
  5784. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5785.     AX = 4004h
  5786. SeeAlso: AX=4003h
  5787. ----------2F4005-----------------------------
  5788. INT 2F - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5789.     AX = 4005h
  5790. Note:    called by Windows when the DOS box is about to be placed in the
  5791.       background and the video driver should save any necessary state
  5792.       information
  5793. SeeAlso: AX=4001h,AX=4006h
  5794. ----------2F4006-----------------------------
  5795. INT 2F - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5796.     AX = 4006h
  5797. Note:    called by Windows when the DOS box is about to be placed in the
  5798.       foreground and the video driver should restore any necessary state
  5799.       information
  5800. SeeAlso: AX=4002h,AX=4005h
  5801. ----------2F4007-----------------------------
  5802. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5803.     AX = 4007h
  5804. ----------2F41-------------------------------
  5805. INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE
  5806.     AH = 41h
  5807.     ???
  5808. Return: ???
  5809. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5810.       file/printer services
  5811. SeeAlso: AX=118Ah,AH=42h,AH=4Bh
  5812. ----------2F42-------------------------------
  5813. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5814.     AH = 42h
  5815.     ???
  5816. Return: ???
  5817. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5818.       file/printer services
  5819. SeeAlso: AX=118Ah,AH=41h,AH=4Bh
  5820. ----------2F4300-----------------------------
  5821. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK
  5822.     AX = 4300h
  5823. Return: AL = 80h XMS driver installed
  5824.     AL <> 80h no driver
  5825. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5826.       above 640K
  5827.     this installation check DOES NOT follow the format used by other
  5828.       software
  5829. SeeAlso: AX=4310h
  5830. ----------2F4310-----------------------------
  5831. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS
  5832.     AX = 4310h
  5833. Return: ES:BX -> driver entry point
  5834. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5835. SeeAlso: AX=4300h
  5836.  
  5837. Perform a FAR call to the driver entry point with AH set to the function code
  5838.     AH    function
  5839.     00h  Get XMS version number
  5840.          Return: AX = XMS version (in BCD)
  5841.              BX = internal revision number
  5842.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5843.               0000h if HMA does not exist
  5844.     01h  Request High Memory Area (1M to 1M + 64K)
  5845.          DX = memory in bytes (for TSR or device drivers)
  5846.           FFFFh if application program
  5847.          Return: AX = 0001h success
  5848.             = 0000h failure
  5849.                BL = error code (see below)
  5850.     02h  Release High Memory Area
  5851.          Return: AX = 0001h success
  5852.             = 0000h failure
  5853.                BL = error code (see below)
  5854.     03h  Global enable A20, for using the HMA
  5855.          Return: AX = 0001h success
  5856.             = 0000h failure
  5857.                BL = error code (see below)
  5858.     04h  Global disable A20
  5859.          Return: AX = 0001h success
  5860.             = 0000h failure
  5861.                BL = error code (see below)
  5862.     05h  Local enable A20, for direct access to extended memory
  5863.          Return: AX = 0001h success
  5864.             = 0000h failure
  5865.                BL = error code (see below)
  5866.     06h  Local disable A20
  5867.          Return: AX = 0001h success
  5868.             = 0000h failure
  5869.                BL = error code (see below)
  5870.     07h  Query A20 state
  5871.          Return: AX = 0001h enabled
  5872.             = 0000h disabled
  5873.              BL = error code (0 = successful)
  5874.     08h  Query free extended memory, not counting HMA
  5875.          BL = 00h (some implementations leave BL unchanged on success)
  5876.          Return: AX = size of largest extended memory block in K
  5877.              DX = total extended memory in K
  5878.              BL = error code (see below)
  5879.     09h  Allocate extended memory block
  5880.          DX = Kbytes needed
  5881.          Return: AX = 0001h success
  5882.                DX = handle for memory block
  5883.             = 0000h failure
  5884.                BL = error code (see below)
  5885.     0Ah  Free extended memory block
  5886.          DX = handle of block to free
  5887.          Return: AX = 0001h success
  5888.             = 0000h failure
  5889.                BL = error code (see below)
  5890.     0Bh  Move extended memory block
  5891.          DS:SI -> EMM structure (see below)
  5892.          Note: if either handle is 0000h, the corresponding offset is
  5893.            considered to be an absolute segment:offset address in
  5894.            directly addressable memory
  5895.          Return: AX = 0001h success
  5896.             = 0000h failure
  5897.                BL = error code (see below)
  5898.     0Ch  Lock extended memory block
  5899.          DX = handle of block to lock
  5900.          Return: AX = 0001h success
  5901.                DX:BX = 32-bit linear address of locked block
  5902.             = 0000h failure
  5903.                BL = error code (see below)
  5904.     0Dh  Unlock extended memory block
  5905.          DX = handle of block to unlock
  5906.          Return: AX = 0001h success
  5907.             = 0000h failure
  5908.                BL = error code (see below)
  5909.     0Eh  Get handle information
  5910.          DX = handle for which to get info
  5911.          Return: AX = 0001h success
  5912.                BH = block's lock count
  5913.                BL = number of free handles left
  5914.                DX = block size in K
  5915.             = 0000h failure
  5916.                BL = error code (see below)
  5917.     0Fh  Reallocate extended memory block
  5918.          DX = handle of block
  5919.          BX = new size of block in K
  5920.          Return: AX = 0001h success
  5921.             = 0000h failure
  5922.                BL = error code (see below)
  5923.     10h  Request upper memory block (nonEMS memory above 640K)
  5924.          DX = size of block in paragraphs
  5925.          Return: AX = 0001h success
  5926.                BX = segment address of UMB
  5927.                DX = actual size of block
  5928.             = 0000h failure
  5929.                BL = error code (see below)
  5930.                DX = largest available block
  5931.     11h  Release upper memory block
  5932.          DX = segment address of UMB to release
  5933.          Return: AX = 0001h success
  5934.             = 0000h failure
  5935.                BL = error code (see below)
  5936.     12h  Reallocate upper memory block (XMS v3.0)
  5937.          DX = segment address of UMB to resize
  5938.          BX = new size of block in paragraphs
  5939.          Return: AX = 0001h success
  5940.             = 0000h failure
  5941.                BL = error code (see below)
  5942.     34h  (QEMM 5.11 only, undocumented) ???
  5943.     44h  (QEMM 5.11 only, undocumented) ???
  5944.     88h  (QEMM 6.0, undocumented) query free extended memory
  5945.          Return: EAX = largest block of extended memory, in K
  5946.                   ECX = physical address of highest byte of memory
  5947.              EDX = total Kbytes of extended memory
  5948.              BL = status
  5949.                  00h success
  5950.              A0h failure
  5951.     89h  (QEMM 6.0, undocumented) allocate extended memory
  5952.          EDX = Kbytes needed
  5953.          Return: AX = 0001h success
  5954.                      EDX = handle for allocated block (free with AH=0Ah)
  5955.             = 0000h failure
  5956.                 BL = status (80h,A0h,A1h,A2h) (see below)
  5957.     8Eh  (QEMM 6.0, undocumented) get handle information
  5958.          DX = handle
  5959.          Return: AX = 0001h success
  5960.                      BH = block's lock count???
  5961.                 CX = number of free handles left
  5962.                 EDX = block size in K
  5963.                  = 0000h failure
  5964.                      BL = status (A2h) (see below)
  5965.     8Fh  (QEMM 6.0, undocumented) reallocate extended memory block
  5966.          DX = handle
  5967.          EBX = new size in K
  5968.          Return: AX = 0001h success
  5969.                  = 0000h failure
  5970.                 BL = status (A2h,ABh) (see below)
  5971. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  5972.  
  5973. Format of EMM structure:
  5974. Offset    Size    Description
  5975.  00h    DWORD    number of bytes to move (must be even)
  5976.  04h    WORD    source handle
  5977.  06h    DWORD    offset into source block
  5978.  0Ah    WORD    destination handle
  5979.  0Ch    DWORD    offset into destination block
  5980.  
  5981. Error codes returned in BL:
  5982.     00h successful
  5983.     80h function not implemented
  5984.     81h Vdisk was detected
  5985.     82h an A20 error occurred
  5986.     8Eh a general driver error
  5987.     8Fh unrecoverable driver error
  5988.     90h HMA does not exist
  5989.     91h HMA is already in use
  5990.     92h DX is less than the /HMAMIN= parameter
  5991.     93h HMA is not allocated
  5992.     94h A20 line still enabled
  5993.     A0h all extended memory is allocated
  5994.     A1h all available extended memory handles are allocated
  5995.     A2h invalid handle
  5996.     A3h source handle is invalid
  5997.     A4h source offset is invalid
  5998.     A5h destination handle is invalid
  5999.     A6h destination offset is invalid
  6000.     A7h length is invalid
  6001.     A8h move has an invalid overlap
  6002.     A9h parity error occurred
  6003.     AAh block is not locked
  6004.     ABh block is locked
  6005.     ACh block lock count overflowed
  6006.     ADh lock failed
  6007.     B0h only a smaller UMB is available
  6008.     B1h no UMB's are available
  6009.     B2h UMB segment number is invalid
  6010. ----------2F4601-----------------------------
  6011. INT 2F U - DOS 5.0 kernel - ???
  6012.     AX = 4601h
  6013. Return: ???
  6014. Note:    copies the MCB following the caller's PSP memory block into DOS data
  6015.       segment
  6016. SeeAlso: AX=4602h
  6017. ----------2F4602-----------------------------
  6018. INT 2F U - DOS 5.0 kernel - ???
  6019.     AX = 4602h
  6020. Return: ???
  6021. Note:    copies previously copied MCB from DOS data segment into MCB following
  6022.       caller's PSP memory block
  6023. SeeAlso: AX=4601h
  6024. ----------2F46-------------------------------
  6025. INT 2F U - ???
  6026.     AH = 46h
  6027.     AL = subfunction (03h,04h)
  6028. Return: ???
  6029. Note:    these two subfunctions are called by MS Windows 3.0
  6030. ----------2F4653CX0002-----------------------
  6031. INT 2F - F-PROT v1.x only - F-LOCK.EXE 
  6032.     AX = 4653h
  6033.     CX = 0002h
  6034.     BX = subfunction
  6035.         0000h  installation check
  6036.         Return: AX = FFFFh
  6037.         0001h  uninstall
  6038.         Return: AX,BX,ES destroyed
  6039.         0002h  disable (v1.08 and below only)
  6040.         0003h  enable (v1.08 and below only)
  6041. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  6042.       Skulason
  6043. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6044. ----------2F4653CX0003-----------------------
  6045. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  6046.     AX = 4653h
  6047.     CX = 0003h
  6048.     BX = subfunction
  6049.         0000h  installation check
  6050.         Return: AX = FFFFh
  6051.         0001h  uninstall
  6052.         Return: AX,BX,ES destroyed
  6053. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  6054.       Skulason
  6055. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6056. ----------2F4653CX0004-----------------------
  6057. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  6058.     AX = 4653h
  6059.     CX = 0004h
  6060.     BX = subfunction
  6061.         0000h  installation check
  6062.         Return: AX = FFFFh
  6063.         0001h  uninstall
  6064.         Return: AX,BX,ES destroyed
  6065.         0002h  disable (v1.08 and below only)
  6066.            display message (v1.14+)
  6067.             other registers: ???
  6068.         0003h  enable (v1.08 and below only)
  6069.            display message (v1.14+)
  6070.             other registers: ???
  6071.             Return: AX = key pressed by user
  6072. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  6073.       Fridrik Skulason
  6074. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6075. ----------2F4653CX0005-----------------------
  6076. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  6077.     AX = 4653h
  6078.     CX = 0005h
  6079.     BX = subfunction
  6080.         0000h installation check
  6081.         Return: AX = FFFFh
  6082.         0001h uninstall
  6083.         Return: AX,BX,ES destroyed
  6084. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  6085.       Fridrik Skulason
  6086. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6087. ----------2F4680-----------------------------
  6088. INT 2F - MS Windows v3.0 - INSTALLATION CHECK
  6089.     AX = 4680h
  6090. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6091.            or DOS 5 DOSSHELL active
  6092.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6093.             mode
  6094. Note:    not officially documented, but Microsoft has indicated that they
  6095.       intend to provide an installation check which works in all modes
  6096. SeeAlso: AX=1600h
  6097. ----------2F4800-----------------------------
  6098. INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK
  6099.     AX = 4800h
  6100. Return: AL = nonzero if installed
  6101. SeeAlso: AX=4810h
  6102. ----------2F4810-----------------------------
  6103. INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE
  6104.     AX = 4810h
  6105.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6106. Return: AX = 0000h if successful
  6107. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6108.       the previous handler
  6109.     if the user's input is a macro name, no text is placed in the buffer
  6110.       even though AX=0000h on return; the program must immediately issue
  6111.       this call again to retrieve the expansion of the macro.  Similarly,
  6112.       if the user enters a special parameter such as $*, this call must
  6113.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6114.       overwrites the macro name on the screen with its expansion.
  6115. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6116. ----------2F4A01-----------------------------
  6117. INT 2F - DOS v5.0 - QUERY FREE HMA SPACE
  6118.     AX = 4A01h
  6119. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6120.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6121. SeeAlso: AX=4310h,AX=4A02h
  6122. ----------2F4A02-----------------------------
  6123. INT 2F - DOS v5.0 - ALLOCATE HMA SPACE
  6124.     AX = 4A02h
  6125.     BX = number of bytes
  6126. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6127.     BX destroyed
  6128. Note:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6129. SeeAlso: AX=4A01h
  6130. ----------2F4A05-----------------------------
  6131. INT 2F U - DOS v5.0 DOSSHELL - ???
  6132.     AX = 4A05h
  6133.     SI = function
  6134.         0000h reset???
  6135.         0001h ???
  6136.         0002h ???
  6137.         0003h ???
  6138.         0004h ???
  6139.         BL = ???
  6140.         0005h ???
  6141.         0006h get ???
  6142.         Return: ES:DI -> ???
  6143.         0007h get ???
  6144.         Return: AX = ???
  6145.         0008h get ???
  6146.         Return: DX:AX -> ???
  6147.         0009h get ???
  6148.         Return: ES = ???
  6149.         000Ah ???
  6150.         BL = ???
  6151.         ES:DI -> ???
  6152.         000Bh get ???
  6153.         Return: AX = ???
  6154.         000Ch ???
  6155.         BL = ???
  6156.         Return: DX:AX -> ???
  6157. Note:    DOSSHELL chains to the previous handler if SI is not one of the values
  6158.       listed above
  6159. SeeAlso: AX=4B01h
  6160. ----------2F4A10-----------------------------
  6161. INT 2F - SMARTDRV v4.00+ - API
  6162.         AX = 4A10h
  6163.         BX = command
  6164.             0000h installation check and hit ratios
  6165.                 Return: AX = BABEh if installed
  6166.                             DX:BX = cache hits
  6167.                             DI:SI = cache misses
  6168.                             CX = ???
  6169.                             BP = version (4.00 = 0400h)
  6170.             0001h reset cache
  6171.             0002h flush buffers
  6172.             0003h status
  6173.                 BP = drive # (0=A, 1=B, etc.)
  6174.                 DL = subfunction
  6175.             00h only get information
  6176.                     01h turn on read cache
  6177.             02h turn off read cache
  6178.             03h turn on write cache
  6179.             04h turn off write cache
  6180.             Return: AX = BABEh if OK
  6181.                            DL = status
  6182.                             bit 7  not cached
  6183.                 bit 6  write-through
  6184.                 bit 5  ???
  6185.                 bits 0-4 drive # (0=A, 1=B...)
  6186.                         DL = FFh if drive does not exist
  6187.                 Note:    If the read cache is off, the drive will not be cached,
  6188.               but the write-cache setting is remembered.
  6189.             0004h cache size
  6190.                 Return: AX = ???
  6191.                         BX = largest number of elements
  6192.                         CX = size of elements in bytes
  6193.                         DX = number of elements under Windows
  6194.             0005h double-buffer status
  6195.                 BP = drive # (0=A, 1=B...)
  6196.                 Return: AX = BABEh if double-buffered
  6197.             0007h ???
  6198.                 Return: DI = random number???
  6199.             000Ah get table pointer???
  6200.                 Return: ES:BX -> table of about 10 bytes or 5 words. Seems to
  6201.                 be words pointing to memory addresses 
  6202.                 containing info??? (see below)
  6203.             1234h signal serious error
  6204.                 pops up a message box saying that a serious error occurred and
  6205.                   to hit R to retry.
  6206. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6207.  
  6208. Format of data table:
  6209. Offset    Size    Description
  6210.  00h  8 BYTEs    ???
  6211.  08h    WORD    offset of WORD containing number of elements in cache
  6212. ----------2F4B-------------------------------
  6213. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6214.     AH = 4Bh
  6215.     ???
  6216. Return: ???
  6217. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6218.       file/printer services
  6219. SeeAlso: AX=118Ah,AH=41h,AH=42h
  6220. ----------2F4B01-----------------------------
  6221. INT 2F - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN
  6222.     AX = 4B01h
  6223.     CX:DX -> task switcher entry point (see AX=4B02h)
  6224.     ES:BX = 0000h:0000h
  6225. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6226. Notes:    called by the task switcher
  6227.     this function is hooked by clients which require notification of task
  6228.       switcher activities; the call must first be passed on to the prior
  6229.       handler with registers unchanged using a simulated interrupt.     On
  6230.       return, the client must build a callback info structure and store
  6231.       the returned ES:BX in the "next" field, then return the address of
  6232.       its own callback info structure.
  6233.     a client program must add itself to the notification chain if it
  6234.       provides services to other programs; before terminating, it must
  6235.       remove itself from the chain by calling the task switcher's entry
  6236.       point with AX=0005h (see AX=4B02h)
  6237.     the task switcher entry point should not be saved, as it is subject to
  6238.       change and will be provided on any notification call
  6239.     the Windows 3.1 Standard Mode supports this API
  6240. SeeAlso: AX=4B02h
  6241.  
  6242. Format of callback info structure:
  6243. Offset    Size    Description
  6244.  00h    DWORD    pointer to next callback info structure
  6245.  04h    DWORD    pointer to notification function (see below)
  6246.  08h    DWORD    reserved
  6247.  0Ch    DWORD    address of zero-terminated list of API info structures
  6248.         (see AX=4B02h)
  6249.  
  6250. Notification function is called with:
  6251.     AX = function
  6252.         0000h switcher initialization
  6253.         Return: AX = 0000h if OK to load
  6254.                = nonzero to abort task switcher
  6255.         0001h query suspend
  6256.         BX = session ID
  6257.         Return: AX = 0000h if OK to switch session
  6258.                = 0001h if not
  6259.         0002h suspend session
  6260.         BX = session ID
  6261.         interrupts disabled
  6262.         Return: AX = 0000h if OK to switch session
  6263.                = 0001h if not
  6264.         0003h activate session
  6265.         BX = session ID
  6266.         CX = session status flags
  6267.             bit 0: set if first activation of session
  6268.             bits 1-15: reserved (0)
  6269.         interrupts disabled
  6270.         Return: AX = 0000h
  6271.         0004h session active
  6272.         BX = session ID
  6273.         CX = session status flags
  6274.             bit 0: set if first activation of session
  6275.             bits 1-15: reserved (0)
  6276.         Return: AX = 0000h
  6277.         0005h create session
  6278.         BX = session ID
  6279.         Return: AX = 0000h if OK to create session
  6280.                = 0001h if not
  6281.         0006h destroy session
  6282.         BX = session ID
  6283.         Return: AX = 0000h
  6284.         0007h switcher termination
  6285.         BX = flags
  6286.             bit 0: set if calling switcher is only switcher loaded
  6287.             bits 1-15: reserved (0)
  6288.         Return: AX = 0000h
  6289.     ES:DI -> task switcher entry point (see AX=4B02h)
  6290. Notes:    function 0000h is generally called by the program which controls or
  6291.       invokes the task switcher, rather than by the task switcher itself;
  6292.       the entry point supplied to this function is not necessarily the
  6293.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6294.       any client indicates that loading is not possible, all clients will
  6295.       be called with function 0007h; thus it is possible for a client to
  6296.       receive a termination notice without a corresponding initialization
  6297.       notice.
  6298.     except for functions 0002h and 0003h, the notification handler is
  6299.       called with interrupts enabled and may make any INT 21h function
  6300.       call; interrupts must not be enabled in functions 0002h and 0003h
  6301.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6302.       point is no longer valid
  6303. ----------2F4B02BX0000-----------------------
  6304. INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK
  6305.     AX = 4B02h
  6306.     BX = 0000h
  6307.     ES:DI = 0000h:0000h
  6308. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6309.     ES:DI -> task switcher entry point (see below) if loaded
  6310.         AX = 0000h
  6311. Note:    the returned entry point is that for the most-recently loaded task
  6312.       switcher; the entry points for prior task switchers may be determined
  6313.       with the "get version" call (see below)
  6314. SeeAlso: AX=4A05h,AX=4B03h
  6315.  
  6316. Call task switcher entry point with:
  6317.     AX = 0000h get version
  6318.         Return: CF clear if successful
  6319.                 AX = 0000h
  6320.                 ES:BX -> task switcher version struct (see below)
  6321.             CF set if unsupported function
  6322.     AX = 0001h test memory region
  6323.         ES:DI -> first byte to be tested
  6324.         CX = size of region to test
  6325.         Return: CF clear if successful
  6326.                 AX = memory type of tested region
  6327.                 0000h global
  6328.                 0001h global and local
  6329.                 0002h local (replaced on session switch)
  6330.             CF set if unsupported function
  6331.     AX = 0002h suspend switcher
  6332.         ES:DI -> new task switcher's entry point
  6333.         Return: CF clear if successful
  6334.                 AX = state
  6335.                 0000h switcher has been suspended
  6336.                 0001h switcher not suspended, new switcher must
  6337.                     abort
  6338.                 0002h switcher not suspended, but new switcher
  6339.                     may run anyway
  6340.             CF set if unsupported function
  6341.     AX = 0003h resume switcher
  6342.         ES:DI -> new task switcher's entry point
  6343.         Return: CF clear if successful
  6344.                 AX = 0000h
  6345.             CF set if unsupported function
  6346.     AX = 0004h hook notification chain
  6347.         ES:DI -> callback info structure to be added to chain
  6348.             (see AX=4B01h)
  6349.         Return: CF clear if successful
  6350.                 AX = 0000h
  6351.             CF set if unsupported function
  6352.     AX = 0005h unhook notification chain
  6353.         ES:DI -> callback info structure to be removed from chain
  6354.             (see AX=4B01h)
  6355.         Return: CF clear if successful
  6356.                 AX = 0000h
  6357.             CF set if unsupported function
  6358.     AX = 0006h query API support
  6359.         BX = asynchronous API identifier
  6360.         Return: CF clear if successful
  6361.                 AX = 0000h
  6362.                 ES:BX -> API info structure (see below) for the
  6363.                     client which provides the highest
  6364.                     level of 
  6365.             CF set if unsupported function
  6366.  
  6367. Format of task switcher version structure:
  6368. Offset    Size    Description
  6369.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6370.  02h    WORD    minor version of supported protocol
  6371.  04h    WORD    major version of task switcher
  6372.  06h    WORD    minor version of task switcher
  6373.  08h    WORD    task switcher ID (see AX=4B03h)
  6374.  0Ah    WORD    operation flags
  6375.         bit 0: set if task switcher disabled
  6376.         bits 1-15: reserved (0)
  6377.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6378.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6379.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6380.  
  6381. Format of API info structure:
  6382. Offset    Size    Description
  6383.  00h    WORD    size of structure in bytes (000Ah)
  6384.  02h    WORD    API identifier
  6385.         0001h NetBIOS
  6386.         0002h 802.2
  6387.         0003h TCP/IP
  6388.         0004h LAN Manager named pipes
  6389.         0005h Novell NetWare IPX
  6390.  04h    WORD    major version \ of highest version of API for which the support
  6391.  06h    WORD    minor version / level specified in the next field is provided
  6392.  08h    WORD    support level
  6393.         0001h minimal support
  6394.         0002h API-level support
  6395.         0003h switcher compatibility
  6396.         0004h seamless compatibility
  6397. ----------2F4B03-----------------------------
  6398. INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID
  6399.     AX = 4B03h
  6400.     ES:DI -> task switcher entry point (see AX=4B02h)
  6401. Return: AX = 0000h
  6402.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6403. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6404.       must allocate an identifier for itself and provide this function to
  6405.       all subsequent task switchers; if it is not the first to be loaded,
  6406.       it must call this function to allocate an ID.     The switcher ID is
  6407.       used as the high four bits of all session identifiers to ensure
  6408.       unique session IDs.
  6409.     if no more switcher IDs are available, the new task switcher making the
  6410.       call must terminate or disable itself
  6411.     the task switcher providing the identifiers may call the new task
  6412.       switcher's entry point as needed
  6413.     this call is available from within DOSSHELL even if the task switcher
  6414.       is not installed
  6415. SeeAlso: AX=4B02h,AX=4B04h
  6416. ----------2F4B04-----------------------------
  6417. INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID
  6418.     AX = 4B04h
  6419.     BX = switcher ID
  6420.     ES:DI -> task switcher entry point (see AX=4B02h)
  6421. Return: AX = 0000h
  6422.     BX = status
  6423.         0000h successful
  6424.         other error (invalid ID or ID not allocated)
  6425. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6426.       and is providing the support for AX=4B03h and AX=4B04h
  6427.     the task switcher providing the identifiers may call the terminating
  6428.       task switcher's entry point as needed
  6429.     this call is available from within DOSSHELL even if the task switcher
  6430.       is not installed
  6431. SeeAlso: AX=4B02h,AX=4B03h
  6432. ----------2F4B05-----------------------------
  6433. INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA
  6434.     AX = 4B05h
  6435.     ES:BX = 0000h:0000h
  6436.     CX:DX -> task switcher entry point (see AX=4B02h)
  6437. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6438. Notes:    called by task switcher
  6439.     clients with instance data should hook this call, pass it through to
  6440.       the previous handler with unchanged registers using a simulated
  6441.       interrupt.  On return, the client should create a startup info
  6442.       structure (see below), store the returned ES:BX in the "next"
  6443.       field, and return the address of the created structure in ES:BX
  6444.     all MSDOS function calls are available from within this call
  6445. SeeAlso: AX=1605h,AX=4B02h
  6446.  
  6447. Format of startup info structure:
  6448. Offset    Size    Description
  6449.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6450.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6451.  06h    DWORD    0000h:0000h (ignored)
  6452.  0Ah    DWORD    ignored
  6453.  0Eh    DWORD    pointer to instance data records
  6454.  
  6455. Format of one instance data record in array:
  6456. Offset    Size    Description
  6457.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6458.  04h    WORD    size of instance data
  6459. ----------2F53-------------------------------
  6460. INT 2F U - ???
  6461.     AH = 53h
  6462.     AL = subfunction (0Bh, maybe others???)
  6463. Return: ???
  6464. Note:    called by MS Windows 3.1 POWER.DRV
  6465. SeeAlso: AH=54h
  6466. ----------2F53-------------------------------
  6467. INT 2F U - ???
  6468.     AH = 54h
  6469.     AL = subfunction (00h, 01h, maybe others???)
  6470. Return: ???
  6471. Note:    called by MS Windows 3.1 POWER.DRV
  6472. SeeAlso: AH=53h
  6473. ----------2F5453-----------------------------
  6474. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  6475.     AX = 5453h
  6476.     BX = subfunction
  6477.         00h installation check
  6478.         CX = 0000h
  6479.         DS:SI -> 8-char blank-padded name
  6480.         Return: AX = FFFFh installed
  6481.                 CX = ID number of already-installed copy
  6482.                = anything else, not installed
  6483.                 CX = ID number for TSR when installed
  6484.         01h get user parameters
  6485.         CX = TSR ID number
  6486.         Return: AX = 0000h successful
  6487.                ES:BX -> user parameter block (see below)
  6488.                = nonzero failed
  6489.         02h check if hotkey in use
  6490.         CL = scan code of hot key
  6491.         Return: AX = FFFFh hot key conflicts with another TSR
  6492.                  otherwise safe to use the hotkey
  6493.         03h replace default critical error handler
  6494.         CX = TSR ID number
  6495.         DS:SI -> new routine for INT 24h
  6496.         Return: AX = nonzero, unable to install new handler
  6497.         04h get internal data area
  6498.         CX = TSR ID number
  6499.         Return: AX = 0000h
  6500.                 ES:BX -> TSR's internal data area (see below)
  6501.                = nonzero, TSR not found
  6502.         05h set multiple hot keys
  6503.         CX = TSR ID number
  6504.         DL = number of additional hot keys to allocate
  6505.         DS:SI -> table of hot keys
  6506.             BYTE  hotkey scan code
  6507.             BYTE  hotkey shift state
  6508.             BYTE  flag value to pass to TSR (nonzero)
  6509.         Return: AX = nonzero, unable to install hot keys
  6510.         06h - 0Fh reserved
  6511.         10h enable TSR
  6512.         CX = TSR ID number
  6513.         Return: AX = nonzero, unable to enable
  6514.         11h disable TSR
  6515.         CX = TSR ID number
  6516.         Return: AX = nonzero, unable to disable
  6517.         12h unload TSR
  6518.         CX = TSR ID number
  6519.         Return: AX = nonzero, invalid TSR number
  6520.         Note: if any interrupts used by TSR have been grabbed by
  6521.             another TSR, the TesSeRact routines will wait until
  6522.             it is safe to remove the indicated TSR from memory
  6523.         13h restart TSR
  6524.         CX = TSR ID number of TSR which was unloaded but is still in
  6525.              memory
  6526.         Return: AX = nonzero, unable to restart TSR
  6527.         14h get status word
  6528.         CX = TSR ID number
  6529.         Return: AX = FFFFh invalid ID number
  6530.                = other, successful
  6531.                 BX = bit flags
  6532.         15h set status word
  6533.         CX = TSR ID number
  6534.         DX = new bit flags
  6535.         Return: AX = nonzero, unable to set status word
  6536.         16h get INDOS state at popup
  6537.         CX = TSR ID number
  6538.         Return: AX = 0000h successful
  6539.                 BX = value of INDOS flag
  6540.         17h - 1Fh reserved
  6541.         20h call user procedure
  6542.         CX = TSR ID number
  6543.         ES:DI -> user-defined data
  6544.         Return: AX = 0000h successful
  6545.         21h stuff keystrokes into keyboard buffer
  6546.         CX = TSR ID number
  6547.         DL = speed
  6548.             00h stuff keystrokes only when buffer is empty
  6549.             01h stuff up to four keystrokes per clock tick
  6550.             02h stuff up to 15 keystrokes per clock tick
  6551.         DH = scan code flag
  6552.             if zero, buffer contains alternating ASCII and scan codes
  6553.             if nonzero, buffer contains only ASCII codes
  6554.         SI = number of keystrokes
  6555.         ES:DI -> buffer to stuff
  6556.         Return: AX = 0000h success
  6557.                  F0F0h user aborted with ^C or ^Break
  6558.                  other unable to stuff keystrokes
  6559.         22h (v1.10) trigger popup
  6560.         CX = TSR ID number
  6561.         Return: AX = 0000h success, TSR will either pop up or beep to
  6562.                    indicate that it is unable to pop up
  6563.                  nonzero invalid ID number
  6564.         23h (v1.10) invoke TSR's background function
  6565.         CX = TSR ID number
  6566.         Return: AX = 0000h success
  6567.                  FFFFh not safe to call background function
  6568.                  nonzero invalid ID number
  6569.         24h - 2Fh reserved
  6570. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  6571.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  6572.       do the SWAP?? programs by Innovative Data Concepts.
  6573.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  6574.       of the user parameter block) using the name "AVATAR  "
  6575. SeeAlso: AX=CAFEh
  6576.  
  6577. Format of User Parameter Block:
  6578. Offset    Size    Description
  6579.  00h  8 BYTEs    blank-padded TSR name
  6580.  08h    WORD    TSR ID number
  6581.  0Ah    DWORD    bitmap of supported functions
  6582.  0Eh    BYTE    scan code of primary hotkey
  6583.             00h = pop up when shift states match
  6584.             FFh = no popup (if shift state also FFh)
  6585.  0Fh    BYTE    shift state of primary hotkey
  6586.             FFh = no popup (if scan code also FFh)
  6587.  10h    BYTE    number of secondary hotkeys
  6588.  11h    DWORD    pointer to extra hotkeys set by func 05h
  6589.  15h    WORD    current TSR status flags
  6590.  17h    WORD    PSP segment of TSR
  6591.  19h    DWORD    DTA for TSR
  6592.  1Dh    WORD    default DS for TSR
  6593.  1Fh    DWORD    stack at popup
  6594.  23h    DWORD    stack at background invocation
  6595.  
  6596. Format of TSR internal data area:
  6597. Offset    Size    Description
  6598.  00h    BYTE    revision level of TesSeRact library
  6599.  01h    BYTE    type of popup in effect
  6600.  02h    BYTE    INT 08 occurred since last invocation
  6601.  03h    BYTE    INT 13 occurred since last invocation
  6602.  04h    BYTE    active interrupts
  6603.  05h    BYTE    active soft interrupts
  6604.  06h    BYTE    DOS major version
  6605.  07h    BYTE    how long to wait before popping up
  6606.  08h    DWORD    pointer to INDOS flag
  6607.  0CH    DWORD    pointer to DOS critical error flag
  6608.  10h    WORD    PSP segment of interrupted program
  6609.  12h    WORD    PSP segment of prog interrupted by INT 28
  6610.  14h    DWORD    DTA of interrupted program
  6611.  18h    DWORD    DTA of program interrupted by INT 28
  6612.  1Ch    WORD    SS of interrupted program
  6613.  1Eh    WORD    SP of interrupted program
  6614.  20h    WORD    SS of program interrupted by INT 28
  6615.  22h    WORD    SP of program interrupted by INT 28
  6616.  24h    DWORD    INT 24 of interrupted program
  6617.  28h  3 WORDs    DOS 3+ extended error info
  6618.  2Eh    BYTE    old BREAK setting
  6619.  2Fh    BYTE    old VERIFY setting
  6620.  30h    BYTE    were running MS WORD 4.0 before popup
  6621.  31h    BYTE    MS WORD 4.0 special popup flag
  6622.  32h    BYTE    enhanced keyboard call in use
  6623.  33h    BYTE    delay for MS WORD 4.0
  6624. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  6625.     DWORD    old interrupt vector
  6626.     BYTE    interrupt number
  6627.     WORD    offset in TesSeRact code segment of new interrupt handler
  6628. ----------2F5500-----------------------------
  6629. INT 2F U - DOS v5.0 - COMMAND.COM INTERFACE
  6630.     AX = 5500h
  6631. Return: AX = 0000h
  6632.     DS:SI -> entry point table
  6633. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  6634.       been moved into the HMA; only the primary COMMAND.COM retains this
  6635.       portion
  6636.     procedures called from a dispatcher in COMMAND's resident portion;
  6637.       most assume that the segment address of the resident portion is on
  6638.       the stack and are thus not of general use
  6639. ----------2F6282-----------------------------
  6640. INT 2F U - PC Tools v7.0+ VDEFEND, DATAMON - SET ??? ADDRESS
  6641.     AX = 6282h
  6642.     CX:DX -> ??? or 0000h:0000h
  6643.     DI = 0000h ???
  6644.          FFFFh ???
  6645.          other segment of ???
  6646. Return: BX = 0062h
  6647. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  6648.       (DATAMON only)
  6649. SeeAlso: INT 21/AH=FAh"VDEFEND"
  6650. ----------2F6284BX0000-----------------------
  6651. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  6652.     AX = 6284h
  6653.     BX = 0000h
  6654.     CX = 0000h
  6655. Return: AX = segment of resident code
  6656.     BX = 5555h
  6657.     CX = 5555h
  6658. ----------2F6284BX0001-----------------------
  6659. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6660.     AX = 6284h
  6661.     BX = 0001h
  6662.     CX = 0001h
  6663. Return: AX:BX -> ???
  6664.     CX = BX
  6665. ----------2F6284BX0002-----------------------
  6666. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  6667.     AX = 6284h
  6668.     BX = 0002h
  6669.     CX = 0002h
  6670. Return: AX = ???
  6671.     BX = ???
  6672.     CX = AX
  6673.     DX = BX
  6674. ----------2F6284BX0003-----------------------
  6675. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  6676.     AX = 6284h
  6677.     BX = 0003h
  6678.     CX = flags
  6679.         bit 12: ???
  6680.         10: ???
  6681.          5: ???
  6682.          3: ???
  6683.     DX = flags
  6684.         bit 15: ???
  6685. ----------2F6400-----------------------------
  6686. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  6687.     AX = 6400h
  6688. Return: AL = 00h not installed
  6689.          FFh installed
  6690. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  6691. SeeAlso: INT 10/AX=5555h
  6692. ----------2F7200-----------------------------
  6693. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  6694.     AX = 7200h
  6695. Return: AL = FFh if installed
  6696.         ES = segment of device driver header (see below)
  6697. Note:    SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  6698.  
  6699. Format of device driver header:
  6700. Offset    Size    Description
  6701.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  6702.  0Ah    BYTE    number of subunits (drives) supported by driver
  6703.  0Bh  3 BYTEs    signature "SRD"
  6704.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  6705.  12h  4 BYTEs    ASCII driver version string "N.NN"
  6706.  16h    BYTE    00h
  6707.  17h    BYTE    configuration format version (currently 00h)
  6708.  18h    WORD    offset of drive configuration data
  6709. ----------2F7A00-----------------------------
  6710. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  6711.     AX = 7A00h
  6712. Return: AL = 00h not installed
  6713.        = FFh installed
  6714.         ES:DI -> FAR entry point for routines accessed exclusively
  6715.             through INT 7A in NetWare versions through 2.0a.  Call
  6716.             with same values as INT 7A
  6717. SeeAlso: AX=7AFFh/BX=0000h,INT 64"Novell",INT 7A"Novell"
  6718. ----------2F7A10-----------------------------
  6719. INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS
  6720.     AX = 7A10h
  6721. Return: DH = major TBMI version number
  6722.     DL = minor TBMI version number
  6723.     CX = segment address of TBMI resident part
  6724.     BX = status word of TBMI
  6725.         bit 0: INT2F intercepted by TBMI
  6726.         bit 1: INT7A intercepted by TBMI
  6727.         bit 2: INT64 intercepted by TBMI
  6728.         bits 3-14: reserved or unused ???
  6729.         bit 15: outstanding task ID was detected
  6730. Note:    TBMI is the Task-Switched Buffer Manager Interface
  6731. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  6732. ----------2F7A11-----------------------------
  6733. INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS
  6734.     AX = 7A11h
  6735. Return: ES:BX -> old INT 2F handler
  6736.     DS:DX -> TBMI INT 2F handler
  6737. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h
  6738. ----------2F7A12-----------------------------
  6739. INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS
  6740.     AX = 7A12h
  6741. Return: ES:BX -> old INT 64 handler
  6742.     DS:DX -> TBMI INT 64 handler
  6743. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  6744. ----------2F7A13-----------------------------
  6745. INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS
  6746.     AX = 7A13h
  6747. Return: ES:BX = old INT 7A handler
  6748.     DS:DX = TBMI INT 7A handler
  6749. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  6750. ----------2F7A14-----------------------------
  6751. INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS
  6752.     AX = 7A14h
  6753.     CX = statistic to retrieve
  6754.         0000h available diagnostic functions???
  6755.         Return: CX = maximum available function??? (000Ch for v2.0)
  6756.         0001h buffers in use
  6757.         Return: CX = TBMI buffers currently in use
  6758.         0002h maximum buffers used
  6759.         Return: CX = maximum number of buffers ever in use
  6760.         0003h unavailable buffers
  6761.         Return: CX = count of unavailable TBMI buffers
  6762.         0004h old interrupt usage
  6763.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  6764.                 INT 64, and INT 7A
  6765.         0005h far call usage
  6766.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  6767.                 including internal accesses)
  6768.         0006h task buffering
  6769.         Return: CX = TBMI task buffering status (enabled/disabled or
  6770.                 disable/enable switch count???)
  6771.         0007h current task ID
  6772.         Return: CX = TBMI current task ID number (0000h if ???)
  6773.         0008h outstanding ID count
  6774.         Return: CX = number of outstanding TBMI IDs
  6775.         0009h configured ECBs
  6776.         Return: CX = number of TBMI Event Control Blocks configured
  6777.         000Ah configured data ECBs
  6778.         Return: CX = number of TBMI data ECBs configured
  6779.         000Bh configured sockets
  6780.         Return: CX = number of TBMI sockets configured (from NETCFG)
  6781.         000Ch current sockets
  6782.         Return: CX = number of TBMI sockets currently in use
  6783. SeeAlso: AX=7A10h
  6784. ----------2F7A1B-----------------------------
  6785. INT 2F - Novell NetWare - TBMI v2.0 - RESERVED???
  6786.     AX = 7A1Bh
  6787. Note:    this call merely performs an IRET
  6788. ----------2F7A80-----------------------------
  6789. INT 2F - Novell NetWare - shell 3.01d - ???
  6790.     AX = 7A80h
  6791. Return: nothing
  6792. Note:    apparently called on abnormal exit of the shell
  6793. ----------2F7A81-----------------------------
  6794. INT 2F - Novell NetWare - shell 3.01d - ???
  6795.     AX = 7A81h
  6796.     CX:DX -> ??? in shell's CS (may be callback address or data structure)
  6797. Return: nothing???
  6798. ----------2F7A85-----------------------------
  6799. INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM
  6800.     AX = 7A85h
  6801.     CX = broadcast server number
  6802. Return: CX = 0000h if broadcast message handled by another program
  6803.     CX unchanged if broadcast not handled
  6804. ----------2F7AFE-----------------------------
  6805. INT 2F - Novell NetWare - shell 3.01d - ???
  6806.     AX = 7AFEh
  6807. Return: AL = FFh ???
  6808.          other ???
  6809. ----------2F7AFFBX0000-----------------------
  6810. INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???
  6811.     AX = 7AFFh
  6812.     BX = 0000h
  6813.     CX = 4E65h ("Ne")
  6814.     DX = 7457h ("tW")
  6815.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  6816. Return: AL = FFh if installed
  6817.         CX = configured sockets (14h)
  6818.         DS:SI -> data table ???
  6819.         ES:DI -> IPX far call handler
  6820. Note:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  6821.       of pointers to service events queue head and tail
  6822. SeeAlso: AX=7AFFh/BX=0001h
  6823. ----------2F7AFFBX0001-----------------------
  6824. INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???
  6825.     AX = 7AFFh
  6826.     BX = 0001h
  6827.     CX = 4E65h ("Ne")
  6828.     DX = 7457h ("tW")
  6829. Return: AL = FFh if installed
  6830.         CX = ???  (8000h)
  6831.         SI = ??? (or -> ???) (0002h)
  6832.         ES:DI -> IPX far call handler
  6833.         ES:DX -> 6-byte data area ???
  6834. SeeAlso: AX=7AFFh/BX=0000h
  6835. ----------2F7F24-----------------------------
  6836. INT 2F - Multiplex - ???
  6837.     AX = 7F24h
  6838.     ???
  6839. Return: ???
  6840. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6841. ----------2F7F26-----------------------------
  6842. INT 2F - Multiplex - ???
  6843.     AX = 7F26h
  6844.     ???
  6845. Return: ???
  6846. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6847. ---------------------------------------------
  6848.