home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR3 / INTER38A.ZIP / INTERRUP.B < prev    next >
Text File  |  1993-12-05  |  302KB  |  7,912 lines

  1. Interrupt List, part 2 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------S-1480-------------------------------
  4. INT 14 - COMMUNICATIONS FOSSIL
  5.     AH = 80h
  6. SeeAlso: AH=7Eh
  7. --------S-1480-------------------------------
  8. INT 14 - COURIERS.COM - INSTALLATION CHECK
  9.     AH = 80h
  10. Return: AH = E8h if loaded
  11. Program: COURIERS is a TSR utility by PC Magazine
  12. --------S-148000-----------------------------
  13. INT 14 - ARTICOM - INSTALLATION CHECK
  14.     AX = 8000h
  15. Return: AL = FFh if installed
  16.         BH = major version
  17.         BL = minor version
  18. Program: ArtiCom is an asynchronous communications driver by Artisoft which
  19.       works on top of NetBIOS and allows modem/serial-port sharing by
  20.       programs using INT 14 for serial I/O.
  21. Note:    ArtiCom supports 32 simultaneous COM ports using multiport cards and
  22.       drivers
  23. SeeAlso: AH=00h,AH=01h,AH=02h,AH=03h,AH=04h,AH=05h,AX=8001h,AX=8002h
  24. --------S-148001-----------------------------
  25. INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
  26.     AX = 8001h
  27. Return: AX = error code, if error (see AX=8003h)
  28. SeeAlso: AX=8000h,AX=8002h,AX=8003h
  29. Index:    uninstall;ARTICOM
  30. --------S-148002-----------------------------
  31. INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
  32.     AX = 8002h
  33.     ES:DI -> buffer for redirector status structure (see below)
  34. Return: AX = error code, if error (see AX=8003h)
  35. SeeAlso: AX=8000h,AX=8003h
  36.  
  37. Format of redirector status:
  38. Offset    Size    Description
  39.  00h    WORD    redirector major and minor version numbers
  40.  02h    WORD    redirectable ports found
  41.  04h    WORD    redirectable ports + local ports found
  42.  06h    WORD    redirector internal buffer size
  43.  08h    WORD    maximum servers maintained
  44.  0Ah    WORD    number of adapters found
  45. --------S-148003-----------------------------
  46. INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
  47.     AX = 8003h
  48.     CX = error number to translate
  49. Return: ES:DI -> ASCIZ error text or NULL if can't translate.
  50. SeeAlso: AX=8000h
  51.  
  52. Values for error codes:
  53.  00h    "No error"
  54.  01h    "An invalid port number was specified"
  55.  02h    "Port is already redirected"
  56.  03h    "Too many ports redirected"
  57.  04h    "Cannot locate the server"
  58.  05h    "Server is busy"
  59.  06h    "Access denied"
  60.  07h    "Resource in use"
  61.  08h    "Resource in use - request queued"
  62.  09h    "No such resource"
  63.  0Ah    "Invalid username/password pair"
  64.  0Bh    "Noncompatible version number"
  65.  0Ch    "Can't remove from memory"
  66.  0Dh    "Bad NETBIOS adapter number"
  67.  0Eh    "No more entries in list"
  68.  0Fh    "Resource is not available at this time"
  69.  10h    "Invalid value to INT 14 call"
  70. --------S-148004-----------------------------
  71. INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
  72.     AX = 8004h
  73.     DX = port to redirect (COM1=0, COM2=1, ...)
  74.     CH = attach type
  75.     CL = adapter to use for attach, 0FFh to search all
  76.     ES:DI -> attachment structure (see below)
  77. Return: AX = error code, if error (see AX=8003h)
  78. Note:    The wildcard '*' is supported in the server and resource fields.  If
  79.       wild cards are used then the first matching available server is
  80.       attached.
  81. SeeAlso: AX=8000h,AX=8003h,AX=8005h
  82.  
  83. Format of attachment structure:
  84. Offset    Size    Description
  85.  00h 16 BYTEs    server to look for attach
  86.  10h 16 BYTEs    attach to resource name
  87.  20h 16 BYTEs    username for attach
  88.  30h 16 BYTEs    password for username or resource
  89.  40h    BYTE    attach type
  90.         00h normal
  91.         01h queue if resource is in use (not yet supported in v1.00)
  92. --------S-148005-----------------------------
  93. INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
  94.     AX = 8005h
  95.     DX = port to detach (COM1=0, COM2=1, ...)
  96. Return: AX = error code, if error (see AX=8003h)
  97. Note:    only a previously attached resource can be detached
  98. SeeAlso: AX=8000h,AX=8003h,AX=8004h
  99. --------S-148006-----------------------------
  100. INT 14 - ARTICOM - GET RESOURCE INFORMATION
  101.     AX = 8006h
  102.     BX = remote port (COM1=0, COM2=1, ...)
  103.     CL = adapter number, FFh to try all adapters
  104.     ES:DI -> resource information structure (see below)
  105.     DS:SI -> 16 byte server name. See note.
  106. Return: AX = error code, if error (see AX=8003h)
  107.     BX = next remote port, recall to get next resource info
  108. Note:    Wild cards supported in both the resource field and server name
  109.     string DS:SI. If wild cards used then first matching available
  110.     resource information is searched. Set the resource field to FFh to
  111.     return all resources.
  112. SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
  113.  
  114. Format of resource information structure:
  115. Offset    Size    Description
  116.  00h    BYTE    00h = free, else used
  117.  01h 16 BYTEs    resource name
  118.  11h 16 BYTEs    username of resource user
  119.  21h    WORD    amount of time used
  120.  23h    WORD    amount of time remaining
  121.  53h 48 BYTEs    description of resource
  122.  93h 64 BYTEs    initialization string for modem
  123.  B3h 32 BYTEs    dial string for modem
  124.  D3h 32 BYTEs    hang-up string for modem
  125. --------S-148007-----------------------------
  126. INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
  127.     AX = 8007h
  128.     DX = port index (COM1=0, COM2=1, ...)
  129.     ES:DI -> buffer for port information structure (see below)
  130. Return: CF clear if redirection info returned and port is redirected
  131.     CF set if not a redirected port
  132.     AX = error code, if error (see AX=8003h)
  133. SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
  134.  
  135. Format of port information structure:
  136. Offset    Size    Description
  137.  00h 16 BYTEs    server name resource is on
  138.  10h    BYTE    adapter number server is on
  139.  11h 16 BYTEs    resource name
  140.  21h    WORD    remote port index, use to get additional information
  141.  23h    WORD    buffer size
  142.  25h    WORD    baud rate (see below)
  143.  26h    BYTE    modem status register
  144.  27h    BYTE    modem control register
  145.  28h    BYTE    line status register
  146.  29h    BYTE    line control register
  147.  2Ah    BYTE    flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
  148.  2Bh    WORD    send timeout in ticks
  149.  2Dh    WORD    receive timeout in ticks
  150.  2Fh    WORD    time used on remote port
  151.  31h    WORD    time left before timeout
  152.  33h    BYTE    if server changes allowed?
  153.  34h    WORD    FFFFh (-1) if connection ok, else old port index
  154.  
  155. Values for baud rate:
  156.  00h    110
  157.  01h    150
  158.  02h    300
  159.  03h    600
  160.  04h    1200
  161.  05h    2400
  162.  06h    4800
  163.  07h    9600
  164.  08h    19200
  165.  09h    38400
  166.  0Ah    57600
  167.  0Bh    115200
  168.  0Ch    134.5
  169.  0Dh    1800
  170.  0Eh    2000
  171.  0Fh    3600
  172.  10h    7200
  173. --------S-148008-----------------------------
  174. INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
  175.     AX = 8008h
  176.     BX = server index (0,1,...)
  177.     ES:DI -> server name structure (see below)
  178. Return: AX = error code, if error (see AX=8003h)
  179.     BX = next remote port, repeat call to get next available server
  180. Note:    the wildcard '*' is supported in the server name field.     Set the
  181.       server name to FFh to search for all servers.
  182. SeeAlso: AX=8000h,AX=8003h,AX=8007h
  183.  
  184. Format of server name structure:
  185. Offset     Size      Description
  186.   00h 16 BYTEs      (call) ASCIZ server name
  187.   10h     BYTE      (return) the adapter server is found
  188. --------S-148009-----------------------------
  189. INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS
  190.     AX = 8009h
  191.     BX = send timeout in ticks
  192.     CX = receive timeout in ticks
  193.     DX = port index (COM1=0, COM2=1, ...)
  194. Return: nothing
  195. SeeAlso: AX=8000h,AX=800Ah
  196. --------S-14800A-----------------------------
  197. INT 14 - ARTICOM - MODIFY FLOW CONTROL
  198.     AX = 800Ah
  199.     BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
  200.     DX = port index (COM1=0, COM2=1, ...)
  201. Return: AX = error code, if error (see AX=8003h)
  202. Note:    for attached ports only!
  203. SeeAlso: AX=8000h,AX=8003h,AX=8009h
  204. --------S-148025-----------------------------
  205. INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
  206.     AX = 8025h
  207.     DS:DX -> address of trap function (see below) to call on read/write
  208. Note:    setting the vector to a user function allows the redirector's activity
  209.       to be monitored.
  210. SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
  211.  
  212. Trap function called with:
  213.     AH = operation
  214.         80h reading character
  215.         81h writing character
  216.     AL = character
  217.     Return: AX must be preserved
  218.         far JUMP to old trap function (see AX=8035h)
  219. --------S-148035-----------------------------
  220. INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
  221.     AX = 8035h
  222. Return: ES:BX -> address of current send/receive routine
  223. Note:    this function returns the address of the routine which is called
  224.       inside A-REDIR.EXE each time a character is received or sent on the
  225.       active COM port.
  226. SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
  227. --------S-1481-------------------------------
  228. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  229.     AH = 81h
  230.     AL = port number (1-4)
  231. Return: AH = 00h port available
  232.          01h port exists but already in use
  233.          02h port nonexistent
  234. Program: COURIERS is a TSR utility by PC Magazine
  235. SeeAlso: AH=83h,AH=8Dh
  236. --------S-1481-------------------------------
  237. INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION
  238.     AH = 81h
  239.     BX:DI -> port control block
  240. Return: ???
  241. SeeAlso: AH=00h
  242.  
  243. Format of port control block:
  244. Offset    Type    Description
  245.  00h    WORD    port IO address
  246.  02h    WORD    port IRQ
  247.  04h    WORD    baud rate
  248.  06h    WORD    parity
  249.  08h    WORD    data bits
  250.  0Ah    WORD    stop bits
  251.  0Ch    WORD    break status
  252.         0000h off
  253.  0Eh    WORD    flow control protocol
  254.  10h    BYTE    input block
  255.  11h    BYTE    output block
  256.  12h    WORD    low threshold
  257.  14h    WORD    high threshold
  258.  16h    WORD    segment of buffer
  259.  18h    WORD    offset of buffer
  260.  1Ah    WORD    input buffer length
  261.  1Ch    WORD    output buffer length
  262.  1Eh    BYTE    auxiliary address
  263.  1Fh    BYTE    spare
  264.  20h  4 WORDs    spares
  265. --------V-148100-----------------------------
  266. INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
  267.     AX = 8100h
  268.     ES:DI -> buffer for VFOSSIL information (see below)
  269. Return: AX = 1954h if installed
  270. SeeAlso: AH=7Eh,AX=8101h
  271.  
  272. Format of VFOSSIL information:
  273. Offset    Size    Description
  274.  00h    WORD    size of information in bytes, including this field
  275.  02h    WORD    VFOSSIL major version
  276.  04h    WORD    VFOSSIL revision level
  277.  06h    WORD    highest VFOSSIL application function supported
  278. --------V-148101-----------------------------
  279. INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
  280.     AX = 8101h
  281.     ES:DI -> buffer for application function table (see below)
  282.     CX = length of buffer in bytes
  283. Return: AX = 1954h if installed
  284.         BH = highest VFOSSIL application function supported
  285. Note:    the number of initialized pointers in the application function table
  286.       will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  287.       will be initialized
  288. SeeAlso: AX=8102h
  289.  
  290. Format of application function table:
  291. Offset    Size    Description
  292.  00h    DWORD    -> function to query current video mode (VioGetMode)
  293.  04h    DWORD    -> function to set video mode (VioSetMode)
  294.  08h    DWORD    -> function to query hardware config (VioGetConfig)
  295.  0Ch    DWORD    -> function to write data in TTY mode (VioWrtTTY)
  296.  10h    DWORD    -> function to get current ANSI state (VioGetANSI)
  297.  14h    DWORD    -> function to set new ANSI state (VioSetANSI)
  298.  18h    DWORD    -> function to get curr cursor position (VioGetCurPos)
  299.  1Ch    DWORD    -> function to set cursor position (VioSetCurPos)
  300.  20h    DWORD    -> function to get cursor shape (VioGetCurType)
  301.  24h    DWORD    -> function to set cursor shape (VioSetCurType)
  302.  28h    DWORD    -> function to scroll screen up (VioScrollUp)
  303.  2Ch    DWORD    -> function to scroll screen down (VioScrollDn)
  304.  30h    DWORD    -> function to read cell string from screen (VioReadCellStr)
  305.  34h    DWORD    -> function to read char string from screen (VioReadCharStr)
  306.  38h    DWORD    -> function to write a cell string (VioWrtCellStr)
  307.  3Ch    DWORD    -> function to write char string, leaving attr (VioWrtCharStr)
  308.  40h    DWORD    -> function to write char string,const attr (VioWrtCharStrAttr)
  309.  44h    DWORD    -> function to replicate an attribute (VioWrtNAttr)
  310.  48h    DWORD    -> function to replicate a cell (VioWrtNCell)
  311.  4Ch    DWORD    -> function to replicate a character (VioWrtNChar)
  312.  
  313. Format of video mode data structure:
  314. Offset    Size    Description
  315.  00h    WORD    length of structure including this field
  316.  02h    BYTE    mode characteristics
  317.         bit 0: clear if MDA, set otherwise
  318.         bit 1: graphics mode
  319.         bit 2: color disabled (black-and-white)
  320.  03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
  321.  04h    WORD    number of text columns
  322.  06h    WORD    number of text rows
  323.  08h    WORD    reserved
  324.  0Ah    WORD    reserved
  325.  0Ch    DWORD    reserved
  326.  
  327. Format of video configuration data:
  328. Offset    Size    Description
  329.  00h    WORD    structure length including this field
  330.  02h    WORD    adapter type
  331.         00h monochrome/printer
  332.         01h CGA
  333.         02h EGA
  334.         03h VGA
  335.         07h 8514/A
  336.  04h    WORD    display type
  337.         00h monochrome
  338.         01h color
  339.         02h enhanced color
  340.         09h 8514
  341.  06h    DWORD    adapter memory size
  342.  
  343. Format of cursor type record:
  344. Offset    Size    Description
  345.  00h    WORD    cursor start line
  346.  02h    WORD    cursor end line
  347.  04h    WORD    cursor width (always 01h)
  348.  06h    WORD    cursor attribute (FFFFh = hidden)
  349.  
  350. Call VioGetMode with:
  351.     STACK:    WORD    VIO handle (must be 00h)
  352.         DWORD    pointer to video mode data structure (see above)
  353. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see below)
  354.  
  355. Values for error code:
  356.  0000h    successful
  357.  0074h    internal VIO failure
  358.  0163h    unsupported mode
  359.  0166h    invalid row value
  360.  0167h    invalid column value
  361.  017Eh    buffer too small
  362.  01A5h    invalid VIO parameter
  363.  01B4h    invalid VIO handle
  364.  
  365. Call VioSetMode with:
  366.     STACK:    WORD    VIO handle (must be 00h)
  367.         DWORD    pointer to video mode data structure (see above)
  368. Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)
  369.  
  370. Call VioGetConfig with:
  371.     STACK:    WORD    VIO handle (must be 00h)
  372.         DWORD    pointer to video configuration data buffer (see above)
  373. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)
  374.  
  375. Call VioWrtTTY with:
  376.     STACK:    WORD    VIO handle (must be 00h)
  377.         WORD    length of string
  378.         DWORD    pointer to character string to be written to screen
  379. Return: AX = error code (00h, 74h, 1B4h) (see above)
  380. Notes:    write wraps at end of line and terminates if it reaches end of screen
  381.     in ANSI mode, ANSI control sequences are interpreted, and this func is
  382.       not required to be reentrant; in non-ANSI mode, the function is
  383.       reentrant and may be called from within an MS-DOS function call
  384.  
  385. Call VioGetANSI with:
  386.     STACK:    WORD    VIO handle (must be 00h)
  387.         DWORD    pointer to WORD which will be set to 00h if ANSI is off
  388.             or 01h if ANSI is on
  389. Return: AX = error code (00h, 74h, 1B4h) (see above)
  390.  
  391. Call VioSetANSI with:
  392.     STACK:    WORD    VIO handle (must be 00h)
  393.         DWORD    pointer to WORD indicating new state of ANSI
  394.             00h off
  395.             01h on
  396. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  397.  
  398. Call VioGetCurPos with:
  399.     STACK:    WORD    VIO handle (must be 00h)
  400.         DWORD    pointer to WORD to hold current cursor column (0-based)
  401.         DWORD    pointer to WORD to hold current cursor row (0-based)
  402. Return: AX = error code (00h, 74h, 1B4h) (see above)
  403.  
  404. Call VioSetCurPos with:
  405.     STACK:    WORD    VIO handle (must be 00h)
  406.         WORD    cursor column
  407.         WORD    cursor row
  408. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  409. Note:    if either coordinate is invalid, the cursor is not moved
  410.  
  411. Call VioGetCurType with:
  412.     STACK:    WORD    VIO handle (must be 00h)
  413.         DWORD    pointer to cursor type record (see above)
  414. Return: AX = error code (00h, 74h, 1B4h) (see above)
  415.  
  416. Call VioSetCurType with:
  417.     STACK:    WORD    VIO handle (must be 00h)
  418.         DWORD    pointer to cursor type record (see above)
  419. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  420.  
  421. Call VioScrollUp with:
  422.     STACK:    WORD    VIO handle (must be 00h)
  423.         DWORD    pointer to char/attr cell for filling emptied rows
  424.         WORD    number or rows to scroll (FFFFh = clear area)
  425.         WORD    right column of scroll area
  426.         WORD    bottom row of scroll area
  427.         WORD    left column of scroll area
  428.         WORD    top row of scroll area
  429. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  430.  
  431. Call VioScrollDn with:
  432.     STACK:    WORD    VIO handle (must be 00h)
  433.         DWORD    pointer to char/attr cell for filling emptied rows
  434.         WORD    number or rows to scroll (FFFFh = clear area)
  435.         WORD    right column of scroll area
  436.         WORD    bottom row of scroll area
  437.         WORD    left column of scroll area
  438.         WORD    top row of scroll area
  439. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  440.  
  441. Call VioReadCellStr with:
  442.     STACK:    WORD    VIO handle (must be 00h)
  443.         WORD    column at which to start reading
  444.         WORD    row at which to start reading
  445.         DWORD    pointer to WORD containing length of buffer in bytes
  446.             on return, WORD contains number of bytes actually read
  447.         DWORD    pointer to buffer for cell string
  448. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  449.  
  450. Call VioReadCharStr with:
  451.     STACK:    WORD    VIO handle (must be 00h)
  452.         WORD    column at which to start reading
  453.         WORD    row at which to start reading
  454.         DWORD    pointer to WORD containing length of buffer in bytes
  455.             on return, WORD contains number of bytes actually read
  456.         DWORD    pointer to buffer for character string
  457. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  458.  
  459. Call VioWrtCellStr with:
  460.     STACK:    WORD    VIO handle (must be 00h)
  461.         WORD    column at which to start writing
  462.         WORD    row at which to start writing
  463.         WORD    length of cell string in bytes
  464.         DWORD    pointer to cell string to write
  465. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  466. Note:    write wraps at end of line and terminates if it reaches end of screen
  467.  
  468. Call VioWrtCharStr with:
  469.     STACK:    WORD    VIO handle (must be 00h)
  470.         WORD    column at which to start writing
  471.         WORD    row at which to start writing
  472.         WORD    length of character string
  473.         DWORD    pointer to character string to write
  474. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  475. Note:    write wraps at end of line and terminates if it reaches end of screen
  476.  
  477. Call VioWrtCharStrAttr with:
  478.     STACK:    WORD    VIO handle (must be 00h)
  479.         DWORD    pointer to attribute to be applied to each character
  480.         WORD    column at which to start writing
  481.         WORD    row at which to start writing
  482.         WORD    length of character string
  483.         DWORD    pointer to character string to write
  484. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  485. Note:    write wraps at end of line and terminates if it reaches end of screen
  486.  
  487. Call VioWrtNAttr with:
  488.     STACK:    WORD    VIO handle (must be 00h)
  489.         WORD    column at which to start writing
  490.         WORD    row at which to start writing
  491.         WORD    number of times to write attribute
  492.         DWORD    pointer to display attribute to replicate
  493. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  494. Note:    write wraps at end of line and terminates if it reaches end of screen
  495.  
  496. Call VioWrtNCell with:
  497.     STACK:    WORD    VIO handle (must be 00h)
  498.         WORD    column at which to start writing
  499.         WORD    row at which to start writing
  500.         WORD    number of times to write cell
  501.         DWORD    pointer to cell to replicate
  502. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  503. Note:    write wraps at end of line and terminates if it reaches end of screen
  504.  
  505. Call VioWrtNChar with:
  506.     STACK:    WORD    VIO handle (must be 00h)
  507.         WORD    column at which to start writing
  508.         WORD    row at which to start writing
  509.         WORD    number of times to write character
  510.         DWORD    pointer to character to replicate
  511. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  512. Note:    write wraps at end of line and terminates if it reaches end of screen
  513. --------V-148102-----------------------------
  514. INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
  515.     AX = 8102h
  516. Return: AX = 1954h
  517. Note:    terminates all operations; after this call, the video FOSSIL may either
  518.       be removed from memory or reinitialized
  519. SeeAlso: AX=8101h,AX=8103h
  520. --------V-148103-----------------------------
  521. INT 14 - VIDEO FOSSIL - UNINSTALL
  522.     AX = 8103h
  523. Return: AX = 1954h
  524. Note:    this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
  525. --------K-1482-------------------------------
  526. INT 14 - KEYBOARD FOSSIL
  527.     AH = 82h
  528. SeeAlso: AH=7Eh
  529. --------S-1482-------------------------------
  530. INT 14 - COURIERS.COM - CONFIGURE PORT
  531.     AH = 82h
  532.     AL = port number (1-4)
  533.     BX = speed (bps)
  534.     CX = bit flags
  535.         bit 0: enable input flow control
  536.         bit 1: enable output flow control
  537.         bit 2: use X.PC protocol (not yet implemented)
  538. SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
  539. ----------1483-------------------------------
  540. INT 14 - SYSTEM FOSSIL
  541.     AH = 83h
  542. SeeAlso: AH=7Eh
  543. --------S-1483-------------------------------
  544. INT 14 - COURIERS.COM - START INPUT
  545.     AH = 83h
  546.     ES:BX -> circular input buffer
  547.     CX = length of buffer
  548.         (should be at least 128 bytes if input flow control enabled)
  549. SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
  550. --------S-1484-------------------------------
  551. INT 14 - COURIERS.COM - READ CHARACTER
  552.     AH = 84h
  553. Return: ZF set if no characters available
  554.     ZF clear
  555.        AL = character
  556.        AH = modem status bits
  557.         bit 7: set on input buffer overflow
  558. SeeAlso: AH=02h,AH=86h,AH=89h
  559. --------S-1485-------------------------------
  560. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  561.     AH = 85h
  562. SeeAlso: AH=0Ah,AH=88h
  563. --------S-1486-------------------------------
  564. INT 14 - COURIERS.COM - START OUTPUT
  565.     AH = 86h
  566.     ES:BX -> output buffer
  567.     CX = length of output buffer
  568. SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
  569. --------S-1487-------------------------------
  570. INT 14 - COURIERS.COM - OUTPUT STATUS
  571.     AH = 87h
  572. Return: AX = number of unsent characters
  573. --------S-1488-------------------------------
  574. INT 14 - COURIERS.COM - ABORT OUTPUT
  575.     AH = 88h
  576. SeeAlso: AH=09h,AH=85h
  577. --------S-1489-------------------------------
  578. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  579.     AH = 89h
  580.     CL = character to send
  581. SeeAlso: AH=01h,AH=84h
  582. --------S-148A-------------------------------
  583. INT 14 - COURIERS.COM - SEND BREAK
  584.     AH = 8Ah
  585. SeeAlso: AH=89h,AH=FAh
  586. --------S-148C-------------------------------
  587. INT 14 - COURIERS.COM - SET SPEED
  588.     AH = 8Ch
  589.     BX = speed in bps
  590. SeeAlso: AH=00h,AH=82h"COURIERS"
  591. --------S-148D-------------------------------
  592. INT 14 - COURIERS.COM - DECONFIGURE PORT
  593.     AH = 8Dh
  594. SeeAlso: AH=82h"COURIERS"
  595. --------S-14A0-------------------------------
  596. INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
  597.     AH = A0h
  598.     ES:BX -> ASCIZ internet host name
  599.     CX = length of name
  600. Return: AH = return code (00h,04h-06h,08h,0Ah-0Ch) (see below)
  601.     CL = session ID
  602. Program: the Bridge Application Program Interface is a set of functions which
  603.       makes many of the details of LAN communications transparent
  604. Note:    Novell TELAPI.EXE returns AH=09h (not supported) and CL=00h
  605. SeeAlso: AH=A1h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AX=AF00h
  606.  
  607. Values for return code:
  608.  00h    successful
  609.  01h    no characters written
  610.  02h    no characters read
  611.  03h    no such session
  612.  04h    clearinghouse name not found
  613.  05h    no response from host
  614.  06h    no more sessions available
  615.  07h    session aborted
  616.  08h    invalid clearinghouse name
  617.  09h    not supported
  618.  0Ah    internal (general) network error
  619.  0Bh    out of memory
  620.  0Ch    invalid IP address
  621. --------S-14A0--CXFFFF-----------------------
  622. INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
  623.     AH = A0h
  624.     CX = FFFFh
  625. Return: CF clear if successful
  626.         AX = 5445h ('TE')
  627.         CX <> FFFFh
  628.         DX = port number
  629.     CF set on error
  630. Program: TES is a network serial port emulation program
  631. SeeAlso: AH=A1h"TES"
  632. --------S-14A1-------------------------------
  633. INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
  634.     AH = A1h
  635.     DH = session ID (00h for external session managment)
  636. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  637.     AL destroyed (Novell TELAPI.EXE)
  638. SeeAlso: AH=A0h"BAPI"
  639. --------S-14A1-------------------------------
  640. INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
  641.     AH = A1h
  642. Return: CX = number of active sessions
  643.     ES:SI -> status array (see below)
  644. SeeAlso: AH=A2h"TES",AH=A3h"TES"
  645.  
  646. Format of status array entry:
  647. Offset    Size    Description
  648.  00h    BYTE    status
  649.  01h    WORD    offset of name
  650. --------S-14A2-------------------------------
  651. INT 14 - 3com BAPI SERIAL I/O - WRITE CHARACTER
  652.     AH = A2h
  653.     AL = character
  654.     DH = session ID (00h for external session managment)
  655. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  656. SeeAlso: AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  657. --------S-14A2-------------------------------
  658. INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
  659.     AH = A2h
  660. Return: CX = number of servers
  661.     ES:SI -> array of offsets from ES for server names
  662. SeeAlso: AH=A1h"TES"
  663. --------S-14A3-------------------------------
  664. INT 14 - 3com BAPI SERIAL I/O - READ CHARACTER
  665.     AH = A3h
  666.     DH = session ID (00h for external session managment)
  667. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  668.     AL = character read or 00h if none available
  669. SeeAlso: AH=A0h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AH=A7h"BAPI"
  670. --------S-14A3-------------------------------
  671. INT 14 - Interconnections Inc. TES - START A NEW SESSION
  672.     AH = A3h
  673.     ES:SI -> ???
  674. Return: CF clear if successful
  675.         AX = 5445h ('TE')
  676.         CX <> FFFFh
  677.         DX = port number
  678.     CF set on error
  679. SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
  680. --------S-14A4-------------------------------
  681. INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
  682.     AH = A4h
  683.     CX = length of buffer in bytes
  684.     DH = session ID (00h for external session managment)
  685.     ES:BX -> buffer containing data
  686. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  687.     CX = number of bytes actually sent
  688. SeeAlso: AH=19h,AH=86h,AH=A0h"BAPI",AH=A5h"BAPI"
  689. --------S-14A4-------------------------------
  690. INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
  691.     AH = A4h
  692.     ???
  693. Return: ???
  694. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  695. --------S-14A5-------------------------------
  696. INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
  697.     AH = A5h
  698.     CX = length of buffer
  699.     DH = session ID (00h for external session managment)
  700.     ES:BX -> buffer for data
  701. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  702.     CX = number of bytes actually read
  703. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  704. SeeAlso: AH=A7h"BAPI",AX=FF02h
  705. --------S-14A5-------------------------------
  706. INT 14 - Interconnections Inc. TES - RESUME A SESSION
  707.     AH = A5h
  708.     AL = session number
  709. Return: ???
  710. SeeAlso: AH=A4h"TES",AH=A6h"TES"
  711. --------S-14A6-------------------------------
  712. INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
  713.     AH = A6h
  714.     DH = session ID (00h for external session managment)
  715. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  716. Desc:    generate a short break signal; if data delivery was turned off by the
  717.       break, wait for the host to turn it on again
  718. SeeAlso: AH=1Ah,AH=8Ah,AH=FAh,AH=A0h"BAPI"
  719. --------S-14A6-------------------------------
  720. INT 14 - Interconnections Inc. TES - DROP A SESSION
  721.     AH = A6h
  722.     AL = session number
  723. Return: AH = status
  724.         00h successful
  725.         else error
  726. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  727. --------S-14A7-------------------------------
  728. INT 14 - 3com BAPI SERIAL I/O - READ STATUS
  729.     AH = A7h
  730.     DH = session ID (00h for external session managment)
  731. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  732.     CX = number of bytes available for reading
  733. Note:    Novell TELAPI.EXE v4.01 always returns either 0 or 1 bytes available
  734. SeeAlso: AH=A5h"BAPI"
  735. --------S-14A7-------------------------------
  736. INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
  737.     AH = A7h
  738.     ???
  739. Return: ???
  740. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  741. --------S-14A8-------------------------------
  742. INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
  743.     AH = A8h
  744.     AL = 00h no visible response
  745.     ES:SI -> ASCIZ command
  746. Return: ???
  747. --------N-14A8-------------------------------
  748. INT 14 - Novell TelAPI v4.01 - CONNECTION INFORMATION???
  749.     AH = A8h
  750.     DH = session ID???
  751.     CH = subfunction
  752.         02h ???
  753.         0Dh ???
  754.         0Fh ???
  755.         10h ???
  756.         11h ???
  757.         28h ???
  758.         else
  759.         Return: AH = 09h (not supported)
  760. Return: AH = return code (see AH=A0h"BAPI")
  761.         00h successful
  762.         CL = ??? (0/1/8) (subfunctions 02h,0Dh,0Fh,10h)
  763.         CL = ??? (7Fh/FFh) (subfunction 28h)
  764.         CX = ??? (subfunction 11h)
  765. SeeAlso: AH=A9h"TelAPI"
  766. --------N-14A9-------------------------------
  767. INT 14 - Novell TelAPI v4.01 - CONNECTION CONTROL???
  768.     AH = A9h
  769.     DH = session ID???
  770.     CH = subfunction
  771.         02h ???
  772.         0Dh ???
  773.         0Fh ???
  774.         10h ???
  775.         11h ???
  776.         28h ???
  777.         else
  778.         Return: AH = 09h (not supported)
  779.     ???
  780. Return: AH = return code (see AH=A0h"BAPI")
  781.     ???
  782. SeeAlso: AH=A8h"TelAPI",AH=E4h,INT 6B/AX=0600h
  783. --------S-14AF00BXAAAA-----------------------
  784. INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
  785.     AX = AF00h
  786.     BX = AAAAh
  787. Return: AX = AF01h if installed
  788.         BH = protocol type (if BX=AAAAh on entry)
  789.         01h NetManage TCP/IP
  790.         BL = version for protocol type (if BX=AAAAh on entry)
  791. Note:    early versions of the BAPI and the ROM BIOS simply destroy AX; this
  792.       behavior is used to determine whether the newer functions (AH=B0h,
  793.       AH=B1h,etc) are available
  794. SeeAlso: AH=A0h"BAPI"
  795. --------S-14B0-------------------------------
  796. INT 14 - 3com BAPI SERIAL I/O - EN/DISABLE "ENTER COMMAND MODE" (ECM) CHARACTER
  797.     AH = B0h
  798.     AL = new state (00h disabled, 01h enabled)
  799. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  800. Note:    disabling the ECM character allows applications to send data which
  801.       includes the ECM character
  802. SeeAlso: AX=AF00h"BAPI",AH=B1h,AH=B2h
  803. --------S-14B1-------------------------------
  804. INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
  805.     AH = B1h
  806. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  807. Desc:    provide a means for the application or terminal emulator to perform
  808.       the same action normally caused by the ECM character
  809. SeeAlso: AH=B0h,AH=B2h
  810. --------S-14B2-------------------------------
  811. INT 14 - 3com BAPI SERIAL I/O - GET ECM WATCH STATE
  812.     AH = B2h
  813. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  814.     AL = watch flag (00h disabled, 01h enabled)
  815. Desc:    determine whether the ECM character is enabled
  816. SeeAlso: AH=B0h,AH=B1h
  817. --------S-14B3-------------------------------
  818. INT 14 - 3com BAPI SERIAL I/O - GET/SET CONFIGURATION INFO
  819.     AH = B3h
  820.     AL = direction (00h get, 01h set)
  821.     DH = session ID (00h for external session managment)
  822.     DL = configuration item (00h = end-of-line mapping)
  823.     CX = new configuration item value (if AL=01h)
  824.         ---if DL=00h---
  825.         CH = application EOL type (app to Telnet client)
  826.         01h application will send lone CR
  827.         02h application will send CR-? pair
  828.         CL = driver EOL type (Telnet client to Telnet server)
  829.         01h driver should send CR-NUL pair
  830.         02h driver should send CR-LF pair
  831. Return: AH = return code (00h,03h,09h-0Bh) (see AH=A0h"BAPI")
  832.     ---if AL=00h---
  833.     CX = configuration item value (see above)
  834. SeeAlso: AH=B2h
  835. --------N-14E0-------------------------------
  836. INT 14 - TelAPI - ???
  837.     AH = E0h
  838.     BX = ???
  839.     CX:DX = ???
  840.     DS:DI -> ???
  841.     ES:SI -> ???
  842. Return: AX = status (0000h,FF37h,etc.)
  843.     ES:SI -> ??? if ???
  844.     ???
  845. SeeAlso: AH=ECh,AX=FF00h
  846. --------S-14E000-----------------------------
  847. INT 14 - MX5 Extended FOSSIL - GET MNP STATUS BLOCK
  848.     AX = E000h
  849.     DX = port number (0-3)
  850. Return: ES:BX -> status block (see below)
  851. Program: MX5 is a FOSSIL driver by MagicSoft which emulates MNP Level 5, and
  852.       ships with the MTEZ terminal program as MTEMNP.DRV (a TSR despite
  853.       the .DRV extension)
  854. SeeAlso: AX=E006h
  855.  
  856. Format of status block:
  857. Offset    Size    Description
  858.  00h    BYTE    flag: active (00h no, 01h yes)
  859.  01h    BYTE    MNP level (2,4,5)
  860.  02h    BYTE    series ID from remote MNP
  861.  03h    DWORD    total packets transmitted
  862.  07h    DWORD    duplicate packets transmitted
  863.  0Bh    DWORD    maximum speed
  864.  0Fh    DWORD    total packets received
  865.  13h    DWORD    duplicate packets received
  866.  17h    DWORD    maximum speed
  867. --------S-14E001-----------------------------
  868. INT 14 - MX5 Extended FOSSIL - GET/SET MNP LEVEL
  869.     AX = E001h
  870.     BH = function
  871.         00h get MNP level
  872.         01h set MNP level
  873.         BL = new level (00h none, 02h/04h/05h MNP level N)
  874.     DX = port number (0-3)
  875. Return: BL = MNP level
  876. SeeAlso: AX=E002h,AX=E003h,AX=E004h,AX=E006h
  877. --------S-14E002-----------------------------
  878. INT 14 - MX5 Extended FOSSIL - GET/SET MNP ANSWER/ORIGINATE MODE
  879.     AX = E002h
  880.     BH = function
  881.         00h get answer/originate mode
  882.         01h set mode
  883.         BL = new mode (00h originate [default], 01h answer)
  884.     DX = port number (0-3)
  885. Return: BL = answer/originate mode
  886. SeeAlso: AX=E001h,AX=E003h,AX=E006h
  887. --------S-14E003-----------------------------
  888. INT 14 - MX5 Extended FOSSIL - GET/SET MNP WAIT TICKS
  889.     AX = E003h
  890.     BH = function
  891.         00h get wait ticks
  892.         01h set wait ticks
  893.         BL = MNP wait ticks (default 0Eh)
  894.     DX = port number (0-3)
  895. Return: BL = wait ticks
  896. SeeAlso: AX=E001h,AX=E002h,AX=E006h
  897. --------S-14E004-----------------------------
  898. INT 14 - MX5 Extended FOSSIL - GET/SET MNP CONNECT SOUND LEVEL
  899.     AX = E004h
  900.     BH = function
  901.         00h get sound level
  902.         01h set sound level
  903.         BL = new sound level (00h off, 01h on [default])
  904.     DX = port number
  905. Return: BL = sound state
  906. Desc:    specify whether MX5 should generate beeps after an MNP connection
  907.       (three high beeps if successful, high then low on connection failure)
  908. SeeAlso: AX=E002h,AX=E006h
  909. --------S-14E005-----------------------------
  910. INT 14 - MX5 Extended FOSSIL - UNINSTALL
  911.     AX = E005h
  912. Return: BX = segment of MX5's memory block or 0000h on failure
  913. Note:    caller must free the returned memory block to complete the uninstall
  914. SeeAlso: AX=E006h
  915. --------S-14E006BX0000-----------------------
  916. INT 14 - MX5 Extended FOSSIL - INSTALLATION CHECK
  917.     AX = E006h
  918.     BX = 0000h
  919. Return: BX = 4D58h ('MX') if installed
  920.         AH = major version
  921.         AL = minor version
  922. SeeAlso: AX=E000h,AX=E001h,AX=E005h,AX=E007h
  923. --------S-14E007-----------------------------
  924. INT 14 - MX5 Extended FOSSIL - WAIT SPECIFIED NUMBER OF TICKS
  925.     AX = E007h
  926.     CX = number of ticks to wait
  927. Return: nothing
  928. SeeAlso: AX=E006h
  929. --------N-14E1-------------------------------
  930. INT 14 - TelAPI - ???
  931.     AH = E1h
  932.     BX = connection ID
  933.     ???
  934. Return: AX = status (0000h,FFF7h,maybe others)
  935.     ???
  936. SeeAlso: AH=E6h,AX=FF00h
  937. --------N-14E2-------------------------------
  938. INT 14 - TelAPI - BUFFERED READ
  939.     AH = E2h
  940.     BX = connection ID
  941.     CX = length of buffer in bytes
  942.     ES:SI -> buffer for data
  943. Return: AX = number of characters actually read??? (negative on error)
  944. SeeAlso: AH=E6h,AX=FF00h,INT 6B/AH=01h
  945. --------N-14E3-------------------------------
  946. INT 14 - TelAPI - BUFFERED WRITE
  947.     AH = E3h
  948.     BX = connection ID
  949.     CX = length of buffer in bytes
  950.     ES:SI -> buffer containing data
  951. Return: AX = number of characters actually written??? (negative on error)
  952. SeeAlso: AH=07h"TelAPI",AH=E6h,AX=FF00h,INT 6B/AH=00h
  953. --------N-14E4-------------------------------
  954. INT 14 - TelAPI - CONNECTION CONTROL???
  955.     AH = E4h
  956.     BX = connection ID
  957.     CX = ???
  958.     ES:SI -> 10-byte buffer containing ???
  959. Return: ???
  960. SeeAlso: AH=A9h,AH=E6h,AX=FF00h,INT 6B/AX=0600h
  961. --------N-14E5-------------------------------
  962. INT 14 - TelAPI - ???
  963.     AH = E5h
  964. Return: AX = status???
  965. SeeAlso: AH=E6h,AX=FF00h
  966. --------N-14E6-------------------------------
  967. INT 14 - TelAPI - ???
  968.     AH = E6h
  969. Return: AX = status???
  970. Notes:    TelAPI also supports the NASI/NACS and NCSI APIs on INT 6B
  971.     this function invokes AH=E5h internally
  972. SeeAlso: AX=FF00h,INT 6B/AH=00h,INT 6B/AH=10h
  973. --------N-14E7-------------------------------
  974. INT 14 - TelAPI - GET ???
  975.     AH = E7h
  976.     ES:SI -> 20-byte buffer for ???
  977. Return: AX = 0000h (successful)
  978.     ES:SI buffer filled
  979. SeeAlso: AX=FF00h
  980. --------N-14E8-------------------------------
  981. INT 14 - TelAPI - SET ???
  982.     AH = E8h
  983.     BX = connection ID
  984.     CL = new value for ???
  985.     DX = ??? (ignored by Novell TELAPI v4.01)
  986. Return: AX = status (0000h,FFFFh)
  987. SeeAlso: AX=FF00h
  988. --------N-14E9-------------------------------
  989. INT 14 - TelAPI - ???
  990.     AH = E9h
  991.     DX = ???
  992. Return: ???
  993. SeeAlso: AX=FF00h
  994. --------N-14EA-------------------------------
  995. INT 14 - TelAPI - GET CONNECTION INFO???
  996.     AH = EAh
  997.     BX = connection ID
  998.     ES:SI -> buffer for info???
  999. Return: AX = status (0000h,FFFFh,etc.)
  1000. SeeAlso: AX=FF00h
  1001. --------N-14EB-------------------------------
  1002. INT 14 - TelAPI - GET ???
  1003.     AH = EBh
  1004.     ES:SI -> buffer for ???
  1005. Return: ES:SI buffer filled
  1006. SeeAlso: AX=FF00h
  1007. --------N-14EC-------------------------------
  1008. INT 14 - TelAPI - ???
  1009.     AH = ECh
  1010.     BX = ???
  1011.     CX:DX = ???
  1012.     DS:DI -> ???
  1013.     ES:SI -> ???
  1014. Return: AX = status (0000h,FF37h,etc.)
  1015.     ES:SI -> ??? if ???
  1016.     ???
  1017. Note:    this function is not supported by the Microdyne TelAPI v3.7
  1018. SeeAlso: AH=E0h"TelAPI",AX=FF00h
  1019. --------N-14ED-------------------------------
  1020. INT 14 - TelAPI - ???
  1021.     AH = EDh
  1022.     BX = connection ID
  1023. Return: AX = status (0000h,FFFFh,etc.)
  1024. Note:    this function is not supported by the Microdyne TelAPI v3.7
  1025. SeeAlso: AX=FF00h
  1026. --------a-14F0F0-----------------------------
  1027. INT 14 - ASAP v1.0 - ???
  1028.     AX = F0F0h
  1029.     DX = ???
  1030.     ???
  1031. Return: ???
  1032. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  1033.       MicroTalk
  1034. SeeAlso: AX=F0F1h
  1035. --------a-14F0F1DX0000-----------------------
  1036. INT 14 - ASAP v1.0 - INSTALLATION CHECK
  1037.     AX = F0F1h
  1038.     DX = 0000h
  1039. Return: DX = segment of resident code
  1040.        = 0000h if not installed
  1041. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  1042.       MicroTalk
  1043. SeeAlso: AX=F0F0h,INT 10/AX=3800h
  1044. --------S-14F4FF-----------------------------
  1045. INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
  1046.     AX = F4FFh
  1047.     DX = port (00h-03h)
  1048. Return: CF clear if present
  1049.         AX = 0000h
  1050.     CF set if not present
  1051.         AX <> 0000h
  1052. --------S-14F9-------------------------------
  1053. INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
  1054.     AH = F9h
  1055.     DX = port (00h-03h)
  1056. --------S-14FA-------------------------------
  1057. INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
  1058.     AH = FAh
  1059.     DX = port (00h-03h)
  1060. SeeAlso: AH=1Ah,AH=8Ah
  1061. --------S-14FB-------------------------------
  1062. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
  1063.     AH = FBh
  1064.     AL = modem control register (see AH=05h)
  1065.     DX = port (00h-03h)
  1066. SeeAlso: AH=05h"SERIAL"
  1067. --------S-14FC-------------------------------
  1068. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
  1069.     AH = FCh
  1070.     DX = port (00h-03h)
  1071. Return: AH = RS232 status bits (see AH=00h)
  1072.     AL = character
  1073. SeeAlso: AH=02h,AH=0Ch,AX=FF02h
  1074. --------S-14FD02-----------------------------
  1075. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
  1076.     AX = FD02h
  1077. Return: CX = number of characters available
  1078. --------N-14FF00-----------------------------
  1079. INT 14 - TelAPI - INSTALLATION CHECK
  1080.     AX = FF00h
  1081. Return: AL = FFh if installed
  1082.     AH = 00h for Novell TELAPI.EXE
  1083. SeeAlso: AH=E6h
  1084. --------S-14FF02-----------------------------
  1085. INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ
  1086.     AX = FF02h
  1087.     CX = length
  1088.     DX = port (00h-03h)
  1089.     ES:BX -> buffer
  1090. Return: CX = number of characters read
  1091. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh
  1092. --------t-15---------------------------------
  1093. INT 15 - Microsoft TSR Specification
  1094.     No additional information available at this time.
  1095. --------B-1500-------------------------------
  1096. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  1097.     AH = 00h
  1098. Return: CF set on error
  1099.         AH = 86h no cassette present
  1100.     CF clear if successful
  1101. SeeAlso: AH=01h"CASSETTE"
  1102. --------M-1500-------------------------------
  1103. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  1104.     AH = 00h
  1105. Return: CX = signed X count
  1106.     DX = signed Y count
  1107. --------O-1500-------------------------------
  1108. INT 15 - VMiX v2+ - INSTALLATION CHECK
  1109.     AH = 00h
  1110. Return: DX = 0798h if installed
  1111.         AX = version (AH = major, AL = minor)
  1112. --------T-1500-------------------------------
  1113. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  1114.     AH = 00h
  1115. Note:    if issued by the highest-priority task while MultiDOS is using
  1116.       priority-based rather than round-robin scheduling, control will be
  1117.       returned to the caller immediately
  1118. SeeAlso: AH=03h"MultiDOS",AX=1000h
  1119. --------B-1501-------------------------------
  1120. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  1121.     AH = 01h
  1122. Return: CF set on error
  1123.         AH = 86h no cassette present
  1124.     CF clear if successful
  1125. SeeAlso: AH=00h"CASSETTE"
  1126. --------b-1501-------------------------------
  1127. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  1128.     AH = 01h
  1129.     AL = NVRAM location (00h to 3Fh)
  1130.     BL = NVRAM data value
  1131. Return: AH = return code
  1132.         00h OK
  1133.         01h address bad
  1134.         02h write error
  1135. SeeAlso: AH=02h"Amstrad"
  1136.  
  1137. Format of NVRAM:
  1138. Offset    Size    Description
  1139.  00h    BYTE    time of day: seconds
  1140.  01h    BYTE    alarm time: seconds
  1141.  02h    BYTE    time of day: minutes
  1142.  03h    BYTE    alarm time: minutes
  1143.  04h    BYTE    time of day: hours
  1144.  05h    BYTE    alarm time: hours
  1145.  06h    BYTE    day of week, 1 = Sunday
  1146.  07h    BYTE    day of month
  1147.  08h    BYTE    month
  1148.  09h    BYTE    year mod 100
  1149.  0Ah    BYTE    RTC status register A
  1150.         bit 7: set if date/time being updated
  1151.         bits 6-4: time base speed, default 010 = 32768 Hz
  1152.         bits 3-0: interrupt rate selection, default 0110 = 1024 Hz
  1153.  0Bh    BYTE    RTC status register B (see below)
  1154.  0Ch    BYTE    RTC status register C (read-only)
  1155.         bit 7: IRQF flag
  1156.         bit 6: PF flag
  1157.         bit 5: AF flag
  1158.         bit 4: UF flag
  1159.  0Dh    BYTE    RTC status register D
  1160.         bit 7: battery good
  1161.  0Eh  6 BYTEs    time and date machine last used
  1162.  14h    BYTE    user RAM checksum
  1163.  15h    WORD    Enter key scancode/ASCII code
  1164.  17h    WORD    Forward delete key scancode/ASCII code
  1165.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  1166.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  1167.  1Dh    WORD    mouse button 1 scancode/ASCII code
  1168.  1Fh    WORD    mouse button 2 scancode/ASCII code
  1169.  21h    BYTE    mouse X scaling factor
  1170.  22h    BYTE    mouse Y scaling factor
  1171.  23h    BYTE    initial VDU mode and drive count
  1172.  24h    BYTE    initial VDU character attribute
  1173.  25h    BYTE    size of RAM disk in 2K blocks
  1174.  26h    BYTE    initial system UART setup byte
  1175.  27h    BYTE    initial external UART setup byte
  1176.  28h 24 BYTEs    available for user application
  1177. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  1178.       the clock chip
  1179.  
  1180. Bitfields for RTC status register B:
  1181.  bit 7    clear if normal update, set if abort update
  1182.  bit 6    periodic interrupt enable
  1183.  bit 5    alarm interrupt enable
  1184.  bit 4    update end interrupt enable
  1185.  bit 3    square wave enable
  1186.  bit 2    date mode (clear = BCD, set = binary)
  1187.  bit 1    24-hour format
  1188.  bit 0    daylight saving time enable
  1189. --------O-1501-------------------------------
  1190. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  1191.     AH = 01h
  1192.     STACK:    WORD    object ID of requestor
  1193.         DWORD    pointer to ASCIZ name of requested method
  1194.             "assign" assign channel to object
  1195.             "deassign" deassign channel
  1196.             "cursor" set cursor on/off
  1197.             "init" initialize comm port
  1198.             "open" open I/O channel
  1199.             "position" set cursor position
  1200.             "receive" get buffered packet from comm port
  1201.             "send" send buffered packet to comm port
  1202.             "vio" set current virtual I/O to specified channel
  1203.             "window" make window at cursor position
  1204.         ---if "assign"---
  1205.          WORD    object UID
  1206.          WORD    caller UID/PID
  1207.          DWORD    CSL with port
  1208.         ---if "deassign"---
  1209.          WORD    channel ID
  1210.         ---if "cursor"---
  1211.          WORD    channel ID (must be a SRCSINK)
  1212.          WORD    new state (0000h off, 0001h on)
  1213.         ---if "init"---
  1214.          WORD    channel ID (must be a SRCSINK)
  1215.          WORD    comm port number (00h-03h)
  1216.          WORD    UART init code
  1217.         ---if "open"---
  1218.          WORD    channel ID
  1219.         ---if "position"---
  1220.          WORD    channel ID (must be a SRCSINK)
  1221.          WORD    position (high byte = row, low byte = column)
  1222.         ---if "receive"---
  1223.          DWORD    pointer to buffer
  1224.         ---if "send"---
  1225.          WORD    length of buffer
  1226.          DWORD    pointer to buffer
  1227.         ---if "vio"---
  1228.          WORD    channel ID (must be a SRCSINK)
  1229.         ---if "window"---
  1230.          WORD    top left (high byte = row, low byte = column)
  1231.          WORD    bottom right (high byte = row, low byte = column)
  1232. Return: DX:AX -> IRP structure or 0000h:0000h
  1233. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  1234. --------T-1501-------------------------------
  1235. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  1236.     AH = 01h
  1237.     AL = semaphore number (00h-3Fh)
  1238. Return: AH = status
  1239.         00h successful
  1240.         02h invalid semaphore number
  1241. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  1242.       task and the call returns immediately
  1243.     if the semaphore is already owned by another task, the calling task
  1244.       is placed on a queue for the semaphore and suspended until it can
  1245.       become owner of the semaphore
  1246.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  1247. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  1248. --------B-1502-------------------------------
  1249. INT 15 - CASSETTE - READ DATA (PC and PCjr only)
  1250.     AH = 02h
  1251.     CX = number of bytes to read
  1252.     ES:BX -> buffer
  1253. Return: CF clear if successful
  1254.         DX = number of bytes read
  1255.         ES:BX -> byte following last byte read
  1256.     CF set on error
  1257.     AH = status (see below)
  1258. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  1259.  
  1260. Values for status:
  1261.  00h    successful
  1262.  01h    CRC error
  1263.  02h    bad tape signals
  1264.  04h    no data
  1265.  80h    invalid command
  1266.  86h    no cassette present
  1267. --------b-1502-------------------------------
  1268. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  1269.     AH = 02h
  1270.     AL = NVRAM location (00h to 3Fh)
  1271. Return: AH = return code
  1272.         00h OK
  1273.         01h address bad
  1274.         02h checksum error
  1275.     AL = NVRAM data value
  1276. SeeAlso: AH=01h"Amstrad"
  1277. --------O-1502-------------------------------
  1278. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  1279.     AH = 02h
  1280.     STACK:    WORD    object ID of requestor
  1281.         DWORD    pointer to ASCIZ name of requested method
  1282.             "assign" allocate low memory block
  1283.             "assign extended" allocate extended memory pages
  1284.             "assign gdt" allocate GDT selector
  1285.             "paged" allocate low paged memory
  1286.             "paged extended" alllocate extended memory pages
  1287.             "deassign" free memory block
  1288.             "deassign gdt" free GDT selector
  1289.             "getvpage" get physical address for virtual page
  1290.             "setvpage" set physical address for virtual page
  1291.             "info" get VMiX memory usage info block
  1292.             "move" move contents of 32-bit memory
  1293.             "newmcb" make new DOS memory control block
  1294.             "owner" get process ID of MCB or PSP owner
  1295.             "umb" allocate upper memory block
  1296.             "video" toggle system use of vidoe memory and get stat
  1297.         ---if "assign"---
  1298.          WORD    number of objects
  1299.          WORD    size in bytes (multiple of 512 bytes)
  1300.         ---if "assign extended"---
  1301.          WORD    number of objects
  1302.          WORD    size in bytes (multiple of 4K)
  1303.         ---if "assign gdt"---
  1304.          WORD    access type (low byte)
  1305.          WORD    segment size in paragraphs
  1306.          DWORD    pointer to start of physical segment
  1307.         ---if "paged"---
  1308.          WORD    number of 512-byte pages
  1309.         ---if "paged extended"
  1310.          WORD    number of 4K pages
  1311.         ---if "deassign"---
  1312.          DWORD    pointer returned by previous allocation call
  1313.         ---if "deassign gdt"---
  1314.          WORD    GDT selector
  1315.         ---if "getvpage"---
  1316.          WORD    owner's process ID
  1317.          DWORD    pointer to buffer for page structure (struct VPGE)
  1318.         ---if "setvpage"---
  1319.          WORD    owner's process ID
  1320.          DWORD    pointer to new page structure (struct VPGE)
  1321.         ---if "info"---
  1322.          no additional arguments
  1323.         ---if "move"
  1324.          DWORD    32-bit source address
  1325.          DWORD    32-bit destination address
  1326.          WORD    number of words to move
  1327.         ---if "newmcb"---
  1328.          DWORD    pointer to new MCB's location
  1329.          WORD    size of memory block
  1330.          DWORD    pointer to ASCIZ name string (max 8 chars)
  1331.         ---if "owner"---
  1332.          WORD    MCB or PSP segment
  1333.         ---if "umb"---
  1334.          WORD    size in paragraphs
  1335.         ---if "video"---
  1336.          no additional arguments
  1337. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  1338. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  1339. --------T-1502-------------------------------
  1340. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  1341.     AH = 02h
  1342.     AL = semaphore number (00h-3Fh)
  1343. Return: AH = status
  1344.         00h successful
  1345.         01h not semaphore owner
  1346.         02h invalid semaphore number
  1347. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  1348.       queue will become the new owner and be reawakened
  1349.     do not use within an interrupt handler
  1350. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  1351. --------B-1503-------------------------------
  1352. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  1353.     AH = 03h
  1354.     CX = number of bytes to write
  1355.     ES:BX -> data buffer
  1356. Return: CF clear if successful
  1357.         ES:BX -> byte following last byte written
  1358.     CF set on error
  1359.     AH = status (see AH=02h"CASSETTE")
  1360.     CX = 0000h
  1361. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  1362. --------V-1503-------------------------------
  1363. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  1364.     AH = 03h
  1365.     AL = value (I,R,G,B bits)
  1366. SeeAlso: AH=04h"Amstrad"
  1367. --------O-1503-------------------------------
  1368. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  1369.     AH = 03h
  1370.     STACK:    DWORD    pointer to ASCII prompt
  1371.         WORD    field outline character
  1372.         WORD    length of input field (max 7Fh)
  1373.         DWORD    address of pointer to input buffer
  1374. Return: AX = length of input (input buffer is padded with blanks)
  1375. SeeAlso: AH=04h"VMiX"
  1376. --------T-1503-------------------------------
  1377. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  1378.     AH = 03h
  1379.     DX = number of time slices to remain suspended
  1380. Return: after specified interval has elapsed
  1381. Note:    when priority-based scheduling is in use, high-priority tasks should
  1382.       use this function to yield the processor
  1383. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  1384. --------B-1504-------------------------------
  1385. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  1386.     AH = 04h
  1387.     ES:DI -> results buffer length 20h for System Parameter Table
  1388.     DS = segment containing ABIOS RAM extensions (zero if none)
  1389. Return: AH = 00h success: results at ES:DI
  1390.     CF set on failure
  1391. SeeAlso: AH=05h"ABIOS",C1h
  1392.  
  1393. Format of ABIOS System Parameter Table:
  1394. Offset    Size    Description
  1395.  00h    DWORD    FAR address of ABIOS Common Start Routine
  1396.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  1397.  08h    DWORD    FAR address of ABIOS Time-out Routine
  1398.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  1399.  0Eh 16 BYTEs    reserved
  1400.  1Eh    WORD    number of entries in initialization table
  1401. --------V-1504-------------------------------
  1402. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  1403.     AH = 04h
  1404.     AL = value (RDSEL1 and RDSEL0)
  1405. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  1406. --------O-1504-------------------------------
  1407. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  1408.     AH = 04h
  1409.     STACK:    DWORD    control string
  1410.         DWORD    array of arguments
  1411. SeeAlso: AH=03h"VMiX"
  1412. --------T-1504-------------------------------
  1413. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  1414.     AH = 04h
  1415.     AL = mailbox number (00h-3Fh)
  1416.     CX = message length in bytes
  1417.     DS:SI -> message
  1418. Return: AH = status
  1419.         00h successful
  1420.         01h out of message memory
  1421.         02h invalid mailbox number
  1422. Note:    the message is copied into a system buffer; the caller may immediately
  1423.       reuse its buffer
  1424. SeeAlso: AH=05h"MultiDOS"
  1425. --------B-1505-------------------------------
  1426. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  1427.     AH = 05h
  1428.     ES:DI -> results buffer length (18h * Number_of_Entries)
  1429.     DS = segment containing ABIOS RAM extensions (zero if none)
  1430. Return: AH = 00h success: results at ES:DI
  1431.     CF set on failure
  1432. SeeAlso: AH=04h"ABIOS",C1h
  1433.  
  1434. Format of one entry of ABIOS Initialization Table:
  1435. Offset    Size    Description
  1436.  00h    WORD    device ID
  1437.  02h    WORD    number of Logical IDs
  1438.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  1439.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  1440.  0Ah    WORD    request block length
  1441.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  1442.  0Eh    WORD    Data Pointers length (in Common Data Area)
  1443.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  1444.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  1445.  12h  6 BYTEs    reserved
  1446. --------V-1505-------------------------------
  1447. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  1448.     AH = 05h
  1449.     AL = value (I,R,G,B bits)
  1450. SeeAlso: AH=04h"Amstrad"
  1451. --------O-1505-------------------------------
  1452. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  1453.     AH = 05h
  1454. Return: AX = process ID
  1455. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  1456. --------T-1505-------------------------------
  1457. INT 15 - MultiDOS Plus - CHECK MAILBOX
  1458.     AH = 05h
  1459.     AL = mailbox number (00h-3Fh)
  1460. Return: AH = status
  1461.         00h successful
  1462.         DX = length of first message in queue, 0000h if no message
  1463.         02h invalid mailbox number
  1464. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  1465. --------b-1506-------------------------------
  1466. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  1467.     AH = 06h
  1468. Return: BX = version number
  1469. --------O-1506-------------------------------
  1470. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  1471.     AH = 06h
  1472.     STACK:    WORD    process ID
  1473. Return: DX:AX -> process control block
  1474. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  1475. --------T-1506-------------------------------
  1476. INT 15 - MultiDOS Plus - READ MAILBOX
  1477.     AH = 06h
  1478.     AL = mailbox number (00h-3Fh)
  1479.     CX = size of buffer in bytes
  1480.     ES:DI -> buffer for message
  1481. Return: AH = status
  1482.         00h successful
  1483.         CX = number of bytes copied
  1484.         DX = actual length of message
  1485.         02h invalid mailbox number
  1486. Note:    if the caller's buffer is not large enough, the message is truncated
  1487.       and the remainder is lost
  1488. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  1489. --------O-1507-------------------------------
  1490. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  1491.     AH = 07h
  1492.     STACK:    WORD    object type
  1493. Return: DX:AX -> object control block
  1494. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  1495. --------T-1507-------------------------------
  1496. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  1497.     AH = 07h
  1498.     BX:CX = entry point of new task
  1499.     DX = stack size in paragraphs
  1500. Return: AH = status
  1501.         00h successful
  1502.         01h no free task control blocks
  1503.         02h no free memory for task's stack
  1504. Note:    execution returns immediately to calling task
  1505. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  1506. --------O-1508-------------------------------
  1507. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  1508.     AH = 08h
  1509.     STACK:    WORD    channel ID
  1510. Return: DX:AX -> channel control block
  1511. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  1512. --------T-1508-------------------------------
  1513. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  1514.     AH = 08h
  1515. Return: calling task terminated, so execution never returns to caller
  1516. Notes:    an internal task must be terminated with this function rather than a
  1517.       DOS termination function
  1518.     task's stack space is returned to parent task's memory pool
  1519. SeeAlso: AH=07h"MultiDOS"
  1520. --------O-1509-------------------------------
  1521. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  1522.     AH = 09h
  1523.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  1524.         WORD    subqueue ID
  1525. Return: AX = queue ID
  1526. SeeAlso: AH=0Ah"VMiX"
  1527. --------T-1509-------------------------------
  1528. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  1529.     AH = 09h
  1530.     AL = new priority
  1531. Note:    the priority has different meanings depending on whether priority-
  1532.       based or round-robin scheduling is used
  1533. SeeAlso: AH=07h"MultiDOS"
  1534. --------O-150A-------------------------------
  1535. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  1536.     AH = 0Ah
  1537.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  1538.         WORD    ID of current element in queue chain
  1539. Return: AX = ID of next element
  1540. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  1541. --------T-150A-------------------------------
  1542. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  1543.     AH = 0Ah
  1544.     AL = new interval
  1545.         00h = 55.0 ms (default)
  1546.         80h = 27.5 ms
  1547.         40h = 13.75 ms
  1548.         20h = 6.88 ms
  1549.         10h = 3.44 ms
  1550.         08h = 1.72 ms
  1551. SeeAlso: AH=03h"MultiDOS"
  1552. --------O-150B-------------------------------
  1553. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  1554.     AH = 0Bh
  1555.     STACK:    WORD    caller's UID
  1556.         DWORD    pointer to ASCIZ name of requested method
  1557.             "abort" abort current send/receive on comm port
  1558.             "block" start/end critical section
  1559.             "close" terminate interrupt-drive comm I/O
  1560.             "open" prepare comm port for interrupt-driven I/O
  1561.             "delay" set delay timer and wait
  1562.             "hibernate" put process to sleep
  1563.             "ints" enable/disable interrupt-driven INT 14h
  1564.             "length" get current send/receive buffer offsets
  1565.             "kswitch" switch stacks
  1566.             "numproc" get number of active processes
  1567.             "protocol" set protocol function for comm interrupts
  1568.             "relocate" set/reset VMiX flag for relocating to himem
  1569.             "status" get current open comm port status
  1570.             "wake" awaken a process
  1571.             "xport" get comm port polled for logins
  1572.         ---if "abort"---
  1573.          no additional arguments
  1574.         ---if "block"---
  1575.          WORD    0000h end, 0001h start
  1576.         ---if "close"---
  1577.          no additional arguments
  1578.         ---if "open"---
  1579.          WORD    comm port (00h-03h)
  1580.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  1581.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  1582.         ---if "delay"---
  1583.          WORD    time in seconds
  1584.         ---if "hibernate"---
  1585.          WORD    process ID
  1586.         ---if "ints"---
  1587.          WORD    0000h if no, 0001h if yes
  1588.         ---if "length","numproc","relocate","status","xport"---
  1589.          no additional arguments
  1590.         ---if "kswitch"---
  1591.          DWORD    pointer to new stack
  1592.         ---if "protocol"---
  1593.          DWORD    pointer to function (must be in low "assign"ed memory
  1594.             when in 386 mode)
  1595.         ---if "wake"---
  1596.          WORD    process ID
  1597. Return: DX:AX -> result or 0000h:0000h
  1598.         ---if "length"---
  1599.          BYTE    receive offset
  1600.          BYTE    send offset
  1601.         ---if "kswitch"---
  1602.          DWORD    old stack pointer
  1603.         ---if "numproc"---
  1604.          WORD    number of active processes
  1605.         ---if "status"---
  1606.          current open comm port status
  1607.         ---if "xport"---
  1608.          current comm port being polled for logins
  1609. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  1610. --------T-150B-------------------------------
  1611. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  1612.     AH = 0Bh
  1613. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  1614.       may be restored with AH=0Ch
  1615.     caller's video mode must be same as foreground task's video mode
  1616.     any text written while in the background will be saved to the
  1617.       foreground task's virtual screen when it switches to the background
  1618.     useful if a background task wants to display a message on the
  1619.       foreground screen
  1620. SeeAlso: AH=0Ch"MultiDOS"
  1621. --------O-150C-------------------------------
  1622. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  1623.     AH = 0Ch
  1624.     STACK:    WORD    process ID
  1625. Return: DX:AX -> TSS stack store
  1626. SeeAlso: AH=00"VMiX"
  1627. --------T-150C-------------------------------
  1628. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  1629.     AH = 0Ch
  1630. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  1631.       unless AH=0Bh has been called first
  1632. SeeAlso: AH=0Bh"MultiDOS"
  1633. --------O-150D-------------------------------
  1634. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  1635.     AH = 0Dh
  1636.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  1637.             followed by standard VMiX shell command string
  1638. Return: AX = process ID or error code "SYS_ERROR"
  1639. Note:    the maximum string length is 7Fh characters
  1640. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  1641. --------T-150D-------------------------------
  1642. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  1643.     AH = 0Dh
  1644. Note:    calling task receives all time slices until AH=0Eh is called; this
  1645.       allows time-critical events or nonreentrant code to be processed
  1646. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  1647. --------O-150E-------------------------------
  1648. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  1649.     AH = 0Eh
  1650.     STACK:    WORD    process ID
  1651. Return: AX = status (SYS_OK or SYS_ERROR)
  1652. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  1653. --------T-150E-------------------------------
  1654. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  1655.     AH = 0Eh
  1656. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  1657. --------d-150F-------------------------------
  1658. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  1659.     AH = 0Fh
  1660.     AL = phase code
  1661.         00h reserved
  1662.         01h surface analysis
  1663.         02h formatting
  1664. Return: CF clear if formatting should continue, set if it should terminate
  1665. Note:    called during ESDI drive formatting after each cylinder is completed
  1666. SeeAlso: INT 13/AH=1Ah
  1667. --------O-150F-------------------------------
  1668. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  1669.     AH = 0Fh
  1670.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  1671.         WORD    ID of element in queue chain
  1672. Return: AX = key
  1673. SeeAlso: AH=0Ah"VMiX"
  1674. --------T-150F-------------------------------
  1675. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  1676.     AH = 0Fh
  1677.     DS:BX -> ASCIZ command
  1678. Return: after command has been processed
  1679. Notes:    specified string is executed as if it had been typed at the MultiDOS
  1680.       command prompt
  1681.     the task is placed on a queue which MultiDOS examines periodically and
  1682.       is suspended until MultiDOS has processed the command
  1683.     all lowercase characters up to the first blank are converted to upper
  1684.       case within the given buffer
  1685. --------O-1510-------------------------------
  1686. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  1687.     AH = 10h
  1688.     STACK:    DWORD    pointer to function
  1689.           N WORDs    function args
  1690. Return: AX = function's return value??? (not specified in documentation)
  1691. Note:    while the function is executing, the following global descriptors are
  1692.       available:
  1693.         20h stack segment
  1694.         38h code segment of function
  1695.         40h data alias for function's code segment
  1696.       additional GDT descriptors can be allocated using AH=02h with
  1697.       function "assign gdt"
  1698. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  1699. --------T-1510-------------------------------
  1700. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  1701.     AH = 10h
  1702.     AL = semaphore number (00h-3Fh)
  1703. Return: AH = status
  1704.         00h semaphore not in use
  1705.         01h semaphore owned by another task
  1706.         02h invalid semaphore number
  1707.         03h semaphore owned by caller
  1708. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  1709. --------Q-151000-----------------------------
  1710. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  1711.     AX = 1000h
  1712. Return: after other processes run
  1713. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  1714.       the current time-slice is set to expire at the next clock tick rather
  1715.       than immediately
  1716. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  1717. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  1718. SeeAlso: INT 7F/AH=E8h
  1719. --------Q-151001-----------------------------
  1720. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  1721.     AX = 1001h
  1722.     BX = number of bytes to allocate
  1723. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  1724.     AX = status (DV v2.42)
  1725.         0000h successful
  1726.         0001h failed
  1727. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  1728.       common memory.  Under DV v2.42, this call never generates a user
  1729.       prompt regardless of the SETERROR value; instead, it always returns
  1730.       AX=0001h and ES:DI=0000h:0000h if out of memory
  1731. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  1732. --------Q-151002-----------------------------
  1733. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  1734.     AX = 1002h
  1735.     ES:DI -> previously allocated block
  1736. Return: block freed
  1737. SeeAlso: AX=1001h,AX=DE0Dh
  1738. --------Q-151003-----------------------------
  1739. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  1740.     AX = 1003h
  1741.     BH = attribute
  1742.     BL = character
  1743.     DX = segment of object handle for window
  1744. Note:    BX=0 does not display anything, it only positions the hardware cursor
  1745. --------Q-1510-------------------------------
  1746. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  1747.     AH = 10h
  1748.     AL = 04h thru 12h
  1749. Return: pops up "Programming error" window in DV 2.x
  1750. --------Q-151013-----------------------------
  1751. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  1752.     AX = 1013h
  1753.     ES:DI -> FAR service routine
  1754. Return: BX = bit mask indicating which bit was allocated
  1755.          0000h if no more bits available
  1756. SeeAlso: AX=1014h,AX=1015h
  1757. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  1758.       interrupt; if other calls need to be made, the interrupt handler
  1759.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  1760. --------Q-151014-----------------------------
  1761. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  1762.     AX = 1014h
  1763.     BX = bit mask from INT 15/AX=1013h
  1764. SeeAlso: AX=1013h,AX=1015h
  1765. --------Q-151015-----------------------------
  1766. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  1767.     AX = 1015h
  1768.     BX = bit mask for interrupts to post
  1769. Return: indicated routines will be called: (DV 2.0x) at next task switch
  1770.                        (DV 2.2x) immediately on return from
  1771.                              hardware interrupt
  1772. SeeAlso: AX=1013h,AX=1014h
  1773. Notes:    this is one of the few TopView calls which are allowed from a hardware
  1774.       interrupt handler
  1775.     the handler will be called with ES containing the segment of the handle
  1776.       of the next task to be executed; on return, ES must be the segment of
  1777.       a task handle
  1778. --------Q-151016-----------------------------
  1779. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  1780.     AX = 1016h
  1781.     ES:DI = possible object handle
  1782. Return: BX = FFFFh if ES:DI is a valid object handle
  1783.          0000h if ES:DI is not
  1784. Note:    under DESQview versions prior to 2.50, an object handle is always a
  1785.       pointer to the object; for versions 2.50 and up, only task handles
  1786.       are always pointers (other handles may consist of a unique object
  1787.       number and offset into DESQview's common memory)
  1788. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  1789.  
  1790. Format of object:
  1791. Offset    Size    Description
  1792.  00h    WORD    offset in common memory of previous object of same type
  1793.  02h    WORD    offset in common memory of next object of same type
  1794.  04h    WORD    signature FEDCh (DV 2.42-)
  1795.         signature FEDCh or object number (DV 2.50+)
  1796.  06h    WORD    object type
  1797.         00h window/task
  1798.         01h mailbox
  1799.         02h keyboard
  1800.         03h timer
  1801.         04h pointer
  1802.         05h panel
  1803.         06h objectq
  1804.  08h    DWORD    object handle to return to caller
  1805.  0Ch    DWORD    canonicalized object address (segment = common memory)
  1806.  10h    WORD    offset in common memory of owning task
  1807.         (0000h for unowned OBJECTQs)
  1808.  12h    WORD    mapping context
  1809.         offset in common memory of mapping context record (see below)
  1810.     remainder varies by object type and DESQview version
  1811. ---v2.42 keyboard object---
  1812.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  1813.         bit 15: keyboard opened
  1814.  16h  4 BYTEs    ???
  1815.  1Ah    WORD    priority in OBJECTQ???
  1816.  1Ch    ...
  1817.  25h    WORD    offset in common memory of ??? task
  1818.  27h  4 BYTEs    ???
  1819. ---v2.42 objectq object---
  1820.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  1821.         bit 15: OBJECTQ opened
  1822.  16h  2 BYTEs    ???
  1823.  18h    WORD    offset in common memory of ??? task
  1824.  1Ah  6 BYTEs    ???
  1825. ---v2.42 mailbox object---
  1826.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  1827.         bit 15: mailbox opened
  1828.  1Ah    WORD    priority in OBJECTQ???
  1829.  1Ch  6 BYTEs    ???
  1830.  22h    WORD    offset in common memory of mailbox name (counted string)
  1831.         0000h if no name
  1832.      <= 5 BYTEs ???
  1833. ---v2.22-2.42,2.52,2.60 window/task object---
  1834.  14h    BYTE    00h window, 01h task
  1835.  15h    BYTE    internal (not Switch menu) window number???
  1836.  16h    BYTE    internal (not Switch menu) window number???
  1837.  17h    WORD    segment of internal window record (see below)
  1838.  19h  2 BYTEs    ???
  1839.  1Bh    BYTE    cursor row
  1840.  1Ch    BYTE    cursor column
  1841.  1Dh    BYTE    visible window origin, row
  1842.  1Eh    BYTE    visible window origin, column
  1843.  1Fh    BYTE    window height (logical)
  1844.  20h    BYTE    window width (logical)
  1845.  21h    BYTE    window position, row
  1846.  22h    BYTE    window position, column
  1847.  23h    BYTE    window height (visible)
  1848.  24h    BYTE    window width (visible)
  1849.  25h    BYTE    row of top of frame (or window if unframed)
  1850.  26h    BYTE    column of left of frame (or window if unframed)
  1851.  27h    BYTE    window height (physical, including frame)
  1852.  28h    BYTE    window width (physical, including frame)
  1853.  29h    BYTE    unzoomed visible origin, row (00h before first zoom)
  1854.  2Ah    BYTE    unzoomed visible origin, column (00h before first zoom)
  1855.  2Bh    BYTE    unzoomed window position, row (00h before first zoom)
  1856.  2Ch    BYTE    unzoomed window position, column (00h before first zoom)
  1857.  2Dh    BYTE    unzoomed window height (00h before first zoom)
  1858.  2Eh    BYTE    unzoomed window width (00h before first zoom)
  1859.         unzoomed parameters above are updated when window is zoomed
  1860.         to full    screen
  1861.  2Fh    BYTE    ??? initially logical window height
  1862.  30h    BYTE    ??? initially logical window width
  1863.  31h  2 BYTEs    ???
  1864.  33h    BYTE    minimum height of window
  1865.  34h    BYTE    minimum width of window
  1866.  35h    BYTE    maximum height of window
  1867.  36h    BYTE    maximum width of window
  1868.  37h  3 BYTEs    ???
  1869.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  1870.  42h 24 BYTEs    attributes???
  1871.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  1872.  62h  3 BYTEs    ???
  1873.  65h    BYTE    ??? bitflags
  1874.  66h    BYTE    bit 0: window is zoomed
  1875.  67h    BYTE    ???
  1876.  68h    WORD    offset in common memory of window name or 0000h if untitled
  1877.  6Ah    WORD    length of window name
  1878.  6Ch  2 BYTEs    ???
  1879.  6Eh    WORD    offset of logical cursor in window (in character cells)
  1880.  70h    DWORD    pointer to field table for window
  1881.  74h    BYTE    ???
  1882.  75h  2 BYTEs    ???
  1883.  77h    BYTE    number of last-visited field
  1884.  78h    DWORD    pointer to field table entry for last-visited field
  1885.  7Ch  3 BYTEs    ???
  1886.  7Fh    BYTE    select field marker character
  1887.  80h    BYTE    ??? bit flags
  1888.         bit 0: allow ECh window stream opcode to change reverse logattr
  1889.         bit 1: alternate field processing mode selected
  1890.  81h    BYTE    ???
  1891.  82h    DWORD    notification function (manager stream opcode 8Ah)
  1892.         no notification if segment = 0000h
  1893.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  1894.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  1895.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  1896.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  1897.  90h    BYTE    ??? bitflags
  1898.  91h    BYTE    ???
  1899.  ---task object only
  1900.  92h    BYTE    bit flags (bits 0-4)
  1901.  93h    BYTE    character for ??? (default 20h)
  1902.  94h    BYTE    ??? flag
  1903.  95h    WORD    offset in common memory of ???
  1904.  97h  2 BYTEs    ???
  1905.  99h    WORD    ???
  1906.  9Bh    BYTE    ??? bit flags
  1907.         bit 3: ???
  1908.         bit 6: perform protected-attribute processing on select fields
  1909.  9Ch    BYTE    ???
  1910.  9Dh    WORD    offset in common memory of current register save record
  1911.         (see below).  No register save record in use if < 01C0h
  1912.  9Fh    WORD    offset in common memory of task's keyboard object
  1913.  A1h    WORD    offset in common memory of task's OBJECTQ object
  1914.  A3h    WORD    offset in common memory of task's mailbox object
  1915.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  1916.  A7h    DWORD    user's SS:SP
  1917.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  1918.  ADh  6 BYTEs    ???
  1919.  B3h    BYTE    ??? bit flags
  1920.         bit 0: run in foreground only
  1921.  B4h    BYTE    ???
  1922.  B5h    BYTE    ??? bitflags
  1923.  B6h    BYTE    task status (see AX=DE2Ch)
  1924.  B7h  9 BYTEs    ???
  1925.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  1926.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  1927.  C4h  2 BYTEs    ??? (0000h)
  1928.  C6h    WORD    segment of keyboard buffer for task
  1929.  C8h    WORD    offset in common memory of ??? keyboard object
  1930.  CAh    BYTE    ???
  1931. ---v2.22-2.42
  1932.  CBh    WORD    offset in common memory of ??? object
  1933.  CEh    BYTE    ??? flag
  1934.  CFh    WORD    offset in common memory of default notify window for task
  1935.         or 0000h if none
  1936.  D1h  4 BYTEs    ???
  1937.  D5h    BYTE    window number on Switch Window menu
  1938.  D6h  5 BYTEs    ???
  1939.  DBh    WORD    offset in common memory of ??? object
  1940.  DDh  2 BYTEs    ???
  1941.  DFh    WORD    API level for task
  1942.  E1h    WORD    offset in common memory of object task is waiting on if task
  1943.         status is 'waiting', else 0000h
  1944.  E7h    WORD    segment of ???
  1945.  E9h 4    BYTEs    ???
  1946.  EDh    WORD    EMS handle of virtualization buffer, 0000h if no virtualization
  1947.  F1h 12 BYTEs    ???
  1948.  FBh    WORD    ???
  1949.  FDh    BYTE    ???
  1950.  FFh 12 BYTEs    ???
  1951. 10Bh    DWORD    pointer to process record (see below)
  1952. 10Dh 10 BYTEs    ???
  1953. 119h    DWORD    SS:SP for ???
  1954. 11Dh  4 BYTEs    ???
  1955. 121h    DWORD    pointer to ???
  1956. 125h 25 BYTEs    ???
  1957. 13Eh    DWORD    pointer to ??? in system memory
  1958. ---v2.22
  1959. 142h  3 BYTEs    ???
  1960. 145h        task's default keyboard object
  1961. ---v2.42
  1962. 142h    DWORD    pointer to first task instance data record in system memory
  1963. 148h    DWORD    pointer to last task instance data record in system memory
  1964.         (see below)
  1965. 14Ah    BYTE    ???
  1966. 14Dh 42 BYTEs    task's default keyboard object
  1967. 177h 32 BYTEs    task's ObjectQ object
  1968. 197h 41 BYTEs    task's default mailbox object
  1969. 1C0h 24 BYTEs    first register save record
  1970. 450h    --    default top of private stack
  1971. ---v2.52 (probably all DV/X)
  1972. Same as v2.60 below except there is an extra 29 bytes inserted somewhere
  1973.   before offset 9Fh, but not yet known exactly where.  Also, for the WAIT_ON
  1974.   field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
  1975.   0000h even when waiting.
  1976. ---v2.60
  1977.  CBh    WORD    ??? (added in 2.50 - rest is same as 2.42)
  1978.  CDh    WORD    offset in common memory of ??? object
  1979.  D0h    BYTE    ??? flag
  1980.  D1h    WORD    offset in common memory of default notify window for task
  1981.         or 0000h if none
  1982.  D3h  4 BYTEs    ???
  1983.  D7h    BYTE    window number on Switch Window menu
  1984.  D8h  5 BYTEs    ???
  1985.  DDh    WORD    offset in common memory of ??? object
  1986.  DFh  2 BYTEs    ???
  1987.  E1h    WORD    API level for task
  1988.  E3h    WORD    If status at B6h=waiting, offset in common memory of object
  1989.         that task is waiting on, else 0000h. (Task with CPU also
  1990.         has 0000h here)
  1991.  E9h    WORD    segment of ???
  1992.  EBh 4    BYTEs    ???
  1993.  EFh    WORD    EMS handle of virtualization buffer, 0 if no virtualization
  1994.  F3h 12 BYTEs    ???
  1995.  FDh    WORD    ???
  1996.  FFh    BYTE    ???
  1997. 101h  8 BYTEs    ???
  1998. 109h    DWORD    pointer to process record in system memory
  1999. 10Dh 14 BYTEs  ???
  2000. 11Bh    DWORD    SS:SP for ???
  2001. 11Fh  4 BYTEs    ???
  2002. 123h    DWORD    pointer to ???
  2003. 127h 25 BYTEs    ???
  2004. 140h    DWORD    pointer to ??? in system memory
  2005. 144h    DWORD    pointer to first task instance data record in system memory
  2006. 148h    DWORD    pointer to last task instance data record in system memory
  2007.          (from INT 15/AX=DE27h, see below)
  2008. 14Ch    BYTE    ???
  2009. 14Eh 42 BYTEs    task's default keyboard object
  2010. 179h 32 BYTEs    task's ObjectQ object
  2011. 199h 41 BYTEs    task's default mailbox object
  2012. 1C2h 24 BYTEs    first register save record
  2013. 452h    --    default top of private stack
  2014.  
  2015. Format of Register Save Record:
  2016. Offset    Size    Description
  2017.  00h    WORD    AX
  2018.  02h    WORD    BX
  2019.  04h    WORD    CX
  2020.  06h    WORD    DX
  2021.  08h    WORD    DI
  2022.  0Ah    WORD    SI
  2023.  0Eh    WORD    DS
  2024.  10h    WORD    ES
  2025.  12h    DWORD    return address
  2026.  16h    WORD    original flags
  2027.  
  2028. Format of mapping context record:
  2029. Offset    Size    Description
  2030.  00h    WORD    lowest segment in process's memory
  2031.         (often start of system memory chain)
  2032.  02h    WORD    size of process's memory in paragraphs
  2033.  04h    BYTE    flag: 00h if process swapped out, 01h otherwise
  2034.  05h    BYTE    flag: 00h if allocated in conventional memory, 01h if EMS
  2035.  06h  2 BYTEs    ???
  2036.  08h    WORD    EMS handle if in EMS, else 0
  2037.  0Ah  2 BYTEs    ??? (nonzero if system memory resides in shared mem???)
  2038.  0Ch    WORD    segment of system memory block that contains process record,
  2039.         referenced from segment of start of system memory chain
  2040.  0Eh    BYTE    ???
  2041.  0Fh    WORD    size of system memory block that contains process record
  2042.         and DOS memory in paragraphs
  2043.  11h    BYTE    bit flags
  2044.         Bit 0: Swapped out???
  2045.         Bit 1: ???
  2046.         Bit 2: Swapped out???
  2047.  12h    BYTE    ???
  2048.  13h    BYTE    reference count
  2049.  ---v2.31
  2050.  14h 10 BYTEs    ???
  2051.  1Eh    WORD    segment of process record
  2052.  20h  2 BYTEs    ???
  2053.  22h    WORD    segment of ???    (in first free system memory block???)
  2054.  24h    WORD    segment of end of system memory chain
  2055.  26h    WORD    segment of start of system memory chain
  2056.  28h  8 BYTEs    ???
  2057.  2Ah    DWORD    pointer to ??? (process record???)
  2058.  2Dh 10 BYTEs    ???
  2059.  37h    BYTE    lowest interrupt vector to save on context switch
  2060.  38h    BYTE    highest interrupt vector to save on context switch
  2061.  39h    WORD    offset in common memory of main task with this context
  2062.  3Ah 12 BYTEs    ???
  2063.  46h    BYTE    internal mapping context number
  2064.  47h 12 BYTEs    ???
  2065.  ---v2.5x-2.60
  2066.  14h  6 BYTEs    ???
  2067.  1Ah    WORD    segment of process record
  2068.  1Ch  2 BYTEs    ???
  2069.  1Eh    WORD    segment of first free system memory block
  2070.  20h    WORD    segment of start of system memory chain
  2071.  22h    WORD    segment of end of system memory chain
  2072.  24h 8    BYTEs    ???
  2073.  2Ch    DWORD    pointer to ??? (1 segment into process record???)
  2074.  30h 3    BYTEs    ???
  2075.  33h    WORD    Offset in common memory of main task with this context
  2076.  35h 7    BYTEs    ???
  2077.  3Ch    BYTE    internal mapping context number
  2078.  3Dh 14 BYTEs    ???
  2079.  4Bh    WORD    first DOS memory segment (first MCB segment+1)
  2080.  4Dh    BYTE    ??? (flag???)
  2081.  ---v2.53 (2.5x???)
  2082.  4Eh 12 BYTEs    ???
  2083.  ---v2.60
  2084.  4Eh    WORD    segment of script buffer (see below)
  2085.  50h  6 BYTEs    ???
  2086.  
  2087. Format of Internal Window Record (v2.31-2.60):
  2088. Offset    Size    Description
  2089.  00h    BYTE    internal window number???
  2090.  01h    BYTE    display page???
  2091.  02h    BYTE    video mode
  2092.  03h  3 BYTEs    ???
  2093.  06h    BYTE    logical window height
  2094.  07h    BYTE    logical window width
  2095.  08h    DWORD    pointer to text video buffer
  2096.  0Ch 116 BYTEs    ???
  2097.  
  2098. Format of process record (v2.31):
  2099. Offset    Size    Description
  2100. -470h 13 BYTEs    filename of ??? Script
  2101. -463h 1117 BYTEs ??? (script buffer???)
  2102.  -6h  6 BYTEs    ???
  2103.  00h    WORD    segment of parent PSP in process
  2104.  02h  5 BYTEs    ???
  2105.  07h    WORD    segment of current PSP in process
  2106.  09h    WORD    segment of first MCB in process
  2107.  0Bh 13 BYTEs    ???
  2108.  18h 1024 BYTEs process's interrupt vector table
  2109. 418h 376 BYTEs    ???
  2110. 590h        first MCB in process
  2111.  
  2112. Format of process record (v2.53-v2.60) (probably also 2.5x):
  2113. Offset    Size    Description
  2114.  00h 28 BYTEs    EXE header of last EXE, ??? if last program run was COM
  2115.  1Ch ??? BYTEs    overwritten with ASCIZ filename of last program run (EXE/COM)
  2116. 11Ch    WORD    segment of parent PSP in process
  2117. 11Eh  4 BYTEs    ???
  2118. 122h    WORD    segment of current PSP
  2119. 124h    WORD    segment of current PSP
  2120. 126h    WORD    segment of first MCB in process
  2121. 128h  4 BYTEs    ???
  2122. 12Ch    DWORD    pointer to first process instance data record in system memory
  2123. 130h    DWORD    pointer to last process instance data record in system memory
  2124.         (from INT 15/AX=DE27h, see below)
  2125. 134h  8 BYTEs    ???
  2126. 13Ch    WORD    size of current environment
  2127. 13Eh    WORD    segment of current environment
  2128. 140h    WORD    segment of current PSP
  2129. 142h    DWORD    entry point of current program
  2130. 146h 10 BYTEs    ???
  2131. ---v2.52 (v2.5x???)
  2132. 150h    BYTE    ???
  2133. 151h    WORD    segment of parent PSP in process
  2134. 153h    WORD    ???
  2135. 155h    WORD    ???
  2136. 157h    WORD    ???
  2137. 159h  4 BYTEs    ???
  2138. 15Dh    WORD    segment of current environment
  2139. 15Fh    WORD    segment of current PSP
  2140. 161h    WORD    segment of ???
  2141. 162h    WORD    ???
  2142. 164h  3 BYTEs    ???
  2143. 168h 1024 BYTEs process's interrupt vector table
  2144. 568h 120 BYTEs    ???
  2145. 5E0h        first MCB in process
  2146. ---v2.60
  2147. 150h    WORD    segment of parent PSP in process
  2148. 152h    WORD    ???
  2149. 154h    WORD    ???
  2150. 156h    WORD    ???
  2151. 158h  4 BYTEs    ???
  2152. 15Ch    WORD    segment of current environment
  2153. 15Eh    WORD    segment of current PSP
  2154. 160h    WORD    segment of ???
  2155. 162h    WORD    ???
  2156. 164h 1024 BYTEs process's interrupt vector table
  2157. 564h 108 BYTEs    ???
  2158. 5D0h        first MCB in process
  2159.  
  2160. Format of task or process instance data record (v2.5x???, v2.60):
  2161. Offset    Size    Description
  2162.  00h    DWORD    pointer to next record of same type or 00000000
  2163.  04h    DWORD    pointer to previous record of same type or 00000000
  2164.  08h    DWORD    pointer to source area of memory during restore state
  2165.  0Ch    WORD    number of bytes to save/restore
  2166.  0Eh    DWORD    pointer to destination area of memory during restore state
  2167.  12h    WORD    ??? (0)
  2168.  14h  N BYTEs    source memory buffer during restore state
  2169.  
  2170. Format of script buffer (v2.60):
  2171. Offset    Size    Description
  2172.  00h 13 BYTEs    ASCIZ Script filename
  2173.  0Dh 80 BYTEs    ???
  2174.  5Eh  N BYTEs    script records (see below)
  2175.  
  2176. Format of one script record (v2.60):
  2177. Offset    Size    Description
  2178.  00h    BYTE    signature 12h
  2179.  01h 18 BYTEs    blank-padded script name
  2180.  13h    BYTE    ASCII code of key attached to script or 0 if non-ASCII key
  2181.  14h    BYTE    scan code of key attached to script if non-ASCII, else 0
  2182.  15h    BYTE    ???
  2183.  16h    WORD    size of script in bytes
  2184.  18h  N    BYTEs    script (ASCII code of each keystroke; if 0, next byte is
  2185.         scan code of non-ASCII key)
  2186.  
  2187. Format of Common Memory Header (v2.31-2.60) (at beginning of commom mem seg):
  2188. Offset    Size    Description
  2189.  00h    WORD    offset of lowest used block
  2190.  02h    WORD    bytes of commom memory, including header
  2191.  04h    WORD    offset of first free block
  2192.  06h  N BYTEs    size depends of DV version, ??? (DVP buffer???)
  2193.  
  2194. Format of Free block header:
  2195. Offset    Size    Description
  2196.  00h    WORD    size of block in bytes including header
  2197.  02h    WORD    offset of next free block
  2198.  04h  N BYTEs    free block
  2199.  
  2200. Format of Used block header:
  2201. Offset    Size    Description
  2202.  00h    WORD    size of block in bytes including header
  2203.  02h  N BYTEs    used block
  2204. --------Q-151017-----------------------------
  2205. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  2206.     AX = 1017h
  2207. Return: pops up "Programming error" window in DV 2.x
  2208. --------Q-151018-----------------------------
  2209. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  2210.     AX = 1018h
  2211.     BH = column
  2212.     BL = row
  2213.     ES = segment of object handle for window below which to search
  2214.          0000h = start search with topmost window
  2215. Return: ES = segment of object handle for window which is visible at the
  2216.            indicated position, or covered by indicated window
  2217.        = 0000h no window
  2218. SeeAlso: AX=1023h,AX=1024h
  2219. --------Q-151019-----------------------------
  2220. INT 15 - TopView - "SOUND" - MAKE TONE
  2221.     AX = 1019h
  2222.     BX = frequency in Hertz (0000h = silence)
  2223.     CX = duration in clock ticks (18.2 ticks/sec)
  2224. Return: immediately, tone continues to completion
  2225. Notes:    if another tone is already playing, the new tone does not start until
  2226.       completion of the previous one.  Up to 32 tones may be queued before
  2227.       the process is blocked until a note completes.
  2228.     in DV 2.00, the lowest tone allowed is 20 Hz
  2229.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  2230.       notes are also cancelled
  2231. SeeAlso: INT 16/AH=73h
  2232. --------Q-15101A-----------------------------
  2233. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  2234.     AX = 101Ah
  2235. Return: stack switched
  2236. Notes:    this call may not be nested; a second call must be preceded by a call
  2237.       to "USTACK" (AX=1025h)
  2238.     while TopView requires many API calls to be executed while on the
  2239.       task's internal stack, DESQview allows those calls to be executed
  2240.       regardless of the current stack
  2241. SeeAlso: AX=1025h
  2242. --------Q-15101B-----------------------------
  2243. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  2244.     AX = 101Bh
  2245. Return: task-switching temporarily disabled
  2246. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  2247.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  2248.       will again be disabled)
  2249.     suspends the caller until DOS is free
  2250. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  2251. SeeAlso: INT 60/DI=0602h
  2252. --------Q-15101C-----------------------------
  2253. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  2254.     AX = 101Ch
  2255. Return: task-switching enabled
  2256. Note:    this API call may be made from within a hardware interrupt handler
  2257. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  2258. --------Q-15101D-----------------------------
  2259. INT 15 - TopView - "STOP" - STOP TASK
  2260.     AX = 101Dh
  2261.     ES = segment of object handle for task to be stopped
  2262.          (== handle of main window for that task)
  2263. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  2264. Note:    once a task has been stopped, additional "STOP"s are ignored
  2265. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  2266.       current task
  2267. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  2268. --------Q-15101E-----------------------------
  2269. INT 15 - TopView - "START" - START TASK
  2270.     AX = 101Eh
  2271.     ES = segment of object handle for task to be started
  2272.          (== handle of main window for that task)
  2273. Return: indicated task is started up again
  2274. Note:    once a task has been started, additional "START"s are ignored
  2275. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  2276. --------Q-15101F-----------------------------
  2277. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  2278.     AX = 101Fh
  2279.     BX = bit fields
  2280.          bits 0-12: number of characters to display
  2281.          bits 13,14: which mouse button may be pressed to remove window
  2282.              00 = either
  2283.              01 = left
  2284.              10 = right
  2285.              11 = either
  2286.          bit 15: beep if 1
  2287.     ES:DI -> text of message
  2288.     CH = width of error window (0 = default)
  2289.     CL = height of error window (0 = default)
  2290.     DX = segment of object handle
  2291. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  2292. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  2293. --------Q-151020-----------------------------
  2294. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  2295.     AX = 1020h
  2296. Return: pops up "Programming error" window in DV v2.00+
  2297. --------Q-151021-----------------------------
  2298. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  2299.     AX = 1021h
  2300.     BX = segment of object handle for task to interrupt (not self)
  2301.     DX:CX -> FAR routine to jump to next time task is run
  2302. Return: nothing
  2303. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  2304.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  2305.       needs to be preserved
  2306.     multiple PGMINTs to a single task are processed last-in first-out
  2307.     if the other task is in a DOS or DV API call, the interruption will
  2308.       occur on return from that call
  2309. --------Q-151022BX0000-----------------------
  2310. INT 15 - TopView - "GETVER" - GET VERSION
  2311.     AX = 1022h
  2312.     BX = 0000h
  2313. Return: BX nonzero, TopView or compatible loaded
  2314.     (BL = major version, BH = minor version)
  2315. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  2316. --------Q-151023-----------------------------
  2317. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  2318.     AX = 1023h
  2319.     BX = segment of object handle for parent window within which to
  2320.          position the window (0 = full screen)
  2321.     ES = segment of object handle for window to be positioned
  2322.     DL = bit flags
  2323.          bits 0,1: horizontal position
  2324.         00 = current
  2325.         01 = center
  2326.         10 = left
  2327.         11 = right
  2328.          bits 2,3: vertical position
  2329.         00 = current
  2330.         01 = center
  2331.         10 = top
  2332.         11 = bottom
  2333.          bit 4: don't redraw screen if set
  2334.          bits 5-7 not used
  2335.     CH = number of columns to offset from position specified by DL
  2336.     CL = number of rows to offset from position specified by DL
  2337. Return: nothing
  2338. --------Q-151024-----------------------------
  2339. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  2340.     AX = 1024h
  2341.     BX = segment of object handle for window
  2342.           (0 = use default)
  2343. Return: ES:DI -> virtual screen
  2344.     CX = size of virtual screen in bytes
  2345.     DL = 00h text screen
  2346.          01h graphics screen
  2347. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  2348. --------Q-151025-----------------------------
  2349. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  2350.     AX = 1025h
  2351. Return: stack switched back
  2352. Notes:    call only after having switched to internal stack with AX=101Ah
  2353.     while TopView requires many API calls to be executed while on the
  2354.       task's private stack, DESQview allows those calls to be executed
  2355.       regardless of the current stack
  2356. SeeAlso: AX=101Ah
  2357. --------Q-1510-------------------------------
  2358. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  2359.     AH = 10h
  2360.     AL = 26h thru 2Ah
  2361. Return: pops up "Programming error" window in DV 2.x
  2362. --------Q-15102B-----------------------------
  2363. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  2364.     AX = 102Bh
  2365.     BX = segment of object handle for task
  2366. Return: nothing
  2367. Note:    forces a task which is waiting on its objectq to continue by placing
  2368.       the handle for the task on the objectq
  2369. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  2370. --------Q-15102C-----------------------------
  2371. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  2372.     AX = 102Ch
  2373.     ES:DI -> contents of .PIF/.DVP file (see below)
  2374.     BX = size of .PIF/.DVP info
  2375. Return: BX = segment of object handle for new task
  2376.          0000h on error
  2377. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  2378.  
  2379. Format of .PIF/.DVP file:
  2380. Offset    Size    Description
  2381.  00h    BYTE    reserved (0)
  2382.  01h    BYTE    checksum of bytes 02h through 170h
  2383.  02h 30 BYTEs    blank-padded program title
  2384.  20h    WORD    maximum memory to allocate to partition in KB
  2385.  22h    WORD    minimum memory required in KB
  2386.  24h 64 BYTEs    ASCIZ program pathname
  2387.  64h    BYTE    default drive letter ('A',...)
  2388.  65h 64 BYTEs    ASCIZ default directory name
  2389.  A5h 64 BYTEs    ASCIZ program parameters
  2390.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  2391.  E6h    BYTE    number of text pages used
  2392.  E7h    BYTE    number of first interrupt to save
  2393.  E8h    BYTE    number of last interrupt to save
  2394.  E9h    BYTE    rows in virtual screen buffer
  2395.  EAh    BYTE    columns in virtual screen buffer
  2396.  EBh    BYTE    initial window position, row
  2397.  ECh    BYTE    initial window position, column
  2398.  EDh    WORD    system memory in KB
  2399.  EFh 64 BYTEs    ASCIZ shared program name
  2400. 12Fh 64 BYTEs    ASCIZ shared program data file
  2401. 16Fh    BYTE    flags1
  2402.         bit 7: writes text directly to screen
  2403.         bit 6: runs in foreground only (see also offset 184h)
  2404.         bit 5: uses math coprocessor
  2405.         bit 4: accesses system keyboard buffer directly
  2406.         bits 3-1: reserved (0)
  2407.         bit 0: swappable
  2408. 170h    BYTE    flags2
  2409.         bit 6: uses command-line parameters in field at A5h
  2410.         bit 5: swaps interrupt vectors
  2411. ---information unique to .DVP files---
  2412. 171h  2 BYTEs    keys to use on open menu
  2413. 173h    WORD    size of script buffer in bytes
  2414. 175h    WORD    automatically give up CPU after this many tests for keyboard
  2415.         input in one clock tick (default 0 = never)
  2416. 177h    BYTE    nonzero = "uses own colors"
  2417. 178h    BYTE    nonzero if application swappable
  2418. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  2419.         in actual .DVP files, frequently 01h
  2420. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  2421. 17Dh    BYTE    nonzero if copy-protect floppy is required
  2422. ---information unique to DESQview 2.0+---
  2423. 17Eh    BYTE    .DVP version number
  2424.         00h DESQview v1.2+
  2425.         01h DESQview v2.0+
  2426.         02h DESQview v2.2+
  2427. 17Fh    BYTE    reserved (0)
  2428. 180h    BYTE    initial number of rows in physical window
  2429. 181h    BYTE    initial number of columns in physical window
  2430. 182h    WORD    maximum expanded memory to allow, in KB
  2431. 184h    BYTE    flags3
  2432.         bit 7: automatically assign window position
  2433.         bit 5: maximum memory value has been specified
  2434.         bit 4: disallow "Close" command
  2435.         bit 3: foreground-only when doing graphics
  2436.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  2437.         bit 2: don't virtualize (see also offset 18Bh)
  2438.         bit 1: foreground-only during DOS calls
  2439.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  2440. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  2441.         bit 3: save/restore entire INT 09 handler state every taskswtch
  2442.         bit 2: take special precautions for programs which read the
  2443.             BIOS keyboard buffer directly from memory
  2444.         bit 1: never indicate keystroke available during scripts/xfers
  2445.         bit 0: only indicate keystroke available every sixth poll
  2446. 186h    BYTE    number of graphics pages used
  2447. 187h    WORD    extra system memory size
  2448. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  2449. ---information unique to DESQview 2.2+---
  2450. 18Ah    BYTE    serial port usage
  2451.         FFh uses all serial ports
  2452.         00h no serial ports
  2453.         01h only COM1
  2454.         02h only COM2
  2455. 18Bh    BYTE    flags4
  2456.         bit 7: automatically close application on exit if .COM or .EXE
  2457.             specified (see also offset 17Ch)
  2458.         bit 6: swappable if not using serial ports
  2459.         bit 5: start program with window hidden (v2.26+)
  2460.         bit 4: start program in background (v2.26+)
  2461.         bit 3: virtualize text (see also offset 184h)
  2462.         bit 2: virtualize graphics (see also offset 184h)
  2463.         bit 1: share CPU when foreground
  2464.         bit 0: share EGA when foreground and zoomed
  2465. 18Ch    BYTE    protection level for 386 machines
  2466. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  2467. ---information unique to DESQview/X 1.0---
  2468. 18Dh    BYTE    X flags
  2469.         bits 3-7: unused (0)
  2470.         bit 2: don't display wait message when opening window
  2471.         bit 1: don't display DOS window
  2472.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  2473.                (NEWPROC) inherit DOS client layer usage
  2474. 18Eh    BYTE    X keyboard behavior (0-3)
  2475. 18Fh    BYTE    font scaling
  2476.         00h fixed fonts
  2477.         01h scalable fonts
  2478. 190h 10 BYTEs    reserved (0)
  2479. 19Ah    WORD    length of data follownig XDVP signature
  2480. 19Ch  4 BYTEs    signature "XDVP"
  2481. 1A0h  N BYTEs    list of variable length records (see below)
  2482.  
  2483. Format of variable length record:
  2484. Offset    Size    Description
  2485.  00h    WORD    length of following record, 0000h if end of record list
  2486.  02h    BYTE    record type
  2487.         01h script filename, up to 64 characters
  2488.         02h command-line parameters (allows >64 characters on cmdline)
  2489.         03h environment inheritance
  2490.         04h environment string
  2491.         05h starting window position
  2492. ---types 01h,02h,04h---
  2493.  03h  N BYTEs    ASCII data
  2494. ---type 03h---
  2495.  03h    BYTE    inheritance
  2496.         00h do not inherit
  2497.         01h inherit environment
  2498. ---type 05h---
  2499.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  2500.         starting row, starting column, starting height, starting width
  2501. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  2502.       only the last instance of each type is used; multiple occurrences of
  2503.       type 04h are concatenated
  2504. --------Q-15102D-----------------------------
  2505. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  2506.     AX = 102Dh
  2507.     BL = subfunction
  2508.          00h determine whether using keyboard mouse
  2509.         Return: BL = 00h using real mouse
  2510.                  01h using keyboard mouse
  2511.          01h turn keyboard mouse on
  2512.          02h turn keyboard mouse off
  2513. --------Q-15102E-----------------------------
  2514. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  2515.     AX = 102Eh
  2516.     BX = number of bytes
  2517. Return: AX = status
  2518.         0000h successful
  2519.         ES:DI -> allocated system memory
  2520.         0001h failed
  2521.         ES:DI = 0000h:0000h
  2522. Note:    under DV 2.42, this call is identical to AX=1001h
  2523. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  2524.  
  2525. Format of system memory block header (one paragraph before memory block):
  2526. Offset    Size    Description
  2527.  00h    WORD    segment of next header or 0000h
  2528.  02h    WORD    segment of previous header or 0000h
  2529.  04h    WORD    size of block in paragraphs, including header
  2530.  06h    BYTE    availability flag (00h in use, 01h free)
  2531. --------Q-1511-------------------------------
  2532. INT 15 - TopView commands
  2533.     AH = 11h
  2534.     AL = various (except 17h)
  2535. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  2536.       see those below
  2537. SeeAlso: AH=DEh
  2538. --------T-1511-------------------------------
  2539. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  2540.     AH = 11h
  2541.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  2542.             request (max len = 127)
  2543. Return: AX = status (SYS_OK or SYS_ERROR)
  2544. SeeAlso: AH=0Ch"VMiX"
  2545. --------T-1511-------------------------------
  2546. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  2547.     AH = 11h
  2548. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  2549. SeeAlso: AH=12h"MultiDOS"
  2550. Index:    hotkeys;MultiDOS Plus
  2551. --------Q-151117BX0000-----------------------
  2552. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  2553.     AX = 1117h
  2554.     BX = 0000h    get current mapping context without setting
  2555.          nonzero    set new mapping context
  2556. Return: BX = mapping context in effect before call
  2557.     interrupts enabled
  2558. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  2559.     mapping contexts determine conventional-memory addressability; setting
  2560.       a mapping context ensures that the associated program and data areas
  2561.       are in memory for access.  Usable by drivers, TSRs and shared
  2562.       programs.
  2563.     caller need not be running under DESQview, but must ensure that the
  2564.       stack in use will not be mapped out by the call
  2565. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  2566. --------m-1511DE-----------------------------
  2567. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  2568.     AX = 11DEh
  2569. Return: CF clear if installed
  2570.         AX = segment at which QEXT.SYS is located
  2571. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  2572.       versions also implement the XMS standard
  2573. Note:    a private entry point may be found by searching the beginning of the
  2574.       returned segment for the signature string
  2575.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  2576.       prior to the signature contains the QEXT version number in BCD,
  2577.       and the word prior to that contains the offset within the QEXT
  2578.       code segment of the private entry point
  2579. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  2580.  
  2581. Call private entry point with:
  2582.     AH = 00h ???
  2583.     AH = nonzero ???
  2584. --------T-1512-------------------------------
  2585. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  2586.     AH = 12h
  2587.     STACK:    WORD    process ID
  2588. Return: AX = status (SYS_OK or SYS_ERROR)
  2589. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  2590. --------T-1512-------------------------------
  2591. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  2592.     AH = 12h
  2593. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  2594. SeeAlso: AH=11h"MultiDOS"
  2595. Index:    hotkeys;MultiDOS Plus
  2596. --------Q-1512--BH00-------------------------
  2597. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  2598.     AH = 12h
  2599.     BH = 00h
  2600.     BL = which handle to return
  2601.         00h handle in DWORD on top of stack
  2602.         01h current task's window handle
  2603.         02h given task's mailbox handle (task's handle on stack)
  2604.         03h current task's mailbox handle
  2605.         04h given task's keyboard handle (task's handle on stack)
  2606.         05h current task's keyboard object handle
  2607.         06h given task's OBJECTQ handle (task's handle on stack)
  2608.         07h current task's OBJECTQ handle
  2609.         08h      \
  2610.           thru > return 0000:0000 under DV < 2.26
  2611.         10h      /
  2612.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  2613.         0Dh (2.26+) task handle of owner (parent) of current task
  2614. Return: DWORD on top of stack is object handle
  2615. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  2616.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  2617.       window)
  2618. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  2619. --------Q-1512--BH01-------------------------
  2620. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  2621.     AH = 12h
  2622.     BH = 01h
  2623.     BL = object type to create
  2624.         00h (DV 2.0x only) handle is DWORD on top of stack
  2625.         01h (DV 2.0x only) use task's window handle
  2626.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  2627.         03h (DV 2.0x only) current task's mailbox
  2628.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  2629.         05h (DV 2.0x only) current task's keyboard object
  2630.         08h WINDOW class
  2631.         09h MAILBOX class
  2632.         0Ah KEYBOARD class
  2633.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  2634.         0Fh POINTER object
  2635.         10h PANEL object
  2636.     STACK: (if window object or WINDOW class)
  2637.            DWORD address to jump to (no new task if high word == 0)
  2638.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  2639.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  2640.            DWORD bytes system memory for input buffer for READ/READN
  2641.             (0 == none, -1 == default--same as logical window size)
  2642.            DWORD window size, columns
  2643.            DWORD window size, rows
  2644.            DWORD length of window title
  2645.            DWORD address of window title
  2646. Return: DWORD on top of stack is new object handle
  2647. Notes:    if a new task is created, it is started with
  2648.       AX = BX = SI = DI = BP = 0
  2649.       DX:CX = handle of parent task
  2650.       DS = ES = SS = segment of private stack (and new task's handle)
  2651.     new windows are orphans, inherit the colors/hidden status of the
  2652.       creating task's window, and are placed in the upper left hand corner
  2653.       of the screen but not automatically redrawn
  2654.     new keyboards are closed, and have all object bits cleared except for
  2655.       the hardware cursor bit
  2656. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  2657. --------Q-1512--BH02-------------------------
  2658. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  2659.     AH = 12h
  2660.     BH = 02h
  2661.     BL = object
  2662.         00h handle in DWORD on top of stack
  2663.         window: close window and free
  2664.         timer: free timer
  2665.         panel: free panel object
  2666.         pointer: free pointer
  2667.         01h task's window handle - kills task, never returns
  2668.         02h given task's mailbox (task's handle on top of stack)
  2669.         03h current task's mailbox
  2670.         04h given task's keyboard (task's handle on top of stack)
  2671.         05h current task's keyboard object
  2672. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  2673.       task windows also free any mailbox, objectq, and panel objects held
  2674.       by the task and any child tasks
  2675.     if the keyboard being freed is the default keyboard for a task, this
  2676.       call is equivalent to CLOSE
  2677.     panel and pointer objects are automatically closed if open
  2678. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  2679. --------Q-1512--BH03-------------------------
  2680. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  2681.     AH = 12h
  2682.     BH = 03h
  2683.     BL = object
  2684.         00h mailbox handle in DWORD on top of stack
  2685.         02h sender of last msg read from mailbox (task's handle on stack)
  2686.         03h sender of last msg read from current task's mailbox
  2687. Return: DWORD on stack is task handle of message sender
  2688. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  2689. --------Q-1512--BH03-------------------------
  2690. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  2691.     AH = 12h
  2692.     BH = 03h
  2693.     BL = window to be connected
  2694.         00h handle of window to be attached in DWORD on top of stack
  2695.         01h attach current task's main window
  2696.     STACK: DWORD handle of window to attach to or 00000000h to detach
  2697. Return: STACK popped
  2698. Notes:    when two windows are connected, both will move if the user moves either
  2699.     multiple windows may be attached to a single window, but each window
  2700.       may only be attached to one window at a time
  2701. SeeAlso: AH=12h/BH=83h
  2702. --------Q-1512--BX0300-----------------------
  2703. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  2704.     AH = 12h
  2705.     BX = 0300h
  2706.     STACK: DWORD handle of panel object
  2707. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  2708.            DWORD address of directory
  2709. Note:    a null string is returned if the object is not open
  2710. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  2711.  
  2712. Format of panel file:
  2713. Offset    Size    Description
  2714.  00h  2 BYTEs    C0h C3h
  2715.  02h    BYTE    number of panels in file
  2716.  03h    for each panel in file:
  2717.         8 BYTEs  blank-padded panel name
  2718.           DWORD  panel offset in file
  2719.           WORD   panel length
  2720.     data for panels (each consists of one or more window/query/manager
  2721.     streams)
  2722.         first byte of each panel must be 1Bh, fifth byte must be E5h
  2723. --------Q-1512--BH04-------------------------
  2724. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  2725.     AH = 12h
  2726.     BH = 04h
  2727.     BL = window to read from
  2728.         00h handle is DWORD on top of stack
  2729.         01h use calling task's default window
  2730.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2731.         0Dh (DV 2.26+) default window of parent task of current task
  2732. Return: STACK:    DWORD number of bytes read
  2733.         DWORD address of buffer
  2734. Notes:    reading starts at the current logical cursor position; the cursor is
  2735.       updated to point at the character following the last one read
  2736.     any translucent blanks (FFh) which are visible on screen are changed
  2737.       to the character which is seen through them
  2738.     the string produced by the read is placed in an input buffer which may
  2739.       be reused by the next READ or READN of a window
  2740.     window stream opcodes D8h and D9h determine whether the read returns
  2741.       characters or attributes
  2742. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  2743. --------Q-1512--BH04-------------------------
  2744. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  2745.     AH = 12h
  2746.     BH = 04h
  2747.     BL = object
  2748.         00h handle is DWORD on top of stack
  2749.         mailbox: wait for and get next message
  2750.         keyboard: wait for and get pointer to next input buffer
  2751.         pointer: wait for and get next message
  2752.         02h get next message from mailbox (task's handle on top of stack)
  2753.         03h get next message from current task's mailbox
  2754.         04h get the next input from keyboard (handle on top of stack)
  2755.         05h get the next input from task's default keyboard
  2756.         06h wait for input from any object in OBJECTQ (handle on stack)
  2757.         07h wait for input from any object in task's default OBJECTQ
  2758. Return: STACK: (if objectq) DWORD handle of object with input
  2759.            (otherwise)  DWORD number of bytes
  2760.                 DWORD address
  2761. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  2762.       containing the character code as returned by the BIOS; the BIOS scan
  2763.       code is available via the STATUS call if the character is zero
  2764.     for a keyboard in field mode, the input buffer format is determined
  2765.       by the field table header for the window the keyboard is attached to
  2766.     keyboard input buffers and mailbox message buffers may be invalidated
  2767.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  2768. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  2769.  
  2770. Format of pointer message:
  2771. Offset    Size    Description
  2772.  00h    WORD    row
  2773.  02h    WORD    column
  2774.  04h    BYTE    status
  2775.         bit 7: set when press/release mode active and button pressed
  2776.         bit 6: set when press/release mode active and button released
  2777.         bits 7-2: number of clicks-1 if multiple-click mode active
  2778.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  2779.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  2780. --------Q-1512--BX0400-----------------------
  2781. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  2782.     AH = 12h
  2783.     BX = 0400h
  2784.     STACK: DWORD timer's handle
  2785. Return: after timer expires
  2786.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  2787. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  2788. --------Q-1512--BX0400-----------------------
  2789. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  2790.     AH = 12h
  2791.     BX = 0400h
  2792.     STACK: DWORD handle of panel object
  2793.            DWORD window's handle (or 0 for current task's window)
  2794.            DWORD length of panel name
  2795.            DWORD pointer to panel name
  2796. Return: STACK: DWORD handle of window which was used
  2797.            DWORD handle of keyboard or 0
  2798. Notes:    status of APPLY may be checked with STATUS message
  2799.     panel MUST have the following format
  2800.       first byte must be 1Bh (i.e. must start with a stream)
  2801.       first opcode in stream must be E5h
  2802.         single byte arg of opcode is interpreted thus:
  2803.           bits 7,6    11 means create new window
  2804.             10 means create new field table for existing window
  2805.             01 means use existing window and field table
  2806.           bit 5 if set, panel contains a field table
  2807.             (creates a new keyboard and puts it in field mode)
  2808.           bit 4 if set, panel contains input fields
  2809.           bit 3 if set, panel contains select fields but no input fields
  2810.     if the panel contains input or select fields, a keyboard handle is
  2811.       returned; either the window's current open keyboard or a
  2812.       newly-created keyboard object.  The caller should read that keyboard
  2813.       to obtain input from the panel.
  2814. SeeAlso: AH=12h/BH=84h
  2815. --------Q-1512--BH05------------------------
  2816. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  2817.     AH = 12h
  2818.     BH = 05h
  2819.     BL = object
  2820.         00h handle is DWORD on top of stack
  2821.         timer: start timer to end at a specified time
  2822.         keyboard: add input buffer to queue
  2823.         pointer: move pointer icon to specified position
  2824.         02h send message by value/status=0 to mbox (task's handle on stack)
  2825.         03h send message by value/status=0 to current task's mailbox
  2826.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  2827.         05h add input buffer to task's default KEYBOARD queue
  2828.         06h add an object to OBJECTQ (handle on top of stack)
  2829.         07h add an object to task's default OBJECTQ
  2830.     STACK: (if mailbox)  DWORD length
  2831.                  DWORD address
  2832.            (if keyboard) DWORD status (scan code in keystroke mode)
  2833.                  DWORD length (should be 1 in keystroke mode)
  2834.                  DWORD address
  2835.            (if objectq)  DWORD handle of object to add
  2836.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  2837.                    only accurate to 1/18 sec)
  2838.            (if pointer)  DWORD column relative to origin of window
  2839.                  DWORD row relative to origin of window
  2840. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  2841.     the data and status written to a keyboard object must match the format
  2842.       returned by the keyboard object in the current mode
  2843.     the pointer position is scaled according to the current scaling factors
  2844. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  2845. --------Q-1512--BH05-------------------------
  2846. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  2847.     AH = 12h
  2848.     BH = 05h
  2849.     BL = window to write to
  2850.         00h DWORD on top of stack is window handle
  2851.         01h write string to task's default window
  2852.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2853.         0Dh (DV 2.26+) default window of parent of current task
  2854.     STACK: DWORD object handle if handle passed on stack
  2855.            DWORD total length of string (high word == 0)
  2856.            DWORD address of string to display
  2857. Return: indicated actions performed
  2858.     a. non-control characters are displayed (opcodes DEh and DFh control
  2859.        whether the attributes are left or changed to the current attrib)
  2860.     b. CR/LF/BS/Tab cause the usual cursor movement
  2861.     c. ESC starts a data structure with additional commands if following
  2862.        byte is less than 20h; otherwise, it is written to the window
  2863.     STACK:    DWORD handle of new window if window stream opcode E6h
  2864.         else nothing
  2865. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  2866.  
  2867. Data Structure:
  2868.     MAGIC  DB  1Bh
  2869.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  2870.     LENGTH DW  ?   ; length of remainder in bytes
  2871.     var-length fields follow, each an OPCODE followed by
  2872.          zero or more args
  2873.  
  2874. MODE 00h (set or display values) "WINDOW STREAM"
  2875.     Opcodes:args
  2876.     00h  display 20h blanks with the default attribute
  2877.     01h-1Fh display OPCODE blanks with the default attribute
  2878.     20h  display char with default attribute 20h times
  2879.          BYTE char to repeat
  2880.     21h-3Fh display char with default attribute OPCODE-20h times
  2881.          BYTE char to repeat
  2882.     40h  display 20h blanks with specified attribute
  2883.          BYTE attribute of blanks
  2884.     41h-5Fh display OPCODE-40h blanks with specified attribute
  2885.          BYTE attribute of blanks
  2886.     60h  display next 20h characters
  2887.          20h BYTEs characters to display
  2888.     61h-7Fh display next OPCODE-60h characters
  2889.          N BYTEs characters to display
  2890.     80h-87h     display N blanks with default attribute
  2891.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  2892.               [000h means 800h]
  2893.     88h-8Fh display N copies of the character
  2894.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  2895.               [000h means 800h]
  2896.          BYTE character to repeat
  2897.     90h-97h     display N blanks with specified attribute
  2898.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  2899.               [000h means 800h]
  2900.          BYTE attribute
  2901.     98h-9FH     display string at logical cursor pos
  2902.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  2903.               [000h means 800h]
  2904.          N BYTEs string to display
  2905.     A0h  set logical cursor row
  2906.          BYTE row number (0 is top)
  2907.     A1h  set logical cursor column
  2908.          BYTE column number (0 is leftmost)
  2909.     A2h  set top edge of scrolling region
  2910.          BYTE row
  2911.     A3h  set left edge of scrolling region
  2912.          BYTE column
  2913.     A4h  set row of physical window position
  2914.          BYTE line
  2915.     A5h  set column of physical window position
  2916.          BYTE column
  2917.     A6h  set height of physical window
  2918.          BYTE #rows
  2919.     A7h  set width of physical window
  2920.          BYTE #columns
  2921.     A8h  set viewport row
  2922.          BYTE row
  2923.     A9h  set viewport column
  2924.          BYTE column
  2925.     AAh  set virtual screen height [contents of window unpredictable after]
  2926.          BYTE rows
  2927.     ABh  set virtual screen width [contents of window unpredictable after]
  2928.          BYTE columns
  2929.     ACh-AEh     unused
  2930.     AFh  set compatible/preferred video modes
  2931.          BYTE compatibility/preference mask
  2932.         bit 7    compatible with monochrome
  2933.         bit 6    compatible with color text, EGA/VGA graphics
  2934.         bit 5    compatible with medium-resolution CGA graphics
  2935.         bit 4    compatible with high-resolution CGA graphics
  2936.         bit 3    prefer monochrome
  2937.         bit 2    prefer color text, EGA/VGA graphics
  2938.         bit 1    prefer medium-resolution CGA graphics
  2939.         bit 0    prefer high-resolution CGA graphics
  2940.     B0h  move logical cursor down
  2941.          BYTE #rows (signed, negative values move up)
  2942.             [if #rows=0 and hardware cursor owner, update hw crsr]
  2943.     B1h  move logical cursor right
  2944.          BYTE #cols (signed, negative values move left)
  2945.             [if #cols=0 and hardware cursor owner, update hw crsr]
  2946.     B2h  shift top edge of scrolling region
  2947.          BYTE #rows (signed)
  2948.     B3h  shift left edge of scrolling region
  2949.          BYTE #cols (signed)
  2950.     B4h  shift physical window down
  2951.          BYTE #lines (signed)
  2952.     B5h  shift physical window right
  2953.          BYTE #columns (signed)
  2954.     B6h  expand physical window vertically
  2955.          BYTE #lines (signed)
  2956.     B7h  expand physical window horizontally
  2957.          BYTE #columns (signed)
  2958.     B8h  adjust viewport row
  2959.          BYTE #rows (signed)
  2960.     B9h  adjust viewport column
  2961.          BYTE #columns (signed)
  2962.     BAh  adjust virtual screen height [contents of window unpredict after]
  2963.          BYTE #rows to increase (signed)
  2964.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  2965.          BYTE #cols to increase (signed)
  2966.     BCh-BFh     reserved (currently unused)
  2967.     C0h  set logical cursor position
  2968.          BYTE row number (0 is top border)
  2969.          BYTE column number (0 is left border)
  2970.     C1h  set top left corner of scrolling region
  2971.          BYTE row
  2972.          BYTE column
  2973.     C2h  set physical window pos
  2974.          BYTE upper left row (no top border if 0)
  2975.          BYTE upper left column (no left border if 0)
  2976.     C3h  set current window size
  2977.          BYTE #rows
  2978.          BYTE #cols
  2979.     C4h  set upper left corner of viewport (portion of virtual screen
  2980.          displayed in window)
  2981.          BYTE row
  2982.          BYTE column
  2983.     C5h  set size of virtual screen [contents unpredictable afterwards]
  2984.          BYTE #rows
  2985.          BYTE #cols
  2986.     C6h  unused
  2987.     C7h  unused
  2988.     C8h  set logical cursor relative to current position
  2989.          BYTE number of rows to move down (signed)
  2990.          BYTE number of columns to move right (signed)
  2991.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  2992.     C9h  shift top left corner of scrolling region
  2993.          BYTE #rows (signed)
  2994.          BYTE #cols (signed)
  2995.     CAh  set window pos relative to current position
  2996.          BYTE number of rows to shift down (signed)
  2997.          BYTE number of columns to shift right (signed)
  2998.     CBh  set window size relative to current size
  2999.          BYTE number of rows to expand (signed)
  3000.          BYTE number of cols to expand (signed)
  3001.     CCh  shift viewport relative to current position
  3002.          BYTE rows to shift (signed)
  3003.          BYTE cols to shift (signed)
  3004.     CDh  resize virtual screen
  3005.          BYTE #rows to expand (signed)
  3006.          BYTE #cols to expand (signed)
  3007.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  3008.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  3009.     D0h  allow window frame to extend beyond screen
  3010.     D1h  always display a complete frame, even if window extends beyond
  3011.          edge of screen
  3012.     D2h  allow DV to change logical colors on video mode switch (default)
  3013.     D3h  application changes logical attributes
  3014.     D4h  window is visible [must redraw to actually make visible]
  3015.     D5h  window is hidden [must redraw to actually remove]
  3016.     D6h  window has frame (default)
  3017.     D7h  window unframed [must redraw to actually remove frame]
  3018.     D8h  READ/READN will read characters from window (default)
  3019.     D9h  READ/READN will read attributes from window
  3020.     DAh  use logical attributes, which may be remapped
  3021.         attributes
  3022.            1 normal text
  3023.            2 highlighted normal text
  3024.            3 help text
  3025.            4 highlighted help text
  3026.            5 error message
  3027.            6 highlighted error message
  3028.            7 emphasized text
  3029.            8 marked text
  3030.            9-16 are reverse video versions of 1-8
  3031.     DBh  use physical attributes for characters
  3032.     DCh  enable special actions for control characters (default)
  3033.     DDh  disable special control char handling, all chars displayable by
  3034.          BIOS TTY call
  3035.     DEh  write both character and attribute (default)
  3036.     DFh  write character only, leave attribute untouched
  3037.     E0h  repeat following commands through E1h opcode
  3038.          BYTE number of times to repeat (00h means 256 times)
  3039.     E1h  end of commands to repeat, start repeating them
  3040.     E2h  set current output color
  3041.          BYTE color
  3042.     E3h  clear virtual screen from scroll origin to end using current color
  3043.     E4h  redraw window
  3044.     E5h  select menu style
  3045.          BYTE style (normally 18h)
  3046.         bits 5,4 = 01 use two-letter menu entries for remainder of
  3047.           this stream
  3048.     E5h  (panel file only)
  3049.          BYTE modifier
  3050.         bits 7,6 = 11 panel stream creates new window
  3051.              = 10 panel defines new field table for existing window
  3052.              = 01 panel stream uses existing window & field table
  3053.         bit 5 = 1 stream contains a field table (create kyboard object)
  3054.         bit 4 = 1 stream defines input fields (create keyboard object)
  3055.         bit 3 = 1 stream defines select fields but not input fields
  3056.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  3057.         bit 1 reserved
  3058.         bit 0 reserved
  3059.     E6h  create new window and perform rest of manipulations in new window
  3060.          BYTE number of rows
  3061.          BYTE number of columns
  3062.          Return: DWORD object handle of new window returned on stack at end
  3063.          Note: the window is created with a physical size of 0x0 at the
  3064.              same position as the window to which this stream was sent
  3065.     E7h  no operation
  3066.     E8h  scroll area up (top left corner defined by opcode C1h)
  3067.          BYTE height
  3068.          BYTE width
  3069.     E9h  scroll area down (top left corner defined by opcode C1h)
  3070.          BYTE height
  3071.          BYTE width
  3072.     EAh  scroll area left (top left corner defined by opcode C1h)
  3073.          BYTE height
  3074.          BYTE width
  3075.     EBh  scroll area right (top left corner defined by opcode C1h)
  3076.          BYTE height
  3077.          BYTE width
  3078.     ECh  set logical attributes for window contents
  3079.          BYTE video modes command applies to
  3080.         bit 7    monochrome
  3081.         bit 6    color text, EGA/VGA graphics
  3082.         bit 5    medium-resolution CGA graphics
  3083.         bit 4    high-resolution CGA graphics
  3084.          BYTE which attributes to set
  3085.         bit 7  if set, copy single following byte to indicated attribs
  3086.         bits 4-6  # of first attribute to change - 1
  3087.         bits 0-3  # of consecutive attributes to change
  3088.          N BYTEs new attributes
  3089.     EDh  set logical attributes for window frame
  3090.          BYTE video modes command applies to (see opcode ECh)
  3091.          BYTE which attributes to set
  3092.         bit 7  if set, copy single following byte to indicated attrs
  3093.         bits 4-6  # of first attribute to change - 1
  3094.         bits 0-3  # of consecutive attributes to change
  3095.          N BYTEs new attributes
  3096.           attributes
  3097.                1 = top left corner
  3098.                2 = top right corner
  3099.                3 = bottom left corner
  3100.                4 = bottom right corner
  3101.                5 = top edge
  3102.                6 = bottom edge
  3103.                7 = left edge
  3104.                8 = right edge
  3105.     EEh  set characters for window frame
  3106.          BYTE video modes command applies to (see opcode ECh)
  3107.          BYTE which characters to set
  3108.         bit 7  if set, copy single following byte to indicated chars
  3109.         bits 4-6  # of first char to change - 1
  3110.         bits 0-3  # of consecutive chars to change
  3111.          N BYTEs new chars (same relative position as attributes above)
  3112.     EFh  set window name
  3113.          BYTE length of name (should be in range 0 to logical screen width)
  3114.          N BYTEs name
  3115.     F0h  clear input field to blanks
  3116.          BYTE field number
  3117.     F1h  fill input field with character
  3118.          BYTE field number
  3119.          BYTE char
  3120.     F2h  set color of input field
  3121.          BYTE field number (1-N)
  3122.          BYTE attribute
  3123.     F3h  set initial contents of input field
  3124.          BYTE field number (1-N)
  3125.          N BYTEs enough chars to exactly fill field as defined by op FFh
  3126.     F4h  position cursor to start of specific input field
  3127.          BYTE field number (1-N)
  3128.     F5h  change field table entry
  3129.          BYTE field number
  3130.          7-8 BYTEs field table entry (see opcode FFh below)
  3131.     F6h  set field type
  3132.          BYTE field number
  3133.          BYTE type
  3134.             00h inactive
  3135.             40h output field
  3136.             80h input field
  3137.             C0h deselected field
  3138.             C2h selected field
  3139.     F7h  "broadcast write"    write data to fields with program output bit
  3140.         set in field table entry, in field number order
  3141.          N BYTEs (total length of all program output fields)
  3142.     F8h  scroll field up a line
  3143.          BYTE field number
  3144.     F9h  scroll field down a line
  3145.          BYTE field number
  3146.     FAh  scroll field left
  3147.          BYTE field number
  3148.     FBh  scroll field right
  3149.          BYTE field number
  3150.     FCh  set field table header
  3151.          BYTE number of fields (must be <= existing number of fields)
  3152.          BYTE screen behavior bits
  3153.         bit 7  reserved
  3154.         bit 6  set if menu items may be selected via keyboard
  3155.         bit 5  set if left mouse button in "status" mode (press
  3156.             anywhere in window immediately returns control to app)
  3157.         bit 4  set if right mouse button in "status" mode
  3158.         bit 3  if set, select fields return contents or blanks rather
  3159.             than 'Y' or 'N'
  3160.         bit 2  if set, modified bits reset on return to application
  3161.         bits 0,1 = 00 no data returned on read of keyboard
  3162.                01 data returned as array of chars containing
  3163.                 all fields packed together, with no field
  3164.                 numbers
  3165.                10 data returned as numbered variable-length
  3166.                 records for all fields
  3167.                11 data returned as numbered variable-length
  3168.                 records for the fields which were modified
  3169.          BYTE current input field (updated by DESQview)
  3170.          BYTE current select field (updated by DESQview)
  3171.          BYTE attribute for select fields when they are pointed at
  3172.          BYTE attribute for select fields which have been selected
  3173.     FDh  reset modified bit for all fields
  3174.     FEh  reset selected and modified bits for all fields
  3175.     FFh  set up input fields
  3176.          6 BYTEs table header (see opcode FCh above)
  3177.          the field table entries, one for each field
  3178.          BYTE start row       \
  3179.          BYTE start column  \ if menu selection and start is to
  3180.          BYTE end row        / right or below end, select from kbd only
  3181.          BYTE end column   /
  3182.          BYTE field type
  3183.             bits 7,6 = 00 inactive (non-entry) field
  3184.                    01 echos keystrokes input to make menu selection
  3185.                    10 fill-in field
  3186.                    11 select field
  3187.             bit 5  field can be filled by broadcast write (F7h opcode)
  3188.             bit 4  reserved
  3189.             bit 3  reserved
  3190.             bit 2  reserved
  3191.             bit 1  set if field selected
  3192.             bit 0  set if field modified
  3193.          BYTE modifier
  3194.               if type is fill-in, then bit flags to determine behavior
  3195.               bit 7     if set, automatically enter CR when field full
  3196.               bit 6     move to next field when current field is full
  3197.               bit 5     if set, enter text from right end (for numbers)
  3198.               bit 4     if set, force input to uppercase
  3199.               bit 3     if set, clear old contents on first keystroke
  3200.               bit 2     if set, input returned when cursor moves out
  3201.                  of modified field ("validate",API level 2.02+)
  3202.               bit 1     reserved
  3203.               bit 0     reserved
  3204.               if select field, first key to press to activate
  3205.               00h if have to point-&-click or is an extended-ASCII
  3206.                   keystroke (only if two-key menus enabled)
  3207.          BYTE (select field only) normal color of field
  3208.          BYTE second key for select field.  This byte is present iff
  3209.               two-letter menu entries selected with opcode E5h, and
  3210.               in that case is present regardless of field type
  3211.          Note: DESQview uses and updates the actual copy of the information
  3212.            which is contained in the stream.  Thus this info must remain
  3213.            intact until after the data entry is complete.
  3214.  
  3215. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  3216.     A0h return logical cursor row in next byte
  3217.     A1h return logical cursor column in next byte
  3218.     A2h return top row of scrolling region in next byte
  3219.     A3h return left column of scrolling region in next byte
  3220.     A4h return row of physical window origin in next byte
  3221.     A5h return column of physical window origin in next byte
  3222.     A6h return height of physcial window in next byte
  3223.     A7h return width of physical window in next byte
  3224.     A8h return row of viewport origin in next byte
  3225.     A9h return column of viewport origin in next byte
  3226.     AAh return height of virtual screen in next byte
  3227.     ABh return width of virtual screen in next byte
  3228.     AFh return current video mode in next byte
  3229.     C0h return current logical cursor position in next two bytes
  3230.     C1h return top left corner of scrolling region in next two bytes
  3231.     C2h return current window position in next two bytes
  3232.     C3h return current window size in next two bytes
  3233.     C4h return current viewport origin in next two bytes
  3234.     C5h return current virtual screen size in next two bytes
  3235.     D0h \ overwritten with D0h if frames may fall off screen edge
  3236.     D1h /               D1h if frames always displayed entirely
  3237.     D2h \ overwritten with D2h if DESQview controls color palette
  3238.     D3h /               D3h if application changes color palette
  3239.     D4h \ overwritten with D4h if window visible
  3240.     D5h /               D5h if window hidden
  3241.     D6h \ overwritten with D6h if window has frame
  3242.     D7h /               D7h if window unframed
  3243.     D8h \ overwritten with D8h if reading characters from window
  3244.     D9h /               D9h if reading attributes from window
  3245.     DAh \ overwritten with DAh if using logical attributes
  3246.     DBh /               DBh if using physical attributes
  3247.     DCh \ overwritten with DCh if TTY control char interpretation on
  3248.     DDh /               DDh if TTY control char interpretation off
  3249.     DEh \ overwritten with DEh if writing both characters and attributes
  3250.     DFh /               DFh if leaving attributes untouched
  3251.     E2h return current color in next byte
  3252.     ECh get logical attributes for window contents
  3253.         BYTE execute call if currently in specified video mode
  3254.         bit 7    monochrome
  3255.         bit 6    color text, EGA/VGA graphics
  3256.         bit 5    medium-resolution CGA graphics
  3257.         bit 4    high-resolution CGA graphics
  3258.         BYTE which attributes to get
  3259.         bit 7 unused???
  3260.         bits 4-6 first attribute to get - 1
  3261.         bits 0-3 # consecutive attributes
  3262.         N BYTEs buffer to hold attributes
  3263.     EDh get logical attributes for window frame
  3264.         BYTE execute call if currently in video mode (see opcode ECh)
  3265.         BYTE which attributes to get
  3266.         bit 7 unused???
  3267.         bits 4-6 first attribute to get - 1
  3268.         bits 0-3 # consecutive attributes
  3269.         N BYTEs buffer to hold attributes
  3270.     EEh get characters for window frame
  3271.         BYTE execute call if currently in video mode (see opcode ECh)
  3272.         BYTE which attributes to get
  3273.         bit 7 unused???
  3274.         bits 4-6 first char to get - 1
  3275.         bits 0-3 # consecutive chars
  3276.         N BYTEs buffer to hold chars
  3277.     EFh return first N characters of current window name
  3278.         BYTE    max length of returned name
  3279.         N BYTEs buffer to hold window name
  3280.     F3h return contents of specified field
  3281.         BYTE field number
  3282.         N BYTEs buffer to hold field contents (size exactly equal to field
  3283.             size)
  3284.     F5h get field table entry
  3285.         BYTE field number
  3286.         7-8 BYTEs buffer to hold field table entry
  3287.            Notes: DV < 2.26 always returns 7 bytes
  3288.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  3289.             table is using 8-byte entries and eighth byte after
  3290.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  3291.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  3292.             depending on the field table entry size
  3293.     F6h get type of a field
  3294.         BYTE field number
  3295.         BYTE type
  3296.     FCh get field table header
  3297.         6 BYTEs buffer to store header
  3298.  
  3299. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  3300.     00h allow window to be moved horizontally
  3301.     01h allow window to be moved vertically
  3302.     02h allow window to change width
  3303.     03h allow window to change height
  3304.     04h allow window to be scrolled horizontally
  3305.     05h allow window to be scrolled vertically
  3306.     06h allow "Close Window" menu selection for application
  3307.     07h allow "Hide Window" menu selection for application
  3308.     08h allow application to be suspended ("Rearrange/Freeze")
  3309.     0Eh allow "Scissors" menu
  3310.     10h allow DESQview main menu to be popped up
  3311.     11h allow "Switch Windows" menu
  3312.     12h allow "Open Window" menu
  3313.     13h allow "Quit" menu selection
  3314.     20h-33h opposite of 00h-13h, disallow specified action
  3315.     40h notify if horizontal position of window changes
  3316.     41h notify if vertical position of window changes
  3317.     42h notify if width of window changes
  3318.     43h notify if height of window changes
  3319.     44h notify if window scrolled horizontally
  3320.     45h notify if window scrolled vertically
  3321.     46h notify if window is closed--program has to clean up and exit itself
  3322.     47h notify if window is hidden
  3323.     48h notify if "?" on main menu selected
  3324.     49h notify if pointer message sent to window
  3325.     4Ah notify if window is placed in foreground
  3326.     4Bh notify if window is placed in background
  3327.     4Ch notify if video mode changes
  3328.     4Dh notify if "Scissors" menu "Cut" option selected
  3329.     4Eh notify if "Scissors" menu "Copy" option selected
  3330.     4Fh notify if "Scissors" menu "Paste" option selected
  3331.     50h notify if DESQview main menu about to pop up
  3332.     51h notify if DESQview main menu popped down
  3333.     60h-71h     opposite of 40h-51h: don't notify on specified event
  3334.     84h attach window to parent task's window (both move together)
  3335.     85h detach window from parent task's window (may move independently)
  3336.     86h disable background operation for application
  3337.     87h enable running in background
  3338.     88h set minimum size of physical window
  3339.         BYTE rows
  3340.         BYTE columns
  3341.     89h set maximum size of physical window
  3342.         BYTE rows
  3343.         BYTE cols
  3344.     8Ah set primary asynchronous notification routine
  3345.         DWORD address of routine, 0000h:0000h means none (see also below)
  3346.     8Bh set async notification parameter
  3347.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  3348.     ACh (DV2.2+) perform regular select field attribute processing
  3349.     ADh (DV2.2+) protect attributes in selected field from being lost
  3350.     AEh make window default notify window for owning app (API level 2.00+)
  3351.     AFh set selected field marker character
  3352.         BYTE character to display at left edge of selected fields
  3353.     BCh set standard field processing mode
  3354.     BDh set alternate field processing mode (enables cursor pad for menus)
  3355.     BEh disables changing reverse logical attributes with ECh opcode
  3356.     BFh enables changing reverse logical attributes with ECh opcode
  3357.     C0h make current window topmost in system
  3358.     C1h force current process into foreground
  3359.     C2h make current window topmost in process
  3360.     C3h position mouse pointer relative to origin of current field
  3361.         BYTE rows below upper left corner of field
  3362.         BYTE columns to right of upper left corner of field
  3363.     C4h position mouse pointer relative to origin of given field
  3364.         BYTE field number
  3365.         BYTE rows below upper left corner of field
  3366.         BYTE columns to right of upper left corner of field
  3367.     C5h orphan current window (also hides it)
  3368.         Note: must be last in stream; all subsequent commands ignored
  3369.     C6h show all windows for this process
  3370.     C7h hide all windows for this process
  3371.     C8h suspend process and hide all its windows
  3372.     C9h force current process into background
  3373.     CAh make current window bottom-most in process
  3374.     CBh cancel current window manager operation, remove DV menu, give
  3375.         control to topmost application
  3376.     CCh orphan window and give it to the system for use as paste data
  3377.     CEh reorder windows
  3378.         DWORD pointer to null-terminated list of words
  3379.           each word is segment of object handle for a window
  3380.     FFh no operation
  3381.  
  3382. MODES 14h to 1Fh "USER STREAMS"
  3383.     normally NOPs, but may be defined by SETESC message to invoke FAR
  3384.     routines, one for each mode number
  3385.       on entry to handler,
  3386.         DS:SI -> first byte of actual stream (not header)
  3387.         CX = #bytes in stream
  3388.         ES:DI = window's handle
  3389.  
  3390. Asynchronous notification routine defined by manager stream 8Ah called with:
  3391.     ES:DI = handle of window
  3392.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  3393.        mailbox contains message indicating event
  3394.           Opcode
  3395.            40h  horizontal movement
  3396.            DWORD object handle of window
  3397.            BYTE     new row
  3398.            BYTE     new col
  3399.            41h  vertical movement
  3400.            DWORD object handle of window
  3401.            BYTE     new row
  3402.            BYTE     new col
  3403.            42h  horizontal size change
  3404.            DWORD object handle of window
  3405.            BYTE     new rows
  3406.            BYTE     new cols
  3407.            43h  vertical size change
  3408.            DWORD object handle of window
  3409.            BYTE     new rows
  3410.            BYTE     new cols
  3411.            44h  scrolled horizontally
  3412.            DWORD object handle of window
  3413.            BYTE     mouse row within window
  3414.            BYTE     mouse column within window
  3415.            BYTE     field mouse is on, 0 if none
  3416.            BYTE     amount moved: >0 right, <0 left, 0 done
  3417.            45h  scrolled vertically
  3418.            DWORD object hande of window
  3419.            BYTE     mouse row within window
  3420.            BYTE     mouse column within window
  3421.            BYTE     field mouse is on, 0 if none
  3422.            BYTE     amount moved: >0 down, <0 up, 0 done
  3423.            46h  window close request
  3424.            DWORD object handle of window
  3425.            BYTE     mouse pointer row
  3426.            BYTE     mouse pointer column
  3427.            BYTE     field mouse is on, 0 if none
  3428.            47h  application's windows hidden
  3429.            48h  Help for Program selected
  3430.            DWORD object handle of window
  3431.            BYTE     mouse pointer row
  3432.            BYTE     mouse pointer column
  3433.            BYTE     field mouse is on, 0 if none
  3434.            49h  pointer message sent to window
  3435.            DWORD pointer handle which received message
  3436.            4Ah  switched to window from another ("raise")
  3437.            4Bh  switched away from the window ("lower")
  3438.            4Ch  video mode changed
  3439.            BYTE new BIOS video mode
  3440.            4Dh  Scissors/cUt selected
  3441.            DWORD object handle of window
  3442.            BYTE     row of upper left corner
  3443.            BYTE     column of upper left corner
  3444.            BYTE     field number ul corner is in, 0=none
  3445.            DWORD handle of orphaned window created with
  3446.              copy of data from specified region
  3447.            BYTE     height of region
  3448.            BYTE     width of region
  3449.            4Eh  Scissors/Copy selected
  3450.            DWORD object handle of window
  3451.            BYTE     row of upper left corner
  3452.            BYTE     column of upper left corner
  3453.            BYTE     field number ul corner is in, 0=none
  3454.            DWORD handle of orphaned window created with
  3455.              copy of data from specified region
  3456.            BYTE     height of region
  3457.            BYTE     width of region
  3458.            4Fh  Scissors/Paste selected
  3459.            DWORD object handle of window
  3460.            BYTE     row of upper left corner
  3461.            BYTE     column of upper left corner
  3462.            BYTE     field number ul corner is in, 0=none
  3463.            DWORD handle of orphaned window with data
  3464.            BYTE     height of region
  3465.            BYTE     width of region
  3466.             Note: orphaned data window should be adopted or freed
  3467.                 when done
  3468.            50h  main menu about to pop up
  3469.            51h  main menu popped down
  3470. Return: all registers unchanged
  3471. --------Q-1512--BH06-------------------------
  3472. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  3473.     AH = 12h
  3474.     BH = 06h
  3475.     BL = object
  3476.         00h object handle in DWORD on top of stack
  3477.         mailbox, keyboard, pointer, or timer
  3478.         (DV 2.50+) window
  3479.         01h (DV 2.50+) current task's window
  3480.         04h given task's keyboard (task's handle on top of stack)
  3481.         05h current task's default keyboard
  3482.     STACK: DWORD new priority of object in task's OBJECTQ
  3483.             (new priority of task if window handle)
  3484. Notes:    initially all objects have the same default value.  Should only make
  3485.       relative adjustments to this default value.
  3486.     when changing priorities, all objects already on the objectq are
  3487.       reordered
  3488.     for window handles, only the non-blocked task(s) with the highest
  3489.       priority receive CPU time under DESQview 2.50-2.52; the default
  3490.       priority is 0Ah
  3491. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  3492. --------Q-1512--BH07-------------------------
  3493. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  3494.     AH = 12h
  3495.     BH = 07h
  3496.     BL = object
  3497.         00h object handle in DWORD on top of stack
  3498.         mailbox, keyboard, pointer, or timer
  3499.         (DV 2.50+) window
  3500.         01h (DV 2.50+) current task's window
  3501.         04h given task's keyboard (task's handle on top of stack)
  3502.         05h current task's default keyboard
  3503. Return: STACK: DWORD object priority
  3504. Note:    initially all objects have the same default value.  Should only make
  3505.       relative adjustments to this default value.
  3506. SeeAlso: AH=12h/BH=06h
  3507. --------Q-1512--BH08-------------------------
  3508. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  3509.     AH = 12h
  3510.     BH = 08h
  3511.     BL = object
  3512.         00h handle in DWORD on top of stack
  3513.         window: total character positions in window
  3514.         timer: elapsed time since timer started
  3515.         pointer: number of messages queued to pointer object
  3516.         panel: number of panels in panel file
  3517.         keyboard: number of input buffers queued
  3518.         01h total chars in current task's default window
  3519.         02h number of messages in task's mailbox (task's handle on stack)
  3520.         03h number of messages in current task's mailbox
  3521.         04h number of input buffers queued in task's kbd (handle on stack)
  3522.         05h number of input buffers queued for current task's default kbd
  3523.         06h number of objects queued in OBJECTQ (task's handle on stack)
  3524.         07h number of objects queued in current task's OBJECTQ
  3525.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  3526.         0Dh (DV 2.26+) total chars in parent task's window
  3527. Return: DWORD on top of stack is result
  3528. Note:    for panel objects, a count of zero is returned if no panel file is open
  3529.       for the object
  3530. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  3531. --------Q-1512--BH09-------------------------
  3532. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  3533.     AH = 12h
  3534.     BH = 09h
  3535.     BL = object
  3536.         00h handle in DWORD on top of stack
  3537.         window: get chars/line
  3538.         timer: get 1/100 seconds remaining before timer expires
  3539.         mailbox: (DV/X) get number of bytes queued to mailbox
  3540.         01h get number of chars/line in current task's default window
  3541.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  3542.         0Dh (DV 2.26+) get chars/line in parent task's window
  3543. Return: DWORD on top of stack is length
  3544. SeeAlso: AH=12h/BH=08h
  3545. --------Q-1512--BH0A-------------------------
  3546. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  3547.     AH = 12h
  3548.     BH = 0Ah
  3549.     BL = window to write to
  3550.         00h window handle is DWORD on top of stack
  3551.         01h current task's default window
  3552.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3553.         0Dh (DV 2.26+) default window of parent of current task
  3554.     STACK:    DWORD count of attributes
  3555.         DWORD address of attribute string
  3556.         DWORD count of characters
  3557.         DWORD address of character string
  3558. Notes:    if one string is longer than the other, the shorter one will be reused
  3559.       until the longer one is exhausted
  3560.     the cursor is left just after the last character written
  3561. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  3562. --------Q-1512--BH0A-------------------------
  3563. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  3564.     AH = 12h
  3565.     BH = 0Ah
  3566.     BL = mailbox to write to
  3567.         00h handle is DWORD on top of stack
  3568.         02h default mailbox of task whose handle is on top of stack
  3569.         03h current task's default mailbox
  3570.     STACK:    DWORD    status (low byte)
  3571.         DWORD    length of message
  3572.         DWORD    address of message
  3573. Notes:    the message is copied into either system or common memory
  3574.     insufficient memory normally causes the process to be aborted; under
  3575.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  3576. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  3577. --------Q-1512--BH0A-------------------------
  3578. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  3579.     AH = 12h
  3580.     BH = 0Ah
  3581.     BL = object
  3582.         00h handle is DWORD on top of stack
  3583.         timer: start timer for specified interval
  3584.         pointer: set control flags
  3585.         keyboard: set control flags
  3586.         04h set control flags on KEYBOARD object (handle on top of stack)
  3587.         05h set control flags on task's default KEYBOARD object
  3588.     STACK: (if timer)   DWORD duration in 1/100 seconds
  3589.            (otherwise)  DWORD bits to set
  3590. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  3591.  
  3592. For keyboard objects, the bits have the following significance:
  3593.     bit 15 reserved, can't be set
  3594.     bit 14 unused
  3595.     bit 13 reserved, can't be set
  3596.     bit 12-6 unused
  3597.     bit 5  (DV 2.2+) exclusive input
  3598.     bit 4  filter all keys (used with handler established by SETESC)
  3599.         if 0, only keys that would normally be displayed are filtered
  3600.     bit 3  program continues executing while input in progress
  3601.     bit 2  insert mode active for field mode
  3602.     bit 1  hardware cursor displayed when task is hardware cursor owner
  3603.         must be set if keyboard in field mode and field table includes
  3604.         input fields
  3605.     bit 0  keyboard is in field mode rather than keystroke mode
  3606.  
  3607. For pointer objects, the bits have the following significance:
  3608.     bit 15 reserved, can't be set
  3609.     bit 14-8 unused
  3610.     bit 7  mouse pointer is hidden while in window
  3611.     bit 6  get messages even if window not topmost
  3612.     bit 5  get messages even if window not foreground
  3613.     bit 4  multiple clicks separated by less than 1/3 second are counted
  3614.         and returned in a single message
  3615.     bit 3  pointer position is relative to screen origin, not window origin
  3616.     bit 2  send message on button release as well as button press
  3617.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  3618.         pointer leaves the window
  3619.     bit 0  send message only on button activity, not movement
  3620.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  3621. --------Q-1512--BH0B-------------------------
  3622. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  3623.     AH = 12h
  3624.     BH = 0Bh
  3625.     BL = window to write attributes to
  3626.         00h handle is DWORD on top of stack
  3627.         01h current task's default window
  3628.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3629.         0Dh (DV 2.26+) default window of parent of current task
  3630.     STACK:    DWORD number of attributes to write
  3631.         DWORD address of attributes
  3632. Note:    the attributes are written starting at the current cursor position; the
  3633.       cursor is left just after the last position written
  3634. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  3635. --------Q-1512--BH0B-------------------------
  3636. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  3637.     AH = 12h
  3638.     BH = 0Bh
  3639.     BL = mailbox to write to
  3640.         00h handle is DWORD on top of stack
  3641.         02h default mailbox of task whose handle is on top of stack
  3642.         03h current task's default mailbox
  3643.     STACK:    DWORD    status (low byte)
  3644.         DWORD    length of message
  3645.         DWORD    address of message
  3646. Notes:    only a pointer to the message is stored, but the write may still fail
  3647.       due to insufficient memory
  3648.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  3649. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  3650. --------Q-1512--BH0B-------------------------
  3651. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  3652.     AH = 12h
  3653.     BH = 0Bh
  3654.     BL = OBJECTQ from which to remove all copies of a particular object
  3655.         06h OBJECTQ of task whose handle is on top of stack
  3656.         07h task's default OBJECTQ
  3657.     STACK:    DWORD    handle of object to remove
  3658. Note:    should be sent whenever an object is erased or closed
  3659. --------Q-1512--BH0B-------------------------
  3660. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  3661.     AH = 12h
  3662.     BH = 0Bh
  3663.     BL = object
  3664.         00h handle is DWORD on top of stack
  3665.         pointer: reset control flags
  3666.         keyboard: reset control flags
  3667.         04h clear control flags on KEYBOARD object (handle on top of stack)
  3668.         05h clear control flags on task's default KEYBOARD object
  3669.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  3670. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  3671. --------Q-1512--BH0C-------------------------
  3672. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  3673.     AH = 12h
  3674.     BH = 0Ch
  3675.     BL = object
  3676.         00h handle is DWORD on top of stack
  3677.         window:      fill with given character from scroll origin to end
  3678.         keyboard: attach to a window
  3679.         timer:      open
  3680.         pointer:  start taking input for window
  3681.         panel:      associate with a panel file
  3682.         01h fill task's default window with given char from scrl org to end
  3683.         02h open given task's mailbox for input (task's handle on stack)
  3684.         03h open current task's mailbox
  3685.         04h attach a KEYBOARD to a window (handle on top of stack)
  3686.         05h attach task's default KEYBOARD to a window
  3687.         06h open a task's OBJECTQ (task's handle on top of stack)
  3688.         07h open current task's OBJECTQ
  3689.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  3690.         0Dh (DV 2.26+) fill default window of parent of current task
  3691.      STACK: (if window)   DWORD character to fill with
  3692.         (if keyboard) DWORD handle of window to attach to
  3693.         (if pointer)  DWORD handle of window to attach to
  3694.         (if panel)    DWORD length of filename or resident panel
  3695.                   DWORD address of filename or resident panel
  3696.         (otherwise)   nothing
  3697. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  3698.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  3699.       the panel file
  3700.     result code of open may be retrieved with STATUS message
  3701.     logical cursor is left at scroll origin after filling window
  3702.     the task opening a mailbox becomes its owner, and the only task allowed
  3703.       to read the mailbox
  3704.     messages are only sent to a pointer object when the mouse is positioned
  3705.       in the window to which the pointer has been attached
  3706.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  3707.       messages automatically open the timer
  3708. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  3709. --------Q-1512--BH0D-------------------------
  3710. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  3711.     AH = 12h
  3712.     BH = 0Dh
  3713.     BL = object
  3714.         00h handle is DWORD on top of stack
  3715.         timer:      close
  3716.         keyboard: detach from window and discard queued input
  3717.         pointer:  stop taking input
  3718.         panel:      close
  3719.         mailbox:  close, unlock, and discard any pending messages
  3720.         02h close given task's mailbox (task's handle on top of stack)
  3721.         03h close task's default mailbox
  3722.         04h close KEYBOARD object (handle on top of stack)
  3723.         05h close task's default KEYBOARD
  3724.         06h close given task's OBJECTQ (task's handle on top of stack)
  3725.         07h close current task's OBJECTQ
  3726. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  3727.       ERASE message (AH=12h/BH=0Eh)
  3728.     when a panel object is closed, the panel file and any panels currently
  3729.       in use are freed; window and keyboard objects created by APPLY are
  3730.       not affected, but field mode input ceases
  3731.     open but idle timer objects consume a small amount of CPU time
  3732. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  3733. --------Q-1512--BH0E-------------------------
  3734. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  3735.     AH = 12h
  3736.     BH = 0Eh
  3737.     BL = object
  3738.         00h handle is DWORD on top of stack
  3739.         window:      clear from scroll origin to end of window
  3740.         keyboard: discard input
  3741.         timer:      cancel current interval
  3742.         pointer:  discard all pending messages
  3743.         mailbox:  discard all pending messages
  3744.         01h clear task's default window from scroll origin to end
  3745.         02h discard all queued messages in mailbox (handle on top of stack)
  3746.         03h discard all queued messages in current task's default mailbox
  3747.         04h discard all input queued to KEYBOARD (handle on top of stack)
  3748.         05h discard all input queued to task's default KEYBOARD
  3749.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  3750.         07h remove all objects from current task's OBJECTQ
  3751.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  3752.         0Dh (DV 2.26+) clear default window of parent of current task
  3753. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  3754. SeeAlso: AH=12h/BH=02h
  3755. --------Q-1512--BH0F-------------------------
  3756. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  3757.     AH = 12h
  3758.     BH = 0Fh
  3759.     BL = object
  3760.         00h handle is DWORD on top of stack
  3761.         timer:     is it running?
  3762.         pointer: return status of last message
  3763.         panel:     verify success of last OPEN or APPLY
  3764.         02h return status of last msg READ from mailbox (handle on stack)
  3765.         03h return status of last msg READ from task's default mailbox
  3766.         04h get stat of last msg from task's KEYBOARD (task handle on stk)
  3767.         05h get status of last msg from task's default KEYBOARD
  3768.         06h return whether OBJECTQ is open or not (handle on top of stack)
  3769.         07h return whether task's default OBJECTQ is open or not
  3770. Return: DWORD on top of stack is status
  3771. Notes:    if object is a panel object, the status indicates the error code:
  3772.       00h successful
  3773.       14h panel name not in panel directory
  3774.       15h not enough memory to apply panel
  3775.       16h invalid panel format
  3776.       17h panel file already open
  3777.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  3778.       95h not enough memory to open panel file     > that the panel was
  3779.       98h null panel file name            /  not opened
  3780.     if object is a timer, the status is:
  3781.       00000000h open but not running
  3782.       40000000h open and running
  3783.       80000000h closed
  3784.     if object is an OBJECTQ, the status is:
  3785.       00000000h open
  3786.       80000000h closed
  3787.     if object is a keyboard in keystroke mode, the status is the extended
  3788.       character code (scan code) of the last keystroke
  3789.     if object is a keyboard in field mode, the status indicates the reason
  3790.       for the last return from the field manager
  3791.       00h Enter key pressed
  3792.       01h Button 1 or keystroke selection
  3793.       02h Button 2
  3794.       03h validation
  3795.       04h auto Enter on field
  3796.       1Bh Escape pressed
  3797.       46h ^Break pressed
  3798.       other: extended code for key terminating input
  3799.     the status of mailbox messages sent by the window manager is always 80h
  3800.     the status of a pointer message is the same as the status field in the
  3801.       message
  3802. SeeAlso: AH=12h/BH=04h"READ"
  3803. --------Q-1512--BH10-------------------------
  3804. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  3805.     AH = 12h
  3806.     BH = 10h
  3807.     BL = object
  3808.         00h handle is DWORD on top of stack
  3809.         window: return TRUE if logical cursor past end of window
  3810.         mailbox: ???
  3811.         01h returns TRUE if logical cursor past end of task's def window
  3812.         02h return ??? for task's mailbox (task's handle on top of stack)
  3813.         03h return ??? for current task's mailbox
  3814.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  3815.         0Dh (DV 2.26+) check log cursor of window of parent task
  3816. Return: DWORD on top of stack is status
  3817. --------Q-1512--BH11-------------------------
  3818. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  3819.     AH = 12h
  3820.     BH = 11h
  3821.     BL = window for which to move cursor
  3822.         00h window's handle is DWORD on top of stack
  3823.         01h task's default window
  3824.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3825.         0Dh (DV 2.26+) default window of parent of current task
  3826.     STACK: DWORD column
  3827.            DWORD row
  3828. --------Q-1512--BH11-------------------------
  3829. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  3830.     AH = 12h
  3831.     BH = 11h
  3832.     BL = mailbox to name
  3833.         00h DWORD on top of stack is mailbox handle
  3834.         02h use given task's mailbox (task's handle on top of stack)
  3835.         03h use current task's default mailbox
  3836.     STACK: DWORD length of name
  3837.            DWORD address of name
  3838. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  3839. --------Q-1512--BX1100-----------------------
  3840. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  3841.     AH = 12h
  3842.     BX = 1100h
  3843.     STACK: DWORD object handle for pointer object
  3844.            DWORD number of colums to scale pointer position to
  3845.            DWORD number of rows to scale pointer position to
  3846. SeeAlso: AH=12h/BX=1200h
  3847. --------Q-1512--BH12-------------------------
  3848. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  3849.     AH = 12h
  3850.     BH = 12h
  3851.     BL = window to read from
  3852.         00h handle is DWORD on top of stack
  3853.         01h read next N chars or attributes on task's default window
  3854.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  3855.         0Dh (DV 2.26+) read default window of parent of current task
  3856.     STACK: DWORD count
  3857. Return: STACK: DWORD number of bytes actually read
  3858.            DWORD address of buffer containing data
  3859. Notes:    reading starts at the current logical cursor position; the cursor is
  3860.       updated to point at the character following the last one read
  3861.     any translucent blanks (FFh) which are visible on screen are changed
  3862.       to the character which is seen through them
  3863.     the string produced by the read is placed in an input buffer which may
  3864.       be reused by the next READ or READN of a window
  3865.     window stream opcodes D8h and D9h determine whether the read returns
  3866.       characters or attributes
  3867. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  3868. --------Q-1512--BH12-------------------------
  3869. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  3870.     AH = 12h
  3871.     BH = 12h
  3872.     BL = mailbox for which to retrieve name
  3873.         00h DWORD on top of stack is mailbox handle
  3874.         02h use given task's mailbox (task's handle on top of stack)
  3875.         03h use current task's default mailbox
  3876.     STACK: DWORD length of buffer for name
  3877.            DWORD pointer to buffer
  3878. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  3879. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  3880. Note:    the returned name is not NUL-terminated
  3881. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  3882. --------Q-1512--BX1200-----------------------
  3883. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  3884.     AH = 12h
  3885.     BX = 1200h
  3886.     STACK: DWORD object handle for pointer
  3887. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  3888.            DWORD pointer pos scaled as if window were this many rows high
  3889. SeeAlso: AH=12h/BX=1100h
  3890. --------Q-1512--BH13-------------------------
  3891. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  3892.     AH = 12h
  3893.     BH = 13h
  3894.     BL = window object
  3895.         00h DWORD on top of stack is handle for window to redraw
  3896.         01h redraw task's default window
  3897.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  3898.         0Dh (DV 2.26+) redraw default window of parent of current task
  3899. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  3900. --------Q-1512--BH13-------------------------
  3901. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  3902.     AH = 12h
  3903.     BH = 13h
  3904.     BL = mailbox from which to read
  3905.         00h DWORD on top of stack is mailbox handle
  3906.         02h use given task's mailbox (task's handle on top of stack)
  3907.         03h use current task's default mailbox
  3908.     STACK: DWORD size of buffer in bytes
  3909.            DWORD pointer to buffer
  3910. Return: STACK: DWORD number of bytes read
  3911. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  3912. Notes:    this call blocks if no input is available, but will return less than
  3913.       the requested number of bytes if some (but insufficient) data is
  3914.       available
  3915.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  3916.       4 or 5 set, as common memory may be exhausted by that call when
  3917.       attempting to read the next message
  3918. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  3919. --------Q-1512--BX1300-----------------------
  3920. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  3921.     AH = 12h
  3922.     BX = 1300h
  3923.     STACK: DWORD object handle for pointer
  3924.            DWORD character to use for pointer
  3925. --------Q-1512--BH14-------------------------
  3926. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  3927.     AH = 12h
  3928.     BH = 14h
  3929.     BL = message modifier
  3930.         00h handle is DWORD on top of stack
  3931.         01h define user stream
  3932.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  3933.         05h intercept keystrokes from task's default KEYBOARD to a window
  3934.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  3935.                  DWORD address of FAR user stream handler
  3936.            (if keyboard) DWORD address of FAR filter function
  3937.  
  3938. The keyboard filter function is called when the keyboard is in field mode.  On
  3939. entry,
  3940.     AL = character
  3941.     AH = 00h or extended ASCII code if AL = 00h
  3942.     BL = field number
  3943.     CH = cursor column
  3944.     CL = cursor row
  3945.     DL = field type modifier (sixth item in field table entry)
  3946.     DH = seventh item in field table entry
  3947.     ES:SI = window's handle
  3948.     DS:DI -> field table entry for field containing the cursor
  3949. The filter function should return
  3950.     AH = 00h use keystroke
  3951.          01h ignore keystroke
  3952.          FFh beep and ignore keystroke
  3953. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  3954. --------Q-1512--BH14-------------------------
  3955. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  3956.     AH = 12h
  3957.     BH = 14h
  3958.     BL = object
  3959.         00h mailbox handle is DWORD on top of stack
  3960.         02h use given task's mailbox (task's handle on top of stack)
  3961.         03h use current task's default mailbox
  3962. Note:    release exclusive access by sending CLOSE message to mailbox
  3963.     access may be requested multiple times, and requires multiple CLOSEs
  3964. SeeAlso: AH=12h/BH=0Dh
  3965. --------Q-1512--BH15-------------------------
  3966. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  3967.     AH = 12h
  3968.     BH = 15h
  3969.     BL = object
  3970.         00h DWORD on top of stack
  3971.         mailbox, keyboard, or pointer only
  3972.         02h mailbox for task whose handle is on top of stack
  3973.         03h mailbox for current task
  3974.         04h keyboard for task whose handle is on top of stack
  3975.         05h keyboard for current task
  3976.     STACK: DWORD flags
  3977.         if mailbox:
  3978.             bit 0: all mail messages in common memory
  3979.             bit 1: allow write even if closed
  3980.             bit 2: don't erase messages when mailbox closed
  3981.             bit 4: (DV/X) append messages with like status and
  3982.                 sender (stream-oriented mail)
  3983.             bit 5: (DV/X) store mail in expanded memory (pool
  3984.                 grows as needed)
  3985.             bit 6: (DV/X) make mailbox into non-owned mailbox
  3986.         if keyboard:
  3987.             bit 5: exclusive input when keyboard in use for input
  3988. Return: nothing
  3989. Notes:    only available if the API level has been set to at least 2.20
  3990.     equivalent to performing SUBFROM and ADDTO calls on the object
  3991.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  3992.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  3993. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  3994. --------Q-1512--BH16-------------------------
  3995. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  3996.     AH = 12h
  3997.     BH = 16h
  3998.     BL = object
  3999.         00h DWORD on top of stack
  4000.         mailbox, keyboard, or pointer only
  4001.         02h mailbox for task whose handle is on top of stack
  4002.         03h mailbox for current task
  4003.         04h keyboard for task whose handle is on top of stack
  4004.         05h keyboard for current task
  4005. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  4006. Notes:    only available if the API level has been set to at least 2.20
  4007.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  4008.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  4009. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  4010. --------Q-1512--BH17-------------------------
  4011. INT 15 - DESQview v2.42-2.52 - BUG
  4012.     AH = 12h
  4013.     BH = 17h
  4014.     BL = object
  4015.         00h DWORD on top of stack
  4016.         mailbox, keyboard, or pointer only
  4017.         02h mailbox for task whose handle is on top of stack
  4018.         03h mailbox for current task
  4019.         04h keyboard for task whose handle is on top of stack
  4020.         05h keyboard for current task
  4021. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  4022.       keyboards, and pointers, but causes a random branch
  4023.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  4024. --------Q-1512--BH80-------------------------
  4025. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  4026.     AH = 12h
  4027.     BH = 80h
  4028. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  4029.       not pop up a "Programming Error" window, instead returning an error
  4030.       code in AL:
  4031.         00h no error
  4032.         01h invalid values
  4033.         02h alias invalid
  4034.         03h handle valid but wrong type
  4035.         04h invalid handle
  4036. SeeAlso: AH=12h/BH=00h
  4037. --------Q-1512--BH81-------------------------
  4038. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  4039.     AH = 12h
  4040.     BH = 81h
  4041. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  4042.       not pop up a "Programming Error" window, instead returning an error
  4043.       code in AL (see AH=12h/BH=80h)
  4044. SeeAlso: AH=12h/BH=01h
  4045. --------Q-1512--BH82-------------------------
  4046. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  4047.     AH = 12h
  4048.     BH = 82h
  4049. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  4050.       not pop up a "Programming Error" window, instead returning an error
  4051.       code in AL (see AH=12h/BH=80h)
  4052. SeeAlso: AH=12h/BH=02h
  4053. --------Q-1512--BH83-------------------------
  4054. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  4055.     AH = 12h
  4056.     BH = 83h
  4057. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  4058.       not pop up a "Programming Error" window, instead returning an error
  4059.       code in AL (see AH=12h/BH=80h)
  4060. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  4061. --------Q-1512--BH84-------------------------
  4062. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  4063.     AH = 12h
  4064.     BH = 84h
  4065. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  4066.       not pop up a "Programming Error" window, instead returning an error
  4067.       code in AL (see AH=12h/BH=80h)
  4068. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  4069. --------Q-1512--BH85-------------------------
  4070. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  4071.     AH = 12h
  4072.     BH = 85h
  4073. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  4074.       not pop up a "Programming Error" window, instead returning an error
  4075.       code in AL (see AH=12h/BH=80h)
  4076. SeeAlso: AH=12h/BH=05h
  4077. --------Q-1512--BH86-------------------------
  4078. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  4079.     AH = 12h
  4080.     BH = 86h
  4081. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  4082.       not pop up a "Programming Error" window, instead returning an error
  4083.       code in AL (see AH=12h/BH=80h)
  4084. SeeAlso: AH=12h/BH=06h
  4085. --------Q-1512--BH87-------------------------
  4086. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  4087.     AH = 12h
  4088.     BH = 87h
  4089. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  4090.       not pop up a "Programming Error" window, instead returning an error
  4091.       code in AL (see AH=12h/BH=80h)
  4092. SeeAlso: AH=12h/BH=07h
  4093. --------Q-1512--BH88-------------------------
  4094. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  4095.     AH = 12h
  4096.     BH = 88h
  4097. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  4098.       not pop up a "Programming Error" window, instead returning an error
  4099.       code in AL (see AH=12h/BH=80h)
  4100. SeeAlso: AH=12h/BH=08h
  4101. --------Q-1512--BH89-------------------------
  4102. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  4103.     AH = 12h
  4104.     BH = 89h
  4105. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  4106.       not pop up a "Programming Error" window, instead returning an error
  4107.       code in AL (see AH=12h/BH=80h)
  4108. SeeAlso: AH=12h/BH=09h
  4109. --------Q-1512--BH8A-------------------------
  4110. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  4111.     AH = 12h
  4112.     BH = 8Ah
  4113. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  4114.       not pop up a "Programming Error" window, instead returning an error
  4115.       code in AL (see AH=12h/BH=80h)
  4116. SeeAlso: AH=12h/BH=0Ah
  4117. --------Q-1512--BH8B-------------------------
  4118. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  4119.     AH = 12h
  4120.     BH = 8Bh
  4121. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  4122.       not pop up a "Programming Error" window, instead returning an error
  4123.       code in AL (see AH=12h/BH=80h)
  4124. SeeAlso: AH=12h/BH=0Bh
  4125. --------Q-1512--BH8C-------------------------
  4126. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  4127.     AH = 12h
  4128.     BH = 8Ch
  4129. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  4130.       not pop up a "Programming Error" window, instead returning an error
  4131.       code in AL (see AH=12h/BH=80h)
  4132. SeeAlso: AH=12h/BH=0Ch
  4133. --------Q-1512--BH8D-------------------------
  4134. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  4135.     AH = 12h
  4136.     BH = 8Dh
  4137. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  4138.       not pop up a "Programming Error" window, instead returning an error
  4139.       code in AL (see AH=12h/BH=80h)
  4140. SeeAlso: AH=12h/BH=0Dh
  4141. --------Q-1512--BH8E-------------------------
  4142. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  4143.     AH = 12h
  4144.     BH = 8Eh
  4145. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  4146.       not pop up a "Programming Error" window, instead returning an error
  4147.       code in AL (see AH=12h/BH=80h)
  4148. SeeAlso: AH=12h/BH=0Eh
  4149. --------Q-1512--BH8F-------------------------
  4150. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  4151.     AH = 12h
  4152.     BH = 8Fh
  4153. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  4154.       not pop up a "Programming Error" window, instead returning an error
  4155.       code in AL (see AH=12h/BH=80h)
  4156. SeeAlso: AH=12h/BH=0Fh
  4157. --------Q-1512--BH90-------------------------
  4158. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  4159.     AH = 12h
  4160.     BH = 90h
  4161. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  4162.       not pop up a "Programming Error" window, instead returning an error
  4163.       code in AL (see AH=12h/BH=80h)
  4164. SeeAlso: AH=12h/BH=10h
  4165. --------Q-1512--BH91-------------------------
  4166. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  4167.     AH = 12h
  4168.     BH = 91h
  4169. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  4170.       not pop up a "Programming Error" window, instead returning an error
  4171.       code in AL (see AH=12h/BH=80h)
  4172. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  4173. --------Q-1512--BH92-------------------------
  4174. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  4175.     AH = 12h
  4176.     BH = 92h
  4177. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  4178.       not pop up a "Programming Error" window, instead returning an error
  4179.       code in AL (see AH=12h/BH=80h)
  4180. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  4181. --------Q-1512--BH93-------------------------
  4182. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  4183.     AH = 12h
  4184.     BH = 93h
  4185. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  4186.       not pop up a "Programming Error" window, instead returning an error
  4187.       code in AL (see AH=12h/BH=80h)
  4188. SeeAlso: AH=12h/BH=13h
  4189. --------Q-1512--BH94-------------------------
  4190. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  4191.     AH = 12h
  4192.     BH = 94h
  4193. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  4194.       not pop up a "Programming Error" window, instead returning an error
  4195.       code in AL (see AH=12h/BH=80h)
  4196. SeeAlso: AH=12h/BH=14h
  4197. --------Q-1512--BH95-------------------------
  4198. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  4199.     AH = 12h
  4200.     BH = 95h
  4201. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  4202.       not pop up a "Programming Error" window, instead returning an error
  4203.       code in AL (see AH=12h/BH=80h)
  4204. SeeAlso: AH=12h/BH=15h
  4205. --------Q-1512--BH96-------------------------
  4206. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  4207.     AH = 12h
  4208.     BH = 96h
  4209. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  4210.       not pop up a "Programming Error" window, instead returning an error
  4211.       code in AL (see AH=12h/BH=80h)
  4212. SeeAlso: AH=12h/BH=16h
  4213. --------T-1513-------------------------------
  4214. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  4215.     AH = 13h
  4216.     STACK:    WORD    process ID
  4217. Return: AX = status (SYS_OK or SYS_ERROR)
  4218. SeeAlso: AH=12h"VMiX"
  4219. --------T-1513-------------------------------
  4220. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  4221.     AH = 13h
  4222. Return: BX:AX -> task control block (see below)
  4223. SeeAlso: AH=15h"MultiDOS"
  4224.  
  4225. Format of MultiDOS Plus v4.0 task control block:
  4226. Offset    Size    Description
  4227.  00h    DWORD    pointer to next TCB
  4228.  04h  8 BYTEs    ASCIZ task name
  4229.  0Ch  2 BYTEs    ???
  4230.  0Eh    WORD    task PSP segment
  4231.  10h    WORD    abort/suspend flags
  4232.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  4233.  14h    WORD    priority level (0000h-FFFEh)
  4234.  16h    WORD    time slice counter
  4235.  18h  2 BYTEs    ???
  4236.  1Ah    WORD    suspend timer value
  4237.  1Ch    WORD    stack segment
  4238.  1Eh    WORD    stack pointer
  4239.  20h    WORD    display type
  4240.  22h    WORD    display memory
  4241.  24h  2 BYTEs    ???
  4242.  26h    WORD    termination count
  4243.  28h    WORD    equipment flag for BIO10 driver
  4244.  2Ah    BYTE    background CRT mode
  4245.  2Bh    WORD    screen width in columns
  4246.  2Dh    WORD    screen size in bytes
  4247.  2Fh    WORD    segment of physical screen memory
  4248.  31h 16 BYTEs    eight cursor positions
  4249.  41h    WORD    current cursor shape
  4250.  43h    BYTE    active display page
  4251.  44h    WORD    CRT controller I/O port base
  4252.  46h  2 BYTEs    ???
  4253.  48h    WORD    foreground task flag
  4254.  4Ah  6 BYTEs    ???
  4255.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  4256.  52h    DWORD    old INT 22
  4257.  56h    DWORD    old INT 23
  4258.  5Ah    DWORD    old INT 24
  4259.  5Eh    WORD    top of memory for task
  4260.  60h  4 BYTEs    ???
  4261.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  4262.  66h    WORD    DTA offset
  4263.  68h  4 BYTEs    ???
  4264.  6Ch    BYTE    current ANSI.SYS attribute
  4265.  6Dh    BYTE    current ANSI.SYS column
  4266.  6Eh    BYTE    current ANSI.SYS row
  4267.  6Fh    BYTE    current ANSI.SYS display state
  4268.  70h    BYTE    maximum ANSI.SYS columns
  4269.  71h    BYTE    current ANSI.SYS page
  4270.  72h    WORD    saved ANSI.SYS cursor position
  4271.  74h    BYTE    ANSI.SYS parameter buffer index
  4272.  75h    BYTE    current ANSI.SYS screen mode
  4273.  76h    BYTE    ANSI.SYS wrap flag
  4274.  77h  6 BYTEs    ANSI.SYS parameter buffer
  4275.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  4276.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  4277.  85h  3 BYTEs    ???
  4278.  88h 16 BYTEs    request header for DOS driver calls
  4279.  98h 14 BYTEs    ???
  4280.  A6h    WORD    segment of EMS map if EMS task
  4281.  A8h    WORD    flag: task makes EMS calls
  4282.  AAh    WORD    EMS handle for task
  4283.  ACh    WORD    keyboard shift state
  4284.  AEh 12 BYTEs    ???
  4285.  BAh    WORD    TCB of parent if child task
  4286.  BCh    WORD    termination code
  4287.  BEh    WORD    COM port number
  4288.  C0h  4 BYTEs    ???
  4289.  C4h    WORD    current IRQ number
  4290.  C6h  2 BYTEs    ???
  4291.  C8h    WORD    miscellaneous flag word
  4292.  CAh  2 BYTEs    ???
  4293.  CCh    DWORD    old INT 10
  4294.  D0h    WORD    EMS alternate map set number
  4295.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  4296. --------T-1514-------------------------------
  4297. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  4298.     AH = 14h
  4299.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  4300.         WORD    bottom right corner of window (high = row, low = col)
  4301. Return: AX = status (SYS_OK)
  4302. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  4303. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  4304. --------T-1514-------------------------------
  4305. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  4306.     AH = 14h
  4307. Return: AX = current state
  4308.         0000h MultiDOS Plus command prompt is background task
  4309.         0001h command prompt is foreground task
  4310. SeeAlso: AH=0Bh"MultiDOS"
  4311. --------T-1515-------------------------------
  4312. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  4313.     AH = 15h
  4314.     STACK:    DWORD    pointer to ASCIZ banner message for top of screen
  4315. Return: AX = status (SYS_OK)
  4316. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  4317. --------T-1515-------------------------------
  4318. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  4319.     AH = 15h
  4320. Return: BX:AX -> system block (see below)
  4321. SeeAlso: AH=13h"MultiDOS"
  4322.  
  4323. Format of MultiDOS Plus 4.0 system block:
  4324. Offset    Size    Description
  4325.  00h    WORD    segment of system control block
  4326.  02h    WORD    redirection flag set by /NOREDIRECT
  4327.  04h    WORD    no-INT 10 flag set by /NO10
  4328.  06h    DWORD    old INT 10
  4329.  0Ah    DWORD    new INT 10
  4330.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  4331.  12h    DWORD    pointer to WORD with idle task TCB offset
  4332.  16h    DWORD    pointer to WORD with foreground TCB offset
  4333.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  4334.  1Eh    WORD    Task Control Block size
  4335.  20h    WORD    number of TCBs
  4336.  22h    WORD    flag: EMS present
  4337.  24h    WORD    EMS page frame base segment
  4338.  26h    WORD    16K pages in EMS page frame
  4339.  28h    WORD    base segment for conventional memory tasks
  4340.  2Ah    WORD    conventional memory size in paragraphs
  4341.  2Ch    DWORD    pointer to list of queue pointers
  4342. --------T-1516-------------------------------
  4343. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  4344.     AH = 16h
  4345.     STACK:    DWORD    pointer to I/O Request Packet
  4346.         WORD    top left corner of window (high byte = row, low = col)
  4347.         WORD    bottom right corner of window (high = row, low = col)
  4348. Return: AX = status (SYS_OK or SYS_ERROR)
  4349. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  4350. --------T-1516-------------------------------
  4351. INT 15 - MultiDOS Plus - INITIALIZATION
  4352.     AH = 16h
  4353. Note:    used internally during initialization; any other calls will cause
  4354.       unpredictable results
  4355. --------T-1517-------------------------------
  4356. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  4357.     AH = 17h
  4358. Return: AH = foreground color
  4359.     AL = background color
  4360. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  4361. --------T-1517-------------------------------
  4362. INT 15 - MultiDOS Plus - MAP IRQ
  4363.     AH = 17h
  4364.     AL = IRQ to map (01h-0Fh)
  4365.     BX = offset of task control block (see AH=13h) to associate with IRQ
  4366. Return: AX = status
  4367.         0000h successful
  4368.         other invalid IRQ
  4369. Note:    the EMS map of the specified TCB is associated with the given interrupt
  4370. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  4371. --------T-1518-------------------------------
  4372. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  4373.     AH = 18h
  4374.     STACK:    WORD    new background/foreground colors
  4375.             bits 3-0: foreground
  4376.             bits 7-4: background
  4377.             bits 15-8: unused
  4378. Return: AX = color
  4379. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  4380. --------T-1518-------------------------------
  4381. INT 15 - MultiDOS Plus - UNMAP IRQ
  4382.     AH = 18h
  4383.     AL = IRQ to unmap (01h-0Fh)
  4384. Return: AX = status
  4385.         0000h successful
  4386.         0001h invalid IRQ
  4387. Note:    results are unpredictable if the IRQ has not been mapped
  4388. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  4389. --------T-1519-------------------------------
  4390. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  4391.     AH = 19h
  4392.     STACK:    WORD    new background/foreground colors
  4393.             bits 3-0: foreground
  4394.             bits 7-4: background
  4395.             bits 15-8: unused
  4396. Return: AX = color
  4397. SeeAlso: AH=18h"VMiX"
  4398. --------T-1519-------------------------------
  4399. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  4400.     AH = 19h
  4401. Return: AX destroyed
  4402. Note:    for MultiDOS internal use only
  4403. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  4404. --------T-151A-------------------------------
  4405. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  4406.     AH = 1Ah
  4407.     STACK:    WORD    interrupt number
  4408.         DWORD    pointer to register structure
  4409. Return: AX = returned flags
  4410. --------T-151A-------------------------------
  4411. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  4412.     AH = 1Ah
  4413.     DS:SI -> 8-byte name
  4414. Return: AL = status
  4415.         00h successful
  4416.         AH = semaphore number (20h-3Fh)
  4417.         04h out of string space
  4418. Notes:    all eight bytes of the name are significant
  4419.     if the name does not already exist, it is added to the name table and
  4420.       associated with a free semaphore number
  4421.     names cannot be destroyed
  4422. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  4423. --------T-151B-------------------------------
  4424. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  4425.     AH = 1Bh
  4426.     STACK:    DWORD    source address
  4427.         DWORD    destination address
  4428.         WORD    number of words to move
  4429. Return: nothing
  4430. --------T-151B-------------------------------
  4431. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  4432.     AH = 1Bh
  4433.     DS:SI -> 8-byte name
  4434. Return: AH = status
  4435.         00h successful
  4436.         02h invalid semaphore number
  4437.         03h caller already owns semaphore
  4438.         04h out of string space
  4439. Notes:    (see AH=01h"MultiDOS")
  4440.     equivalent to AH=1Ah followed by AH=01h
  4441. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  4442. --------T-151C-------------------------------
  4443. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  4444.     AH = 1Ch
  4445.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  4446.         DWORD    pointer to object bitmap
  4447.         WORD    object width in pixels
  4448.         WORD    object height in pixels
  4449. Return: nothing
  4450. SeeAlso: AH=1Dh"VMiX"
  4451. --------T-151C-------------------------------
  4452. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  4453.     AH = 1Ch
  4454.     DS:SI -> 8-byte name
  4455. Return: AH = status
  4456.         00h successful
  4457.         01h not semaphore owner
  4458.         02h invalid semaphore number
  4459.         04h out of string space
  4460. Notes:    (see AH=02h"MultiDOS")
  4461.     equivalent to AH=1Ah followed by AH=02h
  4462. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  4463. --------T-151D-------------------------------
  4464. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  4465.     AH = 1Dh
  4466. Return: AX = current font number (00h-03h)
  4467. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  4468. --------T-151D-------------------------------
  4469. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  4470.     AH = 1Dh
  4471.     DS:SI -> 8-byte name
  4472. Return: AH = status
  4473.         00h semaphore not in use
  4474.         01h semaphore owned by another task
  4475.         02h invalid semaphore number
  4476.         03h caller owns semaphore
  4477.         04h out of string space
  4478. Notes:    (see AH=10h"MultiDOS")
  4479.     equivalent to AH=1Ah followed by AH=10h
  4480. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  4481. --------T-151E-------------------------------
  4482. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  4483.     AH = 1Eh
  4484.     STACK: WORD new font number (00h-03h)
  4485. Return: AX = current font number (00h-03h)
  4486. SeeAlso: AH=1Dh"VMiX"
  4487. --------T-151E00-----------------------------
  4488. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  4489.     AX = 1E00h
  4490.     DX = event/trigger number (00h-3Fh)
  4491. Return: AH = status
  4492.         00h successful
  4493. SeeAlso: AX=1E01h,AX=1E02h
  4494. --------T-151E01-----------------------------
  4495. INT 15 - MultiDOS Plus - TRIGGER EVENT
  4496.     AX = 1E01h
  4497.     DX = event/trigger number (00h-3Fh)
  4498. Return: AH = status
  4499.         00h successful
  4500.         01h invalid event/trigger number
  4501. Notes:    schedules any task waiting for event; if no task is waiting, the event
  4502.       counter is incremented (and will roll over if it was 65535)
  4503.     may be invoked by interrupt handler
  4504. SeeAlso: AX=1E00h,AX=1E02h
  4505. --------T-151E02-----------------------------
  4506. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  4507.     AX = 1E02h
  4508.     DX = event/trigger number (00h-3Fh)
  4509. Return: AH = status
  4510.         00h successful
  4511.         01h invalid event/trigger number
  4512. Note:    if the event counter is zero, the task is suspended until the event is
  4513.       triggered with AX=1E01h; else, the counter is decremented and the
  4514.       call returns immediately
  4515. SeeAlso: AX=1E00h,AX=1E01h
  4516. --------T-151E08-----------------------------
  4517. INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
  4518.     AX = 1E08h
  4519.     DX:BX -> context save handler
  4520.     DX:CX -> context restore handler
  4521. Note:    handlers may be removed by setting addresses to 0000h:0000h
  4522.  
  4523. Handlers are called with:
  4524.     ES:BX -> task's TCB
  4525. Return: all registers preserved
  4526. --------T-151F-------------------------------
  4527. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  4528.     AH = 1Fh
  4529.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  4530.         WORD    bottom right corner of window
  4531. Return: AX = status (SYS_OK)
  4532. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  4533. --------T-151F-------------------------------
  4534. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  4535.     AH = 1Fh
  4536. Return: BX = first segment of conventional memory
  4537.     DX = first segment of EMS swap frame into which MultiDOS will load
  4538.         programs
  4539. --------T-1520-------------------------------
  4540. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  4541.     AH = 20h
  4542. Return: AX = current state
  4543.         0000h multitasking enabled
  4544.         other TCB of task that disabled multitasking
  4545. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  4546. --------c-152000-----------------------------
  4547. INT 15 U - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  4548.     AX = 2000h
  4549. Desc:    stop setting user flag on entry to PRINT critical region
  4550. Note:    also supported by PC Network v1.00 RECEIVER.COM
  4551. SeeAlso: AX=2001h
  4552. --------c-152001-----------------------------
  4553. INT 15 U - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  4554.     AX = 2001h
  4555.     ES:BX -> byte which is to be incremented while in a DOS call
  4556. Desc:    specify a user flag which PRINT should set to let an interested
  4557.       application know it is in a critical region
  4558. Note:    also supported by PC Network v1.00 RECEIVER.COM
  4559. SeeAlso: AX=2000h
  4560. --------O-152010-----------------------------
  4561. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  4562.     AX = 2010h
  4563.     ???
  4564. Return: ???
  4565. SeeAlso: AX=2011h
  4566. --------O-152011-----------------------------
  4567. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  4568.     AX = 2011h
  4569.     ???
  4570. Return: ???
  4571. SeeAlso: AX=2010h
  4572. --------B-1521-------------------------------
  4573. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  4574.     AH = 21h
  4575.     AL = subfunction
  4576.         00h read POST log
  4577.         01h write POST log
  4578.         BH = device ID
  4579.         BL = error code
  4580. Return: CF set on error
  4581.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  4582.     if function 00h:
  4583.        BX = number of error codes stored
  4584.        ES:DI -> error log
  4585. Note:    the log is a series of words, the first byte of which identifies the
  4586.       error code and the second the device.
  4587. --------B-1522-------------------------------
  4588. INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
  4589.     AH = 22h
  4590. Return: CF set on error
  4591.         AH = status (86h if function not supported)
  4592.     CF clear on success
  4593.         AH = 00h
  4594.         ES:BX -> ROM BASIC
  4595. Note:    if this function is not supported, ROM BASIC is at F600h:0000h
  4596. SeeAlso: INT 86"BASIC",INT F0"BASIC"
  4597. --------b-152400-----------------------------
  4598. INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
  4599.     AX = 2400h
  4600. Return: CF clear if successful
  4601.         AH = 00h
  4602.     CF set on error
  4603.         AH = status
  4604.         01h keyboard controller is in secure mode
  4605.         86h function not supported
  4606. Note:    also supported by Qualitas 386MAX v6.01+
  4607. SeeAlso: AX=2401h,AX=2402h,AX=2403h
  4608. --------b-152401-----------------------------
  4609. INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
  4610.     AX = 2401h
  4611. Return: CF clear if successful
  4612.         AH = 00h
  4613.     CF set on error
  4614.         AH = status
  4615.         01h keyboard controller is in secure mode
  4616.         86h function not supported
  4617. Note:    also supported by Qualitas 386MAX v6.01+
  4618. SeeAlso: AX=2400h,AX=2402h
  4619. --------b-152402-----------------------------
  4620. INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
  4621.     AX = 2402h
  4622. Return: CF clear if successful
  4623.         AH = 00h
  4624.         AL = current state (00h disabled, 01h enabled)
  4625.     CF set on error
  4626.         AH = status
  4627.         01h keyboard controller is in secure mode
  4628.         86h function not supported
  4629. Note:    also supported by Qualitas 386MAX v6.01+
  4630. SeeAlso: AX=2400h,AX=2401h
  4631. --------b-152403-----------------------------
  4632. INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
  4633.     AX = 2403h
  4634. Return: CF clear if successful
  4635.         AH = 00h
  4636.         BX = status of A20 gate support
  4637.         bit 0: supported with bit 1 of I/O port 92h
  4638.         bit 1: supported on keyboard controller
  4639.         bit 15: additional data is available (location not yet defined)
  4640.     CF set on error
  4641.         AH = status
  4642.         01h keyboard controller is in secure mode
  4643.         86h function not supported
  4644. Note:    also supported by Qualitas 386MAX v6.01+
  4645. SeeAlso: AX=2402h
  4646. --------B-1540-------------------------------
  4647. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  4648.     AH = 40h
  4649.     AL = subfunction
  4650.         00h get system profile in CX and BX
  4651.         01h set system profile from CX and BX
  4652.         02h get internal modem profile in BX
  4653.         03h set internal modem profile from BX
  4654. Return: CF clear if successful
  4655.         AH = 00h
  4656.     CF set on error
  4657.         AH = status (80h = profile execution failed)
  4658. --------V-154000-----------------------------
  4659. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  4660.     AX = 4000h
  4661. Return: AX = 4000h
  4662.     CL = timeout in minutes, 00h if disabled
  4663. SeeAlso: AX=4001h,AX=4600h
  4664. --------V-154001-----------------------------
  4665. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  4666.     AX = 4001h
  4667.     CL = timeout in minutes, 00h to disable
  4668. Return: AL = status
  4669.         00h timeout modified
  4670.         01h timeout cannot be modified
  4671.         40h timeout cannot be modified
  4672.     CL = timeout in minutes, 00h if disabled
  4673. SeeAlso: AX=4000h,AX=4601h
  4674. --------B-1541-------------------------------
  4675. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
  4676.     AH = 41h
  4677.     AL = condition type
  4678.         bits 0-2: condition to wait for
  4679.              0 any external event
  4680.              1 compare and return if equal
  4681.              2 compare and return if not equal
  4682.              3 test and return if not zero
  4683.              4 test and return if zero
  4684.         bit 3:    reserved
  4685.         bit 4:    1=port address, 0=user byte
  4686.         bits 5-7: reserved
  4687.     BH = condition compare or mask value
  4688.     BL = timeout value times 55 milliseconds
  4689.         00h means no timeout
  4690.     DX = I/O port address if AL bit 4 set
  4691.     ES:DI -> user byte if AL bit 4 clear
  4692. Note:    call AH=C0h and examine bit 3 of feature byte 1 to determine whether
  4693.       this function is supported
  4694. SeeAlso: AH=83h,AH=86h,AH=C0h
  4695. --------B-1542-------------------------------
  4696. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  4697.     AH = 42h
  4698.     AL = suspend type
  4699.         00h to use system profile
  4700.         01h to force suspend regardless of system profile
  4701. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  4702.       power-up, execution will resume following the instruction calling
  4703.       this function
  4704. SeeAlso: AH=44h
  4705. --------b-154280-----------------------------
  4706. INT 15 - Compaq SLT/286 - ENTER STANDBY
  4707.     AX = 4280h
  4708. Return: AH = 42h
  4709.     CF clear if successful
  4710.     CF set if unable to enter standby
  4711. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  4712. --------B-1543-------------------------------
  4713. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  4714.     AH = 43h
  4715. Return: AL = status bits (see below)
  4716.  
  4717. Bitfields for Convertible system status:
  4718.  bit 0    LCD detached
  4719.  bit 1    reserved
  4720.  bit 2    RS232/parallel adapter powered on
  4721.  bit 3    internal modem powered on
  4722.  bit 4    power activated by alarm
  4723.  bit 5    standby power lost
  4724.  bit 6    external power in use
  4725.  bit 7    power low
  4726. --------B-1544-------------------------------
  4727. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  4728.     AH = 44h
  4729.     AL = new modem power state (00h power off, 01h power on)
  4730. SeeAlso: AH=42h
  4731. --------b-1544C0-----------------------------
  4732. INT 15 - Olivetti Quaderno - INITIALIZE DIGITAL SIGNAL PROCESSING???
  4733.     AX = 44C0h
  4734.     ES:DI -> new DSP procedure (exchanged with CMOS[28h])
  4735.     ES:SI -> ??? buffer
  4736. Return: ES:DI -> old DSP procedure
  4737.     ES:SI buffer filled with ten bytes from CMOS (addresses 14h-1Ch)
  4738.       followed by 00h (addresses 15h-1Ch copied only if less than 21h)
  4739. Note:    this function is also supported by XBIOS.COM
  4740. SeeAlso: AX=44C9h
  4741. --------b-1544C1-----------------------------
  4742. INT 15 - Olivetti Quaderno - ???
  4743.     AX = 44C1h
  4744.     ???
  4745. Return: ???
  4746. Note:    this function is also supported by XBIOS.COM
  4747. SeeAlso: AX=44C9h
  4748. --------b-1544C2-----------------------------
  4749. INT 15 - Olivetti Quaderno - ???
  4750.     AX = 44C2h
  4751.     DL = byte to be written to I/O port 350h
  4752. Note:    this function is also supported by XBIOS.COM
  4753. SeeAlso: AX=44C3h,AX=44C9h
  4754. --------b-1544C3-----------------------------
  4755. INT 15 - Olivetti Quaderno - GET ???
  4756.     AX = 44C3h
  4757. Return: DH = bitfields
  4758.         bits 0,1: "tres complique"
  4759.         bits 2-4: zero
  4760.         bits 5-7: bits 5-7 read from I/O port 351h
  4761.     DL = value read from I/O port 350h
  4762. Note:    this function is also supported by XBIOS.COM
  4763. SeeAlso: AX=44C2h,AX=44C9h
  4764. --------b-1544C4-----------------------------
  4765. INT 15 - Olivetti Quaderno - ???
  4766.     AX = 44C4h and 44C5h
  4767.     ???
  4768. Return: ???
  4769. Note:    this function is also supported by XBIOS.COM
  4770. SeeAlso: AX=44C9h
  4771. --------b-1544C6-----------------------------
  4772. INT 15 - Olivetti Quaderno - READ LCD
  4773.     AX = 44C6h
  4774. Return: DX = FFFFh clock is displayed on LCD display
  4775.     DX = other: hex number displayed in first four positions of display
  4776.     BH = left alphanumeric character on display (see below)
  4777.     BL = right alphanumeric character on display (see below)
  4778.     CL = flags
  4779.         bit 0: right colon on
  4780.         bit 1: left colon on
  4781.         bits 2-7 unused    
  4782. Notes:    the LCD display has the format HH:HH:AA, where H is a hex digit and A
  4783.       is an alphanumeric character
  4784.     this function is also supported by XBIOS.COM
  4785. SeeAlso: AX=44C7h,AX=44C9h
  4786.  
  4787. Values for alphanumeric characters:
  4788.  00h-0Fh hex digit
  4789.  2Bh    "+"
  4790.  2Dh    "-"
  4791.  30h-39h "0" to "9"
  4792.  41h-5Ah "A" to "Z"
  4793.  61h-6Ah "a" to "z"
  4794.  else    blank
  4795. --------b-1544C7-----------------------------
  4796. INT 15 - Olivetti Quaderno - WRITE LCD
  4797.     AX = 44C7h
  4798.     DX = hex display
  4799.         FFFFh display clock and "HI", "Md", or "Lo"
  4800.         BH,BL,CL unused
  4801.         other: display specified hex number in first four positions
  4802.         BH = left alphanumeric character on display (see AX=44C6h)
  4803.         BL = right alphanumeric character on display (see AX=44C6h)
  4804.         CL = flags
  4805.             bit 0: right colon on
  4806.             bit 1: left colon on
  4807.             bits 2-7 unused
  4808. Note:    this function is also supported by XBIOS.COM
  4809. SeeAlso: AX=44C6h
  4810. --------b-1544C8-----------------------------
  4811. INT 15 - Olivetti Quaderno - ???
  4812.     AX = 44C8h
  4813.     CL = ??? (00h,02h,21h)
  4814.     CH = ???
  4815.     ???
  4816. Return: ???
  4817. Note:    this function is also supported by XBIOS.COM
  4818. SeeAlso: AX=44C9h
  4819. --------b-1544C9-----------------------------
  4820. INT 15 - Olivetti Quaderno - GET XBIOS VERSION
  4821.     AX = 44C9h
  4822. Return: AL = major version
  4823.     AH = minor version
  4824. Note:    this function is also supported by XBIOS.COM
  4825. --------b-154600-----------------------------
  4826. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  4827.     AX = 4600h
  4828. Return: AH = modem configuration information
  4829.         bit 0 powerup state (0 off, 1 on)
  4830.         bit    1 modem installed
  4831.         bit    2 IRQ line assignment (0 IRQ 4, 1 IRQ 3)
  4832.         bit 3 COM port assignment (0 = COM 2, 1 = COM 1)
  4833.         bit 4 modem state (0 not assigned, 1 assigned)
  4834.         bit 5 modem is on
  4835.     AL = power conservation status information
  4836.         bit 0  power source (0 internal, 1 external)
  4837.         bits 1-2 low battery state
  4838.             00 no low battery condition
  4839.             01 low battery 1
  4840.             10 reserved
  4841.             11 low battery 2
  4842.         bits 3-4 power conservation mode
  4843.             00 automatic
  4844.             01 on
  4845.             10 off
  4846.             11 reserved
  4847.     BH = default system inactivity timeout (1-21 minutes)
  4848.     BL = current system inactivity timeout (1-21 minutes)
  4849.     CH = default video display inactivity timeout (1-63 minutes)
  4850.     CL = current video display inactivity timeout (1-63 minutes)
  4851.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  4852.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  4853. SeeAlso: AX=4280h,AX=4601h,INT 77
  4854. --------b-154601-----------------------------
  4855. INT 15 - Compaq SLT/286 - MODIFY POWER CONSERVATION/MODEM CONFIGURATION
  4856.     AX = 4601h
  4857.     BL = system inactivity timeout (1-21 minutes)
  4858.         FFh do not change
  4859.     CL = video display inactivity timeout (1-63 minutes)
  4860.         FFh do not change
  4861.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  4862.         FFh do not change
  4863.     DH = new modem state (00h turn off, 01h turn on, FFh don't change)
  4864. Return: CF clear if successful
  4865.         AH = 00h
  4866.         BL = current system inactivity timeout (1-21 minutes)
  4867.         CL = current video display inactivity timeout (1-63 minutes)
  4868.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  4869.         DH = modem state (FFh unchanged, 00h turned off, 01h turned on)
  4870.     CF set on error
  4871.         AH = error code
  4872.         01h input is out of range
  4873.         02h no modem present
  4874. SeeAlso: AX=4600h,INT 77
  4875. --------b-154604-----------------------------
  4876. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - GET ???
  4877.     AX = 4604h
  4878. Return: CF clear if successful
  4879.         AL = byte read from I/O port 03F8h
  4880.     CF set on error (not supported)
  4881.         AH = 86h (unsupported function)
  4882. Note:    also supported by 7/26/93 LTE Lite 386 ROM
  4883. --------b-154605-----------------------------
  4884. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - ???
  4885.     AX = 4605h
  4886. Return: CF clear if successful
  4887.     CF set on error (not supported)
  4888.         AH = 86h (unsupported function)
  4889. Note:    this function is a NOP (other than clearing CF) in the 08/05/93 version
  4890.       of the Contura 486/486c/486cx and "Aladdin" ROM, and the 7/26/93
  4891.       LTE Lite 386 ROM
  4892. --------D-154900-----------------------------
  4893. INT 15 - Far East MS-DOS - GET DOS TYPE
  4894.     AX = 4900h
  4895. Return: CF clear if successful
  4896.         AH = 00h
  4897.         BL = type of DOS running
  4898.         00h DOS/V
  4899.         01h DOS/J or DOS/K (early IBM Japan versions of MS-DOS)
  4900.     CF set on error
  4901.         AH = 86h (function not supported)
  4902. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  4903. SeeAlso: INT 21/AH=30h
  4904. --------b-154DD4-----------------------------
  4905. INT 15 - HP 95LX - INSTALLATION CHECK
  4906.     AX = 4DD4h
  4907. Return: BX = 4850h ("HP") if HP 95LX
  4908.         CX = ??? (0101h)
  4909.         DL = ??? (00h)
  4910. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  4911. SeeAlso: INT 61"HP 95LX"
  4912. --------b-154E-------------------------------
  4913. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  4914.     AH = 4Eh
  4915.     AL = light sleep
  4916.         00h disabled
  4917.         01h enabled
  4918. Note:    when light sleep is disabled, the system will continue running at full
  4919.       speed; when enabled, it may automatically slow to conserve batteries
  4920. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  4921. --------B-154F-------------------------------
  4922. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  4923.     AH = 4Fh
  4924.     AL = hardware scan code
  4925.     CF set
  4926. Return: CF set
  4927.        AL = hardware scan code
  4928.     CF clear
  4929.        scan code should be ignored
  4930. Note:    called by INT 09 handler to translate scan codes; the INT 09 code does
  4931.       not examine the scan code it reads from the keyboard until after
  4932.       this function returns.  This permits software to rearrange the
  4933.       keyboard; for example, swapping the CapsLock and Control keys, or
  4934.       turning the right Shift key into Enter.
  4935. SeeAlso: INT 09,INT 15/AH=C0h
  4936. --------T-1550-------------------------------
  4937. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  4938.     AH = 50h
  4939.     BX = segment of page directory table
  4940.     CX = page number of page table
  4941. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  4942. --------T-1551-------------------------------
  4943. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  4944.     AH = 51h
  4945.     STACK:    DWORD    selector:offset of function
  4946. Return: registers as returned by function
  4947. Note:    executes function with privilege level 0 (highest privilege)
  4948. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  4949. --------B-155101-----------------------------
  4950. INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
  4951.     AX = 5101h
  4952. Return: CF set if successful
  4953.         AH = 00h
  4954.         AL = current configuration number
  4955.         00h system unit only
  4956.         FFh configuration not recognized
  4957.         BX = status flag
  4958.         bits 0-14: reserved
  4959.         bit 15: additional data is available (location TBD)
  4960.     CF clear on error
  4961.         AH = status
  4962.         01h expansion unit is not present
  4963.         86h function not supported
  4964. Note:    CF convention is the reverse of the standard convention for this
  4965.       interrupt.  (Perhaps a typo in the IBM BIOS Tech Ref?)
  4966. --------T-1552-------------------------------
  4967. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  4968.     AH = 52h
  4969. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  4970. --------p-155300BX0000-----------------------
  4971. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  4972.     AX = 5300h
  4973.     BX = 0000h (device ID of system BIOS)
  4974. Return: CF clear if successful
  4975.         AH = major version (BCD)
  4976.         AL = minor version (BCD)
  4977.         BX = 504Dh ("PM")
  4978.         CX = flags
  4979.         bit 0: 16-bit protected mode interface supported
  4980.         bit 1: 32-bit protected mode interface supported
  4981.         bit 2: CPU idle call reduces processor speed
  4982.         bit 3: BIOS power management disabled
  4983.         bits 4-7 reserved
  4984.     CF set on error
  4985.         AH = error code (86h) (see below)
  4986.  
  4987. Values for error code:
  4988.  01h    power management functionality disabled
  4989.  02h    interface connection already in effect
  4990.  03h    interface not connected
  4991.  04h    real-mode interface not connected
  4992.  05h    16-bit protected-mode interface already connected
  4993.  06h    16-bit protected-mode interface not supported
  4994.  07h    32-bit protected-mode interface already connected
  4995.  08h    32-bit protected-mode interface not supported
  4996.  09h    unrecognized device ID
  4997.  0Ah    invalid parameter value in CX
  4998.  0Bh-1Fh reserved for other interface and general errors
  4999.  20h-3Fh reserved for CPU errors
  5000.  40h-5Fh reserved for device errors
  5001.  60h    can't enter requested state
  5002.  61h-7Fh reserved for other system errors
  5003.  80h    no power management events pending
  5004.  81h-85h reserved for other power management event errors
  5005.  86h    APM not present
  5006.  87h-9Fh reserved for other power management event errors
  5007. --------p-155301BX0000-----------------------
  5008. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  5009.     AX = 5301h
  5010.     BX = 0000h (device ID of system BIOS)
  5011. Return: CF clear if successful
  5012.     CF set on error
  5013.         AH = error code (02h,09h) (see AX=5300h)
  5014. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  5015. --------p-155302BX0000-----------------------
  5016. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  5017.     AX = 5302h
  5018.     BX = 0000h (device ID of system BIOS)
  5019. Return: CF clear if successful
  5020.         AX = real-mode segment base address of protected-mode 16-bit code
  5021.         segment
  5022.         BX = offset of entry point
  5023.         CX = real-mode segment base address of protected-mode 16-bit data
  5024.         segment
  5025.     CF set on error
  5026.         AH = error code (05h,06h,09h) (see AX=5300h)
  5027. Notes:    the caller must initialize two consecutive descriptors with the
  5028.       returned segment base addresses; these descriptors must be valid
  5029.       whenever the protected-mode interface is called, and will have
  5030.       their limits arbitrarily set to 64K.
  5031.     the protected mode interface is invoked by making a far call with the
  5032.       same register values as for INT 15; it must be invoked while CPL=0,
  5033.       the code segment descriptor must have a DPL of 0, the stack must be
  5034.       in a 16-bit segment and have enough room for BIOS use and possible
  5035.       interrupts, and the current I/O permission bit map must allow access
  5036.       to the I/O ports used for power management.
  5037.     functions 00h-03h are not available from protected mode
  5038. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  5039. --------p-155303BX0000-----------------------
  5040. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  5041.     AX = 5303h
  5042.     BX = 0000h (device ID of system BIOS)
  5043. Return: CF clear if successful
  5044.         AX = real-mode segment base address of protected-mode 32-bit code
  5045.         segment
  5046.         EBX = offset of entry point
  5047.         CX = real-mode segment base address of protected-mode 16-bit code
  5048.         segment
  5049.         DX = real-mode segment base address of protected-mode 16-bit data
  5050.         segment
  5051.     CF set on error
  5052.         AH = error code (07h,08h,09h) (see AX=5300h)
  5053. Notes:    the caller must initialize three consecutive descriptors with the
  5054.       returned segment base addresses for 32-bit code, 16-bit code, and
  5055.       16-bit data, respectively; these descriptors must be valid whenever
  5056.       the protected-mode interface is called, and will have their limits
  5057.       arbitrarily set to 64K.
  5058.     the protected mode interface is invoked by making a far call to the
  5059.       32-bit code segment with the same register values as for INT 15; it
  5060.       must be invoked while CPL=0, the code segment descriptor must have a
  5061.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  5062.       for BIOS use and possible interrupts, and the current I/O permission
  5063.       bit map must allow access to the I/O ports used for power management.
  5064.     functions 00h-03h are not available from protected mode
  5065. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  5066. --------p-155304BX0000-----------------------
  5067. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  5068.     AX = 5304h
  5069.     BX = 0000h (device ID of system BIOS)
  5070. Return: CF clear if successful
  5071.     CF set on error
  5072.         AH = error code (03h,09h) (see AX=5300h)
  5073. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  5074. --------p-155305-----------------------------
  5075. INT 15 - Advanced Power Management Specification - CPU IDLE
  5076.     AX = 5305h
  5077. Return: after system leaves idle state
  5078.     CF clear
  5079. Notes:    call when the system is idle and should be suspended until the next
  5080.       system event or interrupt
  5081.     should not be called from within a hardware interrupt handler to avoid
  5082.       reentrance problems
  5083.     if an interrupt causes the system to resume normal processing, the
  5084.       interrupt may or may not have been handled when the BIOS returns
  5085.       from this call; thus, the caller should allow interrupts on return
  5086.     interrupt handlers may not retain control if the BIOS allows
  5087.       interrupts while in idle mode even if they are able to determine
  5088.       that they were called from idle mode
  5089.     the caller should issue this call continuously in a loop until it needs
  5090.       to perform some processing of its own
  5091. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  5092. --------p-155306-----------------------------
  5093. INT 15 - Advanced Power Management Specification - CPU BUSY
  5094.     AX = 5306h
  5095. Return: CF clear
  5096. Notes:    called to ensure that the system runs at full speed even on systems
  5097.       where the BIOS is unable to recognize increased activity (especially
  5098.       if interrupts are hooked by other programs and not chained to the
  5099.       BIOS)
  5100.     this call may be made even when the system is already running at full
  5101.       speed, but it will create unnecessary overhead
  5102.     should not be called from within a hardware interrupt handler to avoid
  5103.       reentrance problems
  5104. SeeAlso: AX=5305h
  5105. --------p-155307-----------------------------
  5106. INT 15 - Advanced Power Management Specification - SET POWER STATE
  5107.     AX = 5307h
  5108.     BX = device ID (see below)
  5109.     CX = system state ID
  5110.         0000h ready (not supported for device ID 0001h)
  5111.         0001h stand-by
  5112.         0002h suspend
  5113.         0003h off (not supported for device ID 0001h)
  5114.         0004h-FFFFh reserved
  5115. Return: CF clear if successful
  5116.     CF set on error
  5117.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  5118. Note:    should not be called from within a hardware interrupt handler to avoid
  5119.       reentrance problems
  5120.  
  5121. Values for device IDs:
  5122.  0000h    system BIOS
  5123.  0001h    all devices for which the system BIOS manages power
  5124.  01xxh    display (01FFh for all attached display devices)
  5125.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  5126.  03xxh    parallel ports (03FFh for all attached parallel ports)
  5127.  04xxh    serial ports (04FFh for all attached serial ports)
  5128.  0500h-FFFFh reserved
  5129. --------p-155307BX0001-----------------------
  5130. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  5131.     AX = 5307h
  5132.     BX = 0001h
  5133.     CX = 0001h
  5134. Return: CF clear
  5135. Notes:    puts the entire system into stand-by mode; normally called in response
  5136.       to a System Stand-by Request notification after any necessary
  5137.       processing, but may also be invoked at the caller's discretion
  5138.     should not be called from within a hardware interrupt handler to avoid
  5139.       reentrance problems
  5140.     the stand-by state is typically exited on an interrupt
  5141. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  5142. --------p-155307BX0001-----------------------
  5143. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  5144.     AX = 5307h
  5145.     BX = 0001h
  5146.     CX = 0002h
  5147. Return: after system is resumed
  5148.     CF clear
  5149. Notes:    puts the entire system into a low-power suspended state; normally
  5150.       called in response to a Suspend System Request notification after
  5151.       any necessary processing, but may also be invoked at the caller's
  5152.       discretion
  5153.     should not be called from within a hardware interrupt handler to avoid
  5154.       reentrance problems
  5155.     the caller may need to update its date and time values because the
  5156.       system could have been suspended for a long period of time
  5157. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  5158. --------p-155308BXFFFF-----------------------
  5159. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  5160.     AX = 5308h
  5161.     BX = FFFFh
  5162.     CX = new state
  5163.         0000h disabled
  5164.         0001h enabled
  5165. Return: CF clear if successful
  5166.     CF set on error
  5167.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  5168. Notes:    when power management is disabled, the system BIOS will not
  5169.       automatically power down devices, enter stand-by or suspended mode,
  5170.       or perform any power-saving actions in response to AX=5305h calls
  5171.     should not be called from within a hardware interrupt handler to avoid
  5172.       reentrance problems
  5173. SeeAlso: AX=5309h
  5174. --------p-155309BXFFFF-----------------------
  5175. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  5176.     AX = 5309h
  5177.     BX = FFFFh
  5178. Return: CF clear if successful
  5179.     CF set on error
  5180.         AH = error code (09h) (see AX=5300h)
  5181. Note:    should not be called from within a hardware interrupt handler to avoid
  5182.       reentrance problems
  5183. SeeAlso: AX=5308h
  5184. --------p-15530ABX0001-----------------------
  5185. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  5186.     AX = 530Ah
  5187.     BX = 0001h
  5188. Return: CF clear if successful
  5189.         BH = AC line status
  5190.         00h off-line
  5191.         01h on-line
  5192.         FFh unknown
  5193.         other reserved
  5194.         BL = battery status
  5195.         00h high
  5196.         01h low
  5197.         02h critical
  5198.         03h charging
  5199.         FFh unknown
  5200.         other reserved
  5201.         CL = remaining battery life
  5202.         00h-64h (0-100) percentage of full charge
  5203.         FFh unknown
  5204.     CF set on error
  5205.         AH = error code (09h) (see AX=5300h)
  5206. Note:    should not be called from within a hardware interrupt handler to avoid
  5207.       reentrance problems
  5208. --------p-15530B-----------------------------
  5209. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  5210.     AX = 530Bh
  5211. Return: CF clear if successful
  5212.         BX = event code
  5213.         0001h system stand-by request
  5214.         0002h system suspend request
  5215.         0003h normal resume system notification
  5216.         0004h critical resume system notification
  5217.         0005h battery low notification
  5218.     CF set on error
  5219.         AH = error code (03h,80h) (see AX=5300h)
  5220. Notes:    although power management events are often asynchronous, notification
  5221.       will not be made until polled via this call to permit software to
  5222.       only receive event notification when it is prepared to process
  5223.       power management events; since these events are not very time-
  5224.       critical, it should be sufficient to poll once or twice per second
  5225.     the critical resume notification is made after the system resumes
  5226.       from an emergency suspension; normally, the system BIOS only notifies
  5227.       its partner that it wishes to suspend and relies on the partner to
  5228.       actually request the suspension, but no notification is made on an
  5229.       emergency suspension
  5230.     should not be called from within a hardware interrupt handler to avoid
  5231.       reentrance problems
  5232. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  5233. --------T-155400-----------------------------
  5234. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  5235.     AX = 5400h
  5236.     ES:BX -> device information tables
  5237.     DI:DX -> dispatcher entry point
  5238. Note:    called by OmniView to notify programs loaded before OmniView of state
  5239.       changes inside OmniView
  5240. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  5241. --------T-155401-----------------------------
  5242. INT 15 C - Omniview Multitasker - PROCESS CREATION
  5243.     AX = 5401h
  5244.     ES:BX = process handle
  5245. Note:    called by OmniView to notify programs loaded before OmniView of state
  5246.       changes inside OmniView
  5247. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  5248. --------T-155402-----------------------------
  5249. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  5250.     AX = 5402h
  5251.     ES:DX = process handle
  5252. Note:    called by OmniView to notify programs loaded before OmniView of state
  5253.       changes inside OmniView
  5254. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  5255. --------T-155403-----------------------------
  5256. INT 15 C - Omniview Multitasker - SAVE
  5257.     AX = 5403h
  5258.     ES:DX = process swapping out
  5259. Note:    called by OmniView to notify programs loaded before OmniView of state
  5260.       changes inside OmniView
  5261. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  5262. --------T-155404-----------------------------
  5263. INT 15 C - Omniview Multitasker - RESTORE
  5264.     AX = 5404h
  5265.     ES:DX = process swapping in
  5266. Note:    called by OmniView to notify programs loaded before OmniView of state
  5267.       changes inside OmniView
  5268. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  5269. --------T-155405-----------------------------
  5270. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  5271.     AX = 5405h
  5272.     ES:DX = process swapping in
  5273. Note:    called by OmniView to notify programs loaded before OmniView of state
  5274.       changes inside OmniView
  5275. SeeAlso: AX=5406h
  5276. --------T-155406-----------------------------
  5277. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  5278.     AX = 5406h
  5279.     ES:DX = process swapping in
  5280. Note:    called by OmniView to notify programs loaded before OmniView of state
  5281.       changes inside OmniView
  5282. SeeAlso: AX=5405h
  5283. --------T-155407-----------------------------
  5284. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  5285.     AX = 5407h
  5286. Note:    called by OmniView to notify programs loaded before OmniView of state
  5287.       changes inside OmniView
  5288. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  5289. --------B-1580-------------------------------
  5290. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  5291.     AH = 80h
  5292.     BX = device ID
  5293.     CX = process ID
  5294.     CF clear
  5295. Return: CF clear if successful
  5296.         AH = 00h
  5297.     CF set on error
  5298.         AH = status
  5299.         80h invalid command (PC,PCjr)
  5300.         86h function not supported (XT)
  5301. Note:    this function should be hooked by a multitasker which wishes to keep
  5302.       track of device ownership; the default BIOS handler merely returns
  5303.       successfully
  5304. SeeAlso: AH=81h,AH=82h
  5305. --------B-1581-------------------------------
  5306. INT 15 C - OS HOOK - DEVICE CLOSE
  5307.     AH = 81h
  5308.     BX = device ID
  5309.     CX = process ID
  5310.     CF clear
  5311. Return: CF clear if successful
  5312.         AH = 00h
  5313.     CF set on error
  5314.         AH = status (see AH=80h)
  5315. Note:    this function should be hooked by a multitasker which wishes to keep
  5316.       track of device ownership; the default BIOS handler merely returns
  5317.       successfully
  5318. SeeAlso: AH=80h,AH=82h
  5319. --------B-1582-------------------------------
  5320. INT 15 C - OS HOOK - PROGRAM TERMINATION
  5321.     AH = 82h
  5322.     BX = process ID
  5323.     CF clear
  5324. Return: CF clear if successful
  5325.         AH = 00h
  5326.     CF set on error
  5327.         AH = status (see AH=80h)
  5328. Notes:    closes all devices opened by the given process ID with function 80h
  5329.     this function should be hooked by a multitasker which wishes to keep
  5330.       track of device ownership; the default BIOS handler merely returns
  5331.       successfully
  5332. SeeAlso: AH=80h,AH=81h
  5333. --------B-1583-------------------------------
  5334. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  5335.     AH = 83h
  5336.     AL = subfunction
  5337.         00h set interval
  5338.         CX:DX = microseconds to delay
  5339.         ES:BX -> byte whose high bit is to be set at end of interval
  5340.         01h cancel wait interval
  5341. Return: CF set on error or function already busy
  5342.         AH = status
  5343.         80h invalid command (PC,PCjr)
  5344.         86h function not supported (XT and later)
  5345.     CF clear if successful
  5346. Notes:    the resolution of the wait period is 977 microseconds on most systems
  5347.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  5348.       real-time clock chip which is available on INT 70
  5349.     IBM AT 1/10/84 BIOS ignores AL and always performs subfunction 00h
  5350. SeeAlso: AH=41h,AH=86h,INT 70
  5351. --------B-1584-------------------------------
  5352. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  5353.     AH = 84h
  5354.     DX = subfunction
  5355.         0000h read joystick switches
  5356.         Return: AL bits 7-4 = switch settings
  5357.         0001h read positions of joysticks
  5358.         Return: AX = X position of joystick A
  5359.             BX = Y position of joystick A
  5360.             CX = X position of joystick B
  5361.             DX = Y position of joystick B
  5362. Return: CF set on error
  5363.         AH = status
  5364.         80h invalid command (PC,PCjr)
  5365.         86h function not supported (other)
  5366.     CF clear if successful
  5367. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  5368.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  5369.     a 250kOhm joystick typically returns 0000h-01A0h
  5370. --------B-1585-------------------------------
  5371. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  5372.     AH = 85h
  5373.     AL = 00h SysRq key pressed
  5374.        = 01h SysRq key released
  5375.     CF clear
  5376. Return: CF clear if successful
  5377.         AH = 00h
  5378.     CF set on error
  5379.         AH = status (see AH=84h)
  5380. Notes:    called by keyboard decode routine
  5381.     the default handler simply returns successfully; programs which wish
  5382.       to monitor the SysRq key must hook this call
  5383. SeeAlso: INT 09
  5384. --------B-1586-------------------------------
  5385. INT 15 - BIOS - WAIT (AT,PS)
  5386.     AH = 86h
  5387.     CX:DX = interval in microseconds
  5388. Return: CF clear if successful (wait interval elapsed)
  5389.     CF set on error or AH=83h wait already in progress
  5390.         AH = status (see AH=84h)
  5391. Note:    the resolution of the wait period is 977 microseconds on most systems
  5392.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  5393.       real-time clock chip which is available on INT 70
  5394. SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
  5395. --------B-1587-------------------------------
  5396. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  5397.     AH = 87h
  5398.     CX = number of words to copy (max 8000h)
  5399.     ES:SI -> global descriptor table
  5400. Return: CF set on error
  5401.     CF clear if successful
  5402.     AH = status
  5403.         00h source copied into destination
  5404.         01h parity error
  5405.         02h interrupt error
  5406.         03h address line 20 gating failed
  5407.         80h invalid command (PC,PCjr)
  5408.         86h unsupported function (XT,PS30)
  5409. Notes:    copy is done in protected mode with interrupts disabled by the default
  5410.       BIOS handler; many 386 memory managers perform the copy with
  5411.       interrupts enabled
  5412.     this function is incompatible with the OS/2 compatibility box
  5413. SeeAlso: AH=88h,AH=89h
  5414.  
  5415. Format of global descriptor table:
  5416. Offset    Size    Description
  5417.  00h 16 BYTEs    zeros
  5418.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  5419.  12h  3 BYTEs    24-bit linear source address, low byte first
  5420.  15h    BYTE    source segment access rights (93h)
  5421.  16h    WORD    zero
  5422.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  5423.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  5424.  1Dh    BYTE    destination segment access rights (93h)
  5425.  1Eh 18 BYTEs    zeros
  5426. --------B-1588-------------------------------
  5427. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  5428.     AH = 88h
  5429. Return: CF clear if successful
  5430.         AX = number of contiguous KB starting at absolute address 100000h
  5431.     CF set on error
  5432.         AH = status
  5433.         80h invalid command (PC,PCjr)
  5434.         86h unsupported function (XT,PS30)
  5435. Notes:    TSRs which wish to allocate extended memory to themselves often hook
  5436.       this call, and return a reduced memory size.    They are then free to
  5437.       use the memory between the new and old sizes at will.
  5438.     the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
  5439.       for memory beyond 16MB
  5440.     not all BIOSes correctly return the carry flag, making this call
  5441.       unreliable unless one first checks whether it is supported through
  5442.       a mechanism other than calling the function and testing CF
  5443. SeeAlso: AH=87h,AH=C7h
  5444. --------B-1589-------------------------------
  5445. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  5446.     AH = 89h
  5447.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  5448.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  5449.     ES:SI -> GDT for protected mode
  5450.            offset 0h  null descriptor (initialize to zeros)
  5451.               8h  GDT descriptor
  5452.              10h  IDT descriptor
  5453.              18h  DS
  5454.              20h  ES
  5455.              28h  SS
  5456.              30h  CS
  5457.              38h  uninitialized, used to build descriptor for BIOS CS
  5458. Return: CF set on error
  5459.        AH = FFh  error enabling address line 20
  5460.     CF clear if successful
  5461.        AH = 00h
  5462.        in protected mode at specified address
  5463. Notes:    BL and BH must be multiples of 8
  5464.     the protected-mode CS must reference the same memory as the CS this
  5465.       function is called from because execution continues with the address
  5466.       following the interrupt call
  5467. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  5468. --------B-1590-------------------------------
  5469. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  5470.     AH = 90h
  5471.     AL = device type (see below)
  5472.     ES:BX -> request block for type codes 80h through BFh
  5473.     CF clear
  5474. Return: CF set if wait time satisfied
  5475.     CF clear if driver must perform wait
  5476.         AH = 00h
  5477. Notes:    type codes are allocated as follows:
  5478.       00-7F non-reentrant devices; OS must arbitrate access
  5479.       80-BF reentrant devices; ES:BX points to a unique control block
  5480.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  5481.     floppy and hard disk BIOS code uses this call to implement a timeout;
  5482.       for device types 00h and 01h, a return of CF set means that the
  5483.       timeout expired before the disk responded.
  5484.     this function should be hooked by a multitasker to allow other tasks
  5485.       to execute while the BIOS is waiting for I/O completion; the default
  5486.       handler merely returns with AH=00h and CF clear
  5487. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  5488.  
  5489. Values for device type:
  5490.  00h    disk
  5491.  01h    diskette
  5492.  02h    keyboard
  5493.  03h    PS/2 pointing device
  5494.  21h    waiting for keyboard input (Phoenix BIOS)
  5495.  80h    network
  5496.  FBh    digital sound (Tandy)
  5497.  FCh    disk reset (PS)
  5498.  FDh    diskette motor start
  5499.  FEh    printer
  5500. --------B-1591-------------------------------
  5501. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  5502.     AH = 91h
  5503.     AL = device type (see AH=90h)
  5504.     ES:BX -> request block for type codes 80h through BFh
  5505.     CF clear
  5506. Return: AH = 00h
  5507. Note:    this function should be hooked by a multitasker to allow other tasks
  5508.       to execute while the BIOS is waiting for I/O completion; the default
  5509.       handler merely returns with AH=00h and CF clear
  5510. SeeAlso: AH=90h
  5511. --------b-15BC-------------------------------
  5512. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED FOR DELAY LOOPS
  5513.     AH = BCh
  5514. Return: CF clear
  5515.     (Phoenix 1.10 10a) BYTE 0040h:00B0h set to delay loop count
  5516.     (Dell 4xxDE BIOS A11) WORD 0040h:00ECh set to delay loop count
  5517. Note:    this function reads system timer channel 0 twice, then does
  5518.       calculations on the returned values to determine the delay loop
  5519.       counter needed by the BIOS for beeps and floppy timeouts
  5520. --------E-15BF00-----------------------------
  5521. INT 15 - Rational Systems DOS/16M - ???
  5522.     AX = BF00h
  5523.     ???
  5524. Return: ???
  5525. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  5526. SeeAlso: AX=BF02h
  5527. --------E-15BF01-----------------------------
  5528. INT 15 - Rational Systems DOS/16M - ???
  5529.     AX = BF01h
  5530.     ???
  5531. Return: ???
  5532. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  5533.     called by DOS/4GW
  5534. SeeAlso: AX=BF00h,AX=BF02h
  5535. --------E-15BF02DX0000-----------------------
  5536. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  5537.     AX = BF02h
  5538.     DX = 0000h
  5539. Return: DX = nonzero if installed
  5540.         DX:SI -> XBRK structure (see below)
  5541. Note:    this function is also supported by DOS/4G
  5542. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  5543. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  5544.  
  5545. Format of XBRK structure:
  5546. Offset    Size    Description
  5547.  00h    DWORD    linear address of first available byte
  5548.  04h    DWORD    linear address of last available byte + 1 ???
  5549.  08h    DWORD    real-mode address of XBRK structure???
  5550.  0Ch    DWORD    ???
  5551.  10h  2 BYTEs    ???
  5552.  12h    WORD    segment of ???
  5553.  14h  8 BYTEs    ???
  5554.  1Ch 512 BYTEs    protected-mode IDT
  5555. 21Ch  N BYTEs    protected-mode GDT
  5556. --------E-15BF03-----------------------------
  5557. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  5558.     AX = BF03h
  5559.     BX = PSP segment of extender
  5560.     ???
  5561. Return: ???
  5562. Note:    if BX is not the PSP segment of the extender, it passes the call down
  5563.       the INT 15 chain; this allows nested instances of the extender
  5564. SeeAlso: AX=BF06h
  5565. --------E-15BF04-----------------------------
  5566. INT 15 - Rational Systems DOS/4GW - ???
  5567.     AX = BF04h
  5568.     BX = PSP segment of extender
  5569. Return: nothing???
  5570. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  5571.       the INT 15 chain; this allows nested instances of the extender
  5572.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  5573. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  5574. --------E-15BF05-----------------------------
  5575. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  5576.     AX = BF05h
  5577.     BX = PSP segment of extender
  5578. Return: nothing???
  5579. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  5580.       the INT 15 chain; this allows nested instances of the extender
  5581.     calls INT 67/AX=DE01h if ???
  5582. --------E-15BF06-----------------------------
  5583. INT 15 - Rational Systems DOS/4GW - ???
  5584.     AX = BF06h
  5585.     BX = PSP segment of extender
  5586.     ???
  5587. Return: ???
  5588. Note:    if BX is not the PSP segment of the extender, it passes the call down
  5589.       the INT 15 chain; this allows nested instances of the extender
  5590. SeeAlso: AX=BF03h
  5591. --------E-15BFDCDX0000-----------------------
  5592. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  5593.     AX = BFDCh
  5594.     DX = 0000h
  5595.     SI = 0000h
  5596. Return: DX = nonzero if installed
  5597.         DX:SI -> XBRK structure (see AX=BF02h)
  5598. SeeAlso: AX=BF02h
  5599. --------E-15BFDEBX0000-----------------------
  5600. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  5601.     AX = BFDEh
  5602.     BX = 0000h
  5603. Return: AX = ??? (0003h)
  5604.     BX = FFFFh
  5605. SeeAlso: AX=BF02h
  5606. --------E-15BFDEBX0001-----------------------
  5607. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  5608.     AX = BFDEh
  5609.     BX = 0001h
  5610. Return: BX = 0000h (success)
  5611.     CX:DX -> name of process manager executable
  5612. SeeAlso: AX=BFDEh/BX=0000h
  5613. --------E-15BFDEBX0002-----------------------
  5614. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  5615.     AX = BFDEh
  5616.     BX = 0002h
  5617.     CX:DX -> ???
  5618. Return: BX = 0000h (success)
  5619. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  5620. --------E-15BFDEBX0003-----------------------
  5621. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5622.     AX = BFDEh
  5623.     BX = 0003h
  5624. Return: BX = 0000h (success)
  5625.     CX:DX -> ???
  5626. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  5627. --------E-15BFDEBX0004-----------------------
  5628. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5629.     AX = BFDEh
  5630.     BX = 0004h
  5631.     CL = ???
  5632. Return: BX = 0000h (success)
  5633.     CX:DX -> XBRK structure (see AX=BF02h)
  5634. SeeAlso: AX=BFDEh/BX=0000h
  5635. --------E-15BFDEBX0005-----------------------
  5636. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5637.     AX = BFDEh
  5638.     BX = 0005h
  5639.     CX = new value for ???
  5640. Return: BX = 0000h (success)
  5641.     AX = old value of ???
  5642.     DS:SI -> ??? (if AX nonzero on return)
  5643.     ES:DI -> ??? (if AX zero on return)
  5644. Note:    called by DOS4GW.EXE
  5645. SeeAlso: AX=BFDEh/BX=0000h
  5646. --------E-15BFDEBX0006-----------------------
  5647. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5648.     AX = BFDEh
  5649.     BX = 0006h
  5650. Return: BX = 0000h (success)
  5651.     AH = interrupt number??? (BEh)
  5652.     CX:DX = ???
  5653. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  5654. --------E-15BFDEBX0007-----------------------
  5655. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  5656.     AX = BFDEh
  5657.     BX = 0007h
  5658.     CX:DX = ???
  5659. Return: BX = 0000h (success)
  5660. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  5661. --------E-15BFDEBX0008-----------------------
  5662. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5663.     AX = BFDEh
  5664.     BX = 0008h
  5665.     CX = segment of ???
  5666.     DS = ???
  5667. Return: BX = status
  5668.         0000h successful
  5669.         AL = ??? (80h or C0h)
  5670.         DX = ??? (0603h) if AL=C0h
  5671.         0001h failed
  5672.         AX = 0000h
  5673. Note:    called by DOS4GW.EXE
  5674. SeeAlso: AX=BFDEh/BX=0000h
  5675. --------E-15BFDEBX0009-----------------------
  5676. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  5677.     AX = BFDEh
  5678.     BX = 0009h
  5679. Return: BX = 0000h (success)
  5680.     CX:DX -> full pathname to LOAD32.EXP
  5681. SeeAlso: AX=BFDEh/BX=0000h
  5682. --------E-15BFDEBX000A-----------------------
  5683. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  5684.     AX = BFDEh
  5685.     BX = 000Ah
  5686. Return: BX = 0000h (success)
  5687.     AX = new value of ??? counter
  5688. Notes:    also resets a variety of values if the counter goes negative
  5689.     called by DOS4GW.EXE
  5690. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  5691. --------E-15BFDEBX000B-----------------------
  5692. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  5693.     AX = BFDEh
  5694.     BX = 000Bh
  5695. Return: AX = new value of ??? counter
  5696. Note:    called by DOS4GW.EXE
  5697. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  5698. --------E-15BFDEBX000C-----------------------
  5699. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5700.     AX = BFDEh
  5701.     BX = 000Ch
  5702.     CL = ???
  5703.         00h
  5704.         nonzero
  5705. Return: ???
  5706. SeeAlso: AX=BFDEh/BX=0000h
  5707. --------E-15BFDEBX000D-----------------------
  5708. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5709.     AX = BFDEh
  5710.     BX = 000Dh
  5711.     ???
  5712. Return: ???
  5713. SeeAlso: AX=BFDEh/BX=0000h
  5714. --------E-15BFDEBX000E-----------------------
  5715. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5716.     AX = BFDEh
  5717.     BX = 000Eh
  5718.     DX:CX -> ???
  5719. Return: AX = segment of handle for calling task
  5720.     BX = ??? (probably destroyed)
  5721.     DX:CX -> ???
  5722. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  5723. --------E-15BFDEBX000F-----------------------
  5724. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  5725.     AX = BFDEh
  5726.     BX = 000Fh
  5727. Return: AX = segment of handle for calling task
  5728.     BX = ??? (probably destroyed)
  5729.     DX:CX -> ???
  5730. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  5731. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  5732. --------E-15BFDEBX0010-----------------------
  5733. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  5734.     AX = BFDEh
  5735.     BX = 0010h
  5736. Return: AX = segment of caller's task handle
  5737.     BX destroyed
  5738. SeeAlso: AX=BFDEh/BX=000Fh
  5739. --------E-15BFDEBX0011-----------------------
  5740. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5741.     AX = BFDEh
  5742.     BX = 0011h
  5743. Return: CX = code segment of DVDOS4GX.DVR
  5744.     BX = ??? (0004h)
  5745. SeeAlso: AX=BFDEh/BX=0000h
  5746. --------E-15BFDEBX0012-----------------------
  5747. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5748.     AX = BFDEh
  5749.     BX = 0012h
  5750. Return: DX = code segment of DVDOS4GX.DVR
  5751.     BX = ??? (012Ch)
  5752.     CX = ??? (0006h)
  5753. SeeAlso: AX=BFDEh/BX=0000h
  5754. --------E-15BFDEBX0013-----------------------
  5755. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5756.     AX = BFDEh
  5757.     BX = 0013h
  5758. Return: DX:CX -> ???
  5759. SeeAlso: AX=BFDEh/BX=000Eh
  5760. --------E-15BFDEBX0014-----------------------
  5761. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  5762.     AX = BFDEh
  5763.     BX = 0014h
  5764.     CX = index of ??? mailbox
  5765.         (0000h-0004h valid, but no range checking done)
  5766. Return: AX,BX destroyed
  5767. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  5768. --------E-15BFDEBX0015-----------------------
  5769. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  5770.     AX = BFDEh
  5771.     BX = 0015h
  5772.     CX = index of ??? mailbox
  5773.         (0000h-0004h valid, but no range checking done)
  5774. Return: AX,BX destroyed
  5775. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  5776. --------E-15BFDEBX0016-----------------------
  5777. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  5778.     AX = BFDEh
  5779.     BX = 0016h
  5780.     CX = index of ??? mailbox
  5781.         (0000h-0004h valid, but no range checking done)
  5782. Return: AX = status
  5783.         0000h no one owns mailbox
  5784.         0001h mailbox has an owner
  5785.     BX destroyed
  5786. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  5787. --------E-15BFDEBX0017-----------------------
  5788. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  5789.     AX = BFDEh
  5790.     BX = 0017h
  5791.     CX = index of ??? mailbox
  5792.         (0000h-0004h valid, but no range checking done)
  5793. Return: AX = segment of mailbox owner's handle
  5794.     BX = segment of caller's task handle
  5795. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  5796. --------E-15BFDEBXFFFD-----------------------
  5797. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  5798.     AX = BFDEh
  5799.     BX = FFFDh
  5800. Return: CX:DX = ???
  5801. SeeAlso: AX=BFDEh/BX=FFFEh
  5802. --------E-15BFDEBXFFFE-----------------------
  5803. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  5804.     AX = BFDEh
  5805.     BX = FFFEh
  5806.     CX:DX = ???
  5807. SeeAlso: AX=BFDEh/BX=FFFDh
  5808. --------E-15BFDEBXFFFF-----------------------
  5809. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  5810.     AX = BFDEh
  5811.     BX = FFFFh
  5812. SeeAlso: AX=BFDEh/BX=0000h
  5813. --------B-15C0-------------------------------
  5814. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  5815.     AH = C0h
  5816. Return: CF set if BIOS doesn't support call
  5817.     CF clear on success
  5818.         ES:BX -> ROM table (see below)
  5819.     AH = status
  5820.         00h successful
  5821.         86h unsupported function
  5822. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  5823.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  5824.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  5825.       and a model byte at absolute address FE845h
  5826.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  5827.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  5828.       past the end of the configuration table
  5829.     the Phoenix 386 BIOS contains a second version and date string
  5830.       (presumably the last modification for that OEM version) beginning at
  5831.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  5832.       the complete information)
  5833. SeeAlso: AH=C7h,AH=C9h,AH=D1h
  5834.  
  5835. Format of ROM configuration table:
  5836. Offset    Size    Description
  5837.  00h    WORD    number of bytes following
  5838.  02h    BYTE    model (see below)
  5839.  03h    BYTE    submodel (see below)
  5840.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  5841.  05h    BYTE    feature byte 1 (see below)
  5842.  06h    BYTE    feature byte 2 (see below)
  5843.  07h    BYTE    feature byte 3 (see below)
  5844.  08h    BYTE    feature byte 4:
  5845.         bit 7: ??? (set on N51SX, CL57SX)
  5846.         bits 6-4: reserved
  5847.         bit 3: ??? (set on some 1992 PS/1's, 35SX, 40SX)
  5848.         bits 2-1: reserved
  5849.         bit 0: ??? (set on N51SX, CL57SX, 57SX)
  5850.  09h    BYTE    feature byte 5:
  5851.         reserved (0) (IBM)
  5852.         ??? (08h) (Phoenix 386 v1.10)
  5853. ---AWARD BIOS---
  5854.  0Ah  N BYTEs    AWARD copyright notice
  5855. ---Phoenix BIOS---
  5856.  0Ah    BYTE    ??? (00h)
  5857.  0Bh    BYTE    major version
  5858.  0Ch    BYTE    minor version (BCD)
  5859.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  5860. ---Quadram Quad386---
  5861.  0Ah 17 BYTEs    ASCII signature string "Quadram Quad386XT"
  5862.  
  5863. Bitfields for feature byte 1:
  5864.  bit 7    DMA channel 3 used by hard disk BIOS
  5865.  bit 6    2nd 8259 installed
  5866.  bit 5    Real-Time Clock installed
  5867.  bit 4    INT 15/AH=4Fh called upon INT 09h
  5868.  bit 3    wait for external event (INT 15/AH=41h) supported
  5869.  bit 2    extended BIOS area allocated (usually at top of RAM)
  5870.  bit 1    bus is Micro Channel instead of ISA
  5871.  bit 0    system has dual bus (Micro Channel + ISA)
  5872.  
  5873. Bitfields for feature byte 2:
  5874.  bit 7    reserved
  5875.  bit 6    INT 16/AH=09h (keyboard functionality) supported
  5876.  bit 5    INT 15/AH=C6h (get POS data) supported
  5877.  bit 4    INT 15/AH=C7h (return memory map info) supported
  5878.  bit 3    INT 15/AH=C8h (en/disable CPU functions) supported
  5879.  bit 2    non-8042 keyboard controller
  5880.  bit 1    data streaming supported
  5881.  bit 0    reserved
  5882.  
  5883. Bitfields for feature byte 3:
  5884.  bits 7-5 reserved
  5885.  bit 4    ??? (set on 1992 PS/1's, N51SX, CL57SX, 35SX?, 40SX?)
  5886.  bit 3    SCSI subsystem supported on system board
  5887.  bit 2    information panel installed
  5888.  bit 1    IML (Initial Machine Load) system
  5889.  bit 0    SCSI supported in IML
  5890.  
  5891. Values for model/submodel/revision:
  5892. Model  Submdl  Rev    BIOS date    System
  5893.  FFh    *    *    04/24/81    PC (original)
  5894.  FFh    *    *    10/19/81    PC (some bugfixes)
  5895.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  5896.  FFh    46h    ***      ???        Olivetti M15
  5897.  FEh    *    *    08/16/82    PC XT
  5898.  FEh    *    *    11/08/82    PC XT and Portable
  5899.  FEh    43h    ***      ???        Olivetti M240
  5900.  FEh    A6h    ???      ???        Quadram Quad386
  5901.  FDh    *    *    06/01/83    PCjr
  5902.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  5903.  FCh    00h    00h      ???        PC3270/AT
  5904.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  5905.  FCh    00h    > 01h      ???        7531/2 Industrial AT
  5906.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  5907.  FCh    01h    00h    09/17/87    Tandy 3000
  5908.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  5909.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  5910.  FCh    01h    00h    04/05A92    Toshiba T4500SX-C
  5911.  FCh    01h    00h    07/17o92    Toshiba T1800SX
  5912.  FCh    01h    00h    12/25n92    Toshiba T1850SX
  5913.  FCh    01h    00h    01/13E93    Toshiba T4400C
  5914.             (Those date characters are not typos)
  5915.  FCh    01h    00h    03/08/93    Compaq DESKPRO/i
  5916.  FCh    01h    00h     various    Compaq DESKPRO, SystemPro, ProSignia
  5917.  FCh    01h    20h    06/10/92    AST
  5918.  FCh    01h    30h      ???        Tandy 3000NL
  5919.  FCh    01h    ???      ???        Compaq 286/386
  5920.  FCh    02h    00h    04/21/86    PC XT-286
  5921.  FCh    02h    00h     various    Compaq LTE Lite
  5922.  FCh    02h    00h    08/05/93    Compaq Contura 486/486c/486cx
  5923.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  5924.  FCh    04h    02h      ???        PS/2 Model 50
  5925.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  5926.  FCh    04h    04h      ???        PS/2 Model 50Z
  5927.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  5928.  FCh    06h    00h      ???        IBM 7552-140 "Gearbox"
  5929.  FCh    06h    01h      ???        IBM 7552-540 "Gearbox"
  5930.  FCh    08h    ***      ???        Epson, unknown model
  5931.  FCh    08h    00h      ???        PS/2 Model 25/286
  5932.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  5933.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  5934.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  5935.  FCh    20h    00h    02/18/93    Compaq ProLinea
  5936.  FCh    30h    ***      ???        Epson, unknown model
  5937.  FCh    31h    ***      ???        Epson, unknown model
  5938.  FCh    33h    ***      ???        Epson, unknown model
  5939.  FCh    42h    ***      ???        Olivetti M280
  5940.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  5941.  FCh    48h    ***      ???        Olivetti M290
  5942.  FCh    4Fh    ***      ???        Olivetti M250
  5943.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  5944.  FCh    51h    ***      ???        Olivetti PCS286
  5945.  FCh    52h    ***      ???        Olivetti M300
  5946.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  5947.  FCh    81h    01h      ???        "OEM machine"
  5948.  FCh    82h    01h      ???        "OEM machine"
  5949.  FCh    94h    00h      ???        Zenith 386
  5950.  FBh    00h    01h    01/10/86    PC XT-089, Enh Keyb, 3.5" support
  5951.  FBh    00h    02h    05/09/86    PC XT
  5952.  FBh    4Ch    ***      ???        Olivetti M200
  5953.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  5954.  FAh    00h    01h    12/12/86    PS/2 Model 30
  5955.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  5956.  FAh    30h    00h      ???        IBM Restaurant Terminal
  5957.  FAh    4Eh    ***      ???        Olivetti M111
  5958.  FAh    FEh    00h      ???        IBM PCradio 9075
  5959.  F9h    00h    00h    09/13/85    PC Convertible
  5960.  F9h    FFh    00h      ???        PC Convertible
  5961.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  5962.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  5963.  F8h    02h    00h      ???        PS/2 Model 55-5571
  5964.  F8h    04h    00h      ???        PS/2 Model 70
  5965.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  5966.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  5967.  F8h    05h    00h      ???        IBM PC 7568
  5968.  F8h    06h    00h      ???        PS/2 Model 55-5571
  5969.  F8h    07h    00h      ???        IBM PC 7561/2
  5970.  F8h    07h    01h      ???        PS/2 Model 55-5551
  5971.  F8h    07h    02h      ???        IBM PC 7561/2
  5972.  F8h    07h    03h      ???        PS/2 Model 55-5551
  5973.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  5974.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  5975.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  5976.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  5977.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  5978.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  5979.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  5980.  F8h    0Eh    00h      ???        PS/1 486SX
  5981.  F8h    0Fh    00h      ???        PS/1 486DX
  5982.  F8h    10h    00h      ???        PS/2 Model 55-5551
  5983.  F8h    11h    00h    10/01/90    PS/2 Model 90 XP (25 MHz 486)
  5984.  F8h    12h    00h      ???        PS/2 Model 95 XP
  5985.  F8h    13h    00h    10/01/90    PS/2 Model 90 XP (33 MHz 486)
  5986.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486), 95 XP
  5987.  F8h    15h    00h      ???        PS/2 Model 90 XP
  5988.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  5989.  F8h    17h    00h      ???        PS/2 Model 90 XP
  5990.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  5991.  F8h    1Ah    00h      ???        PS/2 Model 95 XP
  5992.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  5993.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  5994.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  5995.  F8h    23h    00h      ???        PS/2 Model L40 SX
  5996.  F8h    23h    01h      ???        PS/2 Model L40 SX (20 MHz 386SX)
  5997.  F8h    25h    00h      ???        PS/2 Model 57 SLC
  5998.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  5999.  F8h    26h    00h      ???        PS/2 Model 57 SX
  6000.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  6001.  F8h    28h    00h      ???        PS/2 Model 95 XP
  6002.  F8h    29h    00h      ???        PS/2 Model 90 XP
  6003.  F8h    2Ah    00h      ???        PS/2 Model 95 XP (50 MHz 486)
  6004.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  6005.  F8h    2Ch    00h      ???        PS/2 Model 95 XP
  6006.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  6007.  F8h    2Dh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX)
  6008.  F8h    2Eh    00h      ???        PS/2 Model 95 XP
  6009.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  6010.  F8h    2Fh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX + 487SX)
  6011.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  6012.  F8h    33h    00h      ???        PS/2 Model 30-386
  6013.  F8h    34h    00h      ???        PS/2 Model 25-386
  6014.  F8h    36h    00h      ???        PS/2 Model 95 XP
  6015.  F8h    37h    00h      ???        PS/2 Model 90 XP
  6016.  F8h    38h    00h      ???        PS/2 Model 57
  6017.  F8h    39h    00h      ???        PS/2 Model 95 XP
  6018.  F8h    3Fh    00h      ???        PS/2 Model 90 XP
  6019.  F8h    40h    00h      ???        PS/2 Model 95 XP
  6020.  F8h    41h    00h      ???        PS/2 Model 77
  6021.  F8h    45h    00h      ???        PS/2 Model 90 XP (Pentium)
  6022.  F8h    46h    00h      ???        PS/2 Model 95 XP (Pentium)
  6023.  F8h    47h    00h      ???        PS/2 Model 90/95 E (Pentium)
  6024.  F8h    48h    00h      ???        PS/2 Model 85
  6025.  F8h    49h    00h      ???        PS/ValuePoint 325T
  6026.  F8h    4Ah    00h      ???        PS/ValuePoint 425SX
  6027.  F8h    4Bh    00h      ???        PS/ValuePoint 433DX
  6028.  F8h    4Eh    00h      ???        PS/2 Model 295
  6029.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  6030.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  6031.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  6032.  F8h    56h    00h      ???        PS/2 Model CL57 SX
  6033.  F8h    57h    00h      ???        PS/2 Model 90 XP
  6034.  F8h    58h    00h      ???        PS/2 Model 95 XP
  6035.  F8h    59h    00h      ???        PS/2 Model 90 XP
  6036.  F8h    5Ah    00h      ???        PS/2 Model 95 XP
  6037.  F8h    5Bh    00h      ???        PS/2 Model 90 XP
  6038.  F8h    5Ch    00h      ???        PS/2 Model 95 XP
  6039.  F8h    5Dh    00h      ???        PS/2 Model N51 SLC
  6040.  F8h    5Eh    00h      ???        IBM ThinkPad 700
  6041.  F8h    61h    ***      ???        Olivetti P500
  6042.  F8h    62h    ***      ???        Olivetti P800
  6043.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  6044.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  6045.  F8h    81h    00h      ???        PS/2 Model 55-5502
  6046.  F8h    87h    00h      ???        PS/2 Model N33SX
  6047.  F8h    88h    00h      ???        PS/2 Model 55-5530T
  6048.  F8h    97h    00h      ???        PS/2 Model 55 Note N23SX
  6049.  F8h    99h    00h      ???        PS/2 Model N51 SX
  6050.  F8h    F2h    30h      ???        Reply Model 32
  6051.  F8h    F6h    30h      ???        Memorex Telex
  6052.  F8h    FDh    00h      ???        IBM Processor Complex (with VPD)
  6053.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  6054.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  6055.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  6056.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  6057.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  6058.  E1h    00h    00h      ???        PS/2 Model 55-5530 Laptop
  6059.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  6060.  30h    ???    ???      ???        Sperry PC
  6061.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  6062.  ???    56h    ???      ???        Olivetti, unknown model
  6063.  ???    74h    ???      ???        Olivetti, unknown model
  6064.     * This BIOS call is not implemented in these early versions.
  6065.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  6066.    ** These BIOS versions require the DASDDRVR.SYS patches.
  6067.   *** These Olivetti and Epson machines store the submodel in the byte at
  6068.     F000h:FFFDh.
  6069.  
  6070. Values for Dell model byte:
  6071.  02h    Dell 200
  6072.  03h    Dell 300
  6073.  05h    Dell 220
  6074.  06h    Dell 310
  6075.  07h    Dell 325
  6076.  09h    Dell 310A
  6077.  0Ah    Dell 316
  6078.  0Bh    Dell 220E
  6079.  0Ch    Dell 210
  6080.  0Dh    Dell 316SX
  6081.  0Eh    Dell 316LT
  6082.  0Fh    Dell 320LX
  6083.  11h    Dell 425E
  6084. --------B-15C1-------------------------------
  6085. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  6086.     AH = C1h
  6087. Return: CF set on error
  6088.     CF clear if successful
  6089.         ES = segment of data area
  6090. SeeAlso: AH=04h"ABIOS"
  6091. --------M-15C200-----------------------------
  6092. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  6093.     AX = C200h
  6094.     BH = new state
  6095.         00h disabled
  6096.         01h enabled
  6097. Return: CF set on error
  6098.     AH = status
  6099.         00h successful
  6100.         01h invalid function
  6101.         02h invalid input
  6102.         03h interface error
  6103.         04h need to resend
  6104.         05h no device handler installed
  6105. --------M-15C201-----------------------------
  6106. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  6107.     AX = C201h
  6108. Return: CF set on error
  6109.         AH = status (see AX=C200h)
  6110.     CF clear if successful
  6111.         BH = device ID
  6112.         BL = value returned by attached device after reset
  6113.         AAh if device is a mouse
  6114. Note:    after successful completion of this call, the pointing device is set
  6115.       as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
  6116.       scaling 1:1, unchanged data package size
  6117. SeeAlso: INT 33/AX=0000h
  6118. --------M-15C202-----------------------------
  6119. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  6120.     AX = C202h
  6121.     BH = sampling rate
  6122.         00h 10/second
  6123.         01h 20/second
  6124.         02h 40/second
  6125.         03h 60/second
  6126.         04h 80/second
  6127.         05h 100/second
  6128.         06h 200/second
  6129. Return: CF set on error
  6130.         AH = status (see AX=C200h)
  6131. SeeAlso: INT 33/AX=001Ch
  6132. --------M-15C203-----------------------------
  6133. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  6134.     AX = C203h
  6135.     BH = resolution
  6136.         00h one count per mm
  6137.         01h two counts per mm
  6138.         02h four counts per mm
  6139.         03h eight counts per mm
  6140. Return: CF set on error
  6141.         AH = status (see AX=C200h)
  6142. --------M-15C204-----------------------------
  6143. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  6144.     AX = C204h
  6145. Return: CF set on error
  6146.         AH = status (see AX=C200h)
  6147.     CF clear if successful
  6148.         BH = device ID
  6149. --------M-15C205-----------------------------
  6150. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  6151.     AX = C205h
  6152.     BH = data package size (1 - 8 bytes)
  6153. Return: CF set on error
  6154.         AH = status (see AX=C200h)
  6155. Note:    the pointing device is set as follows: disabled, 100 Hz sample rate,
  6156.       resolution 4 counts/mm, scaling 1:1
  6157. SeeAlso: AX=C201h
  6158. --------M-15C206-----------------------------
  6159. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
  6160.     AX = C206h
  6161.     BH = subfunction
  6162.         00h return device status
  6163.         Return: BL = pointing device status (see below)
  6164.             CL = resolution (see AX=C203h)
  6165.             DL = sample rate, reports per second
  6166.         01h set scaling at 1:1
  6167.         02h set scaling at 2:1
  6168. Return: CF set on error
  6169.         AH = status (see AX=C200h)
  6170.  
  6171. Bitfields for pointing device status:
  6172.  bit 0    right button pressed
  6173.  bit 1    reserved
  6174.  bit 2    left button pressed
  6175.  bit 3    reserved
  6176.  bit 4    0 if 1:1 scaling, 1 if 2:1 scaling
  6177.  bit 5    device enabled
  6178.  bit 6    0 if stream mode, 1 if remote mode
  6179.  bit 7    reserved
  6180. --------M-15C207-----------------------------
  6181. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  6182.     AX = C207h
  6183.     ES:BX -> FAR user device handler
  6184. Return: CF set on error
  6185.         AH = status (see AX=C200h)
  6186. Note:    when the subroutine is called, it is passed the following values on
  6187.       the stack; the handler should return with a FAR return without
  6188.       popping the stack:
  6189.         WORD 1: status (see below)
  6190.         WORD 2: X data (high byte = 00h)
  6191.         WORD 3: Y data (high byte = 00h)
  6192.         WORD 4: 0000h
  6193. SeeAlso: INT 33/AX=000Ch
  6194.  
  6195. Bitfields for status:
  6196.  bits 15-8 reserved (0)
  6197.  bit 7    Y data overflowed
  6198.  bit 6    X data overflowed
  6199.  bit 5    Y data is negative
  6200.  bit 4    X data is negative
  6201.  bit 3    reserved (1)
  6202.  bit 2    reserved (0)
  6203.  bit 1    right button pressed
  6204.  bit 0    left button pressed
  6205. --------B-15C3------------------------------
  6206. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  6207.     AH = C3h
  6208.     AL = function
  6209.         00h disable PS/2 watchdog timer
  6210.         01h enable PS/2 watchdog timer
  6211.         BX = timer counter (0001h-00FFh)
  6212.         02h disable Gearbox system
  6213.         03h enable Gearbox system
  6214. Return: CF set on error
  6215.     CF clear if successful
  6216. Note:    the watchdog timer generates an NMI
  6217. --------B-15C4-------------------------------
  6218. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  6219.     AH = C4h
  6220.     AL = subfunction
  6221.         00h return base POS register address
  6222.         01h enable selected slot for setup
  6223.         BL = slot number (1 to 8)
  6224.         02h disable setup for all slots
  6225. Return: CF set on error
  6226.     DX = base POS register address (if subfunction 00h)
  6227. SeeAlso: AH=C6h
  6228. --------B-15C5-------------------------------
  6229. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  6230.     AH = C5h
  6231.     AL = interrupt being invoked
  6232.         01h INT 19
  6233.         02h INT 14
  6234.         03h INT 16
  6235.         04h INT 40 (floppy INT 13)
  6236.         05h INT 17
  6237.         06h INT 10
  6238.         07h INT 12
  6239.         08h INT 11
  6240.         09h INT 1A
  6241. Return: all registers except AX must be preserved
  6242. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  6243.       handlers on the PS/2 Models 30/286, 50Z, and 95
  6244.     default handler does nothing and returns CF clear for the above
  6245.       subfunctions, CF set and AH=86h for all other subfunctions
  6246.     value of AX passed to the original interrupt handler is pushed on
  6247.       stack immediately prior to call
  6248. --------B-15C6-------------------------------
  6249. INT 15 U - later PS/2 models - GET POS DATA
  6250.     AH = C6h
  6251.     ???
  6252. Return: ???
  6253. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  6254.     IBM reports that "there are a number of problems with this call" and
  6255.       does not recommend its use.
  6256. SeeAlso: AH=C4h
  6257. --------B-15C7-------------------------------
  6258. INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
  6259.     AH = C7h
  6260.     DS:SI -> user supplied memory map table (see below)
  6261. Note:    call AH=C0h and examine bit 4 of feature byte 2 to check if this
  6262.       function is supported
  6263. Return: CF set on error, clear if successful
  6264. SeeAlso: AH=C0h,AH=C9h,AH=D1h
  6265.  
  6266. Format of memory-map table structure:
  6267. Offset    Size    Description
  6268.  00h    WORD    length of table (excluding this word)
  6269.  02h    DWORD    local memory between 1M and 16M, in 1K blocks
  6270.  06h    DWORD    local memory between 16M and 4G, in 1K blocks
  6271.  0Ah    DWORD    system memory between 1M and 16M, in 1K blocks
  6272.  0Eh    DWORD    system memory between 16M and 4G, in 1K blocks
  6273.  12h    DWORD    cacheable memory between 1M and 16M, in 1K blocks
  6274.  16h    DWORD    cacheable memory between 16M and 4G, in 1K blocks
  6275.  1Ah    DWORD    1K blocks before start of non-system memory between 1M and 16M
  6276.  1Eh    DWORD    1K blocks before start of non-system memory between 16M and 4G
  6277.  22h  2 DWORDs    reserved
  6278. --------B-15C8-------------------------------
  6279. INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
  6280.     AH = C8h
  6281.     AL = function
  6282.         00h disable cache or (90 and 95) disable cache L1
  6283.         01h enable cache or (90 and 95) enable cache L1
  6284.         ---models 90 and 95 only---
  6285.         02h disable cache L2
  6286.         03h enable cache L2
  6287.         04h disable both caches
  6288.         05h enable both caches
  6289.         06h return status of both caches
  6290.         07h-FFh Reserved
  6291. Return: CF set on error
  6292.     CF clear if successful
  6293.         AH = status (see below)
  6294.     For subfunction 06h only:
  6295.         BH = status of cache L2
  6296.         00h enabled
  6297.         01h disabled or not installed
  6298.         BL = status of cache L1 (same codes as BH)
  6299. Notes:     supported by at least PS/2 70, 70/486, 80-A21, 90, 95
  6300.     call AH=C0h and examine bit 3 of feature byte 2 to check if this
  6301.       function is supported.
  6302.     on a 486 system, any external caches must be disabled when the
  6303.       on-chip cache (L1) is disabled.
  6304. SeeAlso: AH=C0h
  6305.  
  6306. Values for status:
  6307.  00h    operation successful
  6308.  01h    function choice (in AL) is invalid
  6309.  02h    NVRAM data is invalid
  6310.  03h    cache test error
  6311.  04h    (90 and 95 only) cannot perform operation requested due to state of
  6312.       other cache (see note above)
  6313.  05h    no L2 cache is present
  6314. --------B-15C9-------------------------------
  6315. INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  6316.     AH = C9h
  6317.     AL = 10h (may be required on some non-PS BIOSes)
  6318. Return: CF clear if successful
  6319.         AH = 00h
  6320.         CH = CPU type
  6321.         03h 80386DX or clone
  6322.         04h 80486
  6323.         23h 80386SX or clone
  6324.         CL = mask revision (stepping level)
  6325.         80386:
  6326.             03h B1
  6327.             05h D0
  6328.             08h D1/D2/E1
  6329.         80386SX:
  6330.             04h A0
  6331.             05h    B
  6332.             08h C/D1
  6333.     CF set on error
  6334.         AH = status (80h,86h = function not supported)
  6335. Notes:    the BIOS must save DX at startup in order to be able to support this
  6336.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  6337.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  6338. --------B-15CA-------------------------------
  6339. INT 15 U - PS/2 Model 95 - RESERVED
  6340.     AH = CAh
  6341.     ???
  6342. Return: ???
  6343. --------B-15CB-------------------------------
  6344. INT 15 U - PS/2 Model 95 - RESERVED
  6345.     AH = CBh
  6346.     ???
  6347. Return: ???
  6348. --------B-15CC-------------------------------
  6349. INT 15 U - PS/2 Model 95 - RESERVED
  6350.     AH = CCh
  6351.     ???
  6352. Return: ???
  6353. --------B-15CD-------------------------------
  6354. INT 15 U - PS/2 Model 95 - RESERVED
  6355.     AH = CDh
  6356.     ???
  6357. Return: ???
  6358. --------B-15CE--BL00-------------------------
  6359. INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
  6360.     AH = CEh
  6361.     BL = 00h-0Eh arbitration level to be allocated
  6362.          0Fh-FFh reserved
  6363.     AL = option byte
  6364.         bit 7-1: reserved (0)
  6365.         bit 0: 0 = need DMA channel for arbitration level requested
  6366.            1 = no channel required for arbitration level
  6367. Return: CF set on error
  6368.         AH = status (80h,86h = function not supported)
  6369.     CF clear on success
  6370.         AL = channel number
  6371.         00h-07h channel number allocated for the arbiration level
  6372.         08h-FEh reserved
  6373.         FFh    no channel requested for arbitration level
  6374.         AH = status
  6375.         00h success
  6376.         01h arbitration level not available
  6377.         02h channel not available
  6378.         03h invalid arbitration level passed
  6379. Notes:     arbitration level 00h has the highest priority, 0Eh the lowest
  6380.      to perform a DMA transfer operation, be sure to call this function
  6381.        first, and call AH=CFh afterward.  Failure to use this function
  6382.        can cause unpredictable results.
  6383. SeeAlso: AH=CFh
  6384. --------B-15CF-------------------------------
  6385. INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
  6386.     AH = CFh
  6387.     BL = arbitration level to be deallocated (see AH=CEh)
  6388. Return: CF set on error
  6389.         AH = status (80h,86h = function not supported)
  6390.     CF clear on success
  6391.         AH = status
  6392.         00h success
  6393.         04h arbitration level not allocated
  6394. SeeAlso: AH=CEh
  6395. --------B-15D0-------------------------------
  6396. INT 15 - later PS/2s - RESERVED
  6397.     AH = D0h
  6398.     ???
  6399. Return: ???
  6400. --------B-15D100DX0000-----------------------
  6401. INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
  6402.     AX = D100h
  6403.     DX = 0000h (reserved, must set to 0)
  6404. Return: BL = size of one DDT entry, in bytes
  6405.     CX = number of DDT entries
  6406.     AH = return code (see below)
  6407.     CF set on error
  6408.     CF clear on success
  6409. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
  6410.  
  6411. Values for return code:
  6412.  00h    success
  6413.  01h    requested DDT entry not found
  6414.  02h    DDT data not valid
  6415.  86h    function not supported
  6416. --------B-15D101-----------------------------
  6417. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
  6418.     AX = D101h
  6419.     BX = number of requested entry (starting with 1)
  6420.     DX = 0000h (reserved, must be set to 0)
  6421.     ES:DI -> buffer to contain DDT entry (see below)
  6422. Return:    AH = return code (see AX=D100h)
  6423.     CF set on error
  6424.     CF clear on success
  6425.         ES:DI buffer filled with DDT entry
  6426. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
  6427.  
  6428. Format of DDT:
  6429. Offset    Size    Description
  6430.  00h    BYTE    bits 7-4: reserved (set to 0)
  6431.         bits 3-0: slot of device (0 = system board)
  6432.  01h    BYTE    bits 7-4: second interrupt for this device (0 = none)
  6433.         bits 3-0: first interrupt for this device (0 = none)
  6434.  02h    BYTE    bits 7-4: second arbitration level for this device
  6435.         bits 3-0: first arbitration level for this device
  6436.  03h    WORD    DDT indicators (see below)
  6437.  05h    BYTE    reserved (0)
  6438.  06h    WORD    device ID (0 = none)
  6439.  08h    WORD    starting address of first  I/O block (0 = none)
  6440.  0Ah    WORD    starting address of second I/O block (0 = none)
  6441.  OCh    WORD    starting address of third  I/O block (0 = none)
  6442.  OEh    DWORD    start of first non-system memory block (0 = none)
  6443.  12h    WORD    size of first non-system memory block (in kilobytes)
  6444.  14h    DWORD    start of second non-system memory block (0 = none)
  6445.  18h    WORD    size of second non-system memory block (in kilobytes)
  6446.  1Ah    BYTE    implementation identifier of the device
  6447.  1Bh    BYTE    implementation revision level of the device
  6448. Note:    I/O block addresses and non-system memory addresses are listed in
  6449.       ascending order in each DDT entry.
  6450.  
  6451. Bitfields for DDT indicators:
  6452.  bit 15 reserved (0)
  6453.  bit 14 second arbitration level exists
  6454.  bit 13 first arbitration level exists
  6455.  bit 12 serial interface is RS-422
  6456.  bit 11 not address limited
  6457.  bit 10 DMA channel used
  6458.  bit 9    second arbitration level can be shared
  6459.  bit 8    first arbitration level can be shared
  6460.  bits 7-0 reserved (0)
  6461. --------B-15D102-----------------------------
  6462. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
  6463.     AX = D102h
  6464.     BX = entry number at which to start searching
  6465.     CX = requested I/O port address
  6466.     DX = 0000h (reserved, must be set to 0)
  6467.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  6468. Return:    AH = return code (see AX=D100h)
  6469.     BX = DDT entry number where I/O port was found, or total entries
  6470.          plus 1 if port was not found.
  6471.     CF set on error
  6472.     CF clear on success
  6473.         ES:DI buffer filled with DDT entry
  6474. Desc:    the DDT is searched from the specified entry for the I/O port in CX,
  6475.       and the first entry in which it is found is returned
  6476. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
  6477. --------B-15D103DX0000-----------------------
  6478. INT 15 - later PS/2s - RETURN ENTIRE DDT
  6479.     AX = D103h
  6480.     DX = 0000h (reserved, must be set to 0)
  6481.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  6482. Return:    AH = return code (see AX=D100h)
  6483.     CF set on error
  6484.     CF clear on success
  6485.         ES:DI buffer filled with DDT entry
  6486. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
  6487. --------B-15D104-----------------------------
  6488. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
  6489.     AX = D104h
  6490.     BX = entry number at which to start searching
  6491.     CX = requested device ID
  6492.     DX = 0000h (reserved, must be set to 0)
  6493.     ES:DI -> buffer to contain DDT entry (see AX=D101h for format)
  6494. Return:    AH = return code (see AX=D100h)
  6495.     BX = DDT entry number where device ID was found, or total entries
  6496.          plus 1 if port was not found.
  6497.     CF set on error
  6498.     CF clear on success
  6499.         ES:DI buffer filled with DDT entry
  6500. Desc:    the DDT is searched from the specified entry for the device ID in CX,
  6501.       and the first entry in which it is found is returned.
  6502. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
  6503. --------B-15D2-------------------------------
  6504. INT 15 - later PS/2s - RESERVED
  6505.     AH = D2h
  6506.     ???
  6507. Return: ???
  6508. --------B-15D3-------------------------------
  6509. INT 15 - later PS/2s - RESERVED
  6510.     AH = D3h
  6511.     ???
  6512. Return: ???
  6513. --------B-15D4-------------------------------
  6514. INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
  6515.     AH = D4h
  6516.     DL = logical fixed disk drive number
  6517. Return:    AH = return code
  6518.         00h success
  6519.         01h specified logical drive number is invalid
  6520.         86h function not supported
  6521.         80h function not supported (on PCjr and PC)
  6522.     CF set on error
  6523.     CF clear on success
  6524.         AL = physical fixed disk drive number
  6525. --------B-15D5-------------------------------
  6526. INT 15 - later PS/2s - RESERVED
  6527.     AH = D5h
  6528.     ???
  6529. Return: ???
  6530. --------B-15D600BL00-------------------------
  6531. INT 15 - later PS/2s - READ BOOT DEVICE ID
  6532.     AX = D600h
  6533.     BL = 00h
  6534.     DX = device ID
  6535. Return: CF clear if successful
  6536.         AH = 00h
  6537.     CF set on error
  6538.         AH = status (86h for function not supported)
  6539. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
  6540. --------B-15D600BL01-------------------------
  6541. INT 15 - later PS/2s - WRITE BOOT DEVICE ID
  6542.     AX = D600h
  6543.     BL = 01h
  6544.     DX = device ID
  6545. Return: CF clear on success
  6546.         AH = 00h
  6547.     CF set on error
  6548.         AH = status (86h for function not supported)
  6549. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
  6550. --------B-15D601BL00-------------------------
  6551. INT 15 - later PS/2s - READ BOOT DEVICE KEY
  6552.     AX = D601h
  6553.     BL = 00h
  6554.     DX = device ID
  6555. Return: CF clear on success
  6556.         AH = 00h
  6557.     CF set on error
  6558.         AH = status (86h for function not supported)
  6559. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
  6560. --------B-15D601BL01-------------------------
  6561. INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
  6562.     AX = D601h
  6563.     BL = 01h
  6564.     DX = device ID
  6565. Return: CF clear on success
  6566.         AH = 00h
  6567.     CF set on error
  6568.         AH = status (86h for function not supported)
  6569. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
  6570. --------B-15D602-----------------------------
  6571. INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
  6572.     AX = D602h
  6573. Return: CF clear on success
  6574.         AH = 00h
  6575.         AL = status of reference-partition boot request
  6576.         00h boot not requested
  6577.         01h boot requested
  6578.     CF set on error
  6579.         AH = status (86h for function not supported)
  6580. SeeAlso: AX=D601h/BL=00h
  6581. --------X-15D800-----------------------------
  6582. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  6583.     AX = D800h
  6584.     CL = slot number (including embedded and virtual)
  6585. Return: CF clear if successful
  6586.         AH = 00h
  6587.     CF set on error
  6588.         AH = error code
  6589.         80h invalid slot number
  6590.         82h EISA CMOS corrupt
  6591.         83h empty slot
  6592.         86h invalid BIOS-FW function call
  6593.         87h invalid system configuration
  6594.     AL bit flags
  6595.         bit 7: set if duplicate IDs
  6596.         bit 6: set if product ID readable
  6597.         bits 4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  6598.         bits 0-3: duplicate ID number if bit 7 set
  6599.     BH = major revision level of configuration utility
  6600.     BL = minor revision level of configuration utility
  6601.     CX = checksum of configuration file
  6602.     DH = number of device functions
  6603.     DL = combined function information byte
  6604.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  6605. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  6606. SeeAlso: AX=D801h,AX=D804h
  6607. --------X-15D801-----------------------------
  6608. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  6609.     AX = D801h
  6610.     CH = function number to read
  6611.     CL = slot number (including embedded and virtual)
  6612.     DS:SI -> 320-byte buffer for standard configuration data block
  6613. Return: CF clear if successful
  6614.         AH = 00h
  6615.         DS:SI buffer filled
  6616.     CF set on error
  6617.         AH = error code
  6618.         80h invalid slot number
  6619.         81h invalid function number
  6620.         82h EISA CMOS corrupt
  6621.         83h empty slot
  6622.         86h invalid BIOS-FW function call
  6623.         87h invalid system configuration
  6624.     BX destroyed
  6625. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  6626. --------X-15D802-----------------------------
  6627. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  6628.     AX = D802h
  6629.     BH = EISA config utility major revision level
  6630.     BL = EISA config utility minor revision level
  6631. Return: CF clear if successful
  6632.         AH = 00h
  6633.     CF set on error
  6634.         AH = error code
  6635.         84h error clearing CMOS
  6636.         86h invalid BIOS-FW function call
  6637.         88h config utility version not supported
  6638. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  6639. SeeAlso: AX=D803h
  6640. --------X-15D803-----------------------------
  6641. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  6642.     AX = D803h
  6643.     CX = length of data structure (0000h = empty slot)
  6644.         includes two bytes for config file checksum
  6645.     DS:SI -> configuration data
  6646. Return: CF clear if successful
  6647.         AH = 00h
  6648.     CF set on error
  6649.         AH = error code
  6650.         84h error clearing CMOS
  6651.         85h EISA CMOS is full
  6652.         86h invalid BIOS-FW function call
  6653. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  6654. SeeAlso: AX=D802h
  6655. --------X-15D804-----------------------------
  6656. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  6657.     AX = D804h
  6658.     CL = slot number (including embedded and virtual)
  6659. Return: CF clear if successful
  6660.         AH = 00h
  6661.     CF set on error
  6662.         AH = error code
  6663.         80h invalid slot number
  6664.         83h empty slot
  6665.         86h invalid BIOS-FW function call
  6666.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  6667. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  6668. SeeAlso: AX=D800h
  6669. --------b-15D820-----------------------------
  6670. INT 15 - Compaq LTE Lite - GET ???
  6671.     AX = D820h
  6672.     DS:SI -> 17-byte buffer for ???
  6673. Return: DS:SI buffer filled (first byte is length of remaining data, unless
  6674.       it is greater than 10h, in which case the second byte is 00h and no
  6675.       other data is returned)
  6676. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  6677.       486/486c/486cx and recent DESKPRO/i ROMs
  6678. SeeAlso: AX=D821h
  6679. --------b-15D821-----------------------------
  6680. INT 15 - Compaq LTE Lite - SET ???
  6681.     AX = D821h
  6682.     DS:SI -> counted string (should not be more than 16 bytes)
  6683. Return: AH = 00h
  6684. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  6685.       486/486c/486cx and recent DESKPRO/i ROMs
  6686. SeeAlso: AX=D820h
  6687. --------b-15D822BL00-------------------------
  6688. INT 15 - Compaq EISA System ROM 04/08/93 - GET ???
  6689.     AX = D822h
  6690.     BL = 00h
  6691.     CX = size of buffer or 0000h to retrieve required buffer size
  6692.     DS:SI -> buffer for ??? (if CX nonzero)
  6693. Return: CF clear if successful
  6694.         AH = 00h
  6695.         DH = 08h
  6696.         CX = required buffer size to retrieve all data (if CX=0 on entry)
  6697.         DS:SI buffer filled (if CX nonzero on entry)
  6698.     CF set on error (BL nonzero)
  6699.         AH = 86h
  6700. --------b-15D823-----------------------------
  6701. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  6702.     AX = D823h
  6703.     BL = subfunction??? (00h or 80h)
  6704.     BH = ???
  6705.     DS:SI -> buffer for ??? (see below)
  6706. Return: CF clear if successful
  6707.         AH = 00h
  6708.         DH = 08h
  6709.         DL = ???
  6710.     CF set on error
  6711.         AH = error code
  6712.         86h BL neither 00h nor 80h
  6713.         87h ???
  6714.  
  6715. Format of buffer:
  6716. Offset    Size    Description
  6717.  00h    BYTE    ???
  6718.  01h    WORD    ???
  6719.  03h    BYTE    ???
  6720.  04h    WORD    ???
  6721.  06h    WORD    ???
  6722.     ???
  6723. ----------15D824-----------------------------
  6724. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  6725.     AX = D824h
  6726.     CX = ???
  6727.     DS:SI -> ASCIZ string containing ???
  6728. Return: CF clear if successful
  6729.         AH = 00h
  6730.         CX = ???
  6731.     CF set on error
  6732.         AH = error code
  6733.         87h ??? failed
  6734.         88h ???
  6735. Note:    these functions are only available if ??? from keyboard controller
  6736.       command C0h
  6737. ----------15D825-----------------------------
  6738. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  6739.     AX = D825h
  6740.     CX = ???
  6741.     SI = ???
  6742.     DI = ???
  6743.     ???
  6744. Return: CF clear if successful
  6745.         AH = 00h
  6746.         CX = ???
  6747.     CF set on error
  6748.         AH = error code
  6749.         87h ??? failed
  6750.         88h ???
  6751.             CX = ???
  6752. Note:    these functions are only available if ??? from keyboard controller
  6753.       command C0h
  6754. ----------15D826-----------------------------
  6755. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  6756.     AX = D826h
  6757.     BX = ???
  6758.     CX = size of buffer in bytes
  6759.     DS:SI -> buffer for ???
  6760.     ???
  6761. Return: CF clear if successful
  6762.         AH = 00h
  6763.         CX = ???
  6764.     CF set on error
  6765.         AH = error code
  6766.         87h ??? failed
  6767.         88h ???
  6768. Note:    these functions are only available if ??? from keyboard controller
  6769.       command C0h
  6770. --------X-15D8-------------------------------
  6771. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  6772.     AH = D8h
  6773.     AL = 80h to 84h
  6774.     other registers as appropriate for AL=00h to 04h
  6775. Return: as appropriate for AL=00h to 04h
  6776. Note:    these functions are identical to AX=D800h to D804h, except that they
  6777.       should be called when using 32-bit CS addressing mode (pointers use
  6778.       ESI rather than SI as offset) instead of 16-bit addressing mode
  6779. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  6780. --------b-15D8-------------------------------
  6781. INT 15 - Compaq EISA System ROM 04/08/93 - 32-bit CS ADDRESSING MODE CALLS
  6782.     AH = D8h
  6783.     AL = A0h to A6h
  6784.     other registers as appropriate for AL=20h to 26h
  6785. Return: as appropriate for AL=20h to 26h
  6786. Note:    these functions are identical to AX=D820h to D826h, except that they
  6787.       should be called when using 32-bit CS addressing mode
  6788. --------Q-15DE00-----------------------------
  6789. INT 15 - DESQview - GET PROGRAM NAME
  6790.     AX = DE00h
  6791. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  6792.         the "Switch Windows" menu (see below)
  6793. Note:    always returns AX=0000h under DESQview/X
  6794. SeeAlso: AX=DE07h
  6795.  
  6796. Format of program entry in DESQVIEW.DVO:
  6797. Offset    Size    Description
  6798.  00h    BYTE    length of name (FFh if end of file)
  6799.  01h  N BYTEs    name
  6800.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  6801.     BYTE    program type
  6802.         00h normal program
  6803.         04h divider
  6804.         80h Delete a Program
  6805.         81h Change a Program
  6806.     WORD    ??? apparently always 0000h
  6807. --------Q-15DE01-----------------------------
  6808. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  6809.     AX = DE01h
  6810. Return: nothing
  6811. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  6812.     NOP for DESQview/X
  6813. --------Q-15DE02-----------------------------
  6814. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  6815.     AX = DE02h
  6816. Return: nothing
  6817. Note:    this call is a NOP in DV 2.x
  6818. SeeAlso: AX=DE03h
  6819. --------Q-15DE03-----------------------------
  6820. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  6821.     AX = DE03h
  6822. Return: AX = ??? for current window
  6823.     BX = ??? for current window
  6824. Note:    this call is a NOP in DV 2.x
  6825. SeeAlso: AX=DE02h
  6826. --------Q-15DE04-----------------------------
  6827. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  6828.     AX = DE04h
  6829. Return: BX = bytes of common memory available
  6830.     CX = largest block available
  6831.     DX = total common memory in bytes
  6832. SeeAlso: AX=DE05h,AX=DE06h
  6833. --------Q-15DE05-----------------------------
  6834. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  6835.     AX = DE05h
  6836. Return: BX = KB of memory available
  6837.     CX = largest block available
  6838.     DX = total conventional memory in KB
  6839. SeeAlso: AX=DE04h,AX=DE06h
  6840. --------Q-15DE06-----------------------------
  6841. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  6842.     AX = DE06h
  6843. Return: BX = KB of expanded memory available
  6844.     CX = largest block available
  6845.     DX = total expanded memory in KB
  6846. SeeAlso: AX=DE04h,AX=DE05h
  6847. --------Q-15DE07-----------------------------
  6848. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  6849.     AX = DE07h
  6850. Return: AX = number of program as it appears on the "Switch Windows" menu
  6851. Note:    this API call may be made from a hardware interrupt handler
  6852. SeeAlso: AX=DE00h
  6853. --------Q-15DE08-----------------------------
  6854. INT 15 - DESQview - GET ???
  6855.     AX = DE08h
  6856. Return: AX = 0000h if ??? is not set to the current task
  6857.          0001h if ??? is set to the current task
  6858. --------Q-15DE09-----------------------------
  6859. INT 15 - DESQview - UNIMPLEMENTED
  6860.     AX = DE09h
  6861. Return: nothing (NOP in DV 1.x and 2.x)
  6862. --------Q-15DE0A-----------------------------
  6863. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  6864.     AX = DE0Ah
  6865.     BL = character
  6866. Return: character displayed, next call will display in next position (which
  6867.     wraps back to the start of the line if off the right edge of screen)
  6868. Notes:    displays character on bottom line of *physical* screen, regardless
  6869.       of current size of window (even entirely hidden)
  6870.     does not know about graphics display modes, just pokes the characters
  6871.       into display memory
  6872.     this API call may be made from a hardware interrupt handler
  6873. SeeAlso: AX=1003h
  6874. --------Q-15DE0B-----------------------------
  6875. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  6876.     AX = DE0Bh
  6877.     BL = API level minor version number
  6878.     BH = API level major version number
  6879. Return: AX = maximum API level (AH = major, AL = minor)
  6880. Notes:    if the requested API level is greater than the version of DESQview, a
  6881.       "You need a newer version" error window is popped up
  6882.     the API level defaults to 1.00, and is inherited by child tasks
  6883. --------Q-15DE0C-----------------------------
  6884. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  6885.     AX = DE0Ch
  6886.     BX = number of bytes
  6887. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  6888. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  6889.       system memory
  6890. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  6891. --------Q-15DE0D-----------------------------
  6892. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  6893.     AX = DE0Dh
  6894.     ES:DI -> previously allocated block
  6895. Return: nothing
  6896. SeeAlso: AX=1002h,AX=DE0Ch
  6897. --------Q-15DE0E-----------------------------
  6898. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  6899.     AX = DE0Eh
  6900.     ES:DI -> name to find
  6901.     CX = length of name
  6902. Return: BX = 0000h not found
  6903.          0001h found
  6904.         DS:SI = object handle
  6905. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  6906.  
  6907. Special mailbox names:
  6908.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  6909.  "DESQview/X Help Engine"
  6910.  "DESQview/X Network Server"  Network Manager
  6911.  "DESQview X Server0"    X-Windows server
  6912.  "DESQview X Server7"    X-Windows printing service
  6913.  "INBOX"        DESQview/X LPD requests
  6914.  "OUTBOX"        DESQview/X LPD responses
  6915.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  6916.  "_DVNM_"        DV/X v1.10 network manager
  6917. --------Q-15DE0F-----------------------------
  6918. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  6919.     AX = DE0Fh
  6920. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  6921. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  6922.     enables an additional mouse mode
  6923. --------Q-15DE10-----------------------------
  6924. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  6925.     AX = DE10h
  6926.     BH = scan code
  6927.     BL = character
  6928. Return: nothing
  6929. Notes:    a later read will get the keystroke as if it had been typed by the user
  6930.     multiple pushes are read last-in first-out
  6931.     if a script exists for the pushed key in the current application, the
  6932.       script will be executed
  6933.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  6934. SeeAlso: INT 16/AH=05h
  6935. --------Q-15DE11BL00-------------------------
  6936. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  6937.     AX = DE11h
  6938.     BL = 00h      viewport will not move automatically
  6939.          nonzero  viewport will move to keep cursor visible (default)
  6940. Return: nothing
  6941. --------Q-15DE12BX0000-----------------------
  6942. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  6943.     AX = DE12h
  6944.     BX = 0000h    select normal style (linefeed only moves down)
  6945.          nonzero  select C style (linefeed moves to start of next line)
  6946. Return: nothing
  6947. Note:    set on a per-task basis, and inherited from the parent task
  6948. --------Q-15DE13-----------------------------
  6949. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  6950.     AX = DE13h
  6951. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  6952.          without matching ENDC (see INT 15/AX=101Ch)
  6953. Note:    this API call may be made from within a hardware interrupt handler
  6954. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  6955. --------Q-15DE14-----------------------------
  6956. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  6957.     AX = DE14h
  6958.     ES:DI -> object
  6959. Return: BL = 00h not an object
  6960.          08h window or task
  6961.          09h mailbox
  6962.          0Ah keyboard
  6963.          0Bh timer
  6964.          0Ch objectq
  6965.          0Fh pointer
  6966.          10h panel
  6967. SeeAlso: AX=1016h
  6968. --------Q-15DE15-----------------------------
  6969. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  6970.     AX = DE15h
  6971.     BL = error handling mode
  6972.         00h post system error on all error conditions
  6973.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  6974.         messages sent to mailboxes which fail due to lack of system
  6975.         or common memory
  6976.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  6977.         calls which fail due to lack of system memory
  6978. Return: nothing
  6979. SeeAlso: AX=DE0Ch,AX=DE16h
  6980. --------Q-15DE16-----------------------------
  6981. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  6982.     AX = DE16h
  6983. Return: BL = current mode
  6984.         00h always post system error
  6985.         01h return carry flag set on failed mailbox writes
  6986.         02h return CF set on failed mailbox writes and NULL on failed
  6987.         GETMEM calls
  6988. SeeAlso: AX=DE15h
  6989. --------Q-15DE17-----------------------------
  6990. INT 15 - DESQview v2.20-2.25 - reserved
  6991.     AX = DE17h
  6992. Return: pops up "Programming error" window
  6993. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  6994. SeeAlso: AX=1117h
  6995. --------Q-15DE17-----------------------------
  6996. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  6997.     AX = DE17h
  6998.     BX = function
  6999.         0000h   get current mapping context without setting
  7000.         nonzero set new mapping context to BX
  7001. Return: BX = mapping context in effect before call
  7002. Notes:    mapping contexts determine conventional-memory addressability; setting
  7003.       a mapping context ensures that the associated program and data areas
  7004.       are in memory for access.  Usable by drivers, TSRs and shared
  7005.       programs.
  7006.     caller need not be running under DESQview
  7007.     this API call may be made from a hardware interrupt handler
  7008. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  7009. --------Q-15DE18-----------------------------
  7010. INT 15 - DESQview v2.20+ - internal - ???
  7011.     AX = DE18h
  7012.     BP = function number
  7013.         high byte must be 10h
  7014.         low byte is function
  7015.         00h set ???
  7016.             BL = ???  (00h-10h, video mode???)
  7017.             BH = value to store
  7018.         03h set ???
  7019.             BL = ??? (stored in driver)
  7020.         0Ah get ???
  7021.             ES:DI -> 18-byte buffer to hold ???
  7022. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  7023. --------Q-15DE19-----------------------------
  7024. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  7025.     AX = DE19h
  7026.     BX = number of bytes to allocate
  7027. Return: AX = 0000h successful
  7028.         ES:DI -> allocated block
  7029.          nonzero insufficient memory
  7030. Note:    this API call may be made from within a hardware interrupt handler
  7031. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  7032. --------Q-15DE1A-----------------------------
  7033. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  7034.     AX = DE1Ah
  7035.     ES:DI -> previously allocated block
  7036. Return:    AX = 0000h (successful)
  7037. Note:    this function may be called from within a hardware interrupt handler
  7038. SeeAlso: AX=DE0Dh,AX=DE19h
  7039. --------Q-15DE1B-----------------------------
  7040. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  7041.     AX = DE1Bh
  7042. Return: nothing
  7043. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  7044. --------Q-15DE1C-----------------------------
  7045. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  7046.     AX = DE1Ch
  7047. Return: nothing
  7048. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  7049.       that DOS is free
  7050.     the official documentation states that this call should be paired with
  7051.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  7052.     this API call may be made from within a hardware interrupt handler
  7053. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  7054. --------Q-15DE1D-----------------------------
  7055. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  7056.     AX = DE1Dh
  7057.     DX = segment of handle for task to receive keystroke
  7058.     BL = character
  7059.     BH = scan code
  7060. Return: AX = 0000h if successful
  7061.        nonzero if receiver's keyboard buffer was full
  7062. Notes:    the key is treated as though the user had pressed it, ignoring any
  7063.       script which may be bound to the key, and using the current field
  7064.       table if the keyboard object is in field processing mode
  7065.     multiple PUTKEYs are seen in the order in which they are executed
  7066. SeeAlso: AX=DE10h
  7067. --------Q-15DE1E-----------------------------
  7068. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  7069.     AX = DE1Eh
  7070. Return: CL = actual number of rows on screen
  7071.     CH = actual number of columns on screen
  7072.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  7073. Note:    this API call may be made from a hardware interrupt handler
  7074. SeeAlso: INT 10/AH=0Fh
  7075. --------Q-15DE1F-----------------------------
  7076. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  7077.     AX = DE1Fh
  7078. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  7079. Note:    this API call may be made from within a hardware interrupt handler
  7080. SeeAlso: AX=DE13h,INT 21/AH=34h
  7081. --------Q-15DE20-----------------------------
  7082. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  7083.     AX = DE20h
  7084.     BX = segment of handle of task to interupt
  7085.     DX:CX -> FAR interrupt routine
  7086.     BP,SI,DI,DS,ES as required by interrupt routine
  7087. Return: nothing
  7088. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  7089.       making the DISPATCHINT call
  7090.     multiple "DISPATCHINT" calls are processed in the order in which they
  7091.       were executed
  7092.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  7093.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  7094.       needs to be preserved
  7095.     this API call may be made from within a hardware interrupt handler
  7096. SeeAlso: AX=1021h,AX=DE2Ah
  7097. --------Q-15DE21-----------------------------
  7098. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  7099.     AX = DE21h
  7100.     BX = new state
  7101.         0000h turn off
  7102.         nonzero turn on
  7103. Return: BX = old state of virtualization
  7104. Notes:    this API call may be made from within a hardware interrupt handler
  7105.     under DV 2.40 and 2.42, this call appears to have no effect and always
  7106.       returns a nonzero value in BX which appears to be the offset within
  7107.       the DV common memory segment of the caller's task object; it may
  7108.       only have an effect within a hardware interrupt handler
  7109. SeeAlso: AX=1117h,AX=DE17h
  7110. --------Q-15DE22-----------------------------
  7111. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  7112.     AX = DE22h
  7113.     DX = segment of task handle
  7114. Return: DX = total amount of memory in paragraphs
  7115.     BX = amount of system memory in paragraphs
  7116.     CX = largest block of system memory available in paragraphs
  7117.     AX = flags
  7118.         bit 0: system memory resides in shared memory
  7119.         bit 1: process's memory is swapped out
  7120.         bit 2: process's system memory is swapped out
  7121. Notes:    if the task handle is a child task, the returned values will be for the
  7122.       process containing the task, rather than the task itself
  7123.     if the process's system memory is swapped out, BX,CX,DX remain
  7124.       unchanged, because the memory usage cannot be determined
  7125. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  7126. --------Q-15DE23-----------------------------
  7127. INT 15 U - DESQview v2.31+ - ???
  7128.     AX = DE23h
  7129.     BX = ??? IRQ number on first PIC?
  7130.     CX = ??? IRQ number on second PIC?
  7131. Return: ???
  7132. Note:    called by QEMM 6.00+
  7133. --------Q-15DE24-----------------------------
  7134. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  7135.     AX = DE24h
  7136.     BX = length of .DVP data
  7137.     CX = length of ??? string
  7138.     DS:SI -> ??? string
  7139.     ES:DI -> .DVP data (see AX=102Ch)
  7140. Return: BX = segment of task handle??? or 0000h on error
  7141. Note:    this call is similar to AX=102Ch except that it can interpret the
  7142.       extended DVP data
  7143. SeeAlso: AX=102Ch
  7144. --------Q-15DE25-----------------------------
  7145. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  7146.     AX = DE25h
  7147.     ES:DI -> 67-byte buffer for ASCIZ directory name
  7148. Return: ES:DI buffer filled with directory from which DESQview was started
  7149. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  7150.       name, so if the buffer is not cleared to zeros before the call,
  7151.       there is no way to tell where the directory name ends.  This bug
  7152.       has been fixed in DV 2.52 (DV/X 1.02)
  7153. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  7154. --------Q-15DE26-----------------------------
  7155. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  7156.     AX = DE26h
  7157. Return: BX = segment of handle for task with keyboard focus
  7158. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  7159.       "direct" window is active
  7160. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  7161. --------Q-15DE27-----------------------------
  7162. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  7163.     AX = DE27h
  7164.     BX = type
  7165.         0000h process
  7166.         0001h task
  7167.     ES:DI -> list of Instance Item Structures (see below)
  7168. Return: CF clear if successful
  7169.         AX = ???
  7170.         BX = ???
  7171.     CF set on error
  7172.         AX = error code???
  7173.         0004h invalid BX value
  7174. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7175. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  7176.  
  7177. Format of Instance Item Structure [one element of list]:
  7178. Offset    Size    Description
  7179.  00h    WORD    length of data area DESQview should save and restore on context
  7180.         switches (0000h = end of list)
  7181.  02h    DWORD    pointer to area to be saved/restored
  7182. --------Q-15DE28-----------------------------
  7183. INT 15 U - DESQview v2.50+ - ???
  7184.     AX = DE28h
  7185.     BX = segment of ??? or 0000h for default
  7186.     ???
  7187. Return: ???
  7188. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7189. SeeAlso: AX=DE2Ah
  7190. --------Q-15DE29BX0000-----------------------
  7191. INT 15 U - DESQview/X - ???
  7192.     AX = DE29h
  7193.     BX = 0000h
  7194.     ???
  7195. Return: CF clear if successful
  7196.         ???
  7197.     CF set on error
  7198. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7199.     under DESQview 2.60, this function and all other subfunctions of
  7200.       AX=DE29h always return CF set, as they are unique to DESQview/X
  7201. --------Q-15DE29BX0001-----------------------
  7202. INT 15 U - DESQview/X - ???
  7203.     AX = DE29h
  7204.     BX = 0001h
  7205.     DX = segment of window handle
  7206. Return: CF clear if successful
  7207.         AX = ???
  7208.         DX = ???
  7209.     CF set on error
  7210. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7211. --------Q-15DE29BX0002-----------------------
  7212. INT 15 U - DESQview/X - ???
  7213.     AX = DE29h
  7214.     BX = 0002h
  7215.     DX = segment of window handle
  7216. Return: CF clear if successful
  7217.         AX = ???
  7218.         DX = ???
  7219.     CF set on error
  7220. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7221. --------Q-15DE29BX0003-----------------------
  7222. INT 15 U - DESQview/X - ???
  7223.     AX = DE29h
  7224.     BX = 0003h
  7225.     DX = segment of window handle
  7226. Return: CF clear if successful
  7227.         ???
  7228.     CF set on error
  7229. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7230. --------Q-15DE29BX0004-----------------------
  7231. INT 15 U - DESQview/X - GET DISPLAY NAME
  7232.     AX = DE29h
  7233.     BX = 0004h
  7234.     CX = size of buffer in bytes
  7235.     DX = segment of window handle
  7236.     ES:DI -> buffer for display name
  7237. Return: CF clear if successful
  7238.         buffer filled with ASCIZ display name (truncated if necessary) or
  7239.           null string if no display
  7240.     CF set on error
  7241. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7242.     the name ":0" refers to the local display
  7243. --------Q-15DE29BX0005-----------------------
  7244. INT 15 U - DESQview/X - ???
  7245.     AX = DE29h
  7246.     BX = 0005h
  7247.     ???
  7248. Return: CF clear if successful
  7249.         ???
  7250.     CF set on error
  7251. Note:    under DESQview 2.60, this function and all other subfunctions of
  7252.       AX=DE29h always return CF set, as they are unique to DESQview/X
  7253. --------Q-15DE2A-----------------------------
  7254. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  7255.     AX = DE2Ah
  7256.     BX = segment of handle for task to interrupt or 0000h for caller
  7257.     DX:CX -> interrupt routine
  7258.     BP,SI,DI,DS,ES as required by interrupt routine
  7259. Return: nothing
  7260. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7261.     this call is the same as AX=DE20h except that it will delay
  7262.       interrupting the specified task until after it has exited DOS
  7263. SeeAlso: AX=1021h,AX=DE20h
  7264. --------Q-15DE2B-----------------------------
  7265. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  7266.     AX = DE2Bh
  7267.     ES:DI -> starting object
  7268.         0000h:0000h for first object in list???
  7269. Return: AX = status
  7270.         0000h successful
  7271.         ES:DI -> next object of same type (window/non-window)
  7272.         0001h failed (ES:DI was not a valid handle)
  7273. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7274.     there are two separate lists, one for window/task objects and one
  7275.       for all other objects
  7276. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  7277. --------Q-15DE2C-----------------------------
  7278. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  7279.     AX = DE2Ch
  7280.     DX = window information format version (0100h for DESQview 2.5x)
  7281.     BX = segment of window handle or 0000h for default
  7282.     ES:DI -> buffer for window information (see below)
  7283. Return: AX = status
  7284.         0000h successful
  7285. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7286. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  7287.  
  7288. Format of window information:
  7289. Offset    Size    Description
  7290.  00h    BYTE    task flag: 00h window, 01h task
  7291.  01h    BYTE    process number if owner task
  7292.         00h if non-owner task
  7293.  02h    WORD    segment of owner's handle, 0000h if orphaned
  7294.  04h    WORD    mapping context (see AX=1016h)
  7295.  06h    BYTE    task status (see below)
  7296.  07h    BYTE    unused
  7297.  08h    WORD    status bits (see below)
  7298.  0Ah    BYTE    01h if foreground-only window
  7299.  
  7300. Values for task status:
  7301.  00h    "Waiting" waiting for input
  7302.  01h    "Idle" keyboard poll limit reached
  7303.  03h    same as 01h
  7304.  04h    "Pausing" INT 15/AX=1000h pause called
  7305.  04h    DV/X direct: user did something to allow task switch
  7306.  05h    "ModeChg" video mode about to be changed
  7307.  06h    "ModeNtf" notify that video mode changed
  7308.  07h    "MoniCh" requested change to other monitor
  7309.  08h    "StartPgm" control relinquished to start new process
  7310.  09h    "MgrCan" made window manager CANCEL command
  7311.  0Ah    "Slicing" time slice expired
  7312.  0Bh    "Exit DOS" notify on DOS calls
  7313.  0Ch    "Enter DOS" process is re-entering DOS
  7314.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  7315.  0Eh    "BrkNxt" Control-Break pressed
  7316.  0Fh    "MgrCol" keyboard focus taken away
  7317.  10h    "PgmInt" interrupted by API call from another task
  7318.  11h    "BldOpen" call to INT 15/AX=DE01h
  7319.  
  7320. Bitfields for status bits:
  7321.  bit 0    DESQview process
  7322.  bit 1    process swapped out
  7323.  bit 2    process is resized direct window (suspended)
  7324.  bit 3    process suspended itself
  7325.  bit 4    user suspended process
  7326.  bit 5    process is being created
  7327.  bit 6    task is freeing another task
  7328. --------Q-15DE2D-----------------------------
  7329. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  7330.     AX = DE2Dh
  7331.     CX = direction
  7332.         FFFFh set socket handler
  7333.         DX:BX -> FAR function for socket interface
  7334.             must be of the format described under INT 63"DESQview"
  7335.         other get socket handler
  7336.         Return: DX:BX -> socket handler
  7337. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7338.     the "set" subfunction is normally called only by SOCKET.DVR
  7339. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  7340. --------Q-15DE2E-----------------------------
  7341. INT 15 U - DESQview v2.50+ - SOCKET API
  7342.     AX = DE2Eh
  7343.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  7344. Return: CX = size of socket record in bytes
  7345.     DX:BX -> socket record which was used
  7346. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  7347.     socket records are allocated from common memory
  7348.     for Unix compatibility, each socket and connection on a socket is
  7349.       allocated a DOS file handle (referencing an SFT for NUL) which is
  7350.       used on various calls to specify which of possibly multiple
  7351.       connections is to be operated upon
  7352. SeeAlso: AX=DE2Dh,INT 61/AX=0001h"VINES",INT 63"DESQview"
  7353.  
  7354. Values for function number:
  7355.  0000h    initialize socket???
  7356.  0001h    "gethostname"
  7357.  0002h    "ioctl" check for input
  7358.  0003h    "sleep" delay for specified period
  7359.  0004h    "htons" convert word to network (big-endian) byte order
  7360.  0005h    "select"
  7361.  0006h    "bsd_close"/"so_close" close socket
  7362.  0007h    NOP
  7363.  0008h    "connect" initiate connection on socket
  7364.  0009h    "recv"/"recvfrom" read from socket
  7365.  000Ah    "socket"
  7366.  000Bh    ???
  7367.  000Ch    "gethostbyname"
  7368.  000Dh    "send"/"sendto" write to socket
  7369.  000Eh    ??? (does something to all connections for process)
  7370.  000Fh    "getpid" get process identifier
  7371.  0010h    "gettimeofday"
  7372.  0011h    "bind" assign name to socket
  7373.  0012h    "listen" listen for connections on socket
  7374.  0013h    "accept" accept connection on socket
  7375.  0014h    connect to X server
  7376.  0015h    "gethostbyaddr" get host information for an address
  7377.  0016h    "getprotobyname"
  7378.  0017h    "getprotobynumber"
  7379.  0018h    "getservbyname"
  7380.  0019h    "getservbyport"
  7381.  001Ah    "getsockname" determine name bound to socket
  7382.  001Bh    "getpeername" get name of connected peer
  7383.  001Ch    "getsockopt"/"setsockopt"
  7384.  001Dh    "so_exit"     close all sockets for calling process
  7385.  001Eh    "issock" determine whether file handle references socket
  7386.  001Fh    "so_attach" reattach previously detached socket
  7387.  0020h    "so_detach" temporarily detach socket
  7388.  0021h    get DESQview directory
  7389.  0022h    "NewProc" start new application (see AX=102Ch)
  7390.  0023h    "so_linkup"
  7391.  0024h    canonicalize filename
  7392.  0025h    indirect INT 15h call
  7393.  0026h    Network Manager interface
  7394.  0027h    "so_unlink"    close connection from "so_linkup"
  7395.  0028h    "raisepriority"
  7396.  0029h    "lowerpriority"
  7397.  002Ah    ???
  7398.  FFFFh    "NetExit" (appears to be a NOP)
  7399.  
  7400. Format of socket record:
  7401. Offset    Size    Description
  7402.  00h    WORD    signature F0ADh
  7403.  02h    WORD    function number (see above)
  7404.  04h    WORD    returned error code (see below)
  7405.  06h    WORD    maximum message size??? (usually 0400h)
  7406.  08h    WORD    PSP segment to use or 0000h if socket not valid
  7407.  0Ah    WORD    scratch space (JFT size)
  7408.  0Ch    DWORD    scratch space (JFT address)
  7409.  10h    DWORD    mailbox handle (initialized by function 0000h)
  7410.  14h    DWORD    timer object handle (initialized by function 0000h)
  7411. ---function 0000h---
  7412.  18h    WORD    (return) ???
  7413. ---function 0001h---
  7414.  18h    WORD    (return) status???
  7415.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  7416.  9Ah    WORD    maximum length of hostname to return
  7417. ---function 0002h---
  7418.  18h    WORD    (return) status
  7419.  1Ah    WORD    socket's file handle
  7420.  1Ch    WORD    IOCTL function
  7421.         05h "FIONREAD" determine available input
  7422.         06h "FIONBIO" set blocking state of socket
  7423.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  7424.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  7425. ---function 0003h---
  7426.  18h  2 BYTEs    unused
  7427.  1Ah    WORD    delay time in seconds
  7428. ---function 0004h---
  7429.  18h    WORD    (return) result in network (big-endian) byte order
  7430.  1Ah    WORD    value to convert to network byte order
  7431. ---function 0005h---
  7432.  18h    WORD    (return) number of handles meeting the specified conditions???
  7433.  1Ah    WORD    number of file handles in each bitset???
  7434.  1Ch    DWORD    bitset of socket handles to check for readability???
  7435.  20h    DWORD    bitset of socket handles to check for writability???
  7436.  24h    DWORD    bitset of socket handles to check for errors???
  7437.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  7438.  2Ah    DWORD    ???
  7439.  2Eh    DWORD    ???
  7440. ---function 0006h---
  7441.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7442.  1Ah    WORD    socket's file handle
  7443. ---function 0008h---
  7444.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7445.  1Ah    WORD    socket's file handle
  7446.  1Ch    WORD    0001h if socket name specified, 0000h if not
  7447.  1Eh    WORD    length of socket name
  7448.  20h  N BYTEs    name of socket to which to connect
  7449. ---function 0009h---
  7450.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  7451.             closed, or FFFFh on error
  7452.  1Ah    WORD    socket's file handle
  7453.  1Ch    WORD    number of bytes to read
  7454.  1Eh    WORD    flags
  7455.  20h    WORD    0000h if no source address desired
  7456.         0001h if source address is to be stored (datagram sockets)
  7457.  22h    WORD    length of source address
  7458.  24h 110 BYTEs    source address
  7459.  92h 1K BYTEs    buffer for data to be read
  7460. ---function 000Ah---
  7461.  18h    WORD    (return) socket's file handle or FFFFh on error
  7462.  1Ah    WORD    address family (0001h,0002h)
  7463.  1Ch    WORD    socket type
  7464.  1Eh    WORD    protocol
  7465. ---function 000Bh---
  7466.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  7467.  1Ah    WORD    socket's file handle
  7468.  1Eh    WORD    (call) ???
  7469. ---function 000Ch---
  7470.  18h 128 BYTEs    buffer containing ASCIZ hostname
  7471.         special case if empty string or "unix"
  7472.  98h    ???    'struct hostent' ???
  7473.  A2h    ???    (return) ???
  7474. ---function 000Dh---
  7475.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  7476.  1Ah    WORD    socket's file handle
  7477.  1Ch    WORD    number of bytes to write
  7478.  1Eh    WORD    number of bytes to follow in subsequent writes???
  7479.  20h    WORD    flags
  7480.  22h    WORD    0000h if no destination specified, 0001h if destination present
  7481.  24h    WORD    ???
  7482.  26h    WORD    length of destination address
  7483.  28h 110 BYTEs    destination address
  7484.  96h 1K BYTEs    buffer containing data to be written
  7485. ---function 000Eh---
  7486.  no additional fields
  7487. ---function 000Fh---
  7488.  18h    DWORD    (return) DESQview task handle of calling process
  7489. ---function 0010h---
  7490.  18h    DWORD    (return) current time
  7491.  1Ch    DWORD    (return) ???
  7492. ---function 0011h---
  7493.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7494.  1Ah    WORD    socket's file handle
  7495.  1Ch    WORD    length of name
  7496.  1Eh  N BYTEs    buffer for socket name
  7497. ---function 0012h---
  7498.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7499.  1Ah    WORD    socket's file handle
  7500.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  7501. ---function 0013h---
  7502.  18h    WORD    (return) file handle for new connection or FFFFh on error
  7503.  1Ah    WORD    listen()ing socket's file handle
  7504.  1Ch    WORD    (call) length of buffer for connecting entity's address
  7505.         (return) actual length of address
  7506.  1Eh  N BYTEs    buffer for connecting entity's address
  7507. ---function 0014h---
  7508.  18h    WORD    (return) socket's file handle or FFFFh on error
  7509.  1Ah  4 BYTEs    (return) ???
  7510.  1Eh    WORD    (return) ???
  7511.  20h    WORD    (return) ???
  7512.  22h 256 BYTEs    ASCIZ X display name
  7513. 122h    ???
  7514. ---function 0015h---
  7515.  18h    WORD    (call) type of address??? (test for 0001h seen)
  7516.  1Ah    WORD    (call) length of buffer for host address
  7517.  1Ch 110 BYTEs    buffer containing host address
  7518.  8Ah    WORD    (return) offset of official host name???
  7519.  8Ch    WORD    (return) offset of alias list???
  7520.  8Eh    WORD    (return) address type???
  7521.  90h    WORD    (return) length of an address in bytes???
  7522.  92h    WORD    (return) offset of address???
  7523.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  7524. ---function 0016h---
  7525.  18h    ???    buffer for protocol name???
  7526.  98h    ???
  7527. ---function 0017h---
  7528.  18h    WORD    (call) protocol number???
  7529.  1Ah    WORD    (return) ??? or 0001h
  7530. ---function 0018h---
  7531.  18h 128 BYTEs    buffer containing ???
  7532.  98h 128 BYTEs    buffer containing ???
  7533. 118h    WORD    (return) ???
  7534. ---function 0019h---
  7535.  18h    WORD    length of name???
  7536.  1Ah 128 BYTEs    buffer for name???
  7537.  9Ah    WORD    (return) ???
  7538. ---function 001Ah---
  7539.  18h    WORD    (return) 0000h if successful, FFFFh on error
  7540.  1Ah    WORD    socket's file handle
  7541.  1Ch    WORD    (call) length of buffer for socket name
  7542.         (return) actual length of socket name
  7543.  1Eh  N BYTEs    buffer for socket name
  7544. ---function 001Bh---
  7545.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7546.  1Ah    WORD    socket's file handle
  7547.  1Ch    WORD    (call) size of buffer for name
  7548.         (return) actual size of name
  7549.  1Eh  N BYTEs    buffer for peer's name
  7550. ---function 001Ch---
  7551.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7552.  1Ah    WORD    direction: 0000h to get, 0001h to set
  7553.  1Ch    WORD    socket's file handle
  7554.  1Eh    WORD    option level
  7555.  20h    WORD    option name
  7556.  22h    WORD    (call) length of buffer for option value
  7557.         (return) actual length of option value
  7558.  24h  N BYTEs    buffer for option value
  7559. ---function 001Dh---
  7560.  no additional fields
  7561. ---function 001Eh---
  7562.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  7563.  1Ah    WORD    file handle which may or may not be a socket
  7564. ---function 001Fh---
  7565.  18h    WORD    (return) file handle or FFFFh on error
  7566.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  7567.             previously detached socket
  7568. ---function 0020h---
  7569.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  7570.  1Ah    WORD    socket's file handle
  7571.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  7572.             the file handle
  7573. ---function 0021h---
  7574.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  7575. ---function 0022h---
  7576.  18h    DWORD    (return) task handle of new application
  7577.  1Ch    WORD    size of .DVP data
  7578.  1Eh 129 BYTEs    ASCIZ ???
  7579.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  7580. ---function 0023h---
  7581.  18h    WORD    (return) ??? or FFFFh on error
  7582.  1Ah    WORD    socket's file handle???
  7583. ---function 0024h---
  7584.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  7585.             0000h if successful
  7586.  1Ah 129 BYTEs    ASCIZ filename/pathname
  7587. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  7588. ---function 0025h---
  7589.  18h    WORD    value of AX
  7590.  1Ah    WORD    value of BX
  7591.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  7592.         (call) number of stack parameters if AH value is 12h
  7593.         (return) returned CX for calls other than INT 15/AH=12h
  7594.  1Eh    WORD    value of DX
  7595.  20h    WORD    value of DI
  7596.  22h    WORD    value of SI
  7597.  24h    WORD    value of DS
  7598.  26h    WORD    value of ES
  7599.  28h    WORD    (return) value of FLAGS after call
  7600.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  7601.         (return) stack results from INT 15/AH=12h call
  7602. ---function 0026h---
  7603.  18h    WORD    (call) Network Manager subfunction (see below)
  7604.         (return) status???
  7605.  1Ah    WORD    (call) size of parameter data
  7606.         (return) size of returned data
  7607.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  7608.         (return) result data (see below)
  7609. ---function 0027h---
  7610.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  7611.  1Ah    WORD    socket's file handle
  7612. ---functions 0028h,0029h---
  7613.  18h    WORD    (call) file handle for which to set priority low/high
  7614.             FFFFh to change calling task's priority
  7615. ---function 002Ah---
  7616.  no additional fields
  7617.  
  7618. Values for Network Manager subfunction:
  7619.  0004h    "so_exit"???
  7620.  0005h    "gethostbyname"
  7621.  0006h    "gethostname"
  7622.  0009h    "socket"
  7623.  000Dh    "gethostbyaddr"
  7624.  000Fh    "getprotobyname"
  7625.  0010h    get protocol name for protocol number
  7626.  0011h    "getservbyname"
  7627.  0012h    "getservbyport"
  7628.  0013h    "getsockname"???
  7629.  0016h    ???
  7630.  0017h    kill Network Manager
  7631.  0018h    "getpeername"???
  7632.  0019h    ??? (called by socket function 0000h)
  7633.  001Ah    ???
  7634.  001Bh    "so_linkup"
  7635.  001Dh    get network services
  7636.  001Fh    "getpwuid"
  7637.  0020h    "getpwnam"
  7638.  0021h    "getpwvar"
  7639.  0022h    "crypt"
  7640.  0023h    "so_unlink"
  7641.  0024h    "getlogin"
  7642.  0028h    "sethostent"
  7643.  0029h    "gethostent"
  7644.  002Ah    "soaddhost"
  7645.  002Bh    "soupdatehost"
  7646.  002Ch    "sodeletehost"
  7647.  002Dh    "setservent"
  7648.  002Eh    "getservent"
  7649.  002Fh    "setpwent"
  7650.  0030h    "getpwent"
  7651.  0031h    ???
  7652.  0032h    ???
  7653.  0033h    ???
  7654.  0034h    get IP network number
  7655.  0035h    ??? (pops up Network Manager window)
  7656.  0037h    ???
  7657.  0038h    get machine name and IP address
  7658.  0039h    ???
  7659.  
  7660. Format of Function 0026h/Subfunction 000Fh data:
  7661. Offset    Size    Description
  7662.  00h  8 BYTEs    (return) ???
  7663.  
  7664. Format of Function 0026h/Subfunction 0010h data:
  7665. Offset    Size    Description
  7666.  00h  2 BYTEs    (return) ???
  7667.  02h    WORD    (return) protocol number
  7668.  04h    WORD    (call) protocol number for which to get name
  7669.  06h    WORD    (return) ???
  7670.  08h    var    (return) ASCIZ protocol name
  7671.  N    var    (return) ASCIZ protocol name
  7672.  
  7673. Format of Function 0026h/Subfunction 0011h data:
  7674. Offset    Size    Description
  7675.  00h  8 BYTEs    ???
  7676.  08h    var    (return) ASCIZ protocol name
  7677.     var    (return) ASCIZ ??? name
  7678.     var    (return) ASCIZ ??? name
  7679.  
  7680. Format of Function 0026h/Subfunction 0012h data:
  7681. Offset    Size    Description
  7682.  00h  8 BYTEs    (return) ???
  7683.  
  7684. Format of Function 0026h/Subfunction 0013h data:
  7685. Offset    Size    Description
  7686.  00h 116 BYTEs    (return) ???
  7687.  
  7688. Format of Function 0026h/Subfunction 0016h data:
  7689. Offset    Size    Description
  7690.  00h  4 BYTEs    (return) ???
  7691.  
  7692. Format of Function 0026h/Subfunction 0018h data:
  7693. Offset    Size    Description
  7694.  00h 116 BYTEs    (return) ???
  7695.  
  7696. Format of Function 0026h/Subfunction 0019h data:
  7697. Offset    Size    Description
  7698.  00h  4 BYTEs    (return) ???
  7699.  04h    DWORD    (return) task handle of ???
  7700.  
  7701. Format of Function 0026h/Subfunction 001Ah data:
  7702. Offset    Size    Description
  7703.  00h 38 BYTEs    (return) ???
  7704.  
  7705. Format of Function 0026h/Subfunction 001Bh data:
  7706. Offset    Size    Description
  7707.  00h 10 BYTEs    (return) ???
  7708.  
  7709. Format of Function 0026h/Subfunction 001Dh return data [array]:
  7710. Offset    Size    Description
  7711.  00h    WORD    ??? or FFFFh if end of array
  7712.  02h  7 BYTEs    ???
  7713.  09h 27 BYTEs    ASCIZ name of service
  7714.  
  7715. Format of Function 0026h/Subfunction 0024h return data:
  7716. Offset    Size    Description
  7717.  00h    var    ASCIZ username
  7718.  
  7719. Format of Function 0026h/Subfunction 0030h data:
  7720. Offset    Size    Description
  7721.  00h    WORD    (call) UID or 0000h for current user
  7722.         (return) ???
  7723.  02h    WORD    (return) UID
  7724.  04h  6 BYTEs    (return) ???
  7725.  0Ah    var    (return) ASCIZ username
  7726.     var    (return) ASCIZ encrypted password
  7727.     var    (return) ASCIZ initial ("home") directory
  7728.  
  7729. Format of Function 0026h/Subfunction 0034h data:
  7730. Offset    Size    Description
  7731.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  7732.  
  7733. Format of Function 0026h/Subfunction 0038h return data:
  7734. Offset    Size    Description
  7735.  00h    BYTE    ???
  7736.  01h  4 BYTEs    IP address
  7737.  05h    var    ASCIZ machine name
  7738.     ???
  7739.  
  7740. Values for error code:
  7741.  0000h    successful
  7742.  0009h    "BADF" bad file handle
  7743.  000Ch    "ENOMEM" out of memory
  7744.  000Eh    "EFAULT" bad address
  7745.  0016h    "EINVAL" invalid argument
  7746.  0018h    "EMFILE" too many open files
  7747.  0020h    "EPIPE" ??? broken pipe
  7748.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  7749.  0024h    "EINPROGRESS" operation now in progress
  7750.  0026h    "ENOTSOCK" socket invalid
  7751.  0028h    "EMSGSIZE" message too long to send atomically
  7752.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  7753.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  7754.  0031h    "EDOM" argument too large
  7755.  0038h    "EISCONN" socket is already connected
  7756.  0039h    "ENOTCONN" socket is not connected
  7757.  
  7758. Format of Socket Context Record:
  7759. Offset    Size    Description
  7760.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  7761.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  7762.  06h    WORD    PSP segment of owner or 0000h
  7763.  08h    WORD    mapping context of owning window (see AX=1016h)
  7764.  0Ah  2 BYTEs    ???
  7765.  0Ch    WORD    address family
  7766.  0Eh    WORD    socket type
  7767.  10h    WORD    protocol
  7768.  12h    WORD    socket state
  7769.         0001h created
  7770.         0002h bound
  7771.         0003h listening???
  7772.         0005h connected
  7773.  14h    DWORD    timer object handle
  7774.  18h    DWORD    object handle (mailbox???)
  7775.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  7776.  20h    DWORD    pointer to ??? or 0000h
  7777.  24h  6 BYTEs    ???
  7778.  2Ah    WORD    file handle for socket or FFFFh
  7779.  2Ch  2 BYTEs    ???
  7780.  2Eh    WORD    nonzero if socket nonblocking
  7781. ---network connections only---
  7782.  30h  2 BYTEs    ???
  7783.  32h    WORD    ???
  7784.  34h  4 BYTEs    (big-endian) IP address of remote
  7785.  38h  6 BYTEs    ???
  7786. --------Q-15DE2F-----------------------------
  7787. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  7788.     AX = DE2Fh
  7789. Return: BX = status
  7790.         0001h keyboard focus has been given to a direct window since the
  7791.         last call
  7792.         0000h if not
  7793. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  7794.     Quarterdeck stated that this call would not be available under future
  7795.       versions of DESQview Classic, but it is still present in v2.60
  7796. --------Q-15DE30-----------------------------
  7797. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  7798.     AX = DE30h
  7799. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  7800. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  7801.     you must first check the DESQview version to verify that it is 2.50 or
  7802.       greater
  7803. SeeAlso: INT 21/AH=2Bh/CX=4445h
  7804. --------Q-15DE31-----------------------------
  7805. INT 15 - DESQview/X v1.10 - ???
  7806.     AX = DE31h
  7807.     CX = ???
  7808.         0000h ???
  7809.         nonzero ???
  7810.     ???
  7811. Return: ???
  7812. --------b-15DF-------------------------------
  7813. INT 15 - Juko UNIQUE UX BIOS - TURBO MODE CONTROL
  7814.     AH = DFh
  7815.     AL = function
  7816.         00h turn on Turbo mode
  7817.         01h turn off Turbo mode
  7818.         02h set Turbo mode according to hardware switch
  7819. SeeAlso: INT 13/AX=FFFFh
  7820. --------b-15E00F-----------------------------
  7821. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  7822.     AX = E00Fh
  7823.     ES:BX -> start of 2nd processor's execution
  7824. Return: AL = status
  7825.         0Fh successful
  7826.         00h failure
  7827. SeeAlso: AX=E10Eh,AX=E200h
  7828. --------b-15E10E-----------------------------
  7829. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  7830.     AX = E10Eh
  7831.     ES:BX -> start of 2nd processor's execution
  7832. Return: AL = status
  7833.         0Fh successful (halted)
  7834.         00h failure (not halted)
  7835. SeeAlso: AX=E00Fh,AX=E200h
  7836. --------b-15E200-----------------------------
  7837. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  7838.     AX = E200h
  7839. Return: AX bit 15 set if 2nd processor available
  7840. SeeAlso: AX=E00Fh,AX=E10Eh
  7841. --------b-15E4-------------------------------
  7842. INT 15 - Tandy??? - ???
  7843.     AH = E4h
  7844.     AL = subfunction
  7845.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  7846.     DL = ???
  7847. Return: DL = 00h if successful???
  7848. Note:    the section of code in 386MAX which calls these functions also checks
  7849.       whether the ROM BIOS has both Tandy and Phoenix Technologies
  7850.       signatures if these calls fail
  7851. --------b-15E4-------------------------------
  7852. INT 15 - Compaq ROM BIOS 03/08/93 and newer - ???
  7853.     AH = E4h
  7854.     AL = subfunction
  7855.         00h get ???
  7856.         Return: CF clear
  7857.             AH = 00h
  7858.             CX = 0000h
  7859.             BX = ??? (read from [XBDA:0094h])
  7860.         01h,02h unsupported by this ROM version
  7861.         Return: CF set, AH = 86h
  7862.         80h,90h,A0h,B0h,C0h,D0h,E0h,F0h set ???
  7863.         Return: CF clear
  7864.             AH = 00h
  7865.             CX = 0000h
  7866.             BX = ???
  7867.         81h,91h,A1h,B1h,C1h,D1h,E1h,F1h unsupported by 3/8/93&4/8/93 ROMs
  7868.         Return: CF set, AH = 86h
  7869. Notes:    functions 80h/90h/etc. are not supported by the 4/8/93 EISA System ROM
  7870.     these functions are not supported by the 7/26/93 LTE Lite 386 ROM
  7871. --------b-15E800-----------------------------
  7872. INT 15 - Compaq Contura - GET ???
  7873.     AX = E800h
  7874. Return: AX = 0000h
  7875.     BH = 00h
  7876.     BL = ??? (read from port 0C7Ch)
  7877.     CH = ???
  7878.     CL = ???
  7879.     DX = 0000h
  7880. Note:    also supported by 3/8/93 DESKPRO/i and 7/26/93 LTE Lite 386 ROM BIOS
  7881. --------b-15E801-----------------------------
  7882. INT 15 - Compaq Contura - GET ???
  7883.     AX = E801h
  7884. Return: CF clear
  7885.     AX = extended memory in K (read from CMOS locations 30h and 31h)
  7886.     BH = ???
  7887.     BL = ???
  7888.     CX = extended memory in K (read from CMOS locations 17h and 18h)
  7889.     DX = ???
  7890. Note:    also supported by 3/8/93 DESKPRO/i and 7/26/93 LTE Lite 386 ROM BIOS
  7891. --------b-15E802-----------------------------
  7892. INT 15 - Compaq Contura - GET ???
  7893.     AX = E802h
  7894. Return: CF clear
  7895.     AX = 0000h
  7896.     BX = ???
  7897.     CX = 0000h
  7898. Note:    this function is also supported by the LTE Lite 25c, 25E, and 486; not
  7899.       supported by LTE Lite 20 and 25.
  7900. --------m-15F200CX454D-----------------------
  7901. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  7902.     AX = F200h
  7903.     CX = 454Dh
  7904. Return: CF clear if hardware already initialised
  7905.         BX = upper RAM areas in use
  7906.         bit 0: C000-C3FF
  7907.         bit 1: C400-C7FF
  7908.         ...
  7909.         bit 11: EC00-EFFF
  7910.     CF set if hardware not initialised yet
  7911. --------!------------------------------------
  7912.