home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1588 / gepackt.exe / INTER33B / INTERRUP.E < prev    next >
Encoding:
Text File  |  1993-01-03  |  232.9 KB  |  6,441 lines

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