home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / INTER32A.ZIP / INTERRUP.B < prev    next >
Encoding:
Text File  |  1992-09-13  |  319.7 KB  |  8,782 lines

  1. Interrupt List, part 2 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------15---------------------------------
  4. INT 15 - Microsoft TSR Specification
  5.     No additional information available at this time.
  6. ----------1500-------------------------------
  7. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  8.     AH = 00h
  9. Return: CF set on error
  10.         AH = 86h no cassette present
  11.     CF clear if successful
  12. SeeAlso: AH=01h"CASSETTE"
  13. ----------1500-------------------------------
  14. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  15.     AH = 00h
  16. Return: CX = signed X count
  17.     DX = signed Y count
  18. ----------1500-------------------------------
  19. INT 15 - VMiX v2+ - INSTALLATION CHECK???
  20.     AH = 00h
  21. Return: DX = 0798h???
  22. ----------1500-------------------------------
  23. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  24.     AH = 00h
  25. Note:    if issued by the highest-priority task while MultiDOS is using
  26.       priority-based rather than round-robin scheduling, control will be
  27.       returned to the caller immediately
  28. SeeAlso: AH=03h"MultiDOS",AX=1000h
  29. ----------1501-------------------------------
  30. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  31.     AH = 01h
  32. Return: CF set on error
  33.         AH = 86h no cassette present
  34.     CF clear if successful
  35. SeeAlso: AH=00h"CASSETTE"
  36. ----------1501-------------------------------
  37. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  38.     AH = 01h
  39.     AL = NVRAM location (00h to 3Fh)
  40.     BL = NVRAM data value
  41. Return: AH = return code
  42.         00h OK
  43.         01h address bad
  44.         02h write error
  45. SeeAlso: AH=02h"Amstrad"
  46.  
  47. Format of NVRAM:
  48. Offset    Size    Description
  49.  00h    BYTE    time of day: seconds
  50.  01h    BYTE    alarm time: seconds
  51.  02h    BYTE    time of day: minutes
  52.  03h    BYTE    alarm time: minutes
  53.  04h    BYTE    time of day: hours
  54.  05h    BYTE    alarm time: hours
  55.  06h    BYTE    day of week, 1 = Sunday
  56.  07h    BYTE    day of month
  57.  08h    BYTE    month
  58.  09h    BYTE    year mod 100
  59.  0Ah    BYTE    RTC status register A
  60.         bit 7: set if date/time being updated
  61.             6-4: time base speed, default 010 = 32768 Hz
  62.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  63.  0Bh    BYTE    RTC status register B
  64.         bit 7: clear if normal update, set if abort update
  65.             6: periodic interrupt enable
  66.             5: alarm interrupt enable
  67.             4: update end interrupt enable
  68.             3: square wave enable
  69.             2: date mode (clear = BCD, set = binary)
  70.             1: 24-hour format
  71.             0: daylight saving time enable
  72.  0Ch    BYTE    RTC status register C (read-only)
  73.         bit 7: IRQF flag
  74.             6: PF flag
  75.             5: AF flag
  76.             4: UF flag
  77.  0Dh    BYTE    RTC status register D
  78.         bit 7: battery good
  79.  0Eh  6 BYTEs    time and date machine last used
  80.  14h    BYTE    user RAM checksum
  81.  15h    WORD    Enter key scancode/ASCII code
  82.  17h    WORD    Forward delete key scancode/ASCII code
  83.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  84.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  85.  1Dh    WORD    mouse button 1 scancode/ASCII code
  86.  1Fh    WORD    mouse button 2 scancode/ASCII code
  87.  21h    BYTE    mouse X scaling factor
  88.  22h    BYTE    mouse Y scaling factor
  89.  23h    BYTE    initial VDU mode and drive count
  90.  24h    BYTE    initial VDU character attribute
  91.  25h    BYTE    size of RAM disk in 2K blocks
  92.  26h    BYTE    initial system UART setup byte
  93.  27h    BYTE    initial external UART setup byte
  94.  28h 24 BYTEs    available for user application
  95. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  96.       the clock chip
  97. ----------1501-------------------------------
  98. INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
  99.     AH = 01h
  100.     STACK: WORD  object ID of requestor
  101.            DWORD pointer to name of requested method
  102.            WORD  arg1
  103.            WORD  arg2
  104.            WORD  arg3
  105.            WORD  arg4
  106. Return: DX:AX??? -> IRP structure or 0000h:0000h 
  107. ----------1501-------------------------------
  108. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  109.     AH = 01h
  110.     AL = semaphore number (00h-3Fh)
  111. Return: AH = status
  112.         00h successful
  113.         02h invalid semaphore number
  114. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  115.       task and the call returns immediately
  116.     if the semaphore is already owned by another task, the calling task
  117.       is placed on a queue for the semaphore and suspended until it can
  118.       become owner of the semaphore
  119.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  120. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  121. ----------1502-------------------------------
  122. INT 15 - CASSETTE - READ DATA
  123.     AH = 02h
  124.     CX = number of bytes to read
  125.     ES:BX -> buffer
  126. Return:    CF clear if successful
  127.         DX = number of bytes read
  128.         ES:BX -> byte following last byte read
  129.     CF set on error
  130.     AH = status
  131.         00h successful
  132.         01h CRC error
  133.         02h bad tape signals
  134.         04h no data
  135.         80h invalid command
  136.         86h no cassette present
  137. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  138. ----------1502-------------------------------
  139. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  140.     AH = 02h
  141.     AL = NVRAM location (00h to 3Fh)
  142. Return: AH = return code
  143.         00h OK
  144.         01h address bad
  145.         02h checksum error
  146.     AL = NVRAM data value
  147. SeeAlso: AH=01h"Amstrad"
  148. ----------1502-------------------------------
  149. INT 15 - VMiX - MEMORY OBJECT MANAGER
  150.     AH = 02h
  151.     STACK:    WORD    object ID of requestor
  152.         DWORD    pointer to name of requested method
  153.         WORD    arg1
  154.         WORD    arg2
  155.         WORD    arg3
  156.         WORD    arg4
  157.         WORD    arg5
  158. Return: DX:AX??? = pointer to memory block
  159. ----------1502-------------------------------
  160. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  161.     AH = 02h
  162.     AL = semaphore number (00h-3Fh)
  163. Return: AH = status
  164.         00h successful
  165.         01h not semaphore owner
  166.         02h invalid semaphore number
  167. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  168.       queue will become the new owner and be reawakened
  169.     do not use within an interrupt handler
  170. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  171. ----------1503-------------------------------
  172. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  173.     AH = 03h
  174.     CX = number of bytes to write
  175.     ES:BX -> data buffer
  176. Return: CF clear if successful
  177.         ES:BX -> byte following last byte written
  178.     CF set on error
  179.     AH = status (see AH=02h"CASSETTE")
  180.     CX = 0000h
  181. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  182. ----------1503-------------------------------
  183. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  184.     AH = 03h
  185.     AL = value (I,R,G,B bits)
  186. SeeAlso: AH=04h"Amstrad"
  187. ----------1503-------------------------------
  188. INT 15 - VMiX - PROMPTED CONSOLE INPUT
  189.     AH = 03h
  190.     STACK:    DWORD    pointer to ASCII prompt
  191.         WORD    field outline character
  192.         WORD    length of input field
  193.         DWORD    address of pointer to input buffer
  194.         WORD    number of characters input
  195. Return: AX = length of input (input buffer is padded with blanks)
  196. ----------1503-------------------------------
  197. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  198.     AH = 03h
  199.     DX = number of time slices to remain suspended
  200. Return: after specified interval has elapsed
  201. Note:    when priority-based scheduling is in use, high-priority tasks should
  202.       use this function to yield the processor
  203. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  204. ----------1504-------------------------------
  205. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  206.     AH = 04h
  207.     ES:DI -> results buffer length 20h for System Parameter Table
  208.     DS = segment containing ABIOS RAM extensions (zero if none)
  209. Return: AH = 00h success: results at ES:DI
  210.     CF set on failure
  211. SeeAlso: AH=05h"ABIOS",C1h
  212.  
  213. Format of ABIOS System Parameter Table:
  214. Offset    Size    Description
  215.  00h    DWORD    FAR address of ABIOS Common Start Routine
  216.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  217.  08h    DWORD    FAR address of ABIOS Time-out Routine
  218.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  219.  0Eh 16 BYTEs    reserved
  220.  1Eh    WORD    number of entries in initialization table
  221. ----------1504-------------------------------
  222. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  223.     AH = 04h
  224.     AL = value (RDSEL1 and RDSEL0)
  225. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  226. ----------1504-------------------------------
  227. INT 15 - VMiX - VPRINTF
  228.     AH = 04h
  229.     STACK:    DWORD    control string
  230.         DWORD    array of arguments
  231. ----------1504-------------------------------
  232. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  233.     AH = 04h
  234.     AL = mailbox number (00h-3Fh)
  235.     CX = message length in bytes
  236.     DS:SI -> message
  237. Return: AH = status
  238.         00h successful
  239.         01h out of message memory
  240.         02h invalid mailbox number
  241. Note:    the message is copied into a system buffer; the caller may immediately
  242.       reuse its buffer
  243. SeeAlso: AH=05h"MultiDOS"
  244. ----------1505-------------------------------
  245. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  246.     AH = 05h
  247.     ES:DI -> results buffer length (18h * Number_of_Entries)
  248.     DS = segment containing ABIOS RAM extensions (zero if none)
  249. Return: AH = 00h success: results at ES:DI
  250.     CF set on failure
  251. SeeAlso: AH=04h"ABIOS",C1h
  252.  
  253. Format of one entry of ABIOS Initialization Table:
  254. Offset    Size    Description
  255.  00h    WORD    device ID
  256.  02h    WORD    number of Logical IDs
  257.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  258.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  259.  0Ah    WORD    request block length
  260.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  261.  0Eh    WORD    Data Pointers length (in Common Data Area)
  262.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  263.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  264.  12h  6 BYTEs    reserved
  265. ----------1505-------------------------------
  266. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  267.     AH = 05h
  268.     AL = value (I,R,G,B bits)
  269. SeeAlso: AH=04h"Amstrad"
  270. ----------1505-------------------------------
  271. INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
  272.     AH = 05h
  273. Return: AX = process ID
  274. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  275. ----------1505-------------------------------
  276. INT 15 - MultiDOS Plus - CHECK MAILBOX
  277.     AH = 05h
  278.     AL = mailbox number (00h-3Fh)
  279. Return: AH = status
  280.         00h successful
  281.         DX = length of first message in queue, 0000h if no message
  282.         02h invalid mailbox number
  283. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  284. ----------1506-------------------------------
  285. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  286.     AH = 06h
  287. Return: BX = version number
  288. ----------1506-------------------------------
  289. INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
  290.     AH = 06h
  291.     STACK:    WORD    process ID
  292. Return: DX:AX??? -> process control block
  293. SeeAlso: AH=07h"VMiX",AH=08h"VMiX"
  294. ----------1506-------------------------------
  295. INT 15 - MultiDOS Plus - READ MAILBOX
  296.     AH = 06h
  297.     AL = mailbox number (00h-3Fh)
  298.     CX = size of buffer in bytes
  299.     ES:DI -> buffer for message
  300. Return: AH = status
  301.         00h successful
  302.         CX = number of bytes copied
  303.         DX = actual length of message
  304.         02h invalid mailbox number
  305. Note:    if the caller's buffer is not large enough, the message is truncated
  306.       and the remainder is lost
  307. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  308. ----------1507-------------------------------
  309. INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
  310.     AH = 07h
  311.     STACK:    WORD    object type
  312. Return: DX:AX??? -> object control block
  313. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  314. ----------1507-------------------------------
  315. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  316.     AH = 07h
  317.     BX:CX = entry point of new task
  318.     DX = stack size in paragraphs
  319. Return: AH = status
  320.         00h successful
  321.         01h no free task control blocks
  322.         02h no free memory for task's stack
  323. Note:    execution returns immediately to calling task
  324. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  325. ----------1508-------------------------------
  326. INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
  327.     AH = 08h
  328.     STACK:    WORD    channel ID
  329. Return: DX:AX??? -> channel control block
  330. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  331. ----------1508-------------------------------
  332. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  333.     AH = 08h
  334. Return: calling task terminated, so execution never returns to caller
  335. Notes:    an internal task must be terminated with this function rather than a
  336.       DOS termination function
  337.     task's stack space is returned to parent task's memory pool
  338. SeeAlso: AH=07h"MultiDOS"
  339. ----------1509-------------------------------
  340. INT 15 - VMiX - GET ID OF QUEUED ELEMENT
  341.     AH = 09h
  342.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  343.         WORD    subqueue ID
  344. Return: AX = ID
  345. SeeAlso: AH=0Ah"VMiX"
  346. ----------1509-------------------------------
  347. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  348.     AH = 09h
  349.     AL = new priority
  350. Note:    the priority has different meanings depending on whether priority-
  351.       based or round-robin scheduling is used
  352. SeeAlso: AH=07h"MultiDOS"
  353. ----------150A-------------------------------
  354. INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
  355.     AH = 0Ah
  356.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  357.         WORD    ID of current element in queue chain
  358. Return: AX = ID of next element
  359. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  360. ----------150A-------------------------------
  361. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  362.     AH = 0Ah
  363.     AL = new interval
  364.         00h = 55.0 ms (default)
  365.         80h = 27.5 ms
  366.         40h = 13.75 ms
  367.         20h = 6.88 ms
  368.         10h = 3.44 ms
  369.         08h = 1.72 ms
  370. SeeAlso: AH=03h"MultiDOS"
  371. ----------150B-------------------------------
  372. INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
  373.     AH = 0Bh
  374. Return: AX = number of active processes
  375. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  376. ----------150B-------------------------------
  377. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  378.     AH = 0Bh
  379. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  380.       may be restored with AH=0Ch
  381.     caller's video mode must be same as foreground task's video mode
  382.     any text written while in the background will be saved to the
  383.       foreground task's virtual screen when it switches to the background
  384.     useful if a background task wants to display a message on the
  385.       foreground screen
  386. SeeAlso: AH=0Ch"MultiDOS"
  387. ----------150C-------------------------------
  388. INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
  389.     AH = 0Ch
  390.     STACK:    WORD    process ID
  391. Return: DX:AX??? -> TSS stack store
  392. ----------150C-------------------------------
  393. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  394.     AH = 0Ch
  395. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  396.       unless AH=0Bh has been called first
  397. SeeAlso: AH=0Bh"MultiDOS"
  398. ----------150D-------------------------------
  399. INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
  400.     AH = 0Dh
  401.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  402.             followed by standard VMiX shell command string
  403. Return: AX = status
  404. SeeAlso: AH=0Eh"VMIX"
  405. ----------150D-------------------------------
  406. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  407.     AH = 0Dh
  408. Note:    calling task receives all time slices until AH=0Eh is called; this
  409.       allows time-critical events or nonreentrant code to be processed
  410. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  411. ----------150E-------------------------------
  412. INT 15 - VMiX - TERMINATE PROCESS
  413.     AH = 0Eh
  414.     STACK:    WORD    process ID
  415. Return: AX = status
  416. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  417. ----------150E-------------------------------
  418. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  419.     AH = 0Eh
  420. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  421. ----------150F-------------------------------
  422. INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  423.     AH = 0Fh
  424.     AL = phase code
  425.         00h reserved
  426.         01h surface analysis
  427.         02h formatting
  428. Return: CF clear if formatting should continue, set if it should terminate
  429. Note:    called during ESDI drive formatting after each cylinder is completed
  430. SeeAlso: INT 13/AH=1Ah
  431. ----------150F-------------------------------
  432. INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
  433.     AH = 0Fh
  434.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  435.         WORD    ID of element in queue chain
  436. Return: AX = key
  437. SeeAlso: AH=0Ah"VMiX"
  438. ----------150F-------------------------------
  439. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  440.     AH = 0Fh
  441.     DS:BX -> ASCIZ command
  442. Return: after command has been processed
  443. Notes:    specified string is executed as if it had been typed at the MultiDOS
  444.       command prompt
  445.     the task is placed on a queue which MultiDOS examines periodically and
  446.       is suspended until MultiDOS has processed the command
  447.     all lowercase characters up to the first blank are converted to upper
  448.       case within the given buffer
  449. ----------1510-------------------------------
  450. INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
  451.     AH = 10h
  452.     STACK:    DWORD    pointer to function
  453.           N    WORDs    function args
  454. Return: ???
  455. ----------1510-------------------------------
  456. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  457.     AH = 10h
  458.     AL = semaphore number (00h-3Fh)
  459. Return: AH = status
  460.         00h semaphore not in use
  461.         01h semaphore owned by another task
  462.         02h invalid semaphore number
  463.         03h semaphore owned by caller
  464. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  465. ----------151000-----------------------------
  466. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  467.     AX = 1000h
  468. Return: after other processes run
  469. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  470.       the current time-slice is set to expire at the next clock tick rather
  471.       than immediately
  472. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  473. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  474. SeeAlso: INT 7F/AH=E8h
  475. ----------151001-----------------------------
  476. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  477.     AX = 1001h
  478.     BX = number of bytes to allocate
  479. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  480. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  481.       common memory
  482. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  483. ----------151002-----------------------------
  484. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  485.     AX = 1002h
  486.     ES:DI -> previously allocated block
  487. Return: block freed
  488. SeeAlso: AX=1001h,AX=DE0Dh
  489. ----------151003-----------------------------
  490. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  491.     AX = 1003h
  492.     BH = attribute
  493.     BL = character
  494.     DX = segment of object handle for window
  495. Note:    BX=0 does not display anything, it only positions the hardware cursor
  496. ----------1510-------------------------------
  497. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  498.     AH = 10h
  499.     AL = 04h thru 12h
  500. Return: pops up "Programming error" window in DV 2.x
  501. ----------151013-----------------------------
  502. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  503.     AX = 1013h
  504.     ES:DI -> FAR service routine
  505. Return: BX = bit mask indicating which bit was allocated
  506.          0000h if no more bits available
  507. SeeAlso: AX=1014h,AX=1015h
  508. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  509.       interrupt; if other calls need to be made, the interrupt handler
  510.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  511. ----------151014-----------------------------
  512. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  513.     AX = 1014h
  514.     BX = bit mask from INT 15/AX=1013h
  515. SeeAlso: AX=1013h,AX=1015h
  516. ----------151015-----------------------------
  517. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  518.     AX = 1015h
  519.     BX = bit mask for interrupts to post
  520. Return: indicated routines will be called: (DV 2.0x) at next task switch
  521.                        (DV 2.2x) immediately
  522. SeeAlso: AX=1013h,AX=1014h
  523. Notes:    this is one of the few TopView calls which are allowed from a hardware
  524.       interrupt handler
  525.     the handler will be called with ES containing the segment of the handle
  526.       of the next task to be executed; on return, ES must be the segment of
  527.       a task handle
  528. ----------151016-----------------------------
  529. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  530.     AX = 1016h
  531.     ES:DI = possible object handle
  532. Return: BX = FFFFh if ES:DI is a valid object handle
  533.          0000h if ES:DI is not
  534. Note:    under DESQview versions prior to 2.50, an object handle is always a
  535.       pointer to the object; for versions 2.50 and up, only task handles
  536.       are always pointers (other handles may consist of an object number
  537.       and offset into DESQview's common memory)
  538. SeeAlso: AX=DE14h,AX=DE2Bh
  539.  
  540. Format of object:
  541. Offset    Size    Description
  542.  00h    WORD    offset in common memory of previous object of same type
  543.  02h    WORD    offset in common memory of next object of same type
  544.  04h    WORD    signature FEDCh (DV 2.42-)
  545.          signature FEDCh or object number (DV 2.50+)
  546.  06h    WORD    object type
  547.  08h    DWORD    object handle to return to caller
  548.  0Ch    DWORD    canonicalized object address (segment = common memory)
  549.      ...    varies by object type and DESQview version
  550. ----------151017-----------------------------
  551. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  552.     AX = 1017h
  553. Return: pops up "Programming error" window in DV 2.x
  554. ----------151018-----------------------------
  555. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  556.     AX = 1018h
  557.     BH = column
  558.     BL = row
  559.     ES = segment of object handle for window below which to search
  560.          0000h = start search with topmost window
  561. Return: ES = segment of object handle for window which is visible at the
  562.            indicated position, or covered by indicated window
  563.        = 0000h no window
  564. SeeAlso: AX=1023h,AX=1024h
  565. ----------151019-----------------------------
  566. INT 15 - TopView - "SOUND" - MAKE TONE
  567.     AX = 1019h
  568.     BX = frequency in Hertz (0000h = silence)
  569.     CX = duration in clock ticks (18.2 ticks/sec)
  570. Return: immediately, tone continues to completion
  571. Notes:    if another tone is already playing, the new tone does not start until
  572.       completion of the previous one.  Up to 32 tones may be queued before
  573.       the process is blocked until a note completes.
  574.     in DV 2.00, the lowest tone allowed is 20 Hz
  575.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  576.       notes are also cancelled
  577. SeeAlso: INT 16/AH=73h
  578. ----------15101A-----------------------------
  579. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  580.     AX = 101Ah
  581. Return: stack switched
  582. Notes:    this call may not be nested; a second call must be preceded by a call
  583.       to "USTACK" (AX=1025h)
  584.     while TopView requires many API calls to be executed while on the
  585.       task's internal stack, DESQview allows those calls to be executed
  586.       regardless of the current stack
  587. SeeAlso: AX=1025h
  588. ----------15101B-----------------------------
  589. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  590.     AX = 101Bh
  591. Return: task-switching temporarily disabled
  592. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  593.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  594.       will again be disabled)
  595.     suspends the caller until DOS is free
  596. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  597. SeeAlso: INT 60/DI=0602h
  598. ----------15101C-----------------------------
  599. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  600.     AX = 101Ch
  601. Return: task-switching enabled
  602. Note:    this API call may be made from within a hardware interrupt handler
  603. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  604. ----------15101D-----------------------------
  605. INT 15 - TopView - "STOP" - STOP TASK
  606.     AX = 101Dh
  607.     ES = segment of object handle for task to be stopped
  608.          (== handle of main window for that task)
  609. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  610. Note:    once a task has been stopped, additional "STOP"s are ignored
  611. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  612.       current task
  613. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  614. ----------15101E-----------------------------
  615. INT 15 - TopView - "START" - START TASK
  616.     AX = 101Eh
  617.     ES = segment of object handle for task to be started
  618.          (== handle of main window for that task)
  619. Return: indicated task is started up again
  620. Note:    once a task has been started, additional "START"s are ignored
  621. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  622. ----------15101F-----------------------------
  623. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  624.     AX = 101Fh
  625.     BX = bit fields
  626.          bits 0-12: number of characters to display
  627.          bits 13,14: which mouse button may be pressed to remove window
  628.              00 = either
  629.              01 = left
  630.              10 = right
  631.              11 = either
  632.          bit 15: beep if 1
  633.     ES:DI -> text of message
  634.     CH = width of error window (0 = default)
  635.     CL = height of error window (0 = default)
  636.     DX = segment of object handle
  637. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  638. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  639. ----------151020-----------------------------
  640. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  641.     AX = 1020h
  642. Return: pops up "Programming error" window in DV v2.00+
  643. ----------151021-----------------------------
  644. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  645.     AX = 1021h
  646.     BX = segment of object handle for task to interrupt (not self)
  647.     DX:CX -> FAR routine to jump to next time task is run
  648. Return: nothing
  649. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  650.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  651.       needs to be preserved
  652.     multiple PGMINTs to a single task are processed last-in first-out
  653.     if the other task is in a DOS or DV API call, the interruption will
  654.       occur on return from that call
  655. ----------151022BX0000-----------------------
  656. INT 15 - TopView - "GETVER" - GET VERSION
  657.     AX = 1022h
  658.     BX = 0000h
  659. Return: BX nonzero, TopView or compatible loaded
  660.     (BL = major version, BH = minor version)
  661. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  662. ----------151023-----------------------------
  663. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  664.     AX = 1023h
  665.     BX = segment of object handle for parent window within which to
  666.          position the window (0 = full screen)
  667.     ES = segment of object handle for window to be positioned
  668.     DL = bit flags
  669.          bits 0,1: horizontal position
  670.         00 = current
  671.         01 = center
  672.         10 = left
  673.         11 = right
  674.          bits 2,3: vertical position
  675.         00 = current
  676.         01 = center
  677.         10 = top
  678.         11 = bottom
  679.          bit 4: don't redraw screen if set
  680.          bits 5-7 not used
  681.     CH = number of columns to offset from position specified by DL
  682.     CL = number of rows to offset from position specified by DL
  683. Return: nothing
  684. ----------151024-----------------------------
  685. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  686.     AX = 1024h
  687.     BX = segment of object handle for window
  688.           (0 = use default)
  689. Return: ES:DI -> virtual screen
  690.     CX = size of virtual screen in bytes
  691.     DL = 00h text screen
  692.          01h graphics screen
  693. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  694. ----------151025-----------------------------
  695. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  696.     AX = 1025h
  697. Return: stack switched back
  698. Notes:    call only after having switched to internal stack with AX=101Ah
  699.     while TopView requires many API calls to be executed while on the
  700.       task's private stack, DESQview allows those calls to be executed
  701.       regardless of the current stack
  702. SeeAlso: AX=101Ah
  703. ----------1510-------------------------------
  704. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  705.     AH = 10h
  706.     AL = 26h thru 2Ah
  707. Return: pops up "Programming error" window in DV 2.x
  708. ----------15102B-----------------------------
  709. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  710.     AX = 102Bh
  711.     BX = segment of object handle for task
  712. Return: nothing
  713. Note:    forces a task which is waiting on its objectq to continue by placing
  714.       the handle for the task on the objectq
  715. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  716. ----------15102C-----------------------------
  717. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  718.     AX = 102Ch
  719.     ES:DI -> contents of .PIF/.DVP file (see below)
  720.     BX = size of .PIF/.DVP info
  721. Return: BX = segment of object handle for new task
  722.          0000h on error
  723. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  724.  
  725. Format of .PIF/.DVP file:
  726. Offset    Size    Description
  727.  00h    BYTE    reserved (0)
  728.  01h    BYTE    checksum of bytes 02h through 170h
  729.  02h 30 BYTEs    blank-padded program title
  730.  20h    WORD    maximum memory to allocate to partition in K
  731.  22h    WORD    minimum memory required in K
  732.  24h 64 BYTEs    ASCIZ program pathname
  733.  64h    BYTE    default drive letter ('A',...)
  734.  65h 64 BYTEs    ASCIZ default directory name
  735.  A5h 64 BYTEs    ASCIZ program parameters
  736.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  737.  E6h    BYTE    number of text pages used
  738.  E7h    BYTE    number of first interrupt to save
  739.  E8h    BYTE    number of last interrupt to save
  740.  E9h    BYTE    rows in virtual screen buffer
  741.  EAh    BYTE    columns in virtual screen buffer
  742.  EBh    BYTE    initial window position, row
  743.  ECh    BYTE    initial window position, column
  744.  EDh    WORD    system memory in K
  745.  EFh 64 BYTEs    ASCIZ shared program name
  746. 12Fh 64 BYTEs    ASCIZ shared program data file
  747. 16Fh    BYTE    flags1
  748.         bit 7: writes text directly to screen
  749.         bit 6: runs in foreground only
  750.         bit 5: uses math coprocessor
  751.         bit 4: accesses system keyboard buffer directly
  752.         bits 3-1: reserved (0)
  753.         bit 0: swappable
  754. 170h    BYTE    flags2
  755.         bit 6: uses command-line parameters in field at A5h
  756.         bit 5: swaps interrupt vectors
  757. ---information unique to .DVP files---
  758. 171h  2 BYTEs    keys to use on open menu
  759. 173h    WORD    size of script buffer in bytes
  760. 175h    WORD    automatically give up CPU after this many tests for keyboard
  761.         input in one clock tick (default 0 = never)
  762. 177h    BYTE    nonzero = "uses own colors"
  763. 178h    BYTE    nonzero if application swappable
  764. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  765.         in actual .DVP files, frequently 01h
  766. 17Ch    BYTE    nonzero to automatically close on exit
  767. 17Dh    BYTE    nonzero if copy-protect floppy is required
  768. ---information unique to DESQview 2.0+---
  769. 17Eh    BYTE    .DVP version number
  770.         00h DESQview v1.2+
  771.         01h DESQview v2.0+
  772.         02h DESQview v2.2+
  773. 17Fh    BYTE    reserved (0)
  774. 180h    BYTE    initial number of rows in physical window
  775. 181h    BYTE    initial number of columns in physical window
  776. 182h    WORD    maximum expanded memory to allow, in K
  777. 184h    BYTE    flags3
  778.         bit 7: automatically assign window position
  779.         bit 5: maximum memory value has been specified
  780.         bit 4: disallow "Close" command
  781.         bit 3: foreground-only when doing graphics
  782.         bit 2: don't virtualize
  783.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  784. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  785. 186h    BYTE    number of graphics pages used
  786. 187h    WORD    extra system memory size
  787. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  788. ---information unique to DESQview 2.2+---
  789. 18Ah    BYTE    serial port usage
  790.         FFh uses all serial ports
  791.         00h no serial ports
  792.         01h only COM1
  793.         02h only COM2
  794. 18Bh    BYTE    flags4
  795.         bit 7: automatically close application on exit if .COM or .EXE
  796.             specified
  797.         bit 6: swappable if not using serial ports
  798.         bit 5: start program with window hidden (v2.26+)
  799.         bit 4: start program in background (v2.26+)
  800.         bit 3: virtualize text
  801.         bit 2: virtualize graphics
  802.         bit 1: share CPU when foreground
  803.         bit 0: share EGA when foreground and zoomed
  804. 18Ch    BYTE    protection level for 386 machines
  805. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  806. ---information unique to DESQview/X 1.0---
  807. 18Dh    BYTE    X flags
  808.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  809.                (NEWPROC) inherit DOS client layer usage
  810.         bit 1: don't display DOS window
  811.         bit 2: don't display wait message when opening window
  812.         bits 3-7: unused (0)
  813. 18Eh    BYTE    X keyboard behavior (0-3)
  814. 18Fh    BYTE    font scaling
  815.         00h fixed fonts
  816.         01h scalable fonts
  817. 190h 10 BYTEs    reserved (0)
  818. 19Ah    WORD    length of data follownig XDVP signature
  819. 19Ch  4 BYTEs    signature "XDVP"
  820. 1A0h  N BYTEs    list of variable length records (see below)
  821.  
  822. Format of variable length record:
  823. Offset    Size    Description
  824.  00h    WORD    length of following record, 0000h if end of record list
  825.  02h    BYTE    record type
  826.         01h script filename, up to 64 characters
  827.         02h command-line parameters (allows >64 characters on cmdline)
  828.         03h environment inheritance
  829.         04h environment string
  830.         05h starting window position
  831. ---types 01h,02h,04h---
  832.  03h  N BYTEs    ASCII data
  833. ---type 03h---
  834.  03h    BYTE    inheritance
  835.          00h do not inherit
  836.         01h inherit environment
  837. ---type 05h---
  838.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  839.             starting row, starting column, starting height, starting width
  840. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  841.       only the last instance of each type is used; multiple occurrences of
  842.       type 04h are concatenated
  843. ----------15102D-----------------------------
  844. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  845.     AX = 102Dh
  846.     BL = subfunction
  847.          00h determine whether using keyboard mouse
  848.         Return: BL = 00h using real mouse
  849.                  01h using keyboard mouse
  850.          01h turn keyboard mouse on
  851.          02h turn keyboard mouse off
  852. ----------15102E-----------------------------
  853. INT 15 - DESQview v2.40 - ALLOCATE ??? MEMORY
  854.     AX = 102Eh
  855.     BX = number of bytes
  856. Return: AX = status
  857.         0000h successful
  858.         ES = segment of allocated memory
  859.         0001h failed    
  860. ----------1511-------------------------------
  861. INT 15 - TopView commands
  862.     AH = 11h
  863.     AL = various (except 17h)
  864. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  865.       see those below
  866. SeeAlso: AH=DEh
  867. ----------1511-------------------------------
  868. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  869.     AH = 11h
  870.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  871.             request (max len = 127)
  872. Return: AX = status
  873. ----------1511-------------------------------
  874. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  875.     AH = 11h
  876. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  877. SeeAlso: AH=12h"MultiDOS"
  878. ----------151117BX0000-----------------------
  879. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  880.     AX = 1117h
  881.     BX = 0000h    get current mapping context without setting
  882.          nonzero    set new mapping context
  883. Return: BX = mapping context in effect before call
  884.     interrupts enabled
  885. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  886.     mapping contexts determine conventional-memory addressability; setting
  887.       a mapping context ensures that the associated program and data areas
  888.       are in memory for access.  Usable by drivers, TSRs and shared
  889.       programs.
  890.     caller need not be running under DESQview, but must ensure that the
  891.       stack in use will not be mapped out by the call
  892. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  893. ----------1511DE-----------------------------
  894. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  895.     AX = 11DEh
  896. Return: CF clear if installed
  897.         AX = segment at which QEXT.SYS is located
  898. Note:    a private entry point may be found by searching the beginning of the
  899.       returned segment for the signature string
  900.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  901.       prior to the signature contains the QEXT version number in BCD,
  902.       and the word prior to that contains the offset within the QEXT
  903.       code segment of the private entry point
  904. SeeAlso: INT 67/AH=3Fh
  905.  
  906. Call private entry point with:
  907.     AH = 00h ???
  908.     AH = nonzero ???
  909. ----------1512-------------------------------
  910. INT 15 - VMiX - PUT PROCESS TO SLEEP
  911.     AH = 12h
  912.     STACK:    WORD    process ID
  913. Return: AX = status
  914. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  915. ----------1512-------------------------------
  916. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  917.     AH = 12h
  918. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  919. SeeAlso: AH=11h"MultiDOS"
  920. ----------1512--BH00-------------------------
  921. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  922.     AH = 12h
  923.     BH = 00h
  924.     BL = which handle to return
  925.         00h handle in DWORD on top of stack
  926.         01h current task's window handle
  927.         02h given task's mailbox handle (task's handle on stack)
  928.         03h current task's mailbox handle
  929.         04h given task's keyboard handle (task's handle on stack)
  930.         05h current task's keyboard object handle
  931.         06h given task's OBJECTQ handle (task's handle on stack)
  932.         07h current task's OBJECTQ handle
  933.         08h      \
  934.           thru > return 0000:0000 under DV < 2.26
  935.         10h      /
  936.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  937.         0Dh (2.26+) task handle of owner (parent) of current task
  938. Return: DWORD on top of stack is object handle
  939. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  940.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  941.       window)
  942. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  943. ----------1512--BH01-------------------------
  944. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  945.     AH = 12h
  946.     BH = 01h
  947.     BL = object type to create
  948.         00h (DV 2.0x only) handle is DWORD on top of stack
  949.         01h (DV 2.0x only) use task's window handle
  950.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  951.         03h (DV 2.0x only) current task's mailbox
  952.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  953.         05h (DV 2.0x only) current task's keyboard object
  954.         08h WINDOW class
  955.         09h MAILBOX class
  956.         0Ah KEYBOARD class
  957.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  958.         0Fh POINTER object
  959.         10h PANEL object
  960.     STACK: (if window object or WINDOW class)
  961.            DWORD address to jump to (no new task if high word == 0)
  962.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  963.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  964.            DWORD bytes system memory for input buffer for READ/READN
  965.             (0 == none, -1 == default--same as logical window size)
  966.            DWORD window size, columns
  967.            DWORD window size, rows
  968.            DWORD length of window title
  969.            DWORD address of window title
  970. Return: DWORD on top of stack is new object handle
  971. Notes:    if a new task is created, it is started with
  972.       AX = BX = SI = DI = BP = 0
  973.       DX:CX = handle of parent task
  974.       DS = ES = SS = segment of private stack (and new task's handle)
  975.     new windows are orphans, inherit the colors/hidden status of the
  976.       creating task's window, and are placed in the upper left hand corner
  977.       of the screen but not automatically redrawn
  978.     new keyboards are closed, and have all object bits cleared except for
  979.       the hardware cursor bit
  980. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  981. ----------1512--BH02-------------------------
  982. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  983.     AH = 12h
  984.     BH = 02h
  985.     BL = object
  986.         00h handle in DWORD on top of stack
  987.         window: close window and free
  988.         timer: free timer
  989.         panel: free panel object
  990.         pointer: free pointer
  991.         01h task's window handle - kills task, never returns
  992.         02h given task's mailbox (task's handle on top of stack)
  993.         03h current task's mailbox
  994.         04h given task's keyboard (task's handle on top of stack)
  995.         05h current task's keyboard object
  996. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  997.       task windows also free any mailbox, objectq, and panel objects held
  998.       by the task and any child tasks
  999.     if the keyboard being freed is the default keyboard for a task, this
  1000.       call is equivalent to CLOSE
  1001.     panel and pointer objects are automatically closed if open
  1002. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  1003. ----------1512--BH03-------------------------
  1004. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  1005.     AH = 12h
  1006.     BH = 03h
  1007.     BL = object
  1008.         00h mailbox handle in DWORD on top of stack
  1009.         02h sender of last msg read from mailbox (task's handle on stack)
  1010.         03h sender of last msg read from current task's mailbox
  1011. Return: DWORD on stack is task handle of message sender
  1012. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  1013. ----------1512--BH03-------------------------
  1014. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  1015.     AH = 12h
  1016.     BH = 03h
  1017.     BL = window to be connected
  1018.         00h handle of window to be attached in DWORD on top of stack
  1019.         01h attach current task's main window
  1020.     STACK: DWORD handle of window to attach to or 00000000h to detach
  1021. Return: ???
  1022. Notes:    when two windows are connected, both will move if the user moves either
  1023.     multiple windows may be attached to a single window, but each window
  1024.       may only be attached to one window at a time
  1025. SeeAlso: AH=12h/BH=83h
  1026. ----------1512--BX0300-----------------------
  1027. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  1028.     AH = 12h
  1029.     BX = 0300h
  1030.     STACK: DWORD handle of panel object
  1031. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  1032.            DWORD address of directory
  1033. Note:    a null string is returned if the object is not open
  1034. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  1035.  
  1036. Format of panel file:
  1037. Offset    Size    Description
  1038.  00h  2 BYTEs    C0h C3h
  1039.  02h    BYTE    number of panels in file
  1040.  03h    for each panel in file:
  1041.         8 BYTEs  blank-padded panel name
  1042.           DWORD  panel offset in file
  1043.           WORD   panel length
  1044.     data for panels (each consists of one or more window/query/manager
  1045.     streams)
  1046.         first byte of each panel must be 1Bh, fifth byte must be E5h
  1047. ----------1512--BH04-------------------------
  1048. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1049.     AH = 12h
  1050.     BH = 04h
  1051.     BL = window to read from
  1052.         00h handle is DWORD on top of stack
  1053.         01h use calling task's default window
  1054.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1055.         0Dh (DV 2.26+) default window of parent task of current task
  1056. Return: STACK:    DWORD number of bytes read
  1057.         DWORD address of buffer
  1058. Notes:    reading starts at the current logical cursor position; the cursor is
  1059.       updated to point at the character following the last one read
  1060.     any translucent blanks (FFh) which are visible on screen are changed
  1061.       to the character which is seen through them
  1062.     the string produced by the read is placed in an input buffer which may
  1063.       be reused by the next READ or READN of a window
  1064.     window stream opcodes D8h and D9h determine whether the read returns
  1065.       characters or attributes
  1066. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  1067. ----------1512--BH04-------------------------
  1068. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1069.     AH = 12h
  1070.     BH = 04h
  1071.     BL = object
  1072.         00h handle is DWORD on top of stack
  1073.         mailbox: wait for and get next message
  1074.         keyboard: wait for and get pointer to next input buffer
  1075.         pointer: wait for and get next message
  1076.         02h get next message from mailbox (task's handle on top of stack)
  1077.         03h get next message from current task's mailbox
  1078.         04h get the next input from keyboard (handle on top of stack)
  1079.         05h get the next input from task's default keyboard
  1080.         06h wait for input from any object in OBJECTQ (handle on stack)
  1081.         07h wait for input from any object in task's default OBJECTQ
  1082. Return: STACK: (if objectq) DWORD handle of object with input
  1083.            (otherwise)  DWORD number of bytes
  1084.                 DWORD address
  1085. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1086.       containing the character code as returned by the BIOS; the BIOS scan
  1087.       code is available via the STATUS call if the character is zero
  1088.     for a keyboard in field mode, the input buffer format is determined
  1089.       by the field table header for the window the keyboard is attached to
  1090.     keyboard input buffers and mailbox message buffers may be invalidated
  1091.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1092. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  1093.  
  1094. Format of pointer message:
  1095. Offset    Size    Description
  1096.  00h    WORD    row
  1097.  02h    WORD    column
  1098.  04h    BYTE    status
  1099.         bit 6: set when press/release mode active and button released
  1100.         bits 7-2: number of clicks-1 if multiple-click mode active
  1101.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  1102.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1103. ----------1512--BX0400-----------------------
  1104. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1105.     AH = 12h
  1106.     BX = 0400h
  1107.     STACK: DWORD timer's handle
  1108. Return: after timer expires
  1109.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1110. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  1111. ----------1512--BX0400-----------------------
  1112. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1113.     AH = 12h
  1114.     BX = 0400h
  1115.     STACK: DWORD handle of panel object
  1116.            DWORD window's handle (or 0 for current task's window)
  1117.            DWORD length of panel name
  1118.            DWORD pointer to panel name
  1119. Return: STACK: DWORD handle of keyboard or 0
  1120.            DWORD handle of window which was used
  1121. Notes:    status of APPLY may be checked with STATUS message
  1122.     panel MUST have the following format
  1123.       first byte must be 1Bh (i.e. must start with a stream)
  1124.       first opcode in stream must be E5h
  1125.         single byte arg of opcode is interpreted thus:
  1126.           bits 7,6    11 means create new window
  1127.             10 means create new field table for existing window
  1128.             01 means use existing window and field table
  1129.           bit 5 if set, panel contains a field table 
  1130.             (creates a new keyboard and puts it in field mode)
  1131.           bit 4 if set, panel contains input fields
  1132.           bit 3 if set, panel contains select fields but no input fields
  1133.     if the panel contains input or select fields, a keyboard handle is
  1134.       returned; either the window's current open keyboard or a
  1135.       newly-created keyboard object.  The caller should read that keyboard
  1136.       to obtain input from the panel.
  1137. SeeAlso: AH=12h/BH=84h
  1138. ----------1512--BH05------------------------
  1139. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1140.     AH = 12h
  1141.     BH = 05h
  1142.     BL = object
  1143.         00h handle is DWORD on top of stack
  1144.         timer: start timer to end at a specified time
  1145.         keyboard: add input buffer to queue
  1146.         pointer: move pointer icon to specified position
  1147.         02h send message by value/status=0 to mbox (task's handle on stack)
  1148.         03h send message by value/status=0 to current task's mailbox
  1149.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1150.         05h add input buffer to task's default KEYBOARD queue
  1151.         06h add an object to OBJECTQ (handle on top of stack)
  1152.         07h add an object to task's default OBJECTQ
  1153.     STACK: (if mailbox)  DWORD length
  1154.                  DWORD address
  1155.            (if keyboard) DWORD status (scan code in keystroke mode)
  1156.                  DWORD length (should be 1 in keystroke mode)
  1157.                  DWORD address
  1158.            (if objectq)  DWORD handle of object to add
  1159.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1160.                    only accurate to 1/18 sec)
  1161.            (if pointer)  DWORD column relative to origin of window
  1162.                  DWORD row relative to origin of window
  1163. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1164.     the data and status written to a keyboard object must match the format
  1165.       returned by the keyboard object in the current mode
  1166.     the pointer position is scaled according to the current scaling factors
  1167. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1168. ----------1512--BH05-------------------------
  1169. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1170.     AH = 12h
  1171.     BH = 05h
  1172.     BL = window to write to
  1173.         00h DWORD on top of stack is window handle
  1174.         01h write string to task's default window
  1175.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1176.         0Dh (DV 2.26+) default window of parent of current task
  1177.     STACK: DWORD object handle if handle passed on stack
  1178.            DWORD total length of string (high word == 0)
  1179.            DWORD address of string to display
  1180. Return: indicated actions performed
  1181.     a. non-control characters are displayed (opcodes DEh and DFh control
  1182.        whether the attributes are left or changed to the current attrib)
  1183.     b. CR/LF/BS/Tab cause the usual cursor movement
  1184.     c. ESC starts a data structure with additional commands if following
  1185.        byte is less than 20h; otherwise, it is written to the window
  1186.     STACK:    DWORD handle of new window if window stream opcode E6h
  1187.         else nothing
  1188. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1189.  
  1190. Data Structure:
  1191.     MAGIC  DB  1Bh
  1192.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  1193.     LENGTH DW  ?   ; length of remainder in bytes
  1194.     var-length fields follow, each an OPCODE followed by
  1195.          zero or more args
  1196.  
  1197. MODE 00h (set or display values) "WINDOW STREAM"
  1198.     Opcodes:args
  1199.     00h  display 20h blanks with the default attribute
  1200.     01h-1Fh display OPCODE blanks with the default attribute
  1201.     20h  display char with default attribute 20h times
  1202.          BYTE char to repeat
  1203.     21h-3Fh display char with default attribute OPCODE-20h times
  1204.          BYTE char to repeat
  1205.     40h  display 20h blanks with specified attribute
  1206.          BYTE attribute of blanks
  1207.     41h-5Fh display OPCODE-40h blanks with specified attribute
  1208.          BYTE attribute of blanks
  1209.     60h  display next 20h characters
  1210.          20h BYTEs characters to display
  1211.     61h-7Fh display next OPCODE-60h characters
  1212.          N BYTEs characters to display
  1213.     80h-87h     display N blanks with default attribute
  1214.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1215.               [000h means 800h]
  1216.     88h-8Fh display N copies of the character
  1217.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1218.               [000h means 800h]
  1219.          BYTE character to repeat
  1220.     90h-97h     display N blanks with specified attribute
  1221.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1222.               [000h means 800h]
  1223.          BYTE attribute
  1224.     98h-9FH     display string at logical cursor pos
  1225.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1226.               [000h means 800h]
  1227.          N BYTEs string to display
  1228.     A0h  set logical cursor row
  1229.          BYTE row number (0 is top)
  1230.     A1h  set logical cursor column
  1231.          BYTE column number (0 is leftmost)
  1232.     A2h  set top edge of scrolling region
  1233.          BYTE row
  1234.     A3h  set left edge of scrolling region
  1235.          BYTE column
  1236.     A4h  set row of physical window position
  1237.          BYTE line
  1238.     A5h  set column of physical window position
  1239.          BYTE column
  1240.     A6h  set height of physical window
  1241.          BYTE #rows
  1242.     A7h  set width of physical window
  1243.          BYTE #columns
  1244.     A8h  set viewport row
  1245.          BYTE row
  1246.     A9h  set viewport column
  1247.          BYTE column
  1248.     AAh  set virtual screen height [contents of window unpredictable after]
  1249.          BYTE rows
  1250.     ABh  set virtual screen width [contents of window unpredictable after]
  1251.          BYTE columns
  1252.     ACh-AEh     unused
  1253.     AFh  set compatible/preferred video modes
  1254.          BYTE compatibility/preference mask
  1255.         bit 7    compatible with monochrome
  1256.         bit 6    compatible with color text, EGA/VGA graphics
  1257.         bit 5    compatible with medium-resolution CGA graphics
  1258.         bit 4    compatible with high-resolution CGA graphics
  1259.         bit 3    prefer monochrome
  1260.         bit 2    prefer color text, EGA/VGA graphics
  1261.         bit 1    prefer medium-resolution CGA graphics
  1262.         bit 0    prefer high-resolution CGA graphics
  1263.     B0h  move logical cursor down
  1264.          BYTE #rows (signed, negative values move up)
  1265.             [if #rows=0 and hardware cursor owner, update hw crsr]
  1266.     B1h  move logical cursor right
  1267.          BYTE #cols (signed, negative values move left)
  1268.             [if #cols=0 and hardware cursor owner, update hw crsr]
  1269.     B2h  shift top edge of scrolling region
  1270.          BYTE #rows (signed)
  1271.     B3h  shift left edge of scrolling region
  1272.          BYTE #cols (signed)
  1273.     B4h  shift physical window down
  1274.          BYTE #lines (signed)
  1275.     B5h  shift physical window right
  1276.          BYTE #columns (signed)
  1277.     B6h  expand physical window vertically
  1278.          BYTE #lines (signed)
  1279.     B7h  expand physical window horizontally
  1280.          BYTE #columns (signed)
  1281.     B8h  adjust viewport row
  1282.          BYTE #rows (signed)
  1283.     B9h  adjust viewport column
  1284.          BYTE #columns (signed)
  1285.     BAh  adjust virtual screen height [contents of window unpredict after]
  1286.          BYTE #rows to increase (signed)
  1287.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  1288.          BYTE #cols to increase (signed)
  1289.     BCh-BFh     reserved (currently unused)
  1290.     C0h  set logical cursor position
  1291.          BYTE row number (0 is top border)
  1292.          BYTE column number (0 is left border)
  1293.     C1h  set top left corner of scrolling region
  1294.          BYTE row
  1295.          BYTE column
  1296.     C2h  set physical window pos
  1297.          BYTE upper left row (no top border if 0)
  1298.          BYTE upper left column (no left border if 0)
  1299.     C3h  set current window size
  1300.          BYTE #rows
  1301.          BYTE #cols
  1302.     C4h  set upper left corner of viewport (portion of virtual screen
  1303.          displayed in window)
  1304.          BYTE row
  1305.          BYTE column
  1306.     C5h  set size of virtual screen [contents unpredictable afterwards]
  1307.          BYTE #rows
  1308.          BYTE #cols
  1309.     C6h  unused
  1310.     C7h  unused
  1311.     C8h  set logical cursor relative to current position
  1312.          BYTE number of rows to move down (signed)
  1313.          BYTE number of columns to move right (signed)
  1314.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  1315.     C9h  shift top left corner of scrolling region
  1316.          BYTE #rows (signed)
  1317.          BYTE #cols (signed)
  1318.     CAh  set window pos relative to current position
  1319.          BYTE number of rows to shift down (signed)
  1320.          BYTE number of columns to shift right (signed)
  1321.     CBh  set window size relative to current size
  1322.          BYTE number of rows to expand (signed)
  1323.          BYTE number of cols to expand (signed)
  1324.     CCh  shift viewport relative to current position
  1325.          BYTE rows to shift (signed)
  1326.          BYTE cols to shift (signed)
  1327.     CDh  resize virtual screen
  1328.          BYTE #rows to expand (signed)
  1329.          BYTE #cols to expand (signed)
  1330.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1331.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1332.     D0h  allow window frame to extend beyond screen
  1333.     D1h  always display a complete frame, even if window extends beyond 
  1334.          edge of screen
  1335.     D2h  allow DV to change logical colors on video mode switch (default)
  1336.     D3h  application changes logical attributes
  1337.     D4h  window is visible [must redraw to actually make visible]
  1338.     D5h  window is hidden [must redraw to actually remove]
  1339.     D6h  window has frame (default)
  1340.     D7h  window unframed [must redraw to actually remove frame]
  1341.     D8h  READ/READN will read characters from window (default)
  1342.     D9h  READ/READN will read attributes from window
  1343.     DAh  use logical attributes, which may be remapped
  1344.         attributes
  1345.            1 normal text
  1346.            2 highlighted normal text
  1347.            3 help text
  1348.            4 highlighted help text
  1349.            5 error message
  1350.            6 highlighted error message
  1351.            7 emphasized text
  1352.            8 marked text
  1353.            9-16 are reverse video versions of 1-8
  1354.     DBh  use physical attributes for characters
  1355.     DCh  enable special actions for control characters (default)
  1356.     DDh  disable special control char handling, all chars displayable by
  1357.          BIOS TTY call
  1358.     DEh  write both character and attribute (default)
  1359.     DFh  write character only, leave attribute untouched
  1360.     E0h  repeat following commands through E1h opcode
  1361.          BYTE number of times to repeat (00h means 256 times)
  1362.     E1h  end of commands to repeat, start repeating them
  1363.     E2h  set current output color
  1364.          BYTE color
  1365.     E3h  clear virtual screen from scroll origin to end using current color
  1366.     E4h  redraw window
  1367.     E5h  select menu style
  1368.          BYTE style (normally 18h)
  1369.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1370.           this stream
  1371.     E5h  (panel file only)
  1372.          BYTE modifier
  1373.         bits 7,6 = 11 panel stream creates new window
  1374.              = 10 panel defines new field table for existing window
  1375.              = 01 panel stream uses existing window & field table
  1376.         bit 5 = 1 stream contains a field table (create kyboard object)
  1377.         bit 4 = 1 stream defines input fields (create keyboard object)
  1378.         bit 3 = 1 stream defines select fields but not input fields
  1379.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1380.         bit 1 reserved
  1381.         bit 0 reserved
  1382.     E6h  create new window and perform rest of manipulations in new window
  1383.          BYTE number of rows
  1384.          BYTE number of columns
  1385.          Return: DWORD object handle of new window returned on stack at end
  1386.     E7h  no operation
  1387.     E8h  scroll area up (top left corner defined by opcode C1h)
  1388.          BYTE height
  1389.          BYTE width
  1390.     E9h  scroll area down (top left corner defined by opcode C1h)
  1391.          BYTE height
  1392.          BYTE width
  1393.     EAh  scroll area left (top left corner defined by opcode C1h)
  1394.          BYTE height
  1395.          BYTE width
  1396.     EBh  scroll area right (top left corner defined by opcode C1h)
  1397.          BYTE height
  1398.          BYTE width
  1399.     ECh  set logical attributes for window contents
  1400.          BYTE video modes command applies to
  1401.         bit 7    monochrome
  1402.         bit 6    color text, EGA/VGA graphics
  1403.         bit 5    medium-resolution CGA graphics
  1404.         bit 4    high-resolution CGA graphics
  1405.          BYTE which attributes to set
  1406.         bit 7  if set, copy single following byte to indicated attribs
  1407.         bits 4-6  # of first attribute to change - 1
  1408.         bits 0-3  # of consecutive attributes to change
  1409.          N BYTEs new attributes
  1410.     EDh  set logical attributes for window frame
  1411.          BYTE video modes command applies to (see opcode ECh)
  1412.          BYTE which attributes to set
  1413.         bit 7  if set, copy single following byte to indicated attrs
  1414.         bits 4-6  # of first attribute to change - 1
  1415.         bits 0-3  # of consecutive attributes to change
  1416.          N BYTEs new attributes
  1417.           attributes
  1418.                1 = top left corner
  1419.                2 = top right corner
  1420.                3 = bottom left corner
  1421.                4 = bottom right corner
  1422.                5 = top edge
  1423.                6 = bottom edge
  1424.                7 = left edge
  1425.                8 = right edge
  1426.     EEh  set characters for window frame
  1427.          BYTE video modes command applies to (see opcode ECh)
  1428.          BYTE which characters to set
  1429.         bit 7  if set, copy single following byte to indicated chars
  1430.         bits 4-6  # of first char to change - 1
  1431.         bits 0-3  # of consecutive chars to change
  1432.          N BYTEs new chars (same relative position as attributes above)
  1433.     EFh  set window name
  1434.          BYTE length of name (should be in range 0 to logical screen width)
  1435.          N BYTEs name
  1436.     F0h  clear input field to blanks
  1437.          BYTE field number
  1438.     F1h  fill input field with character
  1439.          BYTE field number
  1440.          BYTE char
  1441.     F2h  set color of input field
  1442.          BYTE field number (1-N)
  1443.          BYTE attribute
  1444.     F3h  set initial contents of input field
  1445.          BYTE field number (1-N)
  1446.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1447.     F4h  position cursor to start of specific input field
  1448.          BYTE field number (1-N)
  1449.     F5h  change field table entry
  1450.          BYTE field number
  1451.          7-8 BYTEs field table entry (see opcode FFh below)
  1452.     F6h  set field type
  1453.          BYTE field number
  1454.          BYTE type
  1455.             00h inactive
  1456.             40h output field
  1457.             80h input field
  1458.             C0h deselected field
  1459.             C2h selected field
  1460.     F7h  "broadcast write"    write data to fields with program output bit
  1461.         set in field table entry, in field number order
  1462.          N BYTEs (total length of all program output fields)
  1463.     F8h  scroll field up a line
  1464.          BYTE field number
  1465.     F9h  scroll field down a line
  1466.          BYTE field number
  1467.     FAh  scroll field left
  1468.          BYTE field number
  1469.     FBh  scroll field right
  1470.          BYTE field number
  1471.     FCh  set field table header
  1472.          BYTE number of fields (must be <= existing number of fields)
  1473.          BYTE screen behavior bits
  1474.         bit 7  reserved
  1475.         bit 6  set if menu items may be selected via keyboard
  1476.         bit 5  set if left mouse button may terminate entry
  1477.         bit 4  set if right mouse button may terminate entry
  1478.         bit 3  if set, select fields return contents or blanks rather
  1479.             than 'Y' or 'N'
  1480.         bit 2  if set, modified bits reset on return to application
  1481.         bits 0,1 = 00 no data returned on read of keyboard
  1482.                01 data returned as array of chars containing
  1483.                 all fields packed together, with no field
  1484.                 numbers
  1485.                10 data returned as numbered variable-length
  1486.                 records for all fields
  1487.                11 data returned as numbered variable-length
  1488.                 records for the fields which were modified
  1489.          BYTE current input field (updated by DESQview)
  1490.          BYTE current select field (updated by DESQview)
  1491.          BYTE attribute for select fields when they are pointed at
  1492.          BYTE attribute for select fields which have been selected
  1493.     FDh  reset modified bit for all fields
  1494.     FEh  reset selected and modified bits for all fields
  1495.     FFh  set up input fields
  1496.          6 BYTEs table header (see opcode FCh above)
  1497.          the field table entries, one for each field
  1498.          BYTE start row       \
  1499.          BYTE start column  \ if menu selection and start is to
  1500.          BYTE end row        / right or below end, select from kbd only
  1501.          BYTE end column   /
  1502.          BYTE field type
  1503.             bits 7,6 = 00 inactive (non-entry) field
  1504.                    01 echos keystrokes input to make menu selection
  1505.                    10 fill-in field
  1506.                    11 select field
  1507.             bit 5  field can be filled by broadcast write (F7h opcode)
  1508.             bit 4  reserved
  1509.             bit 3  reserved
  1510.             bit 2  reserved
  1511.             bit 1  set if field selected
  1512.             bit 0  set if field modified
  1513.          BYTE modifier
  1514.               if type is fill-in, then bit flags to determine behavior
  1515.               bit 7     if set, automatically enter CR when field full
  1516.               bit 6     move to next field when current field is full
  1517.               bit 5     if set, enter text from right end (for numbers)
  1518.               bit 4     if set, force input to uppercase
  1519.               bit 3     if set, clear old contents on first keystroke
  1520.               bit 2     if set, input returned when cursor moves out
  1521.                  of modified field (API level 2.02+)
  1522.               bit 1     reserved
  1523.               bit 0     reserved
  1524.               if select field, first key to press to activate
  1525.               00h if have to point-&-click or is an extended-ASCII
  1526.                   keystroke (only if two-key menus enabled)
  1527.          BYTE (select field only) normal color of field
  1528.          BYTE second key for select field.  This byte is present iff
  1529.               two-letter menu entries selected with opcode E5h, and
  1530.               in that case is present regardless of field type
  1531.          Note: DESQview uses and updates the actual copy of the information
  1532.            which is contained in the stream.  Thus this info must remain
  1533.            intact until after the data entry is complete.
  1534.  
  1535. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1536.     A0h return logical cursor row in next byte
  1537.     A1h return logical cursor column in next byte
  1538.     A2h return top row of scrolling region in next byte
  1539.     A3h return left column of scrolling region in next byte
  1540.     A4h return row of physical window origin in next byte
  1541.     A5h return column of physical window origin in next byte
  1542.     A6h return height of physcial window in next byte
  1543.     A7h return width of physical window in next byte
  1544.     A8h return row of viewport origin in next byte
  1545.     A9h return column of viewport origin in next byte
  1546.     AAh return height of virtual screen in next byte
  1547.     ABh return width of virtual screen in next byte
  1548.     AFh return current video mode in next byte
  1549.     C0h return current logical cursor position in next two bytes
  1550.     C1h return top left corner of scrolling region in next two bytes
  1551.     C2h return current window position in next two bytes
  1552.     C3h return current window size in next two bytes
  1553.     C4h return current viewport origin in next two bytes
  1554.     C5h return current virtual screen size in next two bytes
  1555.     D0h \ overwritten with D0h if frames may fall off screen edge
  1556.     D1h /               D1h if frames always displayed entirely
  1557.     D2h \ overwritten with D2h if DESQview controls color palette
  1558.     D3h /               D3h if application changes color palette
  1559.     D4h \ overwritten with D4h if window visible
  1560.     D5h /               D5h if window hidden
  1561.     D6h \ overwritten with D6h if window has frame
  1562.     D7h /               D7h if window unframed
  1563.     D8h \ overwritten with D8h if reading characters from window
  1564.     D9h /               D9h if reading attributes from window
  1565.     DAh \ overwritten with DAh if using logical attributes
  1566.     DBh /               DBh if using physical attributes
  1567.     DCh \ overwritten with DCh if TTY control char interpretation on
  1568.     DDh /               DDh if TTY control char interpretation off
  1569.     DEh \ overwritten with DEh if writing both characters and attributes
  1570.     DFh /               DFh if leaving attributes untouched
  1571.     E2h return current color in next byte
  1572.     ECh get logical attributes for window contents
  1573.         BYTE execute call if currently in specified video mode
  1574.         bit 7    monochrome
  1575.         bit 6    color text, EGA/VGA graphics
  1576.         bit 5    medium-resolution CGA graphics
  1577.         bit 4    high-resolution CGA graphics
  1578.         BYTE which attributes to get
  1579.         bit 7 unused???
  1580.         bits 4-6 first attribute to get - 1
  1581.         bits 0-3 # consecutive attributes
  1582.         N BYTEs buffer to hold attributes
  1583.     EDh get logical attributes for window frame
  1584.         BYTE execute call if currently in video mode (see opcode ECh)
  1585.         BYTE which attributes to get
  1586.         bit 7 unused???
  1587.         bits 4-6 first attribute to get - 1
  1588.         bits 0-3 # consecutive attributes
  1589.         N BYTEs buffer to hold attributes
  1590.     EEh get characters for window frame
  1591.         BYTE execute call if currently in video mode (see opcode ECh)
  1592.         BYTE which attributes to get
  1593.         bit 7 unused???
  1594.         bits 4-6 first char to get - 1
  1595.         bits 0-3 # consecutive chars
  1596.         N BYTEs buffer to hold chars
  1597.     EFh return first N characters of current window name
  1598.         BYTE    max length of returned name
  1599.         N BYTEs buffer to hold window name
  1600.     F3h return contents of specified field
  1601.         BYTE field number
  1602.         N BYTEs buffer to hold field contents (size exactly equal to field
  1603.             size)
  1604.     F5h get field table entry
  1605.         BYTE field number
  1606.         7-8 BYTEs buffer to hold field table entry
  1607.            Notes: DV < 2.26 always returns 7 bytes
  1608.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1609.             table is using 8-byte entries and eighth byte after
  1610.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1611.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1612.             depending on the field table entry size
  1613.     F6h get type of a field
  1614.         BYTE field number
  1615.         BYTE type
  1616.     FCh get field table header
  1617.         6 BYTEs buffer to store header
  1618.  
  1619. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1620.     00h allow window to be moved horizontally
  1621.     01h allow window to be moved vertically
  1622.     02h allow window to change width
  1623.     03h allow window to change height
  1624.     04h allow window to be scrolled horizontally
  1625.     05h allow window to be scrolled vertically
  1626.     06h allow "Close Window" menu selection for application
  1627.     07h allow "Hide Window" menu selection for application
  1628.     08h allow application to be suspended ("Rearrange/Freeze")
  1629.     0Eh allow "Scissors" menu
  1630.     10h allow DESQview main menu to be popped up
  1631.     11h allow "Switch Windows" menu
  1632.     12h allow "Open Window" menu
  1633.     13h allow "Quit" menu selection
  1634.     20h-33h opposite of 00h-13h, disallow specified action
  1635.     40h notify if horizontal position of window changes
  1636.     41h notify if vertical position of window changes
  1637.     42h notify if width of window changes
  1638.     43h notify if height of window changes
  1639.     44h notify if window scrolled horizontally
  1640.     45h notify if window scrolled vertically
  1641.     46h notify if window is closed--program has to clean up and exit itself
  1642.     47h notify if window is hidden
  1643.     48h notify if "?" on main menu selected
  1644.     49h notify if pointer message sent to window
  1645.     4Ah notify if window is placed in foreground
  1646.     4Bh notify if window is placed in background
  1647.     4Ch notify if video mode changes
  1648.     4Dh notify if "Scissors" menu "Cut" option selected
  1649.     4Eh notify if "Scissors" menu "Copy" option selected
  1650.     4Fh notify if "Scissors" menu "Paste" option selected
  1651.     50h notify if DESQview main menu about to pop up
  1652.     51h notify if DESQview main menu popped down
  1653.     60h-71h     opposite of 40h-51h: don't notify on specified event
  1654.     84h attach window to parent task's window (both move together)
  1655.     85h detach window from parent task's window (may move independently)
  1656.     86h disable background operation for application
  1657.     87h enable running in background
  1658.     88h set minimum size of physical window
  1659.         BYTE rows
  1660.         BYTE columns
  1661.     89h set maximum size of physical window
  1662.         BYTE rows
  1663.         BYTE cols
  1664.     8Ah set primary asynchronous notification routine
  1665.         DWORD address of routine, 0000h:0000h means none (see also below)
  1666.     8Bh set async notification parameter
  1667.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1668.     ACh (DV2.2+) perform regular select field attribute processing
  1669.     ADh (DV2.2+) protect attributes in selected field from being lost
  1670.     AEh make window default notify window for owning app (API level 2.00+)
  1671.     AFh set selected field marker character
  1672.         BYTE character to display at left edge of selected fields
  1673.     BCh set standard field processing mode 
  1674.     BDh set alternate field processing mode (enables cursor pad for menus)
  1675.     BEh disables changing reverse logical attributes with ECh opcode
  1676.     BFh enables changing reverse logical attributes with ECh opcode
  1677.     C0h make current window topmost in system
  1678.     C1h force current process into foreground
  1679.     C2h make current window topmost in process
  1680.     C3h position mouse pointer relative to origin of current field
  1681.         BYTE rows below upper left corner of field
  1682.         BYTE columns to right of upper left corner of field
  1683.     C4h position mouse pointer relative to origin of given field
  1684.         BYTE field number
  1685.         BYTE rows below upper left corner of field
  1686.         BYTE columns to right of upper left corner of field
  1687.     C5h orphan current window (also hides it)
  1688.         Note: must be last in stream; all subsequent commands ignored
  1689.     C6h show all windows for this process
  1690.     C7h hide all windows for this process
  1691.     C8h suspend process and hide all its windows
  1692.     C9h force current process into background
  1693.     CAh make current window bottom-most in process
  1694.     CBh cancel current window manager operation, remove DV menu, give 
  1695.         control to topmost application
  1696.     CCh orphan window and give it to the system for use as paste data
  1697.     CEh reorder windows
  1698.         DWORD pointer to null-terminated list of words
  1699.           each word is segment of object handle for a window
  1700.     FFh no operation
  1701.  
  1702. MODES 14h to 1Fh "USER STREAMS"
  1703.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1704.     routines, one for each mode number
  1705.       on entry to handler,
  1706.         DS:SI -> first byte of actual stream (not header)
  1707.         CX = #bytes in stream
  1708.         ES:DI = window's handle
  1709.  
  1710. Asynchronous notification routine defined by manager stream 8Ah called with:
  1711.     ES:DI = handle of window
  1712.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1713.        mailbox contains message indicating event
  1714.           Opcode
  1715.            40h  horizontal movement
  1716.            DWORD object handle of window
  1717.            BYTE     new row
  1718.            BYTE     new col
  1719.            41h  vertical movement
  1720.            DWORD object handle of window
  1721.            BYTE     new row
  1722.            BYTE     new col
  1723.            42h  horizontal size change
  1724.            DWORD object handle of window
  1725.            BYTE     new rows
  1726.            BYTE     new cols
  1727.            43h  vertical size change
  1728.            DWORD object handle of window
  1729.            BYTE     new rows
  1730.            BYTE     new cols
  1731.            44h  scrolled horizontally
  1732.            DWORD object handle of window
  1733.            BYTE     mouse row within window
  1734.            BYTE     mouse column within window
  1735.            BYTE     field mouse is on, 0 if none
  1736.            BYTE     amount moved: >0 right, <0 left, 0 done
  1737.            45h  scrolled vertically
  1738.            DWORD object hande of window
  1739.            BYTE     mouse row within window
  1740.            BYTE     mouse column within window
  1741.            BYTE     field mouse is on, 0 if none
  1742.            BYTE     amount moved: >0 down, <0 up, 0 done
  1743.            46h  window close request
  1744.            DWORD object handle of window
  1745.            BYTE     mouse pointer row
  1746.            BYTE     mouse pointer column
  1747.            BYTE     field mouse is on, 0 if none
  1748.            47h  application's windows hidden
  1749.            48h  Help for Program selected
  1750.            DWORD object handle of window
  1751.            BYTE     mouse pointer row
  1752.            BYTE     mouse pointer column
  1753.            BYTE     field mouse is on, 0 if none
  1754.            49h  pointer message sent to window
  1755.            DWORD pointer handle which received message
  1756.            4Ah  switched to window from another ("raise")
  1757.            4Bh  switched away from the window ("lower")
  1758.            4Ch  video mode changed
  1759.            BYTE new BIOS video mode
  1760.            4Dh  Scissors/cUt selected
  1761.            DWORD object handle of window
  1762.            BYTE     row of upper left corner
  1763.            BYTE     column of upper left corner
  1764.            BYTE     field number ul corner is in, 0=none
  1765.            DWORD handle of orphaned window created with
  1766.              copy of data from specified region
  1767.            BYTE     height of region
  1768.            BYTE     width of region
  1769.            4Eh  Scissors/Copy selected
  1770.            DWORD object handle of window
  1771.            BYTE     row of upper left corner
  1772.            BYTE     column of upper left corner
  1773.            BYTE     field number ul corner is in, 0=none
  1774.            DWORD handle of orphaned window created with
  1775.              copy of data from specified region
  1776.            BYTE     height of region
  1777.            BYTE     width of region
  1778.            4Fh  Scissors/Paste selected
  1779.            DWORD object handle of window
  1780.            BYTE     row of upper left corner
  1781.            BYTE     column of upper left corner
  1782.            BYTE     field number ul corner is in, 0=none
  1783.            DWORD handle of orphaned window with data
  1784.            BYTE     height of region
  1785.            BYTE     width of region
  1786.             Note: orphaned data window should be adopted or freed
  1787.                 when done
  1788.            50h  main menu about to pop up
  1789.            51h  main menu popped down
  1790. Return: all registers unchanged
  1791. ----------1512--BH06-------------------------
  1792. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1793.     AH = 12h
  1794.     BH = 06h
  1795.     BL = object
  1796.         00h object handle in DWORD on top of stack
  1797.         mailbox, keyboard, pointer, or timer
  1798.         (DV 2.50+) window
  1799.         01h (DV 2.50+) current task's window
  1800.         04h given task's keyboard (task's handle on top of stack)
  1801.         05h current task's default keyboard
  1802.     STACK: DWORD new priority of object in task's OBJECTQ
  1803.             (new priority of task if window handle)
  1804. Notes:    initially all objects have the same default value.  Should only make 
  1805.       relative adjustments to this default value.
  1806.     when changing priorities, all objects already on the objectq are
  1807.       reordered
  1808.     for window handles, only the non-blocked task(s) with the highest
  1809.       priority receive CPU time under DESQview 2.50-2.52; the default
  1810.       priority is 0Ah
  1811. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  1812. ----------1512--BH07-------------------------
  1813. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1814.     AH = 12h
  1815.     BH = 07h
  1816.     BL = object
  1817.         00h object handle in DWORD on top of stack
  1818.         mailbox, keyboard, pointer, or timer
  1819.         (DV 2.50+) window
  1820.         01h (DV 2.50+) current task's window
  1821.         04h given task's keyboard (task's handle on top of stack)
  1822.         05h current task's default keyboard
  1823. Return: STACK: DWORD object priority
  1824. Note:    initially all objects have the same default value.  Should only make 
  1825.       relative adjustments to this default value.
  1826. SeeAlso: AH=12h/BH=06h
  1827. ----------1512--BH08-------------------------
  1828. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1829.     AH = 12h
  1830.     BH = 08h
  1831.     BL = object
  1832.         00h handle in DWORD on top of stack
  1833.         window: total character positions in window
  1834.         timer: elapsed time since timer started
  1835.         pointer: number of messages queued to pointer object
  1836.         panel: number of panels in panel file
  1837.         keyboard: number of input buffers queued
  1838.         01h total chars in current task's default window
  1839.         02h number of messages in task's mailbox (task's handle on stack)
  1840.         03h number of messages in current task's mailbox
  1841.         04h number of input buffers queued in task's kbd (handle on stack)
  1842.         05h number of input buffers queued for current task's default kbd
  1843.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1844.         07h number of objects queued in current task's OBJECTQ
  1845.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1846.         0Dh (DV 2.26+) total chars in parent task's window
  1847. Return: DWORD on top of stack is result
  1848. Note:    for panel objects, a count of zero is returned if no panel file is open
  1849.       for the object
  1850. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1851. ----------1512--BH09-------------------------
  1852. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1853.     AH = 12h
  1854.     BH = 09h
  1855.     BL = object
  1856.         00h handle in DWORD on top of stack
  1857.         window: get chars/line
  1858.         timer: get 1/100 seconds remaining before timer expires
  1859.         mailbox: (DV/X) get number of bytes queued to mailbox
  1860.         01h get number of chars/line in current task's default window
  1861.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1862.         0Dh (DV 2.26+) get chars/line in parent task's window
  1863. Return: DWORD on top of stack is length
  1864. SeeAlso: AH=12h/BH=08h
  1865. ----------1512--BH0A-------------------------
  1866. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1867.     AH = 12h
  1868.     BH = 0Ah
  1869.     BL = window to write to
  1870.         00h window handle is DWORD on top of stack
  1871.         01h current task's default window
  1872.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1873.         0Dh (DV 2.26+) default window of parent of current task
  1874.     STACK:    DWORD count of attributes
  1875.         DWORD address of attribute string
  1876.         DWORD count of characters
  1877.         DWORD address of character string
  1878. Notes:    if one string is longer than the other, the shorter one will be reused
  1879.       until the longer one is exhausted
  1880.     the cursor is left just after the last character written
  1881. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1882. ----------1512--BH0A-------------------------
  1883. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1884.     AH = 12h
  1885.     BH = 0Ah
  1886.     BL = mailbox to write to
  1887.         00h handle is DWORD on top of stack
  1888.         02h default mailbox of task whose handle is on top of stack
  1889.         03h current task's default mailbox
  1890.     STACK:    DWORD    status (low byte)
  1891.         DWORD    length of message
  1892.         DWORD    address of message
  1893. Notes:    the message is copied into either system or common memory
  1894.     insufficient memory normally causes the process to be aborted; under
  1895.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1896. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1897. ----------1512--BH0A-------------------------
  1898. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1899.     AH = 12h
  1900.     BH = 0Ah
  1901.     BL = object
  1902.         00h handle is DWORD on top of stack
  1903.         timer: start timer for specified interval
  1904.         pointer: set control flags
  1905.         keyboard: set control flags
  1906.         04h set control flags on KEYBOARD object (handle on top of stack)
  1907.         05h set control flags on task's default KEYBOARD object
  1908.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1909.            (otherwise)  DWORD bits to set
  1910. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1911.  
  1912. For keyboard objects, the bits have the following significance:
  1913.     bit 15 reserved, can't be set
  1914.     bit 14 unused
  1915.     bit 13 reserved, can't be set
  1916.     bit 12-6 unused
  1917.     bit 5  (DV 2.2+) exclusive input
  1918.     bit 4  filter all keys (used with handler established by SETESC)
  1919.         if 0, only keys that would normally be displayed are filtered
  1920.     bit 3  program continues executing while input in progress
  1921.     bit 2  insert mode active for field mode
  1922.     bit 1  hardware cursor displayed when task is hardware cursor owner
  1923.         must be set if keyboard in field mode and field table includes
  1924.         input fields
  1925.     bit 0  keyboard is in field mode rather than keystroke mode
  1926.  
  1927. For pointer objects, the bits have the following significance:
  1928.     bit 15 reserved, can't be set
  1929.     bit 14-8 unused
  1930.     bit 7  mouse pointer is hidden while in window
  1931.     bit 6  get messages even if window not topmost
  1932.     bit 5  get messages even if window not foreground
  1933.     bit 4  multiple clicks separated by less than 1/3 second are counted
  1934.         and returned in a single message
  1935.     bit 3  pointer position is relative to screen origin, not window origin
  1936.     bit 2  send message on button release as well as button press
  1937.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1938.         pointer leaves the window
  1939.     bit 0  send message only on button activity, not movement
  1940.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  1941. ----------1512--BH0B-------------------------
  1942. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1943.     AH = 12h
  1944.     BH = 0Bh
  1945.     BL = window to write attributes to
  1946.         00h handle is DWORD on top of stack
  1947.         01h current task's default window
  1948.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1949.         0Dh (DV 2.26+) default window of parent of current task
  1950.     STACK:    DWORD number of attributes to write
  1951.         DWORD address of attributes
  1952. Note:    the attributes are written starting at the current cursor position; the
  1953.       cursor is left just after the last position written
  1954. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1955. ----------1512--BH0B-------------------------
  1956. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1957.     AH = 12h
  1958.     BH = 0Bh
  1959.     BL = mailbox to write to
  1960.         00h handle is DWORD on top of stack
  1961.         02h default mailbox of task whose handle is on top of stack
  1962.         03h current task's default mailbox
  1963.     STACK:    DWORD    status (low byte)
  1964.         DWORD    length of message
  1965.         DWORD    address of message
  1966. Notes:    only a pointer to the message is stored, but the write may still fail
  1967.       due to insufficient memory
  1968.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1969. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1970. ----------1512--BH0B-------------------------
  1971. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1972.     AH = 12h
  1973.     BH = 0Bh
  1974.     BL = OBJECTQ from which to remove all copies of a particular object
  1975.         06h OBJECTQ of task whose handle is on top of stack
  1976.         07h task's default OBJECTQ
  1977.     STACK:    DWORD    handle of object to remove
  1978. Note:    should be sent whenever an object is erased or closed
  1979. ----------1512--BH0B-------------------------
  1980. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1981.     AH = 12h
  1982.     BH = 0Bh
  1983.     BL = object
  1984.         00h handle is DWORD on top of stack
  1985.         pointer: reset control flags
  1986.         keyboard: reset control flags
  1987.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1988.         05h clear control flags on task's default KEYBOARD object
  1989.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1990. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1991. ----------1512--BH0C-------------------------
  1992. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1993.     AH = 12h
  1994.     BH = 0Ch
  1995.     BL = object
  1996.         00h handle is DWORD on top of stack
  1997.         window:      fill with given character from scroll origin to end
  1998.         keyboard: attach to a window
  1999.         timer:      open
  2000.         pointer:  start taking input for window
  2001.         panel:      associate with a panel file
  2002.         01h fill task's default window with given char from scrl org to end
  2003.         02h open given task's mailbox for input (task's handle on stack)
  2004.         03h open current task's mailbox
  2005.         04h attach a KEYBOARD to a window (handle on top of stack)
  2006.         05h attach task's default KEYBOARD to a window
  2007.         06h open a task's OBJECTQ (task's handle on top of stack)
  2008.         07h open current task's OBJECTQ
  2009.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  2010.         0Dh (DV 2.26+) fill default window of parent of current task
  2011.      STACK: (if window)   DWORD character to fill with
  2012.         (if keyboard) DWORD handle of window to attach to
  2013.         (if pointer)  DWORD handle of window to attach to
  2014.         (if panel)    DWORD length of filename or resident panel
  2015.                   DWORD address of filename or resident panel
  2016.         (otherwise)   nothing
  2017. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  2018.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  2019.       the panel file
  2020.     result code of open may be retrieved with STATUS message
  2021.     logical cursor is left at scroll origin after filling window
  2022.     the task opening a mailbox becomes its owner, and the only task allowed
  2023.       to read the mailbox
  2024.     messages are only sent to a pointer object when the mouse is positioned
  2025.       in the window to which the pointer has been attached
  2026.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  2027.       messages automatically open the timer
  2028. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  2029. ----------1512--BH0D-------------------------
  2030. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  2031.     AH = 12h
  2032.     BH = 0Dh
  2033.     BL = object
  2034.         00h handle is DWORD on top of stack
  2035.         timer:      close
  2036.         keyboard: detach from window and discard queued input
  2037.         pointer:  stop taking input
  2038.         panel:      close
  2039.         mailbox:  close, unlock, and discard any pending messages
  2040.         02h close given task's mailbox (task's handle on top of stack)
  2041.         03h close task's default mailbox
  2042.         04h close KEYBOARD object (handle on top of stack)
  2043.         05h close task's default KEYBOARD
  2044.         06h close givent task's OBJECTQ (task's handle on top of stack)
  2045.         07h close current task's OBJECTQ
  2046. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2047.       ERASE message (AH=12h/BH=0Eh)
  2048.     when a panel object is closed, the panel file and any panels currently
  2049.       in use are freed; window and keyboard objects created by APPLY are
  2050.       not affected, but field mode input ceases
  2051.     open but idle timer objects consume a small amount of CPU time
  2052. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2053. ----------1512--BH0E-------------------------
  2054. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2055.     AH = 12h
  2056.     BH = 0Eh
  2057.     BL = object
  2058.         00h handle is DWORD on top of stack
  2059.         window:      clear from scroll origin to end of window
  2060.         keyboard: discard input
  2061.         timer:      cancel current interval
  2062.         pointer:  discard all pending messages
  2063.         mailbox:  discard all pending messages
  2064.         01h clear task's default window from scroll origin to end
  2065.         02h discard all queued messages in mailbox (handle on top of stack)
  2066.         03h discard all queued messages in current task's default mailbox
  2067.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2068.         05h discard all input queued to task's default KEYBOARD
  2069.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2070.         07h remove all objects from current task's OBJECTQ
  2071.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2072.         0Dh (DV 2.26+) clear default window of parent of current task
  2073. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2074. SeeAlso: AH=12h/BH=02h
  2075. ----------1512--BH0F-------------------------
  2076. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2077.     AH = 12h
  2078.     BH = 0Fh
  2079.     BL = object
  2080.         00h handle is DWORD on top of stack
  2081.         timer:     is it running?
  2082.         pointer: return status of last message
  2083.         panel:     verify success of last OPEN or APPLY
  2084.         02h return status of last msg READ from mailbox (handle on stack)
  2085.         03h return status of last msg READ from task's default mailbox
  2086.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  2087.         05h get status of last msg from task's default KEYBOARD
  2088.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2089.         07h return whether task's default OBJECTQ is open or not
  2090. Return: DWORD on top of stack is status
  2091. Notes:    if object is a panel object, the status indicates the error code:
  2092.       00h successful
  2093.       14h panel name not in panel directory
  2094.       15h not enough memory to apply panel
  2095.       16h invalid panel format
  2096.       17h panel file already open
  2097.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2098.       95h not enough memory to open panel file     > that the panel was
  2099.       98h null panel file name            /  not opened
  2100.     if object is a timer, the status is:
  2101.       00000000h open but not running
  2102.       40000000h open and running
  2103.       80000000h closed
  2104.     if object is an OBJECTQ, the status is:
  2105.       00000000h open
  2106.       80000000h closed
  2107.     if object is a keyboard in keystroke mode, the status is the extended
  2108.       character code (scan code) of teh last keystroke
  2109.     if object is a keyboard in field mode, the status indicates the reason
  2110.       for the last return from the field manager
  2111.       00h Enter key pressed
  2112.       01h Button 1 or keystroke selection
  2113.       02h Button 2
  2114.       03h validation
  2115.       04h auto Enter on field
  2116.       1Bh Escape pressed
  2117.       46h ^Break pressed
  2118.       other: extended code for key terminating input
  2119.     the status of mailbox messages sent by the window manager is always 80h
  2120.     the status of a pointer message is the same as the status field in the
  2121.       message
  2122. SeeAlso: AH=12h/BH=04h"READ"
  2123. ----------1512--BH10-------------------------
  2124. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2125.     AH = 12h
  2126.     BH = 10h
  2127.     BL = object
  2128.         00h handle is DWORD on top of stack
  2129.         window: return TRUE if logical cursor past end of window
  2130.         mailbox: ???
  2131.         01h returns TRUE if logical cursor past end of task's def window
  2132.         02h return ??? for task's mailbox (task's handle on top of stack)
  2133.         03h return ??? for current task's mailbox
  2134.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2135.         0Dh (DV 2.26+) check log cursor of window of parent task
  2136. Return: DWORD on top of stack is status
  2137. ----------1512--BH11-------------------------
  2138. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2139.     AH = 12h
  2140.     BH = 11h
  2141.     BL = window for which to move cursor
  2142.         00h window's handle is DWORD on top of stack
  2143.         01h task's default window
  2144.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2145.         0Dh (DV 2.26+) default window of parent of current task
  2146.     STACK: DWORD column
  2147.            DWORD row
  2148. ----------1512--BH11-------------------------
  2149. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2150.     AH = 12h
  2151.     BH = 11h
  2152.     BL = mailbox to name
  2153.         00h DWORD on top of stack is mailbox handle
  2154.         02h use given task's mailbox (task's handle on top of stack)
  2155.         03h use current task's default mailbox
  2156.     STACK: DWORD length of name
  2157.            DWORD address of name
  2158. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  2159. ----------1512--BX1100-----------------------
  2160. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2161.     AH = 12h
  2162.     BX = 1100h
  2163.     STACK: DWORD object handle for pointer object
  2164.            DWORD number of colums to scale pointer position to
  2165.            DWORD number of rows to scale pointer position to
  2166. SeeAlso: AH=12h/BX=1200h
  2167. ----------1512--BH12-------------------------
  2168. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2169.     AH = 12h
  2170.     BH = 12h
  2171.     BL = window to read from
  2172.         00h handle is DWORD on top of stack
  2173.         01h read next N chars or attributes on task's default window
  2174.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2175.         0Dh (DV 2.26+) read default window of parent of current task
  2176.     STACK: DWORD count
  2177. Return: STACK: DWORD width of screen line
  2178.            DWORD address
  2179.            DWORD count actually read
  2180. Notes:    reading starts at the current logical cursor position; the cursor is
  2181.       updated to point at the character following the last one read
  2182.     any translucent blanks (FFh) which are visible on screen are changed
  2183.       to the character which is seen through them
  2184.     the string produced by the read is placed in an input buffer which may
  2185.       be reused by the next READ or READN of a window
  2186.     window stream opcodes D8h and D9h determine whether the read returns
  2187.       characters or attributes
  2188. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2189. ----------1512--BH12-------------------------
  2190. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  2191.     AH = 12h
  2192.     BH = 12h
  2193.     BL = mailbox for which to retrieve name
  2194.         00h DWORD on top of stack is mailbox handle
  2195.         02h use given task's mailbox (task's handle on top of stack)
  2196.         03h use current task's default mailbox
  2197.     STACK: DWORD length of buffer for name
  2198.            DWORD pointer to buffer
  2199. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  2200. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2201. Note:    the returned name is not NUL-terminated
  2202. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  2203. ----------1512--BX1200-----------------------
  2204. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2205.     AH = 12h
  2206.     BX = 1200h
  2207.     STACK: DWORD object handle for pointer
  2208. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2209.            DWORD pointer pos scaled as if window were this many rows high
  2210. SeeAlso: AH=12h/BX=1100h
  2211. ----------1512--BH13-------------------------
  2212. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2213.     AH = 12h
  2214.     BH = 13h
  2215.     BL = window object
  2216.         00h DWORD on top of stack is handle for window to redraw
  2217.         01h redraw task's default window
  2218.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2219.         0Dh (DV 2.26+) redraw default window of parent of current task
  2220. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2221. ----------1512--BH13-------------------------
  2222. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  2223.     AH = 12h
  2224.     BH = 13h
  2225.     BL = mailbox from which to read
  2226.         00h DWORD on top of stack is mailbox handle
  2227.         02h use given task's mailbox (task's handle on top of stack)
  2228.         03h use current task's default mailbox
  2229.     STACK: DWORD size of buffer in bytes
  2230.            DWORD pointer to buffer
  2231. Return: STACK: DWORD number of bytes read
  2232. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2233. Notes:    this call blocks if no input is available, but will return less than
  2234.       the requested number of bytes if some (but insufficient) data is
  2235.       available
  2236.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  2237.       4 or 5 set, as common memory may be exhausted by that call when
  2238.       attempting to read the next message
  2239. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  2240. ----------1512--BX1300-----------------------
  2241. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2242.     AH = 12h
  2243.     BX = 1300h
  2244.     STACK: DWORD object handle for pointer
  2245.            DWORD character to use for pointer
  2246. ----------1512--BH14-------------------------
  2247. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2248.     AH = 12h
  2249.     BH = 14h
  2250.     BL = message modifier
  2251.         00h handle is DWORD on top of stack
  2252.         01h define user stream
  2253.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  2254.         05h intercept keystrokes from task's default KEYBOARD to a window
  2255.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2256.                  DWORD address of FAR user stream handler
  2257.            (if keyboard) DWORD address of FAR filter function
  2258.  
  2259. The keyboard filter function is called when the keyboard is in field mode.  On
  2260. entry,
  2261.     AL = character
  2262.     AH = 00h or extended ASCII code if AL = 00h
  2263.     BL = field number
  2264.     CH = cursor column
  2265.     CL = cursor row
  2266.     DL = field type modifier (sixth item in field table entry)
  2267.     DH = seventh item in field table entry
  2268.     ES:SI = window's handle
  2269.     DS:DI -> field table entry for field containing the cursor
  2270. The filter function should return
  2271.     AH = 00h use keystroke
  2272.          01h ignore keystroke
  2273.          FFh beep and ignore keystroke
  2274. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2275. ----------1512--BH14-------------------------
  2276. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2277.     AH = 12h
  2278.     BH = 14h
  2279.     BL = object
  2280.         00h mailbox handle is DWORD on top of stack
  2281.         02h use given task's mailbox (task's handle on top of stack)
  2282.         03h use current task's default mailbox
  2283. Note:    release exclusive access by sending CLOSE message to mailbox
  2284.     access may be requested multiple times, and requires multiple CLOSEs
  2285. SeeAlso: AH=12h/BH=0Dh
  2286. ----------1512--BH15-------------------------
  2287. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2288.     AH = 12h
  2289.     BH = 15h
  2290.     BL = object
  2291.         00h DWORD on top of stack
  2292.         mailbox, keyboard, or pointer only
  2293.         02h mailbox for task whose handle is on top of stack
  2294.         03h mailbox for current task
  2295.         04h keyboard for task whose handle is on top of stack
  2296.         05h keyboard for current task
  2297.     STACK: DWORD flags
  2298.         if mailbox:
  2299.             bit 0: all mail messages in common memory
  2300.             bit 1: allow write even if closed
  2301.             bit 2: don't erase messages when mailbox closed
  2302.             bit 4: (DV/X) append messages with like status and
  2303.                 sender (stream-oriented mail)
  2304.             bit 5: (DV/X) store mail in expanded memory (pool
  2305.                 grows as needed)
  2306.             bit 6: (DV/X) make mailbox into non-owned mailbox
  2307.         if keyboard:
  2308.             bit 5: exclusive input when keyboard in use for input
  2309. Return: nothing
  2310. Notes:    only available if the API level has been set to at least 2.20
  2311.     equivalent to performing SUBFROM and ADDTO calls on the object
  2312.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2313.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  2314. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2315. ----------1512--BH16-------------------------
  2316. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2317.     AH = 12h 
  2318.     BH = 16h
  2319.     BL = object
  2320.         00h DWORD on top of stack
  2321.         mailbox, keyboard, or pointer only
  2322.         02h mailbox for task whose handle is on top of stack
  2323.         03h mailbox for current task
  2324.         04h keyboard for task whose handle is on top of stack
  2325.         05h keyboard for current task
  2326. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  2327. Notes:    only available if the API level has been set to at least 2.20
  2328.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2329.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2330. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  2331. ----------1512--BH17-------------------------
  2332. INT 15 - DESQview v2.42-2.52 - BUG
  2333.     AH = 12h
  2334.     BH = 17h
  2335.     BL = object
  2336.         00h DWORD on top of stack
  2337.         mailbox, keyboard, or pointer only
  2338.         02h mailbox for task whose handle is on top of stack
  2339.         03h mailbox for current task
  2340.         04h keyboard for task whose handle is on top of stack
  2341.         05h keyboard for current task
  2342. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  2343.       keyboards, and pointers, but causes a random branch
  2344.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  2345. ----------1512--BH80-------------------------
  2346. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2347.     AH = 12h
  2348.     BH = 80h
  2349. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  2350.       not pop up a "Programming Error" window, instead returning an error
  2351.       code in AL:
  2352.           00h no error
  2353.         01h invalid values
  2354.         02h alias invalid
  2355.         03h handle valid but wrong type
  2356.         04h invalid handle
  2357. SeeAlso: AH=12h/BH=00h
  2358. ----------1512--BH81-------------------------
  2359. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2360.     AH = 12h
  2361.     BH = 81h
  2362. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  2363.       not pop up a "Programming Error" window, instead returning an error
  2364.       code in AL (see AH=12h/BH=80h)
  2365. SeeAlso: AH=12h/BH=01h
  2366. ----------1512--BH82-------------------------
  2367. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2368.     AH = 12h
  2369.     BH = 82h
  2370. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  2371.       not pop up a "Programming Error" window, instead returning an error
  2372.       code in AL (see AH=12h/BH=80h)
  2373. SeeAlso: AH=12h/BH=02h
  2374. ----------1512--BH83-------------------------
  2375. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2376.     AH = 12h
  2377.     BH = 83h
  2378. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  2379.       not pop up a "Programming Error" window, instead returning an error
  2380.       code in AL (see AH=12h/BH=80h)
  2381. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  2382. ----------1512--BH84-------------------------
  2383. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2384.     AH = 12h
  2385.     BH = 84h
  2386. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  2387.       not pop up a "Programming Error" window, instead returning an error
  2388.       code in AL (see AH=12h/BH=80h)
  2389. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  2390. ----------1512--BH85-------------------------
  2391. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2392.     AH = 12h
  2393.     BH = 85h
  2394. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  2395.       not pop up a "Programming Error" window, instead returning an error
  2396.       code in AL (see AH=12h/BH=80h)
  2397. SeeAlso: AH=12h/BH=05h
  2398. ----------1512--BH86-------------------------
  2399. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2400.     AH = 12h
  2401.     BH = 86h
  2402. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  2403.       not pop up a "Programming Error" window, instead returning an error
  2404.       code in AL (see AH=12h/BH=80h)
  2405. SeeAlso: AH=12h/BH=06h
  2406. ----------1512--BH87-------------------------
  2407. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2408.     AH = 12h
  2409.     BH = 87h
  2410. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  2411.       not pop up a "Programming Error" window, instead returning an error
  2412.       code in AL (see AH=12h/BH=80h)
  2413. SeeAlso: AH=12h/BH=07h
  2414. ----------1512--BH88-------------------------
  2415. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2416.     AH = 12h
  2417.     BH = 88h
  2418. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  2419.       not pop up a "Programming Error" window, instead returning an error
  2420.       code in AL (see AH=12h/BH=80h)
  2421. SeeAlso: AH=12h/BH=08h
  2422. ----------1512--BH89-------------------------
  2423. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2424.     AH = 12h
  2425.     BH = 89h
  2426. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  2427.       not pop up a "Programming Error" window, instead returning an error
  2428.       code in AL (see AH=12h/BH=80h)
  2429. SeeAlso: AH=12h/BH=09h
  2430. ----------1512--BH8A-------------------------
  2431. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2432.     AH = 12h
  2433.     BH = 8Ah
  2434. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  2435.       not pop up a "Programming Error" window, instead returning an error
  2436.       code in AL (see AH=12h/BH=80h)
  2437. SeeAlso: AH=12h/BH=0Ah
  2438. ----------1512--BH8B-------------------------
  2439. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2440.     AH = 12h
  2441.     BH = 8Bh
  2442. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  2443.       not pop up a "Programming Error" window, instead returning an error
  2444.       code in AL (see AH=12h/BH=80h)
  2445. SeeAlso: AH=12h/BH=0Bh
  2446. ----------1512--BH8C-------------------------
  2447. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2448.     AH = 12h
  2449.     BH = 8Ch
  2450. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  2451.       not pop up a "Programming Error" window, instead returning an error
  2452.       code in AL (see AH=12h/BH=80h)
  2453. SeeAlso: AH=12h/BH=0Ch
  2454. ----------1512--BH8D-------------------------
  2455. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2456.     AH = 12h
  2457.     BH = 8Dh
  2458. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  2459.       not pop up a "Programming Error" window, instead returning an error
  2460.       code in AL (see AH=12h/BH=80h)
  2461. SeeAlso: AH=12h/BH=0Dh
  2462. ----------1512--BH8E-------------------------
  2463. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2464.     AH = 12h
  2465.     BH = 8Eh
  2466. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  2467.       not pop up a "Programming Error" window, instead returning an error
  2468.       code in AL (see AH=12h/BH=80h)
  2469. SeeAlso: AH=12h/BH=0Eh
  2470. ----------1512--BH8F-------------------------
  2471. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2472.     AH = 12h
  2473.     BH = 8Fh
  2474. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  2475.       not pop up a "Programming Error" window, instead returning an error
  2476.       code in AL (see AH=12h/BH=80h)
  2477. SeeAlso: AH=12h/BH=0Fh
  2478. ----------1512--BH90-------------------------
  2479. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2480.     AH = 12h
  2481.     BH = 90h
  2482. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  2483.       not pop up a "Programming Error" window, instead returning an error
  2484.       code in AL (see AH=12h/BH=80h)
  2485. SeeAlso: AH=12h/BH=10h
  2486. ----------1512--BH91-------------------------
  2487. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2488.     AH = 12h
  2489.     BH = 91h
  2490. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  2491.       not pop up a "Programming Error" window, instead returning an error
  2492.       code in AL (see AH=12h/BH=80h)
  2493. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  2494. ----------1512--BH92-------------------------
  2495. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2496.     AH = 12h
  2497.     BH = 92h
  2498. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  2499.       not pop up a "Programming Error" window, instead returning an error
  2500.       code in AL (see AH=12h/BH=80h)
  2501. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  2502. ----------1512--BH93-------------------------
  2503. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2504.     AH = 12h
  2505.     BH = 93h
  2506. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  2507.       not pop up a "Programming Error" window, instead returning an error
  2508.       code in AL (see AH=12h/BH=80h)
  2509. SeeAlso: AH=12h/BH=13h
  2510. ----------1512--BH94-------------------------
  2511. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2512.     AH = 12h
  2513.     BH = 94h
  2514. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  2515.       not pop up a "Programming Error" window, instead returning an error
  2516.       code in AL (see AH=12h/BH=80h)
  2517. SeeAlso: AH=12h/BH=14h
  2518. ----------1512--BH95-------------------------
  2519. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2520.     AH = 12h
  2521.     BH = 95h
  2522. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  2523.       not pop up a "Programming Error" window, instead returning an error
  2524.       code in AL (see AH=12h/BH=80h)
  2525. SeeAlso: AH=12h/BH=15h
  2526. ----------1512--BH96-------------------------
  2527. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  2528.     AH = 12h
  2529.     BH = 96h
  2530. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  2531.       not pop up a "Programming Error" window, instead returning an error
  2532.       code in AL (see AH=12h/BH=80h)
  2533. SeeAlso: AH=12h/BH=16h
  2534. ----------1513-------------------------------
  2535. INT 15 - VMiX - WAKE PROCESS
  2536.     AH = 13h
  2537.     STACK:    WORD    process ID
  2538. Return: AX = status
  2539. SeeAlso: AH=12h"VMiX"
  2540. ----------1513-------------------------------
  2541. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2542.     AH = 13h
  2543. Return: BX:AX -> task control block (see below)
  2544. SeeAlso: AH=15h"MultiDOS"
  2545.  
  2546. Format of MultiDOS Plus v4.0 task control block:
  2547. Offset    Size    Description
  2548.  00h    DWORD    pointer to next TCB
  2549.  04h  8 BYTEs    ASCIZ task name
  2550.  0Ch  2 BYTEs    ???
  2551.  0Eh    WORD    task PSP segment
  2552.  10h    WORD    abort/suspend flags
  2553.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2554.  14h    WORD    priority level (0000h-FFFEh)
  2555.  16h    WORD    time slice counter
  2556.  18h  2 BYTEs    ???
  2557.  1Ah    WORD    suspend timer value
  2558.  1Ch    WORD    stack segment
  2559.  1Eh    WORD    stack pointer
  2560.  20h    WORD    display type
  2561.  22h    WORD    display memory
  2562.  24h  2 BYTEs    ???
  2563.  26h    WORD    termination count
  2564.  28h    WORD    equipment flag for BIO10 driver
  2565.  2Ah    BYTE    background CRT mode
  2566.  2Bh    WORD    screen width in columns
  2567.  2Dh    WORD    screen size in bytes
  2568.  2Fh    WORD    segment of physical screen memory
  2569.  31h 16 BYTEs    eight cursor positions
  2570.  41h    WORD    current cursor shape
  2571.  43h    BYTE    active display page
  2572.  44h    WORD    CRT controller I/O port base
  2573.  46h  2 BYTEs    ???
  2574.  48h    WORD    foreground task flag
  2575.  4Ah  6 BYTEs    ???
  2576.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2577.  52h    DWORD    old INT 22
  2578.  56h    DWORD    old INT 23
  2579.  5Ah    DWORD    old INT 24
  2580.  5Eh    WORD    top of memory for task
  2581.  60h  4 BYTEs    ???
  2582.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2583.  66h    WORD    DTA offset
  2584.  68h  4 BYTEs    ???
  2585.  6Ch    BYTE    current ANSI.SYS attribute
  2586.  6Dh    BYTE    current ANSI.SYS column
  2587.  6Eh    BYTE    current ANSI.SYS row
  2588.  6Fh    BYTE    current ANSI.SYS display state
  2589.  70h    BYTE    maximum ANSI.SYS columns
  2590.  71h    BYTE    current ANSI.SYS page
  2591.  72h    WORD    saved ANSI.SYS cursor position
  2592.  74h    BYTE    ANSI.SYS parameter buffer index
  2593.  75h    BYTE    current ANSI.SYS screen mode
  2594.  76h    BYTE    ANSI.SYS wrap flag
  2595.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2596.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2597.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2598.  85h  3 BYTEs    ???
  2599.  88h 16 BYTEs    request header for DOS driver calls
  2600.  98h 14 BYTEs    ???
  2601.  A6h    WORD    segment of EMS map if EMS task
  2602.  A8h    WORD    flag: task makes EMS calls
  2603.  AAh    WORD    EMS handle for task
  2604.  ACh    WORD    keyboard shift state
  2605.  AEh 12 BYTEs    ???
  2606.  BAh    WORD    TCB of parent if child task
  2607.  BCh    WORD    termination code
  2608.  BEh    WORD    COM port number
  2609.  C0h  4 BYTEs    ???
  2610.  C4h    WORD    current IRQ number
  2611.  C6h  2 BYTEs    ???
  2612.  C8h    WORD    miscellaneous flag word
  2613.  CAh  2 BYTEs    ???
  2614.  CCh    DWORD    old INT 10
  2615.  D0h    WORD    EMS alternate map set number
  2616.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2617. ----------1514-------------------------------
  2618. INT 15 - VMiX - CLEAR WINDOW
  2619.     AH = 14h
  2620.     STACK:    WORD    top left corner of window
  2621.         WORD    bottom right corner of window
  2622. Return: AX = status
  2623. SeeAlso: AH=15h"VMiX"
  2624. ----------1514-------------------------------
  2625. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2626.     AH = 14h
  2627. Return: AX = current state
  2628.         0000h MultiDOS Plus command prompt is background task
  2629.         0001h command prompt is foreground task
  2630. SeeAlso: AH=0Bh"MultiDOS"
  2631. ----------1515-------------------------------
  2632. INT 15 - VMiX - SET BANNER WINDOW MESSAGE
  2633.     AH = 15h
  2634.     STACK:    DWORD    pointer to ASCIZ banner    message
  2635. Return: AX = status
  2636. SeeAlso: AH=14h"VMiX"
  2637. ----------1515-------------------------------
  2638. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2639.     AH = 15h
  2640. Return: BX:AX -> system block (see below)
  2641. SeeAlso: AH=13h"MultiDOS"
  2642.  
  2643. Format of MultiDOS Plus 4.0 system block:
  2644. Offset    Size    Description
  2645.  00h    WORD    segment of system control block
  2646.  02h    WORD    redirection flag set by /NOREDIRECT
  2647.  04h    WORD    no-INT 10 flag set by /NO10
  2648.  06h    DWORD    old INT 10
  2649.  0Ah    DWORD    new INT 10
  2650.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  2651.  12h    DWORD    pointer to WORD with idle task TCB offset
  2652.  16h    DWORD    pointer to WORD with foreground TCB offset
  2653.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  2654.  1Eh    WORD    Task Control Block size
  2655.  20h    WORD    number of TCBs
  2656.  22h    WORD    flag: EMS present
  2657.  24h    WORD    EMS page frame base segment
  2658.  26h    WORD    16K pages in EMS page frame
  2659.  28h    WORD    base segment for conventional memory tasks
  2660.  2Ah    WORD    conventional memory size in paragraphs
  2661.  2Ch    DWORD    pointer to list of queue pointers
  2662. ----------1516-------------------------------
  2663. INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
  2664.     AH = 16h
  2665.     STACK:    DWORD    pointer to I/O Request Packet
  2666.         WORD    top left corner of window
  2667.         WORD    bottom right corner of window
  2668. Return: AX = status
  2669. SeeAlso: AH=17h"VMiX"
  2670. ----------1516-------------------------------
  2671. INT 15 - MultiDOS Plus - INITIALIZATION
  2672.     AH = 16h
  2673. Note:    used internally during initialization; any other calls will cause
  2674.       unpredicatable results
  2675. ----------1517-------------------------------
  2676. INT 15 - VMiX - GET CONSOLE WINDOW COLORS
  2677.     AH = 17h
  2678. Return: AH = foreground color
  2679.     AL = background color
  2680. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  2681. ----------1517-------------------------------
  2682. INT 15 - MultiDOS Plus - MAP IRQ
  2683.     AH = 17h
  2684.     AL = IRQ to map (01h-0Fh)
  2685.     BX = offset of task control block (see AH=13h) to associate with IRQ
  2686. Return: AX = status
  2687.         0000h successful
  2688.         other invalid IRQ
  2689. Note:    the EMS map of the specified TCB is associated with the given interrupt
  2690. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  2691. ----------1518-------------------------------
  2692. INT 15 - VMiX - SET CONSOLE COLORS
  2693.     AH = 18h
  2694.     STACK:    WORD    new background/foreground colors
  2695. Return: AX = color
  2696. SeeAlso: AH=17h"VMiX"
  2697. ----------1518-------------------------------
  2698. INT 15 - MultiDOS Plus - UNMAP IRQ
  2699.     AH = 18h
  2700.     AL = IRQ to unmap (01h-0Fh)
  2701. Return: AX = status
  2702.         0000h successful
  2703.         0001h invalid IRQ
  2704. Note:    results are unpredictable if the IRQ has not been mapped
  2705. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  2706. ----------1519-------------------------------
  2707. INT 15 - VMiX v2+ - ???
  2708.     AH = 19h
  2709.     STACK: WORD ???
  2710. Return: ???
  2711. ----------1519-------------------------------
  2712. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  2713.     AH = 19h
  2714. Return: AX destroyed
  2715. Note:    for MultiDOS internal use only
  2716. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  2717. ----------151A-------------------------------
  2718. INT 15 - VMiX v2+ - ???
  2719.     AH = 1Ah
  2720.     STACK: 3 WORDs ???
  2721. Return: ???
  2722. ----------151A-------------------------------
  2723. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  2724.     AH = 1Ah
  2725.     DS:SI -> 8-byte name
  2726. Return: AL = status
  2727.         00h successful
  2728.         AH = semaphore number (20h-3Fh)
  2729.         04h out of string space
  2730. Notes:    all eight bytes of the name are significant
  2731.     if the name does not already exist, it is added to the name table and
  2732.       associated with a free semaphore number
  2733.     names cannot be destroyed
  2734. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2735. ----------151B-------------------------------
  2736. INT 15 - VMiX v2+ - ???
  2737.     AH = 1Bh
  2738.     STACK: 5 WORDs ???
  2739. Return: ???
  2740. ----------151B-------------------------------
  2741. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  2742.     AH = 1Bh
  2743.     DS:SI -> 8-byte name
  2744. Return: AH = status
  2745.         00h successful
  2746.         02h invalid semaphore number
  2747.         03h caller already owns semaphore
  2748.         04h out of string space
  2749. Notes:    (see AH=01h"MultiDOS")
  2750.     equivalent to AH=1Ah followed by AH=01h
  2751. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2752. ----------151C-------------------------------
  2753. INT 15 - VMiX v2+ - ???
  2754.     AH = 1Ch
  2755.     STACK: 5 WORDs ???
  2756. Return: ???
  2757. ----------151C-------------------------------
  2758. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  2759.     AH = 1Ch
  2760.     DS:SI -> 8-byte name
  2761. Return: AH = status
  2762.         00h successful
  2763.         01h not semaphore owner
  2764.         02h invalid semaphore number
  2765.         04h out of string space
  2766. Notes:    (see AH=02h"MultiDOS")
  2767.     equivalent to AH=1Ah followed by AH=02h
  2768. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  2769. ----------151D-------------------------------
  2770. INT 15 - VMiX v2+ - ???
  2771.     AH = 1Dh
  2772.     ???
  2773. Return: ???
  2774. ----------151D-------------------------------
  2775. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  2776.     AH = 1Dh
  2777.     DS:SI -> 8-byte name
  2778. Return; AH = status
  2779.         00h semaphore not in use
  2780.         01h semaphore owned by another task
  2781.         02h invalid semaphore number
  2782.         03h caller owns semaphore
  2783.         04h out of string space
  2784. Notes:    (see AH=10h"MultiDOS")
  2785.     equivalent to AH=1Ah followed by AH=10h
  2786. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  2787. ----------151E-------------------------------
  2788. INT 15 - VMiX v2+ - ???
  2789.     AH = 1Eh
  2790.     STACK: WORD ???
  2791. Return: ???
  2792. ----------151E00-----------------------------
  2793. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  2794.     AX = 1E00h
  2795.     DX = event/trigger number (00h-3Fh)
  2796. Return: AH = status
  2797.         00h successful
  2798. SeeAlso: AX=1E01h,AX=1E02h
  2799. ----------151E01-----------------------------
  2800. INT 15 - MultiDOS Plus - TRIGGER EVENT
  2801.     AX = 1E01h
  2802.     DX = event/trigger number (00h-3Fh)
  2803. Return: AH = status
  2804.         00h successful
  2805.         01h invalid event/trigger number
  2806. Notes:    schedules any task waiting for event; if no task is waiting, the event
  2807.       counter is incremented (and will roll over if it was 65535)
  2808.     may be invoked by interrupt handler
  2809. SeeAlso: AX=1E00h,AX=1E02h
  2810. ----------151E02-----------------------------
  2811. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  2812.     AX = 1E02h
  2813.     DX = event/trigger number (00h-3Fh)
  2814. Return: AH = status
  2815.         00h successful
  2816.         01h invalid event/trigger number
  2817. Note:    if the event counter is zero, the task is suspended until the event is
  2818.       triggered with AX=1E01h; else, the counter is decremented and the
  2819.       call returns immediately
  2820. SeeAlso: AX=1E00h,AX=1E01h
  2821. ----------151F-------------------------------
  2822. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  2823.     AH = 1Fh
  2824. Return: BX = first segment of conventional memory
  2825.     DX = first segment of EMS swap frame into which MultiDOS will load
  2826.         programs
  2827. ----------1520-------------------------------
  2828. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  2829.     AH = 20h
  2830. Return: AX = current state
  2831.         0000h multitasking enabled
  2832.         other TCB of task that disabled multitasking
  2833. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  2834. ----------152000-----------------------------
  2835. INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  2836.     AX = 2000h
  2837. SeeAlso: AX=2001h
  2838. ----------152001-----------------------------
  2839. INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  2840.     AX = 2001h
  2841.     ES:BX -> byte which is to be incremented while in a DOS call
  2842. SeeAlso: AX=2000h
  2843. ----------152010-----------------------------
  2844. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  2845.     AX = 2010h
  2846.     ???
  2847. Return: ???
  2848. SeeAlso: AX=2011h
  2849. ----------152011-----------------------------
  2850. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  2851.     AX = 2011h
  2852.     ???
  2853. Return: ???
  2854. SeeAlso: AX=2010h
  2855. ----------1521-------------------------------
  2856. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  2857.     AH = 21h
  2858.     AL = subfunction
  2859.         00h read POST log
  2860.         01h write POST log
  2861.         BH = device ID
  2862.         BL = error code
  2863. Return: CF set on error
  2864.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  2865.     if function 00h:
  2866.        BX = number of error codes stored
  2867.        ES:DI -> error log
  2868. Note:    the log is a series of words, the first byte of which identifies the
  2869.       error code and the second the device.
  2870. ----------1522-------------------------------
  2871. INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
  2872.     AH = 22h
  2873. Return: CF set on error
  2874.         AH = status
  2875.     CF clear on success:
  2876.         ES -> segment of ROM BASIC
  2877. ----------152400-----------------------------
  2878. INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
  2879.     AX = 2400h
  2880. Return: CF clear
  2881.     AH = 00h
  2882. SeeAlso: AX=2401h,AX=2402h
  2883. ----------152401-----------------------------
  2884. INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
  2885.     AX = 2401h
  2886. Return: CF clear
  2887.     AH = 00h
  2888. SeeAlso: AX=2400h,AX=2402h
  2889. ----------152402-----------------------------
  2890. INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
  2891.     AX = 2402h
  2892. Return: CF clear
  2893.     AH = 00h
  2894.     AL = current state (00h off, 01h on)
  2895. SeeAlso: AX=2400h,AX=2401h
  2896. ----------152403-----------------------------
  2897. INT 15 - Qualitas 386MAX v6.01 - GET ???
  2898.     AX = 2403h
  2899.     ???
  2900. Return: CF clear
  2901.     AH = 00h
  2902.     BX = bit flags???
  2903.         bit 0: ???
  2904.         bit 1: ???
  2905. Note:    reportedly also used by some PS/2 models
  2906. ----------1540-------------------------------
  2907. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  2908.     AH = 40h
  2909.     AL = subfunction
  2910.         00h get system profile in CX and BX
  2911.         01h set system profile from CX and BX
  2912.         02h get internal modem profile in BX
  2913.         03h set internal modem profile from BX
  2914. ----------154000-----------------------------
  2915. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  2916.     AX = 4000h
  2917. Return: AX = 4000h
  2918.     CL = 00h timeout disabled
  2919.        else timeout in minutes
  2920. SeeAlso: AX=4001h,AX=4600h
  2921. ----------154001CL00-------------------------
  2922. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  2923.     AX = 4001h
  2924.     CL = 00h timeout disabled
  2925.        else     timeout in minutes
  2926. Return: AL = 00h timeout modified
  2927.          01h timeout cannot be modified
  2928.          40h timeout cannot be modified
  2929.     CL = 00h timeout disabled
  2930.        else timeout in minutes
  2931. SeeAlso: AX=4000h,AX=4601h
  2932. ----------1541-------------------------------
  2933. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  2934.     AH = 41h
  2935.     AL = condition type
  2936.         bits 0-2: condition to wait for
  2937.              0 any external event
  2938.              1 compare and return if equal
  2939.              2 compare and return if not equal
  2940.              3 test and return if not zero
  2941.              4 test and return if zero
  2942.         bit 3:    reserved
  2943.         bit 4:    1=port address, 0=user byte
  2944.         bits 5-7: reserved
  2945.     BH = condition compare or mask value
  2946.     BL = timeout value times 55 milliseconds
  2947.         00h means no timeout
  2948.     DX = I/O port address if AL bit 4 set
  2949.     ES:DI -> user byte if AL bit 4 clear
  2950. ----------1542-------------------------------
  2951. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  2952.     AH = 42h
  2953.     AL = 00h to use system profile
  2954.          01h to force suspend regardless of system profile
  2955. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  2956.       power-up, execution will resume following the instruction calling
  2957.       this function
  2958. SeeAlso: AH=44h
  2959. ----------154280-----------------------------
  2960. INT 15 - Compaq SLT/286 - ENTER STANDBY
  2961.     AX = 4280h
  2962. Return: AH = 42h
  2963.     CF clear if successful
  2964.     CF set if unable to enter standby
  2965. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  2966. ----------1543-------------------------------
  2967. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  2968.     AH = 43h
  2969. Return: AL = status bits
  2970.         bit 0: LCD detached
  2971.         bit 1: reserved
  2972.         bit 2: RS232/parallel adapter powered on
  2973.         bit 3: internal modem powered on
  2974.         bit 4: power activated by alarm
  2975.         bit 5: standby power lost
  2976.         bit 6: external power in use
  2977.         bit 7: power low
  2978. ----------1544-------------------------------
  2979. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  2980.     AH = 44h
  2981.     AL = 00h to power off
  2982.          01h to power on
  2983. SeeAlso: AH=42h
  2984. ----------154600-----------------------------
  2985. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  2986.     AX = 4600h
  2987. Return: AH = modem configuration information
  2988.         bit 0 powerup state
  2989.             0 off
  2990.             1 on
  2991.         1 modem installed
  2992.         2 IRQ line assignment
  2993.             0 IRQ 4
  2994.             1 IRQ 3
  2995.         3 COM port assignment
  2996.             0 = COM 2
  2997.             1 = COM 1
  2998.         4 modem state
  2999.             0 not assigned
  3000.             1 assigned
  3001.         5 modem is on
  3002.     AL = power conservation status information
  3003.         bit 0  power source (0 internal, 1 external)
  3004.            1-2 low battery state
  3005.             00 no low battery condition
  3006.             01 low battery 1
  3007.             10 reserved
  3008.             11 low battery 2
  3009.            3-4 power conservation mode
  3010.             00 automatic
  3011.             01 on
  3012.             10 off
  3013.             11 reserved
  3014.     BH = default system inactivity timeout (1-21 minutes)
  3015.     BL = current system inactivity timeout (1-21 minutes)
  3016.     CH = default video display inactivity timeout (1-63 minutes)
  3017.     CL = current video display inactivity timeout (1-63 minutes)        
  3018.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  3019.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3020. SeeAlso: AX=4280h,AX=4601h,INT 77
  3021. ----------154601-----------------------------
  3022. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  3023.     AX = 4601h
  3024.     BL = system inactivity timeout (1-21 minutes)
  3025.        = FFh do not change
  3026.     CL = video display inactivity timeout (1-63 minutes)        
  3027.        = FFh do not change
  3028.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3029.        = FFh do not change
  3030.     DH = 00h turn modem OFF
  3031.        = 01h turn modem ON
  3032.        = FFh do not change modem state
  3033. Return: CF clear if successful
  3034.         AH = 00h
  3035.         BL = current system inactivity timeout (1-21 minutes)
  3036.         CL = current video display inactivity timeout (1-63 minutes)    
  3037.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3038.         DH = FFh modem state unchanged
  3039.            = 00h modem turned OFF
  3040.            = 01h modem turned ON
  3041.     CF set on error
  3042.         AH = 01h input is out of range
  3043.            = 02h - No modem present
  3044. SeeAlso: AX=4600h,INT 77
  3045. ----------154900-----------------------------
  3046. INT 15 - Far East MSDOS - GET DOS TYPE
  3047.     AX = 4900h
  3048. Return: CF clear if successful
  3049.         AH = 00h
  3050.         BL = type of DOS running
  3051.             00h DOS/V
  3052.         01h DOS/J or DOS/K (early IBM Japan versions of MSDOS)
  3053.     CF set on error
  3054.         AH = 86h (function not supported)
  3055. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  3056. SeeAlso: INT 21/AH=30h
  3057. ----------154DD4-----------------------------
  3058. INT 15 - HP 95LX - INSTALLATION CHECK
  3059.     AX = 4DD4h
  3060. Return: BX = 4850h ("HP") if HP 95LX
  3061.         CX = ??? (0101h)
  3062.         DL = ??? (00h)
  3063. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  3064. SeeAlso: INT 61"HP 95LX"
  3065. ----------154E-------------------------------
  3066. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  3067.     AH = 4Eh
  3068.     AL = light sleep
  3069.         00h disabled
  3070.         01h enabled
  3071. Note:    when light sleep is disabled, the system will continue running at full
  3072.       speed; when enabled, it may automatically slow to conserve batteries
  3073. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  3074. ----------154F-------------------------------
  3075. INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  3076.     AH = 4Fh
  3077.     AL = hardware scan code
  3078.     CF set
  3079. Return: CF set
  3080.        AL = hardware scan code
  3081.     CF clear
  3082.        scan code should be ignored
  3083. Note:    called by INT 9 handler to translate scan codes; the INT 09 code does
  3084.       not examine the scan code it reads from the keyboard until after
  3085.       this function returns.  This permits software to rearrange the
  3086.       keyboard; for example, swapping the CapsLock and Control keys, or
  3087.       turning the right Shift key into Enter.
  3088. SeeAlso: INT 09,INT 15/AH=C0h
  3089. ----------155300BX0000-----------------------
  3090. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  3091.     AX = 5300h
  3092.     BX = 0000h (device ID of system BIOS)
  3093. Return: CF clear if successful
  3094.         AH = major version (BCD)
  3095.         AL = minor version (BCD)
  3096.         BX = 504Dh ("PM")
  3097.         CX = flags
  3098.         bit 0: 16-bit protected mode interface supported
  3099.         bit 1: 32-bit protected mode interface supported
  3100.         bit 2: CPU idle call reduces processor speed
  3101.         bit 3: BIOS power management disabled
  3102.         bits 4-7 reserved
  3103.     CF set on error
  3104.         AH = error code (86h) (see below)
  3105.  
  3106. Values for error code:
  3107.  01h    power management functionality disabled
  3108.  02h    interface connection already in effect
  3109.  03h    interface not connected
  3110.  04h    real-mode interface not connected
  3111.  05h    16-bit protected-mode interface already connected
  3112.  06h    16-bit protected-mode interface not supported
  3113.  07h    32-bit protected-mode interface already connected
  3114.  08h    32-bit protected-mode interface not supported
  3115.  09h    unrecognized device ID
  3116.  0Ah    invalid parameter value in CX
  3117.  0Bh-1Fh reserved for other interface and general errors
  3118.  20h-3Fh reserved for CPU errors
  3119.  40h-5Fh reserved for device errors
  3120.  60h    can't enter requested state
  3121.  61h-7Fh reserved for other system errors
  3122.  80h    no power management events pending
  3123.  81h-85h reserved for other power management event errors
  3124.  86h    APM not present
  3125.  87h-9Fh reserved for other power management event errors
  3126. ----------155301BX0000-----------------------
  3127. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  3128.     AX = 5301h
  3129.     BX = 0000h (device ID of system BIOS)
  3130. Return: CF clear if successful
  3131.     CF set on error
  3132.         AH = error code (02h,09h) (see AX=5300h)
  3133. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  3134. ----------155302BX0000-----------------------
  3135. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  3136.     AX = 5302h
  3137.     BX = 0000h (device ID of system BIOS)
  3138. Return: CF clear if successful
  3139.         AX = real-mode segment base address of protected-mode 16-bit code
  3140.             segment
  3141.         BX = offset of entry point
  3142.         CX = real-mode segment base address of protected-mode 16-bit data
  3143.             segment
  3144.     CF set on error
  3145.         AH = error code (05h,06h,09h) (see AX=5300h)
  3146. Notes:    the caller must initialize two consecutive descriptors with the
  3147.       returned segment base addresses; these descriptors must be valid
  3148.       whenever the protected-mode interface is called, and will have
  3149.       their limits arbitrarily set to 64K.
  3150.     the protected mode interface is invoked by making a far call with the
  3151.       same register values as for INT 15; it must be invoked while CPL=0,
  3152.       the code segment descriptor must have a DPL of 0, the stack must be
  3153.       in a 16-bit segment and have enough room for BIOS use and possible
  3154.       interrupts, and the current I/O permission bit map must allow access
  3155.       to the I/O ports used for power management.
  3156.     functions 00h-03h are not available from protected mode
  3157. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  3158. ----------155303BX0000-----------------------
  3159. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  3160.     AX = 5303h
  3161.     BX = 0000h (device ID of system BIOS)
  3162. Return: CF clear if successful
  3163.         AX = real-mode segment base address of protected-mode 32-bit code
  3164.             segment
  3165.         EBX = offset of entry point
  3166.         CX = real-mode segment base address of protected-mode 16-bit code
  3167.             segment
  3168.         DX = real-mode segment base address of protected-mode 16-bit data
  3169.             segment
  3170.     CF set on error
  3171.         AH = error code (07h,08h,09h) (see AX=5300h)
  3172. Notes:    the caller must initialize three consecutive descriptors with the
  3173.       returned segment base addresses for 32-bit code, 16-bit code, and
  3174.       16-bit data, respectively; these descriptors must be valid whenever
  3175.       the protected-mode interface is called, and will have their limits
  3176.       arbitrarily set to 64K.
  3177.     the protected mode interface is invoked by making a far call to the
  3178.       32-bit code segment with the same register values as for INT 15; it
  3179.       must be invoked while CPL=0, the code segment descriptor must have a
  3180.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  3181.       for BIOS use and possible interrupts, and the current I/O permission
  3182.       bit map must allow access to the I/O ports used for power management.
  3183.     functions 00h-03h are not available from protected mode
  3184. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  3185. ----------155304BX0000-----------------------
  3186. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  3187.     AX = 5304h
  3188.     BX = 0000h (device ID of system BIOS)
  3189. Return: CF clear if successful
  3190.     CF set on error
  3191.         AH = error code (03h,09h) (see AX=5300h)
  3192. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  3193. ----------155305-----------------------------
  3194. INT 15 - Advanced Power Management Specification - CPU IDLE
  3195.     AX = 5305h
  3196. Return: after system leaves idle state
  3197.     CF clear
  3198. Notes:    call when the system is idle and should be suspended until the next
  3199.       system event or interrupt
  3200.     should not be called from within a hardware interrupt handler to avoid
  3201.       reentrance problems
  3202.     if an interrupt causes the system to resume normal processing, the
  3203.       interrupt may or may not have been handled when the BIOS returns
  3204.       from this call; thus, the caller should allow interrupts on return
  3205.     interrupt handlers may not retain control if the BIOS allows
  3206.       interrupts while in idle mode even if they are able to determine
  3207.       that they were called from idle mode
  3208.     the caller should issue this call continuously in a loop until it needs
  3209.       to perform some processing of its own
  3210. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  3211. ----------155306-----------------------------
  3212. INT 15 - Advanced Power Management Specification - CPU BUSY
  3213.     AX = 5306h
  3214. Return: CF clear
  3215. Notes:    called to ensure that the system runs at full speed even on systems
  3216.       where the BIOS is unable to recognize increased activity (especially
  3217.       if interrupts are hooked by other programs and not chained to the
  3218.       BIOS)
  3219.     this call may be made even when the system is already running at full
  3220.       speed, but it will create unnecessary overhead
  3221.     should not be called from within a hardware interrupt handler to avoid
  3222.       reentrance problems
  3223. SeeAlso: AX=5305h
  3224. ----------155307-----------------------------
  3225. INT 15 - Advanced Power Management Specification - SET POWER STATE
  3226.     AX = 5307h
  3227.     BX = device ID (see below)
  3228.     CX = system state ID
  3229.         0000h ready (not supported for device ID 0001h)
  3230.         0001h stand-by
  3231.         0002h suspend
  3232.         0003h off (not supported for device ID 0001h)
  3233.         0004h-FFFFh reserved
  3234. Return: CF clear if successful
  3235.     CF set on error
  3236.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  3237. Note:    should not be called from within a hardware interrupt handler to avoid
  3238.       reentrance problems
  3239.  
  3240. Values for device IDs:
  3241.  0000h    system BIOS
  3242.  0001h    all devices for which the system BIOS manages power
  3243.  01xxh    display (01FFh for all attached display devices)
  3244.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  3245.  03xxh    parallel ports (03FFh for all attached parallel ports)
  3246.  04xxh    serial ports (04FFh for all attached serial ports)
  3247.  0500h-FFFFh reserved
  3248. ----------155307BX0001-----------------------
  3249. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  3250.     AX = 5307h
  3251.     BX = 0001h
  3252.     CX = 0001h
  3253. Return: CF clear
  3254. Notes:    puts the entire system into stand-by mode; normally called in response
  3255.       to a System Stand-by Request notification after any necessary
  3256.       processing, but may also be invoked at the caller's discretion
  3257.     should not be called from within a hardware interrupt handler to avoid
  3258.       reentrance problems
  3259.     the stand-by state is typically exited on an interrupt
  3260. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  3261. ----------155307BX0001-----------------------
  3262. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  3263.     AX = 5307h
  3264.     BX = 0001h
  3265.     CX = 0002h
  3266. Return: after system is resumed
  3267.     CF clear
  3268. Notes:    puts the entire system into a low-power suspended state; normally
  3269.       called in response to a Suspend System Request notification after
  3270.       any necessary processing, but may also be invoked at the caller's
  3271.       discretion
  3272.     should not be called from within a hardware interrupt handler to avoid
  3273.       reentrance problems
  3274.     the caller may need to update its date and time values because the
  3275.       system could have been suspended for a long period of time
  3276. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  3277. ----------155308BXFFFF-----------------------
  3278. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  3279.     AX = 5308h
  3280.     BX = FFFFh
  3281.     CX = new state
  3282.         0000h disabled
  3283.         0001h enabled
  3284. Return: CF clear if successful
  3285.     CF set on error
  3286.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  3287. Notes:    when power management is disabled, the system BIOS will not
  3288.       automatically power down devices, enter stand-by or suspended mode,
  3289.       or perform any power-saving actions in response to AX=5305h calls
  3290.     should not be called from within a hardware interrupt handler to avoid
  3291.       reentrance problems
  3292. SeeAlso: AX=5309h
  3293. ----------155309BXFFFF-----------------------
  3294. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  3295.     AX = 5309h
  3296.     BX = FFFFh
  3297. Return: CF clear if successful
  3298.     CF set on error
  3299.         AH = error code (09h) (see AX=5300h)
  3300. Note:    should not be called from within a hardware interrupt handler to avoid
  3301.       reentrance problems
  3302. SeeAlso: AX=5308h
  3303. ----------15530ABX0001-----------------------
  3304. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  3305.     AX = 530Ah
  3306.     BX = 0001h
  3307. Return: CF clear if successful
  3308.         BH = AC line status
  3309.         00h off-line
  3310.         01h on-line
  3311.         FFh unknown
  3312.         other reserved
  3313.         BL = battery status
  3314.         00h high
  3315.         01h low
  3316.         02h critical
  3317.         03h charging
  3318.         FFh unknown
  3319.         other reserved
  3320.         CL = remaining battery life
  3321.         00h-64h (0-100) percentage of full charge
  3322.         FFh unknown
  3323.     CF set on error
  3324.         AH = error code (09h) (see AX=5300h)
  3325. Note:    should not be called from within a hardware interrupt handler to avoid
  3326.       reentrance problems
  3327. ----------15530B-----------------------------
  3328. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  3329.     AX = 530Bh
  3330. Return: CF clear if successful
  3331.         BX = event code
  3332.         0001h system stand-by request
  3333.         0002h system suspend request
  3334.         0003h normal resume system notification
  3335.         0004h critical resume system notification
  3336.         0005h battery low notification
  3337.     CF set on error
  3338.         AH = error code (03h,80h) (see AX=5300h)
  3339. Notes:    although power management events are often asynchronous, notification
  3340.       will not be made until polled via this call to permit software to
  3341.       only receive event notification when it is prepared to process
  3342.       power management events; since these events are not very time-
  3343.       critical, it should be sufficient to poll once or twice per second
  3344.     the critical resume notification is made after the system resumes
  3345.       from an emergency suspension; normally, the system BIOS only notifies
  3346.       its partner that it wishes to suspend and relies on the partner to
  3347.       actually request the suspension, but no notification is made on an
  3348.       emergency suspension
  3349.     should not be called from within a hardware interrupt handler to avoid
  3350.       reentrance problems
  3351. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  3352. ----------155400-----------------------------
  3353. INT 15 - Omniview Multitasker - INSTALLATION NOTIFICATION
  3354.     AX = 5400h
  3355.     ES:BX -> device information tables
  3356.     DI:DX -> dispatcher entry point
  3357. Note:    called by OmniView to notify programs loaded before OmniView of state
  3358.       changes inside OmniView
  3359. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  3360. ----------155401-----------------------------
  3361. INT 15 - Omniview Multitasker - PROCESS CREATION
  3362.     AX = 5401h
  3363.     ES:BX = process handle
  3364. Note:    called by OmniView to notify programs loaded before OmniView of state
  3365.       changes inside OmniView
  3366. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  3367. ----------155402-----------------------------
  3368. INT 15 - Omniview Multitasker - PROCESS DESTRUCTION
  3369.     AX = 5402h
  3370.     ES:DX = process handle
  3371. Note:    called by OmniView to notify programs loaded before OmniView of state
  3372.       changes inside OmniView
  3373. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  3374. ----------155403-----------------------------
  3375. INT 15 - Omniview Multitasker - SAVE
  3376.     AX = 5403h
  3377.     ES:DX = process swapping out
  3378. Note:    called by OmniView to notify programs loaded before OmniView of state
  3379.       changes inside OmniView
  3380. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  3381. ----------155404-----------------------------
  3382. INT 15 - Omniview Multitasker - RESTORE
  3383.     AX = 5404h
  3384.     ES:DX = process swapping in
  3385. Note:    called by OmniView to notify programs loaded before OmniView of state
  3386.       changes inside OmniView
  3387. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  3388. ----------155405-----------------------------
  3389. INT 15 - Omniview Multitasker - SWITCHING TO BACKGROUND
  3390.     AX = 5405h
  3391.     ES:DX = process swapping in
  3392. Note:    called by OmniView to notify programs loaded before OmniView of state
  3393.       changes inside OmniView
  3394. SeeAlso: AX=5406h
  3395. ----------155406-----------------------------
  3396. INT 15 - Omniview Multitasker - SWITCHING TO FOREGROUND
  3397.     AX = 5406h
  3398.     ES:DX = process swapping in
  3399. Note:    called by OmniView to notify programs loaded before OmniView of state
  3400.       changes inside OmniView
  3401. SeeAlso: AX=5405h
  3402. ----------155407-----------------------------
  3403. INT 15 - Omniview Multitasker - EXIT NOTIFICATION
  3404.     AX = 5407h
  3405. Note:    called by OmniView to notify programs loaded before OmniView of state
  3406.       changes inside OmniView
  3407. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  3408. ----------1580-------------------------------
  3409. INT 15 - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  3410.     AH = 80h
  3411.     BX = device ID
  3412.     CX = process ID
  3413.     CF clear
  3414. Return: CF clear if successful
  3415.         AH = 00h
  3416.     CF set on error
  3417.         AH = status
  3418.         80h invalid command (PC,PCjr)
  3419.         86h function not supported (XT)
  3420. Note:    this function should be hooked by a multitasker which wishes to keep
  3421.       track of device ownership; the default BIOS handler merely returns
  3422.       successfully
  3423. SeeAlso: AH=81h,AH=82h
  3424. ----------1581-------------------------------
  3425. INT 15 - OS HOOK - DEVICE CLOSE
  3426.     AH = 81h
  3427.     BX = device ID
  3428.     CX = process ID
  3429.     CF clear
  3430. Return: CF clear if successful
  3431.         AH = 00h
  3432.     CF set on error
  3433.         AH = status (see AH=80h)
  3434. Note:    this function should be hooked by a multitasker which wishes to keep
  3435.       track of device ownership; the default BIOS handler merely returns
  3436.       successfully
  3437. SeeAlso: AH=80h,AH=82h
  3438. ----------1582-------------------------------
  3439. INT 15 - OS HOOK - PROGRAM TERMINATION
  3440.     AH = 82h
  3441.     BX = process ID
  3442.     CF clear
  3443. Return: CF clear if successful
  3444.         AH = 00h
  3445.     CF set on error
  3446.         AH = status (see AH=80h)
  3447. Notes:    closes all devices opened by the given process ID with function 80h
  3448.     this function should be hooked by a multitasker which wishes to keep
  3449.       track of device ownership; the default BIOS handler merely returns
  3450.       successfully
  3451. SeeAlso: AH=80h,AH=81h
  3452. ----------1583-------------------------------
  3453. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  3454.     AH = 83h
  3455.     AL = subfunction
  3456.         00h set interval
  3457.         CX:DX = microseconds to delay
  3458.         ES:BX -> byte whose high bit is to be set at end of interval
  3459.         01h cancel wait interval
  3460. Return: CF set on error or function already busy
  3461.         AH = status
  3462.         80h invalid command (PC,PCjr)
  3463.         86h function not supported (XT and later)
  3464.     CF clear if successful
  3465. Note:    the resolution of the wait period is 977 microseconds on most systems
  3466.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3467.       real-time clock chip which is available on INT 70
  3468. SeeAlso: AH=86h,INT 70
  3469. ----------1584-------------------------------
  3470. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  3471.     AH = 84h
  3472.     DX = subfunction
  3473.         0000h read joystick switches
  3474.         Return: AL bits 7-4 = switch settings
  3475.         0001h read positions of joysticks
  3476.         Return: AX = X position of joystick A
  3477.             BX = Y position of joystick A
  3478.             CX = X position of joystick B
  3479.             DX = Y position of joystick B
  3480. Return: CF set on error
  3481.         AH = status
  3482.         80h invalid command (PC,PCjr)
  3483.         86h function not supported (other)
  3484.     CF clear if successful
  3485. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  3486.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  3487.     a 250kOhm joystick typically returns 0000h-01A0h
  3488. ----------1585-------------------------------
  3489. INT 15 - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  3490.     AH = 85h
  3491.     AL = 00h SysRq key pressed
  3492.        = 01h SysRq key released
  3493.     CF clear
  3494. Return: CF clear if successful
  3495.         AH = 00h
  3496.     CF set on error
  3497.         AH = status (see AH=84h)
  3498. Notes:    called by keyboard decode routine
  3499.     the default handler simply returns successfully; programs which wish
  3500.       to monitor the SysRq key must hook this call
  3501. SeeAlso: INT 09
  3502. ----------1586-------------------------------
  3503. INT 15 - BIOS - WAIT (AT,PS)
  3504.     AH = 86h
  3505.     CX:DX = interval in microseconds
  3506. Return: CF clear if successful (wait interval elapsed)
  3507.     CF set on error or AH=83h wait already in progress
  3508.         AH = status (see AH=84h)
  3509. Note:    the resolution of the wait period is 977 microseconds on most systems
  3510.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3511.       real-time clock chip which is available on INT 70
  3512. SeeAlso: AH=83h,INT 70
  3513. ----------1587-------------------------------
  3514. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  3515.     AH = 87h
  3516.     CX = number of words to copy (max 8000h)
  3517.     ES:SI -> global descriptor table
  3518. Return: CF set on error
  3519.     CF clear if successful
  3520.     AH = status
  3521.         00h source copied into destination
  3522.         01h parity error
  3523.         02h interrupt error
  3524.         03h address line 20 gating failed
  3525.         80h invalid command (PC,PCjr)
  3526.         86h unsupported function (XT,PS30)
  3527. Notes:    copy is done in protected mode with interrupts disabled
  3528.     this function is incompatible with the OS/2 compatibility box
  3529. SeeAlso: AH=88h,AH=89h
  3530.  
  3531. Format of global descriptor table:
  3532. Offset    Size    Description
  3533.  00h 16 BYTEs    zeros
  3534.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  3535.  12h  3 BYTEs    24-bit linear source address, low byte first
  3536.  15h    BYTE    source segment access rights (93h)
  3537.  16h    WORD    zero
  3538.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  3539.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  3540.  1Dh    BYTE    destination segment access rights (93h)
  3541.  1Eh 18 BYTEs    zeros
  3542. ----------1588-------------------------------
  3543. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  3544.     AH = 88h
  3545. Return: CF clear if successful
  3546.         AX = number of contiguous KB starting at absolute address 100000h
  3547.     CF set on error
  3548.         AH = status
  3549.         80h invalid command (PC,PCjr)
  3550.         86h unsupported function (XT,PS30)
  3551. Note:    TSRs which wish to allocate extended memory to themselves often hook
  3552.       this call, and return a reduced memory size.    They are then free to
  3553.       use the memory between the new and old sizes at will.
  3554. SeeAlso: AH=87h
  3555. ----------1589-------------------------------
  3556. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  3557.     AH = 89h
  3558.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  3559.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  3560.     ES:SI -> GDT for protected mode
  3561.            offset 0h  null descriptor (initialize to zeros)
  3562.               8h  GDT descriptor
  3563.              10h  IDT descriptor
  3564.              18h  DS
  3565.              20h  ES
  3566.              28h  SS
  3567.              30h  CS
  3568.              38h  uninitialized, used to build descriptor for BIOS CS
  3569.     CX = offset into protected-mode CS to jump to
  3570. Return: CF set on error
  3571.        AH = FFh  error enabling address line 20
  3572.     CF clear if successful
  3573.        AH = 00h
  3574.        in protected mode at specified address
  3575. Note:    BL and BH must be multiples of 8
  3576. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  3577. ----------1590-------------------------------
  3578. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  3579.     AH = 90h
  3580.     AL = device type
  3581.         00h disk
  3582.         01h diskette
  3583.         02h keyboard
  3584.         03h PS/2 pointing device
  3585.         21h waiting for keyboard input (Phoenix BIOS)
  3586.         80h network
  3587.         FBh digital sound (Tandy)
  3588.         FCh disk reset (PS)
  3589.         FDh diskette motor start
  3590.         FEh printer
  3591.     ES:BX -> request block for type codes 80h through BFh
  3592.     CF clear
  3593. Return: CF set if wait time satisfied
  3594.     CF clear if driver must perform wait
  3595.         AH = 00h
  3596. Notes:    type codes are allocated as follows:
  3597.       00-7F non-reentrant devices; OS must arbitrate access
  3598.       80-BF reentrant devices; ES:BX points to a unique control block
  3599.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  3600.     floppy and hard disk BIOS code uses this call to implement a timeout;
  3601.       for device types 00h and 01h, a return of CF set means that the
  3602.       timeout expired before the disk responded.
  3603.     this function should be hooked by a multitasker to allow other tasks
  3604.       to execute while the BIOS is waiting for I/O completion; the default
  3605.       handler merely returns with AH=00h and CF clear
  3606. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  3607. ----------1591-------------------------------
  3608. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  3609.     AH = 91h
  3610.     AL = device type (see AH=90h)
  3611.     ES:BX -> request block for type codes 80h through BFh
  3612.     CF clear
  3613. Return: AH = 00h
  3614. Note:    this function should be hooked by a multitasker to allow other tasks
  3615.       to execute while the BIOS is waiting for I/O completion; the default
  3616.       handler merely returns with AH=00h and CF clear
  3617. SeeAlso: AH=90h
  3618. ----------15BC-------------------------------
  3619. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  3620.     AH = BCh
  3621. Return: CF clear
  3622.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  3623. Note:    reads system timer channel 0 twice, then does calculations on returned
  3624.       values
  3625. ----------15BF00-----------------------------
  3626. INT 15 - Rational Systems DOS/16M - ???
  3627.     AX = BF00h
  3628.     ???
  3629. Return: ???
  3630. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  3631. SeeAlso: AX=BF02h
  3632. ----------15BF01-----------------------------
  3633. INT 15 - Rational Systems DOS/16M - ???
  3634.     AX = BF01h
  3635.     ???
  3636. Return: ???
  3637. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  3638.     called by DOS/4GW
  3639. SeeAlso: AX=BF00h,AX=BF02h
  3640. ----------15BF02DX0000-----------------------
  3641. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  3642.     AX = BF02h
  3643.     DX = 0000h
  3644. Return: DX = nonzero if installed
  3645.         DX:SI -> XBRK structure (see below)
  3646. Note:    this function is also supported by DOS/4G
  3647. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  3648. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  3649.  
  3650. Format of XBRK structure:
  3651. Offset    Size    Description
  3652.  00h    DWORD    linear address of first available byte
  3653.  04h    DWORD    linear address of last available byte + 1 ???
  3654.  08h    DWORD    real-mode address of XBRK structure???
  3655.  0Ch    DWORD    ???
  3656.  10h  2 BYTEs    ???
  3657.  12h    WORD    segment of ???
  3658.  14h  8 BYTEs    ???
  3659.  1Ch 512 BYTEs    protected-mode IDT
  3660. 21Ch  N BYTEs    protected-mode GDT
  3661. ----------15BF03-----------------------------
  3662. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  3663.     AX = BF03h
  3664.     BX = PSP segment of extender
  3665.     ???
  3666. Return: ???
  3667. Note:    if BX is not the PSP segment of the extender, it passes the call down
  3668.       the INT 15 chain; this allows nested instances of the extender
  3669. SeeAlso: AX=BF06h
  3670. ----------15BF04-----------------------------
  3671. INT 15 - Rational Systems DOS/4GW - ???
  3672.     AX = BF04h
  3673.     BX = PSP segment of extender
  3674. Return: nothing???
  3675. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  3676.       the INT 15 chain; this allows nested instances of the extender
  3677.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  3678. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  3679. ----------15BF05-----------------------------
  3680. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  3681.     AX = BF05h
  3682.     BX = PSP segment of extender
  3683. Return: nothing???
  3684. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  3685.       the INT 15 chain; this allows nested instances of the extender
  3686.     calls INT 67/AX=DE01h if ???
  3687. ----------15BF06-----------------------------
  3688. INT 15 - Rational Systems DOS/4GW - ???
  3689.     AX = BF06h
  3690.     BX = PSP segment of extender
  3691.     ???
  3692. Return: ???
  3693. Note:    if BX is not the PSP segment of the extender, it passes the call down
  3694.       the INT 15 chain; this allows nested instances of the extender
  3695. SeeAlso: AX=BF03h
  3696. ----------15BFDCDX0000-----------------------
  3697. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  3698.     AX = BFDCh
  3699.     DX = 0000h
  3700.     SI = 0000h
  3701. Return: DX = nonzero if installed
  3702.         DX:SI -> XBRK structure (see AX=BF02h)
  3703. SeeAlso: AX=BF02h
  3704. ----------15BFDEBX0000-----------------------
  3705. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  3706.     AX = BFDEh
  3707.     BX = 0000h
  3708. Return: AX = ??? (0003h)
  3709.     BX = FFFFh
  3710. SeeAlso: AX=BF02h
  3711. ----------15BFDEBX0001-----------------------
  3712. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  3713.     AX = BFDEh
  3714.     BX = 0001h
  3715. Return: BX = 0000h (success)
  3716.     CX:DX -> name of process manager executable
  3717. SeeAlso: AX=BFDEh/BX=0000h
  3718. ----------15BFDEBX0002-----------------------
  3719. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  3720.     AX = BFDEh
  3721.     BX = 0002h
  3722.     CX:DX -> ???
  3723. Return: BX = 0000h (success)
  3724. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  3725. ----------15BFDEBX0003-----------------------
  3726. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3727.     AX = BFDEh
  3728.     BX = 0003h
  3729. Return: BX = 0000h (success)
  3730.     CX:DX -> ???
  3731. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  3732. ----------15BFDEBX0004-----------------------
  3733. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3734.     AX = BFDEh
  3735.     BX = 0004h
  3736.     CL = ???
  3737. Return: BX = 0000h (success)
  3738.     CX:DX -> XBRK structure (see AX=BF02h)
  3739. SeeAlso: AX=BFDEh/BX=0000h
  3740. ----------15BFDEBX0005-----------------------
  3741. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3742.     AX = BFDEh
  3743.     BX = 0005h
  3744.     CX = new value for ???
  3745. Return: BX = 0000h (success)
  3746.     AX = old value of ???
  3747.     DS:SI -> ??? (if AX nonzero on return)
  3748.     ES:DI -> ??? (if AX zero on return)
  3749. Note:    called by DOS4GW.EXE
  3750. SeeAlso: AX=BFDEh/BX=0000h
  3751. ----------15BFDEBX0006-----------------------
  3752. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3753.     AX = BFDEh
  3754.     BX = 0006h
  3755. Return: BX = 0000h (success)
  3756.     AH = interrupt number??? (BEh)
  3757.     CX:DX = ???
  3758. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  3759. ----------15BFDEBX0007-----------------------
  3760. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  3761.     AX = BFDEh
  3762.     BX = 0007h
  3763.     CX:DX = ???
  3764. Return: BX = 0000h (success)
  3765. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  3766. ----------15BFDEBX0008-----------------------
  3767. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3768.     AX = BFDEh
  3769.     BX = 0008h
  3770.     CX = segment of ???
  3771.     DS = ???
  3772. Return: BX = status
  3773.         0000h successful
  3774.             AL = ??? (80h or C0h)
  3775.         DX = ??? (0603h) if AL=C0h
  3776.         0001h failed
  3777.             AX = 0000h
  3778. Note:    called by DOS4GW.EXE
  3779. SeeAlso: AX=BFDEh/BX=0000h
  3780. ----------15BFDEBX0009-----------------------
  3781. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  3782.     AX = BFDEh
  3783.     BX = 0009h
  3784. Return: BX = 0000h (success)
  3785.     CX:DX -> full pathname to LOAD32.EXP
  3786. SeeAlso: AX=BFDEh/BX=0000h
  3787. ----------15BFDEBX000A-----------------------
  3788. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ???
  3789.     AX = BFDEh
  3790.     BX = 000Ah
  3791. Return: BX = 0000h (success)
  3792.     AX = new value of ??? counter
  3793. Notes:    also resets a variety of values if the counter goes negative
  3794.     called by DOS4GW.EXE
  3795. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  3796. ----------15BFDEBX000B-----------------------
  3797. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ???
  3798.     AX = BFDEh
  3799.     BX = 000Bh
  3800. Return:    AX = new value of ??? counter
  3801. Note:    called by DOS4GW.EXE
  3802. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  3803. ----------15BFDEBX000C-----------------------
  3804. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3805.     AX = BFDEh
  3806.     BX = 000Ch
  3807.     CL = ???
  3808.         00h
  3809.         nonzero
  3810. Return: ???
  3811. SeeAlso: AX=BFDEh/BX=0000h
  3812. ----------15BFDEBX000D-----------------------
  3813. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3814.     AX = BFDEh
  3815.     BX = 000Dh
  3816.     ???
  3817. Return: ???
  3818. SeeAlso: AX=BFDEh/BX=0000h
  3819. ----------15BFDEBX000E-----------------------
  3820. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3821.     AX = BFDEh
  3822.     BX = 000Eh
  3823.     DX:CX -> ???
  3824. Return: AX = segment of handle for calling task
  3825.     BX = ??? (probably destroyed)
  3826.     DX:CX -> ???
  3827. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  3828. ----------15BFDEBX000F-----------------------
  3829. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  3830.     AX = BFDEh
  3831.     BX = 000Fh
  3832. Return: AX = segment of handle for calling task
  3833.     BX = ??? (probably destroyed)
  3834.     DX:CX -> ???
  3835. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  3836. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  3837. ----------15BFDEBX0010-----------------------
  3838. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE
  3839.     AX = BFDEh
  3840.     BX = 0010h
  3841. Return: AX = segment of caller's task handle
  3842.     BX destroyed
  3843. SeeAlso: AX=BFDEh/BX=000Fh
  3844. ----------15BFDEBX0011-----------------------
  3845. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3846.     AX = BFDEh
  3847.     BX = 0011h
  3848. Return: CX = code segment of DVDOS4GX.DVR
  3849.     BX = ??? (0004h)
  3850. SeeAlso: AX=BFDEh/BX=0000h
  3851. ----------15BFDEBX0012-----------------------
  3852. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3853.     AX = BFDEh
  3854.     BX = 0012h
  3855. Return: DX = code segment of DVDOS4GX.DVR
  3856.     BX = ??? (012Ch)
  3857.     CX = ??? (0006h)
  3858. SeeAlso: AX=BFDEh/BX=0000h
  3859. ----------15BFDEBX0013-----------------------
  3860. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3861.     AX = BFDEh
  3862.     BX = 0013h
  3863. Return: DX:CX -> ???
  3864. SeeAlso: AX=BFDEh/BX=000Eh
  3865. ----------15BFDEBX0014-----------------------
  3866. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX
  3867.     AX = BFDEh
  3868.     BX = 0014h
  3869.     CX = index of ??? mailbox
  3870.         (0000h-0004h valid, but no range checking done)
  3871. Return: AX,BX destroyed
  3872. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  3873. ----------15BFDEBX0015-----------------------
  3874. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  3875.     AX = BFDEh
  3876.     BX = 0015h
  3877.     CX = index of ??? mailbox
  3878.         (0000h-0004h valid, but no range checking done)
  3879. Return: AX,BX destroyed
  3880. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  3881. ----------15BFDEBX0016-----------------------
  3882. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  3883.     AX = BFDEh
  3884.     BX = 0016h
  3885.     CX = index of ??? mailbox
  3886.         (0000h-0004h valid, but no range checking done)
  3887. Return: AX = status
  3888.         0000h no one owns mailbox
  3889.         0001h mailbox has an owner
  3890.     BX destroyed
  3891. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  3892. ----------15BFDEBX0017-----------------------
  3893. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  3894.     AX = BFDEh
  3895.     BX = 0017h
  3896.     CX = index of ??? mailbox
  3897.         (0000h-0004h valid, but no range checking done)
  3898. Return: AX = segment of mailbox owner's handle
  3899.     BX = segment of caller's task handle
  3900. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  3901. ----------15BFDEBXFFFD-----------------------
  3902. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  3903.     AX = BFDEh
  3904.     BX = FFFDh
  3905. Return: CX:DX = ???
  3906. SeeAlso: AX=BFDEh/BX=FFFEh
  3907. ----------15BFDEBXFFFE-----------------------
  3908. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  3909.     AX = BFDEh
  3910.     BX = FFFEh
  3911.     CX:DX = ???
  3912. SeeAlso: AX=BFDEh/BX=FFFDh
  3913. ----------15BFDEBXFFFF-----------------------
  3914. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP
  3915.     AX = BFDEh
  3916.     BX = FFFFh
  3917. SeeAlso: AX=BFDEh/BX=0000h
  3918. ----------15C0-------------------------------
  3919. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  3920.     AH = C0h
  3921. Return: CF set if BIOS doesn't support call
  3922.     CF clear on success
  3923.         ES:BX -> ROM table (see below)
  3924.     AH = status
  3925.         00h successful
  3926.         86h unsupported function
  3927. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  3928.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  3929.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  3930.       and a model byte at absolute address FE845h
  3931.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  3932.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  3933.       past the end of the configuration table
  3934.  
  3935. Format of ROM configuration table:
  3936. Offset    Size    Description
  3937.  00h    WORD    number of bytes following
  3938.  02h    BYTE    model (see below)
  3939.  03h    BYTE    submodel (see below)
  3940.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  3941.  05h    BYTE    feature byte 1:
  3942.         bit 7 = DMA channel 3 used by hard disk BIOS
  3943.         bit 6 = 2nd 8259 installed
  3944.         bit 5 = Real-Time Clock installed
  3945.         bit 4 = INT 15/AH=4Fh called upon INT 9h
  3946.         bit 3 = wait for external event supported
  3947.         bit 2 = extended BIOS area allocated (usually at top of RAM)
  3948.         bit 1 = bus is Micro Channel instead of ISA
  3949.         bit 0 reserved
  3950.  06h    BYTE    feature byte 2:
  3951.         bit 7 = ???
  3952.         bit 6 = INT 16/AH=09h (keyboard functionality) supported
  3953.         bits 5-0 = ???
  3954.  07h    BYTE    feature byte 3:
  3955.         reserved (0)
  3956.  08h    BYTE    feature byte 4:
  3957.         reserved (0)
  3958.  09h    BYTE    feature byte 5:
  3959.         reserved (0) (IBM)
  3960.         ??? (08h) (Phoenix 386 v1.10)
  3961. ---AWARD BIOS---
  3962.  0Ah  N BYTEs    AWARD copyright notice
  3963. ---Phoenix BIOS---
  3964.  0Ah    BYTE    ??? (00h)
  3965.  0Bh    BYTE    major version
  3966.  0Ch    BYTE    minor version (BCD)
  3967.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  3968.  
  3969. Values for model/submodel/revision:
  3970. Model  Submdl  Rev    BIOS date    System
  3971.  FFh    *    *    04/24/81    PC (original)
  3972.  FFh    *    *    10/19/81    PC (some bugfixes)
  3973.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  3974.  FFh    46h    ***      ???        Olivetti M15
  3975.  FEh    *    *    08/16/82    PC XT
  3976.  FEh    *    *    11/08/82    PC XT and Portable
  3977.  FEh    43h    ***      ???        Olivetti M240
  3978.  FEh    A6h    ???      ???        ??? (checked for by 386MAX v6.01)
  3979.  FDh    *    *    06/01/83    PCjr
  3980.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  3981.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  3982.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  3983.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  3984.  FCh    01h    00h    09/17/87    Tandy 3000
  3985.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  3986.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  3987.             (Those date characters are not typos)
  3988.  FCh    01h    30h      ???        Tandy 3000NL
  3989.  FCh    01h    ???      ???        Compaq 286/386
  3990.  FCh    02h    00h    04/21/86    PC XT-286
  3991.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  3992.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  3993.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  3994.  FCh    06h    ???      ???        7552 "Gearbox"
  3995.  FCh    08h    ***      ???        Epson, unknown model
  3996.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  3997.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  3998.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  3999.  FCh    30h    ***      ???        Epson, unknown model
  4000.  FCh    31h    ***      ???        Epson, unknown model
  4001.  FCh    33h    ***      ???        Epson, unknown model
  4002.  FCh    42h    ***      ???        Olivetti M280
  4003.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  4004.  FCh    48h    ***      ???        Olivetti M290
  4005.  FCh    4Fh    ***      ???        Olivetti M250
  4006.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  4007.  FCh    51h    ***      ???        Olivetti PCS286
  4008.  FCh    52h    ***      ???        Olivetti M300
  4009.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  4010.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  4011.  FBh    00h    02h    05/09/86    PC XT
  4012.  FBh    4Ch    ***      ???        Olivetti M200
  4013.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  4014.  FAh    00h    01h    12/12/86    PS/2 Model 30
  4015.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  4016.  FAh    4Eh    ***      ???        Olivetti M111
  4017.  F9h    00h    00h    09/13/85    PC Convertible
  4018.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  4019.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  4020.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  4021.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  4022.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  4023.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  4024.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  4025.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  4026.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  4027.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  4028.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  4029.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  4030.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  4031.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  4032.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  4033.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  4034.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  4035.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  4036.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  4037.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  4038.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  4039.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  4040.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  4041.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  4042.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  4043.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  4044.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  4045.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  4046.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  4047.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  4048.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  4049.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  4050.  F8h    61h    ***      ???        Olivetti P500
  4051.  F8h    62h    ***      ???        Olivetti P800
  4052.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  4053.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  4054.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  4055.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  4056.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  4057.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  4058.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  4059.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  4060.  30h    ???    ???      ???        Sperry PC
  4061.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  4062.  ???    56h    ???      ???        Olivetti, unknown model
  4063.  ???    74h    ???      ???        Olivetti, unknown model
  4064.     * This BIOS call is not implemented in these early versions.
  4065.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  4066.    ** These BIOS versions require the DASDDRVR.SYS patches.
  4067.   *** These Olivetti and Epson machines store the submodel in the byte at
  4068.       F000h:FFFDh.
  4069.  
  4070. Values for Dell model byte:
  4071.  02h    Dell 200
  4072.  03h    Dell 300
  4073.  05h    Dell 220
  4074.  06h    Dell 310
  4075.  07h    Dell 325
  4076.  09h    Dell 310A
  4077.  0Ah    Dell 316
  4078.  0Bh    Dell 220E
  4079.  0Ch    Dell 210
  4080.  0Dh    Dell 316SX
  4081.  0Eh    Dell 316LT
  4082.  0Fh    Dell 320LX
  4083.  11h    Dell 425E
  4084. ----------15C1-------------------------------
  4085. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  4086.     AH = C1h
  4087. Return: CF set on error
  4088.     CF clear if successful
  4089.         ES = segment of data area
  4090. SeeAlso: AH=04h"ABIOS"
  4091. ----------15C200BH00-------------------------
  4092. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  4093.     AX = C200h
  4094.     BH = 00h disable
  4095.          01h enable
  4096. Return: CF set on error
  4097.     AH = status
  4098.         00h successful
  4099.         01h invalid function
  4100.         02h invalid input
  4101.         03h interface error
  4102.         04h need to resend
  4103.         05h no device handler installed
  4104. ----------15C201-----------------------------
  4105. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  4106.     AX = C201h
  4107. Return: CF set on error
  4108.         AH = status (see AX=C200h)
  4109.     CF clear if successful
  4110.         BH = device ID
  4111. SeeAlso: INT 33/AX=0000h
  4112. ----------15C202-----------------------------
  4113. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  4114.     AX = C202h
  4115.     BH = sampling rate
  4116.         00h 10/second
  4117.         01h 20/second
  4118.         02h 40/second
  4119.         03h 60/second
  4120.         04h 80/second
  4121.         05h 100/second
  4122.         06h 200/second
  4123. Return: CF set on error
  4124.         AH = status (see AX=C200h)
  4125. SeeAlso: INT 33/AX=001Ch
  4126. ----------15C203-----------------------------
  4127. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  4128.     AX = C203h
  4129.     BH = resolution
  4130.         00h one count per mm
  4131.         01h two counts per mm
  4132.         02h four counts per mm
  4133.         03h eight counts per mm
  4134. Return: CF set on error
  4135.         AH = status (see AX=C200h)
  4136. ----------15C204-----------------------------
  4137. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  4138.     AX = C204h
  4139. Return: CF set on error
  4140.         AH = status (see AX=C200h)
  4141.     CF clear if successful
  4142.         BH = device ID
  4143. ----------15C205-----------------------------
  4144. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  4145.     AX = C205h
  4146.     BH = data package size (1 - 8 bytes)
  4147. Return: CF set on error
  4148.         AH = status (see AX=C200h)
  4149. SeeAlso: AX=C201h
  4150. ----------15C206-----------------------------
  4151. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  4152.     AX = C206h
  4153.     BH = subfunction
  4154.         00h return device status
  4155.         Return: BL = status
  4156.                bit 0: right button pressed
  4157.                bit 1: reserved
  4158.                bit 2: left button pressed
  4159.                bit 3: reserved
  4160.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  4161.                bit 5: device enabled
  4162.                bit 6: 0 if stream mode, 1 if remote mode
  4163.                bit 7: reserved
  4164.             CL = resolution (see AX=C203h)
  4165.             DL = sample rate, reports per second
  4166.         01h set scaling at 1:1
  4167.         02h set scaling at 2:1
  4168. Return: CF set on error
  4169.         AH = status (see AX=C200h)
  4170. ----------15C207-----------------------------
  4171. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  4172.     AX = C207h
  4173.     ES:BX -> FAR user device handler
  4174. Return: CF set on error
  4175.         AH = status (see AX=C200h)
  4176. SeeAlso: INT 33/AX=000Ch
  4177. ----------15C3------------------------------
  4178. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  4179.     AH = C3h
  4180.     AL = 00h disable
  4181.          01h enable
  4182.         BX = timer counter
  4183. Return: CF set on error
  4184.     CF clear if successful
  4185. Note:    the watchdog timer generates an NMI
  4186. ----------15C4-------------------------------
  4187. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  4188.     AH = C4h
  4189.     AL = 00h return base POS register address
  4190.          01h enable slot
  4191.          BL = slot number
  4192.          02h enable adapter
  4193. Return: CF set on error
  4194.     DX = base POS register address (if function 00h)
  4195. ----------15C5-------------------------------
  4196. INT 15 U - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  4197.     AH = C5h
  4198.     AL = interrupt being invoked
  4199.         01h INT 19
  4200.         02h INT 14
  4201.         03h INT 16
  4202.         04h INT 40 (floppy INT 13)
  4203.         05h INT 17
  4204.         06h INT 10
  4205.         07h INT 12
  4206.         08h INT 11
  4207.         09h INT 1A
  4208. Return: all registers except AX must be preserved
  4209. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  4210.       handlers on the PS/2 Models 30/286, 50Z, and 95
  4211.     default handler does nothing and returns CF clear for the above
  4212.       subfunctions, CF set and AH=86h for all other subfunctions
  4213.     value of AX passed to the original interrupt handler is pushed on
  4214.       stack immediately prior to call
  4215. ----------15C6-------------------------------
  4216. INT 15 U - PS/2 Model 95 - ???
  4217.     AH = C6h
  4218.     ???
  4219. Return: ???
  4220. ----------15C7-------------------------------
  4221. INT 15 U - PS/2 Model 95 - ???
  4222.     AH = C7h
  4223.     ???
  4224. Return: ???
  4225. ----------15C8-------------------------------
  4226. INT 15 U - PS/2 Model 95 - ???
  4227.     AH = C8h
  4228.     ???
  4229. Return: ???
  4230. ----------15C9-------------------------------
  4231. INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  4232.     AH = C9h
  4233.     AL = 10h (may be required on some non-PS BIOSes)
  4234. Return: AH = 00h
  4235.     CH = CPU type
  4236.         03h 80386
  4237.         04h 80486
  4238.     CL = mask revision
  4239.         23h 386SX
  4240. Notes:    the BIOS must save DX at startup in order to be able to support this
  4241.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  4242.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  4243. ----------15CA-------------------------------
  4244. INT 15 U - PS/2 Model 95 - ???
  4245.     AH = CAh
  4246.     ???
  4247. Return: ???
  4248. ----------15CB-------------------------------
  4249. INT 15 U - PS/2 Model 95 - ???
  4250.     AH = CBh
  4251.     ???
  4252. Return: ???
  4253. ----------15CC-------------------------------
  4254. INT 15 U - PS/2 Model 95 - ???
  4255.     AH = CCh
  4256.     ???
  4257. Return: ???
  4258. ----------15CD-------------------------------
  4259. INT 15 U - PS/2 Model 95 - ???
  4260.     AH = CDh
  4261.     ???
  4262. Return: ???
  4263. ----------15CE-------------------------------
  4264. INT 15 U - PS/2 Model 95 - ???
  4265.     AH = CEh
  4266.     ???
  4267. Return: ???
  4268. ----------15CF-------------------------------
  4269. INT 15 U - PS/2 Model 95 - ???
  4270.     AH = CFh
  4271.     ???
  4272. Return: ???
  4273. ----------15D800-----------------------------
  4274. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  4275.     AX = D800h
  4276.     CL = slot number (including embedded and virtual)
  4277. Return: CF clear if successful
  4278.         AH = 00h
  4279.     CF set on error
  4280.         AH = error code
  4281.         80h invalid slot number
  4282.         82h EISA CMOS corrupt
  4283.         83h empty slot
  4284.         86h invalid BIOS-FW function call
  4285.         87h invalid system configuration
  4286.     AL bit flags
  4287.         bit 7: set if duplicate IDs
  4288.         6: set if product ID readable
  4289.           4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  4290.           0-3: duplicate ID number if bit 7 set
  4291.     BH = major revision level of configuration utility
  4292.     BL = minor revision level of configuration utility
  4293.     CX = checksum of configuration file
  4294.     DH = number of device functions
  4295.     DL = combined function information byte
  4296.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  4297. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  4298. SeeAlso: AX=D801h,AX=D804h
  4299. ----------15D801-----------------------------
  4300. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  4301.     AX = D801h
  4302.     CH = function number to read
  4303.     CL = slot number (including embedded and virtual)
  4304.     DS:SI -> 320-byte buffer for standard configuration data block
  4305. Return: CF clear if successful
  4306.         AH = 00h
  4307.         DS:SI buffer filled
  4308.     CF set on error
  4309.         AH = error code
  4310.         80h invalid slot number
  4311.         81h invalid function number
  4312.         82h EISA CMOS corrupt
  4313.         83h empty slot
  4314.         86h invalid BIOS-FW function call
  4315.         87h invalid system configuration
  4316.     BX destroyed
  4317. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  4318. ----------15D802-----------------------------
  4319. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  4320.     AX = D802h
  4321.     BH = EISA config utility major revision level
  4322.     BL = EISA config utility minor revision level
  4323. Return: CF clear if successful
  4324.         AH = 00h
  4325.     CF set on error
  4326.         AH = error code
  4327.         84h error clearing CMOS
  4328.         86h invalid BIOS-FW function call
  4329.         88h config utility version not supported
  4330. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  4331. SeeAlso: AX=D803h
  4332. ----------15D803-----------------------------
  4333. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  4334.     AX = D803h
  4335.     CX = length of data structure (0000h = empty slot)
  4336.         includes two bytes for config file checksum
  4337.     DS:SI -> configuration data
  4338. Return: CF clear if successful
  4339.         AH = 00h
  4340.     CF set on error
  4341.         AH = error code
  4342.         84h error clearing CMOS
  4343.         85h EISA CMOS is full
  4344.         86h invalid BIOS-FW function call
  4345. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  4346. SeeAlso: AX=D802h
  4347. ----------15D804-----------------------------
  4348. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  4349.     AX = D804h
  4350.     CL = slot number (including embedded and virtual)
  4351. Return: CF clear if successful
  4352.         AH = 00h
  4353.     CF set on error
  4354.         AH = error code
  4355.         80h invalid slot number
  4356.         83h empty slot
  4357.         86h invalid BIOS-FW function call
  4358.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  4359. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  4360. SeeAlso: AX=D800h
  4361. ----------15D8-------------------------------
  4362. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  4363.     AH = D8h
  4364.     AL = 80h to 84h
  4365.     other registers as appropriate for AL=00h to 04h
  4366. Return: as appropriate for AL=00h to 04h
  4367. Note:    these functions are identical to AX=D800h to D804h, except that they
  4368.       should be called when using 32-bit CS addressing mode (pointers use
  4369.       ESI rather than SI as offset) instead of 16-bit addressing mode
  4370. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  4371. ----------15DE00-----------------------------
  4372. INT 15 - DESQview - GET PROGRAM NAME
  4373.     AX = DE00h
  4374. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  4375.         the "Switch Windows" menu (see below)
  4376. Note:    always returns AX=0000h under DESQview/X
  4377. SeeAlso: AX=DE07h
  4378.  
  4379. Format of program entry in DESQVIEW.DVO:
  4380. Offset    Size    Description
  4381.  00h    BYTE    length of name (FFh if end of file)
  4382.  01h  N BYTEs    name
  4383.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  4384.     BYTE    program type
  4385.         00h normal program
  4386.         04h divider
  4387.         80h Delete a Program
  4388.         81h Change a Program
  4389.     WORD    ??? apparently always 0000h
  4390. ----------15DE01-----------------------------
  4391. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  4392.     AX = DE01h
  4393. Return: nothing
  4394. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  4395.     NOP for DESQview/X
  4396. ----------15DE02-----------------------------
  4397. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  4398.     AX = DE02h
  4399. Return: nothing
  4400. Note:    this call is a NOP in DV 2.x
  4401. SeeAlso: AX=DE03h
  4402. ----------15DE03-----------------------------
  4403. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  4404.     AX = DE03h
  4405. Return: AX = ??? for current window
  4406.     BX = ??? for current window
  4407. Note:    this call is a NOP in DV 2.x
  4408. SeeAlso: AX=DE02h
  4409. ----------15DE04-----------------------------
  4410. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  4411.     AX = DE04h
  4412. Return: BX = bytes of common memory available
  4413.     CX = largest block available
  4414.     DX = total common memory in bytes
  4415. SeeAlso: AX=DE05h,AX=DE06h
  4416. ----------15DE05-----------------------------
  4417. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  4418.     AX = DE05h
  4419. Return: BX = K of memory available
  4420.     CX = largest block available
  4421.     DX = total conventional memory in K
  4422. SeeAlso: AX=DE04h,AX=DE06h
  4423. ----------15DE06-----------------------------
  4424. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  4425.     AX = DE06h
  4426. Return: BX = K of expanded memory available
  4427.     CX = largest block available
  4428.     DX = total expanded memory in K
  4429. SeeAlso: AX=DE04h,AX=DE05h
  4430. ----------15DE07-----------------------------
  4431. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  4432.     AX = DE07h
  4433. Return: AX = number of program as it appears on the "Switch Windows" menu
  4434. Note:    this API call may be made from a hardware interrupt handler
  4435. SeeAlso: AX=DE00h
  4436. ----------15DE08-----------------------------
  4437. INT 15 - DESQview - GET ???
  4438.     AX = DE08h
  4439. Return: AX = 0000h if ??? is not set to the current task
  4440.          0001h if ??? is set to the current task
  4441. ----------15DE09-----------------------------
  4442. INT 15 - DESQview - UNIMPLEMENTED
  4443.     AX = DE09h
  4444. Return: nothing (NOP in DV 1.x and 2.x)
  4445. ----------15DE0A-----------------------------
  4446. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  4447.     AX = DE0Ah
  4448.     BL = character
  4449. Return: character displayed, next call will display in next position (which
  4450.     wraps back to the start of the line if off the right edge of screen)
  4451. Notes:    displays character on bottom line of *physical* screen, regardless
  4452.       of current size of window (even entirely hidden)
  4453.     does not know about graphics display modes, just pokes the characters
  4454.       into display memory
  4455.     this API call may be made from a hardware interrupt handler
  4456. SeeAlso: AX=1003h
  4457. ----------15DE0B-----------------------------
  4458. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  4459.     AX = DE0Bh
  4460.     BL = API level minor version number
  4461.     BH = API level major version number
  4462. Return: AX = maximum API level (AH = major, AL = minor)
  4463. Notes:    if the requested API level is greater than the version of DESQview, a
  4464.       "You need a newer version" error window is popped up
  4465.     the API level defaults to 1.00, and is inherited by child tasks
  4466. ----------15DE0C-----------------------------
  4467. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  4468.     AX = DE0Ch
  4469.     BX = number of bytes
  4470. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  4471. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  4472.       system memory
  4473. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  4474. ----------15DE0D-----------------------------
  4475. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  4476.     AX = DE0Dh
  4477.     ES:DI -> previously allocated block
  4478. Return: nothing
  4479. SeeAlso: AX=1002h,AX=DE0Ch
  4480. ----------15DE0E-----------------------------
  4481. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  4482.     AX = DE0Eh
  4483.     ES:DI -> name to find
  4484.     CX = length of name
  4485. Return: BX = 0000h not found
  4486.          0001h found
  4487.         DS:SI = object handle
  4488. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  4489.  
  4490. Special mailbox names:
  4491.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  4492.  "DESQview/X Help Engine"
  4493.  "DESQview/X Network Server"  Network Manager
  4494.  "DESQview X Server0"    X-Windows server
  4495.  "DESQview X Server7"    X-Windows printing service
  4496.  "INBOX"        DESQview/X LPD requests
  4497.  "OUTBOX"        DESQview/X LPD responses
  4498.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  4499. ----------15DE0F-----------------------------
  4500. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  4501.     AX = DE0Fh
  4502. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  4503. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  4504.     enables an additional mouse mode
  4505. ----------15DE10-----------------------------
  4506. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  4507.     AX = DE10h
  4508.     BH = scan code
  4509.     BL = character
  4510. Return: nothing
  4511. Notes:    a later read will get the keystroke as if it had been typed by the user
  4512.     multiple pushes are read last-in first-out
  4513.     if a script exists for the pushed key in the current application, the
  4514.       script will be executed
  4515.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  4516. SeeAlso: INT 16/AH=05h
  4517. ----------15DE11BL00-------------------------
  4518. INT 15 - DESQview 2.00+ - "JUSTIFY" - EN/DISABLE AUTOMATIC WINDOW JUSTIFICATION
  4519.     AX = DE11h
  4520.     BL = 00h      viewport will not move automatically
  4521.          nonzero  viewport will move to keep cursor visible (default)
  4522. Return: nothing
  4523. ----------15DE12BX0000-----------------------
  4524. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  4525.     AX = DE12h
  4526.     BX = 0000h    select normal style (linefeed only moves down)
  4527.          nonzero  select C style (linefeed moves to start of next line)
  4528. Return: nothing
  4529. Note:    set on a per-task basis, and inherited from the parent task
  4530. ----------15DE13-----------------------------
  4531. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  4532.     AX = DE13h
  4533. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  4534.          without matching ENDC (see INT 15/AX=101Ch)
  4535. Note:    this API call may be made from within a hardware interrupt handler
  4536. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  4537. ----------15DE14-----------------------------
  4538. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  4539.     AX = DE14h
  4540.     ES:DI -> object
  4541. Return: BL = 00h not an object
  4542.          08h window or task
  4543.          09h mailbox
  4544.          0Ah keyboard
  4545.          0Bh timer
  4546.          0Ch objectq
  4547.          0Fh pointer
  4548.          10h panel
  4549. SeeAlso: AX=1016h
  4550. ----------15DE15BL00-------------------------
  4551. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  4552.     AX = DE15h
  4553.     BL = 00h post system error on all error conditions
  4554.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  4555.          messages sent to mailboxes which fail due to lack of system
  4556.          or common memory
  4557.          02h (v2.26+) same as 01h, but return null pointer for GETMEM
  4558.          calls which fail due to lack of system memory
  4559. Return: nothing
  4560. SeeAlso: AX=DE16h
  4561. ----------15DE16-----------------------------
  4562. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  4563.     AX = DE16h
  4564. Return: BL = 00h always post system error
  4565.          01h return carry flag set on failed mailbox writes
  4566.          02h return CF set on failed mailbox writes and NULL on failed
  4567.          GETMEM calls
  4568. SeeAlso: AX=DE15h
  4569. ----------15DE17-----------------------------
  4570. INT 15 - DESQview v2.20-2.25 - reserved
  4571.     AX = DE17h
  4572. Return: pops up "Programming error" window
  4573. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  4574. SeeAlso: AX=1117h
  4575. ----------15DE17BX0000-----------------------
  4576. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  4577.     AX = DE17h
  4578.     BX = 0000h    get current mapping context without setting
  4579.          nonzero    set new mapping context
  4580. Return: BX = mapping context in effect before call
  4581. Notes:    mapping contexts determine conventional-memory addressability; setting
  4582.       a mapping context ensures that the associated program and data areas
  4583.       are in memory for access.  Usable by drivers, TSRs and shared
  4584.       programs.
  4585.     caller need not be running under DESQview
  4586.     this API call may be made from a hardware interrupt handler
  4587. SeeAlso: AX=1117h,AX=DE21h,INT 2F/AX=1685h
  4588. ----------15DE18-----------------------------
  4589. INT 15 - DESQview v2.20+ - internal - ???
  4590.     AX = DE18h
  4591.     BP = function number
  4592.         high byte must be 10h
  4593.         low byte is function
  4594.         00h set ???
  4595.             BL = ???  (00h-10h, video mode???)
  4596.             BH = value to store
  4597.         03h set ???
  4598.             BL = ??? (stored in driver)
  4599.         0Ah get ???
  4600.             ES:DI -> 18-byte buffer to hold ???
  4601. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  4602. ----------15DE19-----------------------------
  4603. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  4604.     AX = DE19h
  4605.     BX = number of bytes to allocate
  4606. Return: AX = 0000h successful
  4607.         ES:DI -> allocated block
  4608.          nonzero insufficient memory
  4609. Note:    this API call may be made from within a hardware interrupt handler
  4610. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  4611. ----------15DE1A-----------------------------
  4612. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  4613.     AX = DE1Ah
  4614.     DS:SI -> previously allocated block
  4615. Note:    this function may be called from within a hardware interrupt handler
  4616. SeeAlso: AX=DE0Dh,AX=DE19h
  4617. ----------15DE1B-----------------------------
  4618. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  4619.     AX = DE1Bh
  4620. Return: nothing
  4621. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  4622. ----------15DE1C-----------------------------
  4623. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  4624.     AX = DE1Ch
  4625. Return: nothing
  4626. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  4627.       that DOS is free
  4628.     the official documentation states that this call should be paired with
  4629.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  4630.     this API call may be made from within a hardware interrupt handler
  4631. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  4632. ----------15DE1D-----------------------------
  4633. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  4634.     AX = DE1Dh
  4635.     DX = segment of handle for task to receive keystroke
  4636.     BL = character
  4637.     BH = scan code
  4638. Return: AX = 0000h if successful
  4639.        nonzero if receiver's keyboard buffer was full
  4640. Notes:    the key is treated as though the user had pressed it, ignoring any
  4641.       script which may be bound to the key, and using the current field
  4642.       table if the keyboard object is in field processing mode
  4643.     multiple PUTKEYs are seen in the order in which they are executed
  4644. SeeAlso: AX=DE10h
  4645. ----------15DE1E-----------------------------
  4646. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  4647.     AX = DE1Eh
  4648. Return:    CL = actual number of rows on screen
  4649.     CH = actual number of columns on screen
  4650.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  4651. Note:    this API call may be made from a hardware interrupt handler
  4652. SeeAlso: INT 10/AH=0Fh
  4653. ----------15DE1F-----------------------------
  4654. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  4655.     AX = DE1Fh
  4656. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  4657. Note:    this API call may be made from within a hardware interrupt handler
  4658. SeeAlso: AX=DE13h
  4659. ----------15DE20-----------------------------
  4660. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  4661.     AX = DE20h
  4662.     BX = segment of handle of task to interupt
  4663.     DX:CX -> FAR interrupt routine
  4664.     BP,SI,DI,DS,ES as required by interrupt routine
  4665. Return: nothing
  4666. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  4667.       making the DISPATCHINT call
  4668.     multiple "DISPATCHINT" calls are processed in the order in which they
  4669.       were executed
  4670.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  4671.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  4672.       needs to be preserved
  4673.     this API call may be made from within a hardware interrupt handler
  4674. SeeAlso: AX=1021h,AX=DE2Ah
  4675. ----------15DE21-----------------------------
  4676. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  4677.     AX = DE21h
  4678.     BX = new state
  4679.         0000h turn off
  4680.         nonzero turn on
  4681. Return: BX = old state of virtualization
  4682. Notes:    this API call may be made from within a hardware interrupt handler
  4683.     under DV 2.40 and 2.42, this call appears to have no effect and always
  4684.       returns a nonzero value in BX which appears to be the offset within
  4685.       the DV common memory segment of the caller's task object; it may
  4686.       only have an effect within a hardware interrupt handler
  4687. SeeAlso: AX=1117h,AX=DE17h
  4688. ----------15DE22-----------------------------
  4689. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  4690.     AX = DE22h
  4691.     DX = segment of task handle
  4692. Return: DX = total amount of memory in paragraphs
  4693.     BX = amount of system memory in paragraphs
  4694.     CX = largest block of system memory available in paragraphs
  4695.     AX = flags
  4696.         bit 0: system memory resides in shared memory
  4697.         1: process's memory is swapped out
  4698.         2: process's system memory is swapped out
  4699. Notes:    if the task handle is a child task, the returned values will be for the
  4700.       process containing the task, rather than the task itself
  4701.     if the process's system memory is swapped out, BX,CX,DX remain
  4702.       unchanged, because the memory usage cannot be determined
  4703. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  4704. ----------15DE23-----------------------------
  4705. INT 15 U - DESQview v2.31+ - ???
  4706.     AX = DE23h
  4707.     BX = ??? IRQ number on first PIC?
  4708.     CX = ??? IRQ number on second PIC?
  4709. Return: ???
  4710. Note:    called by QEMM 6.00+
  4711. ----------15DE24-----------------------------
  4712. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  4713.     AX = DE24h
  4714.     BX = length of .DVP data
  4715.     CX = length of ??? string
  4716.     DS:SI -> ??? string
  4717.     ES:DI -> .DVP data (see AX=102Ch)
  4718. Return: BX = segment of task handle??? or 0000h on error
  4719. Note:    this call is similar to AX=102Ch except that it can interpret the
  4720.       extended DVP data
  4721. SeeAlso: AX=102Ch
  4722. ----------15DE25-----------------------------
  4723. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  4724.     AX = DE25h
  4725.     ES:DI -> 67-byte buffer for ASCIZ directory name
  4726. Return: ES:DI buffer filled with directory from which DESQview was started
  4727. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  4728.       name, so if the buffer is not cleared to zeros before the call,
  4729.       there is no way to tell where the directory name ends.  This bug
  4730.       has been fixed in DV 2.52 (DV/X 1.02)
  4731. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  4732. ----------15DE26-----------------------------
  4733. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  4734.     AX = DE26h
  4735. Return: BX = segment of handle for task with keyboard focus
  4736. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  4737.       "direct" window is active
  4738. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  4739. ----------15DE27-----------------------------
  4740. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  4741.     AX = DE27h
  4742.     BX = type
  4743.         0000h process
  4744.         0001h task
  4745.     ES:DI -> list of Instance Item Structures (see below)
  4746. Return: CF clear if successful
  4747.         AX = ???
  4748.         BX = ???
  4749.     CF set on error
  4750.         AX = ???
  4751. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4752. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  4753.  
  4754. Format of Instance Item Structure [one element of list]:
  4755. Offset    Size    Description
  4756.  00h    WORD    length of data area DESQview should save and restore on context
  4757.          switches (0000h = end of list)
  4758.  02h    DWORD    pointer to area to be saved/restored
  4759. ----------15DE28-----------------------------
  4760. INT 15 U - DESQview v2.50+ - ???
  4761.     AX = DE28h
  4762.     BX = segment of ??? or 0000h for default
  4763.     ???
  4764. Return: ???
  4765. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4766. SeeAlso: AX=DE2Ah
  4767. ----------15DE29BX0000-----------------------
  4768. INT 15 U - DESQview v2.50+ - ???
  4769.     AX = DE29h
  4770.     BX = 0000h
  4771.     ???
  4772. Return: CF clear if successful
  4773.         ???
  4774.     CF set on error
  4775. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4776. ----------15DE29BX0001-----------------------
  4777. INT 15 U - DESQview v2.50+ - ???
  4778.     AX = DE29h
  4779.     BX = 0001h
  4780.     DX = segment of window handle
  4781. Return: CF clear if successful
  4782.         AX = ???
  4783.         DX = ???
  4784.     CF set on error
  4785. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4786. ----------15DE29BX0002-----------------------
  4787. INT 15 U - DESQview v2.50+ - ???
  4788.     AX = DE29h
  4789.     BX = 0002h
  4790.     DX = segment of window handle
  4791. Return: CF clear if successful
  4792.         AX = ???
  4793.         DX = ???
  4794.     CF set on error
  4795. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4796. ----------15DE29BX0003-----------------------
  4797. INT 15 U - DESQview v2.50+ - ???
  4798.     AX = DE29h
  4799.     BX = 0003h
  4800.     DX = segment of window handle
  4801. Return: CF clear if successful
  4802.         ???
  4803.     CF set on error
  4804. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4805. ----------15DE29BX0004-----------------------
  4806. INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
  4807.     AX = DE29h
  4808.     BX = 0004h
  4809.     CX = size of buffer in bytes
  4810.     DX = segment of window handle
  4811.     ES:DI -> buffer for display name
  4812. Return: CF clear if successful
  4813.         buffer filled with ASCIZ display name (truncated if necessary) or
  4814.           null string if no display
  4815.     CF set on error
  4816. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4817.     the name ":0" refers to the local display
  4818. ----------15DE29BX0005-----------------------
  4819. INT 15 U - DESQview v2.50+ - ???
  4820.     AX = DE29h
  4821.     BX = 0005h
  4822.     ???
  4823. Return: CF clear if successful
  4824.         ???
  4825.     CF set on error
  4826. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4827. ----------15DE2A-----------------------------
  4828. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  4829.     AX = DE2Ah
  4830.     BX = segment of handle for task to interrupt or 0000h for caller
  4831.     DX:CX -> interrupt routine
  4832.     BP,SI,DI,DS,ES as required by interrupt routine
  4833. Return: nothing
  4834. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4835.     this call is the same as AX=DE20h except that it will delay
  4836.       interrupting the specified task until after it has exited DOS
  4837. SeeAlso: AX=1021h,AX=DE20h
  4838. ----------15DE2B-----------------------------
  4839. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  4840.     AX = DE2Bh
  4841.     ES:DI -> starting object
  4842.         0000h:0000h for first object in list???
  4843. Return: AX = status
  4844.         0000h successful
  4845.         ES:DI -> next object of same type (window/non-window)
  4846.         0001h failed (ES:DI was not a valid handle)
  4847. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4848.     there are two separate lists, one for window/task objects and one
  4849.       for all other objects
  4850. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  4851. ----------15DE2CDX0100-----------------------
  4852. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  4853.     AX = DE2Ch
  4854.     DX = window information format version (0100h for DESQview 2.5x)
  4855.     BX = segment of window handle or 0000h for default
  4856.     ES:DI -> buffer for window information (see below)
  4857. Return: AX = status
  4858.         0000h successful
  4859. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4860. SeeAlso: AX=1000h,AX=DE01h,AX=DE2Bh
  4861.  
  4862. Format of window information:
  4863. Offset    Size    Description
  4864.  00h    BYTE    task flag: 00h window, 01h task
  4865.  01h    BYTE    process number if owner task
  4866.          00h if non-owner task
  4867.  02h    WORD    segment of owner's handle, 0000h if orphaned
  4868.  04h    WORD    mapping context
  4869.  06h    BYTE    status
  4870.          00h "Waiting" waiting for input
  4871.         01h "Idle" keyboard poll limit reached
  4872.         03h same as 01h
  4873.         04h "Pausing" INT 15/AX=1000h pause called
  4874.         04h direct: user did something to allow task switch
  4875.         05h "ModeChg" video mode about to be changed
  4876.         06h "ModeNtf" notify that video mode changed
  4877.         07h "MoniCh" requested change to other monitor
  4878.         08h "StartPgm" control relinquished to start new process
  4879.         09h "MgrCan" made window manager CANCEL command
  4880.         0Ah "Slicing" time slice expired
  4881.         0Bh "Exit DOS" notify on DOS calls
  4882.         0Ch "Enter DOS" process is re-entering DOS
  4883.         0Dh "Terminate" INT 21/AH=4Ch or task freed
  4884.         0Eh "BrkNxt" Control-Break pressed
  4885.         0Fh "MgrCol" keyboard focus taken away
  4886.         10h "PgmInt" interrupted by API call from another task
  4887.         11h "BldOpen" call to INT 15/AX=DE01h
  4888.  07h    BYTE    unused
  4889.  08h    WORD    status bits
  4890.          bit 0: DESQview process
  4891.         bit 1: process swapped out
  4892.         bit 2: process is resized direct window (suspended)
  4893.         bit 3: process suspended itself
  4894.         bit 4: user suspended process
  4895.         bit 5: process is being created
  4896.         bit 6: task is freeing another task
  4897.  0Ah    BYTE    01h if foreground-only window
  4898. ----------15DE2D-----------------------------
  4899. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  4900.     AX = DE2Dh
  4901.     CX = direction
  4902.         FFFFh set socket handler
  4903.         DX:BX -> FAR function for socket interface
  4904.             must be of the format described under INT 63"DESQview"
  4905.         other get socket handler
  4906.             Return: DX:BX -> socket handler
  4907. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4908.     the "set" subfunction is normally called only by SOCKET.DVR
  4909. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  4910. ----------15DE2E-----------------------------
  4911. INT 15 U - DESQview v2.50+ - SOCKET API
  4912.     AX = DE2Eh
  4913.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  4914. Return: CX = size of socket record in bytes
  4915.     DX:BX -> socket record which was used
  4916. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  4917.     socket records are allocated from common memory
  4918.     for Unix compatibility, each socket and connection on a socket is
  4919.       allocated a DOS file handle (referencing an SFT for NUL) which is
  4920.       used on various calls to specify which of possibly multiple
  4921.       connections is to be operated upon
  4922. SeeAlso: AX=DE2Dh,INT 63"DESQview"
  4923.  
  4924. Format of socket record:
  4925. Offset    Size    Description
  4926.  00h    WORD    signature F0ADh
  4927.  02h    WORD    function number
  4928.          0000h initialize socket???
  4929.         0001h "gethostname"
  4930.         0002h "ioctl" check for input
  4931.         0003h "sleep" delay for specified period
  4932.         0004h "htons" convert word to network (big-endian) byte order
  4933.         0005h "select"
  4934.         0006h "bsd_close"/"so_close" close socket
  4935.         0007h NOP
  4936.         0008h "connect" initiate connection on socket
  4937.         0009h "recv"/"recvfrom" read from socket
  4938.         000Ah "socket"
  4939.         000Bh ???
  4940.         000Ch "gethostbyname"
  4941.         000Dh "send"/"sendto" write to socket
  4942.         000Eh ??? (does something to all connections for process)
  4943.         000Fh "getpid" get process identifier
  4944.         0010h "gettimeofday"
  4945.         0011h "bind" assign name to socket
  4946.         0012h "listen" listen for connections on socket
  4947.         0013h "accept" accept connection on socket
  4948.         0014h connect to X server
  4949.         0015h "gethostbyaddr" get host information for an address
  4950.         0016h "getprotobyname"
  4951.         0017h "getprotobynumber"
  4952.         0018h "getservbyname"
  4953.         0019h "getservbyport"
  4954.         001Ah "getsockname" determine name bound to socket
  4955.         001Bh "getpeername" get name of connected peer
  4956.         001Ch "getsockopt"/"setsockopt"
  4957.         001Dh "so_exit"  close all sockets for calling process
  4958.         001Eh "issock" determine whether file handle references socket
  4959.         001Fh "so_attach" reattach previously detached socket
  4960.         0020h "so_detach" temporarily detach socket
  4961.         0021h get DESQview directory
  4962.         0022h "NewProc" start new application (see AX=102Ch)
  4963.         0023h "so_linkup"
  4964.         0024h canonicalize filename
  4965.          0025h indirect INT 15h call
  4966.         0026h Network Manager interface
  4967.         0027h "so_unlink"    close connection from "so_linkup"
  4968.         0028h "raisepriority"
  4969.         0029h "lowerpriority"
  4970.         002Ah ???
  4971.          FFFFh "NetExit" (appears to be a NOP)
  4972.  04h    WORD    returned error code (see below)
  4973.  06h    WORD    maximum message size??? (usually 0400h)
  4974.  08h    WORD    PSP segment to use or 0000h if socket not valid
  4975.  0Ah    WORD    scratch space (JFT size)
  4976.  0Ch    DWORD    scratch space (JFT address)
  4977.  10h    DWORD    mailbox handle (initialized by function 0000h)
  4978.  14h    DWORD    timer object handle (initialized by function 0000h)
  4979. ---function 0000h---
  4980.  18h    WORD    (return) ???
  4981. ---function 0001h---
  4982.  18h    WORD    (return) status???
  4983.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  4984.  9Ah    WORD    maximum length of hostname to return
  4985. ---function 0002h---
  4986.  18h    WORD    (return) status
  4987.  1Ah    WORD    socket's file handle
  4988.  1Ch    WORD    IOCTL function
  4989.          05h "FIONREAD" determine available input
  4990.         06h "FIONBIO" set blocking state of socket
  4991.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  4992.          (call, subfn 06h) 0000h blocking, nonzero nonblocking
  4993. ---function 0003h---
  4994.  18h  2 BYTEs    unused
  4995.  1Ah    WORD    delay time in seconds
  4996. ---function 0004h---
  4997.  18h    WORD    (return) result in network (big-endian) byte order
  4998.  1Ah    WORD    value to convert to network byte order
  4999. ---function 0005h---
  5000.  18h    WORD    (return) number of handles meeting the specified conditions???
  5001.  1Ah    WORD    number of file handles in each bitset???
  5002.  1Ch    DWORD    bitset of socket handles to check for readability???
  5003.  20h    DWORD    bitset of socket handles to check for writability???
  5004.  24h      DWORD    bitset of socket handles to check for errors???
  5005.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  5006.  2Ah    DWORD    ???
  5007.  2Eh    DWORD    ???
  5008. ---function 0006h---
  5009.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5010.  1Ah    WORD    socket's file handle
  5011. ---function 0008h---
  5012.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5013.  1Ah    WORD    socket's file handle
  5014.  1Ch    WORD    0001h if socket name specified, 0000h if not
  5015.  1Eh    WORD    length of socket name
  5016.  20h  N BYTEs    name of socket to which to connect
  5017. ---function 0009h---
  5018.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  5019.              closed, or FFFFh on error
  5020.  1Ah    WORD    socket's file handle
  5021.  1Ch    WORD    number of bytes to read
  5022.  1Eh    WORD    flags
  5023.  20h    WORD    0000h if no source address desired
  5024.          0001h if source address is to be stored (datagram sockets)
  5025.  22h    WORD    length of source address
  5026.  24h 110 BYTEs    source address
  5027.  92h 1K BYTEs    buffer for data to be read
  5028. ---function 000Ah---
  5029.  18h    WORD    (return) socket's file handle or FFFFh on error
  5030.  1Ah    WORD    address family (0001h,0002h)
  5031.  1Ch    WORD    socket type
  5032.  1Eh    WORD    protocol
  5033. ---function 000Bh---
  5034.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  5035.  1Ah    WORD    socket's file handle
  5036.  1Eh    WORD    (call) ???
  5037. ---function 000Ch---
  5038.  18h 128 BYTEs    buffer containing ASCIZ hostname
  5039.          special case if empty string or "unix"
  5040.  98h    ???    'struct hostent' ???
  5041.  A2h    ???    (return) ???
  5042. ---function 000Dh---
  5043.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  5044.  1Ah    WORD    socket's file handle
  5045.  1Ch    WORD    number of bytes to write
  5046.  1Eh    WORD    number of bytes to follow in subsequent writes???
  5047.  20h    WORD    flags
  5048.  22h    WORD    0000h if no destination specified, 0001h if destination present
  5049.  24h    WORD    ???
  5050.  26h    WORD    length of destination address
  5051.  28h 110 BYTEs    destination address
  5052.  96h 1K BYTEs    buffer containing data to be written
  5053. ---function 000Eh---
  5054.  no additional fields
  5055. ---function 000Fh---
  5056.  18h    DWORD    (return) DESQview task handle of calling process
  5057. ---function 0010h---
  5058.  18h    DWORD    (return) current time
  5059.  1Ch    DWORD    (return) ???
  5060. ---function 0011h---
  5061.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5062.  1Ah    WORD    socket's file handle
  5063.  1Ch    WORD    length of name
  5064.  1Eh  N BYTEs    buffer for socket name
  5065. ---function 0012h---
  5066.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5067.  1Ah    WORD    socket's file handle
  5068.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  5069. ---function 0013h---
  5070.  18h    WORD    (return) file handle for new connection or FFFFh on error
  5071.  1Ah    WORD    listen()ing socket's file handle
  5072.  1Ch    WORD    (call) length of buffer for connecting entity's address
  5073.          (return) actual length of address
  5074.  1Eh  N BYTEs    buffer for connecting entity's address
  5075. ---function 0014h---
  5076.  18h    WORD    (return) socket's file handle or FFFFh on error
  5077.  1Ah  4 BYTEs    (return) ???
  5078.  1Eh    WORD    (return) ???
  5079.  20h    WORD    (return) ???
  5080.  22h 256 BYTEs    ASCIZ X display name
  5081. 122h    ???
  5082. ---function 0015h---
  5083.  18h    WORD    (call) type of address??? (test for 0001h seen)
  5084.  1Ah    WORD    (call) length of buffer for host address
  5085.  1Ch 110 BYTEs    buffer containing host address
  5086.  8Ah    WORD    (return) offset of official host name???
  5087.  8Ch    WORD    (return) offset of alias list???
  5088.  8Eh    WORD    (return) address type???
  5089.  90h    WORD    (return) length of an address in bytes???
  5090.  92h    WORD    (return) offset of address???
  5091.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  5092. ---function 0016h---
  5093.  18h    ???    buffer for protocol name???
  5094.  98h    ???
  5095. ---function 0017h---
  5096.  18h    WORD    (call) protocol number???
  5097.  1Ah    WORD    (return) ??? or 0001h
  5098. ---function 0018h---
  5099.  18h 128 BYTEs    buffer containing ???
  5100.  98h 128 BYTEs    buffer containing ???
  5101. 118h    WORD    (return) ???
  5102. ---function 0019h---
  5103.  18h    WORD    length of name???
  5104.  1Ah 128 BYTEs    buffer for name???
  5105.  9Ah    WORD    (return) ???
  5106. ---function 001Ah---
  5107.  18h    WORD    (return) 0000h if successful, FFFFh on error
  5108.  1Ah    WORD    socket's file handle
  5109.  1Ch    WORD    (call) length of buffer for socket name
  5110.          (return) actual length of socket name
  5111.  1Eh  N BYTEs    buffer for socket name
  5112. ---function 001Bh---
  5113.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5114.  1Ah    WORD    socket's file handle
  5115.  1Ch    WORD    (call) size of buffer for name
  5116.          (return) actual size of name
  5117.  1Eh  N BYTEs    buffer for peer's name
  5118. ---function 001Ch---
  5119.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5120.  1Ah    WORD    direction: 0000h to get, 0001h to set
  5121.  1Ch    WORD    socket's file handle
  5122.  1Eh    WORD    option level
  5123.  20h    WORD    option name
  5124.  22h    WORD    (call) length of buffer for option value
  5125.          (return) actual length of option value
  5126.  24h  N BYTEs    buffer for option value
  5127. ---function 001Dh---
  5128.  no additional fields
  5129. ---function 001Eh---
  5130.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  5131.  1Ah    WORD    file handle which may or may not be a socket
  5132. ---function 001Fh---
  5133.  18h    WORD    (return) file handle or FFFFh on error
  5134.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  5135.              previously detached socket
  5136. ---function 0020h---
  5137.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  5138.  1Ah    WORD    socket's file handle
  5139.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  5140.              the file handle
  5141. ---function 0021h---
  5142.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  5143. ---function 0022h---
  5144.  18h    DWORD    (return) task handle of new application
  5145.  1Ch    WORD    size of .DVP data
  5146.  1Eh 129 BYTEs    ASCIZ ???
  5147.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  5148. ---function 0023h---
  5149.  18h    WORD    (return) ??? or FFFFh on error
  5150.  1Ah    WORD    socket's file handle???
  5151. ---function 0024h---
  5152.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  5153.              0000h if successful
  5154.  1Ah 129 BYTEs    ASCIZ filename/pathname
  5155. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  5156. ---function 0025h---
  5157.  18h    WORD    value of AX
  5158.  1Ah    WORD    value of BX
  5159.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  5160.          (call) number of stack parameters if AH value is 12h
  5161.         (return) returned CX for calls other than INT 15/AH=12h
  5162.  1Eh    WORD    value of DX
  5163.  20h    WORD    value of DI
  5164.  22h    WORD    value of SI
  5165.  24h    WORD    value of DS
  5166.  26h    WORD    value of ES
  5167.  28h    WORD    (return) value of FLAGS after call
  5168.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  5169.          (return) stack results from INT 15/AH=12h call
  5170. ---function 0026h---
  5171.  18h    WORD    (call) subfunction
  5172.              0004h "so_exit"???
  5173.              0005h "gethostbyname"
  5174.             0006h "gethostname"
  5175.             0009h "socket"
  5176.             000Dh "gethostbyaddr"
  5177.             000Fh "getprotobyname"
  5178.             0010h get protocol name for protocol number
  5179.             0011h "getservbyname"
  5180.             0012h "getservbyport"
  5181.             0013h "getsockname"???
  5182.             0016h ???
  5183.             0017h kill Network Manager
  5184.             0018h "getpeername"???
  5185.             0019h ??? (called by socket function 0000h)
  5186.             001Ah ???
  5187.             001Bh "so_linkup"
  5188.             001Dh get network services
  5189.              001Fh "getpwuid"
  5190.             0020h "getpwnam"
  5191.             0021h "getpwvar"
  5192.             0022h "crypt"
  5193.             0023h "so_unlink"
  5194.             0024h "getlogin"
  5195.             0028h "sethostent"
  5196.             0029h "gethostent"
  5197.             002Ah "soaddhost"
  5198.             002Bh "soupdatehost"
  5199.             002Ch "sodeletehost"
  5200.             002Dh "setservent"
  5201.             002Eh "getservent"
  5202.             002Fh "setpwent"
  5203.             0030h "getpwent"
  5204.             0031h ???
  5205.             0032h ???
  5206.             0033h ???
  5207.             0034h get IP network number
  5208.             0035h ??? (pops up Network Manager window)
  5209.             0037h ???
  5210.             0038h get machine name and IP address
  5211.             0039h ???
  5212.          (return) status???
  5213.  1Ah    WORD    (call) size of parameter data
  5214.          (return) size of returned data
  5215.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  5216.          (return) result data (see below)
  5217. ---function 0027h---
  5218.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5219.  1Ah    WORD    socket's file handle
  5220. ---functions 0028h,0029h---
  5221.  18h    WORD    (call) file handle for which to set priority low/high
  5222.              FFFFh to change calling task's priority
  5223. ---function 002Ah---
  5224.  no additional fields
  5225.  
  5226. Format of Function 0026h/Subfunction 000Fh data:
  5227. Offset    Size    Description
  5228.  00h  8 BYTEs    (return) ???
  5229.  
  5230. Format of Function 0026h/Subfunction 0010h data:
  5231. Offset    Size    Description
  5232.  00h  2 BYTEs    (return) ???
  5233.  02h    WORD    (return) protocol number
  5234.  04h    WORD    (call) protocol number for which to get name
  5235.  06h    WORD    (return) ???
  5236.  08h    var    (return) ASCIZ protocol name
  5237.  N    var    (return) ASCIZ protocol name
  5238.  
  5239. Format of Function 0026h/Subfunction 0011h data:
  5240. Offset    Size    Description
  5241.  00h  8 BYTEs    ???
  5242.  08h    var    (return) ASCIZ protocol name
  5243.     var    (return) ASCIZ ??? name
  5244.     var    (return) ASCIZ ??? name
  5245.  
  5246. Format of Function 0026h/Subfunction 0012h data:
  5247. Offset    Size    Description
  5248.  00h  8 BYTEs    (return) ???
  5249.  
  5250. Format of Function 0026h/Subfunction 0013h data:
  5251. Offset    Size    Description
  5252.  00h 116 BYTEs    (return) ???
  5253.  
  5254. Format of Function 0026h/Subfunction 0016h data:
  5255. Offset    Size    Description
  5256.  00h  4 BYTEs    (return) ???
  5257.  
  5258. Format of Function 0026h/Subfunction 0018h data:
  5259. Offset    Size    Description
  5260.  00h 116 BYTEs    (return) ???
  5261.  
  5262. Format of Function 0026h/Subfunction 0019h data:
  5263. Offset    Size    Description
  5264.  00h  4 BYTEs    (return) ???
  5265.  04h    DWORD    (return) task handle of ???
  5266.  
  5267. Format of Function 0026h/Subfunction 001Ah data:
  5268. Offset    Size    Description
  5269.  00h 38 BYTEs    (return) ???
  5270.  
  5271. Format of Function 0026h/Subfunction 001Bh data:
  5272. Offset    Size    Description
  5273.  00h 10 BYTEs    (return) ???
  5274.  
  5275. Format of Function 0026h/Subfunction 001Dh return data [array]:
  5276. Offset    Size    Description
  5277.  00h      WORD    ??? or FFFFh if end of array
  5278.  02h  7 BYTEs    ???
  5279.  09h 27 BYTEs    ASCIZ name of service
  5280.  
  5281. Format of Function 0026h/Subfunction 0024h return data:
  5282. Offset    Size    Description
  5283.  00h    var    ASCIZ username
  5284.  
  5285. Format of Function 0026h/Subfunction 0030h data:
  5286. Offset    Size    Description
  5287.  00h    WORD    (call) UID or 0000h for current user
  5288.          (return) ???
  5289.  02h    WORD    (return) UID
  5290.  04h  6 BYTEs    (return) ???
  5291.  0Ah    var    (return) ASCIZ username
  5292.      var    (return) ASCIZ encrypted password
  5293.     var    (return) ASCIZ initial ("home") directory
  5294.  
  5295. Format of Function 0026h/Subfunction 0034h data:
  5296. Offset    Size    Description
  5297.  00h  1-3 BYTEs    IP network number of caller's machine (low byte first)
  5298.  
  5299. Format of Function 0026h/Subfunction 0038h return data:
  5300. Offset    Size    Description
  5301.  00h    BYTE    ???
  5302.  01h  4 BYTEs    IP address
  5303.  05h    var    ASCIZ machine name
  5304.      ???
  5305.  
  5306. Values for error code:
  5307.  0000h successful
  5308.  0009h "BADF" bad file handle
  5309.  000Ch "ENOMEM" out of memory
  5310.  000Eh "EFAULT" bad address
  5311.  0016h "EINVAL" invalid argument
  5312.  0018h "EMFILE" too many open files
  5313.  0020h "EPIPE" ??? broken pipe
  5314.  0023h "EWOULDBLOCK" operation cannot be completed at this time
  5315.  0024h "EINPROGRESS" operation now in progress
  5316.  0026h "ENOTSOCK" socket invalid
  5317.  0028h "EMSGSIZE" message too long to send atomically
  5318.  002Ch "ESOCKTNOSUPPORT" socket type not supported
  5319.  002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
  5320.  0031h "EDOM" argument too large
  5321.  0038h "EISCONN" socket is already connected
  5322.  0039h "ENOTCONN" socket is not connected
  5323.  
  5324. Format of Socket Context Record:
  5325. Offset    Size    Description
  5326.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  5327.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  5328.  06h    WORD    PSP segment of owner or 0000h
  5329.  08h    WORD    mapping context of owning window
  5330.  0Ah  2 BYTEs    ???
  5331.  0Ch    WORD    address family
  5332.  0Eh     WORD    socket type
  5333.  10h    WORD    protocol
  5334.  12h    WORD    socket state
  5335.          0001h created
  5336.         0002h bound
  5337.          0003h listening???
  5338.          0005h connected
  5339.  14h    DWORD    timer object handle
  5340.  18h    DWORD    object handle (mailbox???)
  5341.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  5342.  20h    DWORD    pointer to ??? or 0000h
  5343.  24h  6 BYTEs    ???
  5344.  2Ah    WORD    file handle for socket or FFFFh
  5345.  2Ch  2 BYTEs    ???
  5346.  2Eh    WORD    nonzero if socket nonblocking
  5347. ---network connections only---
  5348.  30h  2 BYTEs    ???
  5349.  32h    WORD    ???
  5350.  34h  4 BYTEs    IP address of remote (big-endian)
  5351.  38h  6 BYTEs    ???
  5352. ----------15DE2F-----------------------------
  5353. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  5354.     AX = DE2Fh
  5355. Return: BX = status
  5356.         0001h keyboard focus has been given to a direct window since the
  5357.             last call
  5358.         0000h if not
  5359. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5360.     Quarterdeck states that this call will not be available under future
  5361.       versions of DESQview Classic
  5362. ----------15DE30-----------------------------
  5363. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  5364.     AX = DE30h
  5365. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  5366. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5367.     you must first check the DESQview version to verify that it is 2.50 or
  5368.       greater
  5369. SeeAlso: INT 21/AH=2Bh/CX=4445h
  5370. ----------15E00F-----------------------------
  5371. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  5372.     AX = E00Fh
  5373.     ES:BX -> start of 2nd processor's execution
  5374. Return: AL = 0Fh successful
  5375.        = 00h failure    
  5376. SeeAlso: AX=E10Eh,AX=E200h
  5377. ----------15E10E-----------------------------
  5378. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  5379.     AX = E10Eh
  5380.     ES:BX -> start of 2nd processor's execution
  5381. Return: AL = 0Fh successful (halted)
  5382.        = 00h failure (not halted)
  5383. SeeAlso: AX=E00Fh,AX=E200h
  5384. ----------15E200-----------------------------
  5385. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  5386.     AX = E200h
  5387. Return: AX = 8000h if 2nd processor available
  5388. SeeAlso: AX=E00Fh,AX=E10Eh
  5389. ----------15E4-------------------------------
  5390. INT 15 - ???
  5391.     AH = E4h
  5392.     AL = subfunction
  5393.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  5394.     DL = ???
  5395. Return: ???
  5396. ----------15F200CX454D-----------------------
  5397. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  5398.     AX = F200h
  5399.     CX = 454Dh
  5400. Return: CF clear if hardware already initialised
  5401.         BX = upper RAM areas in use
  5402.         bit 0: C000-C3FF
  5403.         bit 1: C400-C7FF
  5404.         ...
  5405.         bit 11: EC00-EFFF
  5406.     CF set if hardware not initialised yet
  5407. ----------1600-------------------------------
  5408. INT 16 - KEYBOARD - GET KEYSTROKE
  5409.     AH = 00h
  5410. Return: AH = BIOS scan code
  5411.     AL = ASCII character
  5412. Notes:    on extended keyboards, this function discards any extended keystrokes,
  5413.       returning only when a non-extended keystroke is available
  5414.     the BIOS scan code is usually, but not always, the same as the hardware
  5415.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  5416.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  5417.       differs for shifted special keys.
  5418. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  5419. ----------1601-------------------------------
  5420. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  5421.     AH = 01h
  5422. Return: ZF set if no keystroke available
  5423.     ZF clear if keystroke available
  5424.         AH = BIOS scan code
  5425.         AL = ASCII character
  5426. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  5427.       however, any extended keystrokes which are not compatible with 83/84-
  5428.       key keyboards are removed in the process of checking whether a
  5429.       non-extended keystroke is available
  5430. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  5431. ----------1602-------------------------------
  5432. INT 16 - KEYBOARD - GET SHIFT FLAGS
  5433.     AH = 02h
  5434. Return: AL = shift flags
  5435.         bit 7: Insert active
  5436.         6: CapsLock active
  5437.         5: NumLock active
  5438.         4: ScrollLock active
  5439.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  5440.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  5441.         1: left shift key pressed
  5442.         0: right shift key pressed
  5443. SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
  5444. ----------1603-------------------------------
  5445. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  5446.     AH = 03h
  5447.     AL = subfunction
  5448.         00h set default delay and rate (PCjr and some PS/2)
  5449.         01h increase delay before repeat (PCjr)
  5450.         02h decrease repeat rate by factor of 2 (PCjr)
  5451.         03h increase delay and decrease repeat rate (PCjr)
  5452.         04h turn off typematic repeat (PCjr and some PS/2)
  5453.         05h set repeat rate and delay (AT,PS)
  5454.         BH = delay value (00h = 250ms to 03h = 1000ms)
  5455.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  5456.         06h get current typematic rate and delay (newer PS/2s)
  5457.         Return: BL = repeat rate (see above)
  5458.             BH = delay (see above)
  5459. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  5460.       supported
  5461. SeeAlso: INT 16/AH=09h
  5462. ----------1604-------------------------------
  5463. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  5464.     AH = 04h
  5465.     AL = keyclick state
  5466.         00h off
  5467.         01h on
  5468. SeeAlso: AH=03h
  5469. ----------1605-------------------------------
  5470. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  5471.     AH = 05h
  5472.     CH = scan code
  5473.     CL = ASCII character
  5474. Return: AL = 00h if successful
  5475.          01h if keyboard buffer full
  5476. Note:    under DESQview, the following "keystrokes" invoke the following
  5477.       actions when they are read from the keyboard buffer:
  5478.         38FBh or FB00h    switch to next window (only if main menu
  5479.                 popped up)
  5480.         38FCh or FC00h    pop up DESQview main menu
  5481.         38FEh or FE00h    close the current window
  5482.         38FFh or FF00h    pop up DESQview learn menu
  5483. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  5484. ----------1605-------------------------------
  5485. INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
  5486.     AH = 05h
  5487.     AL = function
  5488.         01h set keyboard layout to French
  5489.         02h set keyboard layout to German
  5490.         03h set keyboard layout to Italian
  5491.         04h set keyboard layout to Spanish
  5492.         05h set keyboard layout to UK
  5493.         80h check if function supported
  5494.             Return: AL <> 80h if supported
  5495. Return: ???
  5496. Note:    called by DOS 3.2 KEYBxx.COM
  5497. SeeAlso: AH=92h,AH=A2h
  5498. ----------1609-------------------------------
  5499. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  5500.     AH = 09h
  5501. Return: AL = keyboard functions supported
  5502.         bit 7: reserved
  5503.         bit 6: 
  5504.         bit 5:
  5505.         bit 4: INT 16/AH=0Ah supported
  5506.         bit 3: INT 16/AX=0306h supported
  5507.         bit 2: INT 16/AX=0305h supported
  5508.         bit 1: INT 16/AX=0304h supported
  5509.         bit 0: INT 16/AX=0300h supported
  5510. Note:    this function is only available if bit 6 of the second feature byte
  5511.       returned by INT 15/AH=C0h is set
  5512. SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
  5513. ----------160A-------------------------------
  5514. INT 16 - KEYBOARD - GET KEYBOARD ID
  5515.     AH = 0Ah
  5516. Return: BX = keyboard ID
  5517. Note:    check return value from AH=09h to determine whether this function is
  5518.       supported
  5519. SeeAlso: AH=09h
  5520. ----------1610-------------------------------
  5521. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  5522.     AH = 10h
  5523. Return: AH = BIOS scan code
  5524.     AL = ASCII character
  5525. Notes:    if no keystroke is available, this function waits until one is placed
  5526.       in the keyboard buffer
  5527.     the BIOS scan code is usually, but not always, the same as the hardware
  5528.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  5529.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  5530.       differs for shifted special keys.
  5531.     unlike AH=00h, this function does not discard extended keystrokes
  5532. SeeAlso: AH=00h,AH=11h,AH=20h
  5533. ----------1611-------------------------------
  5534. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  5535.     AH = 11h
  5536. Return: ZF set if no keystroke available
  5537.     ZF clear if keystroke available
  5538.         AH = BIOS scan code
  5539.         AL = ASCII character
  5540. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  5541.     unlike AH=01h, this function does not discard extended keystrokes
  5542. SeeAlso: AH=01h,AH=10h,AH=21h
  5543. ----------1612-------------------------------
  5544. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  5545.     AH = 12h
  5546. Return: AL = shift flags 1 (same as returned by AH=02h)
  5547.         bit 7: Insert active
  5548.         6: CapsLock active
  5549.         5: NumLock active
  5550.         4: ScrollLock active
  5551.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  5552.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  5553.         1: left shift key pressed
  5554.         0: right shift key pressed
  5555.     AH = shift flags 2
  5556.         bit 7: SysRq key pressed
  5557.         6: CapsLock pressed
  5558.         5: NumLock pressed
  5559.         4: ScrollLock pressed
  5560.         3: right Alt key pressed
  5561.         2: right Ctrl key pressed
  5562.         1: left Alt key pressed
  5563.         0: left Ctrl key pressed
  5564. Notes:    AL bit 3 set only for left Alt key on many machines
  5565.     AH bits 7 through 4 always clear on a Compaq SLT/286
  5566. SeeAlso: AH=02h,AH=22h,AH=51h
  5567. ----------1620-------------------------------
  5568. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
  5569.     AH = 20h
  5570. Return: ??? see AH=10h
  5571. Note:    use AH=09h to determine whether this function is supported
  5572. SeeAlso: AH=00h,AH=10h,AH=21h
  5573. ----------1621-------------------------------
  5574. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
  5575.     AH = 21h
  5576. Return: ??? see AH=11h
  5577. Note:    use AH=09h to determine whether this function is supported
  5578. SeeAlso: AH=01h,AH=11h,AH=20h
  5579. ----------1622-------------------------------
  5580. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
  5581.     AH = 22h
  5582. Return: ??? see AH=12h
  5583. Note:    use AH=09h to determine whether this function is supported
  5584. SeeAlso: AH=02h,AH=12h
  5585. ----------164252-----------------------------
  5586. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  5587.     AX = 4252h
  5588. Return: AX = 5242h if installed
  5589. Note:    TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  5590.       PC Magazine utility CAPTURE written by Tom Kihlken
  5591. SeeAlso: AX=4253h,AX=4254h
  5592. ----------164253-----------------------------
  5593. INT 16 - TEXTCAP 2.0 - UNINSTALL
  5594.     AX = 4253h
  5595. Return: AX = segment of resident code
  5596. Notes:    the uninstall code does not check whether interrupt vectors have been
  5597.       chained by other programs
  5598.     the caller must free the main memory block (using the returned segment)
  5599. SeeAlso: AX=4252h,AX=4254h
  5600. ----------164254-----------------------------
  5601. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  5602.     AX = 4254h
  5603. Return: AX = status
  5604.         4254h if screen dump will be written as soon as disk becomes idle
  5605.         5442h if screen dump written
  5606. SeeAlso: AX=4252h,AX=4253h
  5607. ----------164500-----------------------------
  5608. INT 16 - Shamrock Software EMAIL - GET STATUS
  5609.     AX = 4500h
  5610.     DL = port number (01h = COM1)
  5611.     ES:BX -> 13-byte buffer for ASCIZ name
  5612. Return: AX = 4D00h if EMAIL installed on specified port
  5613.         ES:BX -> "" if no connection
  5614.           -> "*" if connection but caller has not identified name
  5615.           -> name otherwise
  5616.         CX = version (CH = major, CL = minor)
  5617.         DL = privilege level of user (00h = guest)
  5618.         DH = chosen language (00h German, 01h English)
  5619. SeeAlso: AX=4501h,AX=4502h
  5620. ----------164501-----------------------------
  5621. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  5622.     AX = 4501h
  5623.     DL = port number (01h = COM1)
  5624. Return: AX = 4D00h if EMAIL installed on specified port
  5625.         BX = maximum connect time in clock ticks
  5626.         CX = maximum connect time for guests (without name) in clock ticks
  5627.         DX = elapsed connect time of current user in clock ticks
  5628. SeeAlso: AX=4500h    
  5629. ----------164502-----------------------------
  5630. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  5631.     AX = 4502h
  5632.     DL = port number (01h = COM1)
  5633. Return: AX = 4D00h if EMAIL installed on specified port
  5634.         BL = current value of serial port's Line Control Register
  5635.         BH = flags
  5636.         bit 0: ISO code
  5637.             1: pause
  5638.             2: linefeed
  5639.             3: ANSI sequences
  5640.         CX = selected country code (33 = France, 49 = Germany, etc)
  5641.         DX = baudrate divisor (115200/DX = baudrate)
  5642. SeeAlso: AX=4500h
  5643. ----------164503-----------------------------
  5644. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  5645.     AX = 4503h
  5646.     DL = port number (01h = COM1)
  5647.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  5648.     ES:BX -> ASCIZ string with new user command-word
  5649. Return: AX = 4D00h if EMAIL installed on specified port
  5650. Notes:    a single user command (consisting of only uppercase letters and digits)
  5651.       may be defined, and remains valid until it is overwritten or the
  5652.       EMAIL program terminates; the user command must be activated by
  5653.       calling AX=4504h at least once.
  5654.     an existing command word may be redefined with this function
  5655. SeeAlso: AX=4504h,AX=4505h
  5656. ----------164504-----------------------------
  5657. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  5658.     AX = 4504h
  5659.     DL = port number (01h = COM1)
  5660.     ES:BX -> 80-byte buffer for ASCIZ user input line
  5661. Return: AX = 4D00h if EMAIL installed on specified port
  5662.         DL = flags
  5663.         bit 0: user function supported (always set)
  5664.             1: user entered user-function command word
  5665.         if DL bit 1 set,
  5666.         ES:BX buffer contains line entered by user which begins with
  5667.             the defined command word and has been converted to all
  5668.             caps
  5669. Note:    caller must process the returned commandline and invoke AX=4505h
  5670.       within five seconds with the result of that processing
  5671. SeeAlso: AX=4503h,AX=4505h
  5672. ----------164505-----------------------------
  5673. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  5674.     AX = 4505h
  5675.     DL = port number (01h = COM1)
  5676.     DH = error flag
  5677.         bit 3: set on error
  5678.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  5679. Return: AH = 4Dh if EMAIL installed on specified port
  5680.     AL = status
  5681.         00h successful
  5682.         02h unable to perform function (timeout, prev call not complete)
  5683.         other error
  5684. Notes:    if the error flag in DH is set, the string is not sent and an error
  5685.       message is generated instead; if this function is not called within
  5686.       five seconds of AX=4504h, EMAIL automatically generates an error
  5687.       message
  5688.     the string is copied into an internal buffer, allowing this function's
  5689.       caller to continue immediately
  5690. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  5691. ----------164506-----------------------------
  5692. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  5693.     AX = 4506h
  5694.     DL = port number (01h = COM1)
  5695.     ES:BX -> 13-byte buffer for ASCIZ filename
  5696. Return: AX = 4D00h if EMAIL installed on specified port
  5697.         DH = Xmodem status
  5698.         00h no XGET command given
  5699.         01h XGET in progress
  5700.         02h XGET completed successfully
  5701.         ES:BX buffer filled with last filename given to XGET command
  5702.         (without path)
  5703. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  5704.       return DH=00h
  5705. SeeAlso: AX=4500h,INT 17/AX=2408h
  5706. ----------165000-----------------------------
  5707. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  5708.     AX = 5000h
  5709.     BX = country code
  5710.         0001h USA (English), 0051h Japan
  5711. Return: AL = status
  5712.         00h successful
  5713.         01h bad country code
  5714.         02h other error
  5715. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  5716. ----------165001-----------------------------
  5717. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  5718.     AX = 5001h
  5719. Return: AL = status
  5720.         00h successful
  5721.             BX = country code
  5722.         02h error
  5723. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  5724. ----------1651-------------------------------
  5725. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  5726.     AH = 51h
  5727. Return: AL = standard shift key states (see AH=12h)
  5728.     AH = Kana lock (00h off, 01h on)
  5729. SeeAlso: AH=02h,AH=12h,AH=22h
  5730. ----------165500-----------------------------
  5731. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  5732.     AX = 5500h
  5733. Return: AX = 4D53h ('MS') if keyboard TSR present
  5734. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  5735.       that are present through this call.
  5736.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  5737.       handlers; otherwise it assumes that the TSR will handle the keyboard
  5738. SeeAlso: INT 1A/AX=3601h
  5739. ----------1655FF-----------------------------
  5740. INT 16 - Swap Utilities - ???
  5741.     AX = 55FFh
  5742.     BX >= 0004h
  5743.     CX = function
  5744.         0000h set ??? flag
  5745.         other clear ??? flag
  5746. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
  5747. ----------166969BX6968-----------------------
  5748. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  5749.     AX = 6969h
  5750.     BX = 6968h
  5751. Return: resident code unhooked, but not removed from memory
  5752. ----------166969BX6969-----------------------
  5753. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  5754.     AX = 6969h
  5755.     BX = 6969h
  5756.     DX = 0000h
  5757. Return: DX nonzero if installed
  5758.         BX = CS of resident code
  5759.         DX = PSP segment of resident code
  5760.         DS:SI -> ASCIZ identification string "CPoint Talk"
  5761. ----------166F00BX0000-----------------------
  5762. INT 16 - HP Vectra - ??? - INSTALLATION CHECK
  5763.     AX = 6F00h
  5764.     BX = 0000h
  5765. Return: BX = 4850h if present
  5766. Note:    called by recent MS Mouse drivers
  5767. ----------166F0D-----------------------------
  5768. INT 16 - HP Vectra - ???
  5769.     AX = 6F0Dh
  5770.     ???
  5771. Return: ???
  5772. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  5773. SeeAlso: AX=6F0Eh
  5774. ----------166F0E-----------------------------
  5775. INT 16 - HP Vectra - ???
  5776.     AX = 6F0Eh
  5777.     ???
  5778. Return: ???
  5779. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  5780. SeeAlso: AX=6F0Dh
  5781. ----------1670-------------------------------
  5782. INT 16 - FAKEY.COM - INSTALLATION CHECK
  5783.     AH = 70h
  5784. Return: AX = 1954h if installed
  5785. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5786. ----------1671-------------------------------
  5787. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  5788.     AH = 71h
  5789.     CX = number of keystrokes
  5790.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  5791. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5792. SeeAlso: AH=05h,AH=72h
  5793. ----------1672-------------------------------
  5794. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  5795.     AH = 72h
  5796. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5797. SeeAlso: AH=71h
  5798. ----------1673-------------------------------
  5799. INT 16 - FAKEY.COM - PLAY TONES
  5800.     AH = 73h
  5801.     CX = number of tones to play
  5802.     DS:SI -> array of tones (see below)
  5803. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5804. SeeAlso: INT 15/AX=1019h
  5805.  
  5806. Format of tone array entries:
  5807. Offset    Size    Description
  5808.  00h    WORD    divisor for timer channel 2
  5809.  02h    WORD    duration in clock ticks
  5810. ----------1675-------------------------------
  5811. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  5812.     AH = 75h
  5813.     AL = number of ticks between checks for new screen changes
  5814. ----------1676-------------------------------
  5815. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  5816.     AH = 76h
  5817.     AL = error checking type
  5818.         00h none
  5819.         01h fast
  5820.         02h slow
  5821. ----------1677-------------------------------
  5822. INT 16 - pcANYWHERE III - LOG OFF
  5823.     AH = 77h
  5824.     AL = mode
  5825.         00h wait for another call
  5826.         01h leave in Memory Resident Mode
  5827.         02h leave in Automatic Mode
  5828.         FFh leave in current operating mode
  5829. ----------167761-----------------------------
  5830. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  5831.     AX = 7761h ('wa')
  5832. Return: AX = 5741h ('WA') if installed
  5833. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  5834. SeeAlso: INT 21/AX=7761h
  5835. ----------167788BX7789-----------------------
  5836. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  5837.     AX = 7788h
  5838.     BX = 7789h
  5839.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  5840. Return: AX = 7789h if installed and signature correct
  5841.     BX = 7788h
  5842.     SI destroyed          
  5843. ----------1679-------------------------------
  5844. INT 16 - pcANYWHERE III - CHECK STATUS
  5845.     AH = 79h
  5846. Return: AX = status
  5847.         FFFFh if resident and active
  5848.         FFFEh if resident but not active
  5849.         FFFDh if in Memory Resident mode
  5850.         FFFCh if in Automatic mode
  5851.         other value if not resident
  5852. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  5853. ----------167A-------------------------------
  5854. INT 16 - pcANYWHERE III - CANCEL SESSION
  5855.     AH = 7Ah
  5856. ----------167B00-----------------------------
  5857. INT 16 - pcANYWHERE III - SUSPEND
  5858.     AX = 7B00h
  5859. SeeAlso: AH=79h,AX=7B01h
  5860. ----------167B01-----------------------------
  5861. INT 16 - pcANYWHERE III - RESUME
  5862.     AX = 7B01h
  5863. SeeAlso: AH=79h,AX=7B00h
  5864. ----------167C-------------------------------
  5865. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  5866.     AH = 7Ch
  5867. Return: AH = port number
  5868.     AL = baud rate
  5869.         00h = 50 baud
  5870.         01h = 75 baud
  5871.         02h = 110 baud
  5872.         03h = 134.5 baud
  5873.         04h = 150 baud
  5874.         05h = 300 baud
  5875.         06h = 600 baud
  5876.         07h = 1200 baud
  5877.         08h = 1800 baud
  5878.         09h = 2000 baud
  5879.         0Ah = 2400 baud
  5880.         0Bh = 4800 baud
  5881.         0Ch = 7200 baud
  5882.         0Dh = 9600 baud
  5883.         0Eh = 19200 baud
  5884. ----------167D-------------------------------
  5885. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  5886.     AH = 7Dh
  5887.     AL = subfunction
  5888.         00h set terminal parameters
  5889.         01h get terminal parameters
  5890.         02h get configuration header and terminal parameters
  5891.     DS:CX -> terminal parameter block
  5892. ----------167E-------------------------------
  5893. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  5894.     AH = 7Eh
  5895.     AL = subfunction
  5896.         01h port input status
  5897.         Return AX = 0 if no characer ready,
  5898.                AX = 1 if character ready
  5899.         02h port input character
  5900.         Return AL = received character
  5901.         03h port output character in CX
  5902.         11h hang up phone
  5903. ----------167F-------------------------------
  5904. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  5905.     AH = 7Fh
  5906.     AL = subfunction
  5907.         00h enable remote keyboard only
  5908.         01h enable host keyboard only
  5909.         02h enable both keyboards
  5910.         08h display top 24 lines
  5911.         09h display bottom 24 lines
  5912.         10h Hayes modem
  5913.         11h other modem
  5914.         12h direct connect
  5915. ----------1680-------------------------------
  5916. INT 16 - MAKEY.COM - INSTALLATION CHECK
  5917.     AH = 80h
  5918. Return: AX = 1954h if installed
  5919. Note:    MAKEY is a utility by System Enhancement Associates
  5920. ----------168765BX4321-----------------------
  5921. INT 16 - AT.COM version 8/26/87 - API
  5922.     AX = 8765h
  5923.     BX = 4321h
  5924.     CX = ??? or FFFFh
  5925.     if CX = FFFFh
  5926.         DX = number of event to remove or FFFFh
  5927. Return: ES:BX -> event record array
  5928. Note:    AT.COM is a resident scheduler by Bill Frolik
  5929.  
  5930. Format of event record:
  5931. Offset    Size    Description
  5932.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  5933.  01h    BYTE    day of date on which to trigger
  5934.  02h    BYTE    month of date on which to trigger
  5935.  03h    BYTE    trigger time, minute
  5936.  04h    BYTE    trigger time, hour
  5937.  05h    WORD    offset of command to be executed
  5938. ----------1692-------------------------------
  5939. INT 16 - ???
  5940.     AH = 92h
  5941. Return: AH <= 80h if ???
  5942. Note:    called by DOS 3.2 KEYBxx.COM and DOS 5.0 KEYB.COM
  5943. SeeAlso: AH=05h"PCjr",AH=A2h
  5944. ----------1699-------------------------------
  5945. INT 16 - SCOUT v5.4 - GET ???
  5946.     AH = 99h
  5947. Return: AX = ABCDh
  5948.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  5949. Note:    Scout is a memory-resident file manager by New-Ware
  5950. SeeAlso: AH=9Eh
  5951. ----------169E-------------------------------
  5952. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  5953.     AH = 9Eh
  5954. Return: AX = ABCDh if installed
  5955. Note:    Scout is a memory-resident file manager by New-Ware
  5956. SeeAlso: AH=99h
  5957. ----------16A2-------------------------------
  5958. INT 16 - ???
  5959.     AH = A2h
  5960. Return: AH <= 80h if ???
  5961. Note:    this function is called by DOS 5.0 KEYB.COM
  5962. SeeAlso: AH=92h
  5963. ----------16AA-------------------------------
  5964. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  5965.     AH = AAh
  5966.     Various registers set up by high level language.
  5967. Return: Graphics performed
  5968. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  5969.       Modula 2 and others from DataBiten in Sweden. The library is
  5970.       installed as a memory resident driver.
  5971. ----------16CA--BX736B-----------------------
  5972. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  5973.     AH = CAh
  5974.     BX = 736Bh ("sk")
  5975.     CX = 736Bh
  5976.     AL = function
  5977.         00h installation check
  5978.             Return: DX = words available in keyboard buffer
  5979.         01h place keystroke in buffer
  5980.             DX = keystroke (DH = scan code, DL = ASCII character)
  5981.         Return: DX = words available in keyboard buffer
  5982.                 FFFFh on error
  5983.         02h flush STACKEY and BIOS keyboard buffers
  5984. Return: AX = CAFFh if installed
  5985.         BX = segment of resident code
  5986.         CX = STACKEY version (CH = major, CL = minor)
  5987. Note:    STACKEY is a shareware keyboard-input faking TSR
  5988. ----------16CA00BX6570-----------------------
  5989. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  5990.     AX = CA00h
  5991.     BX = 6570h ("ep")
  5992.     CX = 6570h
  5993. Return: AX = CAFFh if installed
  5994.         BX = segment of resident code
  5995.         CX = ??? (0090h)
  5996. Note:    EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  5997.       permanent across mode switches
  5998. SeeAlso: AX=CA00h/BX=7670h
  5999. ----------16CA00BX7670-----------------------
  6000. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  6001.     AX = CA00h
  6002.     BX = 7670h ("vp")
  6003.     CX = 7670h
  6004. Return: AX = CAFFh if installed
  6005.         BX = segment of resident code
  6006.         CX = ??? (0090h)
  6007. Note:    VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  6008.       permanent across mode switches
  6009. SeeAlso: AX=CA00h/BX=6570h
  6010. ----------16E0E0-----------------------------
  6011. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  6012.     AX = E0E0h
  6013. Return: AX = 1F1Fh if installed
  6014.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  6015. Note:    the returned TSR list provides support for communication among TSRs
  6016.       built with TurboPower's Turbo Professional and Object Professional
  6017.       libraries for Turbo Pascal
  6018. SeeAlso: AX=F0F0h
  6019. ----------16ED--BHED-------------------------
  6020. INT 16 - BORLAND TURBO LIGHTNING - API
  6021.     AH = EDh
  6022.     BH = EDh
  6023.     BL = function
  6024.         00h installation check
  6025.         Return: AX = 5205h
  6026.             CH = major version
  6027.             CL = minor version
  6028.         01h ???
  6029.         02h get resident CS
  6030.         Return: AX = code segment of resident portion
  6031.         03h get resident ???
  6032.         Return: AX = offset of some buffer in resident code seg
  6033.         04h ???
  6034.         05h set ???
  6035.         AL = 0 to 0Ch
  6036.         Return: AX = status
  6037.                 0000h if OK
  6038.                 0001h if out of range.
  6039.         06h ???
  6040.         07h ???
  6041.         08h ???
  6042.         AL = char???
  6043.         CX = ???
  6044.         DX = ???
  6045.         Return: AX = 0, 1 or 2
  6046.         09h ???
  6047.         0Ah ???
  6048.         CX = ???
  6049.         DX = ???
  6050.         Return: AX = ???
  6051.         0Bh ???
  6052.         DS:SI -> ???
  6053.         Return: AX = 0, 40h, 80h
  6054.         0Ch ???
  6055.         DS:SI -> ???
  6056.         Return: AH = 0
  6057.             AL = ???
  6058.         0Dh set ???
  6059.         (sets an internal flag)
  6060.         0Eh ???
  6061.         DS:SI -> ???
  6062.         Return: AX = 0, 1 or 2.
  6063.         0Fh ???
  6064.         10h ???
  6065. Notes:    AX in general returns an error code from most functions.
  6066. ----------16F0-------------------------------
  6067. INT 16 - Compaq 386 - SET CPU SPEED
  6068.     AH = F0h
  6069.     AL = speed
  6070.         00h equivalent to 6 MHz 80286 (COMMON)
  6071.         01h equivalent to 8 MHz 80286 (FAST)
  6072.         02h full 16 MHz (HIGH)
  6073.         03h toggles between 8 MHz-equivalent and speed set by system board
  6074.         switch (AUTO or HIGH)
  6075.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  6076.         09h specify speed directly
  6077.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  6078. SeeAlso: AH=F1h,AH=F3h
  6079. ----------16F0F0-----------------------------
  6080. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  6081.     AX = F0F0h
  6082. Return: AX = 0F0Fh if installed
  6083.         ES:DI -> last data block in TSR list
  6084. Note:    the returned TSR list provides support for communication among TSRs
  6085.       built with TurboPower's Turbo Professional and Object Professional
  6086.       libraries for Turbo Pascal
  6087. SeeAlso: AX=E0E0h
  6088.  
  6089. Format of data block:
  6090. Offset    Size    Description
  6091.  00h    DWORD    pointer to program tag (counted ASCII string)
  6092.  04h    WORD    interface version number (0400h)
  6093.  06h    DWORD    pointer to command entry point
  6094.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  6095.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  6096. ---swappable TSRs only---
  6097.  12h    DWORD    pointer to swapping data
  6098.  16h    DWORD    pointer to user data
  6099.     more???
  6100. ----------16F1-------------------------------
  6101. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  6102.     AH = F1h
  6103. Return:    AL = speed code (see AH=F0h)
  6104.          if AL = 09h, CX = speed code
  6105. SeeAlso: AH=F0h,AH=F3h
  6106. ----------16F2-------------------------------
  6107. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  6108.     AH = F2h
  6109. Return: AL = type
  6110.         00h if 11-bit AT keyboard is in use
  6111.         01h if 9-bit PC keyboard is in use 
  6112. ----------16F3-------------------------------
  6113. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  6114.     AH = F3h
  6115.     AL = 00h limit is 6 Mhz
  6116.        = 01h limit is 8 Mhz/6 Mhz
  6117. SeeAlso: AH=F0h,AH=F1h
  6118. ----------16F398-----------------------------
  6119. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  6120.     AX = F398h
  6121. Return: AX = 6A73h ("js")
  6122.     BH = scan code of current hot key
  6123.     BL = ASCII code of current hot key
  6124. Note:    NG.EXE was written by John Socha
  6125. ----------16F400-----------------------------
  6126. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  6127.     AX = F400h
  6128. Return: AH = E2h
  6129.     AL = status
  6130.         00h not present
  6131.         01h enabled
  6132.         02h disabled
  6133. SeeAlso: AX=F401h,AX=F402h
  6134. ----------16F401-----------------------------
  6135. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  6136.     AX = F401h
  6137. Return: AX = E201h
  6138. SeeAlso: AX=F400h,AX=F402h
  6139. ----------16F402-----------------------------
  6140. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  6141.     AX = F402h
  6142. Return: AX = E202h
  6143. SeeAlso: AX=F400h,AX=F401h
  6144. ----------16FEA4-----------------------------
  6145. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  6146.     AX = FEA4h
  6147.     ???
  6148. Return: ???
  6149. ----------16FEC6-----------------------------
  6150. INT 16 - PC Tools 7 CPSCHED - ???
  6151.     AX = FEC6h
  6152.     DL = ???
  6153.     ???
  6154. Return: ???
  6155. ----------16FED3-----------------------------
  6156. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  6157.     AX = FED3h
  6158.     ???
  6159. Return: ???
  6160. ----------16FEDC-----------------------------
  6161. INT 16 - PC Tools 7 CPSCHED - ???
  6162.     AX = FEDCh
  6163.     ???
  6164. Return: ???
  6165. ----------16FEEFCX0000-----------------------
  6166. INT 16 - PC Tools 7 CPSCHED/DESKTOP - INSTALLATION CHECK
  6167.     AX = FEEFh
  6168.     CX = 0000h
  6169. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  6170.         BX = segment of resident portion
  6171. SeeAlso: AX=FFEFh
  6172. ----------16FEF1-----------------------------
  6173. INT 16 - PC Tools 7 CPSCHED/DESKTOP - ???
  6174.     AX = FEF1h
  6175.     ???
  6176. Return: ???
  6177. ----------16FF-------------------------------
  6178. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  6179.     AH = FFh
  6180.     DX = scan code
  6181. Return: AL = status
  6182.         00h success
  6183.         01h failure
  6184. Note:    KBUF is a keyboard buffer expander by Mark Adler
  6185. SeeAlso: AH=05h
  6186. ----------16FF-------------------------------
  6187. INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
  6188.     AH = FFh
  6189. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  6190.     AL+1 = Zoom interrupt number
  6191.     BX = hotkey
  6192. Note:    The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  6193.       the default hot key is F10
  6194. SeeAlso: INT 60"OPTIMA"
  6195. ----------16FF91-----------------------------
  6196. INT 16 - PC Tools 7 DESKTOP - ???
  6197.     AX = FF91h
  6198.     ???
  6199. Return: AX = 0000h
  6200. SeeAlso: AX=FF92h
  6201. ----------16FF92-----------------------------
  6202. INT 16 - PC Tools 7 DESKTOP - ???
  6203.     AX = FF92h
  6204.     ???
  6205. Return: AX = 0000h
  6206. Note:    like AX=FF91h, but temporarily sets ??? to 3
  6207. SeeAlso: AX=FF91h
  6208. ----------16FF93-----------------------------
  6209. INT 16 - PC Tools 7 DESKTOP - SET ??? FLAG
  6210.     AX = FF93h
  6211.     ???
  6212. Return: ???
  6213. ----------16FF94-----------------------------
  6214. INT 16 - PC Tools 7 DESKTOP - SET ???
  6215.     AX = FF94h
  6216.     CX = ???
  6217.     ???
  6218. Return: ???
  6219. ----------16FF95-----------------------------
  6220. INT 16 - PC Tools 7 DESKTOP - SET ???
  6221.     AX = FF95h
  6222.     BX = ???
  6223.     ???
  6224. Return: ???
  6225. ----------16FF96-----------------------------
  6226. INT 16 - PC Tools 7 DESKTOP - ???
  6227.     AX = FF96h
  6228.     CL = ???
  6229. Return: ???
  6230. ----------16FF97-----------------------------
  6231. INT 16 - PC Tools 7 DESKTOP - ???
  6232.     AX = FF97h
  6233.     ???
  6234. Return: ???
  6235. ----------16FF98-----------------------------
  6236. INT 16 - PC Tools 7 DESKTOP - READ ??? FROM \DESK.OVL FILE
  6237.     AX = FF98h
  6238.     DX = offset in file
  6239.     ???
  6240. Return: ???
  6241. ----------16FF99-----------------------------
  6242. INT 16 - PC Tools 7 DESKTOP - ???
  6243.     AX = FF99h
  6244.     ???
  6245. Return: ???
  6246. ----------16FF9A-----------------------------
  6247. INT 16 - PC Tools 7 DESKTOP - GET NAME OF COLOR SCHEME
  6248.     AX = FF9Ah
  6249. Return: ES:BX -> name of current color scheme
  6250. Note:    available even if not popped up
  6251. ----------16FF9B-----------------------------
  6252. INT 16 - PC Tools 7 DESKTOP - UNUSED???
  6253.     AX = FF9Bh
  6254.     ???
  6255. Return: ???
  6256. Note:    sounds triple-length beep
  6257. ----------16FF9E-----------------------------
  6258. INT 16 - PC Tools 7 DESKTOP - ???
  6259.     AX = FF9Eh
  6260.     DL = ???
  6261.     ???
  6262. Return: ???
  6263. ----------16FFA1-----------------------------
  6264. INT 16 - PC Tools 7 DESKTOP - ???
  6265.     AX = FFA1h
  6266.     ???
  6267. Return: ???
  6268. ----------16FFA2-----------------------------
  6269. INT 16 - PC Tools 7 DESKTOP - ???
  6270.     AX = FFA2h
  6271.     ???
  6272. Return: ???
  6273. ----------16FFA3BX0000-----------------------
  6274. INT 16 - PC Tools 7 DATAMON - INSTALLATION CHECK
  6275.     AX = FFA3h
  6276.     BX = 0000h
  6277.     CX = 0000h
  6278. Return: AX = segment of resident code
  6279.     BX = 5555h
  6280.     CX = 5555h
  6281. ----------16FFA3BX0001-----------------------
  6282. INT 16 - PC Tools 7 DATAMON - GET ???
  6283.     AX = FFA3h
  6284.     BX = 0001h
  6285.     CX = 0001h
  6286. Return: AX:BX -> ???
  6287.     CX = BX
  6288. ----------16FFA3BX0002-----------------------
  6289. INT 16 - PC Tools 7 DATAMON - GET ???
  6290.     AX = FFA3h
  6291.     BX = 0002h
  6292.     CX = 0002h
  6293. Return: AX = ??? (0 or 1)
  6294.     CX = BX = AX
  6295. ----------16FFA3BX0003-----------------------
  6296. INT 16 - PC Tools 7 DATAMON - GET ???
  6297.     AX = FFA3h
  6298.     BX = 0003h
  6299.     CX = 0003h
  6300. Return: AX = ??? (0 or 1)
  6301.     CX = BX = AX
  6302. ----------16FFA3BX0004-----------------------
  6303. INT 16 - PC Tools 7 DATAMON - SET ??? FLAG
  6304.     AX = FFA3h
  6305.     BX = 0004h
  6306.     CX = 0004h
  6307. SeeAlso: AX=FFA3h/BX=0005h
  6308. ----------16FFA3BX0005-----------------------
  6309. INT 16 - PC Tools 7 DATAMON - CLEAR ??? FLAG
  6310.     AX = FFA3h
  6311.     BX = 0005h
  6312.     CX = 0005h
  6313. SeeAlso: AX=FFA3h/BX=0004h
  6314. ----------16FFA3BX0006-----------------------
  6315. INT 16 - PC Tools 7 DATAMON - SET PSP SEGMENT ???
  6316.     AX = FFA3h
  6317.     BX = 0006h
  6318.     CX = 0006h
  6319.     DX = current PSP segment as known to DOS??? or 0000h
  6320. ----------16FFA4-----------------------------
  6321. INT 16 - PC Tools 7 DESKTOP - ???
  6322.     AX = FFA4h
  6323.     ???
  6324. Return: ???
  6325. Note:    available even when not popped up
  6326. ----------16FFA5CX1111-----------------------
  6327. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  6328.     AX = FFA5h
  6329.     CX = 1111h
  6330. Return: CH = 00h if installed
  6331.         ES:DI -> internal data (see below)
  6332.         CL = cache state
  6333.         01h enabled
  6334.         02h disabled
  6335. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  6336.  
  6337. Format of internal data:
  6338. Offset    Size    Description
  6339. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  6340.         each byte is either blank (20h) or drive letter (41h-54h)
  6341.  -8    BYTE    ???
  6342.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  6343.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  6344.  -3   3 BYTEs    ???
  6345. ----------16FFA5CXAAAA-----------------------
  6346. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  6347.     AX = FFA5h
  6348.     CX = AAAAh
  6349. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  6350. SeeAlso: AX=FFA5h/CX=CCCCh
  6351. ----------16FFA5CXCCCC-----------------------
  6352. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  6353.     AX = FFA5h
  6354.     CX = CCCCh
  6355. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  6356. Note:    delayed writes are automatically disabled on EXECing
  6357.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  6358.       however, delayed writes are not automatically reenabled upon the
  6359.       program's termination in v6.
  6360. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  6361. ----------16FFA5CXDDDD-----------------------
  6362. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  6363.     AX = FFA5h
  6364.     CX = DDDDh
  6365. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  6366. ----------16FFA5CXEEEE-----------------------
  6367. INT 16 - PC-Cache v6+ - ENABLE CACHE
  6368.     AX = FFA5h
  6369.     CX = EEEEh
  6370. SeeAlso: AX=FFA5h/CX=DDDDh
  6371. ----------16FFA5CXFFFF-----------------------
  6372. INT 16 - PC-Cache v6+ - FLUSH CACHE
  6373.     AX = FFA5h
  6374.     CX = FFFFh
  6375. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  6376. ----------16FFA6-----------------------------
  6377. INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
  6378.     AX = FFA6h
  6379. Return: DS:SI -> ???
  6380. Note:    available only when popped up
  6381. ----------16FFA7-----------------------------
  6382. INT 16 - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  6383.     AX = FFA7h
  6384. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  6385. ----------16FFA8-----------------------------
  6386. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  6387.     AX = FFA8h
  6388.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  6389.     ???
  6390. Return: ???
  6391. Notes:    available only when popped up
  6392.     strings copied into internal buffer, among other actions
  6393. ----------16FFA9-----------------------------
  6394. INT 16 - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  6395.     AX = FFA9h
  6396. Return: DS:SI -> version string
  6397. ----------16FFAA-----------------------------
  6398. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  6399.     AX = FFAAh
  6400.     ???
  6401. Return: ???
  6402. Note:    available only when popped up
  6403. ----------16FFAB-----------------------------
  6404. INT 16 - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  6405.     AX = FFABh
  6406. Return: DS:SI -> editor setting strings???
  6407. ----------16FFAC-----------------------------
  6408. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  6409.     AX = FFACh
  6410.     DL = ???
  6411. Note:    available only when popped up
  6412. ----------16FFAD-----------------------------
  6413. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  6414.     AX = FFADh
  6415.     DL = ???
  6416. ----------16FFAE-----------------------------
  6417. INT 16 - PC Tools v6.0+ DESKTOP API - GET ???
  6418.     AX = FFAEh
  6419. Return: AL = ???
  6420. ----------16FFAF-----------------------------
  6421. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  6422.     AX = FFAFh
  6423.     DL = ???
  6424. ----------16FFB0-----------------------------
  6425. INT 16 - PC Tools v6.0+ DESKTOP API - SET ???
  6426.     AX = FFB0h
  6427.     BL = ???
  6428. ----------16FFB1-----------------------------
  6429. INT 16 - PC Tools v6.0+ DESKTOP API - ???
  6430.     AX = FFB1h
  6431.     ???
  6432. Return: ???
  6433. ----------16FFB2-----------------------------
  6434. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  6435.     AX = FFB2h
  6436. Return: DS:SI -> ???
  6437. ----------16FFB3-----------------------------
  6438. INT 16 - PC Tools v5.5+ DESKTOP API - ???
  6439.     AX = FFB3h
  6440.     ???
  6441. Return: ???
  6442. Note:    available only when popped up
  6443. ----------16FFB4-----------------------------
  6444. INT 16 - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  6445.     AX = FFB4h
  6446. Note:    available only when popped up
  6447. SeeAlso: AX=FFBBh
  6448. ----------16FFB5-----------------------------
  6449. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  6450.     AX = FFB5h
  6451.     BX = window specifier (000Fh to 0019h) (see below)
  6452.     DX = 0000h get, nonzero = set
  6453.     ES:DI -> window parameter buffer (see below)
  6454. SeeAlso: AX=FFCBh
  6455.  
  6456. Values for window specifier:
  6457.  000Fh    comm/FAX
  6458.  0014h    hotkey selection
  6459.  0015h    ASCII table
  6460.  0016h    system colors menu
  6461.  
  6462. Format of window parameters:
  6463. Offset    Size    Description
  6464.  00h    BYTE    rows in window, not counting frame
  6465.  01h    BYTE    columns in window, not counting frame
  6466.  02h    BYTE    row number of top of window
  6467.  03h    BYTE    2*column number of left of window
  6468.  04h    BYTE    character attribute for ???
  6469.  05h    BYTE    character attribute for background/border
  6470.  06h    BYTE    character attribute for ???
  6471.  07h    DWORD    pointer to ??? on screen
  6472.  0Bh  4 BYTEs    ???
  6473.  0Fh    BYTE    nonzero if window may be resized
  6474. Note:    if running in monochrome mode, character attributes at offsets 04h to
  6475.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  6476.       are changed to 07h on reading
  6477. ----------16FFB6-----------------------------
  6478. INT 16 - PC Tools v5.5+ DESKTOP API - GET ???
  6479.     AX = FFB6h
  6480. Return: AH = ???
  6481.     AL = ???
  6482. ----------16FFB7-----------------------------
  6483. INT 16 - PC Tools v5.5+ DESKTOP API - GET/SET ???
  6484.     AX = FFB7h
  6485.     BX = direction
  6486.         0000h copy to buffer
  6487.         else  copy from buffer
  6488.     DS:SI -> 70-byte buffer with ???
  6489. Return: data copied
  6490. Note:    available only when popped up under v6.0+
  6491. ----------16FFB8-----------------------------
  6492. INT 16 - PC Tools v5.1+ DESKTOP API - GET/SET???
  6493.     AX = FFB8h
  6494.     BH = subfunction
  6495.         00h get
  6496.         Return: BL = old value of ???
  6497.             CL = old value of ??? (v6.0+)
  6498.             CH = old value of ??? (v6.0+)
  6499.         nonzero set
  6500.         BL = new value for ???
  6501.         CL = new value for ??? (v6.0+)
  6502.         CH = new value for ??? (v6.0+)
  6503.         DH = ???
  6504.         Return: AL = old value replaced by CL (v6.0+)
  6505.             AH = old value replaced by CH (v6.0+)
  6506. ----------16FFB9-----------------------------
  6507. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6508.     AX = FFB9h
  6509.     ???
  6510. Return: AX = ???
  6511.     CX = ???
  6512.     DS:SI -> ???
  6513.     ES:DI -> ???
  6514. ----------16FFBA-----------------------------
  6515. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6516.     AX = FFBAh
  6517.     ???
  6518. Return: AX = ???
  6519. Note:    available only when popped up
  6520. ----------16FFBB-----------------------------
  6521. INT 16 - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  6522.     AX = FFBBh
  6523. Note:    available only when popped up
  6524. SeeAlso: AX=FFB4h
  6525. ----------16FFBC-----------------------------
  6526. INT 16 - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  6527.     AX = FFBCh
  6528. ----------16FFBD-----------------------------
  6529. INT 16 - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  6530.     AX = FFBDh
  6531.     ???
  6532. Return: ???
  6533. ----------16FFBE-----------------------------
  6534. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6535.     AX = FFBEh
  6536.     ???
  6537. Return: ???
  6538. Note:    available only when popped up
  6539. ----------16FFBF-----------------------------
  6540. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6541.     AX = FFBFh
  6542.     BX = DOS file handle to write on
  6543.     ???
  6544. Return: ???
  6545. Note:    available only when popped up
  6546. ----------16FFC0-----------------------------
  6547. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6548.     AX = FFC0h
  6549.     ???
  6550. Return: AX = 0000h if successful
  6551.     AX = FFFFh on error
  6552. Note:    available only when popped up
  6553. ----------16FFC1-----------------------------
  6554. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6555.     AX = FFC1h
  6556.     BL = ???
  6557.     ES:DI -> data structure (see below)
  6558.     ???
  6559. Return: AX = ???
  6560. Note:    available only when popped up
  6561.  
  6562. Format of data structure:
  6563. Offset    Size    Description
  6564.  00h    WORD    ???
  6565.  02h    WORD    ???
  6566.  04h    WORD    ???
  6567.  06h    WORD    ???
  6568.  08h    WORD    ???
  6569.  0Ah    BYTE    ???
  6570.  0Bh    BYTE    ???
  6571.     ???
  6572. ----------16FFC2-----------------------------
  6573. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6574.     AX = FFC2h
  6575.     ???
  6576. Return: AH = ???
  6577.     CX = ???
  6578.     DH = ???
  6579.     DL = ???
  6580. Note:    available only when popped up
  6581. SeeAlso: AX=FFC3h
  6582. ----------16FFC3-----------------------------
  6583. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6584.     AX = FFC3h
  6585.     ???
  6586. Return: AH = ???
  6587.     CX = ???
  6588.     DH = ???
  6589.     DL = ???
  6590. Note:    available only when popped up
  6591. SeeAlso: AX=FFC2h
  6592. ----------16FFC4-----------------------------
  6593. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  6594.     AX = FFC4h
  6595. Return: AL = ???
  6596.     BX = segment of scratch space???
  6597.     CX = segment of stored screen data (section covered by window???)
  6598.     DX = segment of window parameters for ???
  6599.     ES:BP -> ???
  6600. Note:    available only when popped up in versions prior to 6.0
  6601. ----------16FFC5-----------------------------
  6602. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  6603.     AX = FFC5h
  6604. Return: BL = nonzero if loaded resident
  6605.        = 00h if nonresident
  6606. Note:    available only when popped up; should call AX=FFEFh first to ensure
  6607.       that DESKTOP is active
  6608. SeeAlso: AX=FFEFh,AX=FFF3h
  6609. ----------16FFC6-----------------------------
  6610. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  6611.     AX = FFC6h
  6612.     BL = new value for ???
  6613. ----------16FFC7-----------------------------
  6614. INT 16 - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  6615.     AX = FFC7h
  6616.     ???
  6617. Return: ???
  6618. ----------16FFC8-----------------------------
  6619. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  6620.     AX = FFC8h
  6621. Return: DS:SI -> ???
  6622. Note:    valid only while popped up
  6623. ----------16FFC9-----------------------------
  6624. INT 16 - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  6625.     AX = FFC9h
  6626.     DS:SI -> characters to store in clipboard
  6627.     CX = size in bytes
  6628. Return: CF set on error
  6629. Notes:    available only when popped up
  6630.     while copying, bytes of 00h and 0Ah are skipped
  6631. ----------16FFCA-----------------------------
  6632. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  6633.     AX = FFCAh
  6634.     DX = ???
  6635. Return: AX destroyed
  6636. Note:    available only when popped up
  6637. ----------16FFCB-----------------------------
  6638. INT 16 - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  6639.     AX = FFCBh
  6640.     DX = window specifier???
  6641. Return: AX destroyed
  6642. Note:    available only when popped up
  6643. SeeAlso: AX=FFB5h
  6644. ----------16FFCC-----------------------------
  6645. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  6646.     AX = FFCCh
  6647.     DS:SI -> ASCIZ string
  6648. Return: AX = ???
  6649.     CX = ???
  6650.     ES:DI -> address past last character displayed (v5.1/5.5)
  6651.           -> ??? on menu bar (v6.0)
  6652. ----------16FFCD-----------------------------
  6653. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6654.     AX = FFCDh
  6655.     DS:DX -> ???
  6656. Return: ???
  6657. Note:    available only when popped up
  6658. ----------16FFCE-----------------------------
  6659. INT 16 - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  6660.     AX = FFCEh
  6661.     CX = ???
  6662. Return: nothing???
  6663. ----------16FFCF-----------------------------
  6664. INT 16 - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  6665.     AX = FFCFh
  6666. Note:    available only when popped up
  6667. ----------16FFD0-----------------------------
  6668. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  6669.     AX = FFD0h
  6670.     ???
  6671. Return: ???
  6672. Note:    available only when popped up
  6673. ----------16FFD1-----------------------------
  6674. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  6675.     AX = FFD1h
  6676. Return: BX = number of copies
  6677.     DX = destination
  6678.         00h cancel
  6679.         01h LPT1
  6680.         02h LPT2
  6681.         03h    LPT3
  6682.         04h    COM1
  6683.         05h    COM2
  6684.         06h disk file
  6685. Note:    available only when popped up
  6686. ----------16FFD2-----------------------------
  6687. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6688.     AX = FFD2h
  6689.     BX = ???
  6690. Return: BL = ???
  6691. Note:    available only when popped up
  6692. ----------16FFD3-----------------------------
  6693. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6694.     AX = FFD3h
  6695.     DS:SI -> 92-byte data record for ???
  6696. Return: ???
  6697. ----------16FFD4BH3C-------------------------
  6698. INT 16 - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  6699.     AX = FFD4h
  6700.     BH = 3Ch create file (with no attributes)
  6701.          3Dh open file
  6702.          41h delete file
  6703.     BL = access mode
  6704.          00h read only
  6705.          01h write only
  6706.          02h read/write
  6707.     DS:SI -> ASCIZ filename
  6708. Return: BX = file handle
  6709.         0000h on error
  6710. Note:    operation is attempted in (in order) the directory from which the
  6711.       desktop was started/run???, the directory specified with the
  6712.       filename, X:\PCTOOLS\, and X:\
  6713. ----------16FFD5-----------------------------
  6714. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6715.     AX = FFD5h
  6716.     ???
  6717. Return: ???
  6718. Note:    available only when popped up
  6719. ----------16FFD6-----------------------------
  6720. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6721.     AX = FFD6h
  6722.     BX = ???
  6723.     CX = ???
  6724.     DX = offset in ???
  6725.     ???
  6726. Return: ???
  6727. Note:    available only when popped up
  6728. ----------16FFD7-----------------------------
  6729. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6730.     AX = FFD7h
  6731.     ???
  6732. Return: BL = ???
  6733. Note:    available only when popped up
  6734. ----------16FFD8-----------------------------
  6735. INT 16 - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  6736.     AX = FFD8h
  6737.     DS:BX -> ASCIZ filename
  6738. Return: BX = file handle
  6739.         0000h on error
  6740. Note:    pops up confirmation menu if file already exists
  6741.     only available when popped up???
  6742. ----------16FFD9-----------------------------
  6743. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  6744.     AX = FFD9h
  6745. Return: AX = ???
  6746. Note:    available only when popped up
  6747. ----------16FFDA-----------------------------
  6748. INT 16 - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  6749.     AX = FFDAh
  6750.     DS:SI -> ??? (v5.1/5.5 only)
  6751. Return: DS:SI -> filename
  6752. ----------16FFDB-----------------------------
  6753. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  6754.     AX = FFDBh
  6755.     BL = ???
  6756. Note:    available only when popped up
  6757. ----------16FFDC-----------------------------
  6758. INT 16 - PC Tools v5.1+ DESKTOP API - UNHOOK
  6759.     AX = FFDCh
  6760. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  6761.       original values
  6762. ----------16FFDDBX0000-----------------------
  6763. INT 16 - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  6764.     AX = FFDDh
  6765.     BX = 0000h
  6766. Return: CX = 5555h 
  6767.     DX = 5555h if PCShell installed in resident mode
  6768. ----------16FFDDBX0001-----------------------
  6769. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  6770.     AX = FFDDh
  6771.     BX = 0001h
  6772. SeeAlso: AX=FFDDh/BX=0003h
  6773. ----------16FFDDBX0002-----------------------
  6774. INT 16 - PC Tools v5.1-5.5 PCShell API - GET ???
  6775.     AX = FFDDh
  6776.     BX = 0002h
  6777. Return: AL = 
  6778.         00h ???
  6779.         01h ???
  6780. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  6781.       awaits a keystroke, and aborts the current process
  6782. ----------16FFDDBX0003-----------------------
  6783. INT 16 - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  6784.     AX = FFDDh
  6785.     BX = 0003h
  6786. SeeAlso: AX=FFDDh/BX=0001h
  6787. ----------16FFDDBX0004-----------------------
  6788. INT 16 - PC Tools v5.1+ PCShell API - GET ???
  6789.     AX = FFDDh
  6790.     BX = 0004h
  6791. Return: CF clear if successful
  6792.         DS:SI -> ???
  6793. ----------16FFDDBX0005-----------------------
  6794. INT 16 - PC Tools v5.1+ PCShell API - ???
  6795.     AX = FFDDh
  6796.     BX = 0005h
  6797.     ???
  6798. Return: ???
  6799. ----------16FFDDBX0006-----------------------
  6800. INT 16 - PC Tools v5.1+ PCShell API - ???
  6801.     AX = FFDDh
  6802.     BX = 0006h
  6803.     ???
  6804. Return: ???
  6805. ----------16FFDDBX0007-----------------------
  6806. INT 16 - PC Tools v5.1+ PCShell API - SET ??? FLAG
  6807.     AX = FFDDh
  6808.     BX = 0007h
  6809. Return: CF clear if successful
  6810. SeeAlso: AX=FFDDh/BX=0008h
  6811. ----------16FFDDBX0008-----------------------
  6812. INT 16 - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  6813.     AX = FFDDh
  6814.     BX = 0008h
  6815. Return: ???
  6816. SeeAlso: AX=FFDDh/BX=0007h
  6817. ----------16FFDDBX0009-----------------------
  6818. INT 16 - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  6819.     AX = FFDDh
  6820.     BX = 0009h
  6821. Return: CF clear if successful
  6822.         DS:SI -> list of pointers (see below)
  6823.  
  6824. Format of returned pointer list:
  6825. Offset    Size    Description
  6826.  00h    WORD    offset of WORD containing ???
  6827.  02h    WORD    offset of name of program to execute
  6828.  04h    WORD    offset of 80-byte buffer for ???
  6829.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  6830.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  6831. ----------16FFDDBX000A-----------------------
  6832. INT 16 - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  6833.     AX = FFDDh
  6834.     BX = 000Ah
  6835. Return: CX = 5555h if running
  6836.     DX = 5555h
  6837. Note:    also sets a flag
  6838. ----------16FFDDBX000B-----------------------
  6839. INT 16 - PC Tools v6.0+ PCRUN API - ???
  6840.     AX = FFDDh
  6841.     BX = 000Bh
  6842.     ???
  6843. Return: CX = 5555h if PCRUN active
  6844.     DX = 5555h
  6845. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  6846. ----------16FFDE-----------------------------
  6847. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  6848.     AX = FFDEh
  6849.     DS:DX -> menu description (must be on a paragraph boundary)
  6850. Return: AX = ???
  6851.         AL seems to be the number of the selected button
  6852. Note:    available only when popped up
  6853. SeeAlso: AX=FFEEh
  6854. ----------16FFDF-----------------------------
  6855. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6856.     AX = FFDFh
  6857.     ???
  6858. Return: ???
  6859. ----------16FFE0-----------------------------
  6860. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6861.     AX = FFE0h
  6862.     CX = ???
  6863.     DX = ???
  6864. Note:    available only when popped up
  6865. ----------16FFE1-----------------------------
  6866. INT 16 - PC Tools v5.1+ DESKTOP API - BEEP
  6867.     AX = FFE1h
  6868. ----------16FFE2-----------------------------
  6869. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6870.     AX = FFE2h
  6871.     DX = ???
  6872. Return: ???
  6873. Note:    available only when popped up
  6874. ----------16FFE3-----------------------------
  6875. INT 16 - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  6876.     AX = FFE3h
  6877.     BL = character to print to currently open printer or print file
  6878. Return: CF set on error
  6879. Note:    available only when popped up
  6880. SeeAlso: INT 17/AH=00h
  6881. ----------16FFE4-----------------------------
  6882. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6883.     AX = FFE4h
  6884.     DX = segment of ???
  6885. Return: ???
  6886. Note:    available only when popped up
  6887. ----------16FFE5-----------------------------
  6888. INT 16 - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  6889.     AX = FFE5h
  6890.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  6891.     DX = segment of window parameters???
  6892. Return: AX = DOS file handle for file
  6893.         DS:DX -> filename???
  6894.        = FFFFh if cancelled by user
  6895. Note:    available only when popped up
  6896. SeeAlso: AX=FFDAh
  6897. ----------16FFE6-----------------------------
  6898. INT 16 - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  6899.     AX = FFE6h
  6900. Return: AX = 0000h if no key available
  6901.          else  BIOS keycode
  6902. Notes:    available only when popped up
  6903.     invokes INT 28 idle interrupt before checking for key
  6904. ----------16FFE7-----------------------------
  6905. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6906.     AX = FFE7h
  6907.     BX = segment of ???
  6908. Return: ???
  6909. Note:    available only when popped up
  6910. ----------16FFE8-----------------------------
  6911. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  6912.     AX = FFE8h
  6913.     CX = number
  6914.     DH = attribute
  6915.     DS:SI -> destination for ASCII number
  6916. Return: DS:SI buffer filled in with alternating characters and attributes
  6917. ----------16FFE9-----------------------------
  6918. INT 16 - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  6919.     AX = FFE9h
  6920. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  6921. Note:    available only when popped up
  6922. ----------16FFEA-----------------------------
  6923. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  6924.     AX = FFEAh
  6925.     DS:SI -> counted string (count byte followed by string)
  6926. Return: ???
  6927. Note:    available only when popped up
  6928. ----------16FFEB-----------------------------
  6929. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  6930.     AX = FFEBh
  6931.     ???
  6932. Return: ???
  6933. ----------16FFEC-----------------------------
  6934. INT 16 - PC Tools v5.1+ DESKTOP API - GET KEY
  6935.     AX = FFECh
  6936.     DS:SI -> FAR routine to ???
  6937.     BX = ???
  6938.     ???
  6939. Return: AX = keystroke
  6940.         FFFFh if F10 pressed to go to menu
  6941. Notes:    available only when popped up
  6942.     invokes INT 28 while waiting for keystroke
  6943.     F10 is hotkey to Desktop menu
  6944. ----------16FFED-----------------------------
  6945. INT 16 - PC Tools v5.1+ DESKTOP API - GET ???
  6946.     AX = FFEDh
  6947. Return: AX = ???
  6948. Note:    available only when popped up
  6949. ----------16FFEE-----------------------------
  6950. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  6951.     AX = FFEEh
  6952.     DS:SI -> pulldown menu system description (see below)
  6953. Return: AX destroyed
  6954. Notes:    available only when popped up
  6955.     if the accessory does not need any menu items of its own, it should
  6956.       call AX=FFFAh instead
  6957. SeeAlso: AX=FFF7h,AX=FFFAh
  6958.  
  6959. Format of pulldown menu system description:
  6960. Offset    Size    Description
  6961.  00h    WORD    offset of menu bar contents (counted string)
  6962.  02h    WORD    number of items on menu bar
  6963.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  6964.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  6965.  18h    WORD    offset of first menu definition (see below)
  6966.  1Ah    WORD    offset of second menu definition
  6967.     ...
  6968.  
  6969. Format of menu definition:
  6970. Offset    Size    Description
  6971.  00h    WORD    offset of menu contents (see below)
  6972.  02h    WORD    number of entries in menu
  6973.  04h    for each entry:
  6974.         Offset    Size    Description
  6975.          00h    BYTE    scancode of Alt-key to invoke entry
  6976.          01h    BYTE    character to highlight (01h=first, etc)
  6977.          02h    WORD    offset of FAR routine to handle selection
  6978.  
  6979. Format of menu contents:
  6980. Offset    Size    Description
  6981.  00h    BYTE    number of lines in menu
  6982.  01h    BYTE    width of menu
  6983.  02h  N BYTEs    counted strings, one for each line in menu
  6984. ----------16FFEFCX0000-----------------------
  6985. INT 16 - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  6986.     AX = FFEFh
  6987.     CX = 0000h
  6988. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  6989.         BX = segment of resident portion
  6990.         AX = ??? (v5.1/5.5 only)
  6991. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  6992. ----------16FFF0-----------------------------
  6993. INT 16 - PC Tools v5.1+ DESKTOP API - SET ???
  6994.     AX = FFF0h
  6995.     DX = ???
  6996. Return: AX destroyed
  6997. Note:    available only when popped up
  6998. ----------16FFF1BX0000-----------------------
  6999. INT 16 - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  7000.     AX = FFF1h
  7001.     BX = 0000h  leave ??? flag as is
  7002.         nonzero set ??? flag
  7003. Return: CX = 5555h if installed
  7004.     DX = 5555h
  7005. ----------16FFF2-----------------------------
  7006. INT 16 - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  7007.     AX = FFF2h
  7008.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  7009.         or help text
  7010. Return: AX destroyed
  7011. Notes:    available only when popped up
  7012.     if the specified string does not start with '[', it is displayed
  7013.       centered on the bottom line, else the function key labels are shown
  7014. ----------16FFF3-----------------------------
  7015. INT 16 - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  7016.     AX = FFF3h
  7017. Note:    releases any EMS being used; restores video mode, page, and cursor
  7018.       shape; and restores interrupt vectors
  7019. SeeAlso: AX=FFC5h,AX=FFEFh
  7020. ----------16FFF4-----------------------------
  7021. INT 16 - PC Tools v5.1+ DESKTOP API - ???
  7022.     AX = FFF4h
  7023.     ???
  7024. Return: ???
  7025. Note:    available only when popped up
  7026. SeeAlso: AX=FFF6h
  7027. ----------16FFF5-----------------------------
  7028. INT 16 - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  7029.     AX = FFF5h
  7030. Return: ES:BX -> screen attributes data structure (see below)
  7031.     AL = ??? (v6.0+)
  7032.  
  7033. Format of attribute data structure:
  7034. Offset    Size    Description
  7035.  -1    BYTE    attribute for desktop background
  7036.  00h    BYTE    attribute for normal characters on desktop menu
  7037.  01h    BYTE    attribute for highlighted characters on desktop menu
  7038.  02h  5    BYTEs    ???
  7039.  07h    BYTE    attribute for dialog boxes
  7040.  08h 15 BYTEs    ???
  7041.  17h    BYTE    attribute for message boxes
  7042. ----------16FFF6-----------------------------
  7043. INT 16 - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  7044.     AX = FFF6h
  7045.     DS = segment of editor buffer structure (see below)
  7046.     BX = ???
  7047.     DX = segment of window parameters structure (see AX=FFB5h)
  7048. Return: ???
  7049. Note:    available only when popped up
  7050. SeeAlso: AX=FFF4h
  7051.  
  7052. Format of editor buffer structure:
  7053. Offset    Size    Description
  7054.  00h    WORD    offset of current cursor position in buffer segment
  7055.  02h  2 BYTEs    ???
  7056.  04h    WORD    offset of beginning of file data in buffer segment
  7057.  06h 10 BYTEs    ???
  7058.  10h  N BYTEs    ASCIZ name of file being edited
  7059. ----------16FFF7-----------------------------
  7060. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  7061.     AX = FFF7h
  7062.     DS:SI -> ???
  7063.     ???
  7064. Return: ???
  7065. Notes:    available only when popped up
  7066.     performs input processing on the menu bar set up with AX=FFEEh
  7067. SeeAlso: AX=FFEEh,AX=FFFBh
  7068. ----------16FFF8-----------------------------
  7069. INT 16 - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  7070.     AX = FFF8h
  7071.     DS:0000h -> window parameters structure (see AX=FFB5h)
  7072.     DS:BX -> DWORD to store address of ??? on screen
  7073. Return: ???
  7074. ----------16FFF9-----------------------------
  7075. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  7076.     AX = FFF9h
  7077.     ES:BX -> FAR routine to redisplay the utility's window
  7078. Note:    available only when popped up
  7079. ----------16FFFA-----------------------------
  7080. INT 16 - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  7081.     AX = FFFAh
  7082. Notes:    available only when popped up
  7083.     adds the "Window" option to the "Desktop" option which is the only one
  7084.       available when no accessories are active.  Unlike AX=FFEEh, no
  7085.       additional menu items are added between "Desktop" and "Window"
  7086. SeeAlso: AX=FFEEh,AX=FFFBh
  7087. ----------16FFFB-----------------------------
  7088. INT 16 - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  7089.     AX = FFFBh
  7090. Return: ???
  7091. Notes:    available only when popped up
  7092.     performs input processing on the standard menu bar set up with AX=FFFAh
  7093. SeeAlso: AX=FFF7h
  7094. ----------16FFFC-----------------------------
  7095. INT 16 - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  7096.     AX = FFFCh
  7097. Return: ES:BX -> hotkey table (see below)
  7098.     DS:DX = original INT 9 vector
  7099.  
  7100. Format of hotkey table:
  7101. Offset    Size    Description
  7102.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  7103.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  7104.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  7105.  06h  2 BYTEs    scancode/shift state for screen autodial key
  7106. ----------16FFFD-----------------------------
  7107. INT 16 - PC Tools v5.1+ DESKTOP API - COPY ???
  7108.     AX = FFFDh
  7109. Return: AX destroyed
  7110. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  7111. ----------16FFFE-----------------------------
  7112. INT 16 - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  7113.     AX = FFFEh
  7114. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  7115. ----------16FFFF-----------------------------
  7116. INT 16 - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  7117.     AX = FFFFh
  7118. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  7119. ----------17----DX0ABC-----------------------
  7120. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  7121.     DX = 0ABCh
  7122. Return: AX = AAAAh
  7123.     DX = BAAAh
  7124.     ES = code segment of resident portion
  7125. ----------17----DX0B90-----------------------
  7126. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  7127.     DX = 0B90h
  7128. Return: DX = ABBBh
  7129.     ES = code segment of resident portion
  7130. ----------17----DX0B91-----------------------
  7131. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  7132.     DX = 0B91h
  7133. Return: DX = ABCBh
  7134.     ES = code segment of resident portion
  7135. ----------17----DX0F5F-----------------------
  7136. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  7137.     DX = 0F5Fh
  7138. Return: AX = AAAAh
  7139.     DX = F555h
  7140.     ES = code segment of resident portion
  7141. ----------1700-------------------------------
  7142. INT 17 - PRINTER - WRITE CHARACTER
  7143.     AH = 00h
  7144.     AL = character to write
  7145.     DX = printer number (00h-02h)
  7146. Return: AH = printer status
  7147.         bit 7: not busy
  7148.         6: acknowledge
  7149.         5: out of paper
  7150.         4: selected
  7151.         3: I/O error
  7152.         2: unused
  7153.         1: unused
  7154.         0: timeout
  7155. SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  7156. ----------1701-------------------------------
  7157. INT 17 - PRINTER - INITIALIZE PORT
  7158.     AH = 01h
  7159.     DX = printer number (00h-02h)
  7160. Return: AH = printer status (see AH=00h)
  7161. SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
  7162. ----------1702-------------------------------
  7163. INT 17 - PRINTER - GET STATUS
  7164.     AH = 02h
  7165.     DX = printer number (00h-02h)
  7166. Return: AH = printer status (see AH=00h)
  7167. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  7168. ----------1702--DX0000-----------------------
  7169. INT 17 - INSET - INSTALLATION CHECK
  7170.     AH = 02h
  7171.     DX = 0000h
  7172.     CX = 07C3h (1987d)
  7173. Return: CX = 07C2h (1986d) if installed
  7174. Note:    INSET is a text/graphics integration program
  7175. ----------1720-------------------------------
  7176. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
  7177.     AH = 20h
  7178.     AL = function number
  7179.         00h installation check
  7180.             Return: BX = driver version number (BH=major,BL=minor)
  7181.             CH = ??? (00h)
  7182.             CL = ???
  7183.             DX = ??? (0100h)
  7184.         Note: also enables the remaining functions
  7185.         01h set ??? flag
  7186.         02h get information
  7187.             CL = subfunction
  7188.             00h get printer type
  7189.                 Return: ES:DI -> ASCIZ printer name
  7190.             01h get paper size
  7191.                 DX = size index
  7192.             Return: ES:DI -> ASCIZ paper size description
  7193.             02h get ???
  7194.                 Return: BX = ???
  7195.             03h get printer information???
  7196.                 DX = ???
  7197.             ES:BX -> buffer for ??? (min 134 bytes)
  7198.         03h ???
  7199.             ES:BX -> ???
  7200.         04h get ???
  7201.             Return: ES:DI -> ???
  7202.         05h advance printer to next page
  7203.             Note: also clears flag set by function 01h
  7204.         06h advance printer to next page and shut down
  7205.             Note:    also clears flag set by function 01h and disables
  7206.               functions other than 00h
  7207.         07h not implemented, AX returned unchanged
  7208.     BL = printer number???
  7209. Return: AX = status
  7210.         0000h successful
  7211.         0001h invalid printer???
  7212.         0002h ???
  7213.         0003h invalid subfunction
  7214.         0005h driver disabled, must call function 00h first
  7215.         0009h unknown printer error
  7216.         000Bh printer not selected
  7217.         000Ch printer out of paper
  7218.         000Eh error while writing to serial printer
  7219.         000Fh ???
  7220.         0010h invalid function number
  7221.         0011h value out of range
  7222. ----------172400-----------------------------
  7223. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  7224.     AX = 2400h
  7225.     DL = new state
  7226.         00h disabled
  7227.         01h enabled
  7228. Return: DL = 24h if installed
  7229.     DH = minor version number
  7230.     CX = network address of this machine
  7231.     AL = status
  7232.         00h successful
  7233.         01h timeout
  7234.         02h header error
  7235.         03h data error
  7236.         04h busy
  7237.         05h invalid parameters
  7238. SeeAlso: AX=2403h,INT 16/AX=4500h
  7239. ----------172401-----------------------------
  7240. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  7241.     AX = 2401h
  7242.     BL = timeout in clock ticks
  7243. Return: AL = status (see AX=2400h)
  7244.     DX:BX -> receive buffer
  7245. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  7246. ----------172402-----------------------------
  7247. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  7248.     AX = 2402h
  7249.     transmit buffer filled (see AX=2403h)
  7250. Return: AL = status (see AX=2400h)
  7251. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  7252. ----------172403-----------------------------
  7253. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  7254.     AX = 2403h
  7255. Return: AL = status (see AX=2400h)
  7256.     CX = number of characters in receive ring buffer
  7257.     DX:BX -> transmit buffer
  7258. SeeAlso: AX=2400h,AX=2402h
  7259. ----------172404-----------------------------
  7260. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  7261.     AX = 2404h
  7262.     BX = target address
  7263. Return: AL = status (see AX=2400h)
  7264. SeeAlso: AX=2402h,AX=2405h
  7265. ----------172405-----------------------------
  7266. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  7267.     AX = 2405h
  7268.     BX = target address
  7269. Return: AL = status (see AX=2400h)
  7270. SeeAlso: AX=2402h,AX=2404h
  7271. ----------172406-----------------------------
  7272. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  7273.     AX = 2406h
  7274. Return: AL = status (see AX=2400h)
  7275. SeeAlso: AX=2407h,AX=240Ah
  7276. ----------172407-----------------------------
  7277. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  7278.     AX = 2407h
  7279. Return: AL = status (see also AX=2400h)
  7280.         06h end of data
  7281.     DL = received character
  7282. SeeAlso: AX=2406h
  7283. ----------172408-----------------------------
  7284. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  7285.     AX = 2408h
  7286. Return: AL = status (see also AX=2400h)
  7287.         06h end of data
  7288.     CX = number of bytes in receive buffer
  7289.     DX:SI -> receive buffer
  7290. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  7291. ----------172409-----------------------------
  7292. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  7293.     AX = 2409h
  7294.     BX = target address
  7295.     CX = number of data bytes
  7296.     DL = command code to send
  7297.     DS:SI -> data bytes for command
  7298. Return: AL = status (see also AX=2400h)
  7299.         03h no response
  7300.         06h remote currently unable to perform command
  7301. SeeAlso: AX=2405h,AX=2408h
  7302. ----------17240A-----------------------------
  7303. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  7304.     AX = 240Ah
  7305. Return: AL = status (see AX=2400h)
  7306. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  7307. ----------17240B-----------------------------
  7308. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  7309.     AX = 240Bh
  7310.     DL = character to send
  7311. Return: AL = status (see also AX=2400h)
  7312.         03h transmission error
  7313.         06h write error
  7314. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  7315. ----------17240C-----------------------------
  7316. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  7317.     AX = 240Ch
  7318. Return: AL = status (see also AX=2400h)
  7319.         03h transmission error
  7320.         06h remote breaks connection
  7321. SeeAlso: AX=240Ah,AX=240Bh
  7322. ----------175000-----------------------------
  7323. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  7324.     AX = 5000h
  7325.     BX = country code
  7326.         0001h USA (English), 0051h Japan
  7327. Return: AL = status
  7328.         00h successful
  7329.         01h bad country code
  7330.         02h other error
  7331. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  7332. ----------175001-----------------------------
  7333. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  7334.     AX = 5001h
  7335. Return: AL = status
  7336.         00h successful
  7337.             BX = country code
  7338.         02h error
  7339. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  7340. ----------1751-------------------------------
  7341. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  7342.     AH = 51h
  7343.     DX = 2-byte JIS code
  7344. Return: DX = shift-JIS value or 0000h on error
  7345. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  7346.       characters to Shift-JIS characters, and the other performs the
  7347.       opposite conversion
  7348. SeeAlso: AX=5000h,AH=52h
  7349. ----------1752-------------------------------
  7350. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  7351.     AH = 52h
  7352.     DX = 2-byte shift-JIS code
  7353. Return: DX = JIS code or 0000h on error
  7354. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  7355.       characters to Shift-JIS characters, and the other performs the
  7356.       opposite conversion
  7357. SeeAlso: AH=51h
  7358. ----------1760-------------------------------
  7359. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  7360.     AH = 60h
  7361. Return: AL = 60h
  7362.     DX = CS of resident code
  7363. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  7364.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  7365.       consisting of an 80h followed by the actual command
  7366. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  7367. ----------1761-------------------------------
  7368. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  7369.     AH = 61h
  7370. Return: AL = 61h
  7371.     DX = CS of resident code
  7372. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  7373. ----------1781-------------------------------
  7374. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  7375.     AH = 81h
  7376.     AL = 00h (NTNX compatibility mode)
  7377.     CL = number of jobs to cancel
  7378. Return: AL = status
  7379.         00h success
  7380.         01h..7Fh warning
  7381.         80h general failure
  7382.         81h host overloaded (NTNX only)
  7383.         82h module busy (NTNX only)
  7384.         83h host busy (NTNX only)
  7385.         84h re-entry flag set
  7386.         85h invalid request
  7387.         86h invalid printer
  7388.         87h invalid process ID
  7389.         89h access denied
  7390.         8Ah option not available for given port type
  7391.         8Bh option not available for given task type
  7392.         91h printer busy
  7393.         C2h file not found
  7394.         C3h path not found
  7395.         C4h file access failure
  7396. Note:    cancels the last CL printouts for the current task
  7397. SeeAlso: AH=82h
  7398. ----------1782-------------------------------
  7399. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  7400.     AH = 82h
  7401.     AL = 00h (NTNX compatibility mode)
  7402. Return: AL = status (see AH=81h)
  7403. SeeAlso: AH=81h
  7404. ----------1783-------------------------------
  7405. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  7406.     AH = 83h
  7407.     AL = mode
  7408.         00h NTNX compatibility
  7409.         CL = number of copies (max 99, default 1)
  7410.         02h MW386 v2+
  7411.         BX = logical device number
  7412.             00h-03h = LPT1-LPT4
  7413.             04h-07h = COM1-COM4
  7414.         CX = number of copies
  7415. Return: AL = status (see AH=81h)
  7416. Note:    in NTNX compatibility mode, this function only affects LPT1
  7417. ----------1784-------------------------------
  7418. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  7419.     AH = 84h
  7420.     AL = mode
  7421.         00h NTNX compatibility
  7422.         02h MW386 v2+
  7423.         BX = logical device number
  7424.             00h-03h = LPT1-LPT4
  7425.             04h-07h = COM1-COM4
  7426. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  7427.       under MW386 in NTNX compatibility mode)
  7428. ----------1784-------------------------------
  7429. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  7430.     AH = 84h
  7431.     AL = character
  7432.     DX = printer number
  7433. Return: AH = printer status (see AH=00h)
  7434. SeeAlso: AH=00h,AH=85h
  7435. ----------1785-------------------------------
  7436. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  7437.     AH = 85h
  7438.     AL = new state (00h enabled, 01h disabled)
  7439. SeeAlso: AH=84h"AX"
  7440. ----------1787-------------------------------
  7441. INT 17 - Alloy NTNX - SET INDOS POINTER
  7442.     AH = 87h
  7443.     AL = 00h
  7444.     CX:BX -> buffer for user-written printer drivers
  7445. Return: BX,CX destroyed
  7446. Note:    must be executed before the printer is enabled
  7447. SeeAlso: AH=8Ah
  7448. ----------1788-------------------------------
  7449. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  7450.     AH = 88h
  7451.     AL = mode
  7452.         00h NTNX compatibility
  7453.         DX = NTNX printer number
  7454.             00h host LPT1
  7455.             01h host LPT2
  7456.             02h host LPT3
  7457.             03h host LPT4
  7458.             04h host COM1
  7459.             05h host COM2
  7460.             06h user's logical COM2
  7461.             07h user's terminal AUX port
  7462.             08h user's logical COM1 (MW386 only)
  7463.         01h MW386
  7464.         DX = MW386 printer number
  7465. Return: AH = status (see AH=81h)
  7466. Note:    removes specified printer from the spooler's list of printers
  7467. SeeAlso: AH=89h,AH=8Bh
  7468. ----------1789-------------------------------
  7469. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  7470.     AH = 89h
  7471.     AL = mode
  7472.         00h NTNX compatibility
  7473.         DX = NTNX printer number (see AH=88h)
  7474.         01h MW386
  7475.         DX = MW386 printer number
  7476. Return: AL = status (see AH=81h)
  7477. Note:    the specified printer is added to the spooler's list of available
  7478.       printers
  7479. SeeAlso: AH=88h,AH=8Bh
  7480. ----------178A-------------------------------
  7481. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  7482.     AH = 8Ah
  7483.     ???
  7484. SeeAlso: AH=92h
  7485. ----------178B-------------------------------
  7486. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  7487.     AH = 8Bh
  7488.     DS:DX -> ASCIZ printer name
  7489. Return: AL = status (see also AH=81h)
  7490.         00h successful
  7491.         DX = physical device number
  7492. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  7493. ----------178C-------------------------------
  7494. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  7495.     AH = 8Ch
  7496.     DX = physical device number
  7497.     ES:DI -> 17-byte buffer for ASCIZ device name
  7498. Return: AL = status (see also AH=81h)
  7499.         00h successful
  7500.         ES:DI buffer filled
  7501. SeeAlso: AH=88h,AH=8Bh
  7502. ----------178D-------------------------------
  7503. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  7504.     AH = 8Dh
  7505.     AL = 00h
  7506. Notes:    clears all buffers and resets spooler to boot-up values
  7507.     MW386 supports this function for compatibility only; it is a NOP
  7508. Return: AL = status (see AH=81h)
  7509. ----------178E-------------------------------
  7510. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  7511.     AH = 8Eh
  7512.     AL = 00h
  7513. Return: CX:BX -> INT 28 entry point
  7514. SeeAlso: AH=8Fh
  7515. ----------178F-------------------------------
  7516. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  7517.     AH = 8Fh
  7518.     AL = 00h
  7519. Return: CX:BX -> DOS intercept routine
  7520. SeeAlso: AH=8Eh
  7521. ----------1790-------------------------------
  7522. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  7523.     AH = 90h
  7524.     AL = mode
  7525.         00h NTNX compatibility
  7526.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  7527.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  7528.         02h MW386 v2+
  7529.         BX = logical device number
  7530.             00h-03h = LPT1-LPT4
  7531.             04h-07h = COM1-COM4
  7532.     CX:SI -> ASCIZ pathname
  7533. Return: AL = status (see AH=81h)
  7534. Note:    in mode 00h, the file is always sent to logical LPT1
  7535. SeeAlso: AH=A0h
  7536. ----------1791-------------------------------
  7537. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  7538.     AH = 91h
  7539.     AL = mode
  7540.         00h NTNX compatibility
  7541.         Return: CX = user number (00h = host)
  7542.             DX = currently selected printer number (00h-08h)
  7543.         01h MW386
  7544.         Return: CX = user number
  7545.             DX = physical dev number of currently selected printer
  7546.         02h MW386 v2+
  7547.         BX = logical device number
  7548.             00h-03h = LPT1-LPT4
  7549.             04h-07h = COM1-COM4
  7550.         Return: CX = user number
  7551.             DX = physical device number
  7552. Return: AL = status (see AH=81h)
  7553. SeeAlso: AH=8Ch
  7554. ----------1792-------------------------------
  7555. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  7556.     AH = 92h
  7557.     AL = 00h
  7558.     CL = 00h
  7559. Return: CL = driver state
  7560.         01h initialized
  7561.         80h not initialized
  7562.     AX = status (see AH=81h)
  7563. SeeAlso: AH=8Ah
  7564. ----------1794-------------------------------
  7565. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  7566.     AH = 94h
  7567.     AL = mode
  7568.         00h NTNX compatibility
  7569.         DX = NTNX printer number (see AH=88h)
  7570.         01h MW386
  7571.         DX = MW386 printer number
  7572.         02h MW386 v2+
  7573.         BX = logical printer number
  7574.         DX = MW386 printer number
  7575. Return: AL = status (see AH=81h)
  7576. Note:    modes 00h and 01h affect only logical LPT1
  7577. SeeAlso: AH=8Bh,AH=95h
  7578. ----------1795-------------------------------
  7579. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  7580.     AH = 95h
  7581.     AL = mode
  7582.         00h NTNX compatibility
  7583.         Return: DX = NTNX printer number (see AH=88h)
  7584.                 (FFFFh if current printer not compatible with NTNX)
  7585.         01h MW386
  7586.         Return: DX = MW386 printer number
  7587.         02h MW386 v2+
  7588.         BX = logical device number
  7589.             00h-03h = LPT1-LPT4
  7590.             04h-07h = COM1-COM4
  7591.         Return: DX = MW386 printer number (FFFFh = none)
  7592. Return: AL = status (see AH=81h)
  7593. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  7594. SeeAlso: AH=94h
  7595. ----------1796-------------------------------
  7596. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  7597.     AH = 96h
  7598.     AL = 00h
  7599. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  7600.       returning
  7601. SeeAlso: INT 14/AH=24h
  7602. ----------1797-------------------------------
  7603. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  7604.     AH = 97h
  7605.     AL = mode
  7606.         00h NTNX compatibility
  7607.         02h MW386 v2+
  7608.         BX = logical device number
  7609.             00h-03h = LPT1-LPT4
  7610.             04h-07h = COM1-COM4
  7611.     CH,CL,DH = three character break sequence
  7612.     DL = subfunction
  7613.         00h set break string
  7614.         else reset break
  7615. Return: AL = status (see AH=81h)
  7616. Notes:    mode 00h affects only logical LPT1
  7617.     when the break string is encountered, the spool file will be closed and
  7618.       queued for printing automatically
  7619.     the break string is not permanently saved, and will be reset each time
  7620.       MW386 or the user is rebooted
  7621. SeeAlso: AH=9Bh
  7622. ----------1798-------------------------------
  7623. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  7624.     AH = 98h
  7625.     AL = 00h
  7626.     DL = printer number (FFh=current)
  7627. Return: AL = status
  7628.         00h successful
  7629.         01h incorrect printer
  7630.         02h task not found
  7631. Note:    MW386 supports this function for compatibility only; it is a NOP
  7632. ----------1799-------------------------------
  7633. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  7634.     AH = 99h
  7635.     AL = mode
  7636.         00h NTNX compatibility
  7637.         DL = NTNX printer number (see AH=88h)
  7638.             (FFh = task's current logical LPT1)
  7639.         DH = mode
  7640.             bit 0: get mode if 1, set mode if 0
  7641.             1: private ("attached")
  7642.             2: direct instead of spooled
  7643.             3-7 reserved (0)
  7644.         01h MW386
  7645.         DX = MW386 printer number
  7646.         CL = mode (as for DH above)
  7647. Return: AL = status (see AH=81h)
  7648.     DH = mode (bits 1 and 2 set as above)
  7649.     DL = printer owner's user number if not spooled
  7650. ----------179A-------------------------------
  7651. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  7652.     AH = 9Ah
  7653.     AL = mode
  7654.         00h NTNX compatibility
  7655.         DX = NTNX printer number (see AH=88h)
  7656.             (FFFFh = current logical LPT1)
  7657.         01h MW386
  7658.         DX = MW386 printer number
  7659.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  7660. Return: AL = status (see AH=81h)
  7661. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  7662.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  7663. SeeAlso: AH=A4h
  7664. ----------179B-------------------------------
  7665. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  7666.     AH = 9Bh
  7667.     AL = mode
  7668.         00h NTNX compatibility
  7669.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  7670.         01h MW386
  7671.         CX = timeout value in seconds (00h = never)
  7672.         02h MW386 v2+
  7673.         BX = logical device number
  7674.             00h-03h = LPT1-LPT4
  7675.             04h-07h = COM1-COM4
  7676.         CX = timeout value in seconds (00h = never)
  7677. Return: AL = status (see AH=81h)
  7678. Notes:    modes 00h and 01h affect only the current logical LPT1
  7679.     if no data is sent to a printer for the specified amount of time, the
  7680.       spool file will be closed and queued for printing automatically
  7681. SeeAlso: AH=97h
  7682. ----------17A0-------------------------------
  7683. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  7684.     AH = A0h
  7685.     AL = mode
  7686.         00h NTNX compatibility
  7687.         DX = ??? (NTNX, MW386 v1.x only)
  7688.         02h MW386 v2+
  7689.         BX = logical device number
  7690.             00h-03h = LPT1-LPT4
  7691.             04h-07h = COM1-COM4
  7692.     CX:SI -> ASCIZ pathname
  7693. Return: AL = status (see AH=81h)
  7694. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  7695.       the original file to be modified or deleted while the copy is printed
  7696.     in mode 00h, the file is printed on logical LPT1
  7697. SeeAlso: AH=90h
  7698. ----------17A4-------------------------------
  7699. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  7700.     AH = A4h
  7701.     AL = new state
  7702.         00h form feed after end of print job disabled
  7703.         01h form feed enabled
  7704. Return: AL = status (see AH=81h)
  7705. Note:    only affects the current logical LPT1
  7706. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  7707. ----------17A6-------------------------------
  7708. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  7709.     AH = A6h
  7710.     AL = new state
  7711.         00h banner page before print job disabled
  7712.         01h banner page enabled
  7713. Return: AL = status (see AH=81h)
  7714. Note:    only affects the current logical LPT1
  7715. SeeAlso: AH=A4h
  7716. ----------17A7-------------------------------
  7717. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  7718.     AH = A7h
  7719.     AL = spool flags
  7720.         bit 0: banner page enabled (see AH=A4h)
  7721.         1: form feed enabled (see AH=A6h)
  7722.         2-6: reserved (0)
  7723.         7: set flags if 1, get flags if 0
  7724.     BX = logical device number
  7725.         00h-03h = LPT1-LPT4
  7726.         04h-07h = COM1-COM4
  7727. Return: AL = status (see AH=81h)
  7728. Note:    the documentation does not state which register contains the result of
  7729.       a GET
  7730. SeeAlso: AH=A4h,AH=A6h
  7731. ----------17A8-------------------------------
  7732. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  7733.     AH = A8h
  7734.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  7735. Return: AL = status (see AH=81h)
  7736. Note:    allows application to specify banner page filename for spool files
  7737.       collected from the application's printer output
  7738. SeeAlso: AH=A9h
  7739. ----------17A9-------------------------------
  7740. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  7741.     AH = A9h
  7742.     AL = new spool drive (2=C:,3=D:,etc)
  7743. Return: AL = status (see AH=81h)
  7744. Note:    does not remove previous spooling directory since jobs may be pending
  7745. SeeAlso: AH=A8h
  7746. ----------17AA-------------------------------
  7747. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  7748.     AH = AAh
  7749.     AL = mode
  7750.         00h NTNX
  7751.         DX = NTNX printer number (see AH=88h)
  7752.         01h MW386
  7753.         DX = MW386 printer number
  7754. Return: AH = instantaneous printer status
  7755.         00h printer ready
  7756.         01h not ready
  7757.         12h off line
  7758.         13h out of paper
  7759.         14h general device failure
  7760.         15h device timeout
  7761.         16h bad device number
  7762. ----------17AF-------------------------------
  7763. INT 17 - Alloy MW386 - CHECK SPOOLER
  7764.     AH = AFh
  7765. Return: AX = 55AAh if spooler available
  7766. ----------17C0-------------------------------
  7767. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  7768.     AH = C0h
  7769.     DX = printer port (0-3)
  7770. Return: ES:BX -> control block (see below)
  7771. SeeAlso: AH=C1h
  7772.  
  7773. Format of control block:
  7774. Offset    Size    Description
  7775.  00h    WORD    printer number
  7776.  02h    WORD    address of printer status port
  7777.  04h    WORD    number of first record in queue
  7778.  06h    WORD    number of last record in queue
  7779.  08h    DWORD    characters already printed
  7780.  0Ch    DWORD    number of characters remaining
  7781.  10h    DWORD    pointer to dequeue buffer
  7782.  14h    DWORD    previous count of characters printed
  7783.  18h    DWORD    number of clock ticks taken to print them
  7784.  1Ch    WORD    offset of next character to output
  7785.  1Eh    WORD    offset of next character to print
  7786.  20h    WORD    pointer to spooling queue record
  7787.  22h    BYTE    current spooling status
  7788.  23h    BYTE    current printer status:
  7789.         00h OK
  7790.         01h not ready
  7791.         02h paused with message
  7792.         03h paused
  7793.         04h initializing
  7794.         FEh non-existent port
  7795.         FFh not spooled
  7796.  24h    BYTE    current control record type
  7797.  25h    WORD    observed printer speed
  7798.  27h    WORD    characters to print per service
  7799.  29h    BYTE    01h if disk write needed
  7800.  2Ah    BYTE    01h if queued data should be flushed
  7801.  2Bh    BYTE    01h to update cps status
  7802. ----------17C1--------------------------------
  7803. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  7804.     AH = C1h
  7805.     DX = printer port (0-3)
  7806.     DS:SI -> ASCIIZ string to save for display
  7807. Note:    flushes pending writes
  7808. SeeAlso: AH=C0h,AH=C2h
  7809. ----------17C2-------------------------------
  7810. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  7811.     AH = C2h
  7812.     DX = printer port (0-3)
  7813. SeeAlso: AH=C3h
  7814. ----------17C3-------------------------------
  7815. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  7816.     AH = C3h
  7817.     DX = printer port (0-3)
  7818. SeeAlso: AH=C2h,AH=C7h
  7819. ----------17C4-------------------------------
  7820. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  7821.     AH = C4h
  7822. Return: DI = B0BFh
  7823.     SI = segment
  7824. ----------17C5-------------------------------
  7825. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  7826.     AH = C5h
  7827.     DX = printer port (0-3)
  7828. Note:    cancels up to the pause record 
  7829. ----------17C6-------------------------------
  7830. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  7831.     AH = C6h
  7832.     DX = printer port (0-3)
  7833. Return: AX = 0 printer not active or at pause
  7834.        = 1 printer busy
  7835. ----------17C7-------------------------------
  7836. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  7837.     AH = C7h
  7838.     DX = printer port (0-3)
  7839. SeeAlso: AH=C3h
  7840. ----------17CD00-----------------------------
  7841. INT 17 - INSET - EXECUTE COMMAND STRING
  7842.     AX = CD00h
  7843.     DS:DX -> ASCIZ command string (max 80 bytes)
  7844. Return: CX = 07C2h (1986d)
  7845. Note:    user interface menus pop up after last command, unless that command
  7846.     exits INSET
  7847. ----------17CD01-----------------------------
  7848. INT 17 - INSET - GET IMAGE SIZE
  7849.     AX = CD01h
  7850.     DS:DX -> ASCIZ name of image file
  7851. Return: AX = height in 1/720th inch
  7852.     BX = width in 1/720th inch
  7853.     CX = 07C2h (1986d)
  7854. ----------17CD02-----------------------------
  7855. INT 17 - INSET - INITIALIZE
  7856.     AX = CD02h
  7857. Return: CX = 07C2h (1986d)
  7858. Note:    all open files are closed and the printer is reset
  7859. SeeAlso: AX=CD04h
  7860. ----------17CD03-----------------------------
  7861. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  7862.     AX = CD03h
  7863. Return: CX = 07C2h (1986d)
  7864. ----------17CD04-----------------------------
  7865. INT 17 - INSET - INITIALIZE LINKED MODE
  7866.     AX = CD04h
  7867.     ES:SI -> FAR routine for linked mode
  7868. Return: CX = 07C2h
  7869. Note:    calling sequence for linked-mode routine
  7870.     AL = 00h send character in BL to printer
  7871.        = 01h send CX bytes from DS:DX to printer
  7872.        = 02h move print head to horizontal starting position of image
  7873.     return code for linked-mode routine:
  7874.     AX = 0000h success
  7875.        = 0001h failure
  7876. SeeAlso: AX=CD02h,AX=CD08h
  7877. ----------17CD05-----------------------------
  7878. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  7879.     AX = CD05h
  7880.     DS:DX -> ASCIZ name of PIX file
  7881.     CX = left margin of text in 1/720th inch
  7882. Return: AH = printer type
  7883.         00h page-oriented (multiple images may be placed side-by-side)
  7884.         01h line-oriented (use AX=CD06h for vertical paper movement)
  7885.     CX = 07C2h (1986d)
  7886. SeeAlso: AX=CD07h
  7887. ----------17CD06-----------------------------
  7888. INT 17 - INSET - GRAPHICS LINE FEED
  7889.     AX = CD06h
  7890. Return: AH = completion status
  7891.         00h image complete
  7892.         01h image incomplete
  7893.     CX = 07C2h (1986d)
  7894. SeeAlso: AX=CD09h
  7895. ----------17CD07-----------------------------
  7896. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  7897.     AX = CD07h
  7898. Return: CX = 07C2h
  7899. SeeAlso: AX=CD05h
  7900. ----------17CD08-----------------------------
  7901. INT 17 - INSET - CANCEL LINK MODE
  7902.     AX = CD08h
  7903. Return: CX = 07C2h
  7904. SeeAlso: AX=CD04h
  7905. ----------17CD09-----------------------------
  7906. INT 17 - INSET - ALTER TEXT LINE SPACING
  7907.     AX = CD09h
  7908.     CX = line spacing in 1/720th inch
  7909. Return: CX = 07C2h
  7910. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  7911. SeeAlso: AX=CD06h
  7912. ----------17CD0A-----------------------------
  7913. INT 17 - INSET - GET SETUP
  7914.     AX = CD0Ah
  7915.     DS:DX -> buffer for IN.SET data
  7916. Return: CX = 07C2h
  7917. ----------17CD0B-----------------------------
  7918. INT 17 - INSET - START GETTING SCALED IMAGE
  7919.     AX = CD0Bh
  7920.     DS:SI -> ASCIZ pathname of .PIX file
  7921.     BX = number of bitplanes
  7922.     CX = number of rows in output bitmap
  7923.     DX = number of columns in output bitmap
  7924. Return: AX = status
  7925.         0000h OK
  7926.         FFFFh error    
  7927. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  7928. ----------17CD0C-----------------------------
  7929. INT 17 - INSET - GET NEXT IMAGE STRIP
  7930.     AX = CD0Ch
  7931. Return:    AX = status
  7932.         0000h OK but not complete
  7933.         0001h OK and image complete
  7934.         FFFFh error
  7935.     DS:SI -> buffer (max 4K) for bit map strip 
  7936.     CX = start row
  7937.     DX = number of rows
  7938.     BX = offset in bytes between bit planes
  7939. Note:    buffer may be overwritten by subsequent calls
  7940. SeeAlso: AX=CD0Bh
  7941. ----------17F0-------------------------------
  7942. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  7943.     AH = F0h
  7944.     DX = printer port (0-3)
  7945. Return: AX = 0001h Jetstream present
  7946.          else  non-Jetstream port
  7947. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  7948.       to drive printers at up to 80000 characters per second
  7949. ----------17F1-------------------------------
  7950. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  7951.     AH = F1h
  7952.     CX = data buffer length
  7953.     DX = printer port (0-3)
  7954.     DS:SI -> data buffer
  7955. Return: AX = status
  7956.         0000h printer not ready (see also AH=02h)
  7957.         other printing started
  7958. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  7959. ----------17F2-------------------------------
  7960. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  7961.     AH = F2h
  7962.     DX = printer port (0-3)
  7963. Return: AX = status
  7964.         0000h prior print request finished
  7965.         other number of characters left to print
  7966. SeeAlso: AH=02h,AH=F1h,AH=F3h
  7967. ----------17F3-------------------------------
  7968. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  7969.     AH = F3h
  7970.     DX = printer port (0-3)
  7971. Return: AX = number of unprinted characters due to abort
  7972. SeeAlso: AH=F1h,AH=F4h
  7973. ----------17F4-------------------------------
  7974. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  7975.     AH = F4h
  7976.     DX = printer port (0-3)
  7977.     DS:DS -> FAR post address (called with interrupts on)
  7978. SeeAlso: AH=F1h,AH=F3h
  7979. ----------17F5-------------------------------
  7980. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  7981.     AH = F5h
  7982.     CX = data buffer length
  7983.     DX = printer port (0-3)
  7984.     DS:SI -> data buffer (32-bit physical address)
  7985. Return: AX = status
  7986.         0000h printer not ready (see also AH=02h)
  7987.         other printing started
  7988. SeeAlso: AH=F1h
  7989. ----------18---------------------------------
  7990. INT 18 - START CASSETTE BASIC
  7991. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  7992.       unpredicatable on compatibles; this interrupt often reboots the
  7993.       system, and often has no effect at all
  7994. SeeAlso: INT 86"NetBIOS"
  7995. ----------1800-------------------------------
  7996. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  7997.     AH = 00h
  7998. Return: AX = keystroke
  7999. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  8000. ----------1801-------------------------------
  8001. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  8002.     AH = 01h
  8003. Return: ZF set if no keystroke available
  8004.     ZF clear if keystroke available
  8005.         AX = keystroke
  8006. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  8007. ----------1802-------------------------------
  8008. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  8009.     AH = 02h
  8010. Return: AL = shift flags
  8011. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  8012. ----------1803-------------------------------
  8013. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  8014.     AH = 03h
  8015.     ???
  8016. Return: ???
  8017. SeeAlso: AH=00h,AH=04h
  8018. ----------1804-------------------------------
  8019. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  8020.     AH = 04h
  8021.     ???
  8022. Return: ???
  8023. Note:    details are not available at this time
  8024. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  8025. ----------18---------------------------------
  8026. INT 18 - NEC PC-9800 series - VIDEO
  8027.     AH = function
  8028.         0Ah set video mode
  8029.         0Bh get video mode
  8030.         0Ch start text screen display
  8031.         0Dh end text screen display
  8032.         0Eh set single display area
  8033.         0Fh set multiple display area
  8034.         10h set cursor shape
  8035.         11h display cursor
  8036.         12h terminate cursor
  8037.         13h set cursor position
  8038.         14h read font patter
  8039.         16h initialize text video RAM
  8040.         1Ah define user character
  8041.     ???
  8042. Return: ???
  8043. Notes:    details are not available at this time
  8044.     text video RAM is located at segments A000h (characters) and A200h
  8045.       (attributes)
  8046. ----------19---------------------------------
  8047. INT 19 - SYSTEM - BOOTSTRAP LOADER
  8048.    Reboot the system without clearing memory or restoring interrupt vectors.
  8049.    Because interrupt vectors are preserved, this interrupt usually causes a
  8050.    system hang if any TSRs have hooked vectors from 00h through 1Ch,
  8051.    particularly INT 08.
  8052.  
  8053.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  8054.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  8055.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  8056.    contain a master bootstrap loader and a partition table.  After loading the
  8057.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  8058.    control.  It will scan the partition table for an active partition, and will
  8059.    then load the operating system's bootstrap loader (contained in the first
  8060.    sector of the active partition) and give it control.
  8061.  
  8062.    True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  8063.    boot sector.
  8064.  
  8065. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  8066.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  8067.       a reset, store 0000h at 0040h:0072h before jumping.
  8068.     VDISK.SYS hooks this interrupt to allow applications to find out how
  8069.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  8070.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  8071.       at the beginning of its INT 19 handler segment, thus causing some
  8072.       programs to overwrite extended memory which is already in use.
  8073.     default handler is at F000h:E6F2h for 100% compatible BIOSes
  8074. SeeAlso: INT 14/AH=17h,INT 18
  8075.  
  8076. Format of VDISK header block (at beginning of INT 19 handler's segment):
  8077. Offset    Size    Description
  8078.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  8079.  12h 11 BYTEs    signature string "VDISK  Vn.m" for VDISK.SYS version n.m
  8080.  1Dh 15 BYTEs    n/a
  8081.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  8082.  
  8083. Format of hard disk master boot sector:
  8084. Offset    Size    Description
  8085.  00h 446 BYTEs    Master bootstrap loader code
  8086. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  8087. 1CEh 16 BYTEs    partition record for partition 2
  8088. 1DEh 16 BYTEs    partition record for partition 3
  8089. 1EEh 16 BYTEs    partition record for partition 4
  8090. 1FEh    WORD    signature, AA55h indicates valid boot block
  8091.  
  8092. Format of partition record:
  8093. Offset    Size    Description
  8094.  00h    BYTE    boot indicator (80h = active partition)
  8095.  01h    BYTE    partition start head
  8096.  02h    BYTE    partition start sector (bits 0-5)
  8097.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  8098.  04h    BYTE    operating system indicator (see below)
  8099.  05h    BYTE    partition end head
  8100.  06h    BYTE    partition end sector (bits 0-5)
  8101.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  8102.  08h    DWORD    sectors preceding partition
  8103.  0Ch    DWORD    length of partition in sectors
  8104.  
  8105. Values for operating system indicator:
  8106.  00h empty
  8107.  01h DOS 12-bit FAT
  8108.  02h XENIX root file system
  8109.  03h XENIX /usr file system (obsolete)
  8110.  04h DOS 16-bit FAT
  8111.  05h DOS 3.3+ extended partition
  8112.  06h DOS 3.31+ Large File System
  8113.  07h QNX
  8114.  07h OS/2 HPFS
  8115.  07h Advanced Unix
  8116.  08h AIX bootable partition, SplitDrive
  8117.  09h AIX data partition
  8118.  09h Coherent filesystem
  8119.  0Ah OPUS
  8120.  0Ah Coherent swap partition
  8121.  10h OPUS
  8122.  40h VENIX 80286
  8123.  50h Disk Manager, read-only partition
  8124.  51h Novell???
  8125.  51h Disk Manager, read/write partition
  8126.  52h CP/M
  8127.  52h Microport System V/386
  8128.  56h GoldenBow VFeature
  8129.  61h SpeedStor
  8130.  63h Unix SysV/386, 386/ix
  8131.  63h Mach, MtXinu BSD 4.3 on Mach
  8132.  63h GNU HURD
  8133.  64h Novell NetWare
  8134.  75h PC/IX
  8135.  80h Minix v1.1 - 1.4a
  8136.  81h Minix v1.4b+
  8137.  81h Linux
  8138.  82h Linux Swap partition (planned)
  8139.  93h Amoeba file system
  8140.  94h Amoeba bad block table
  8141.  B7h BSDI file system (secondarily swap)
  8142.  B8h BSDI swap partition (secondarily file system)
  8143.  C6h DR-DOS 6.0 LOGIN.EXE-secured partition
  8144.  DBh CP/M, Concurrent CP/M, Concurrent DOS
  8145.  DBh CTOS (Convergent Technologies OS)
  8146.  E1h SpeedStor 12-bit FAT extended partition
  8147.  E4h SpeedStor 16-bit FAT extended partition
  8148.  F2h DOS 3.3+ secondary
  8149.  FEh LANstep
  8150.  FFh Xenix bad block table
  8151. ----------1A00-------------------------------
  8152. INT 1A - TIME - GET SYSTEM TIME
  8153.     AH = 00h
  8154. Return: CX:DX = number of clock ticks since midnight
  8155.     AL = midnight flag, nonzero if midnight passed since time last read
  8156. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  8157.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  8158.       it, leading to loss of a day if two consecutive midnights pass
  8159.       without a request for the time (e.g. if the system is on but idle)
  8160. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  8161. ----------1A01-------------------------------
  8162. INT 1A - TIME - SET SYSTEM TIME
  8163.     AH = 01h
  8164.     CX:DX = number of clock ticks since midnight
  8165. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  8166. ----------1A02-------------------------------
  8167. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  8168.     AH = 02h
  8169. Return: CF clear if successful
  8170.         CH = hour (BCD)
  8171.         CL = minutes (BCD)
  8172.         DH = seconds (BCD)    
  8173.         DL = daylight savings flag (00h standard time, 01h daylight time)
  8174.     CF set on error (i.e. clock not running or in middle of update)
  8175. SeeAlso: AH=00h
  8176. ----------1A03-------------------------------
  8177. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  8178.     AH = 03h
  8179.     CH = hour (BCD)
  8180.     CL = minutes (BCD)
  8181.     DH = seconds (BCD)
  8182.     DL = daylight savings flag (00h standard time, 01h daylight time)
  8183. SeeAlso: AH=01h
  8184. ----------1A04-------------------------------
  8185. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  8186.     AH = 04h
  8187. Return: CF clear if successful
  8188.         CH = century (BCD)
  8189.         CL = year (BCD)
  8190.         DH = month (BCD)
  8191.         DL = day (BCD)
  8192.     CF set on error
  8193. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  8194. ----------1A05-------------------------------
  8195. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  8196.     AH = 05h
  8197.     CH = century (BCD)
  8198.     CL = year (BCD)
  8199.     DH = month (BCD)
  8200.     DL = day (BCD)
  8201. SeeAlso: AH=04h,INT 21/AH=2Bh
  8202. ----------1A06-------------------------------
  8203. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  8204.     AH = 06h
  8205.     CH = hour (BCD)
  8206.     CL = minutes (BCD)
  8207.     DH = seconds (BCD)
  8208. Return: CF set on error (alarm already set or clock stopped for update)
  8209.     CF clear if successful
  8210. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  8211.       time
  8212. SeeAlso: AH=07h,INT 4A
  8213. ----------1A07-------------------------------
  8214. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  8215.     AH = 07h
  8216. Return: alarm disabled
  8217. Note:    does not disable the real-time clock's IRQ
  8218. SeeAlso: AH=06h,INT 70
  8219. ----------1A08-------------------------------
  8220. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  8221.     AH = 08h
  8222.     CH = hours in BCD
  8223.     CL = minutes in BCD
  8224.     DH = seconds in BCD
  8225. ----------1A09-------------------------------
  8226. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  8227.     AH = 09h
  8228. Return: CH = hours in BCD
  8229.     CL = minutes in BCD
  8230.     DH = seconds in BCD
  8231.     DL = alarm status
  8232.         00h alarm not enabled
  8233.         01h alarm enabled but will not power up system
  8234.         02h alarm will power up system
  8235. ----------1A0A-------------------------------
  8236. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  8237.     AH = 0Ah
  8238. Return: CF set on error
  8239.     CF clear if successful
  8240.         CX = count of days since Jan 1,1980
  8241. SeeAlso: AH=04h,AH=0Bh
  8242. ----------1A0B-------------------------------
  8243. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  8244.     AH = 0Bh
  8245.     CX = count of days since Jan 1,1980
  8246. Return: CF set on error
  8247.     CF clear if successful
  8248. SeeAlso: AH=05h,AH=0Ah
  8249. ----------1A10-------------------------------
  8250. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  8251.     AH = 10h
  8252.     ???
  8253. Return: ???
  8254. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  8255. ----------1A11-------------------------------
  8256. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  8257.     AH = 11h
  8258.     ???
  8259. Return: ???
  8260. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  8261. ----------1A12-------------------------------
  8262. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  8263.     AH = 12h
  8264.     ???
  8265. Return: ???
  8266. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  8267. ----------1A3601-----------------------------
  8268. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  8269.     AX = 3601h
  8270. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  8271.         ASCIZ string "WPCORP\0"
  8272. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  8273.       third party product wants to interface with it.  The third party
  8274.       product must intercept this interrupt and return the address of a
  8275.       keyboard monitor routine.
  8276.     Before checking for keyboard input, and after every key entered by the
  8277.       user, Word Perfect will call the routine whose address was provided
  8278.       in DS:SI with the following parameters:
  8279.         Entry:    AX = key code or 0
  8280.             BX = WordPerfect state flag
  8281.         Exit:    AX = 0 or key code
  8282.             BX = 0 or segment address of buffer with key codes
  8283.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  8284. SeeAlso: INT 16/AX=5500h
  8285. ----------1A6108-----------------------------
  8286. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  8287.     AX = 6108h
  8288.     STACK:    WORD    conversation ID (0000h-0009h)
  8289.         DWORD    pointer to message buffer
  8290.         WORD    length of message
  8291.         DWORD    pointer to reply buffer
  8292.         WORD    length of reply buffer
  8293.         WORD    0000h (use default "Cparams" structure)
  8294. Return: AX = status (see below)
  8295.     STACK unchanged
  8296. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8297.       which implements the Simple Network Application Protocol
  8298. SeeAlso: AX=6205h
  8299.  
  8300. Values for status:
  8301.  0000h successful
  8302.  F830h "SNAP_ABORTED"
  8303.  FC04h "SNAP_SERVERDIED"
  8304.  FC05h "SNAP_RESEND"
  8305.  FC06h "SNAP_SELECTFAILED"
  8306.  FC07h "SNAP_WRONGVERSION"
  8307.  FC08h "SNAP_INVALIDACK"
  8308.  FC09h "SNAP_TIMEOUT"
  8309.  FC0Ah "SNAP_SERVERREJECT"
  8310.  FC0Bh "SNAP_NOREPLYDUE"
  8311.  FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  8312.  FC0Dh "SNAP_NOINIT"
  8313.  FC0Eh "SNAP_SOCKETERROR"
  8314.  FC0Fh "SNAP_BUFFERLIMIT"
  8315.  FC10h "SNAP_INVALIDCID"
  8316.  FC11h "SNAP_INVALIDOP"
  8317.  FC12h "SNAP_XMITFAIL"
  8318.  FC13h "SNAP_NOMORERETRIES"
  8319.  FC14h "SNAP_BADPARMS"
  8320.  FC15h "SNAP_NOMEMORY"
  8321.  FC16h "SNAP_NOMORECONVS"
  8322.  FFFFh failed (invalid function/parameter)
  8323. ----------1A6205-----------------------------
  8324. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  8325.     AX = 6205h
  8326.     STACK:    WORD    conversation ID (0000h-0009h)
  8327.         DWORD    pointer to message
  8328.         WORD    length of message
  8329.         WORD    0000h (use default "Cparms" structure)
  8330. Return: AX = status (see AX=6108h)
  8331.     STACK unchanged
  8332. SeeAlso: AX=6108h
  8333. ----------1A6308-----------------------------
  8334. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  8335.     AX = 6308h
  8336.     STACK:    WORD    offset of ASCIZ "guardian"
  8337.         WORD    offset of ASCIZ hostname
  8338.         WORD    offset of ASCIZ server name
  8339.         WORD    offset of ASCIZ userid
  8340.         WORD    offset of ASCIZ password
  8341.         WORD    offset of password length
  8342.         WORD    offset of password type
  8343.         WORD    offset of "Cparms" structure (see below)
  8344. Return: ???
  8345.     STACK unchanged
  8346. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  8347.       to allocate a buffer)
  8348. SeeAlso: AX=6405h,AX=7202h
  8349.  
  8350. Format of Cparms structure:
  8351. Offset    Size    Description
  8352.  00h    WORD    retry delay in seconds
  8353.  02h    WORD    timeout delay in seconds
  8354.  04h    WORD    maximum buffer size
  8355.  06h    WORD    encryption level
  8356. ----------1A6405-----------------------------
  8357. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  8358.     AX = 6405h
  8359.     STACK:    WORD    conversation ID (0000h-0009h)
  8360.         DWORD    pointer to message buffer
  8361.         WORD    length of message
  8362.         WORD    0000h (use default "Cparms" structure)
  8363. Return: AX = status (see AX=6108h)
  8364.     STACK unchanged
  8365. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8366.       which implements the Simple Network Application Protocol
  8367. SeeAlso: AX=6308h
  8368. ----------1A6900-----------------------------
  8369. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  8370.     AX = 6900h
  8371. Return: AX = value used for DS by resident code
  8372. SeeAlso: AX=6A01h,AX=6F01h
  8373. ----------1A6A01-----------------------------
  8374. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  8375.     AX = 6A01h
  8376.     STACK:    WORD    number of bytes to allocate
  8377. Return: AX = offset of allocated buffer or 0000h if out of memory
  8378.     STACK unchanged
  8379. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8380.       which implements the Simple Network Application Protocol
  8381. SeeAlso: AX=6B01h
  8382. ----------1A6B01-----------------------------
  8383. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  8384.     AX = 6B01h
  8385.     STACK:    WORD    offset within SNAP data segment of previously allocated
  8386.             buffer
  8387. Return:    STACK unchanged
  8388. Note:    this call is a NOP if the specified offset is 0000h
  8389. SeeAlso: AX=6A01h
  8390. ----------1A6C04-----------------------------
  8391. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  8392.     AX = 6C04h
  8393.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  8394.         WORD    segment of source buffer
  8395.         WORD    offset of source buffer
  8396.         WORD    number of bytes to copy
  8397. Return: AX = offset of byte after last one copied to destination
  8398.     STACK unchanged
  8399. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8400.       which implements the Simple Network Application Protocol
  8401. SeeAlso: AX=6D04h
  8402. ----------1A6D04-----------------------------
  8403. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  8404.     AX = 6D04h
  8405.     STACK:    WORD    offset within SNAP data segment of source buffer
  8406.         WORD    segment of destination buffer
  8407.         WORD    offset of destination buffer
  8408.         WORD    number of bytes to copy
  8409. Return: AX = offset of byte after last one copied from source
  8410.     buffer filled
  8411.     STACK unchanged
  8412. SeeAlso: AX=6C04h
  8413. ----------1A6E01-----------------------------
  8414. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  8415.     AX = 6E01h
  8416.     STACK:    WORD    new value for ???
  8417. Return:    AX = old value of ???
  8418.     STACK unchanged
  8419. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8420.       which implements the Simple Network Application Protocol
  8421. ----------1A6F01-----------------------------
  8422. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  8423.     AX = 6F01h
  8424.     STACK: WORD 0000h
  8425. Return: AX = status
  8426.         0000h SNAP is resident
  8427.         other SNAP not present
  8428.     STACK unchanged
  8429. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8430.       which implements the Simple Network Application Protocol, and is
  8431.       required by PCVENUS (a network shell).  The combination of SNAP and
  8432.       PCVENUS allows the use of the Andrew File System as one or more
  8433.       networked drives.
  8434. SeeAlso: AX=6900h,AX=7400h
  8435. ----------1A7002-----------------------------
  8436. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  8437.     AX = 7002h
  8438.     STACK:    WORD    anchor number (0000h-0009h)
  8439.         WORD    new value for the anchor
  8440. Return: AX = status
  8441.         0000h successful
  8442.         FFFFh failed (top word on stack not in range 00h-09h)
  8443.     STACK unchanged
  8444. SeeAlso: AX=7101h
  8445. ----------1A7101-----------------------------
  8446. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  8447.     AX = 7101h
  8448.     STACK:    WORD    anchor number (0000h-0009h)
  8449. Return:    AX = anchor's value
  8450.     STACK unchanged
  8451. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8452.       which implements the Simple Network Application Protocol
  8453. SeeAlso: AX=7002h
  8454. ----------1A7202-----------------------------
  8455. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  8456.     AX = 7202h
  8457.     STACK:    WORD    conversation ID (0000h-0009h)
  8458.         WORD    offset within resident data segment of "Cparms"
  8459.             structure (see AX=6308h)
  8460. Return:    AX = status???
  8461.     STACK unchanged
  8462. SeeAlso: AX=6308h
  8463. ----------1A7302-----------------------------
  8464. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  8465.     AX = 7302h
  8466.     STACK:    WORD    conversation ID (0000h-0009h)
  8467.         WORD    offset within resident data segment of ???
  8468. Return:    AX = ???
  8469.     ???
  8470.     STACK unchanged
  8471. SeeAlso: AX=7400h
  8472. ----------1A7400-----------------------------
  8473. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  8474.     AX = 7400h
  8475. Return: AX = version (AH=major, AL=minor)
  8476. Note:    this call is only valid if SNAP is installed
  8477. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  8478. ----------1A75-------------------------------
  8479. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  8480.     AH = 75h
  8481.     AL = ???
  8482. Return: AX = ??? (0000h)
  8483. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8484.       which implements the Simple Network Application Protocol
  8485. ----------1A76-------------------------------
  8486. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  8487.     AH = 76h
  8488.     AL = ???
  8489. Return: AX = ???
  8490. ----------1A77-------------------------------
  8491. INT 1A - SNAP.EXE 3.4 - ???
  8492.     AH = 77h
  8493.     AL = ??? (at least 01h)
  8494.     STACK:    WORD    ???
  8495.         ???
  8496. Return: ???
  8497.     STACK unchanged
  8498. ----------1A7802-----------------------------
  8499. INT 1A - SNAP.EXE 3.4 - ???
  8500.     AX = 7802h
  8501.     STACK:    WORD    ???
  8502.         WORD    ???
  8503. Return: ???
  8504.     STACK unchanged
  8505. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8506.       which implements the Simple Network Application Protocol
  8507. ----------1A7F-------------------------------
  8508. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  8509.     AH = 7Fh
  8510.     ???
  8511. Return: ???
  8512. SeeAlso: AH=80h,AH=83h,AH=85h
  8513. ----------1A80-------------------------------
  8514. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  8515.     AH = 80h
  8516.     AL = 00h source is 8253 channel 2
  8517.          01h source is cassette input
  8518.          02h source is I/O channel "Audio IN"
  8519.          03h source is sound generator chip
  8520. SeeAlso: AH=7Fh,AH=83h
  8521. ----------1A8100-----------------------------
  8522. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  8523.     AX = 8100h
  8524. Return: AH > 80h if supported
  8525. ----------1A83-------------------------------
  8526. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  8527.     AH = 83h
  8528.     AL = volume (0=lowest, 7=highest)
  8529.     CX = number of bytes to play
  8530.     DX = time between sound samples (multiples of 273 nanoseconds)
  8531.     ES:BX -> sound data (array of 8-bit PCM samples)
  8532. Return: ???
  8533. Notes:    this call returns immediately while the sound plays in the
  8534.       background
  8535.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  8536.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  8537.       device underflows to allow another INT 1A/AH=83h for seamless
  8538.       playing of long sounds.
  8539. SeeAlso: AH=84h,INT 15/AH=91h
  8540. ----------1A84-------------------------------
  8541. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  8542.     AH = 84h
  8543. Return: ???
  8544. SeeAlso: AH=83h,AH=85h
  8545. ----------1A85-------------------------------
  8546. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  8547.     AH = 85h
  8548.     ???
  8549. Return: ???
  8550. SeeAlso: AH=7Fh,AH=83h
  8551. ----------1AA0-------------------------------
  8552. INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK
  8553.     AH = A0h
  8554. Return: AH = B0h if installed
  8555.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  8556.         ES = code segment
  8557.         ES:BX -> name of current spool file
  8558.         ES:SI -> current despool file
  8559.         CL = 00h despooler is disabled
  8560.            = 41h despooler is enabled
  8561.         CH = 00h spooler is disabled
  8562.            = 41h spooler is enabled
  8563.         DL = 00h despooler is currently active printing a file
  8564.            = 41h despooler is standing by
  8565.         DH = 00h ???
  8566.            = 41h ???
  8567.         DI = 0000h ???
  8568.          0001h ???
  8569. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  8570.       Software Company
  8571. SeeAlso: AH=ABh,AH=C0h,AH=D0h
  8572. ----------1AAB-------------------------------
  8573. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  8574.     AH = ABh
  8575. Return:    AH = BAh if installed
  8576.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  8577.         ES = code segment
  8578.         ES:BX -> name of current spool file
  8579.         ES:SI -> current despool file
  8580.         CL = 00h despooler is disabled
  8581.            = 41h despooler is enabled
  8582.         CH = 00h spooler is disabled
  8583.            = 41h spooler is enabled
  8584.         DL = 00h despooler is currently active printing a file
  8585.            = 41h despooler is standing by
  8586.         DH = 00h ???
  8587.            = 41h ???
  8588.         DI = 0000h ???
  8589.          0001h ???
  8590. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  8591.       Software Company
  8592. SeeAlso: AH=A0h,AH=ACh,AH=ADh
  8593. ----------1AAC-------------------------------
  8594. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  8595.     AH = ACh
  8596. Return: (see AH=ABh)
  8597. Note:    this function is identical to AH=ABh
  8598. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  8599. ----------1AAD-------------------------------
  8600. INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
  8601.     AH = ADh
  8602.     AL = function code
  8603.         02h enable spooler only
  8604.         03h enable the despooler
  8605.         04h disable the despooler
  8606.         08h inhibit popup menu
  8607.         09h enable popup menu
  8608.         0Ah ???
  8609.         0Bh disable the spooler
  8610.         0Ch start despooler after last successfully printed document???
  8611.         0Dh start despooler at the exact point where it last left off???
  8612.         0Eh pop up the menu
  8613.         0Fh ???
  8614.         11h ???
  8615.         14h ???
  8616.         15h ???
  8617.         16h ???
  8618.         17h ???
  8619.         18h ???
  8620.         19h ???
  8621.         20h clear file pointed to by the despooler???
  8622.         21h    ???
  8623.         22h    ???
  8624.         23h ???
  8625.         30h ???
  8626. Return: AH = 00h if successful
  8627. SeeAlso: AH=ABh
  8628. ----------1AC0-------------------------------
  8629. INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK
  8630.     AH = C0h
  8631. Return: (see AH=A0h)
  8632. Note:    this call is identical to AH=A0h
  8633. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  8634. ----------1AD0-------------------------------
  8635. INT 1A - Disk Spool II v2.07 - FUNCTION CALLS
  8636.     AH = D0h
  8637.     AL = function code
  8638.         01h enable spooler and despooler
  8639.         02h enable spooler only
  8640.         03h enable despooler at beginning of file
  8641.         04h disable the despooler
  8642.         05h disable the despooler and spooler
  8643.         06h clear the spool file
  8644.         08h inhibit the popup menu
  8645.         09h enable the popup menu
  8646.         0Ah ??? (called by Disk Spool's INT 21 handler)
  8647.         0Bh disable the spooler
  8648.         0Ch start despooler after last successfully printed document
  8649.         0Dh start despooler at the exact point where it last left off
  8650.         0Eh pop up the menu
  8651.         0Fh ???
  8652.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  8653.                 when a program terminates)
  8654.         14h ???
  8655.         15h delete despool file and reset ???
  8656.         16h ??? (writes something to unknown file)
  8657.         17h ??? (writes something to despool file, then reads something
  8658.                 else and ???)
  8659.         18h ??? (reads something from despool file, and then ???)
  8660.         19h ??? (creates/truncates spool file)
  8661.         20h clear file pointed to by the despooler
  8662.         21h ??? (writes something to unknown file)
  8663.         22h ??? (writes something to spool file if spooler/despooler using
  8664.                 same file)
  8665.         23h ??? (opens/creates unknown file, then ???)
  8666.         30h ???
  8667.         31h ???
  8668.         32h beep
  8669.         33h append CRLF to spool file???
  8670.         34h ???
  8671.         35h ???
  8672.         36h ???
  8673.         37h append CRLF to spool file and start a new spool file???
  8674.         38h ???
  8675.         51h ??? (called by Disk Spool's INT 21 handler)
  8676.         52h ??? (called by Disk Spool's INT 21 handler)
  8677.         57h ???
  8678. SeeAlso: AH=A0h,AH=ADh
  8679. ----------1AF7-------------------------------
  8680. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  8681.     AH = F7h
  8682. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  8683.       time to correct for clock drift
  8684.     any AH value from F0h-F7h or F9h-FEh will perform this function in
  8685.       version 1.1, but F7h is the function called by transient portion
  8686. SeeAlso: AH=F8h,AH=FFh"RighTime"
  8687. ----------1AF8-------------------------------
  8688. INT 1A - RighTime v1.1 - ENABLE
  8689.     AH = F8h
  8690. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  8691.       time to correct for clock drift
  8692.     RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  8693.       TeSseRact program identifier based on its current state: "RighTime"
  8694.       when enabled, "RighTim"F7h when disabled.
  8695. SeeAlso: AH=F7h,AH=FFh"RighTime"
  8696. ----------1AFE-------------------------------
  8697. INT 1A - AT&T 6300 - READ TIME AND DATE
  8698.     AH = FEh
  8699. Return: BX = day count (0 = Jan 1, 1984)
  8700.     CH = hour
  8701.     CL = minute
  8702.     DH = second
  8703.     DL = hundredths
  8704. SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  8705. ----------1AFF-------------------------------
  8706. INT 1A - AT&T 6300 - SET TIME AND DATE
  8707.     AH = FFh
  8708.     BX = day count (0 = Jan 1, 1984)
  8709.     CH = hour
  8710.     CL = minute
  8711.     DH = second
  8712.     DL = hundredths
  8713. Return: ???
  8714. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  8715. ----------1AFF-------------------------------
  8716. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  8717.     AH = FFh
  8718. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  8719.       time to correct for clock drift
  8720.     upon being permanently disabled, RighTime closes the file handle
  8721.       referencing its executable (which is updated with time correction
  8722.       information every two minutes while RighTime is enabled).
  8723. ----------1B---------------------------------
  8724. INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
  8725.    called when INT 09 determines that Control-Break has been pressed
  8726. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  8727.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  8728. SeeAlso: INT 23
  8729. ----------1C---------------------------------
  8730. INT 1C - TIME - SYSTEM TIMER TICK
  8731.    called on each clock tick by the INT 08 handler
  8732. Notes:    preferred interrupt to chain when a program needs to be invoked
  8733.       regularly
  8734.     not available on NEC 9800-series PCs
  8735. SeeAlso: INT 08
  8736. ----------1D---------------------------------
  8737. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  8738. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  8739. SeeAlso: INT 10/AH=00h
  8740.  
  8741. Format of video parameters:
  8742. Offset    Size    Description
  8743.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  8744.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  8745.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  8746.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  8747.  40h    WORD    bytes in video buffer for modes 00h and 01h
  8748.  42h    WORD    bytes in video buffer for modes 02h and 03h
  8749.  44h    WORD    bytes in video buffer for modes 04h and 05h
  8750.  46h    WORD    bytes in video buffer for modes 06h and 07h
  8751.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  8752.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  8753. ----------1E---------------------------------
  8754. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  8755. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  8756. SeeAlso: INT 13/AH=0Fh,INT 41
  8757.  
  8758. Format of diskette parameter table:
  8759. Offset    Size    Description
  8760.  00h    BYTE    first specify byte
  8761.         bits 7-4: step rate
  8762.              3-0: head unload time (0Fh = 240 ms)
  8763.  01h    BYTE    second specify byte
  8764.         bits 7-1: head load time (01h = 4 ms)
  8765.                0: non-DMA mode (always 0)
  8766.  02h    BYTE    delay until motor turned off (in clock ticks)
  8767.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  8768.  04h    BYTE    sectors per track
  8769.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  8770.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  8771.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  8772.  08h    BYTE    format filler byte (default F6h)
  8773.  09h    BYTE    head settle time in milliseconds
  8774.  0Ah    BYTE    motor start time in 1/8 seconds
  8775. ----------1F---------------------------------
  8776. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  8777.    points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
  8778. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  8779.       compatible BIOSes
  8780. SeeAlso: INT 10/AX=5000h,INT 43
  8781. ---------------------------------------------
  8782.