home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / INTER34A.ZIP / INTERRUP.B < prev    next >
Encoding:
Text File  |  1993-04-03  |  352.6 KB  |  9,684 lines

  1. Interrupt List, part 2 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------t-15---------------------------------
  4. INT 15 - Microsoft TSR Specification
  5.     No additional information available at this time.
  6. --------B-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. --------m-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. --------O-1500-------------------------------
  19. INT 15 - VMiX v2+ - INSTALLATION CHECK
  20.     AH = 00h
  21. Return: DX = 0798h if installed
  22.         AX = version (AH = major, AL = minor)
  23. --------T-1500-------------------------------
  24. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  25.     AH = 00h
  26. Note:    if issued by the highest-priority task while MultiDOS is using
  27.       priority-based rather than round-robin scheduling, control will be
  28.       returned to the caller immediately
  29. SeeAlso: AH=03h"MultiDOS",AX=1000h
  30. --------B-1501-------------------------------
  31. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  32.     AH = 01h
  33. Return: CF set on error
  34.         AH = 86h no cassette present
  35.     CF clear if successful
  36. SeeAlso: AH=00h"CASSETTE"
  37. --------b-1501-------------------------------
  38. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  39.     AH = 01h
  40.     AL = NVRAM location (00h to 3Fh)
  41.     BL = NVRAM data value
  42. Return: AH = return code
  43.         00h OK
  44.         01h address bad
  45.         02h write error
  46. SeeAlso: AH=02h"Amstrad"
  47.  
  48. Format of NVRAM:
  49. Offset    Size    Description
  50.  00h    BYTE    time of day: seconds
  51.  01h    BYTE    alarm time: seconds
  52.  02h    BYTE    time of day: minutes
  53.  03h    BYTE    alarm time: minutes
  54.  04h    BYTE    time of day: hours
  55.  05h    BYTE    alarm time: hours
  56.  06h    BYTE    day of week, 1 = Sunday
  57.  07h    BYTE    day of month
  58.  08h    BYTE    month
  59.  09h    BYTE    year mod 100
  60.  0Ah    BYTE    RTC status register A
  61.         bit 7: set if date/time being updated
  62.         bits 6-4: time base speed, default 010 = 32768 Hz
  63.         bits 3-0: interrupt rate selection, default 0110 = 1024 Hz
  64.  0Bh    BYTE    RTC status register B (see below)
  65.  0Ch    BYTE    RTC status register C (read-only)
  66.         bit 7: IRQF flag
  67.         bit 6: PF flag
  68.         bit 5: AF flag
  69.         bit 4: UF flag
  70.  0Dh    BYTE    RTC status register D
  71.         bit 7: battery good
  72.  0Eh  6 BYTEs    time and date machine last used
  73.  14h    BYTE    user RAM checksum
  74.  15h    WORD    Enter key scancode/ASCII code
  75.  17h    WORD    Forward delete key scancode/ASCII code
  76.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  77.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  78.  1Dh    WORD    mouse button 1 scancode/ASCII code
  79.  1Fh    WORD    mouse button 2 scancode/ASCII code
  80.  21h    BYTE    mouse X scaling factor
  81.  22h    BYTE    mouse Y scaling factor
  82.  23h    BYTE    initial VDU mode and drive count
  83.  24h    BYTE    initial VDU character attribute
  84.  25h    BYTE    size of RAM disk in 2K blocks
  85.  26h    BYTE    initial system UART setup byte
  86.  27h    BYTE    initial external UART setup byte
  87.  28h 24 BYTEs    available for user application
  88. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  89.       the clock chip
  90.  
  91. Bitfields for RTC status register B:
  92.  bit 7    clear if normal update, set if abort update
  93.  bit 6    periodic interrupt enable
  94.  bit 5    alarm interrupt enable
  95.  bit 4    update end interrupt enable
  96.  bit 3    square wave enable
  97.  bit 2    date mode (clear = BCD, set = binary)
  98.  bit 1    24-hour format
  99.  bit 0    daylight saving time enable
  100. --------O-1501-------------------------------
  101. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  102.     AH = 01h
  103.     STACK:    WORD    object ID of requestor
  104.         DWORD    pointer to ASCIZ name of requested method
  105.             "assign" assign channel to object
  106.             "deassign" deassign channel
  107.             "cursor" set cursor on/off
  108.             "init" initialize comm port
  109.             "open" open I/O channel
  110.             "position" set cursor position
  111.             "receive" get buffered packet from comm port
  112.             "send" send buffered packet to comm port
  113.             "vio" set current virtual I/O to specified channel
  114.             "window" make window at cursor position
  115.         ---if "assign"---
  116.          WORD    object UID
  117.          WORD    caller UID/PID
  118.          DWORD    CSL with port
  119.         ---if "deassign"---
  120.          WORD    channel ID
  121.         ---if "cursor"---
  122.          WORD    channel ID (must be a SRCSINK)
  123.          WORD    new state (0000h off, 0001h on)
  124.         ---if "init"---
  125.          WORD    channel ID (must be a SRCSINK)
  126.          WORD    comm port number (00h-03h)
  127.          WORD    UART init code
  128.         ---if "open"---
  129.          WORD    channel ID
  130.         ---if "position"---
  131.          WORD    channel ID (must be a SRCSINK)
  132.          WORD    position (high byte = row, low byte = column)
  133.         ---if "receive"---
  134.          DWORD    pointer to buffer
  135.         ---if "send"---
  136.          WORD    length of buffer
  137.          DWORD    pointer to buffer
  138.         ---if "vio"---
  139.          WORD    channel ID (must be a SRCSINK)
  140.         ---if "window"---
  141.          WORD    top left (high byte = row, low byte = column)
  142.          WORD    bottom right (high byte = row, low byte = column)
  143. Return: DX:AX -> IRP structure or 0000h:0000h 
  144. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  145. --------T-1501-------------------------------
  146. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  147.     AH = 01h
  148.     AL = semaphore number (00h-3Fh)
  149. Return: AH = status
  150.         00h successful
  151.         02h invalid semaphore number
  152. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  153.       task and the call returns immediately
  154.     if the semaphore is already owned by another task, the calling task
  155.       is placed on a queue for the semaphore and suspended until it can
  156.       become owner of the semaphore
  157.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  158. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  159. --------B-1502-------------------------------
  160. INT 15 - CASSETTE - READ DATA
  161.     AH = 02h
  162.     CX = number of bytes to read
  163.     ES:BX -> buffer
  164. Return:    CF clear if successful
  165.         DX = number of bytes read
  166.         ES:BX -> byte following last byte read
  167.     CF set on error
  168.     AH = status (see below)
  169. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  170.  
  171. Values for status:
  172.  00h successful
  173.  01h CRC error
  174.  02h bad tape signals
  175.  04h no data
  176.  80h invalid command
  177.  86h no cassette present
  178. --------b-1502-------------------------------
  179. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  180.     AH = 02h
  181.     AL = NVRAM location (00h to 3Fh)
  182. Return: AH = return code
  183.         00h OK
  184.         01h address bad
  185.         02h checksum error
  186.     AL = NVRAM data value
  187. SeeAlso: AH=01h"Amstrad"
  188. --------O-1502-------------------------------
  189. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  190.     AH = 02h
  191.     STACK:    WORD    object ID of requestor
  192.         DWORD    pointer to ASCIZ name of requested method
  193.             "assign" allocate low memory block
  194.             "assign extended" allocate extended memory pages
  195.             "assign gdt" allocate GDT selector
  196.             "paged" allocate low paged memory
  197.             "paged extended" alllocate extended memory pages
  198.             "deassign" free memory block
  199.             "deassign gdt" free GDT selector
  200.             "getvpage" get physical address for virtual page
  201.             "setvpage" set physical address for virtual page
  202.             "info" get VMiX memory usage info block
  203.             "move" move contents of 32-bit memory
  204.             "newmcb" make new DOS memory control block
  205.             "owner" get process ID of MCB or PSP owner
  206.             "umb" allocate upper memory block
  207.             "video" toggle system use of vidoe memory and get stat
  208.         ---if "assign"---
  209.          WORD    number of objects
  210.          WORD    size in bytes (multiple of 512 bytes)
  211.         ---if "assign extended"---
  212.          WORD    number of objects
  213.          WORD    size in bytes (multiple of 4K)
  214.         ---if "assign gdt"---
  215.          WORD    access type (low byte)
  216.          WORD    segment size in paragraphs
  217.          DWORD    pointer to start of physical segment
  218.         ---if "paged"---
  219.          WORD    number of 512-byte pages
  220.         ---if "paged extended"
  221.          WORD    number of 4K pages
  222.         ---if "deassign"---
  223.          DWORD    pointer returned by previous allocation call
  224.         ---if "deassign gdt"---
  225.          WORD    GDT selector
  226.         ---if "getvpage"---
  227.          WORD    owner's process ID
  228.          DWORD    pointer to buffer for page structure (struct VPGE)
  229.         ---if "setvpage"---
  230.          WORD    owner's process ID
  231.          DWORD    pointer to new page structure (struct VPGE)
  232.         ---if "info"---
  233.          no additional arguments
  234.         ---if "move"
  235.          DWORD    32-bit source address
  236.          DWORD    32-bit destination address
  237.          WORD    number of words to move
  238.         ---if "newmcb"---
  239.          DWORD    pointer to new MCB's location
  240.          WORD    size of memory block
  241.          DWORD    pointer to ASCIZ name string (max 8 chars)
  242.         ---if "owner"---
  243.          WORD    MCB or PSP segment
  244.         ---if "umb"---
  245.          WORD    size in paragraphs
  246.         ---if "video"---
  247.          no additional arguments
  248. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  249. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  250. --------T-1502-------------------------------
  251. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  252.     AH = 02h
  253.     AL = semaphore number (00h-3Fh)
  254. Return: AH = status
  255.         00h successful
  256.         01h not semaphore owner
  257.         02h invalid semaphore number
  258. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  259.       queue will become the new owner and be reawakened
  260.     do not use within an interrupt handler
  261. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  262. --------B-1503-------------------------------
  263. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  264.     AH = 03h
  265.     CX = number of bytes to write
  266.     ES:BX -> data buffer
  267. Return: CF clear if successful
  268.         ES:BX -> byte following last byte written
  269.     CF set on error
  270.     AH = status (see AH=02h"CASSETTE")
  271.     CX = 0000h
  272. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  273. --------V-1503-------------------------------
  274. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  275.     AH = 03h
  276.     AL = value (I,R,G,B bits)
  277. SeeAlso: AH=04h"Amstrad"
  278. --------O-1503-------------------------------
  279. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  280.     AH = 03h
  281.     STACK:    DWORD    pointer to ASCII prompt
  282.         WORD    field outline character
  283.         WORD    length of input field (max 7Fh)
  284.         DWORD    address of pointer to input buffer
  285. Return: AX = length of input (input buffer is padded with blanks)
  286. SeeAlso: AH=04h"VMiX"
  287. --------T-1503-------------------------------
  288. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  289.     AH = 03h
  290.     DX = number of time slices to remain suspended
  291. Return: after specified interval has elapsed
  292. Note:    when priority-based scheduling is in use, high-priority tasks should
  293.       use this function to yield the processor
  294. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  295. --------B-1504-------------------------------
  296. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  297.     AH = 04h
  298.     ES:DI -> results buffer length 20h for System Parameter Table
  299.     DS = segment containing ABIOS RAM extensions (zero if none)
  300. Return: AH = 00h success: results at ES:DI
  301.     CF set on failure
  302. SeeAlso: AH=05h"ABIOS",C1h
  303.  
  304. Format of ABIOS System Parameter Table:
  305. Offset    Size    Description
  306.  00h    DWORD    FAR address of ABIOS Common Start Routine
  307.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  308.  08h    DWORD    FAR address of ABIOS Time-out Routine
  309.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  310.  0Eh 16 BYTEs    reserved
  311.  1Eh    WORD    number of entries in initialization table
  312. --------V-1504-------------------------------
  313. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  314.     AH = 04h
  315.     AL = value (RDSEL1 and RDSEL0)
  316. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  317. --------O-1504-------------------------------
  318. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  319.     AH = 04h
  320.     STACK:    DWORD    control string
  321.         DWORD    array of arguments
  322. SeeAlso: AH=03h"VMiX"
  323. --------T-1504-------------------------------
  324. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  325.     AH = 04h
  326.     AL = mailbox number (00h-3Fh)
  327.     CX = message length in bytes
  328.     DS:SI -> message
  329. Return: AH = status
  330.         00h successful
  331.         01h out of message memory
  332.         02h invalid mailbox number
  333. Note:    the message is copied into a system buffer; the caller may immediately
  334.       reuse its buffer
  335. SeeAlso: AH=05h"MultiDOS"
  336. --------B-1505-------------------------------
  337. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  338.     AH = 05h
  339.     ES:DI -> results buffer length (18h * Number_of_Entries)
  340.     DS = segment containing ABIOS RAM extensions (zero if none)
  341. Return: AH = 00h success: results at ES:DI
  342.     CF set on failure
  343. SeeAlso: AH=04h"ABIOS",C1h
  344.  
  345. Format of one entry of ABIOS Initialization Table:
  346. Offset    Size    Description
  347.  00h    WORD    device ID
  348.  02h    WORD    number of Logical IDs
  349.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  350.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  351.  0Ah    WORD    request block length
  352.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  353.  0Eh    WORD    Data Pointers length (in Common Data Area)
  354.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  355.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  356.  12h  6 BYTEs    reserved
  357. --------V-1505-------------------------------
  358. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  359.     AH = 05h
  360.     AL = value (I,R,G,B bits)
  361. SeeAlso: AH=04h"Amstrad"
  362. --------O-1505-------------------------------
  363. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  364.     AH = 05h
  365. Return: AX = process ID
  366. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  367. --------T-1505-------------------------------
  368. INT 15 - MultiDOS Plus - CHECK MAILBOX
  369.     AH = 05h
  370.     AL = mailbox number (00h-3Fh)
  371. Return: AH = status
  372.         00h successful
  373.         DX = length of first message in queue, 0000h if no message
  374.         02h invalid mailbox number
  375. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  376. --------b-1506-------------------------------
  377. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  378.     AH = 06h
  379. Return: BX = version number
  380. --------O-1506-------------------------------
  381. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  382.     AH = 06h
  383.     STACK:    WORD    process ID
  384. Return: DX:AX -> process control block
  385. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  386. --------T-1506-------------------------------
  387. INT 15 - MultiDOS Plus - READ MAILBOX
  388.     AH = 06h
  389.     AL = mailbox number (00h-3Fh)
  390.     CX = size of buffer in bytes
  391.     ES:DI -> buffer for message
  392. Return: AH = status
  393.         00h successful
  394.         CX = number of bytes copied
  395.         DX = actual length of message
  396.         02h invalid mailbox number
  397. Note:    if the caller's buffer is not large enough, the message is truncated
  398.       and the remainder is lost
  399. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  400. --------O-1507-------------------------------
  401. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  402.     AH = 07h
  403.     STACK:    WORD    object type
  404. Return: DX:AX -> object control block
  405. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  406. --------T-1507-------------------------------
  407. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  408.     AH = 07h
  409.     BX:CX = entry point of new task
  410.     DX = stack size in paragraphs
  411. Return: AH = status
  412.         00h successful
  413.         01h no free task control blocks
  414.         02h no free memory for task's stack
  415. Note:    execution returns immediately to calling task
  416. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  417. --------O-1508-------------------------------
  418. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  419.     AH = 08h
  420.     STACK:    WORD    channel ID
  421. Return: DX:AX -> channel control block
  422. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  423. --------T-1508-------------------------------
  424. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  425.     AH = 08h
  426. Return: calling task terminated, so execution never returns to caller
  427. Notes:    an internal task must be terminated with this function rather than a
  428.       DOS termination function
  429.     task's stack space is returned to parent task's memory pool
  430. SeeAlso: AH=07h"MultiDOS"
  431. --------O-1509-------------------------------
  432. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  433.     AH = 09h
  434.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  435.         WORD    subqueue ID
  436. Return: AX = queue ID
  437. SeeAlso: AH=0Ah"VMiX"
  438. --------T-1509-------------------------------
  439. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  440.     AH = 09h
  441.     AL = new priority
  442. Note:    the priority has different meanings depending on whether priority-
  443.       based or round-robin scheduling is used
  444. SeeAlso: AH=07h"MultiDOS"
  445. --------O-150A-------------------------------
  446. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  447.     AH = 0Ah
  448.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  449.         WORD    ID of current element in queue chain
  450. Return: AX = ID of next element
  451. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  452. --------T-150A-------------------------------
  453. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  454.     AH = 0Ah
  455.     AL = new interval
  456.         00h = 55.0 ms (default)
  457.         80h = 27.5 ms
  458.         40h = 13.75 ms
  459.         20h = 6.88 ms
  460.         10h = 3.44 ms
  461.         08h = 1.72 ms
  462. SeeAlso: AH=03h"MultiDOS"
  463. --------O-150B-------------------------------
  464. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  465.     AH = 0Bh
  466.     STACK:    WORD    caller's UID
  467.         DWORD    pointer to ASCIZ name of requested method
  468.             "abort" abort current send/receive on comm port
  469.             "block" start/end critical section
  470.             "close" terminate interrupt-drive comm I/O
  471.             "open" prepare comm port for interrupt-driven I/O
  472.             "delay" set delay timer and wait
  473.             "hibernate" put process to sleep
  474.             "ints" enable/disable interrupt-driven INT 14h
  475.             "length" get current send/receive buffer offsets
  476.             "kswitch" switch stacks
  477.             "numproc" get number of active processes
  478.             "protocol" set protocol function for comm interrupts
  479.             "relocate" set/reset VMiX flag for relocating to himem
  480.             "status" get current open comm port status
  481.             "wake" awaken a process
  482.             "xport" get comm port polled for logins
  483.         ---if "abort"---
  484.          no additional arguments
  485.         ---if "block"---
  486.          WORD    0000h end, 0001h start
  487.         ---if "close"---
  488.          no additional arguments
  489.         ---if "open"---
  490.          WORD    comm port (00h-03h)
  491.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  492.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  493.         ---if "delay"---
  494.          WORD    time in seconds
  495.         ---if "hibernate"---
  496.          WORD    process ID
  497.         ---if "ints"---
  498.          WORD    0000h if no, 0001h if yes
  499.         ---if "length","numproc","relocate","status","xport"---
  500.          no additional arguments
  501.         ---if "kswitch"---
  502.          DWORD    pointer to new stack
  503.         ---if "protocol"---
  504.          DWORD    pointer to function (must be in low "assign"ed memory
  505.             when in 386 mode)
  506.         ---if "wake"---
  507.          WORD    process ID
  508. Return: DX:AX -> result or 0000h:0000h
  509.         ---if "length"---
  510.          BYTE    receive offset
  511.          BYTE    send offset
  512.         ---if "kswitch"---
  513.          DWORD    old stack pointer
  514.         ---if "numproc"---
  515.          WORD    number of active processes
  516.         ---if "status"---
  517.          current open comm port status
  518.         ---if "xport"---
  519.          current comm port being polled for logins
  520. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  521. --------T-150B-------------------------------
  522. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  523.     AH = 0Bh
  524. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  525.       may be restored with AH=0Ch
  526.     caller's video mode must be same as foreground task's video mode
  527.     any text written while in the background will be saved to the
  528.       foreground task's virtual screen when it switches to the background
  529.     useful if a background task wants to display a message on the
  530.       foreground screen
  531. SeeAlso: AH=0Ch"MultiDOS"
  532. --------O-150C-------------------------------
  533. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  534.     AH = 0Ch
  535.     STACK:    WORD    process ID
  536. Return: DX:AX -> TSS stack store
  537. SeeAlso: AH=00"VMiX"
  538. --------T-150C-------------------------------
  539. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  540.     AH = 0Ch
  541. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  542.       unless AH=0Bh has been called first
  543. SeeAlso: AH=0Bh"MultiDOS"
  544. --------O-150D-------------------------------
  545. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  546.     AH = 0Dh
  547.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  548.             followed by standard VMiX shell command string
  549. Return: AX = process ID or error code "SYS_ERROR"
  550. Note:    the maximum string length is 7Fh characters
  551. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  552. --------T-150D-------------------------------
  553. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  554.     AH = 0Dh
  555. Note:    calling task receives all time slices until AH=0Eh is called; this
  556.       allows time-critical events or nonreentrant code to be processed
  557. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  558. --------O-150E-------------------------------
  559. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  560.     AH = 0Eh
  561.     STACK:    WORD    process ID
  562. Return: AX = status (SYS_OK or SYS_ERROR)
  563. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  564. --------T-150E-------------------------------
  565. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  566.     AH = 0Eh
  567. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  568. --------d-150F-------------------------------
  569. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  570.     AH = 0Fh
  571.     AL = phase code
  572.         00h reserved
  573.         01h surface analysis
  574.         02h formatting
  575. Return: CF clear if formatting should continue, set if it should terminate
  576. Note:    called during ESDI drive formatting after each cylinder is completed
  577. SeeAlso: INT 13/AH=1Ah
  578. --------O-150F-------------------------------
  579. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  580.     AH = 0Fh
  581.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  582.         WORD    ID of element in queue chain
  583. Return: AX = key
  584. SeeAlso: AH=0Ah"VMiX"
  585. --------T-150F-------------------------------
  586. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  587.     AH = 0Fh
  588.     DS:BX -> ASCIZ command
  589. Return: after command has been processed
  590. Notes:    specified string is executed as if it had been typed at the MultiDOS
  591.       command prompt
  592.     the task is placed on a queue which MultiDOS examines periodically and
  593.       is suspended until MultiDOS has processed the command
  594.     all lowercase characters up to the first blank are converted to upper
  595.       case within the given buffer
  596. --------O-1510-------------------------------
  597. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  598.     AH = 10h
  599.     STACK:    DWORD    pointer to function
  600.           N    WORDs    function args
  601. Return: AX = function's return value??? (not specified in documentation)
  602. Note:    while the function is executing, the following global descriptors are
  603.       available:
  604.         20h stack segment
  605.         38h code segment of function
  606.         40h data alias for function's code segment
  607.       additional GDT descriptors can be allocated using AH=02h with
  608.       function "assign gdt"
  609. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  610. --------T-1510-------------------------------
  611. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  612.     AH = 10h
  613.     AL = semaphore number (00h-3Fh)
  614. Return: AH = status
  615.         00h semaphore not in use
  616.         01h semaphore owned by another task
  617.         02h invalid semaphore number
  618.         03h semaphore owned by caller
  619. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  620. --------Q-151000-----------------------------
  621. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  622.     AX = 1000h
  623. Return: after other processes run
  624. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  625.       the current time-slice is set to expire at the next clock tick rather
  626.       than immediately
  627. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  628. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  629. SeeAlso: INT 7F/AH=E8h
  630. --------Q-151001-----------------------------
  631. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  632.     AX = 1001h
  633.     BX = number of bytes to allocate
  634. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  635.     AX = status (DV v2.42)
  636.         0000h successful
  637.         0001h failed
  638. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  639.       common memory.  Under DV v2.42, this call never generates a user
  640.       prompt regardless of the SETERROR value; instead, it always returns
  641.       AX=0001h and ES:DI=0000h:0000h if out of memory
  642. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  643. --------Q-151002-----------------------------
  644. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  645.     AX = 1002h
  646.     ES:DI -> previously allocated block
  647. Return: block freed
  648. SeeAlso: AX=1001h,AX=DE0Dh
  649. --------Q-151003-----------------------------
  650. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  651.     AX = 1003h
  652.     BH = attribute
  653.     BL = character
  654.     DX = segment of object handle for window
  655. Note:    BX=0 does not display anything, it only positions the hardware cursor
  656. --------Q-1510-------------------------------
  657. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  658.     AH = 10h
  659.     AL = 04h thru 12h
  660. Return: pops up "Programming error" window in DV 2.x
  661. --------Q-151013-----------------------------
  662. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  663.     AX = 1013h
  664.     ES:DI -> FAR service routine
  665. Return: BX = bit mask indicating which bit was allocated
  666.          0000h if no more bits available
  667. SeeAlso: AX=1014h,AX=1015h
  668. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  669.       interrupt; if other calls need to be made, the interrupt handler
  670.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  671. --------Q-151014-----------------------------
  672. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  673.     AX = 1014h
  674.     BX = bit mask from INT 15/AX=1013h
  675. SeeAlso: AX=1013h,AX=1015h
  676. --------Q-151015-----------------------------
  677. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  678.     AX = 1015h
  679.     BX = bit mask for interrupts to post
  680. Return: indicated routines will be called: (DV 2.0x) at next task switch
  681.                        (DV 2.2x) immediately on return from
  682.                              hardware interrupt
  683. SeeAlso: AX=1013h,AX=1014h
  684. Notes:    this is one of the few TopView calls which are allowed from a hardware
  685.       interrupt handler
  686.     the handler will be called with ES containing the segment of the handle
  687.       of the next task to be executed; on return, ES must be the segment of
  688.       a task handle
  689. --------Q-151016-----------------------------
  690. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  691.     AX = 1016h
  692.     ES:DI = possible object handle
  693. Return: BX = FFFFh if ES:DI is a valid object handle
  694.          0000h if ES:DI is not
  695. Note:    under DESQview versions prior to 2.50, an object handle is always a
  696.       pointer to the object; for versions 2.50 and up, only task handles
  697.       are always pointers (other handles may consist of a unique object
  698.       number and offset into DESQview's common memory)
  699. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  700.  
  701. Format of object:
  702. Offset    Size    Description
  703.  00h    WORD    offset in common memory of previous object of same type
  704.  02h    WORD    offset in common memory of next object of same type
  705.  04h    WORD    signature FEDCh (DV 2.42-)
  706.         signature FEDCh or object number (DV 2.50+)
  707.  06h    WORD    object type
  708.         00h window/task
  709.         01h mailbox
  710.         02h keyboard
  711.         03h timer
  712.         04h pointer
  713.         05h panel
  714.         06h objectq
  715.  08h    DWORD    object handle to return to caller
  716.  0Ch    DWORD    canonicalized object address (segment = common memory)
  717.  10h    WORD    offset in common memory of owning task
  718.  12h    WORD    mapping context
  719.          offset in common memory of mapping context record (see below)
  720.     remainder varies by object type and DESQview version
  721. ---v2.42 keyboard object---
  722.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  723.         bit 15: keyboard opened
  724.  16h  4 BYTEs    ???
  725.  1Ah    WORD    priority in OBJECTQ???
  726.  1Ch    ...
  727.  25h    WORD    offset in common memory of ??? task
  728.  27h  4 BYTEs    ???
  729. ---v2.42 objectq object---
  730.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  731.         bit 15: OBJECTQ opened
  732.  16h  2 BYTEs    ???
  733.  18h    WORD    offset in common memory of ??? task
  734.  1Ah  6 BYTEs    ???
  735. ---v2.42 mailbox object---
  736.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  737.         bit 15: mailbox opened
  738.  1Ah    WORD    priority in OBJECTQ???
  739.  1Ch  6 BYTEs    ???
  740.  22h    WORD    offset in common memory of mailbox name (counted string)
  741.         0000h if no name
  742.      <= 5 BYTEs    ???
  743. ---v2.22-2.42 window/task object---
  744.  14h    BYTE    00h window, 01h task
  745.  15h    BYTE    internal (not Switch menu) window number???
  746.  16h    BYTE    internal (not Switch menu) window number???
  747.  17h    WORD    segment of internal window record
  748.  19h  2 BYTEs    ???
  749.  1Bh    BYTE    cursor row
  750.  1Ch    BYTE    cursor column
  751.  1Dh  2 BYTEs    ???
  752.  1Fh    BYTE    window height (logical)
  753.  20h    BYTE    window width (logical)
  754.  21h    BYTE    window position, row
  755.  22h    BYTE    window position, column
  756.  23h    BYTE    window height (visible)
  757.  24h    BYTE    window width (visible)
  758.  25h    BYTE    row of top of frame (or window if unframed)
  759.  26h    BYTE    column of left of frame (or window if unframed)
  760.  27h    BYTE    window height (physical, including frame)
  761.  28h    BYTE    window width (physical, including frame)
  762.  29h  6 BYTEs    ???
  763.  2Fh    BYTE    ??? initially logical window height
  764.  30h    BYTE    ??? initially logical window width
  765.  31h  2 BYTEs    ???
  766.  33h    BYTE    minimum height of window
  767.  34h    BYTE    minimum width of window
  768.  35h    BYTE    maximum height of window
  769.  36h    BYTE    maximum width of window
  770.  37h  3 BYTEs    ???
  771.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  772.  42h 24 BYTEs    attributes???
  773.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  774.  62h  3 BYTEs    ???
  775.  65h    BYTE    ??? bitflags
  776.  66h  2 BYTEs    ???
  777.  68h    WORD    offset in common memory of window name or 0000h if untitled
  778.  6Ah    WORD    length of window name
  779.  6Ch  2 BYTEs    ???
  780.  6Eh    WORD    offset of logical cursor in window (in character cells)
  781.  70h    DWORD    pointer to field table for window
  782.  74h    BYTE    ???
  783.  75h  2    BYTEs    ???
  784.  77h    BYTE    number of last-visited field
  785.  78h    DWORD    pointer to field table entry for last-visited field
  786.  7Ch  3 BYTEs    ???
  787.  7Fh    BYTE    select field marker character
  788.  80h    BYTE    ??? bit flags
  789.         bit 0: allow ECh window stream opcode to change reverse logattr
  790.         bit 1: alternate field processing mode selected
  791.  81h    BYTE    ???
  792.  82h    DWORD    notification function (manager stream opcode 8Ah)
  793.         no notification if segment = 0000h
  794.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  795.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  796.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  797.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  798.  90h      BYTE    ??? bitflags
  799.  91h    BYTE    ???
  800.  ---task object only
  801.  92h    BYTE    bit flags (bits 0-4)
  802.  93h    BYTE    character for ??? (default 20h)
  803.  94h    BYTE    ??? flag
  804.  95h    WORD    offset in common memory of ???
  805.  97h  2 BYTEs    ???
  806.  99h    WORD    ???
  807.  9Bh    BYTE    ??? bit flags
  808.         bit 3: ???
  809.         bit 6: perform protected-attribute processing on select fields
  810.  9Ch    BYTE    ???
  811.  9Dh    WORD    offset in common memory of current register save record
  812.         (see below).  No register save record in use if < 01C0h
  813.  9Fh    WORD    offset in common memory of task's keyboard object
  814.  A1h    WORD    offset in common memory of task's OBJECTQ object
  815.  A3h    WORD    offset in common memory of task's mailbox object
  816.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  817.  A7h    DWORD    user's SS:SP
  818.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  819.  ADh  6 BYTEs    ???
  820.  B3h    BYTE    ??? bit flags
  821.         bit 0: run in foreground only
  822.  B4h    BYTE    ???
  823.  B5h    BYTE    ??? bitflags
  824.  B6h    BYTE    task status (see AX=DE2Ch)
  825.  B7h  9 BYTEs    ???
  826.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  827.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  828.  C4h  2 BYTEs    ??? (0000h)
  829.  C6h    WORD    segment of keyboard buffer for task
  830.  C8h    WORD    offset in common memory of ??? keyboard object
  831.  CAh    BYTE    ???
  832.  CBh    WORD    offset in common memory of ??? object
  833.  CEh    BYTE    ??? flag
  834.  CFh    WORD    offset in common memory of default notify window for task
  835.         or 0000h if none
  836.  D1h  4 BYTEs    ???
  837.  D5h    BYTE    window number on Switch Window menu
  838.  D6h  5 BYTEs    ???
  839.  DBh    WORD    offset in common memory of ??? object
  840.  DDh  2 BYTEs    ???
  841.  DFh    WORD    API level for task
  842.  E1h    WORD    offset in common memory of ??? keyboard object
  843.  E7h    WORD    segment of ???
  844.  E9h 18 BYTEs    ???
  845.  FBh    WORD    ???
  846.  FDh    BYTE    ???
  847.  FFh 26 BYTEs    ???
  848. 119h    DWORD    SS:SP for ???
  849. 11Dh  4 BYTEs    ???
  850. 121h    DWORD    pointer to ???
  851. 125h 35 BYTEs    ???
  852. ---v2.22
  853. 145h        task's default keyboard object
  854. ---v2.42
  855. 148h    WORD    ???
  856. 14Ah    BYTE    ???
  857. 14Dh 42 BYTEs    task's default keyboard object
  858. 177h 32 BYTEs    task's ObjectQ object
  859. 197h 41 BYTEs    task's default mailbox object
  860. 1C0h 24 BYTEs    first register save record
  861. 450h    --    default top of private stack
  862.  
  863. Format of Register Save Record:
  864. Offset    Size    Description
  865.  00h    WORD    AX
  866.  02h    WORD    BX
  867.  04h    WORD    CX
  868.  06h    WORD    DX
  869.  08h    WORD    DI
  870.  0Ah    WORD    SI
  871.  0Eh    WORD    DS
  872.  10h    WORD    ES
  873.  12h    DWORD    return address
  874.  16h    WORD    original flags
  875.  
  876. Format of mapping context record:
  877. Offset    Size    Description
  878.  00h    WORD    segment of start of system memory chain
  879.  02h    WORD    size of process's memory in paragraphs
  880.  04h 15 BYTEs    ???
  881.  13h    BYTE    reference count
  882. --------Q-151017-----------------------------
  883. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  884.     AX = 1017h
  885. Return: pops up "Programming error" window in DV 2.x
  886. --------Q-151018-----------------------------
  887. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  888.     AX = 1018h
  889.     BH = column
  890.     BL = row
  891.     ES = segment of object handle for window below which to search
  892.          0000h = start search with topmost window
  893. Return: ES = segment of object handle for window which is visible at the
  894.            indicated position, or covered by indicated window
  895.        = 0000h no window
  896. SeeAlso: AX=1023h,AX=1024h
  897. --------Q-151019-----------------------------
  898. INT 15 - TopView - "SOUND" - MAKE TONE
  899.     AX = 1019h
  900.     BX = frequency in Hertz (0000h = silence)
  901.     CX = duration in clock ticks (18.2 ticks/sec)
  902. Return: immediately, tone continues to completion
  903. Notes:    if another tone is already playing, the new tone does not start until
  904.       completion of the previous one.  Up to 32 tones may be queued before
  905.       the process is blocked until a note completes.
  906.     in DV 2.00, the lowest tone allowed is 20 Hz
  907.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  908.       notes are also cancelled
  909. SeeAlso: INT 16/AH=73h
  910. --------Q-15101A-----------------------------
  911. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  912.     AX = 101Ah
  913. Return: stack switched
  914. Notes:    this call may not be nested; a second call must be preceded by a call
  915.       to "USTACK" (AX=1025h)
  916.     while TopView requires many API calls to be executed while on the
  917.       task's internal stack, DESQview allows those calls to be executed
  918.       regardless of the current stack
  919. SeeAlso: AX=1025h
  920. --------Q-15101B-----------------------------
  921. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  922.     AX = 101Bh
  923. Return: task-switching temporarily disabled
  924. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  925.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  926.       will again be disabled)
  927.     suspends the caller until DOS is free
  928. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  929. SeeAlso: INT 60/DI=0602h
  930. --------Q-15101C-----------------------------
  931. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  932.     AX = 101Ch
  933. Return: task-switching enabled
  934. Note:    this API call may be made from within a hardware interrupt handler
  935. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  936. --------Q-15101D-----------------------------
  937. INT 15 - TopView - "STOP" - STOP TASK
  938.     AX = 101Dh
  939.     ES = segment of object handle for task to be stopped
  940.          (== handle of main window for that task)
  941. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  942. Note:    once a task has been stopped, additional "STOP"s are ignored
  943. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  944.       current task
  945. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  946. --------Q-15101E-----------------------------
  947. INT 15 - TopView - "START" - START TASK
  948.     AX = 101Eh
  949.     ES = segment of object handle for task to be started
  950.          (== handle of main window for that task)
  951. Return: indicated task is started up again
  952. Note:    once a task has been started, additional "START"s are ignored
  953. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  954. --------Q-15101F-----------------------------
  955. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  956.     AX = 101Fh
  957.     BX = bit fields
  958.          bits 0-12: number of characters to display
  959.          bits 13,14: which mouse button may be pressed to remove window
  960.              00 = either
  961.              01 = left
  962.              10 = right
  963.              11 = either
  964.          bit 15: beep if 1
  965.     ES:DI -> text of message
  966.     CH = width of error window (0 = default)
  967.     CL = height of error window (0 = default)
  968.     DX = segment of object handle
  969. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  970. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  971. --------Q-151020-----------------------------
  972. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  973.     AX = 1020h
  974. Return: pops up "Programming error" window in DV v2.00+
  975. --------Q-151021-----------------------------
  976. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  977.     AX = 1021h
  978.     BX = segment of object handle for task to interrupt (not self)
  979.     DX:CX -> FAR routine to jump to next time task is run
  980. Return: nothing
  981. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  982.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  983.       needs to be preserved
  984.     multiple PGMINTs to a single task are processed last-in first-out
  985.     if the other task is in a DOS or DV API call, the interruption will
  986.       occur on return from that call
  987. --------Q-151022BX0000-----------------------
  988. INT 15 - TopView - "GETVER" - GET VERSION
  989.     AX = 1022h
  990.     BX = 0000h
  991. Return: BX nonzero, TopView or compatible loaded
  992.     (BL = major version, BH = minor version)
  993. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  994. --------Q-151023-----------------------------
  995. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  996.     AX = 1023h
  997.     BX = segment of object handle for parent window within which to
  998.          position the window (0 = full screen)
  999.     ES = segment of object handle for window to be positioned
  1000.     DL = bit flags
  1001.          bits 0,1: horizontal position
  1002.         00 = current
  1003.         01 = center
  1004.         10 = left
  1005.         11 = right
  1006.          bits 2,3: vertical position
  1007.         00 = current
  1008.         01 = center
  1009.         10 = top
  1010.         11 = bottom
  1011.          bit 4: don't redraw screen if set
  1012.          bits 5-7 not used
  1013.     CH = number of columns to offset from position specified by DL
  1014.     CL = number of rows to offset from position specified by DL
  1015. Return: nothing
  1016. --------Q-151024-----------------------------
  1017. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  1018.     AX = 1024h
  1019.     BX = segment of object handle for window
  1020.           (0 = use default)
  1021. Return: ES:DI -> virtual screen
  1022.     CX = size of virtual screen in bytes
  1023.     DL = 00h text screen
  1024.          01h graphics screen
  1025. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  1026. --------Q-151025-----------------------------
  1027. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  1028.     AX = 1025h
  1029. Return: stack switched back
  1030. Notes:    call only after having switched to internal stack with AX=101Ah
  1031.     while TopView requires many API calls to be executed while on the
  1032.       task's private stack, DESQview allows those calls to be executed
  1033.       regardless of the current stack
  1034. SeeAlso: AX=101Ah
  1035. --------Q-1510-------------------------------
  1036. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  1037.     AH = 10h
  1038.     AL = 26h thru 2Ah
  1039. Return: pops up "Programming error" window in DV 2.x
  1040. --------Q-15102B-----------------------------
  1041. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  1042.     AX = 102Bh
  1043.     BX = segment of object handle for task
  1044. Return: nothing
  1045. Note:    forces a task which is waiting on its objectq to continue by placing
  1046.       the handle for the task on the objectq
  1047. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  1048. --------Q-15102C-----------------------------
  1049. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  1050.     AX = 102Ch
  1051.     ES:DI -> contents of .PIF/.DVP file (see below)
  1052.     BX = size of .PIF/.DVP info
  1053. Return: BX = segment of object handle for new task
  1054.          0000h on error
  1055. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  1056.  
  1057. Format of .PIF/.DVP file:
  1058. Offset    Size    Description
  1059.  00h    BYTE    reserved (0)
  1060.  01h    BYTE    checksum of bytes 02h through 170h
  1061.  02h 30 BYTEs    blank-padded program title
  1062.  20h    WORD    maximum memory to allocate to partition in K
  1063.  22h    WORD    minimum memory required in K
  1064.  24h 64 BYTEs    ASCIZ program pathname
  1065.  64h    BYTE    default drive letter ('A',...)
  1066.  65h 64 BYTEs    ASCIZ default directory name
  1067.  A5h 64 BYTEs    ASCIZ program parameters
  1068.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  1069.  E6h    BYTE    number of text pages used
  1070.  E7h    BYTE    number of first interrupt to save
  1071.  E8h    BYTE    number of last interrupt to save
  1072.  E9h    BYTE    rows in virtual screen buffer
  1073.  EAh    BYTE    columns in virtual screen buffer
  1074.  EBh    BYTE    initial window position, row
  1075.  ECh    BYTE    initial window position, column
  1076.  EDh    WORD    system memory in K
  1077.  EFh 64 BYTEs    ASCIZ shared program name
  1078. 12Fh 64 BYTEs    ASCIZ shared program data file
  1079. 16Fh    BYTE    flags1
  1080.         bit 7: writes text directly to screen
  1081.         bit 6: runs in foreground only (see also offset 184h)
  1082.         bit 5: uses math coprocessor
  1083.         bit 4: accesses system keyboard buffer directly
  1084.         bits 3-1: reserved (0)
  1085.         bit 0: swappable
  1086. 170h    BYTE    flags2
  1087.         bit 6: uses command-line parameters in field at A5h
  1088.         bit 5: swaps interrupt vectors
  1089. ---information unique to .DVP files---
  1090. 171h  2 BYTEs    keys to use on open menu
  1091. 173h    WORD    size of script buffer in bytes
  1092. 175h    WORD    automatically give up CPU after this many tests for keyboard
  1093.         input in one clock tick (default 0 = never)
  1094. 177h    BYTE    nonzero = "uses own colors"
  1095. 178h    BYTE    nonzero if application swappable
  1096. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  1097.         in actual .DVP files, frequently 01h
  1098. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  1099. 17Dh    BYTE    nonzero if copy-protect floppy is required
  1100. ---information unique to DESQview 2.0+---
  1101. 17Eh    BYTE    .DVP version number
  1102.         00h DESQview v1.2+
  1103.         01h DESQview v2.0+
  1104.         02h DESQview v2.2+
  1105. 17Fh    BYTE    reserved (0)
  1106. 180h    BYTE    initial number of rows in physical window
  1107. 181h    BYTE    initial number of columns in physical window
  1108. 182h    WORD    maximum expanded memory to allow, in K
  1109. 184h    BYTE    flags3
  1110.         bit 7: automatically assign window position
  1111.         bit 5: maximum memory value has been specified
  1112.         bit 4: disallow "Close" command
  1113.         bit 3: foreground-only when doing graphics
  1114.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  1115.         bit 2: don't virtualize (see also offset 18Bh)
  1116.         bit 1: foreground-only during DOS calls
  1117.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  1118. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  1119.         bit 3: save/restore entire INT 09 handler state every taskswtch
  1120.         bit 2: take special precautions for programs which read the
  1121.             BIOS keyboard buffer directly from memory
  1122.         bit 1: never indicate keystroke available during scripts/xfers
  1123.         bit 0: only indicate keystroke available every sixth poll
  1124. 186h    BYTE    number of graphics pages used
  1125. 187h    WORD    extra system memory size
  1126. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  1127. ---information unique to DESQview 2.2+---
  1128. 18Ah    BYTE    serial port usage
  1129.         FFh uses all serial ports
  1130.         00h no serial ports
  1131.         01h only COM1
  1132.         02h only COM2
  1133. 18Bh    BYTE    flags4
  1134.         bit 7: automatically close application on exit if .COM or .EXE
  1135.             specified (see also offset 17Ch)
  1136.         bit 6: swappable if not using serial ports
  1137.         bit 5: start program with window hidden (v2.26+)
  1138.         bit 4: start program in background (v2.26+)
  1139.         bit 3: virtualize text (see also offset 184h)
  1140.         bit 2: virtualize graphics (see also offset 184h)
  1141.         bit 1: share CPU when foreground
  1142.         bit 0: share EGA when foreground and zoomed
  1143. 18Ch    BYTE    protection level for 386 machines
  1144. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  1145. ---information unique to DESQview/X 1.0---
  1146. 18Dh    BYTE    X flags
  1147.         bits 3-7: unused (0)
  1148.         bit 2: don't display wait message when opening window
  1149.         bit 1: don't display DOS window
  1150.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  1151.                (NEWPROC) inherit DOS client layer usage
  1152. 18Eh    BYTE    X keyboard behavior (0-3)
  1153. 18Fh    BYTE    font scaling
  1154.         00h fixed fonts
  1155.         01h scalable fonts
  1156. 190h 10 BYTEs    reserved (0)
  1157. 19Ah    WORD    length of data follownig XDVP signature
  1158. 19Ch  4 BYTEs    signature "XDVP"
  1159. 1A0h  N BYTEs    list of variable length records (see below)
  1160.  
  1161. Format of variable length record:
  1162. Offset    Size    Description
  1163.  00h    WORD    length of following record, 0000h if end of record list
  1164.  02h    BYTE    record type
  1165.         01h script filename, up to 64 characters
  1166.         02h command-line parameters (allows >64 characters on cmdline)
  1167.         03h environment inheritance
  1168.         04h environment string
  1169.         05h starting window position
  1170. ---types 01h,02h,04h---
  1171.  03h  N BYTEs    ASCII data
  1172. ---type 03h---
  1173.  03h    BYTE    inheritance
  1174.         00h do not inherit
  1175.         01h inherit environment
  1176. ---type 05h---
  1177.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  1178.         starting row, starting column, starting height, starting width
  1179. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  1180.       only the last instance of each type is used; multiple occurrences of
  1181.       type 04h are concatenated
  1182. --------Q-15102D-----------------------------
  1183. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  1184.     AX = 102Dh
  1185.     BL = subfunction
  1186.          00h determine whether using keyboard mouse
  1187.         Return: BL = 00h using real mouse
  1188.                  01h using keyboard mouse
  1189.          01h turn keyboard mouse on
  1190.          02h turn keyboard mouse off
  1191. --------Q-15102E-----------------------------
  1192. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  1193.     AX = 102Eh
  1194.     BX = number of bytes
  1195. Return: AX = status
  1196.         0000h successful
  1197.         ES:DI -> allocated system memory
  1198.         0001h failed
  1199.         ES:DI = 0000h:0000h
  1200. Note:    under DV 2.42, this call is identical to AX=1001h
  1201. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  1202.  
  1203. Format of system memory block header (one paragraph before memory block):
  1204. Offset    Size    Description
  1205.  00h    WORD    segment of next header or 0000h
  1206.  02h    WORD    segment of previous header or 0000h
  1207.  04h    WORD    size of block in paragraphs, including header
  1208.  06h    BYTE    availability flag (00h in use, 01h free)
  1209. --------Q-1511-------------------------------
  1210. INT 15 - TopView commands
  1211.     AH = 11h
  1212.     AL = various (except 17h)
  1213. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  1214.       see those below
  1215. SeeAlso: AH=DEh
  1216. --------T-1511-------------------------------
  1217. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  1218.     AH = 11h
  1219.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  1220.             request (max len = 127)
  1221. Return: AX = status (SYS_OK or SYS_ERROR)
  1222. SeeAlso: AH=0Ch"VMiX"
  1223. --------T-1511-------------------------------
  1224. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  1225.     AH = 11h
  1226. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  1227. SeeAlso: AH=12h"MultiDOS"
  1228. --------Q-151117BX0000-----------------------
  1229. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  1230.     AX = 1117h
  1231.     BX = 0000h    get current mapping context without setting
  1232.          nonzero    set new mapping context
  1233. Return: BX = mapping context in effect before call
  1234.     interrupts enabled
  1235. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  1236.     mapping contexts determine conventional-memory addressability; setting
  1237.       a mapping context ensures that the associated program and data areas
  1238.       are in memory for access.  Usable by drivers, TSRs and shared
  1239.       programs.
  1240.     caller need not be running under DESQview, but must ensure that the
  1241.       stack in use will not be mapped out by the call
  1242. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  1243. --------m-1511DE-----------------------------
  1244. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  1245.     AX = 11DEh
  1246. Return: CF clear if installed
  1247.         AX = segment at which QEXT.SYS is located
  1248. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  1249.       versions also implement the XMS standard
  1250. Note:    a private entry point may be found by searching the beginning of the
  1251.       returned segment for the signature string
  1252.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  1253.       prior to the signature contains the QEXT version number in BCD,
  1254.       and the word prior to that contains the offset within the QEXT
  1255.       code segment of the private entry point
  1256. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  1257.  
  1258. Call private entry point with:
  1259.     AH = 00h ???
  1260.     AH = nonzero ???
  1261. --------T-1512-------------------------------
  1262. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  1263.     AH = 12h
  1264.     STACK:    WORD    process ID
  1265. Return: AX = status (SYS_OK or SYS_ERROR)
  1266. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  1267. --------T-1512-------------------------------
  1268. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  1269.     AH = 12h
  1270. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  1271. SeeAlso: AH=11h"MultiDOS"
  1272. --------Q-1512--BH00-------------------------
  1273. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  1274.     AH = 12h
  1275.     BH = 00h
  1276.     BL = which handle to return
  1277.         00h handle in DWORD on top of stack
  1278.         01h current task's window handle
  1279.         02h given task's mailbox handle (task's handle on stack)
  1280.         03h current task's mailbox handle
  1281.         04h given task's keyboard handle (task's handle on stack)
  1282.         05h current task's keyboard object handle
  1283.         06h given task's OBJECTQ handle (task's handle on stack)
  1284.         07h current task's OBJECTQ handle
  1285.         08h      \
  1286.           thru > return 0000:0000 under DV < 2.26
  1287.         10h      /
  1288.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  1289.         0Dh (2.26+) task handle of owner (parent) of current task
  1290. Return: DWORD on top of stack is object handle
  1291. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  1292.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  1293.       window)
  1294. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  1295. --------Q-1512--BH01-------------------------
  1296. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  1297.     AH = 12h
  1298.     BH = 01h
  1299.     BL = object type to create
  1300.         00h (DV 2.0x only) handle is DWORD on top of stack
  1301.         01h (DV 2.0x only) use task's window handle
  1302.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  1303.         03h (DV 2.0x only) current task's mailbox
  1304.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  1305.         05h (DV 2.0x only) current task's keyboard object
  1306.         08h WINDOW class
  1307.         09h MAILBOX class
  1308.         0Ah KEYBOARD class
  1309.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  1310.         0Fh POINTER object
  1311.         10h PANEL object
  1312.     STACK: (if window object or WINDOW class)
  1313.            DWORD address to jump to (no new task if high word == 0)
  1314.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  1315.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  1316.            DWORD bytes system memory for input buffer for READ/READN
  1317.             (0 == none, -1 == default--same as logical window size)
  1318.            DWORD window size, columns
  1319.            DWORD window size, rows
  1320.            DWORD length of window title
  1321.            DWORD address of window title
  1322. Return: DWORD on top of stack is new object handle
  1323. Notes:    if a new task is created, it is started with
  1324.       AX = BX = SI = DI = BP = 0
  1325.       DX:CX = handle of parent task
  1326.       DS = ES = SS = segment of private stack (and new task's handle)
  1327.     new windows are orphans, inherit the colors/hidden status of the
  1328.       creating task's window, and are placed in the upper left hand corner
  1329.       of the screen but not automatically redrawn
  1330.     new keyboards are closed, and have all object bits cleared except for
  1331.       the hardware cursor bit
  1332. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  1333. --------Q-1512--BH02-------------------------
  1334. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  1335.     AH = 12h
  1336.     BH = 02h
  1337.     BL = object
  1338.         00h handle in DWORD on top of stack
  1339.         window: close window and free
  1340.         timer: free timer
  1341.         panel: free panel object
  1342.         pointer: free pointer
  1343.         01h task's window handle - kills task, never returns
  1344.         02h given task's mailbox (task's handle on top of stack)
  1345.         03h current task's mailbox
  1346.         04h given task's keyboard (task's handle on top of stack)
  1347.         05h current task's keyboard object
  1348. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  1349.       task windows also free any mailbox, objectq, and panel objects held
  1350.       by the task and any child tasks
  1351.     if the keyboard being freed is the default keyboard for a task, this
  1352.       call is equivalent to CLOSE
  1353.     panel and pointer objects are automatically closed if open
  1354. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  1355. --------Q-1512--BH03-------------------------
  1356. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  1357.     AH = 12h
  1358.     BH = 03h
  1359.     BL = object
  1360.         00h mailbox handle in DWORD on top of stack
  1361.         02h sender of last msg read from mailbox (task's handle on stack)
  1362.         03h sender of last msg read from current task's mailbox
  1363. Return: DWORD on stack is task handle of message sender
  1364. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  1365. --------Q-1512--BH03-------------------------
  1366. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  1367.     AH = 12h
  1368.     BH = 03h
  1369.     BL = window to be connected
  1370.         00h handle of window to be attached in DWORD on top of stack
  1371.         01h attach current task's main window
  1372.     STACK: DWORD handle of window to attach to or 00000000h to detach
  1373. Return: STACK popped
  1374. Notes:    when two windows are connected, both will move if the user moves either
  1375.     multiple windows may be attached to a single window, but each window
  1376.       may only be attached to one window at a time
  1377. SeeAlso: AH=12h/BH=83h
  1378. --------Q-1512--BX0300-----------------------
  1379. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  1380.     AH = 12h
  1381.     BX = 0300h
  1382.     STACK: DWORD handle of panel object
  1383. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  1384.            DWORD address of directory
  1385. Note:    a null string is returned if the object is not open
  1386. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  1387.  
  1388. Format of panel file:
  1389. Offset    Size    Description
  1390.  00h  2 BYTEs    C0h C3h
  1391.  02h    BYTE    number of panels in file
  1392.  03h    for each panel in file:
  1393.         8 BYTEs  blank-padded panel name
  1394.           DWORD  panel offset in file
  1395.           WORD   panel length
  1396.     data for panels (each consists of one or more window/query/manager
  1397.     streams)
  1398.         first byte of each panel must be 1Bh, fifth byte must be E5h
  1399. --------Q-1512--BH04-------------------------
  1400. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1401.     AH = 12h
  1402.     BH = 04h
  1403.     BL = window to read from
  1404.         00h handle is DWORD on top of stack
  1405.         01h use calling task's default window
  1406.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1407.         0Dh (DV 2.26+) default window of parent task of current task
  1408. Return: STACK:    DWORD number of bytes read
  1409.         DWORD address of buffer
  1410. Notes:    reading starts at the current logical cursor position; the cursor is
  1411.       updated to point at the character following the last one read
  1412.     any translucent blanks (FFh) which are visible on screen are changed
  1413.       to the character which is seen through them
  1414.     the string produced by the read is placed in an input buffer which may
  1415.       be reused by the next READ or READN of a window
  1416.     window stream opcodes D8h and D9h determine whether the read returns
  1417.       characters or attributes
  1418. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  1419. --------Q-1512--BH04-------------------------
  1420. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1421.     AH = 12h
  1422.     BH = 04h
  1423.     BL = object
  1424.         00h handle is DWORD on top of stack
  1425.         mailbox: wait for and get next message
  1426.         keyboard: wait for and get pointer to next input buffer
  1427.         pointer: wait for and get next message
  1428.         02h get next message from mailbox (task's handle on top of stack)
  1429.         03h get next message from current task's mailbox
  1430.         04h get the next input from keyboard (handle on top of stack)
  1431.         05h get the next input from task's default keyboard
  1432.         06h wait for input from any object in OBJECTQ (handle on stack)
  1433.         07h wait for input from any object in task's default OBJECTQ
  1434. Return: STACK: (if objectq) DWORD handle of object with input
  1435.            (otherwise)  DWORD number of bytes
  1436.                 DWORD address
  1437. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1438.       containing the character code as returned by the BIOS; the BIOS scan
  1439.       code is available via the STATUS call if the character is zero
  1440.     for a keyboard in field mode, the input buffer format is determined
  1441.       by the field table header for the window the keyboard is attached to
  1442.     keyboard input buffers and mailbox message buffers may be invalidated
  1443.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1444. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  1445.  
  1446. Format of pointer message:
  1447. Offset    Size    Description
  1448.  00h    WORD    row
  1449.  02h    WORD    column
  1450.  04h    BYTE    status
  1451.         bit 7: set when press/release mode active and button pressed
  1452.         bit 6: set when press/release mode active and button released
  1453.         bits 7-2: number of clicks-1 if multiple-click mode active
  1454.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  1455.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1456. --------Q-1512--BX0400-----------------------
  1457. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1458.     AH = 12h
  1459.     BX = 0400h
  1460.     STACK: DWORD timer's handle
  1461. Return: after timer expires
  1462.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1463. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  1464. --------Q-1512--BX0400-----------------------
  1465. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1466.     AH = 12h
  1467.     BX = 0400h
  1468.     STACK: DWORD handle of panel object
  1469.            DWORD window's handle (or 0 for current task's window)
  1470.            DWORD length of panel name
  1471.            DWORD pointer to panel name
  1472. Return: STACK: DWORD handle of window which was used
  1473.            DWORD handle of keyboard or 0
  1474. Notes:    status of APPLY may be checked with STATUS message
  1475.     panel MUST have the following format
  1476.       first byte must be 1Bh (i.e. must start with a stream)
  1477.       first opcode in stream must be E5h
  1478.         single byte arg of opcode is interpreted thus:
  1479.           bits 7,6    11 means create new window
  1480.             10 means create new field table for existing window
  1481.             01 means use existing window and field table
  1482.           bit 5 if set, panel contains a field table 
  1483.             (creates a new keyboard and puts it in field mode)
  1484.           bit 4 if set, panel contains input fields
  1485.           bit 3 if set, panel contains select fields but no input fields
  1486.     if the panel contains input or select fields, a keyboard handle is
  1487.       returned; either the window's current open keyboard or a
  1488.       newly-created keyboard object.  The caller should read that keyboard
  1489.       to obtain input from the panel.
  1490. SeeAlso: AH=12h/BH=84h
  1491. --------Q-1512--BH05------------------------
  1492. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1493.     AH = 12h
  1494.     BH = 05h
  1495.     BL = object
  1496.         00h handle is DWORD on top of stack
  1497.         timer: start timer to end at a specified time
  1498.         keyboard: add input buffer to queue
  1499.         pointer: move pointer icon to specified position
  1500.         02h send message by value/status=0 to mbox (task's handle on stack)
  1501.         03h send message by value/status=0 to current task's mailbox
  1502.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1503.         05h add input buffer to task's default KEYBOARD queue
  1504.         06h add an object to OBJECTQ (handle on top of stack)
  1505.         07h add an object to task's default OBJECTQ
  1506.     STACK: (if mailbox)  DWORD length
  1507.                  DWORD address
  1508.            (if keyboard) DWORD status (scan code in keystroke mode)
  1509.                  DWORD length (should be 1 in keystroke mode)
  1510.                  DWORD address
  1511.            (if objectq)  DWORD handle of object to add
  1512.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1513.                    only accurate to 1/18 sec)
  1514.            (if pointer)  DWORD column relative to origin of window
  1515.                  DWORD row relative to origin of window
  1516. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1517.     the data and status written to a keyboard object must match the format
  1518.       returned by the keyboard object in the current mode
  1519.     the pointer position is scaled according to the current scaling factors
  1520. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1521. --------Q-1512--BH05-------------------------
  1522. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1523.     AH = 12h
  1524.     BH = 05h
  1525.     BL = window to write to
  1526.         00h DWORD on top of stack is window handle
  1527.         01h write string to task's default window
  1528.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1529.         0Dh (DV 2.26+) default window of parent of current task
  1530.     STACK: DWORD object handle if handle passed on stack
  1531.            DWORD total length of string (high word == 0)
  1532.            DWORD address of string to display
  1533. Return: indicated actions performed
  1534.     a. non-control characters are displayed (opcodes DEh and DFh control
  1535.        whether the attributes are left or changed to the current attrib)
  1536.     b. CR/LF/BS/Tab cause the usual cursor movement
  1537.     c. ESC starts a data structure with additional commands if following
  1538.        byte is less than 20h; otherwise, it is written to the window
  1539.     STACK:    DWORD handle of new window if window stream opcode E6h
  1540.         else nothing
  1541. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1542.  
  1543. Data Structure:
  1544.     MAGIC  DB  1Bh
  1545.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  1546.     LENGTH DW  ?   ; length of remainder in bytes
  1547.     var-length fields follow, each an OPCODE followed by
  1548.          zero or more args
  1549.  
  1550. MODE 00h (set or display values) "WINDOW STREAM"
  1551.     Opcodes:args
  1552.     00h  display 20h blanks with the default attribute
  1553.     01h-1Fh display OPCODE blanks with the default attribute
  1554.     20h  display char with default attribute 20h times
  1555.          BYTE char to repeat
  1556.     21h-3Fh display char with default attribute OPCODE-20h times
  1557.          BYTE char to repeat
  1558.     40h  display 20h blanks with specified attribute
  1559.          BYTE attribute of blanks
  1560.     41h-5Fh display OPCODE-40h blanks with specified attribute
  1561.          BYTE attribute of blanks
  1562.     60h  display next 20h characters
  1563.          20h BYTEs characters to display
  1564.     61h-7Fh display next OPCODE-60h characters
  1565.          N BYTEs characters to display
  1566.     80h-87h     display N blanks with default attribute
  1567.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1568.               [000h means 800h]
  1569.     88h-8Fh display N copies of the character
  1570.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1571.               [000h means 800h]
  1572.          BYTE character to repeat
  1573.     90h-97h     display N blanks with specified attribute
  1574.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1575.               [000h means 800h]
  1576.          BYTE attribute
  1577.     98h-9FH     display string at logical cursor pos
  1578.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1579.               [000h means 800h]
  1580.          N BYTEs string to display
  1581.     A0h  set logical cursor row
  1582.          BYTE row number (0 is top)
  1583.     A1h  set logical cursor column
  1584.          BYTE column number (0 is leftmost)
  1585.     A2h  set top edge of scrolling region
  1586.          BYTE row
  1587.     A3h  set left edge of scrolling region
  1588.          BYTE column
  1589.     A4h  set row of physical window position
  1590.          BYTE line
  1591.     A5h  set column of physical window position
  1592.          BYTE column
  1593.     A6h  set height of physical window
  1594.          BYTE #rows
  1595.     A7h  set width of physical window
  1596.          BYTE #columns
  1597.     A8h  set viewport row
  1598.          BYTE row
  1599.     A9h  set viewport column
  1600.          BYTE column
  1601.     AAh  set virtual screen height [contents of window unpredictable after]
  1602.          BYTE rows
  1603.     ABh  set virtual screen width [contents of window unpredictable after]
  1604.          BYTE columns
  1605.     ACh-AEh     unused
  1606.     AFh  set compatible/preferred video modes
  1607.          BYTE compatibility/preference mask
  1608.         bit 7    compatible with monochrome
  1609.         bit 6    compatible with color text, EGA/VGA graphics
  1610.         bit 5    compatible with medium-resolution CGA graphics
  1611.         bit 4    compatible with high-resolution CGA graphics
  1612.         bit 3    prefer monochrome
  1613.         bit 2    prefer color text, EGA/VGA graphics
  1614.         bit 1    prefer medium-resolution CGA graphics
  1615.         bit 0    prefer high-resolution CGA graphics
  1616.     B0h  move logical cursor down
  1617.          BYTE #rows (signed, negative values move up)
  1618.             [if #rows=0 and hardware cursor owner, update hw crsr]
  1619.     B1h  move logical cursor right
  1620.          BYTE #cols (signed, negative values move left)
  1621.             [if #cols=0 and hardware cursor owner, update hw crsr]
  1622.     B2h  shift top edge of scrolling region
  1623.          BYTE #rows (signed)
  1624.     B3h  shift left edge of scrolling region
  1625.          BYTE #cols (signed)
  1626.     B4h  shift physical window down
  1627.          BYTE #lines (signed)
  1628.     B5h  shift physical window right
  1629.          BYTE #columns (signed)
  1630.     B6h  expand physical window vertically
  1631.          BYTE #lines (signed)
  1632.     B7h  expand physical window horizontally
  1633.          BYTE #columns (signed)
  1634.     B8h  adjust viewport row
  1635.          BYTE #rows (signed)
  1636.     B9h  adjust viewport column
  1637.          BYTE #columns (signed)
  1638.     BAh  adjust virtual screen height [contents of window unpredict after]
  1639.          BYTE #rows to increase (signed)
  1640.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  1641.          BYTE #cols to increase (signed)
  1642.     BCh-BFh     reserved (currently unused)
  1643.     C0h  set logical cursor position
  1644.          BYTE row number (0 is top border)
  1645.          BYTE column number (0 is left border)
  1646.     C1h  set top left corner of scrolling region
  1647.          BYTE row
  1648.          BYTE column
  1649.     C2h  set physical window pos
  1650.          BYTE upper left row (no top border if 0)
  1651.          BYTE upper left column (no left border if 0)
  1652.     C3h  set current window size
  1653.          BYTE #rows
  1654.          BYTE #cols
  1655.     C4h  set upper left corner of viewport (portion of virtual screen
  1656.          displayed in window)
  1657.          BYTE row
  1658.          BYTE column
  1659.     C5h  set size of virtual screen [contents unpredictable afterwards]
  1660.          BYTE #rows
  1661.          BYTE #cols
  1662.     C6h  unused
  1663.     C7h  unused
  1664.     C8h  set logical cursor relative to current position
  1665.          BYTE number of rows to move down (signed)
  1666.          BYTE number of columns to move right (signed)
  1667.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  1668.     C9h  shift top left corner of scrolling region
  1669.          BYTE #rows (signed)
  1670.          BYTE #cols (signed)
  1671.     CAh  set window pos relative to current position
  1672.          BYTE number of rows to shift down (signed)
  1673.          BYTE number of columns to shift right (signed)
  1674.     CBh  set window size relative to current size
  1675.          BYTE number of rows to expand (signed)
  1676.          BYTE number of cols to expand (signed)
  1677.     CCh  shift viewport relative to current position
  1678.          BYTE rows to shift (signed)
  1679.          BYTE cols to shift (signed)
  1680.     CDh  resize virtual screen
  1681.          BYTE #rows to expand (signed)
  1682.          BYTE #cols to expand (signed)
  1683.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1684.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1685.     D0h  allow window frame to extend beyond screen
  1686.     D1h  always display a complete frame, even if window extends beyond 
  1687.          edge of screen
  1688.     D2h  allow DV to change logical colors on video mode switch (default)
  1689.     D3h  application changes logical attributes
  1690.     D4h  window is visible [must redraw to actually make visible]
  1691.     D5h  window is hidden [must redraw to actually remove]
  1692.     D6h  window has frame (default)
  1693.     D7h  window unframed [must redraw to actually remove frame]
  1694.     D8h  READ/READN will read characters from window (default)
  1695.     D9h  READ/READN will read attributes from window
  1696.     DAh  use logical attributes, which may be remapped
  1697.         attributes
  1698.            1 normal text
  1699.            2 highlighted normal text
  1700.            3 help text
  1701.            4 highlighted help text
  1702.            5 error message
  1703.            6 highlighted error message
  1704.            7 emphasized text
  1705.            8 marked text
  1706.            9-16 are reverse video versions of 1-8
  1707.     DBh  use physical attributes for characters
  1708.     DCh  enable special actions for control characters (default)
  1709.     DDh  disable special control char handling, all chars displayable by
  1710.          BIOS TTY call
  1711.     DEh  write both character and attribute (default)
  1712.     DFh  write character only, leave attribute untouched
  1713.     E0h  repeat following commands through E1h opcode
  1714.          BYTE number of times to repeat (00h means 256 times)
  1715.     E1h  end of commands to repeat, start repeating them
  1716.     E2h  set current output color
  1717.          BYTE color
  1718.     E3h  clear virtual screen from scroll origin to end using current color
  1719.     E4h  redraw window
  1720.     E5h  select menu style
  1721.          BYTE style (normally 18h)
  1722.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1723.           this stream
  1724.     E5h  (panel file only)
  1725.          BYTE modifier
  1726.         bits 7,6 = 11 panel stream creates new window
  1727.              = 10 panel defines new field table for existing window
  1728.              = 01 panel stream uses existing window & field table
  1729.         bit 5 = 1 stream contains a field table (create kyboard object)
  1730.         bit 4 = 1 stream defines input fields (create keyboard object)
  1731.         bit 3 = 1 stream defines select fields but not input fields
  1732.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1733.         bit 1 reserved
  1734.         bit 0 reserved
  1735.     E6h  create new window and perform rest of manipulations in new window
  1736.          BYTE number of rows
  1737.          BYTE number of columns
  1738.          Return: DWORD object handle of new window returned on stack at end
  1739.          Note: the window is created with a physical size of 0x0 at the
  1740.              same position as the window to which this stream was sent
  1741.     E7h  no operation
  1742.     E8h  scroll area up (top left corner defined by opcode C1h)
  1743.          BYTE height
  1744.          BYTE width
  1745.     E9h  scroll area down (top left corner defined by opcode C1h)
  1746.          BYTE height
  1747.          BYTE width
  1748.     EAh  scroll area left (top left corner defined by opcode C1h)
  1749.          BYTE height
  1750.          BYTE width
  1751.     EBh  scroll area right (top left corner defined by opcode C1h)
  1752.          BYTE height
  1753.          BYTE width
  1754.     ECh  set logical attributes for window contents
  1755.          BYTE video modes command applies to
  1756.         bit 7    monochrome
  1757.         bit 6    color text, EGA/VGA graphics
  1758.         bit 5    medium-resolution CGA graphics
  1759.         bit 4    high-resolution CGA graphics
  1760.          BYTE which attributes to set
  1761.         bit 7  if set, copy single following byte to indicated attribs
  1762.         bits 4-6  # of first attribute to change - 1
  1763.         bits 0-3  # of consecutive attributes to change
  1764.          N BYTEs new attributes
  1765.     EDh  set logical attributes for window frame
  1766.          BYTE video modes command applies to (see opcode ECh)
  1767.          BYTE which attributes to set
  1768.         bit 7  if set, copy single following byte to indicated attrs
  1769.         bits 4-6  # of first attribute to change - 1
  1770.         bits 0-3  # of consecutive attributes to change
  1771.          N BYTEs new attributes
  1772.           attributes
  1773.                1 = top left corner
  1774.                2 = top right corner
  1775.                3 = bottom left corner
  1776.                4 = bottom right corner
  1777.                5 = top edge
  1778.                6 = bottom edge
  1779.                7 = left edge
  1780.                8 = right edge
  1781.     EEh  set characters for window frame
  1782.          BYTE video modes command applies to (see opcode ECh)
  1783.          BYTE which characters to set
  1784.         bit 7  if set, copy single following byte to indicated chars
  1785.         bits 4-6  # of first char to change - 1
  1786.         bits 0-3  # of consecutive chars to change
  1787.          N BYTEs new chars (same relative position as attributes above)
  1788.     EFh  set window name
  1789.          BYTE length of name (should be in range 0 to logical screen width)
  1790.          N BYTEs name
  1791.     F0h  clear input field to blanks
  1792.          BYTE field number
  1793.     F1h  fill input field with character
  1794.          BYTE field number
  1795.          BYTE char
  1796.     F2h  set color of input field
  1797.          BYTE field number (1-N)
  1798.          BYTE attribute
  1799.     F3h  set initial contents of input field
  1800.          BYTE field number (1-N)
  1801.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1802.     F4h  position cursor to start of specific input field
  1803.          BYTE field number (1-N)
  1804.     F5h  change field table entry
  1805.          BYTE field number
  1806.          7-8 BYTEs field table entry (see opcode FFh below)
  1807.     F6h  set field type
  1808.          BYTE field number
  1809.          BYTE type
  1810.             00h inactive
  1811.             40h output field
  1812.             80h input field
  1813.             C0h deselected field
  1814.             C2h selected field
  1815.     F7h  "broadcast write"    write data to fields with program output bit
  1816.         set in field table entry, in field number order
  1817.          N BYTEs (total length of all program output fields)
  1818.     F8h  scroll field up a line
  1819.          BYTE field number
  1820.     F9h  scroll field down a line
  1821.          BYTE field number
  1822.     FAh  scroll field left
  1823.          BYTE field number
  1824.     FBh  scroll field right
  1825.          BYTE field number
  1826.     FCh  set field table header
  1827.          BYTE number of fields (must be <= existing number of fields)
  1828.          BYTE screen behavior bits
  1829.         bit 7  reserved
  1830.         bit 6  set if menu items may be selected via keyboard
  1831.         bit 5  set if left mouse button in "status" mode (press
  1832.             anywhere in window immediately returns control to app)
  1833.         bit 4  set if right mouse button in "status" mode
  1834.         bit 3  if set, select fields return contents or blanks rather
  1835.             than 'Y' or 'N'
  1836.         bit 2  if set, modified bits reset on return to application
  1837.         bits 0,1 = 00 no data returned on read of keyboard
  1838.                01 data returned as array of chars containing
  1839.                 all fields packed together, with no field
  1840.                 numbers
  1841.                10 data returned as numbered variable-length
  1842.                 records for all fields
  1843.                11 data returned as numbered variable-length
  1844.                 records for the fields which were modified
  1845.          BYTE current input field (updated by DESQview)
  1846.          BYTE current select field (updated by DESQview)
  1847.          BYTE attribute for select fields when they are pointed at
  1848.          BYTE attribute for select fields which have been selected
  1849.     FDh  reset modified bit for all fields
  1850.     FEh  reset selected and modified bits for all fields
  1851.     FFh  set up input fields
  1852.          6 BYTEs table header (see opcode FCh above)
  1853.          the field table entries, one for each field
  1854.          BYTE start row       \
  1855.          BYTE start column  \ if menu selection and start is to
  1856.          BYTE end row        / right or below end, select from kbd only
  1857.          BYTE end column   /
  1858.          BYTE field type
  1859.             bits 7,6 = 00 inactive (non-entry) field
  1860.                    01 echos keystrokes input to make menu selection
  1861.                    10 fill-in field
  1862.                    11 select field
  1863.             bit 5  field can be filled by broadcast write (F7h opcode)
  1864.             bit 4  reserved
  1865.             bit 3  reserved
  1866.             bit 2  reserved
  1867.             bit 1  set if field selected
  1868.             bit 0  set if field modified
  1869.          BYTE modifier
  1870.               if type is fill-in, then bit flags to determine behavior
  1871.               bit 7     if set, automatically enter CR when field full
  1872.               bit 6     move to next field when current field is full
  1873.               bit 5     if set, enter text from right end (for numbers)
  1874.               bit 4     if set, force input to uppercase
  1875.               bit 3     if set, clear old contents on first keystroke
  1876.               bit 2     if set, input returned when cursor moves out
  1877.                  of modified field ("validate",API level 2.02+)
  1878.               bit 1     reserved
  1879.               bit 0     reserved
  1880.               if select field, first key to press to activate
  1881.               00h if have to point-&-click or is an extended-ASCII
  1882.                   keystroke (only if two-key menus enabled)
  1883.          BYTE (select field only) normal color of field
  1884.          BYTE second key for select field.  This byte is present iff
  1885.               two-letter menu entries selected with opcode E5h, and
  1886.               in that case is present regardless of field type
  1887.          Note: DESQview uses and updates the actual copy of the information
  1888.            which is contained in the stream.  Thus this info must remain
  1889.            intact until after the data entry is complete.
  1890.  
  1891. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1892.     A0h return logical cursor row in next byte
  1893.     A1h return logical cursor column in next byte
  1894.     A2h return top row of scrolling region in next byte
  1895.     A3h return left column of scrolling region in next byte
  1896.     A4h return row of physical window origin in next byte
  1897.     A5h return column of physical window origin in next byte
  1898.     A6h return height of physcial window in next byte
  1899.     A7h return width of physical window in next byte
  1900.     A8h return row of viewport origin in next byte
  1901.     A9h return column of viewport origin in next byte
  1902.     AAh return height of virtual screen in next byte
  1903.     ABh return width of virtual screen in next byte
  1904.     AFh return current video mode in next byte
  1905.     C0h return current logical cursor position in next two bytes
  1906.     C1h return top left corner of scrolling region in next two bytes
  1907.     C2h return current window position in next two bytes
  1908.     C3h return current window size in next two bytes
  1909.     C4h return current viewport origin in next two bytes
  1910.     C5h return current virtual screen size in next two bytes
  1911.     D0h \ overwritten with D0h if frames may fall off screen edge
  1912.     D1h /               D1h if frames always displayed entirely
  1913.     D2h \ overwritten with D2h if DESQview controls color palette
  1914.     D3h /               D3h if application changes color palette
  1915.     D4h \ overwritten with D4h if window visible
  1916.     D5h /               D5h if window hidden
  1917.     D6h \ overwritten with D6h if window has frame
  1918.     D7h /               D7h if window unframed
  1919.     D8h \ overwritten with D8h if reading characters from window
  1920.     D9h /               D9h if reading attributes from window
  1921.     DAh \ overwritten with DAh if using logical attributes
  1922.     DBh /               DBh if using physical attributes
  1923.     DCh \ overwritten with DCh if TTY control char interpretation on
  1924.     DDh /               DDh if TTY control char interpretation off
  1925.     DEh \ overwritten with DEh if writing both characters and attributes
  1926.     DFh /               DFh if leaving attributes untouched
  1927.     E2h return current color in next byte
  1928.     ECh get logical attributes for window contents
  1929.         BYTE execute call if currently in specified video mode
  1930.         bit 7    monochrome
  1931.         bit 6    color text, EGA/VGA graphics
  1932.         bit 5    medium-resolution CGA graphics
  1933.         bit 4    high-resolution CGA graphics
  1934.         BYTE which attributes to get
  1935.         bit 7 unused???
  1936.         bits 4-6 first attribute to get - 1
  1937.         bits 0-3 # consecutive attributes
  1938.         N BYTEs buffer to hold attributes
  1939.     EDh get logical attributes for window frame
  1940.         BYTE execute call if currently in video mode (see opcode ECh)
  1941.         BYTE which attributes to get
  1942.         bit 7 unused???
  1943.         bits 4-6 first attribute to get - 1
  1944.         bits 0-3 # consecutive attributes
  1945.         N BYTEs buffer to hold attributes
  1946.     EEh get characters for window frame
  1947.         BYTE execute call if currently in video mode (see opcode ECh)
  1948.         BYTE which attributes to get
  1949.         bit 7 unused???
  1950.         bits 4-6 first char to get - 1
  1951.         bits 0-3 # consecutive chars
  1952.         N BYTEs buffer to hold chars
  1953.     EFh return first N characters of current window name
  1954.         BYTE    max length of returned name
  1955.         N BYTEs buffer to hold window name
  1956.     F3h return contents of specified field
  1957.         BYTE field number
  1958.         N BYTEs buffer to hold field contents (size exactly equal to field
  1959.             size)
  1960.     F5h get field table entry
  1961.         BYTE field number
  1962.         7-8 BYTEs buffer to hold field table entry
  1963.            Notes: DV < 2.26 always returns 7 bytes
  1964.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1965.             table is using 8-byte entries and eighth byte after
  1966.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1967.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1968.             depending on the field table entry size
  1969.     F6h get type of a field
  1970.         BYTE field number
  1971.         BYTE type
  1972.     FCh get field table header
  1973.         6 BYTEs buffer to store header
  1974.  
  1975. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1976.     00h allow window to be moved horizontally
  1977.     01h allow window to be moved vertically
  1978.     02h allow window to change width
  1979.     03h allow window to change height
  1980.     04h allow window to be scrolled horizontally
  1981.     05h allow window to be scrolled vertically
  1982.     06h allow "Close Window" menu selection for application
  1983.     07h allow "Hide Window" menu selection for application
  1984.     08h allow application to be suspended ("Rearrange/Freeze")
  1985.     0Eh allow "Scissors" menu
  1986.     10h allow DESQview main menu to be popped up
  1987.     11h allow "Switch Windows" menu
  1988.     12h allow "Open Window" menu
  1989.     13h allow "Quit" menu selection
  1990.     20h-33h opposite of 00h-13h, disallow specified action
  1991.     40h notify if horizontal position of window changes
  1992.     41h notify if vertical position of window changes
  1993.     42h notify if width of window changes
  1994.     43h notify if height of window changes
  1995.     44h notify if window scrolled horizontally
  1996.     45h notify if window scrolled vertically
  1997.     46h notify if window is closed--program has to clean up and exit itself
  1998.     47h notify if window is hidden
  1999.     48h notify if "?" on main menu selected
  2000.     49h notify if pointer message sent to window
  2001.     4Ah notify if window is placed in foreground
  2002.     4Bh notify if window is placed in background
  2003.     4Ch notify if video mode changes
  2004.     4Dh notify if "Scissors" menu "Cut" option selected
  2005.     4Eh notify if "Scissors" menu "Copy" option selected
  2006.     4Fh notify if "Scissors" menu "Paste" option selected
  2007.     50h notify if DESQview main menu about to pop up
  2008.     51h notify if DESQview main menu popped down
  2009.     60h-71h     opposite of 40h-51h: don't notify on specified event
  2010.     84h attach window to parent task's window (both move together)
  2011.     85h detach window from parent task's window (may move independently)
  2012.     86h disable background operation for application
  2013.     87h enable running in background
  2014.     88h set minimum size of physical window
  2015.         BYTE rows
  2016.         BYTE columns
  2017.     89h set maximum size of physical window
  2018.         BYTE rows
  2019.         BYTE cols
  2020.     8Ah set primary asynchronous notification routine
  2021.         DWORD address of routine, 0000h:0000h means none (see also below)
  2022.     8Bh set async notification parameter
  2023.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  2024.     ACh (DV2.2+) perform regular select field attribute processing
  2025.     ADh (DV2.2+) protect attributes in selected field from being lost
  2026.     AEh make window default notify window for owning app (API level 2.00+)
  2027.     AFh set selected field marker character
  2028.         BYTE character to display at left edge of selected fields
  2029.     BCh set standard field processing mode 
  2030.     BDh set alternate field processing mode (enables cursor pad for menus)
  2031.     BEh disables changing reverse logical attributes with ECh opcode
  2032.     BFh enables changing reverse logical attributes with ECh opcode
  2033.     C0h make current window topmost in system
  2034.     C1h force current process into foreground
  2035.     C2h make current window topmost in process
  2036.     C3h position mouse pointer relative to origin of current field
  2037.         BYTE rows below upper left corner of field
  2038.         BYTE columns to right of upper left corner of field
  2039.     C4h position mouse pointer relative to origin of given field
  2040.         BYTE field number
  2041.         BYTE rows below upper left corner of field
  2042.         BYTE columns to right of upper left corner of field
  2043.     C5h orphan current window (also hides it)
  2044.         Note: must be last in stream; all subsequent commands ignored
  2045.     C6h show all windows for this process
  2046.     C7h hide all windows for this process
  2047.     C8h suspend process and hide all its windows
  2048.     C9h force current process into background
  2049.     CAh make current window bottom-most in process
  2050.     CBh cancel current window manager operation, remove DV menu, give 
  2051.         control to topmost application
  2052.     CCh orphan window and give it to the system for use as paste data
  2053.     CEh reorder windows
  2054.         DWORD pointer to null-terminated list of words
  2055.           each word is segment of object handle for a window
  2056.     FFh no operation
  2057.  
  2058. MODES 14h to 1Fh "USER STREAMS"
  2059.     normally NOPs, but may be defined by SETESC message to invoke FAR
  2060.     routines, one for each mode number
  2061.       on entry to handler,
  2062.         DS:SI -> first byte of actual stream (not header)
  2063.         CX = #bytes in stream
  2064.         ES:DI = window's handle
  2065.  
  2066. Asynchronous notification routine defined by manager stream 8Ah called with:
  2067.     ES:DI = handle of window
  2068.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  2069.        mailbox contains message indicating event
  2070.           Opcode
  2071.            40h  horizontal movement
  2072.            DWORD object handle of window
  2073.            BYTE     new row
  2074.            BYTE     new col
  2075.            41h  vertical movement
  2076.            DWORD object handle of window
  2077.            BYTE     new row
  2078.            BYTE     new col
  2079.            42h  horizontal size change
  2080.            DWORD object handle of window
  2081.            BYTE     new rows
  2082.            BYTE     new cols
  2083.            43h  vertical size change
  2084.            DWORD object handle of window
  2085.            BYTE     new rows
  2086.            BYTE     new cols
  2087.            44h  scrolled horizontally
  2088.            DWORD object handle of window
  2089.            BYTE     mouse row within window
  2090.            BYTE     mouse column within window
  2091.            BYTE     field mouse is on, 0 if none
  2092.            BYTE     amount moved: >0 right, <0 left, 0 done
  2093.            45h  scrolled vertically
  2094.            DWORD object hande of window
  2095.            BYTE     mouse row within window
  2096.            BYTE     mouse column within window
  2097.            BYTE     field mouse is on, 0 if none
  2098.            BYTE     amount moved: >0 down, <0 up, 0 done
  2099.            46h  window close request
  2100.            DWORD object handle of window
  2101.            BYTE     mouse pointer row
  2102.            BYTE     mouse pointer column
  2103.            BYTE     field mouse is on, 0 if none
  2104.            47h  application's windows hidden
  2105.            48h  Help for Program selected
  2106.            DWORD object handle of window
  2107.            BYTE     mouse pointer row
  2108.            BYTE     mouse pointer column
  2109.            BYTE     field mouse is on, 0 if none
  2110.            49h  pointer message sent to window
  2111.            DWORD pointer handle which received message
  2112.            4Ah  switched to window from another ("raise")
  2113.            4Bh  switched away from the window ("lower")
  2114.            4Ch  video mode changed
  2115.            BYTE new BIOS video mode
  2116.            4Dh  Scissors/cUt selected
  2117.            DWORD object handle of window
  2118.            BYTE     row of upper left corner
  2119.            BYTE     column of upper left corner
  2120.            BYTE     field number ul corner is in, 0=none
  2121.            DWORD handle of orphaned window created with
  2122.              copy of data from specified region
  2123.            BYTE     height of region
  2124.            BYTE     width of region
  2125.            4Eh  Scissors/Copy selected
  2126.            DWORD object handle of window
  2127.            BYTE     row of upper left corner
  2128.            BYTE     column of upper left corner
  2129.            BYTE     field number ul corner is in, 0=none
  2130.            DWORD handle of orphaned window created with
  2131.              copy of data from specified region
  2132.            BYTE     height of region
  2133.            BYTE     width of region
  2134.            4Fh  Scissors/Paste selected
  2135.            DWORD object handle of window
  2136.            BYTE     row of upper left corner
  2137.            BYTE     column of upper left corner
  2138.            BYTE     field number ul corner is in, 0=none
  2139.            DWORD handle of orphaned window with data
  2140.            BYTE     height of region
  2141.            BYTE     width of region
  2142.             Note: orphaned data window should be adopted or freed
  2143.                 when done
  2144.            50h  main menu about to pop up
  2145.            51h  main menu popped down
  2146. Return: all registers unchanged
  2147. --------Q-1512--BH06-------------------------
  2148. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  2149.     AH = 12h
  2150.     BH = 06h
  2151.     BL = object
  2152.         00h object handle in DWORD on top of stack
  2153.         mailbox, keyboard, pointer, or timer
  2154.         (DV 2.50+) window
  2155.         01h (DV 2.50+) current task's window
  2156.         04h given task's keyboard (task's handle on top of stack)
  2157.         05h current task's default keyboard
  2158.     STACK: DWORD new priority of object in task's OBJECTQ
  2159.             (new priority of task if window handle)
  2160. Notes:    initially all objects have the same default value.  Should only make 
  2161.       relative adjustments to this default value.
  2162.     when changing priorities, all objects already on the objectq are
  2163.       reordered
  2164.     for window handles, only the non-blocked task(s) with the highest
  2165.       priority receive CPU time under DESQview 2.50-2.52; the default
  2166.       priority is 0Ah
  2167. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  2168. --------Q-1512--BH07-------------------------
  2169. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  2170.     AH = 12h
  2171.     BH = 07h
  2172.     BL = object
  2173.         00h object handle in DWORD on top of stack
  2174.         mailbox, keyboard, pointer, or timer
  2175.         (DV 2.50+) window
  2176.         01h (DV 2.50+) current task's window
  2177.         04h given task's keyboard (task's handle on top of stack)
  2178.         05h current task's default keyboard
  2179. Return: STACK: DWORD object priority
  2180. Note:    initially all objects have the same default value.  Should only make 
  2181.       relative adjustments to this default value.
  2182. SeeAlso: AH=12h/BH=06h
  2183. --------Q-1512--BH08-------------------------
  2184. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  2185.     AH = 12h
  2186.     BH = 08h
  2187.     BL = object
  2188.         00h handle in DWORD on top of stack
  2189.         window: total character positions in window
  2190.         timer: elapsed time since timer started
  2191.         pointer: number of messages queued to pointer object
  2192.         panel: number of panels in panel file
  2193.         keyboard: number of input buffers queued
  2194.         01h total chars in current task's default window
  2195.         02h number of messages in task's mailbox (task's handle on stack)
  2196.         03h number of messages in current task's mailbox
  2197.         04h number of input buffers queued in task's kbd (handle on stack)
  2198.         05h number of input buffers queued for current task's default kbd
  2199.         06h number of objects queued in OBJECTQ (task's handle on stack)
  2200.         07h number of objects queued in current task's OBJECTQ
  2201.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  2202.         0Dh (DV 2.26+) total chars in parent task's window
  2203. Return: DWORD on top of stack is result
  2204. Note:    for panel objects, a count of zero is returned if no panel file is open
  2205.       for the object
  2206. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  2207. --------Q-1512--BH09-------------------------
  2208. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  2209.     AH = 12h
  2210.     BH = 09h
  2211.     BL = object
  2212.         00h handle in DWORD on top of stack
  2213.         window: get chars/line
  2214.         timer: get 1/100 seconds remaining before timer expires
  2215.         mailbox: (DV/X) get number of bytes queued to mailbox
  2216.         01h get number of chars/line in current task's default window
  2217.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  2218.         0Dh (DV 2.26+) get chars/line in parent task's window
  2219. Return: DWORD on top of stack is length
  2220. SeeAlso: AH=12h/BH=08h
  2221. --------Q-1512--BH0A-------------------------
  2222. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  2223.     AH = 12h
  2224.     BH = 0Ah
  2225.     BL = window to write to
  2226.         00h window handle is DWORD on top of stack
  2227.         01h current task's default window
  2228.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2229.         0Dh (DV 2.26+) default window of parent of current task
  2230.     STACK:    DWORD count of attributes
  2231.         DWORD address of attribute string
  2232.         DWORD count of characters
  2233.         DWORD address of character string
  2234. Notes:    if one string is longer than the other, the shorter one will be reused
  2235.       until the longer one is exhausted
  2236.     the cursor is left just after the last character written
  2237. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  2238. --------Q-1512--BH0A-------------------------
  2239. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  2240.     AH = 12h
  2241.     BH = 0Ah
  2242.     BL = mailbox to write to
  2243.         00h handle is DWORD on top of stack
  2244.         02h default mailbox of task whose handle is on top of stack
  2245.         03h current task's default mailbox
  2246.     STACK:    DWORD    status (low byte)
  2247.         DWORD    length of message
  2248.         DWORD    address of message
  2249. Notes:    the message is copied into either system or common memory
  2250.     insufficient memory normally causes the process to be aborted; under
  2251.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  2252. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  2253. --------Q-1512--BH0A-------------------------
  2254. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  2255.     AH = 12h
  2256.     BH = 0Ah
  2257.     BL = object
  2258.         00h handle is DWORD on top of stack
  2259.         timer: start timer for specified interval
  2260.         pointer: set control flags
  2261.         keyboard: set control flags
  2262.         04h set control flags on KEYBOARD object (handle on top of stack)
  2263.         05h set control flags on task's default KEYBOARD object
  2264.     STACK: (if timer)   DWORD duration in 1/100 seconds
  2265.            (otherwise)  DWORD bits to set
  2266. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  2267.  
  2268. For keyboard objects, the bits have the following significance:
  2269.     bit 15 reserved, can't be set
  2270.     bit 14 unused
  2271.     bit 13 reserved, can't be set
  2272.     bit 12-6 unused
  2273.     bit 5  (DV 2.2+) exclusive input
  2274.     bit 4  filter all keys (used with handler established by SETESC)
  2275.         if 0, only keys that would normally be displayed are filtered
  2276.     bit 3  program continues executing while input in progress
  2277.     bit 2  insert mode active for field mode
  2278.     bit 1  hardware cursor displayed when task is hardware cursor owner
  2279.         must be set if keyboard in field mode and field table includes
  2280.         input fields
  2281.     bit 0  keyboard is in field mode rather than keystroke mode
  2282.  
  2283. For pointer objects, the bits have the following significance:
  2284.     bit 15 reserved, can't be set
  2285.     bit 14-8 unused
  2286.     bit 7  mouse pointer is hidden while in window
  2287.     bit 6  get messages even if window not topmost
  2288.     bit 5  get messages even if window not foreground
  2289.     bit 4  multiple clicks separated by less than 1/3 second are counted
  2290.         and returned in a single message
  2291.     bit 3  pointer position is relative to screen origin, not window origin
  2292.     bit 2  send message on button release as well as button press
  2293.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  2294.         pointer leaves the window
  2295.     bit 0  send message only on button activity, not movement
  2296.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  2297. --------Q-1512--BH0B-------------------------
  2298. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  2299.     AH = 12h
  2300.     BH = 0Bh
  2301.     BL = window to write attributes to
  2302.         00h handle is DWORD on top of stack
  2303.         01h current task's default window
  2304.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2305.         0Dh (DV 2.26+) default window of parent of current task
  2306.     STACK:    DWORD number of attributes to write
  2307.         DWORD address of attributes
  2308. Note:    the attributes are written starting at the current cursor position; the
  2309.       cursor is left just after the last position written
  2310. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  2311. --------Q-1512--BH0B-------------------------
  2312. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  2313.     AH = 12h
  2314.     BH = 0Bh
  2315.     BL = mailbox to write to
  2316.         00h handle is DWORD on top of stack
  2317.         02h default mailbox of task whose handle is on top of stack
  2318.         03h current task's default mailbox
  2319.     STACK:    DWORD    status (low byte)
  2320.         DWORD    length of message
  2321.         DWORD    address of message
  2322. Notes:    only a pointer to the message is stored, but the write may still fail
  2323.       due to insufficient memory
  2324.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  2325. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  2326. --------Q-1512--BH0B-------------------------
  2327. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  2328.     AH = 12h
  2329.     BH = 0Bh
  2330.     BL = OBJECTQ from which to remove all copies of a particular object
  2331.         06h OBJECTQ of task whose handle is on top of stack
  2332.         07h task's default OBJECTQ
  2333.     STACK:    DWORD    handle of object to remove
  2334. Note:    should be sent whenever an object is erased or closed
  2335. --------Q-1512--BH0B-------------------------
  2336. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  2337.     AH = 12h
  2338.     BH = 0Bh
  2339.     BL = object
  2340.         00h handle is DWORD on top of stack
  2341.         pointer: reset control flags
  2342.         keyboard: reset control flags
  2343.         04h clear control flags on KEYBOARD object (handle on top of stack)
  2344.         05h clear control flags on task's default KEYBOARD object
  2345.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  2346. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  2347. --------Q-1512--BH0C-------------------------
  2348. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  2349.     AH = 12h
  2350.     BH = 0Ch
  2351.     BL = object
  2352.         00h handle is DWORD on top of stack
  2353.         window:      fill with given character from scroll origin to end
  2354.         keyboard: attach to a window
  2355.         timer:      open
  2356.         pointer:  start taking input for window
  2357.         panel:      associate with a panel file
  2358.         01h fill task's default window with given char from scrl org to end
  2359.         02h open given task's mailbox for input (task's handle on stack)
  2360.         03h open current task's mailbox
  2361.         04h attach a KEYBOARD to a window (handle on top of stack)
  2362.         05h attach task's default KEYBOARD to a window
  2363.         06h open a task's OBJECTQ (task's handle on top of stack)
  2364.         07h open current task's OBJECTQ
  2365.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  2366.         0Dh (DV 2.26+) fill default window of parent of current task
  2367.      STACK: (if window)   DWORD character to fill with
  2368.         (if keyboard) DWORD handle of window to attach to
  2369.         (if pointer)  DWORD handle of window to attach to
  2370.         (if panel)    DWORD length of filename or resident panel
  2371.                   DWORD address of filename or resident panel
  2372.         (otherwise)   nothing
  2373. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  2374.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  2375.       the panel file
  2376.     result code of open may be retrieved with STATUS message
  2377.     logical cursor is left at scroll origin after filling window
  2378.     the task opening a mailbox becomes its owner, and the only task allowed
  2379.       to read the mailbox
  2380.     messages are only sent to a pointer object when the mouse is positioned
  2381.       in the window to which the pointer has been attached
  2382.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  2383.       messages automatically open the timer
  2384. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  2385. --------Q-1512--BH0D-------------------------
  2386. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  2387.     AH = 12h
  2388.     BH = 0Dh
  2389.     BL = object
  2390.         00h handle is DWORD on top of stack
  2391.         timer:      close
  2392.         keyboard: detach from window and discard queued input
  2393.         pointer:  stop taking input
  2394.         panel:      close
  2395.         mailbox:  close, unlock, and discard any pending messages
  2396.         02h close given task's mailbox (task's handle on top of stack)
  2397.         03h close task's default mailbox
  2398.         04h close KEYBOARD object (handle on top of stack)
  2399.         05h close task's default KEYBOARD
  2400.         06h close givent task's OBJECTQ (task's handle on top of stack)
  2401.         07h close current task's OBJECTQ
  2402. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2403.       ERASE message (AH=12h/BH=0Eh)
  2404.     when a panel object is closed, the panel file and any panels currently
  2405.       in use are freed; window and keyboard objects created by APPLY are
  2406.       not affected, but field mode input ceases
  2407.     open but idle timer objects consume a small amount of CPU time
  2408. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2409. --------Q-1512--BH0E-------------------------
  2410. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2411.     AH = 12h
  2412.     BH = 0Eh
  2413.     BL = object
  2414.         00h handle is DWORD on top of stack
  2415.         window:      clear from scroll origin to end of window
  2416.         keyboard: discard input
  2417.         timer:      cancel current interval
  2418.         pointer:  discard all pending messages
  2419.         mailbox:  discard all pending messages
  2420.         01h clear task's default window from scroll origin to end
  2421.         02h discard all queued messages in mailbox (handle on top of stack)
  2422.         03h discard all queued messages in current task's default mailbox
  2423.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2424.         05h discard all input queued to task's default KEYBOARD
  2425.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2426.         07h remove all objects from current task's OBJECTQ
  2427.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2428.         0Dh (DV 2.26+) clear default window of parent of current task
  2429. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2430. SeeAlso: AH=12h/BH=02h
  2431. --------Q-1512--BH0F-------------------------
  2432. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2433.     AH = 12h
  2434.     BH = 0Fh
  2435.     BL = object
  2436.         00h handle is DWORD on top of stack
  2437.         timer:     is it running?
  2438.         pointer: return status of last message
  2439.         panel:     verify success of last OPEN or APPLY
  2440.         02h return status of last msg READ from mailbox (handle on stack)
  2441.         03h return status of last msg READ from task's default mailbox
  2442.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  2443.         05h get status of last msg from task's default KEYBOARD
  2444.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2445.         07h return whether task's default OBJECTQ is open or not
  2446. Return: DWORD on top of stack is status
  2447. Notes:    if object is a panel object, the status indicates the error code:
  2448.       00h successful
  2449.       14h panel name not in panel directory
  2450.       15h not enough memory to apply panel
  2451.       16h invalid panel format
  2452.       17h panel file already open
  2453.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2454.       95h not enough memory to open panel file     > that the panel was
  2455.       98h null panel file name            /  not opened
  2456.     if object is a timer, the status is:
  2457.       00000000h open but not running
  2458.       40000000h open and running
  2459.       80000000h closed
  2460.     if object is an OBJECTQ, the status is:
  2461.       00000000h open
  2462.       80000000h closed
  2463.     if object is a keyboard in keystroke mode, the status is the extended
  2464.       character code (scan code) of teh last keystroke
  2465.     if object is a keyboard in field mode, the status indicates the reason
  2466.       for the last return from the field manager
  2467.       00h Enter key pressed
  2468.       01h Button 1 or keystroke selection
  2469.       02h Button 2
  2470.       03h validation
  2471.       04h auto Enter on field
  2472.       1Bh Escape pressed
  2473.       46h ^Break pressed
  2474.       other: extended code for key terminating input
  2475.     the status of mailbox messages sent by the window manager is always 80h
  2476.     the status of a pointer message is the same as the status field in the
  2477.       message
  2478. SeeAlso: AH=12h/BH=04h"READ"
  2479. --------Q-1512--BH10-------------------------
  2480. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2481.     AH = 12h
  2482.     BH = 10h
  2483.     BL = object
  2484.         00h handle is DWORD on top of stack
  2485.         window: return TRUE if logical cursor past end of window
  2486.         mailbox: ???
  2487.         01h returns TRUE if logical cursor past end of task's def window
  2488.         02h return ??? for task's mailbox (task's handle on top of stack)
  2489.         03h return ??? for current task's mailbox
  2490.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2491.         0Dh (DV 2.26+) check log cursor of window of parent task
  2492. Return: DWORD on top of stack is status
  2493. --------Q-1512--BH11-------------------------
  2494. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2495.     AH = 12h
  2496.     BH = 11h
  2497.     BL = window for which to move cursor
  2498.         00h window's handle is DWORD on top of stack
  2499.         01h task's default window
  2500.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2501.         0Dh (DV 2.26+) default window of parent of current task
  2502.     STACK: DWORD column
  2503.            DWORD row
  2504. --------Q-1512--BH11-------------------------
  2505. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2506.     AH = 12h
  2507.     BH = 11h
  2508.     BL = mailbox to name
  2509.         00h DWORD on top of stack is mailbox handle
  2510.         02h use given task's mailbox (task's handle on top of stack)
  2511.         03h use current task's default mailbox
  2512.     STACK: DWORD length of name
  2513.            DWORD address of name
  2514. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  2515. --------Q-1512--BX1100-----------------------
  2516. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2517.     AH = 12h
  2518.     BX = 1100h
  2519.     STACK: DWORD object handle for pointer object
  2520.            DWORD number of colums to scale pointer position to
  2521.            DWORD number of rows to scale pointer position to
  2522. SeeAlso: AH=12h/BX=1200h
  2523. --------Q-1512--BH12-------------------------
  2524. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2525.     AH = 12h
  2526.     BH = 12h
  2527.     BL = window to read from
  2528.         00h handle is DWORD on top of stack
  2529.         01h read next N chars or attributes on task's default window
  2530.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2531.         0Dh (DV 2.26+) read default window of parent of current task
  2532.     STACK: DWORD count
  2533. Return: STACK: DWORD number of bytes actually read
  2534.            DWORD address of buffer containing data
  2535. Notes:    reading starts at the current logical cursor position; the cursor is
  2536.       updated to point at the character following the last one read
  2537.     any translucent blanks (FFh) which are visible on screen are changed
  2538.       to the character which is seen through them
  2539.     the string produced by the read is placed in an input buffer which may
  2540.       be reused by the next READ or READN of a window
  2541.     window stream opcodes D8h and D9h determine whether the read returns
  2542.       characters or attributes
  2543. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2544. --------Q-1512--BH12-------------------------
  2545. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  2546.     AH = 12h
  2547.     BH = 12h
  2548.     BL = mailbox for which to retrieve name
  2549.         00h DWORD on top of stack is mailbox handle
  2550.         02h use given task's mailbox (task's handle on top of stack)
  2551.         03h use current task's default mailbox
  2552.     STACK: DWORD length of buffer for name
  2553.            DWORD pointer to buffer
  2554. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  2555. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2556. Note:    the returned name is not NUL-terminated
  2557. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  2558. --------Q-1512--BX1200-----------------------
  2559. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2560.     AH = 12h
  2561.     BX = 1200h
  2562.     STACK: DWORD object handle for pointer
  2563. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2564.            DWORD pointer pos scaled as if window were this many rows high
  2565. SeeAlso: AH=12h/BX=1100h
  2566. --------Q-1512--BH13-------------------------
  2567. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2568.     AH = 12h
  2569.     BH = 13h
  2570.     BL = window object
  2571.         00h DWORD on top of stack is handle for window to redraw
  2572.         01h redraw task's default window
  2573.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2574.         0Dh (DV 2.26+) redraw default window of parent of current task
  2575. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2576. --------Q-1512--BH13-------------------------
  2577. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  2578.     AH = 12h
  2579.     BH = 13h
  2580.     BL = mailbox from which to read
  2581.         00h DWORD on top of stack is mailbox handle
  2582.         02h use given task's mailbox (task's handle on top of stack)
  2583.         03h use current task's default mailbox
  2584.     STACK: DWORD size of buffer in bytes
  2585.            DWORD pointer to buffer
  2586. Return: STACK: DWORD number of bytes read
  2587. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2588. Notes:    this call blocks if no input is available, but will return less than
  2589.       the requested number of bytes if some (but insufficient) data is
  2590.       available
  2591.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  2592.       4 or 5 set, as common memory may be exhausted by that call when
  2593.       attempting to read the next message
  2594. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  2595. --------Q-1512--BX1300-----------------------
  2596. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2597.     AH = 12h
  2598.     BX = 1300h
  2599.     STACK: DWORD object handle for pointer
  2600.            DWORD character to use for pointer
  2601. --------Q-1512--BH14-------------------------
  2602. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2603.     AH = 12h
  2604.     BH = 14h
  2605.     BL = message modifier
  2606.         00h handle is DWORD on top of stack
  2607.         01h define user stream
  2608.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  2609.         05h intercept keystrokes from task's default KEYBOARD to a window
  2610.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2611.                  DWORD address of FAR user stream handler
  2612.            (if keyboard) DWORD address of FAR filter function
  2613.  
  2614. The keyboard filter function is called when the keyboard is in field mode.  On
  2615. entry,
  2616.     AL = character
  2617.     AH = 00h or extended ASCII code if AL = 00h
  2618.     BL = field number
  2619.     CH = cursor column
  2620.     CL = cursor row
  2621.     DL = field type modifier (sixth item in field table entry)
  2622.     DH = seventh item in field table entry
  2623.     ES:SI = window's handle
  2624.     DS:DI -> field table entry for field containing the cursor
  2625. The filter function should return
  2626.     AH = 00h use keystroke
  2627.          01h ignore keystroke
  2628.          FFh beep and ignore keystroke
  2629. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2630. --------Q-1512--BH14-------------------------
  2631. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2632.     AH = 12h
  2633.     BH = 14h
  2634.     BL = object
  2635.         00h mailbox handle is DWORD on top of stack
  2636.         02h use given task's mailbox (task's handle on top of stack)
  2637.         03h use current task's default mailbox
  2638. Note:    release exclusive access by sending CLOSE message to mailbox
  2639.     access may be requested multiple times, and requires multiple CLOSEs
  2640. SeeAlso: AH=12h/BH=0Dh
  2641. --------Q-1512--BH15-------------------------
  2642. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2643.     AH = 12h
  2644.     BH = 15h
  2645.     BL = object
  2646.         00h DWORD on top of stack
  2647.         mailbox, keyboard, or pointer only
  2648.         02h mailbox for task whose handle is on top of stack
  2649.         03h mailbox for current task
  2650.         04h keyboard for task whose handle is on top of stack
  2651.         05h keyboard for current task
  2652.     STACK: DWORD flags
  2653.         if mailbox:
  2654.             bit 0: all mail messages in common memory
  2655.             bit 1: allow write even if closed
  2656.             bit 2: don't erase messages when mailbox closed
  2657.             bit 4: (DV/X) append messages with like status and
  2658.                 sender (stream-oriented mail)
  2659.             bit 5: (DV/X) store mail in expanded memory (pool
  2660.                 grows as needed)
  2661.             bit 6: (DV/X) make mailbox into non-owned mailbox
  2662.         if keyboard:
  2663.             bit 5: exclusive input when keyboard in use for input
  2664. Return: nothing
  2665. Notes:    only available if the API level has been set to at least 2.20
  2666.     equivalent to performing SUBFROM and ADDTO calls on the object
  2667.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2668.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  2669. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2670. --------Q-1512--BH16-------------------------
  2671. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2672.     AH = 12h 
  2673.     BH = 16h
  2674.     BL = object
  2675.         00h DWORD on top of stack
  2676.         mailbox, keyboard, or pointer only
  2677.         02h mailbox for task whose handle is on top of stack
  2678.         03h mailbox for current task
  2679.         04h keyboard for task whose handle is on top of stack
  2680.         05h keyboard for current task
  2681. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  2682. Notes:    only available if the API level has been set to at least 2.20
  2683.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2684.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2685. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  2686. --------Q-1512--BH17-------------------------
  2687. INT 15 - DESQview v2.42-2.52 - BUG
  2688.     AH = 12h
  2689.     BH = 17h
  2690.     BL = object
  2691.         00h DWORD on top of stack
  2692.         mailbox, keyboard, or pointer only
  2693.         02h mailbox for task whose handle is on top of stack
  2694.         03h mailbox for current task
  2695.         04h keyboard for task whose handle is on top of stack
  2696.         05h keyboard for current task
  2697. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  2698.       keyboards, and pointers, but causes a random branch
  2699.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  2700. --------Q-1512--BH80-------------------------
  2701. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  2702.     AH = 12h
  2703.     BH = 80h
  2704. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  2705.       not pop up a "Programming Error" window, instead returning an error
  2706.       code in AL:
  2707.         00h no error
  2708.         01h invalid values
  2709.         02h alias invalid
  2710.         03h handle valid but wrong type
  2711.         04h invalid handle
  2712. SeeAlso: AH=12h/BH=00h
  2713. --------Q-1512--BH81-------------------------
  2714. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  2715.     AH = 12h
  2716.     BH = 81h
  2717. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  2718.       not pop up a "Programming Error" window, instead returning an error
  2719.       code in AL (see AH=12h/BH=80h)
  2720. SeeAlso: AH=12h/BH=01h
  2721. --------Q-1512--BH82-------------------------
  2722. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  2723.     AH = 12h
  2724.     BH = 82h
  2725. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  2726.       not pop up a "Programming Error" window, instead returning an error
  2727.       code in AL (see AH=12h/BH=80h)
  2728. SeeAlso: AH=12h/BH=02h
  2729. --------Q-1512--BH83-------------------------
  2730. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  2731.     AH = 12h
  2732.     BH = 83h
  2733. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  2734.       not pop up a "Programming Error" window, instead returning an error
  2735.       code in AL (see AH=12h/BH=80h)
  2736. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  2737. --------Q-1512--BH84-------------------------
  2738. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  2739.     AH = 12h
  2740.     BH = 84h
  2741. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  2742.       not pop up a "Programming Error" window, instead returning an error
  2743.       code in AL (see AH=12h/BH=80h)
  2744. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  2745. --------Q-1512--BH85-------------------------
  2746. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  2747.     AH = 12h
  2748.     BH = 85h
  2749. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  2750.       not pop up a "Programming Error" window, instead returning an error
  2751.       code in AL (see AH=12h/BH=80h)
  2752. SeeAlso: AH=12h/BH=05h
  2753. --------Q-1512--BH86-------------------------
  2754. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  2755.     AH = 12h
  2756.     BH = 86h
  2757. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  2758.       not pop up a "Programming Error" window, instead returning an error
  2759.       code in AL (see AH=12h/BH=80h)
  2760. SeeAlso: AH=12h/BH=06h
  2761. --------Q-1512--BH87-------------------------
  2762. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  2763.     AH = 12h
  2764.     BH = 87h
  2765. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  2766.       not pop up a "Programming Error" window, instead returning an error
  2767.       code in AL (see AH=12h/BH=80h)
  2768. SeeAlso: AH=12h/BH=07h
  2769. --------Q-1512--BH88-------------------------
  2770. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  2771.     AH = 12h
  2772.     BH = 88h
  2773. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  2774.       not pop up a "Programming Error" window, instead returning an error
  2775.       code in AL (see AH=12h/BH=80h)
  2776. SeeAlso: AH=12h/BH=08h
  2777. --------Q-1512--BH89-------------------------
  2778. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  2779.     AH = 12h
  2780.     BH = 89h
  2781. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  2782.       not pop up a "Programming Error" window, instead returning an error
  2783.       code in AL (see AH=12h/BH=80h)
  2784. SeeAlso: AH=12h/BH=09h
  2785. --------Q-1512--BH8A-------------------------
  2786. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  2787.     AH = 12h
  2788.     BH = 8Ah
  2789. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  2790.       not pop up a "Programming Error" window, instead returning an error
  2791.       code in AL (see AH=12h/BH=80h)
  2792. SeeAlso: AH=12h/BH=0Ah
  2793. --------Q-1512--BH8B-------------------------
  2794. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  2795.     AH = 12h
  2796.     BH = 8Bh
  2797. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  2798.       not pop up a "Programming Error" window, instead returning an error
  2799.       code in AL (see AH=12h/BH=80h)
  2800. SeeAlso: AH=12h/BH=0Bh
  2801. --------Q-1512--BH8C-------------------------
  2802. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  2803.     AH = 12h
  2804.     BH = 8Ch
  2805. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  2806.       not pop up a "Programming Error" window, instead returning an error
  2807.       code in AL (see AH=12h/BH=80h)
  2808. SeeAlso: AH=12h/BH=0Ch
  2809. --------Q-1512--BH8D-------------------------
  2810. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  2811.     AH = 12h
  2812.     BH = 8Dh
  2813. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  2814.       not pop up a "Programming Error" window, instead returning an error
  2815.       code in AL (see AH=12h/BH=80h)
  2816. SeeAlso: AH=12h/BH=0Dh
  2817. --------Q-1512--BH8E-------------------------
  2818. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  2819.     AH = 12h
  2820.     BH = 8Eh
  2821. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  2822.       not pop up a "Programming Error" window, instead returning an error
  2823.       code in AL (see AH=12h/BH=80h)
  2824. SeeAlso: AH=12h/BH=0Eh
  2825. --------Q-1512--BH8F-------------------------
  2826. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  2827.     AH = 12h
  2828.     BH = 8Fh
  2829. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  2830.       not pop up a "Programming Error" window, instead returning an error
  2831.       code in AL (see AH=12h/BH=80h)
  2832. SeeAlso: AH=12h/BH=0Fh
  2833. --------Q-1512--BH90-------------------------
  2834. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  2835.     AH = 12h
  2836.     BH = 90h
  2837. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  2838.       not pop up a "Programming Error" window, instead returning an error
  2839.       code in AL (see AH=12h/BH=80h)
  2840. SeeAlso: AH=12h/BH=10h
  2841. --------Q-1512--BH91-------------------------
  2842. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  2843.     AH = 12h
  2844.     BH = 91h
  2845. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  2846.       not pop up a "Programming Error" window, instead returning an error
  2847.       code in AL (see AH=12h/BH=80h)
  2848. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  2849. --------Q-1512--BH92-------------------------
  2850. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  2851.     AH = 12h
  2852.     BH = 92h
  2853. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  2854.       not pop up a "Programming Error" window, instead returning an error
  2855.       code in AL (see AH=12h/BH=80h)
  2856. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  2857. --------Q-1512--BH93-------------------------
  2858. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  2859.     AH = 12h
  2860.     BH = 93h
  2861. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  2862.       not pop up a "Programming Error" window, instead returning an error
  2863.       code in AL (see AH=12h/BH=80h)
  2864. SeeAlso: AH=12h/BH=13h
  2865. --------Q-1512--BH94-------------------------
  2866. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  2867.     AH = 12h
  2868.     BH = 94h
  2869. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  2870.       not pop up a "Programming Error" window, instead returning an error
  2871.       code in AL (see AH=12h/BH=80h)
  2872. SeeAlso: AH=12h/BH=14h
  2873. --------Q-1512--BH95-------------------------
  2874. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  2875.     AH = 12h
  2876.     BH = 95h
  2877. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  2878.       not pop up a "Programming Error" window, instead returning an error
  2879.       code in AL (see AH=12h/BH=80h)
  2880. SeeAlso: AH=12h/BH=15h
  2881. --------Q-1512--BH96-------------------------
  2882. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  2883.     AH = 12h
  2884.     BH = 96h
  2885. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  2886.       not pop up a "Programming Error" window, instead returning an error
  2887.       code in AL (see AH=12h/BH=80h)
  2888. SeeAlso: AH=12h/BH=16h
  2889. --------T-1513-------------------------------
  2890. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  2891.     AH = 13h
  2892.     STACK:    WORD    process ID
  2893. Return: AX = status (SYS_OK or SYS_ERROR)
  2894. SeeAlso: AH=12h"VMiX"
  2895. --------T-1513-------------------------------
  2896. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2897.     AH = 13h
  2898. Return: BX:AX -> task control block (see below)
  2899. SeeAlso: AH=15h"MultiDOS"
  2900.  
  2901. Format of MultiDOS Plus v4.0 task control block:
  2902. Offset    Size    Description
  2903.  00h    DWORD    pointer to next TCB
  2904.  04h  8 BYTEs    ASCIZ task name
  2905.  0Ch  2 BYTEs    ???
  2906.  0Eh    WORD    task PSP segment
  2907.  10h    WORD    abort/suspend flags
  2908.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2909.  14h    WORD    priority level (0000h-FFFEh)
  2910.  16h    WORD    time slice counter
  2911.  18h  2 BYTEs    ???
  2912.  1Ah    WORD    suspend timer value
  2913.  1Ch    WORD    stack segment
  2914.  1Eh    WORD    stack pointer
  2915.  20h    WORD    display type
  2916.  22h    WORD    display memory
  2917.  24h  2 BYTEs    ???
  2918.  26h    WORD    termination count
  2919.  28h    WORD    equipment flag for BIO10 driver
  2920.  2Ah    BYTE    background CRT mode
  2921.  2Bh    WORD    screen width in columns
  2922.  2Dh    WORD    screen size in bytes
  2923.  2Fh    WORD    segment of physical screen memory
  2924.  31h 16 BYTEs    eight cursor positions
  2925.  41h    WORD    current cursor shape
  2926.  43h    BYTE    active display page
  2927.  44h    WORD    CRT controller I/O port base
  2928.  46h  2 BYTEs    ???
  2929.  48h    WORD    foreground task flag
  2930.  4Ah  6 BYTEs    ???
  2931.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2932.  52h    DWORD    old INT 22
  2933.  56h    DWORD    old INT 23
  2934.  5Ah    DWORD    old INT 24
  2935.  5Eh    WORD    top of memory for task
  2936.  60h  4 BYTEs    ???
  2937.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2938.  66h    WORD    DTA offset
  2939.  68h  4 BYTEs    ???
  2940.  6Ch    BYTE    current ANSI.SYS attribute
  2941.  6Dh    BYTE    current ANSI.SYS column
  2942.  6Eh    BYTE    current ANSI.SYS row
  2943.  6Fh    BYTE    current ANSI.SYS display state
  2944.  70h    BYTE    maximum ANSI.SYS columns
  2945.  71h    BYTE    current ANSI.SYS page
  2946.  72h    WORD    saved ANSI.SYS cursor position
  2947.  74h    BYTE    ANSI.SYS parameter buffer index
  2948.  75h    BYTE    current ANSI.SYS screen mode
  2949.  76h    BYTE    ANSI.SYS wrap flag
  2950.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2951.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2952.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2953.  85h  3 BYTEs    ???
  2954.  88h 16 BYTEs    request header for DOS driver calls
  2955.  98h 14 BYTEs    ???
  2956.  A6h    WORD    segment of EMS map if EMS task
  2957.  A8h    WORD    flag: task makes EMS calls
  2958.  AAh    WORD    EMS handle for task
  2959.  ACh    WORD    keyboard shift state
  2960.  AEh 12 BYTEs    ???
  2961.  BAh    WORD    TCB of parent if child task
  2962.  BCh    WORD    termination code
  2963.  BEh    WORD    COM port number
  2964.  C0h  4 BYTEs    ???
  2965.  C4h    WORD    current IRQ number
  2966.  C6h  2 BYTEs    ???
  2967.  C8h    WORD    miscellaneous flag word
  2968.  CAh  2 BYTEs    ???
  2969.  CCh    DWORD    old INT 10
  2970.  D0h    WORD    EMS alternate map set number
  2971.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2972. --------T-1514-------------------------------
  2973. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  2974.     AH = 14h
  2975.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  2976.         WORD    bottom right corner of window (high = row, low = col)
  2977. Return: AX = status (SYS_OK)
  2978. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  2979. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  2980. --------T-1514-------------------------------
  2981. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2982.     AH = 14h
  2983. Return: AX = current state
  2984.         0000h MultiDOS Plus command prompt is background task
  2985.         0001h command prompt is foreground task
  2986. SeeAlso: AH=0Bh"MultiDOS"
  2987. --------T-1515-------------------------------
  2988. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  2989.     AH = 15h
  2990.     STACK:    DWORD    pointer to ASCIZ banner    message for top of screen
  2991. Return: AX = status (SYS_OK)
  2992. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  2993. --------T-1515-------------------------------
  2994. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2995.     AH = 15h
  2996. Return: BX:AX -> system block (see below)
  2997. SeeAlso: AH=13h"MultiDOS"
  2998.  
  2999. Format of MultiDOS Plus 4.0 system block:
  3000. Offset    Size    Description
  3001.  00h    WORD    segment of system control block
  3002.  02h    WORD    redirection flag set by /NOREDIRECT
  3003.  04h    WORD    no-INT 10 flag set by /NO10
  3004.  06h    DWORD    old INT 10
  3005.  0Ah    DWORD    new INT 10
  3006.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  3007.  12h    DWORD    pointer to WORD with idle task TCB offset
  3008.  16h    DWORD    pointer to WORD with foreground TCB offset
  3009.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  3010.  1Eh    WORD    Task Control Block size
  3011.  20h    WORD    number of TCBs
  3012.  22h    WORD    flag: EMS present
  3013.  24h    WORD    EMS page frame base segment
  3014.  26h    WORD    16K pages in EMS page frame
  3015.  28h    WORD    base segment for conventional memory tasks
  3016.  2Ah    WORD    conventional memory size in paragraphs
  3017.  2Ch    DWORD    pointer to list of queue pointers
  3018. --------T-1516-------------------------------
  3019. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  3020.     AH = 16h
  3021.     STACK:    DWORD    pointer to I/O Request Packet
  3022.         WORD    top left corner of window (high byte = row, low = col)
  3023.         WORD    bottom right corner of window (high = row, low = col)
  3024. Return: AX = status (SYS_OK or SYS_ERROR)
  3025. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  3026. --------T-1516-------------------------------
  3027. INT 15 - MultiDOS Plus - INITIALIZATION
  3028.     AH = 16h
  3029. Note:    used internally during initialization; any other calls will cause
  3030.       unpredicatable results
  3031. --------T-1517-------------------------------
  3032. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  3033.     AH = 17h
  3034. Return: AH = foreground color
  3035.     AL = background color
  3036. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  3037. --------T-1517-------------------------------
  3038. INT 15 - MultiDOS Plus - MAP IRQ
  3039.     AH = 17h
  3040.     AL = IRQ to map (01h-0Fh)
  3041.     BX = offset of task control block (see AH=13h) to associate with IRQ
  3042. Return: AX = status
  3043.         0000h successful
  3044.         other invalid IRQ
  3045. Note:    the EMS map of the specified TCB is associated with the given interrupt
  3046. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  3047. --------T-1518-------------------------------
  3048. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  3049.     AH = 18h
  3050.     STACK:    WORD    new background/foreground colors
  3051.             bits 3-0: foreground
  3052.             bits 7-4: background
  3053.             bits 15-8: unused
  3054. Return: AX = color
  3055. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  3056. --------T-1518-------------------------------
  3057. INT 15 - MultiDOS Plus - UNMAP IRQ
  3058.     AH = 18h
  3059.     AL = IRQ to unmap (01h-0Fh)
  3060. Return: AX = status
  3061.         0000h successful
  3062.         0001h invalid IRQ
  3063. Note:    results are unpredictable if the IRQ has not been mapped
  3064. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  3065. --------T-1519-------------------------------
  3066. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  3067.     AH = 19h
  3068.     STACK:    WORD    new background/foreground colors
  3069.             bits 3-0: foreground
  3070.             bits 7-4: background
  3071.             bits 15-8: unused
  3072. Return: AX = color
  3073. SeeAlso: AH=18h"VMiX"
  3074. --------T-1519-------------------------------
  3075. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  3076.     AH = 19h
  3077. Return: AX destroyed
  3078. Note:    for MultiDOS internal use only
  3079. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  3080. --------T-151A-------------------------------
  3081. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  3082.     AH = 1Ah
  3083.     STACK:    WORD    interrupt number
  3084.         DWORD    pointer to register structure
  3085. Return: AX = returned flags
  3086. --------T-151A-------------------------------
  3087. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  3088.     AH = 1Ah
  3089.     DS:SI -> 8-byte name
  3090. Return: AL = status
  3091.         00h successful
  3092.         AH = semaphore number (20h-3Fh)
  3093.         04h out of string space
  3094. Notes:    all eight bytes of the name are significant
  3095.     if the name does not already exist, it is added to the name table and
  3096.       associated with a free semaphore number
  3097.     names cannot be destroyed
  3098. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  3099. --------T-151B-------------------------------
  3100. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  3101.     AH = 1Bh
  3102.     STACK:    DWORD    source address
  3103.         DWORD    destination address
  3104.         WORD    number of words to move
  3105. Return: nothing
  3106. --------T-151B-------------------------------
  3107. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  3108.     AH = 1Bh
  3109.     DS:SI -> 8-byte name
  3110. Return: AH = status
  3111.         00h successful
  3112.         02h invalid semaphore number
  3113.         03h caller already owns semaphore
  3114.         04h out of string space
  3115. Notes:    (see AH=01h"MultiDOS")
  3116.     equivalent to AH=1Ah followed by AH=01h
  3117. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  3118. --------T-151C-------------------------------
  3119. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  3120.     AH = 1Ch
  3121.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  3122.         DWORD    pointer to object bitmap
  3123.         WORD    object width in pixels
  3124.         WORD    object height in pixels
  3125. Return: nothing
  3126. SeeAlso: AH=1Dh"VMiX"
  3127. --------T-151C-------------------------------
  3128. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  3129.     AH = 1Ch
  3130.     DS:SI -> 8-byte name
  3131. Return: AH = status
  3132.         00h successful
  3133.         01h not semaphore owner
  3134.         02h invalid semaphore number
  3135.         04h out of string space
  3136. Notes:    (see AH=02h"MultiDOS")
  3137.     equivalent to AH=1Ah followed by AH=02h
  3138. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  3139. --------T-151D-------------------------------
  3140. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  3141.     AH = 1Dh
  3142. Return: AX = current font number (00h-03h)
  3143. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  3144. --------T-151D-------------------------------
  3145. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  3146.     AH = 1Dh
  3147.     DS:SI -> 8-byte name
  3148. Return; AH = status
  3149.         00h semaphore not in use
  3150.         01h semaphore owned by another task
  3151.         02h invalid semaphore number
  3152.         03h caller owns semaphore
  3153.         04h out of string space
  3154. Notes:    (see AH=10h"MultiDOS")
  3155.     equivalent to AH=1Ah followed by AH=10h
  3156. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  3157. --------T-151E-------------------------------
  3158. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  3159.     AH = 1Eh
  3160.     STACK: WORD new font number (00h-03h)
  3161. Return: AX = current font number (00h-03h)
  3162. SeeAlso: AH=1Dh"VMiX"
  3163. --------T-151E00-----------------------------
  3164. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  3165.     AX = 1E00h
  3166.     DX = event/trigger number (00h-3Fh)
  3167. Return: AH = status
  3168.         00h successful
  3169. SeeAlso: AX=1E01h,AX=1E02h
  3170. --------T-151E01-----------------------------
  3171. INT 15 - MultiDOS Plus - TRIGGER EVENT
  3172.     AX = 1E01h
  3173.     DX = event/trigger number (00h-3Fh)
  3174. Return: AH = status
  3175.         00h successful
  3176.         01h invalid event/trigger number
  3177. Notes:    schedules any task waiting for event; if no task is waiting, the event
  3178.       counter is incremented (and will roll over if it was 65535)
  3179.     may be invoked by interrupt handler
  3180. SeeAlso: AX=1E00h,AX=1E02h
  3181. --------T-151E02-----------------------------
  3182. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  3183.     AX = 1E02h
  3184.     DX = event/trigger number (00h-3Fh)
  3185. Return: AH = status
  3186.         00h successful
  3187.         01h invalid event/trigger number
  3188. Note:    if the event counter is zero, the task is suspended until the event is
  3189.       triggered with AX=1E01h; else, the counter is decremented and the
  3190.       call returns immediately
  3191. SeeAlso: AX=1E00h,AX=1E01h
  3192. --------T-151F-------------------------------
  3193. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  3194.     AH = 1Fh
  3195.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  3196.         WORD    bottom right corner of window
  3197. Return: AX = status (SYS_OK)
  3198. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  3199. --------T-151F-------------------------------
  3200. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  3201.     AH = 1Fh
  3202. Return: BX = first segment of conventional memory
  3203.     DX = first segment of EMS swap frame into which MultiDOS will load
  3204.         programs
  3205. --------T-1520-------------------------------
  3206. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  3207.     AH = 20h
  3208. Return: AX = current state
  3209.         0000h multitasking enabled
  3210.         other TCB of task that disabled multitasking
  3211. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  3212. --------c-152000-----------------------------
  3213. INT 15 U - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  3214.     AX = 2000h
  3215. Desc:    stop setting user flag on entry to PRINT critical region
  3216. SeeAlso: AX=2001h
  3217. --------c-152001-----------------------------
  3218. INT 15 U - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  3219.     AX = 2001h
  3220.     ES:BX -> byte which is to be incremented while in a DOS call
  3221. Desc:    specify a user flag which PRINT should set to let an interested
  3222.       application know it is in a critical region
  3223. SeeAlso: AX=2000h
  3224. --------O-152010-----------------------------
  3225. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  3226.     AX = 2010h
  3227.     ???
  3228. Return: ???
  3229. SeeAlso: AX=2011h
  3230. --------O-152011-----------------------------
  3231. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  3232.     AX = 2011h
  3233.     ???
  3234. Return: ???
  3235. SeeAlso: AX=2010h
  3236. --------B-1521-------------------------------
  3237. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  3238.     AH = 21h
  3239.     AL = subfunction
  3240.         00h read POST log
  3241.         01h write POST log
  3242.         BH = device ID
  3243.         BL = error code
  3244. Return: CF set on error
  3245.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  3246.     if function 00h:
  3247.        BX = number of error codes stored
  3248.        ES:DI -> error log
  3249. Note:    the log is a series of words, the first byte of which identifies the
  3250.       error code and the second the device.
  3251. --------B-1522-------------------------------
  3252. INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
  3253.     AH = 22h
  3254. Return: CF set on error
  3255.         AH = status
  3256.     CF clear on success:
  3257.         ES -> segment of ROM BASIC
  3258. --------b-152400-----------------------------
  3259. INT 15 - IBM PS/2 Models ???  - TURN ON ???
  3260.     AX = 2400h
  3261. Return: CF clear
  3262.     AH = 00h
  3263. Note:    also supported by 386MAX v6.01
  3264. SeeAlso: AX=2401h,AX=2402h
  3265. --------b-152401-----------------------------
  3266. INT 15 - IBM PS/2 Models ??? - TURN OFF ???
  3267.     AX = 2401h
  3268. Return: CF clear
  3269.     AH = 00h
  3270. Note:    also supported by 386MAX v6.01
  3271. SeeAlso: AX=2400h,AX=2402h
  3272. --------b-152402-----------------------------
  3273. INT 15 - IBM PS/2 Models ??? - GET STATE OF ???
  3274.     AX = 2402h
  3275. Return: CF clear
  3276.     AH = 00h
  3277.     AL = current state (00h off, 01h on)
  3278. Note:    also supported by 386MAX v6.01
  3279. SeeAlso: AX=2400h,AX=2401h
  3280. --------b-152403-----------------------------
  3281. INT 15 - IBM PS/2 Models ??? - GET ???
  3282.     AX = 2403h
  3283.     ???
  3284. Return: CF clear
  3285.     AH = 00h
  3286.     BX = bit flags???
  3287.         bit 0: ???
  3288.         bit 1: ???
  3289. Note:    also supported by 386MAX v6.01
  3290. --------B-1540-------------------------------
  3291. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  3292.     AH = 40h
  3293.     AL = subfunction
  3294.         00h get system profile in CX and BX
  3295.         01h set system profile from CX and BX
  3296.         02h get internal modem profile in BX
  3297.         03h set internal modem profile from BX
  3298. --------V-154000-----------------------------
  3299. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  3300.     AX = 4000h
  3301. Return: AX = 4000h
  3302.     CL = 00h timeout disabled
  3303.        else timeout in minutes
  3304. SeeAlso: AX=4001h,AX=4600h
  3305. --------V-154001CL00-------------------------
  3306. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  3307.     AX = 4001h
  3308.     CL = 00h timeout disabled
  3309.        else     timeout in minutes
  3310. Return: AL = 00h timeout modified
  3311.          01h timeout cannot be modified
  3312.          40h timeout cannot be modified
  3313.     CL = 00h timeout disabled
  3314.        else timeout in minutes
  3315. SeeAlso: AX=4000h,AX=4601h
  3316. --------B-1541-------------------------------
  3317. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  3318.     AH = 41h
  3319.     AL = condition type
  3320.         bits 0-2: condition to wait for
  3321.              0 any external event
  3322.              1 compare and return if equal
  3323.              2 compare and return if not equal
  3324.              3 test and return if not zero
  3325.              4 test and return if zero
  3326.         bit 3:    reserved
  3327.         bit 4:    1=port address, 0=user byte
  3328.         bits 5-7: reserved
  3329.     BH = condition compare or mask value
  3330.     BL = timeout value times 55 milliseconds
  3331.         00h means no timeout
  3332.     DX = I/O port address if AL bit 4 set
  3333.     ES:DI -> user byte if AL bit 4 clear
  3334. --------B-1542-------------------------------
  3335. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  3336.     AH = 42h
  3337.     AL = 00h to use system profile
  3338.          01h to force suspend regardless of system profile
  3339. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  3340.       power-up, execution will resume following the instruction calling
  3341.       this function
  3342. SeeAlso: AH=44h
  3343. --------b-154280-----------------------------
  3344. INT 15 - Compaq SLT/286 - ENTER STANDBY
  3345.     AX = 4280h
  3346. Return: AH = 42h
  3347.     CF clear if successful
  3348.     CF set if unable to enter standby
  3349. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  3350. --------B-1543-------------------------------
  3351. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  3352.     AH = 43h
  3353. Return: AL = status bits (see below)
  3354.  
  3355. Bitfields for Convertible system status:
  3356.  bit 0    LCD detached
  3357.  bit 1    reserved
  3358.  bit 2    RS232/parallel adapter powered on
  3359.  bit 3    internal modem powered on
  3360.  bit 4    power activated by alarm
  3361.  bit 5    standby power lost
  3362.  bit 6    external power in use
  3363.  bit 7    power low
  3364. --------B-1544-------------------------------
  3365. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  3366.     AH = 44h
  3367.     AL = 00h to power off
  3368.          01h to power on
  3369. SeeAlso: AH=42h
  3370. --------b-154600-----------------------------
  3371. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  3372.     AX = 4600h
  3373. Return: AH = modem configuration information
  3374.         bit 0 powerup state
  3375.             0 off
  3376.             1 on
  3377.         1 modem installed
  3378.         2 IRQ line assignment
  3379.             0 IRQ 4
  3380.             1 IRQ 3
  3381.         3 COM port assignment
  3382.             0 = COM 2
  3383.             1 = COM 1
  3384.         4 modem state
  3385.             0 not assigned
  3386.             1 assigned
  3387.         5 modem is on
  3388.     AL = power conservation status information
  3389.         bit 0  power source (0 internal, 1 external)
  3390.            1-2 low battery state
  3391.             00 no low battery condition
  3392.             01 low battery 1
  3393.             10 reserved
  3394.             11 low battery 2
  3395.            3-4 power conservation mode
  3396.             00 automatic
  3397.             01 on
  3398.             10 off
  3399.             11 reserved
  3400.     BH = default system inactivity timeout (1-21 minutes)
  3401.     BL = current system inactivity timeout (1-21 minutes)
  3402.     CH = default video display inactivity timeout (1-63 minutes)
  3403.     CL = current video display inactivity timeout (1-63 minutes)        
  3404.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  3405.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3406. SeeAlso: AX=4280h,AX=4601h,INT 77
  3407. --------b-154601-----------------------------
  3408. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  3409.     AX = 4601h
  3410.     BL = system inactivity timeout (1-21 minutes)
  3411.        = FFh do not change
  3412.     CL = video display inactivity timeout (1-63 minutes)        
  3413.        = FFh do not change
  3414.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3415.        = FFh do not change
  3416.     DH = 00h turn modem OFF
  3417.        = 01h turn modem ON
  3418.        = FFh do not change modem state
  3419. Return: CF clear if successful
  3420.         AH = 00h
  3421.         BL = current system inactivity timeout (1-21 minutes)
  3422.         CL = current video display inactivity timeout (1-63 minutes)    
  3423.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3424.         DH = FFh modem state unchanged
  3425.            = 00h modem turned OFF
  3426.            = 01h modem turned ON
  3427.     CF set on error
  3428.         AH = 01h input is out of range
  3429.            = 02h - No modem present
  3430. SeeAlso: AX=4600h,INT 77
  3431. --------D-154900-----------------------------
  3432. INT 15 - Far East MS-DOS - GET DOS TYPE
  3433.     AX = 4900h
  3434. Return: CF clear if successful
  3435.         AH = 00h
  3436.         BL = type of DOS running
  3437.         00h DOS/V
  3438.         01h DOS/J or DOS/K (early IBM Japan versions of MS-DOS)
  3439.     CF set on error
  3440.         AH = 86h (function not supported)
  3441. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  3442. SeeAlso: INT 21/AH=30h
  3443. --------b-154DD4-----------------------------
  3444. INT 15 - HP 95LX - INSTALLATION CHECK
  3445.     AX = 4DD4h
  3446. Return: BX = 4850h ("HP") if HP 95LX
  3447.         CX = ??? (0101h)
  3448.         DL = ??? (00h)
  3449. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  3450. SeeAlso: INT 61"HP 95LX"
  3451. --------b-154E-------------------------------
  3452. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  3453.     AH = 4Eh
  3454.     AL = light sleep
  3455.         00h disabled
  3456.         01h enabled
  3457. Note:    when light sleep is disabled, the system will continue running at full
  3458.       speed; when enabled, it may automatically slow to conserve batteries
  3459. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  3460. --------B-154F-------------------------------
  3461. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  3462.     AH = 4Fh
  3463.     AL = hardware scan code
  3464.     CF set
  3465. Return: CF set
  3466.        AL = hardware scan code
  3467.     CF clear
  3468.        scan code should be ignored
  3469. Note:    called by INT 9 handler to translate scan codes; the INT 09 code does
  3470.       not examine the scan code it reads from the keyboard until after
  3471.       this function returns.  This permits software to rearrange the
  3472.       keyboard; for example, swapping the CapsLock and Control keys, or
  3473.       turning the right Shift key into Enter.
  3474. SeeAlso: INT 09,INT 15/AH=C0h
  3475. --------T-1550-------------------------------
  3476. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  3477.     AH = 50h
  3478.     BX = segment of page directory table
  3479.     CX = page number of page table
  3480. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  3481. --------T-1551-------------------------------
  3482. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  3483.     AH = 51h
  3484.     STACK:    DWORD    selector:offset of function
  3485. Return: registers as returned by function
  3486. Note:    executes function with privilege level 0 (highest privilege)
  3487. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  3488. --------T-1552-------------------------------
  3489. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  3490.     AH = 52h
  3491. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  3492. --------p-155300BX0000-----------------------
  3493. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  3494.     AX = 5300h
  3495.     BX = 0000h (device ID of system BIOS)
  3496. Return: CF clear if successful
  3497.         AH = major version (BCD)
  3498.         AL = minor version (BCD)
  3499.         BX = 504Dh ("PM")
  3500.         CX = flags
  3501.         bit 0: 16-bit protected mode interface supported
  3502.         bit 1: 32-bit protected mode interface supported
  3503.         bit 2: CPU idle call reduces processor speed
  3504.         bit 3: BIOS power management disabled
  3505.         bits 4-7 reserved
  3506.     CF set on error
  3507.         AH = error code (86h) (see below)
  3508.  
  3509. Values for error code:
  3510.  01h    power management functionality disabled
  3511.  02h    interface connection already in effect
  3512.  03h    interface not connected
  3513.  04h    real-mode interface not connected
  3514.  05h    16-bit protected-mode interface already connected
  3515.  06h    16-bit protected-mode interface not supported
  3516.  07h    32-bit protected-mode interface already connected
  3517.  08h    32-bit protected-mode interface not supported
  3518.  09h    unrecognized device ID
  3519.  0Ah    invalid parameter value in CX
  3520.  0Bh-1Fh reserved for other interface and general errors
  3521.  20h-3Fh reserved for CPU errors
  3522.  40h-5Fh reserved for device errors
  3523.  60h    can't enter requested state
  3524.  61h-7Fh reserved for other system errors
  3525.  80h    no power management events pending
  3526.  81h-85h reserved for other power management event errors
  3527.  86h    APM not present
  3528.  87h-9Fh reserved for other power management event errors
  3529. --------p-155301BX0000-----------------------
  3530. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  3531.     AX = 5301h
  3532.     BX = 0000h (device ID of system BIOS)
  3533. Return: CF clear if successful
  3534.     CF set on error
  3535.         AH = error code (02h,09h) (see AX=5300h)
  3536. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  3537. --------p-155302BX0000-----------------------
  3538. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  3539.     AX = 5302h
  3540.     BX = 0000h (device ID of system BIOS)
  3541. Return: CF clear if successful
  3542.         AX = real-mode segment base address of protected-mode 16-bit code
  3543.         segment
  3544.         BX = offset of entry point
  3545.         CX = real-mode segment base address of protected-mode 16-bit data
  3546.         segment
  3547.     CF set on error
  3548.         AH = error code (05h,06h,09h) (see AX=5300h)
  3549. Notes:    the caller must initialize two consecutive descriptors with the
  3550.       returned segment base addresses; these descriptors must be valid
  3551.       whenever the protected-mode interface is called, and will have
  3552.       their limits arbitrarily set to 64K.
  3553.     the protected mode interface is invoked by making a far call with the
  3554.       same register values as for INT 15; it must be invoked while CPL=0,
  3555.       the code segment descriptor must have a DPL of 0, the stack must be
  3556.       in a 16-bit segment and have enough room for BIOS use and possible
  3557.       interrupts, and the current I/O permission bit map must allow access
  3558.       to the I/O ports used for power management.
  3559.     functions 00h-03h are not available from protected mode
  3560. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  3561. --------p-155303BX0000-----------------------
  3562. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  3563.     AX = 5303h
  3564.     BX = 0000h (device ID of system BIOS)
  3565. Return: CF clear if successful
  3566.         AX = real-mode segment base address of protected-mode 32-bit code
  3567.         segment
  3568.         EBX = offset of entry point
  3569.         CX = real-mode segment base address of protected-mode 16-bit code
  3570.         segment
  3571.         DX = real-mode segment base address of protected-mode 16-bit data
  3572.         segment
  3573.     CF set on error
  3574.         AH = error code (07h,08h,09h) (see AX=5300h)
  3575. Notes:    the caller must initialize three consecutive descriptors with the
  3576.       returned segment base addresses for 32-bit code, 16-bit code, and
  3577.       16-bit data, respectively; these descriptors must be valid whenever
  3578.       the protected-mode interface is called, and will have their limits
  3579.       arbitrarily set to 64K.
  3580.     the protected mode interface is invoked by making a far call to the
  3581.       32-bit code segment with the same register values as for INT 15; it
  3582.       must be invoked while CPL=0, the code segment descriptor must have a
  3583.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  3584.       for BIOS use and possible interrupts, and the current I/O permission
  3585.       bit map must allow access to the I/O ports used for power management.
  3586.     functions 00h-03h are not available from protected mode
  3587. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  3588. --------p-155304BX0000-----------------------
  3589. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  3590.     AX = 5304h
  3591.     BX = 0000h (device ID of system BIOS)
  3592. Return: CF clear if successful
  3593.     CF set on error
  3594.         AH = error code (03h,09h) (see AX=5300h)
  3595. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  3596. --------p-155305-----------------------------
  3597. INT 15 - Advanced Power Management Specification - CPU IDLE
  3598.     AX = 5305h
  3599. Return: after system leaves idle state
  3600.     CF clear
  3601. Notes:    call when the system is idle and should be suspended until the next
  3602.       system event or interrupt
  3603.     should not be called from within a hardware interrupt handler to avoid
  3604.       reentrance problems
  3605.     if an interrupt causes the system to resume normal processing, the
  3606.       interrupt may or may not have been handled when the BIOS returns
  3607.       from this call; thus, the caller should allow interrupts on return
  3608.     interrupt handlers may not retain control if the BIOS allows
  3609.       interrupts while in idle mode even if they are able to determine
  3610.       that they were called from idle mode
  3611.     the caller should issue this call continuously in a loop until it needs
  3612.       to perform some processing of its own
  3613. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  3614. --------p-155306-----------------------------
  3615. INT 15 - Advanced Power Management Specification - CPU BUSY
  3616.     AX = 5306h
  3617. Return: CF clear
  3618. Notes:    called to ensure that the system runs at full speed even on systems
  3619.       where the BIOS is unable to recognize increased activity (especially
  3620.       if interrupts are hooked by other programs and not chained to the
  3621.       BIOS)
  3622.     this call may be made even when the system is already running at full
  3623.       speed, but it will create unnecessary overhead
  3624.     should not be called from within a hardware interrupt handler to avoid
  3625.       reentrance problems
  3626. SeeAlso: AX=5305h
  3627. --------p-155307-----------------------------
  3628. INT 15 - Advanced Power Management Specification - SET POWER STATE
  3629.     AX = 5307h
  3630.     BX = device ID (see below)
  3631.     CX = system state ID
  3632.         0000h ready (not supported for device ID 0001h)
  3633.         0001h stand-by
  3634.         0002h suspend
  3635.         0003h off (not supported for device ID 0001h)
  3636.         0004h-FFFFh reserved
  3637. Return: CF clear if successful
  3638.     CF set on error
  3639.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  3640. Note:    should not be called from within a hardware interrupt handler to avoid
  3641.       reentrance problems
  3642.  
  3643. Values for device IDs:
  3644.  0000h    system BIOS
  3645.  0001h    all devices for which the system BIOS manages power
  3646.  01xxh    display (01FFh for all attached display devices)
  3647.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  3648.  03xxh    parallel ports (03FFh for all attached parallel ports)
  3649.  04xxh    serial ports (04FFh for all attached serial ports)
  3650.  0500h-FFFFh reserved
  3651. --------p-155307BX0001-----------------------
  3652. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  3653.     AX = 5307h
  3654.     BX = 0001h
  3655.     CX = 0001h
  3656. Return: CF clear
  3657. Notes:    puts the entire system into stand-by mode; normally called in response
  3658.       to a System Stand-by Request notification after any necessary
  3659.       processing, but may also be invoked at the caller's discretion
  3660.     should not be called from within a hardware interrupt handler to avoid
  3661.       reentrance problems
  3662.     the stand-by state is typically exited on an interrupt
  3663. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  3664. --------p-155307BX0001-----------------------
  3665. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  3666.     AX = 5307h
  3667.     BX = 0001h
  3668.     CX = 0002h
  3669. Return: after system is resumed
  3670.     CF clear
  3671. Notes:    puts the entire system into a low-power suspended state; normally
  3672.       called in response to a Suspend System Request notification after
  3673.       any necessary processing, but may also be invoked at the caller's
  3674.       discretion
  3675.     should not be called from within a hardware interrupt handler to avoid
  3676.       reentrance problems
  3677.     the caller may need to update its date and time values because the
  3678.       system could have been suspended for a long period of time
  3679. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  3680. --------p-155308BXFFFF-----------------------
  3681. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  3682.     AX = 5308h
  3683.     BX = FFFFh
  3684.     CX = new state
  3685.         0000h disabled
  3686.         0001h enabled
  3687. Return: CF clear if successful
  3688.     CF set on error
  3689.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  3690. Notes:    when power management is disabled, the system BIOS will not
  3691.       automatically power down devices, enter stand-by or suspended mode,
  3692.       or perform any power-saving actions in response to AX=5305h calls
  3693.     should not be called from within a hardware interrupt handler to avoid
  3694.       reentrance problems
  3695. SeeAlso: AX=5309h
  3696. --------p-155309BXFFFF-----------------------
  3697. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  3698.     AX = 5309h
  3699.     BX = FFFFh
  3700. Return: CF clear if successful
  3701.     CF set on error
  3702.         AH = error code (09h) (see AX=5300h)
  3703. Note:    should not be called from within a hardware interrupt handler to avoid
  3704.       reentrance problems
  3705. SeeAlso: AX=5308h
  3706. --------p-15530ABX0001-----------------------
  3707. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  3708.     AX = 530Ah
  3709.     BX = 0001h
  3710. Return: CF clear if successful
  3711.         BH = AC line status
  3712.         00h off-line
  3713.         01h on-line
  3714.         FFh unknown
  3715.         other reserved
  3716.         BL = battery status
  3717.         00h high
  3718.         01h low
  3719.         02h critical
  3720.         03h charging
  3721.         FFh unknown
  3722.         other reserved
  3723.         CL = remaining battery life
  3724.         00h-64h (0-100) percentage of full charge
  3725.         FFh unknown
  3726.     CF set on error
  3727.         AH = error code (09h) (see AX=5300h)
  3728. Note:    should not be called from within a hardware interrupt handler to avoid
  3729.       reentrance problems
  3730. --------p-15530B-----------------------------
  3731. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  3732.     AX = 530Bh
  3733. Return: CF clear if successful
  3734.         BX = event code
  3735.         0001h system stand-by request
  3736.         0002h system suspend request
  3737.         0003h normal resume system notification
  3738.         0004h critical resume system notification
  3739.         0005h battery low notification
  3740.     CF set on error
  3741.         AH = error code (03h,80h) (see AX=5300h)
  3742. Notes:    although power management events are often asynchronous, notification
  3743.       will not be made until polled via this call to permit software to
  3744.       only receive event notification when it is prepared to process
  3745.       power management events; since these events are not very time-
  3746.       critical, it should be sufficient to poll once or twice per second
  3747.     the critical resume notification is made after the system resumes
  3748.       from an emergency suspension; normally, the system BIOS only notifies
  3749.       its partner that it wishes to suspend and relies on the partner to
  3750.       actually request the suspension, but no notification is made on an
  3751.       emergency suspension
  3752.     should not be called from within a hardware interrupt handler to avoid
  3753.       reentrance problems
  3754. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  3755. --------T-155400-----------------------------
  3756. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  3757.     AX = 5400h
  3758.     ES:BX -> device information tables
  3759.     DI:DX -> dispatcher entry point
  3760. Note:    called by OmniView to notify programs loaded before OmniView of state
  3761.       changes inside OmniView
  3762. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  3763. --------T-155401-----------------------------
  3764. INT 15 C - Omniview Multitasker - PROCESS CREATION
  3765.     AX = 5401h
  3766.     ES:BX = process handle
  3767. Note:    called by OmniView to notify programs loaded before OmniView of state
  3768.       changes inside OmniView
  3769. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  3770. --------T-155402-----------------------------
  3771. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  3772.     AX = 5402h
  3773.     ES:DX = process handle
  3774. Note:    called by OmniView to notify programs loaded before OmniView of state
  3775.       changes inside OmniView
  3776. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  3777. --------T-155403-----------------------------
  3778. INT 15 C - Omniview Multitasker - SAVE
  3779.     AX = 5403h
  3780.     ES:DX = process swapping out
  3781. Note:    called by OmniView to notify programs loaded before OmniView of state
  3782.       changes inside OmniView
  3783. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  3784. --------T-155404-----------------------------
  3785. INT 15 C - Omniview Multitasker - RESTORE
  3786.     AX = 5404h
  3787.     ES:DX = process swapping in
  3788. Note:    called by OmniView to notify programs loaded before OmniView of state
  3789.       changes inside OmniView
  3790. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  3791. --------T-155405-----------------------------
  3792. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  3793.     AX = 5405h
  3794.     ES:DX = process swapping in
  3795. Note:    called by OmniView to notify programs loaded before OmniView of state
  3796.       changes inside OmniView
  3797. SeeAlso: AX=5406h
  3798. --------T-155406-----------------------------
  3799. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  3800.     AX = 5406h
  3801.     ES:DX = process swapping in
  3802. Note:    called by OmniView to notify programs loaded before OmniView of state
  3803.       changes inside OmniView
  3804. SeeAlso: AX=5405h
  3805. --------T-155407-----------------------------
  3806. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  3807.     AX = 5407h
  3808. Note:    called by OmniView to notify programs loaded before OmniView of state
  3809.       changes inside OmniView
  3810. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  3811. --------B-1580-------------------------------
  3812. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  3813.     AH = 80h
  3814.     BX = device ID
  3815.     CX = process ID
  3816.     CF clear
  3817. Return: CF clear if successful
  3818.         AH = 00h
  3819.     CF set on error
  3820.         AH = status
  3821.         80h invalid command (PC,PCjr)
  3822.         86h function not supported (XT)
  3823. Note:    this function should be hooked by a multitasker which wishes to keep
  3824.       track of device ownership; the default BIOS handler merely returns
  3825.       successfully
  3826. SeeAlso: AH=81h,AH=82h
  3827. --------B-1581-------------------------------
  3828. INT 15 C - OS HOOK - DEVICE CLOSE
  3829.     AH = 81h
  3830.     BX = device ID
  3831.     CX = process ID
  3832.     CF clear
  3833. Return: CF clear if successful
  3834.         AH = 00h
  3835.     CF set on error
  3836.         AH = status (see AH=80h)
  3837. Note:    this function should be hooked by a multitasker which wishes to keep
  3838.       track of device ownership; the default BIOS handler merely returns
  3839.       successfully
  3840. SeeAlso: AH=80h,AH=82h
  3841. --------B-1582-------------------------------
  3842. INT 15 C - OS HOOK - PROGRAM TERMINATION
  3843.     AH = 82h
  3844.     BX = process ID
  3845.     CF clear
  3846. Return: CF clear if successful
  3847.         AH = 00h
  3848.     CF set on error
  3849.         AH = status (see AH=80h)
  3850. Notes:    closes all devices opened by the given process ID with function 80h
  3851.     this function should be hooked by a multitasker which wishes to keep
  3852.       track of device ownership; the default BIOS handler merely returns
  3853.       successfully
  3854. SeeAlso: AH=80h,AH=81h
  3855. --------B-1583-------------------------------
  3856. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  3857.     AH = 83h
  3858.     AL = subfunction
  3859.         00h set interval
  3860.         CX:DX = microseconds to delay
  3861.         ES:BX -> byte whose high bit is to be set at end of interval
  3862.         01h cancel wait interval
  3863. Return: CF set on error or function already busy
  3864.         AH = status
  3865.         80h invalid command (PC,PCjr)
  3866.         86h function not supported (XT and later)
  3867.     CF clear if successful
  3868. Note:    the resolution of the wait period is 977 microseconds on most systems
  3869.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3870.       real-time clock chip which is available on INT 70
  3871. SeeAlso: AH=86h,INT 70
  3872. --------B-1584-------------------------------
  3873. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  3874.     AH = 84h
  3875.     DX = subfunction
  3876.         0000h read joystick switches
  3877.         Return: AL bits 7-4 = switch settings
  3878.         0001h read positions of joysticks
  3879.         Return: AX = X position of joystick A
  3880.             BX = Y position of joystick A
  3881.             CX = X position of joystick B
  3882.             DX = Y position of joystick B
  3883. Return: CF set on error
  3884.         AH = status
  3885.         80h invalid command (PC,PCjr)
  3886.         86h function not supported (other)
  3887.     CF clear if successful
  3888. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  3889.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  3890.     a 250kOhm joystick typically returns 0000h-01A0h
  3891. --------B-1585-------------------------------
  3892. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  3893.     AH = 85h
  3894.     AL = 00h SysRq key pressed
  3895.        = 01h SysRq key released
  3896.     CF clear
  3897. Return: CF clear if successful
  3898.         AH = 00h
  3899.     CF set on error
  3900.         AH = status (see AH=84h)
  3901. Notes:    called by keyboard decode routine
  3902.     the default handler simply returns successfully; programs which wish
  3903.       to monitor the SysRq key must hook this call
  3904. SeeAlso: INT 09
  3905. --------B-1586-------------------------------
  3906. INT 15 - BIOS - WAIT (AT,PS)
  3907.     AH = 86h
  3908.     CX:DX = interval in microseconds
  3909. Return: CF clear if successful (wait interval elapsed)
  3910.     CF set on error or AH=83h wait already in progress
  3911.         AH = status (see AH=84h)
  3912. Note:    the resolution of the wait period is 977 microseconds on most systems
  3913.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3914.       real-time clock chip which is available on INT 70
  3915. SeeAlso: AH=83h,INT 1A/AX=FF01h,INT 70
  3916. --------B-1587-------------------------------
  3917. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  3918.     AH = 87h
  3919.     CX = number of words to copy (max 8000h)
  3920.     ES:SI -> global descriptor table
  3921. Return: CF set on error
  3922.     CF clear if successful
  3923.     AH = status
  3924.         00h source copied into destination
  3925.         01h parity error
  3926.         02h interrupt error
  3927.         03h address line 20 gating failed
  3928.         80h invalid command (PC,PCjr)
  3929.         86h unsupported function (XT,PS30)
  3930. Notes:    copy is done in protected mode with interrupts disabled
  3931.     this function is incompatible with the OS/2 compatibility box
  3932. SeeAlso: AH=88h,AH=89h
  3933.  
  3934. Format of global descriptor table:
  3935. Offset    Size    Description
  3936.  00h 16 BYTEs    zeros
  3937.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  3938.  12h  3 BYTEs    24-bit linear source address, low byte first
  3939.  15h    BYTE    source segment access rights (93h)
  3940.  16h    WORD    zero
  3941.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  3942.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  3943.  1Dh    BYTE    destination segment access rights (93h)
  3944.  1Eh 18 BYTEs    zeros
  3945. --------B-1588-------------------------------
  3946. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  3947.     AH = 88h
  3948. Return: CF clear if successful
  3949.         AX = number of contiguous KB starting at absolute address 100000h
  3950.     CF set on error
  3951.         AH = status
  3952.         80h invalid command (PC,PCjr)
  3953.         86h unsupported function (XT,PS30)
  3954. Note:    TSRs which wish to allocate extended memory to themselves often hook
  3955.       this call, and return a reduced memory size.    They are then free to
  3956.       use the memory between the new and old sizes at will.
  3957. SeeAlso: AH=87h
  3958. --------B-1589-------------------------------
  3959. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  3960.     AH = 89h
  3961.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  3962.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  3963.     ES:SI -> GDT for protected mode
  3964.            offset 0h  null descriptor (initialize to zeros)
  3965.               8h  GDT descriptor
  3966.              10h  IDT descriptor
  3967.              18h  DS
  3968.              20h  ES
  3969.              28h  SS
  3970.              30h  CS
  3971.              38h  uninitialized, used to build descriptor for BIOS CS
  3972.     CX = offset into protected-mode CS to jump to
  3973. Return: CF set on error
  3974.        AH = FFh  error enabling address line 20
  3975.     CF clear if successful
  3976.        AH = 00h
  3977.        in protected mode at specified address
  3978. Note:    BL and BH must be multiples of 8
  3979. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  3980. --------B-1590-------------------------------
  3981. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  3982.     AH = 90h
  3983.     AL = device type
  3984.         00h disk
  3985.         01h diskette
  3986.         02h keyboard
  3987.         03h PS/2 pointing device
  3988.         21h waiting for keyboard input (Phoenix BIOS)
  3989.         80h network
  3990.         FBh digital sound (Tandy)
  3991.         FCh disk reset (PS)
  3992.         FDh diskette motor start
  3993.         FEh printer
  3994.     ES:BX -> request block for type codes 80h through BFh
  3995.     CF clear
  3996. Return: CF set if wait time satisfied
  3997.     CF clear if driver must perform wait
  3998.         AH = 00h
  3999. Notes:    type codes are allocated as follows:
  4000.       00-7F non-reentrant devices; OS must arbitrate access
  4001.       80-BF reentrant devices; ES:BX points to a unique control block
  4002.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  4003.     floppy and hard disk BIOS code uses this call to implement a timeout;
  4004.       for device types 00h and 01h, a return of CF set means that the
  4005.       timeout expired before the disk responded.
  4006.     this function should be hooked by a multitasker to allow other tasks
  4007.       to execute while the BIOS is waiting for I/O completion; the default
  4008.       handler merely returns with AH=00h and CF clear
  4009. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  4010. --------B-1591-------------------------------
  4011. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  4012.     AH = 91h
  4013.     AL = device type (see AH=90h)
  4014.     ES:BX -> request block for type codes 80h through BFh
  4015.     CF clear
  4016. Return: AH = 00h
  4017. Note:    this function should be hooked by a multitasker to allow other tasks
  4018.       to execute while the BIOS is waiting for I/O completion; the default
  4019.       handler merely returns with AH=00h and CF clear
  4020. SeeAlso: AH=90h
  4021. --------b-15BC-------------------------------
  4022. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  4023.     AH = BCh
  4024. Return: CF clear
  4025.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  4026. Note:    reads system timer channel 0 twice, then does calculations on returned
  4027.       values
  4028. --------E-15BF00-----------------------------
  4029. INT 15 - Rational Systems DOS/16M - ???
  4030.     AX = BF00h
  4031.     ???
  4032. Return: ???
  4033. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  4034. SeeAlso: AX=BF02h
  4035. --------E-15BF01-----------------------------
  4036. INT 15 - Rational Systems DOS/16M - ???
  4037.     AX = BF01h
  4038.     ???
  4039. Return: ???
  4040. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  4041.     called by DOS/4GW
  4042. SeeAlso: AX=BF00h,AX=BF02h
  4043. --------E-15BF02DX0000-----------------------
  4044. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  4045.     AX = BF02h
  4046.     DX = 0000h
  4047. Return: DX = nonzero if installed
  4048.         DX:SI -> XBRK structure (see below)
  4049. Note:    this function is also supported by DOS/4G
  4050. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  4051. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  4052.  
  4053. Format of XBRK structure:
  4054. Offset    Size    Description
  4055.  00h    DWORD    linear address of first available byte
  4056.  04h    DWORD    linear address of last available byte + 1 ???
  4057.  08h    DWORD    real-mode address of XBRK structure???
  4058.  0Ch    DWORD    ???
  4059.  10h  2 BYTEs    ???
  4060.  12h    WORD    segment of ???
  4061.  14h  8 BYTEs    ???
  4062.  1Ch 512 BYTEs    protected-mode IDT
  4063. 21Ch  N BYTEs    protected-mode GDT
  4064. --------E-15BF03-----------------------------
  4065. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  4066.     AX = BF03h
  4067.     BX = PSP segment of extender
  4068.     ???
  4069. Return: ???
  4070. Note:    if BX is not the PSP segment of the extender, it passes the call down
  4071.       the INT 15 chain; this allows nested instances of the extender
  4072. SeeAlso: AX=BF06h
  4073. --------E-15BF04-----------------------------
  4074. INT 15 - Rational Systems DOS/4GW - ???
  4075.     AX = BF04h
  4076.     BX = PSP segment of extender
  4077. Return: nothing???
  4078. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  4079.       the INT 15 chain; this allows nested instances of the extender
  4080.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  4081. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  4082. --------E-15BF05-----------------------------
  4083. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  4084.     AX = BF05h
  4085.     BX = PSP segment of extender
  4086. Return: nothing???
  4087. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  4088.       the INT 15 chain; this allows nested instances of the extender
  4089.     calls INT 67/AX=DE01h if ???
  4090. --------E-15BF06-----------------------------
  4091. INT 15 - Rational Systems DOS/4GW - ???
  4092.     AX = BF06h
  4093.     BX = PSP segment of extender
  4094.     ???
  4095. Return: ???
  4096. Note:    if BX is not the PSP segment of the extender, it passes the call down
  4097.       the INT 15 chain; this allows nested instances of the extender
  4098. SeeAlso: AX=BF03h
  4099. --------E-15BFDCDX0000-----------------------
  4100. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  4101.     AX = BFDCh
  4102.     DX = 0000h
  4103.     SI = 0000h
  4104. Return: DX = nonzero if installed
  4105.         DX:SI -> XBRK structure (see AX=BF02h)
  4106. SeeAlso: AX=BF02h
  4107. --------E-15BFDEBX0000-----------------------
  4108. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  4109.     AX = BFDEh
  4110.     BX = 0000h
  4111. Return: AX = ??? (0003h)
  4112.     BX = FFFFh
  4113. SeeAlso: AX=BF02h
  4114. --------E-15BFDEBX0001-----------------------
  4115. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  4116.     AX = BFDEh
  4117.     BX = 0001h
  4118. Return: BX = 0000h (success)
  4119.     CX:DX -> name of process manager executable
  4120. SeeAlso: AX=BFDEh/BX=0000h
  4121. --------E-15BFDEBX0002-----------------------
  4122. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4123.     AX = BFDEh
  4124.     BX = 0002h
  4125.     CX:DX -> ???
  4126. Return: BX = 0000h (success)
  4127. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  4128. --------E-15BFDEBX0003-----------------------
  4129. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4130.     AX = BFDEh
  4131.     BX = 0003h
  4132. Return: BX = 0000h (success)
  4133.     CX:DX -> ???
  4134. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  4135. --------E-15BFDEBX0004-----------------------
  4136. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4137.     AX = BFDEh
  4138.     BX = 0004h
  4139.     CL = ???
  4140. Return: BX = 0000h (success)
  4141.     CX:DX -> XBRK structure (see AX=BF02h)
  4142. SeeAlso: AX=BFDEh/BX=0000h
  4143. --------E-15BFDEBX0005-----------------------
  4144. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4145.     AX = BFDEh
  4146.     BX = 0005h
  4147.     CX = new value for ???
  4148. Return: BX = 0000h (success)
  4149.     AX = old value of ???
  4150.     DS:SI -> ??? (if AX nonzero on return)
  4151.     ES:DI -> ??? (if AX zero on return)
  4152. Note:    called by DOS4GW.EXE
  4153. SeeAlso: AX=BFDEh/BX=0000h
  4154. --------E-15BFDEBX0006-----------------------
  4155. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4156.     AX = BFDEh
  4157.     BX = 0006h
  4158. Return: BX = 0000h (success)
  4159.     AH = interrupt number??? (BEh)
  4160.     CX:DX = ???
  4161. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  4162. --------E-15BFDEBX0007-----------------------
  4163. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4164.     AX = BFDEh
  4165.     BX = 0007h
  4166.     CX:DX = ???
  4167. Return: BX = 0000h (success)
  4168. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  4169. --------E-15BFDEBX0008-----------------------
  4170. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4171.     AX = BFDEh
  4172.     BX = 0008h
  4173.     CX = segment of ???
  4174.     DS = ???
  4175. Return: BX = status
  4176.         0000h successful
  4177.         AL = ??? (80h or C0h)
  4178.         DX = ??? (0603h) if AL=C0h
  4179.         0001h failed
  4180.         AX = 0000h
  4181. Note:    called by DOS4GW.EXE
  4182. SeeAlso: AX=BFDEh/BX=0000h
  4183. --------E-15BFDEBX0009-----------------------
  4184. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  4185.     AX = BFDEh
  4186.     BX = 0009h
  4187. Return: BX = 0000h (success)
  4188.     CX:DX -> full pathname to LOAD32.EXP
  4189. SeeAlso: AX=BFDEh/BX=0000h
  4190. --------E-15BFDEBX000A-----------------------
  4191. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  4192.     AX = BFDEh
  4193.     BX = 000Ah
  4194. Return: BX = 0000h (success)
  4195.     AX = new value of ??? counter
  4196. Notes:    also resets a variety of values if the counter goes negative
  4197.     called by DOS4GW.EXE
  4198. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  4199. --------E-15BFDEBX000B-----------------------
  4200. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  4201.     AX = BFDEh
  4202.     BX = 000Bh
  4203. Return:    AX = new value of ??? counter
  4204. Note:    called by DOS4GW.EXE
  4205. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  4206. --------E-15BFDEBX000C-----------------------
  4207. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4208.     AX = BFDEh
  4209.     BX = 000Ch
  4210.     CL = ???
  4211.         00h
  4212.         nonzero
  4213. Return: ???
  4214. SeeAlso: AX=BFDEh/BX=0000h
  4215. --------E-15BFDEBX000D-----------------------
  4216. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4217.     AX = BFDEh
  4218.     BX = 000Dh
  4219.     ???
  4220. Return: ???
  4221. SeeAlso: AX=BFDEh/BX=0000h
  4222. --------E-15BFDEBX000E-----------------------
  4223. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4224.     AX = BFDEh
  4225.     BX = 000Eh
  4226.     DX:CX -> ???
  4227. Return: AX = segment of handle for calling task
  4228.     BX = ??? (probably destroyed)
  4229.     DX:CX -> ???
  4230. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  4231. --------E-15BFDEBX000F-----------------------
  4232. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4233.     AX = BFDEh
  4234.     BX = 000Fh
  4235. Return: AX = segment of handle for calling task
  4236.     BX = ??? (probably destroyed)
  4237.     DX:CX -> ???
  4238. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  4239. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  4240. --------E-15BFDEBX0010-----------------------
  4241. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  4242.     AX = BFDEh
  4243.     BX = 0010h
  4244. Return: AX = segment of caller's task handle
  4245.     BX destroyed
  4246. SeeAlso: AX=BFDEh/BX=000Fh
  4247. --------E-15BFDEBX0011-----------------------
  4248. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4249.     AX = BFDEh
  4250.     BX = 0011h
  4251. Return: CX = code segment of DVDOS4GX.DVR
  4252.     BX = ??? (0004h)
  4253. SeeAlso: AX=BFDEh/BX=0000h
  4254. --------E-15BFDEBX0012-----------------------
  4255. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4256.     AX = BFDEh
  4257.     BX = 0012h
  4258. Return: DX = code segment of DVDOS4GX.DVR
  4259.     BX = ??? (012Ch)
  4260.     CX = ??? (0006h)
  4261. SeeAlso: AX=BFDEh/BX=0000h
  4262. --------E-15BFDEBX0013-----------------------
  4263. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4264.     AX = BFDEh
  4265.     BX = 0013h
  4266. Return: DX:CX -> ???
  4267. SeeAlso: AX=BFDEh/BX=000Eh
  4268. --------E-15BFDEBX0014-----------------------
  4269. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  4270.     AX = BFDEh
  4271.     BX = 0014h
  4272.     CX = index of ??? mailbox
  4273.         (0000h-0004h valid, but no range checking done)
  4274. Return: AX,BX destroyed
  4275. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  4276. --------E-15BFDEBX0015-----------------------
  4277. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  4278.     AX = BFDEh
  4279.     BX = 0015h
  4280.     CX = index of ??? mailbox
  4281.         (0000h-0004h valid, but no range checking done)
  4282. Return: AX,BX destroyed
  4283. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  4284. --------E-15BFDEBX0016-----------------------
  4285. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  4286.     AX = BFDEh
  4287.     BX = 0016h
  4288.     CX = index of ??? mailbox
  4289.         (0000h-0004h valid, but no range checking done)
  4290. Return: AX = status
  4291.         0000h no one owns mailbox
  4292.         0001h mailbox has an owner
  4293.     BX destroyed
  4294. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  4295. --------E-15BFDEBX0017-----------------------
  4296. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  4297.     AX = BFDEh
  4298.     BX = 0017h
  4299.     CX = index of ??? mailbox
  4300.         (0000h-0004h valid, but no range checking done)
  4301. Return: AX = segment of mailbox owner's handle
  4302.     BX = segment of caller's task handle
  4303. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  4304. --------E-15BFDEBXFFFD-----------------------
  4305. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4306.     AX = BFDEh
  4307.     BX = FFFDh
  4308. Return: CX:DX = ???
  4309. SeeAlso: AX=BFDEh/BX=FFFEh
  4310. --------E-15BFDEBXFFFE-----------------------
  4311. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4312.     AX = BFDEh
  4313.     BX = FFFEh
  4314.     CX:DX = ???
  4315. SeeAlso: AX=BFDEh/BX=FFFDh
  4316. --------E-15BFDEBXFFFF-----------------------
  4317. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  4318.     AX = BFDEh
  4319.     BX = FFFFh
  4320. SeeAlso: AX=BFDEh/BX=0000h
  4321. --------B-15C0-------------------------------
  4322. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  4323.     AH = C0h
  4324. Return: CF set if BIOS doesn't support call
  4325.     CF clear on success
  4326.         ES:BX -> ROM table (see below)
  4327.     AH = status
  4328.         00h successful
  4329.         86h unsupported function
  4330. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  4331.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  4332.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  4333.       and a model byte at absolute address FE845h
  4334.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  4335.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  4336.       past the end of the configuration table
  4337.     the Phoenix 386 BIOS contains a second version and date string
  4338.       (presumably the last modification for that OEM version) beginning at
  4339.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  4340.       the complete information)
  4341.       
  4342.  
  4343. Format of ROM configuration table:
  4344. Offset    Size    Description
  4345.  00h    WORD    number of bytes following
  4346.  02h    BYTE    model (see below)
  4347.  03h    BYTE    submodel (see below)
  4348.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  4349.  05h    BYTE    feature byte 1:
  4350.         bit 7: DMA channel 3 used by hard disk BIOS
  4351.         bit 6: 2nd 8259 installed
  4352.         bit 5: Real-Time Clock installed
  4353.         bit 4: INT 15/AH=4Fh called upon INT 9h
  4354.         bit 3: wait for external event supported
  4355.         bit 2: extended BIOS area allocated (usually at top of RAM)
  4356.         bit 1: bus is Micro Channel instead of ISA
  4357.         bit 0 reserved
  4358.  06h    BYTE    feature byte 2:
  4359.         bit 7: ???
  4360.         bit 6: INT 16/AH=09h (keyboard functionality) supported
  4361.         bits 5-0: ???
  4362.  07h    BYTE    feature byte 3:
  4363.         reserved (0)
  4364.  08h    BYTE    feature byte 4:
  4365.         reserved (0)
  4366.  09h    BYTE    feature byte 5:
  4367.         reserved (0) (IBM)
  4368.         ??? (08h) (Phoenix 386 v1.10)
  4369. ---AWARD BIOS---
  4370.  0Ah  N BYTEs    AWARD copyright notice
  4371. ---Phoenix BIOS---
  4372.  0Ah    BYTE    ??? (00h)
  4373.  0Bh    BYTE    major version
  4374.  0Ch    BYTE    minor version (BCD)
  4375.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  4376.  
  4377. Values for model/submodel/revision:
  4378. Model  Submdl  Rev    BIOS date    System
  4379.  FFh    *    *    04/24/81    PC (original)
  4380.  FFh    *    *    10/19/81    PC (some bugfixes)
  4381.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  4382.  FFh    46h    ***      ???        Olivetti M15
  4383.  FEh    *    *    08/16/82    PC XT
  4384.  FEh    *    *    11/08/82    PC XT and Portable
  4385.  FEh    43h    ***      ???        Olivetti M240
  4386.  FEh    A6h    ???      ???        ??? (checked for by 386MAX v6.01)
  4387.  FDh    *    *    06/01/83    PCjr
  4388.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  4389.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  4390.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  4391.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  4392.  FCh    01h    00h    09/17/87    Tandy 3000
  4393.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  4394.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  4395.             (Those date characters are not typos)
  4396.  FCh    01h    30h      ???        Tandy 3000NL
  4397.  FCh    01h    ???      ???        Compaq 286/386
  4398.  FCh    02h    00h    04/21/86    PC XT-286
  4399.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  4400.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  4401.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  4402.  FCh    06h    ???      ???        7552 "Gearbox"
  4403.  FCh    08h    ***      ???        Epson, unknown model
  4404.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  4405.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  4406.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  4407.  FCh    30h    ***      ???        Epson, unknown model
  4408.  FCh    31h    ***      ???        Epson, unknown model
  4409.  FCh    33h    ***      ???        Epson, unknown model
  4410.  FCh    42h    ***      ???        Olivetti M280
  4411.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  4412.  FCh    48h    ***      ???        Olivetti M290
  4413.  FCh    4Fh    ***      ???        Olivetti M250
  4414.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  4415.  FCh    51h    ***      ???        Olivetti PCS286
  4416.  FCh    52h    ***      ???        Olivetti M300
  4417.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  4418.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  4419.  FBh    00h    02h    05/09/86    PC XT
  4420.  FBh    4Ch    ***      ???        Olivetti M200
  4421.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  4422.  FAh    00h    01h    12/12/86    PS/2 Model 30
  4423.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  4424.  FAh    4Eh    ***      ???        Olivetti M111
  4425.  F9h    00h    00h    09/13/85    PC Convertible
  4426.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  4427.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  4428.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  4429.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  4430.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  4431.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  4432.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  4433.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  4434.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  4435.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  4436.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  4437.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  4438.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  4439.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  4440.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  4441.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  4442.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  4443.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  4444.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  4445.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  4446.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  4447.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  4448.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  4449.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  4450.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  4451.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  4452.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  4453.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  4454.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  4455.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  4456.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  4457.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  4458.  F8h    61h    ***      ???        Olivetti P500
  4459.  F8h    62h    ***      ???        Olivetti P800
  4460.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  4461.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  4462.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  4463.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  4464.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  4465.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  4466.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  4467.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  4468.  30h    ???    ???      ???        Sperry PC
  4469.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  4470.  ???    56h    ???      ???        Olivetti, unknown model
  4471.  ???    74h    ???      ???        Olivetti, unknown model
  4472.     * This BIOS call is not implemented in these early versions.
  4473.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  4474.    ** These BIOS versions require the DASDDRVR.SYS patches.
  4475.   *** These Olivetti and Epson machines store the submodel in the byte at
  4476.     F000h:FFFDh.
  4477.  
  4478. Values for Dell model byte:
  4479.  02h    Dell 200
  4480.  03h    Dell 300
  4481.  05h    Dell 220
  4482.  06h    Dell 310
  4483.  07h    Dell 325
  4484.  09h    Dell 310A
  4485.  0Ah    Dell 316
  4486.  0Bh    Dell 220E
  4487.  0Ch    Dell 210
  4488.  0Dh    Dell 316SX
  4489.  0Eh    Dell 316LT
  4490.  0Fh    Dell 320LX
  4491.  11h    Dell 425E
  4492. --------B-15C1-------------------------------
  4493. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  4494.     AH = C1h
  4495. Return: CF set on error
  4496.     CF clear if successful
  4497.         ES = segment of data area
  4498. SeeAlso: AH=04h"ABIOS"
  4499. --------M-15C200-----------------------------
  4500. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  4501.     AX = C200h
  4502.     BH = new state
  4503.         00h disabled
  4504.         01h enabled
  4505. Return: CF set on error
  4506.     AH = status
  4507.         00h successful
  4508.         01h invalid function
  4509.         02h invalid input
  4510.         03h interface error
  4511.         04h need to resend
  4512.         05h no device handler installed
  4513. --------M-15C201-----------------------------
  4514. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  4515.     AX = C201h
  4516. Return: CF set on error
  4517.         AH = status (see AX=C200h)
  4518.     CF clear if successful
  4519.         BH = device ID
  4520. SeeAlso: INT 33/AX=0000h
  4521. --------M-15C202-----------------------------
  4522. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  4523.     AX = C202h
  4524.     BH = sampling rate
  4525.         00h 10/second
  4526.         01h 20/second
  4527.         02h 40/second
  4528.         03h 60/second
  4529.         04h 80/second
  4530.         05h 100/second
  4531.         06h 200/second
  4532. Return: CF set on error
  4533.         AH = status (see AX=C200h)
  4534. SeeAlso: INT 33/AX=001Ch
  4535. --------M-15C203-----------------------------
  4536. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  4537.     AX = C203h
  4538.     BH = resolution
  4539.         00h one count per mm
  4540.         01h two counts per mm
  4541.         02h four counts per mm
  4542.         03h eight counts per mm
  4543. Return: CF set on error
  4544.         AH = status (see AX=C200h)
  4545. --------M-15C204-----------------------------
  4546. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  4547.     AX = C204h
  4548. Return: CF set on error
  4549.         AH = status (see AX=C200h)
  4550.     CF clear if successful
  4551.         BH = device ID
  4552. --------M-15C205-----------------------------
  4553. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  4554.     AX = C205h
  4555.     BH = data package size (1 - 8 bytes)
  4556. Return: CF set on error
  4557.         AH = status (see AX=C200h)
  4558. SeeAlso: AX=C201h
  4559. --------M-15C206-----------------------------
  4560. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  4561.     AX = C206h
  4562.     BH = subfunction
  4563.         00h return device status
  4564.         Return: BL = pointing device status (see below)
  4565.             CL = resolution (see AX=C203h)
  4566.             DL = sample rate, reports per second
  4567.         01h set scaling at 1:1
  4568.         02h set scaling at 2:1
  4569. Return: CF set on error
  4570.         AH = status (see AX=C200h)
  4571.  
  4572. Bitfields for pointing device status:
  4573.  bit 0    right button pressed
  4574.  bit 1    reserved
  4575.  bit 2    left button pressed
  4576.  bit 3    reserved
  4577.  bit 4    0 if 1:1 scaling, 1 if 2:1 scaling
  4578.  bit 5    device enabled
  4579.  bit 6    0 if stream mode, 1 if remote mode
  4580.  bit 7    reserved
  4581. --------M-15C207-----------------------------
  4582. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  4583.     AX = C207h
  4584.     ES:BX -> FAR user device handler
  4585. Return: CF set on error
  4586.         AH = status (see AX=C200h)
  4587. SeeAlso: INT 33/AX=000Ch
  4588. --------B-15C3------------------------------
  4589. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  4590.     AH = C3h
  4591.     AL = 00h disable
  4592.          01h enable
  4593.         BX = timer counter
  4594. Return: CF set on error
  4595.     CF clear if successful
  4596. Note:    the watchdog timer generates an NMI
  4597. --------B-15C4-------------------------------
  4598. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  4599.     AH = C4h
  4600.     AL = 00h return base POS register address
  4601.          01h enable slot
  4602.          BL = slot number
  4603.          02h enable adapter
  4604. Return: CF set on error
  4605.     DX = base POS register address (if function 00h)
  4606. SeeAlso: AH=C6h
  4607. --------B-15C5-------------------------------
  4608. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  4609.     AH = C5h
  4610.     AL = interrupt being invoked
  4611.         01h INT 19
  4612.         02h INT 14
  4613.         03h INT 16
  4614.         04h INT 40 (floppy INT 13)
  4615.         05h INT 17
  4616.         06h INT 10
  4617.         07h INT 12
  4618.         08h INT 11
  4619.         09h INT 1A
  4620. Return: all registers except AX must be preserved
  4621. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  4622.       handlers on the PS/2 Models 30/286, 50Z, and 95
  4623.     default handler does nothing and returns CF clear for the above
  4624.       subfunctions, CF set and AH=86h for all other subfunctions
  4625.     value of AX passed to the original interrupt handler is pushed on
  4626.       stack immediately prior to call
  4627. --------B-15C6-------------------------------
  4628. INT 15 U - later PS/2 models - GET POS DATA
  4629.     AH = C6h
  4630.     ???
  4631. Return: ???
  4632. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  4633.     IBM reports that "there are a number of problems with this call" and
  4634.       does not recommend its use.
  4635. SeeAlso: AH=C4h
  4636. --------B-15C7-------------------------------
  4637. INT 15 U - PS/2 Model 95 - ???
  4638.     AH = C7h
  4639.     ???
  4640. Return: ???
  4641. --------B-15C8-------------------------------
  4642. INT 15 U - PS/2 Model 95 - ???
  4643.     AH = C8h
  4644.     ???
  4645. Return: ???
  4646. --------B-15C9-------------------------------
  4647. INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  4648.     AH = C9h
  4649.     AL = 10h (may be required on some non-PS BIOSes)
  4650. Return: AH = 00h
  4651.     CH = CPU type
  4652.         03h 80386DX or clone
  4653.         04h 80486
  4654.         23h 80386SX or clone
  4655.     CL = mask revision (stepping level)
  4656. Notes:    the BIOS must save DX at startup in order to be able to support this
  4657.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  4658.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  4659. --------B-15CA-------------------------------
  4660. INT 15 U - PS/2 Model 95 - ???
  4661.     AH = CAh
  4662.     ???
  4663. Return: ???
  4664. --------B-15CB-------------------------------
  4665. INT 15 U - PS/2 Model 95 - ???
  4666.     AH = CBh
  4667.     ???
  4668. Return: ???
  4669. --------B-15CC-------------------------------
  4670. INT 15 U - PS/2 Model 95 - ???
  4671.     AH = CCh
  4672.     ???
  4673. Return: ???
  4674. --------B-15CD-------------------------------
  4675. INT 15 U - PS/2 Model 95 - ???
  4676.     AH = CDh
  4677.     ???
  4678. Return: ???
  4679. --------B-15CE-------------------------------
  4680. INT 15 U - PS/2 Model 95 - ???
  4681.     AH = CEh
  4682.     ???
  4683. Return: ???
  4684. --------B-15CF-------------------------------
  4685. INT 15 U - PS/2 Model 95 - ???
  4686.     AH = CFh
  4687.     ???
  4688. Return: ???
  4689. --------B-15D800-----------------------------
  4690. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  4691.     AX = D800h
  4692.     CL = slot number (including embedded and virtual)
  4693. Return: CF clear if successful
  4694.         AH = 00h
  4695.     CF set on error
  4696.         AH = error code
  4697.         80h invalid slot number
  4698.         82h EISA CMOS corrupt
  4699.         83h empty slot
  4700.         86h invalid BIOS-FW function call
  4701.         87h invalid system configuration
  4702.     AL bit flags
  4703.         bit 7: set if duplicate IDs
  4704.         bit 6: set if product ID readable
  4705.         bits 4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  4706.         bits 0-3: duplicate ID number if bit 7 set
  4707.     BH = major revision level of configuration utility
  4708.     BL = minor revision level of configuration utility
  4709.     CX = checksum of configuration file
  4710.     DH = number of device functions
  4711.     DL = combined function information byte
  4712.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  4713. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  4714. SeeAlso: AX=D801h,AX=D804h
  4715. --------B-15D801-----------------------------
  4716. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  4717.     AX = D801h
  4718.     CH = function number to read
  4719.     CL = slot number (including embedded and virtual)
  4720.     DS:SI -> 320-byte buffer for standard configuration data block
  4721. Return: CF clear if successful
  4722.         AH = 00h
  4723.         DS:SI buffer filled
  4724.     CF set on error
  4725.         AH = error code
  4726.         80h invalid slot number
  4727.         81h invalid function number
  4728.         82h EISA CMOS corrupt
  4729.         83h empty slot
  4730.         86h invalid BIOS-FW function call
  4731.         87h invalid system configuration
  4732.     BX destroyed
  4733. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  4734. --------B-15D802-----------------------------
  4735. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  4736.     AX = D802h
  4737.     BH = EISA config utility major revision level
  4738.     BL = EISA config utility minor revision level
  4739. Return: CF clear if successful
  4740.         AH = 00h
  4741.     CF set on error
  4742.         AH = error code
  4743.         84h error clearing CMOS
  4744.         86h invalid BIOS-FW function call
  4745.         88h config utility version not supported
  4746. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  4747. SeeAlso: AX=D803h
  4748. --------B-15D803-----------------------------
  4749. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  4750.     AX = D803h
  4751.     CX = length of data structure (0000h = empty slot)
  4752.         includes two bytes for config file checksum
  4753.     DS:SI -> configuration data
  4754. Return: CF clear if successful
  4755.         AH = 00h
  4756.     CF set on error
  4757.         AH = error code
  4758.         84h error clearing CMOS
  4759.         85h EISA CMOS is full
  4760.         86h invalid BIOS-FW function call
  4761. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  4762. SeeAlso: AX=D802h
  4763. --------B-15D804-----------------------------
  4764. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  4765.     AX = D804h
  4766.     CL = slot number (including embedded and virtual)
  4767. Return: CF clear if successful
  4768.         AH = 00h
  4769.     CF set on error
  4770.         AH = error code
  4771.         80h invalid slot number
  4772.         83h empty slot
  4773.         86h invalid BIOS-FW function call
  4774.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  4775. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  4776. SeeAlso: AX=D800h
  4777. --------B-15D8-------------------------------
  4778. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  4779.     AH = D8h
  4780.     AL = 80h to 84h
  4781.     other registers as appropriate for AL=00h to 04h
  4782. Return: as appropriate for AL=00h to 04h
  4783. Note:    these functions are identical to AX=D800h to D804h, except that they
  4784.       should be called when using 32-bit CS addressing mode (pointers use
  4785.       ESI rather than SI as offset) instead of 16-bit addressing mode
  4786. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  4787. --------Q-15DE00-----------------------------
  4788. INT 15 - DESQview - GET PROGRAM NAME
  4789.     AX = DE00h
  4790. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  4791.         the "Switch Windows" menu (see below)
  4792. Note:    always returns AX=0000h under DESQview/X
  4793. SeeAlso: AX=DE07h
  4794.  
  4795. Format of program entry in DESQVIEW.DVO:
  4796. Offset    Size    Description
  4797.  00h    BYTE    length of name (FFh if end of file)
  4798.  01h  N BYTEs    name
  4799.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  4800.     BYTE    program type
  4801.         00h normal program
  4802.         04h divider
  4803.         80h Delete a Program
  4804.         81h Change a Program
  4805.     WORD    ??? apparently always 0000h
  4806. --------Q-15DE01-----------------------------
  4807. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  4808.     AX = DE01h
  4809. Return: nothing
  4810. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  4811.     NOP for DESQview/X
  4812. --------Q-15DE02-----------------------------
  4813. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  4814.     AX = DE02h
  4815. Return: nothing
  4816. Note:    this call is a NOP in DV 2.x
  4817. SeeAlso: AX=DE03h
  4818. --------Q-15DE03-----------------------------
  4819. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  4820.     AX = DE03h
  4821. Return: AX = ??? for current window
  4822.     BX = ??? for current window
  4823. Note:    this call is a NOP in DV 2.x
  4824. SeeAlso: AX=DE02h
  4825. --------Q-15DE04-----------------------------
  4826. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  4827.     AX = DE04h
  4828. Return: BX = bytes of common memory available
  4829.     CX = largest block available
  4830.     DX = total common memory in bytes
  4831. SeeAlso: AX=DE05h,AX=DE06h
  4832. --------Q-15DE05-----------------------------
  4833. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  4834.     AX = DE05h
  4835. Return: BX = K of memory available
  4836.     CX = largest block available
  4837.     DX = total conventional memory in K
  4838. SeeAlso: AX=DE04h,AX=DE06h
  4839. --------Q-15DE06-----------------------------
  4840. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  4841.     AX = DE06h
  4842. Return: BX = K of expanded memory available
  4843.     CX = largest block available
  4844.     DX = total expanded memory in K
  4845. SeeAlso: AX=DE04h,AX=DE05h
  4846. --------Q-15DE07-----------------------------
  4847. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  4848.     AX = DE07h
  4849. Return: AX = number of program as it appears on the "Switch Windows" menu
  4850. Note:    this API call may be made from a hardware interrupt handler
  4851. SeeAlso: AX=DE00h
  4852. --------Q-15DE08-----------------------------
  4853. INT 15 - DESQview - GET ???
  4854.     AX = DE08h
  4855. Return: AX = 0000h if ??? is not set to the current task
  4856.          0001h if ??? is set to the current task
  4857. --------Q-15DE09-----------------------------
  4858. INT 15 - DESQview - UNIMPLEMENTED
  4859.     AX = DE09h
  4860. Return: nothing (NOP in DV 1.x and 2.x)
  4861. --------Q-15DE0A-----------------------------
  4862. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  4863.     AX = DE0Ah
  4864.     BL = character
  4865. Return: character displayed, next call will display in next position (which
  4866.     wraps back to the start of the line if off the right edge of screen)
  4867. Notes:    displays character on bottom line of *physical* screen, regardless
  4868.       of current size of window (even entirely hidden)
  4869.     does not know about graphics display modes, just pokes the characters
  4870.       into display memory
  4871.     this API call may be made from a hardware interrupt handler
  4872. SeeAlso: AX=1003h
  4873. --------Q-15DE0B-----------------------------
  4874. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  4875.     AX = DE0Bh
  4876.     BL = API level minor version number
  4877.     BH = API level major version number
  4878. Return: AX = maximum API level (AH = major, AL = minor)
  4879. Notes:    if the requested API level is greater than the version of DESQview, a
  4880.       "You need a newer version" error window is popped up
  4881.     the API level defaults to 1.00, and is inherited by child tasks
  4882. --------Q-15DE0C-----------------------------
  4883. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  4884.     AX = DE0Ch
  4885.     BX = number of bytes
  4886. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  4887. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  4888.       system memory
  4889. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  4890. --------Q-15DE0D-----------------------------
  4891. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  4892.     AX = DE0Dh
  4893.     ES:DI -> previously allocated block
  4894. Return: nothing
  4895. SeeAlso: AX=1002h,AX=DE0Ch
  4896. --------Q-15DE0E-----------------------------
  4897. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  4898.     AX = DE0Eh
  4899.     ES:DI -> name to find
  4900.     CX = length of name
  4901. Return: BX = 0000h not found
  4902.          0001h found
  4903.         DS:SI = object handle
  4904. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  4905.  
  4906. Special mailbox names:
  4907.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  4908.  "DESQview/X Help Engine"
  4909.  "DESQview/X Network Server"  Network Manager
  4910.  "DESQview X Server0"    X-Windows server
  4911.  "DESQview X Server7"    X-Windows printing service
  4912.  "INBOX"        DESQview/X LPD requests
  4913.  "OUTBOX"        DESQview/X LPD responses
  4914.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  4915.  "_DVNM_"        DV/X v1.10 network manager
  4916. --------Q-15DE0F-----------------------------
  4917. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  4918.     AX = DE0Fh
  4919. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  4920. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  4921.     enables an additional mouse mode
  4922. --------Q-15DE10-----------------------------
  4923. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  4924.     AX = DE10h
  4925.     BH = scan code
  4926.     BL = character
  4927. Return: nothing
  4928. Notes:    a later read will get the keystroke as if it had been typed by the user
  4929.     multiple pushes are read last-in first-out
  4930.     if a script exists for the pushed key in the current application, the
  4931.       script will be executed
  4932.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  4933. SeeAlso: INT 16/AH=05h
  4934. --------Q-15DE11BL00-------------------------
  4935. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  4936.     AX = DE11h
  4937.     BL = 00h      viewport will not move automatically
  4938.          nonzero  viewport will move to keep cursor visible (default)
  4939. Return: nothing
  4940. --------Q-15DE12BX0000-----------------------
  4941. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  4942.     AX = DE12h
  4943.     BX = 0000h    select normal style (linefeed only moves down)
  4944.          nonzero  select C style (linefeed moves to start of next line)
  4945. Return: nothing
  4946. Note:    set on a per-task basis, and inherited from the parent task
  4947. --------Q-15DE13-----------------------------
  4948. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  4949.     AX = DE13h
  4950. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  4951.          without matching ENDC (see INT 15/AX=101Ch)
  4952. Note:    this API call may be made from within a hardware interrupt handler
  4953. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  4954. --------Q-15DE14-----------------------------
  4955. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  4956.     AX = DE14h
  4957.     ES:DI -> object
  4958. Return: BL = 00h not an object
  4959.          08h window or task
  4960.          09h mailbox
  4961.          0Ah keyboard
  4962.          0Bh timer
  4963.          0Ch objectq
  4964.          0Fh pointer
  4965.          10h panel
  4966. SeeAlso: AX=1016h
  4967. --------Q-15DE15-----------------------------
  4968. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  4969.     AX = DE15h
  4970.     BL = error handling mode
  4971.         00h post system error on all error conditions
  4972.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  4973.         messages sent to mailboxes which fail due to lack of system
  4974.         or common memory
  4975.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  4976.         calls which fail due to lack of system memory
  4977. Return: nothing
  4978. SeeAlso: AX=DE0Ch,AX=DE16h
  4979. --------Q-15DE16-----------------------------
  4980. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  4981.     AX = DE16h
  4982. Return: BL = current mode
  4983.         00h always post system error
  4984.         01h return carry flag set on failed mailbox writes
  4985.         02h return CF set on failed mailbox writes and NULL on failed
  4986.         GETMEM calls
  4987. SeeAlso: AX=DE15h
  4988. --------Q-15DE17-----------------------------
  4989. INT 15 - DESQview v2.20-2.25 - reserved
  4990.     AX = DE17h
  4991. Return: pops up "Programming error" window
  4992. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  4993. SeeAlso: AX=1117h
  4994. --------Q-15DE17-----------------------------
  4995. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  4996.     AX = DE17h
  4997.     BX = function
  4998.         0000h   get current mapping context without setting
  4999.         nonzero set new mapping context to BX
  5000. Return: BX = mapping context in effect before call
  5001. Notes:    mapping contexts determine conventional-memory addressability; setting
  5002.       a mapping context ensures that the associated program and data areas
  5003.       are in memory for access.  Usable by drivers, TSRs and shared
  5004.       programs.
  5005.     caller need not be running under DESQview
  5006.     this API call may be made from a hardware interrupt handler
  5007. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  5008. --------Q-15DE18-----------------------------
  5009. INT 15 - DESQview v2.20+ - internal - ???
  5010.     AX = DE18h
  5011.     BP = function number
  5012.         high byte must be 10h
  5013.         low byte is function
  5014.         00h set ???
  5015.             BL = ???  (00h-10h, video mode???)
  5016.             BH = value to store
  5017.         03h set ???
  5018.             BL = ??? (stored in driver)
  5019.         0Ah get ???
  5020.             ES:DI -> 18-byte buffer to hold ???
  5021. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  5022. --------Q-15DE19-----------------------------
  5023. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  5024.     AX = DE19h
  5025.     BX = number of bytes to allocate
  5026. Return: AX = 0000h successful
  5027.         ES:DI -> allocated block
  5028.          nonzero insufficient memory
  5029. Note:    this API call may be made from within a hardware interrupt handler
  5030. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  5031. --------Q-15DE1A-----------------------------
  5032. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  5033.     AX = DE1Ah
  5034.     DS:SI -> previously allocated block
  5035. Note:    this function may be called from within a hardware interrupt handler
  5036. SeeAlso: AX=DE0Dh,AX=DE19h
  5037. --------Q-15DE1B-----------------------------
  5038. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  5039.     AX = DE1Bh
  5040. Return: nothing
  5041. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  5042. --------Q-15DE1C-----------------------------
  5043. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  5044.     AX = DE1Ch
  5045. Return: nothing
  5046. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  5047.       that DOS is free
  5048.     the official documentation states that this call should be paired with
  5049.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  5050.     this API call may be made from within a hardware interrupt handler
  5051. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  5052. --------Q-15DE1D-----------------------------
  5053. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  5054.     AX = DE1Dh
  5055.     DX = segment of handle for task to receive keystroke
  5056.     BL = character
  5057.     BH = scan code
  5058. Return: AX = 0000h if successful
  5059.        nonzero if receiver's keyboard buffer was full
  5060. Notes:    the key is treated as though the user had pressed it, ignoring any
  5061.       script which may be bound to the key, and using the current field
  5062.       table if the keyboard object is in field processing mode
  5063.     multiple PUTKEYs are seen in the order in which they are executed
  5064. SeeAlso: AX=DE10h
  5065. --------Q-15DE1E-----------------------------
  5066. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  5067.     AX = DE1Eh
  5068. Return:    CL = actual number of rows on screen
  5069.     CH = actual number of columns on screen
  5070.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  5071. Note:    this API call may be made from a hardware interrupt handler
  5072. SeeAlso: INT 10/AH=0Fh
  5073. --------Q-15DE1F-----------------------------
  5074. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  5075.     AX = DE1Fh
  5076. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  5077. Note:    this API call may be made from within a hardware interrupt handler
  5078. SeeAlso: AX=DE13h,INT 21/AH=34h
  5079. --------Q-15DE20-----------------------------
  5080. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  5081.     AX = DE20h
  5082.     BX = segment of handle of task to interupt
  5083.     DX:CX -> FAR interrupt routine
  5084.     BP,SI,DI,DS,ES as required by interrupt routine
  5085. Return: nothing
  5086. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  5087.       making the DISPATCHINT call
  5088.     multiple "DISPATCHINT" calls are processed in the order in which they
  5089.       were executed
  5090.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  5091.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  5092.       needs to be preserved
  5093.     this API call may be made from within a hardware interrupt handler
  5094. SeeAlso: AX=1021h,AX=DE2Ah
  5095. --------Q-15DE21-----------------------------
  5096. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  5097.     AX = DE21h
  5098.     BX = new state
  5099.         0000h turn off
  5100.         nonzero turn on
  5101. Return: BX = old state of virtualization
  5102. Notes:    this API call may be made from within a hardware interrupt handler
  5103.     under DV 2.40 and 2.42, this call appears to have no effect and always
  5104.       returns a nonzero value in BX which appears to be the offset within
  5105.       the DV common memory segment of the caller's task object; it may
  5106.       only have an effect within a hardware interrupt handler
  5107. SeeAlso: AX=1117h,AX=DE17h
  5108. --------Q-15DE22-----------------------------
  5109. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  5110.     AX = DE22h
  5111.     DX = segment of task handle
  5112. Return: DX = total amount of memory in paragraphs
  5113.     BX = amount of system memory in paragraphs
  5114.     CX = largest block of system memory available in paragraphs
  5115.     AX = flags
  5116.         bit 0: system memory resides in shared memory
  5117.         bit 1: process's memory is swapped out
  5118.         bit 2: process's system memory is swapped out
  5119. Notes:    if the task handle is a child task, the returned values will be for the
  5120.       process containing the task, rather than the task itself
  5121.     if the process's system memory is swapped out, BX,CX,DX remain
  5122.       unchanged, because the memory usage cannot be determined
  5123. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  5124. --------Q-15DE23-----------------------------
  5125. INT 15 U - DESQview v2.31+ - ???
  5126.     AX = DE23h
  5127.     BX = ??? IRQ number on first PIC?
  5128.     CX = ??? IRQ number on second PIC?
  5129. Return: ???
  5130. Note:    called by QEMM 6.00+
  5131. --------Q-15DE24-----------------------------
  5132. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  5133.     AX = DE24h
  5134.     BX = length of .DVP data
  5135.     CX = length of ??? string
  5136.     DS:SI -> ??? string
  5137.     ES:DI -> .DVP data (see AX=102Ch)
  5138. Return: BX = segment of task handle??? or 0000h on error
  5139. Note:    this call is similar to AX=102Ch except that it can interpret the
  5140.       extended DVP data
  5141. SeeAlso: AX=102Ch
  5142. --------Q-15DE25-----------------------------
  5143. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  5144.     AX = DE25h
  5145.     ES:DI -> 67-byte buffer for ASCIZ directory name
  5146. Return: ES:DI buffer filled with directory from which DESQview was started
  5147. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  5148.       name, so if the buffer is not cleared to zeros before the call,
  5149.       there is no way to tell where the directory name ends.  This bug
  5150.       has been fixed in DV 2.52 (DV/X 1.02)
  5151. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  5152. --------Q-15DE26-----------------------------
  5153. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  5154.     AX = DE26h
  5155. Return: BX = segment of handle for task with keyboard focus
  5156. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  5157.       "direct" window is active
  5158. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  5159. --------Q-15DE27-----------------------------
  5160. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  5161.     AX = DE27h
  5162.     BX = type
  5163.         0000h process
  5164.         0001h task
  5165.     ES:DI -> list of Instance Item Structures (see below)
  5166. Return: CF clear if successful
  5167.         AX = ???
  5168.         BX = ???
  5169.     CF set on error
  5170.         AX = error code???
  5171.         0004h invalid BX value
  5172. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5173. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  5174.  
  5175. Format of Instance Item Structure [one element of list]:
  5176. Offset    Size    Description
  5177.  00h    WORD    length of data area DESQview should save and restore on context
  5178.         switches (0000h = end of list)
  5179.  02h    DWORD    pointer to area to be saved/restored
  5180. --------Q-15DE28-----------------------------
  5181. INT 15 U - DESQview v2.50+ - ???
  5182.     AX = DE28h
  5183.     BX = segment of ??? or 0000h for default
  5184.     ???
  5185. Return: ???
  5186. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5187. SeeAlso: AX=DE2Ah
  5188. --------Q-15DE29BX0000-----------------------
  5189. INT 15 U - DESQview v2.50+ - ???
  5190.     AX = DE29h
  5191.     BX = 0000h
  5192.     ???
  5193. Return: CF clear if successful
  5194.         ???
  5195.     CF set on error
  5196. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5197. --------Q-15DE29BX0001-----------------------
  5198. INT 15 U - DESQview v2.50+ - ???
  5199.     AX = DE29h
  5200.     BX = 0001h
  5201.     DX = segment of window handle
  5202. Return: CF clear if successful
  5203.         AX = ???
  5204.         DX = ???
  5205.     CF set on error
  5206. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5207. --------Q-15DE29BX0002-----------------------
  5208. INT 15 U - DESQview v2.50+ - ???
  5209.     AX = DE29h
  5210.     BX = 0002h
  5211.     DX = segment of window handle
  5212. Return: CF clear if successful
  5213.         AX = ???
  5214.         DX = ???
  5215.     CF set on error
  5216. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5217. --------Q-15DE29BX0003-----------------------
  5218. INT 15 U - DESQview v2.50+ - ???
  5219.     AX = DE29h
  5220.     BX = 0003h
  5221.     DX = segment of window handle
  5222. Return: CF clear if successful
  5223.         ???
  5224.     CF set on error
  5225. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5226. --------Q-15DE29BX0004-----------------------
  5227. INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
  5228.     AX = DE29h
  5229.     BX = 0004h
  5230.     CX = size of buffer in bytes
  5231.     DX = segment of window handle
  5232.     ES:DI -> buffer for display name
  5233. Return: CF clear if successful
  5234.         buffer filled with ASCIZ display name (truncated if necessary) or
  5235.           null string if no display
  5236.     CF set on error
  5237. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5238.     the name ":0" refers to the local display
  5239. --------Q-15DE29BX0005-----------------------
  5240. INT 15 U - DESQview v2.50+ - ???
  5241.     AX = DE29h
  5242.     BX = 0005h
  5243.     ???
  5244. Return: CF clear if successful
  5245.         ???
  5246.     CF set on error
  5247. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5248. --------Q-15DE2A-----------------------------
  5249. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  5250.     AX = DE2Ah
  5251.     BX = segment of handle for task to interrupt or 0000h for caller
  5252.     DX:CX -> interrupt routine
  5253.     BP,SI,DI,DS,ES as required by interrupt routine
  5254. Return: nothing
  5255. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5256.     this call is the same as AX=DE20h except that it will delay
  5257.       interrupting the specified task until after it has exited DOS
  5258. SeeAlso: AX=1021h,AX=DE20h
  5259. --------Q-15DE2B-----------------------------
  5260. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  5261.     AX = DE2Bh
  5262.     ES:DI -> starting object
  5263.         0000h:0000h for first object in list???
  5264. Return: AX = status
  5265.         0000h successful
  5266.         ES:DI -> next object of same type (window/non-window)
  5267.         0001h failed (ES:DI was not a valid handle)
  5268. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5269.     there are two separate lists, one for window/task objects and one
  5270.       for all other objects
  5271. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  5272. --------Q-15DE2C-----------------------------
  5273. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  5274.     AX = DE2Ch
  5275.     DX = window information format version (0100h for DESQview 2.5x)
  5276.     BX = segment of window handle or 0000h for default
  5277.     ES:DI -> buffer for window information (see below)
  5278. Return: AX = status
  5279.         0000h successful
  5280. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5281. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  5282.  
  5283. Format of window information:
  5284. Offset    Size    Description
  5285.  00h    BYTE    task flag: 00h window, 01h task
  5286.  01h    BYTE    process number if owner task
  5287.         00h if non-owner task
  5288.  02h    WORD    segment of owner's handle, 0000h if orphaned
  5289.  04h    WORD    mapping context (see AX=1016h)
  5290.  06h    BYTE    task status (see below)
  5291.  07h    BYTE    unused
  5292.  08h    WORD    status bits (see below)
  5293.  0Ah    BYTE    01h if foreground-only window
  5294.  
  5295. Values for task status:
  5296.  00h "Waiting" waiting for input
  5297.  01h "Idle" keyboard poll limit reached
  5298.  03h same as 01h
  5299.  04h "Pausing" INT 15/AX=1000h pause called
  5300.  04h DV/X direct: user did something to allow task switch
  5301.  05h "ModeChg" video mode about to be changed
  5302.  06h "ModeNtf" notify that video mode changed
  5303.  07h "MoniCh" requested change to other monitor
  5304.  08h "StartPgm" control relinquished to start new process
  5305.  09h "MgrCan" made window manager CANCEL command
  5306.  0Ah "Slicing" time slice expired
  5307.  0Bh "Exit DOS" notify on DOS calls
  5308.  0Ch "Enter DOS" process is re-entering DOS
  5309.  0Dh "Terminate" INT 21/AH=4Ch or task freed
  5310.  0Eh "BrkNxt" Control-Break pressed
  5311.  0Fh "MgrCol" keyboard focus taken away
  5312.  10h "PgmInt" interrupted by API call from another task
  5313.  11h "BldOpen" call to INT 15/AX=DE01h
  5314.  
  5315. Bitfields for status bits:
  5316.  bit 0    DESQview process
  5317.  bit 1    process swapped out
  5318.  bit 2    process is resized direct window (suspended)
  5319.  bit 3    process suspended itself
  5320.  bit 4    user suspended process
  5321.  bit 5    process is being created
  5322.  bit 6    task is freeing another task
  5323. --------Q-15DE2D-----------------------------
  5324. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  5325.     AX = DE2Dh
  5326.     CX = direction
  5327.         FFFFh set socket handler
  5328.         DX:BX -> FAR function for socket interface
  5329.             must be of the format described under INT 63"DESQview"
  5330.         other get socket handler
  5331.         Return: DX:BX -> socket handler
  5332. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5333.     the "set" subfunction is normally called only by SOCKET.DVR
  5334. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  5335. --------Q-15DE2E-----------------------------
  5336. INT 15 U - DESQview v2.50+ - SOCKET API
  5337.     AX = DE2Eh
  5338.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  5339. Return: CX = size of socket record in bytes
  5340.     DX:BX -> socket record which was used
  5341. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5342.     socket records are allocated from common memory
  5343.     for Unix compatibility, each socket and connection on a socket is
  5344.       allocated a DOS file handle (referencing an SFT for NUL) which is
  5345.       used on various calls to specify which of possibly multiple
  5346.       connections is to be operated upon
  5347. SeeAlso: AX=DE2Dh,INT 61/AX=0001h"VINES",INT 63"DESQview"
  5348.  
  5349. Format of socket record:
  5350. Offset    Size    Description
  5351.  00h    WORD    signature F0ADh
  5352.  02h    WORD    function number
  5353.         0000h initialize socket???
  5354.         0001h "gethostname"
  5355.         0002h "ioctl" check for input
  5356.         0003h "sleep" delay for specified period
  5357.         0004h "htons" convert word to network (big-endian) byte order
  5358.         0005h "select"
  5359.         0006h "bsd_close"/"so_close" close socket
  5360.         0007h NOP
  5361.         0008h "connect" initiate connection on socket
  5362.         0009h "recv"/"recvfrom" read from socket
  5363.         000Ah "socket"
  5364.         000Bh ???
  5365.         000Ch "gethostbyname"
  5366.         000Dh "send"/"sendto" write to socket
  5367.         000Eh ??? (does something to all connections for process)
  5368.         000Fh "getpid" get process identifier
  5369.         0010h "gettimeofday"
  5370.         0011h "bind" assign name to socket
  5371.         0012h "listen" listen for connections on socket
  5372.         0013h "accept" accept connection on socket
  5373.         0014h connect to X server
  5374.         0015h "gethostbyaddr" get host information for an address
  5375.         0016h "getprotobyname"
  5376.         0017h "getprotobynumber"
  5377.         0018h "getservbyname"
  5378.         0019h "getservbyport"
  5379.         001Ah "getsockname" determine name bound to socket
  5380.         001Bh "getpeername" get name of connected peer
  5381.         001Ch "getsockopt"/"setsockopt"
  5382.         001Dh "so_exit"     close all sockets for calling process
  5383.         001Eh "issock" determine whether file handle references socket
  5384.         001Fh "so_attach" reattach previously detached socket
  5385.         0020h "so_detach" temporarily detach socket
  5386.         0021h get DESQview directory
  5387.         0022h "NewProc" start new application (see AX=102Ch)
  5388.         0023h "so_linkup"
  5389.         0024h canonicalize filename
  5390.         0025h indirect INT 15h call
  5391.         0026h Network Manager interface
  5392.         0027h "so_unlink"    close connection from "so_linkup"
  5393.         0028h "raisepriority"
  5394.         0029h "lowerpriority"
  5395.         002Ah ???
  5396.         FFFFh "NetExit" (appears to be a NOP)
  5397.  04h    WORD    returned error code (see below)
  5398.  06h    WORD    maximum message size??? (usually 0400h)
  5399.  08h    WORD    PSP segment to use or 0000h if socket not valid
  5400.  0Ah    WORD    scratch space (JFT size)
  5401.  0Ch    DWORD    scratch space (JFT address)
  5402.  10h    DWORD    mailbox handle (initialized by function 0000h)
  5403.  14h    DWORD    timer object handle (initialized by function 0000h)
  5404. ---function 0000h---
  5405.  18h    WORD    (return) ???
  5406. ---function 0001h---
  5407.  18h    WORD    (return) status???
  5408.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  5409.  9Ah    WORD    maximum length of hostname to return
  5410. ---function 0002h---
  5411.  18h    WORD    (return) status
  5412.  1Ah    WORD    socket's file handle
  5413.  1Ch    WORD    IOCTL function
  5414.         05h "FIONREAD" determine available input
  5415.         06h "FIONBIO" set blocking state of socket
  5416.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  5417.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  5418. ---function 0003h---
  5419.  18h  2 BYTEs    unused
  5420.  1Ah    WORD    delay time in seconds
  5421. ---function 0004h---
  5422.  18h    WORD    (return) result in network (big-endian) byte order
  5423.  1Ah    WORD    value to convert to network byte order
  5424. ---function 0005h---
  5425.  18h    WORD    (return) number of handles meeting the specified conditions???
  5426.  1Ah    WORD    number of file handles in each bitset???
  5427.  1Ch    DWORD    bitset of socket handles to check for readability???
  5428.  20h    DWORD    bitset of socket handles to check for writability???
  5429.  24h    DWORD    bitset of socket handles to check for errors???
  5430.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  5431.  2Ah    DWORD    ???
  5432.  2Eh    DWORD    ???
  5433. ---function 0006h---
  5434.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5435.  1Ah    WORD    socket's file handle
  5436. ---function 0008h---
  5437.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5438.  1Ah    WORD    socket's file handle
  5439.  1Ch    WORD    0001h if socket name specified, 0000h if not
  5440.  1Eh    WORD    length of socket name
  5441.  20h  N BYTEs    name of socket to which to connect
  5442. ---function 0009h---
  5443.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  5444.             closed, or FFFFh on error
  5445.  1Ah    WORD    socket's file handle
  5446.  1Ch    WORD    number of bytes to read
  5447.  1Eh    WORD    flags
  5448.  20h    WORD    0000h if no source address desired
  5449.         0001h if source address is to be stored (datagram sockets)
  5450.  22h    WORD    length of source address
  5451.  24h 110 BYTEs    source address
  5452.  92h 1K BYTEs    buffer for data to be read
  5453. ---function 000Ah---
  5454.  18h    WORD    (return) socket's file handle or FFFFh on error
  5455.  1Ah    WORD    address family (0001h,0002h)
  5456.  1Ch    WORD    socket type
  5457.  1Eh    WORD    protocol
  5458. ---function 000Bh---
  5459.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  5460.  1Ah    WORD    socket's file handle
  5461.  1Eh    WORD    (call) ???
  5462. ---function 000Ch---
  5463.  18h 128 BYTEs    buffer containing ASCIZ hostname
  5464.         special case if empty string or "unix"
  5465.  98h    ???    'struct hostent' ???
  5466.  A2h    ???    (return) ???
  5467. ---function 000Dh---
  5468.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  5469.  1Ah    WORD    socket's file handle
  5470.  1Ch    WORD    number of bytes to write
  5471.  1Eh    WORD    number of bytes to follow in subsequent writes???
  5472.  20h    WORD    flags
  5473.  22h    WORD    0000h if no destination specified, 0001h if destination present
  5474.  24h    WORD    ???
  5475.  26h    WORD    length of destination address
  5476.  28h 110 BYTEs    destination address
  5477.  96h 1K BYTEs    buffer containing data to be written
  5478. ---function 000Eh---
  5479.  no additional fields
  5480. ---function 000Fh---
  5481.  18h    DWORD    (return) DESQview task handle of calling process
  5482. ---function 0010h---
  5483.  18h    DWORD    (return) current time
  5484.  1Ch    DWORD    (return) ???
  5485. ---function 0011h---
  5486.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5487.  1Ah    WORD    socket's file handle
  5488.  1Ch    WORD    length of name
  5489.  1Eh  N BYTEs    buffer for socket name
  5490. ---function 0012h---
  5491.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5492.  1Ah    WORD    socket's file handle
  5493.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  5494. ---function 0013h---
  5495.  18h    WORD    (return) file handle for new connection or FFFFh on error
  5496.  1Ah    WORD    listen()ing socket's file handle
  5497.  1Ch    WORD    (call) length of buffer for connecting entity's address
  5498.         (return) actual length of address
  5499.  1Eh  N BYTEs    buffer for connecting entity's address
  5500. ---function 0014h---
  5501.  18h    WORD    (return) socket's file handle or FFFFh on error
  5502.  1Ah  4 BYTEs    (return) ???
  5503.  1Eh    WORD    (return) ???
  5504.  20h    WORD    (return) ???
  5505.  22h 256 BYTEs    ASCIZ X display name
  5506. 122h    ???
  5507. ---function 0015h---
  5508.  18h    WORD    (call) type of address??? (test for 0001h seen)
  5509.  1Ah    WORD    (call) length of buffer for host address
  5510.  1Ch 110 BYTEs    buffer containing host address
  5511.  8Ah    WORD    (return) offset of official host name???
  5512.  8Ch    WORD    (return) offset of alias list???
  5513.  8Eh    WORD    (return) address type???
  5514.  90h    WORD    (return) length of an address in bytes???
  5515.  92h    WORD    (return) offset of address???
  5516.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  5517. ---function 0016h---
  5518.  18h    ???    buffer for protocol name???
  5519.  98h    ???
  5520. ---function 0017h---
  5521.  18h    WORD    (call) protocol number???
  5522.  1Ah    WORD    (return) ??? or 0001h
  5523. ---function 0018h---
  5524.  18h 128 BYTEs    buffer containing ???
  5525.  98h 128 BYTEs    buffer containing ???
  5526. 118h    WORD    (return) ???
  5527. ---function 0019h---
  5528.  18h    WORD    length of name???
  5529.  1Ah 128 BYTEs    buffer for name???
  5530.  9Ah    WORD    (return) ???
  5531. ---function 001Ah---
  5532.  18h    WORD    (return) 0000h if successful, FFFFh on error
  5533.  1Ah    WORD    socket's file handle
  5534.  1Ch    WORD    (call) length of buffer for socket name
  5535.         (return) actual length of socket name
  5536.  1Eh  N BYTEs    buffer for socket name
  5537. ---function 001Bh---
  5538.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5539.  1Ah    WORD    socket's file handle
  5540.  1Ch    WORD    (call) size of buffer for name
  5541.         (return) actual size of name
  5542.  1Eh  N BYTEs    buffer for peer's name
  5543. ---function 001Ch---
  5544.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5545.  1Ah    WORD    direction: 0000h to get, 0001h to set
  5546.  1Ch    WORD    socket's file handle
  5547.  1Eh    WORD    option level
  5548.  20h    WORD    option name
  5549.  22h    WORD    (call) length of buffer for option value
  5550.         (return) actual length of option value
  5551.  24h  N BYTEs    buffer for option value
  5552. ---function 001Dh---
  5553.  no additional fields
  5554. ---function 001Eh---
  5555.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  5556.  1Ah    WORD    file handle which may or may not be a socket
  5557. ---function 001Fh---
  5558.  18h    WORD    (return) file handle or FFFFh on error
  5559.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  5560.             previously detached socket
  5561. ---function 0020h---
  5562.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  5563.  1Ah    WORD    socket's file handle
  5564.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  5565.             the file handle
  5566. ---function 0021h---
  5567.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  5568. ---function 0022h---
  5569.  18h    DWORD    (return) task handle of new application
  5570.  1Ch    WORD    size of .DVP data
  5571.  1Eh 129 BYTEs    ASCIZ ???
  5572.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  5573. ---function 0023h---
  5574.  18h    WORD    (return) ??? or FFFFh on error
  5575.  1Ah    WORD    socket's file handle???
  5576. ---function 0024h---
  5577.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  5578.             0000h if successful
  5579.  1Ah 129 BYTEs    ASCIZ filename/pathname
  5580. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  5581. ---function 0025h---
  5582.  18h    WORD    value of AX
  5583.  1Ah    WORD    value of BX
  5584.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  5585.         (call) number of stack parameters if AH value is 12h
  5586.         (return) returned CX for calls other than INT 15/AH=12h
  5587.  1Eh    WORD    value of DX
  5588.  20h    WORD    value of DI
  5589.  22h    WORD    value of SI
  5590.  24h    WORD    value of DS
  5591.  26h    WORD    value of ES
  5592.  28h    WORD    (return) value of FLAGS after call
  5593.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  5594.         (return) stack results from INT 15/AH=12h call
  5595. ---function 0026h---
  5596.  18h    WORD    (call) subfunction
  5597.             0004h "so_exit"???
  5598.             0005h "gethostbyname"
  5599.             0006h "gethostname"
  5600.             0009h "socket"
  5601.             000Dh "gethostbyaddr"
  5602.             000Fh "getprotobyname"
  5603.             0010h get protocol name for protocol number
  5604.             0011h "getservbyname"
  5605.             0012h "getservbyport"
  5606.             0013h "getsockname"???
  5607.             0016h ???
  5608.             0017h kill Network Manager
  5609.             0018h "getpeername"???
  5610.             0019h ??? (called by socket function 0000h)
  5611.             001Ah ???
  5612.             001Bh "so_linkup"
  5613.             001Dh get network services
  5614.             001Fh "getpwuid"
  5615.             0020h "getpwnam"
  5616.             0021h "getpwvar"
  5617.             0022h "crypt"
  5618.             0023h "so_unlink"
  5619.             0024h "getlogin"
  5620.             0028h "sethostent"
  5621.             0029h "gethostent"
  5622.             002Ah "soaddhost"
  5623.             002Bh "soupdatehost"
  5624.             002Ch "sodeletehost"
  5625.             002Dh "setservent"
  5626.             002Eh "getservent"
  5627.             002Fh "setpwent"
  5628.             0030h "getpwent"
  5629.             0031h ???
  5630.             0032h ???
  5631.             0033h ???
  5632.             0034h get IP network number
  5633.             0035h ??? (pops up Network Manager window)
  5634.             0037h ???
  5635.             0038h get machine name and IP address
  5636.             0039h ???
  5637.         (return) status???
  5638.  1Ah    WORD    (call) size of parameter data
  5639.         (return) size of returned data
  5640.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  5641.         (return) result data (see below)
  5642. ---function 0027h---
  5643.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5644.  1Ah    WORD    socket's file handle
  5645. ---functions 0028h,0029h---
  5646.  18h    WORD    (call) file handle for which to set priority low/high
  5647.             FFFFh to change calling task's priority
  5648. ---function 002Ah---
  5649.  no additional fields
  5650.  
  5651. Format of Function 0026h/Subfunction 000Fh data:
  5652. Offset    Size    Description
  5653.  00h  8 BYTEs    (return) ???
  5654.  
  5655. Format of Function 0026h/Subfunction 0010h data:
  5656. Offset    Size    Description
  5657.  00h  2 BYTEs    (return) ???
  5658.  02h    WORD    (return) protocol number
  5659.  04h    WORD    (call) protocol number for which to get name
  5660.  06h    WORD    (return) ???
  5661.  08h    var    (return) ASCIZ protocol name
  5662.  N    var    (return) ASCIZ protocol name
  5663.  
  5664. Format of Function 0026h/Subfunction 0011h data:
  5665. Offset    Size    Description
  5666.  00h  8 BYTEs    ???
  5667.  08h    var    (return) ASCIZ protocol name
  5668.     var    (return) ASCIZ ??? name
  5669.     var    (return) ASCIZ ??? name
  5670.  
  5671. Format of Function 0026h/Subfunction 0012h data:
  5672. Offset    Size    Description
  5673.  00h  8 BYTEs    (return) ???
  5674.  
  5675. Format of Function 0026h/Subfunction 0013h data:
  5676. Offset    Size    Description
  5677.  00h 116 BYTEs    (return) ???
  5678.  
  5679. Format of Function 0026h/Subfunction 0016h data:
  5680. Offset    Size    Description
  5681.  00h  4 BYTEs    (return) ???
  5682.  
  5683. Format of Function 0026h/Subfunction 0018h data:
  5684. Offset    Size    Description
  5685.  00h 116 BYTEs    (return) ???
  5686.  
  5687. Format of Function 0026h/Subfunction 0019h data:
  5688. Offset    Size    Description
  5689.  00h  4 BYTEs    (return) ???
  5690.  04h    DWORD    (return) task handle of ???
  5691.  
  5692. Format of Function 0026h/Subfunction 001Ah data:
  5693. Offset    Size    Description
  5694.  00h 38 BYTEs    (return) ???
  5695.  
  5696. Format of Function 0026h/Subfunction 001Bh data:
  5697. Offset    Size    Description
  5698.  00h 10 BYTEs    (return) ???
  5699.  
  5700. Format of Function 0026h/Subfunction 001Dh return data [array]:
  5701. Offset    Size    Description
  5702.  00h    WORD    ??? or FFFFh if end of array
  5703.  02h  7 BYTEs    ???
  5704.  09h 27 BYTEs    ASCIZ name of service
  5705.  
  5706. Format of Function 0026h/Subfunction 0024h return data:
  5707. Offset    Size    Description
  5708.  00h    var    ASCIZ username
  5709.  
  5710. Format of Function 0026h/Subfunction 0030h data:
  5711. Offset    Size    Description
  5712.  00h    WORD    (call) UID or 0000h for current user
  5713.         (return) ???
  5714.  02h    WORD    (return) UID
  5715.  04h  6 BYTEs    (return) ???
  5716.  0Ah    var    (return) ASCIZ username
  5717.     var    (return) ASCIZ encrypted password
  5718.     var    (return) ASCIZ initial ("home") directory
  5719.  
  5720. Format of Function 0026h/Subfunction 0034h data:
  5721. Offset    Size    Description
  5722.  00h  1-3 BYTEs    IP network number of caller's machine (low byte first)
  5723.  
  5724. Format of Function 0026h/Subfunction 0038h return data:
  5725. Offset    Size    Description
  5726.  00h    BYTE    ???
  5727.  01h  4 BYTEs    IP address
  5728.  05h    var    ASCIZ machine name
  5729.     ???
  5730.  
  5731. Values for error code:
  5732.  0000h successful
  5733.  0009h "BADF" bad file handle
  5734.  000Ch "ENOMEM" out of memory
  5735.  000Eh "EFAULT" bad address
  5736.  0016h "EINVAL" invalid argument
  5737.  0018h "EMFILE" too many open files
  5738.  0020h "EPIPE" ??? broken pipe
  5739.  0023h "EWOULDBLOCK" operation cannot be completed at this time
  5740.  0024h "EINPROGRESS" operation now in progress
  5741.  0026h "ENOTSOCK" socket invalid
  5742.  0028h "EMSGSIZE" message too long to send atomically
  5743.  002Ch "ESOCKTNOSUPPORT" socket type not supported
  5744.  002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
  5745.  0031h "EDOM" argument too large
  5746.  0038h "EISCONN" socket is already connected
  5747.  0039h "ENOTCONN" socket is not connected
  5748.  
  5749. Format of Socket Context Record:
  5750. Offset    Size    Description
  5751.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  5752.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  5753.  06h    WORD    PSP segment of owner or 0000h
  5754.  08h    WORD    mapping context of owning window (see AX=1016h)
  5755.  0Ah  2 BYTEs    ???
  5756.  0Ch    WORD    address family
  5757.  0Eh    WORD    socket type
  5758.  10h    WORD    protocol
  5759.  12h    WORD    socket state
  5760.         0001h created
  5761.         0002h bound
  5762.         0003h listening???
  5763.         0005h connected
  5764.  14h    DWORD    timer object handle
  5765.  18h    DWORD    object handle (mailbox???)
  5766.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  5767.  20h    DWORD    pointer to ??? or 0000h
  5768.  24h  6 BYTEs    ???
  5769.  2Ah    WORD    file handle for socket or FFFFh
  5770.  2Ch  2 BYTEs    ???
  5771.  2Eh    WORD    nonzero if socket nonblocking
  5772. ---network connections only---
  5773.  30h  2 BYTEs    ???
  5774.  32h    WORD    ???
  5775.  34h  4 BYTEs    IP address of remote (big-endian)
  5776.  38h  6 BYTEs    ???
  5777. --------Q-15DE2F-----------------------------
  5778. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  5779.     AX = DE2Fh
  5780. Return: BX = status
  5781.         0001h keyboard focus has been given to a direct window since the
  5782.         last call
  5783.         0000h if not
  5784. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5785.     Quarterdeck states that this call will not be available under future
  5786.       versions of DESQview Classic
  5787. --------Q-15DE30-----------------------------
  5788. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  5789.     AX = DE30h
  5790. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  5791. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5792.     you must first check the DESQview version to verify that it is 2.50 or
  5793.       greater
  5794. SeeAlso: INT 21/AH=2Bh/CX=4445h
  5795. --------Q-15DE31-----------------------------
  5796. INT 15 - DESQview/X v1.10 - ???
  5797.     AX = DE31h
  5798.     CX = ???
  5799.         0000h ???
  5800.         nonzero ???
  5801.     ???
  5802. Return: ???
  5803. --------b-15E00F-----------------------------
  5804. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  5805.     AX = E00Fh
  5806.     ES:BX -> start of 2nd processor's execution
  5807. Return: AL = 0Fh successful
  5808.        = 00h failure    
  5809. SeeAlso: AX=E10Eh,AX=E200h
  5810. --------b-15E10E-----------------------------
  5811. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  5812.     AX = E10Eh
  5813.     ES:BX -> start of 2nd processor's execution
  5814. Return: AL = 0Fh successful (halted)
  5815.        = 00h failure (not halted)
  5816. SeeAlso: AX=E00Fh,AX=E200h
  5817. --------b-15E200-----------------------------
  5818. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  5819.     AX = E200h
  5820. Return: AX = 8000h if 2nd processor available
  5821. SeeAlso: AX=E00Fh,AX=E10Eh
  5822. ----------15E4-------------------------------
  5823. INT 15 - ???
  5824.     AH = E4h
  5825.     AL = subfunction
  5826.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  5827.     DL = ???
  5828. Return: ???
  5829. --------m-15F200CX454D-----------------------
  5830. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  5831.     AX = F200h
  5832.     CX = 454Dh
  5833. Return: CF clear if hardware already initialised
  5834.         BX = upper RAM areas in use
  5835.         bit 0: C000-C3FF
  5836.         bit 1: C400-C7FF
  5837.         ...
  5838.         bit 11: EC00-EFFF
  5839.     CF set if hardware not initialised yet
  5840. --------B-1600-------------------------------
  5841. INT 16 - KEYBOARD - GET KEYSTROKE
  5842.     AH = 00h
  5843. Return: AH = BIOS scan code
  5844.     AL = ASCII character
  5845. Notes:    on extended keyboards, this function discards any extended keystrokes,
  5846.       returning only when a non-extended keystroke is available
  5847.     the BIOS scan code is usually, but not always, the same as the hardware
  5848.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  5849.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  5850.       differs for shifted special keys.
  5851. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  5852. --------B-1601-------------------------------
  5853. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  5854.     AH = 01h
  5855. Return: ZF set if no keystroke available
  5856.     ZF clear if keystroke available
  5857.         AH = BIOS scan code
  5858.         AL = ASCII character
  5859. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  5860.       however, any extended keystrokes which are not compatible with 83/84-
  5861.       key keyboards are removed in the process of checking whether a
  5862.       non-extended keystroke is available
  5863. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  5864. --------B-1602-------------------------------
  5865. INT 16 - KEYBOARD - GET SHIFT FLAGS
  5866.     AH = 02h
  5867. Return: AL = shift flags (see below)
  5868. SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
  5869.  
  5870. Bitfields for shift flags:
  5871.  bit 7    Insert active
  5872.  bit 6    CapsLock active
  5873.  bit 5    NumLock active
  5874.  bit 4    ScrollLock active
  5875.  bit 3    Alt key pressed (either Alt on 101/102-key keyboards)
  5876.  bit 2    Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  5877.  bit 1    left shift key pressed
  5878.  bit 0    right shift key pressed
  5879. --------B-1603-------------------------------
  5880. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  5881.     AH = 03h
  5882.     AL = subfunction
  5883.         00h set default delay and rate (PCjr and some PS/2)
  5884.         01h increase delay before repeat (PCjr)
  5885.         02h decrease repeat rate by factor of 2 (PCjr)
  5886.         03h increase delay and decrease repeat rate (PCjr)
  5887.         04h turn off typematic repeat (PCjr and some PS/2)
  5888.         05h set repeat rate and delay (AT,PS)
  5889.         BH = delay value (00h = 250ms to 03h = 1000ms)
  5890.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  5891.         06h get current typematic rate and delay (newer PS/2s)
  5892.         Return: BL = repeat rate (see above)
  5893.             BH = delay (see above)
  5894. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  5895.       supported
  5896. SeeAlso: INT 16/AH=09h
  5897. --------B-1604-------------------------------
  5898. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  5899.     AH = 04h
  5900.     AL = keyclick state
  5901.         00h off
  5902.         01h on
  5903. SeeAlso: AH=03h
  5904. --------B-1605-------------------------------
  5905. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  5906.     AH = 05h
  5907.     CH = scan code
  5908.     CL = ASCII character
  5909. Return: AL = 00h if successful
  5910.          01h if keyboard buffer full
  5911. Note:    under DESQview, the following "keystrokes" invoke the following
  5912.       actions when they are read from the keyboard buffer:
  5913.         38FBh or FB00h    switch to next window (only if main menu
  5914.                 popped up)
  5915.         38FCh or FC00h    pop up DESQview main menu
  5916.         38FEh or FE00h    close the current window
  5917.         38FFh or FF00h    pop up DESQview learn menu
  5918. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  5919. --------B-1605-------------------------------
  5920. INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
  5921.     AH = 05h
  5922.     AL = function
  5923.         01h set keyboard layout to French
  5924.         02h set keyboard layout to German
  5925.         03h set keyboard layout to Italian
  5926.         04h set keyboard layout to Spanish
  5927.         05h set keyboard layout to UK
  5928.         80h check if function supported
  5929.         Return: AL <> 80h if supported
  5930. Return: ???
  5931. Note:    called by DOS 3.2 KEYBxx.COM
  5932. SeeAlso: AH=92h,AH=A2h
  5933. --------B-1609-------------------------------
  5934. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  5935.     AH = 09h
  5936. Return: AL = supported keyboard functions (see below)
  5937. Note:    this function is only available if bit 6 of the second feature byte
  5938.       returned by INT 15/AH=C0h is set
  5939. SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
  5940.  
  5941. Bitfields for supported keyboard functions:
  5942.  bit 7    reserved
  5943.  bit 6    reserved
  5944.  bit 5    reserved
  5945.  bit 4    INT 16/AH=0Ah supported
  5946.  bit 3    INT 16/AX=0306h supported
  5947.  bit 2    INT 16/AX=0305h supported
  5948.  bit 1    INT 16/AX=0304h supported
  5949.  bit 0    INT 16/AX=0300h supported
  5950. --------B-160A-------------------------------
  5951. INT 16 - KEYBOARD - GET KEYBOARD ID
  5952.     AH = 0Ah
  5953. Return: BX = keyboard ID
  5954. Note:    check return value from AH=09h to determine whether this function is
  5955.       supported
  5956. SeeAlso: AH=09h
  5957. --------B-1610-------------------------------
  5958. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  5959.     AH = 10h
  5960. Return: AH = BIOS scan code
  5961.     AL = ASCII character
  5962. Notes:    if no keystroke is available, this function waits until one is placed
  5963.       in the keyboard buffer
  5964.     the BIOS scan code is usually, but not always, the same as the hardware
  5965.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  5966.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  5967.       differs for shifted special keys.
  5968.     unlike AH=00h, this function does not discard extended keystrokes
  5969. SeeAlso: AH=00h,AH=11h,AH=20h
  5970. --------B-1611-------------------------------
  5971. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  5972.     AH = 11h
  5973. Return: ZF set if no keystroke available
  5974.     ZF clear if keystroke available
  5975.         AH = BIOS scan code
  5976.         AL = ASCII character
  5977. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  5978.     unlike AH=01h, this function does not discard extended keystrokes
  5979. SeeAlso: AH=01h,AH=10h,AH=21h
  5980. --------B-1612-------------------------------
  5981. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  5982.     AH = 12h
  5983. Return: AL = shift flags 1 (same as returned by AH=02h) (see below)
  5984.     AH = shift flags 2 (see below)
  5985. Notes:    AL bit 3 set only for left Alt key on many machines
  5986.     AH bits 7 through 4 always clear on a Compaq SLT/286
  5987. SeeAlso: AH=02h,AH=22h,AH=51h
  5988.  
  5989. Bitfields for shift flags 1:
  5990.  bit 7    Insert active
  5991.  bit 6    CapsLock active
  5992.  bit 5    NumLock active
  5993.  bit 4    ScrollLock active
  5994.  bit 3    Alt key pressed (either Alt on 101/102-key keyboards)
  5995.  bit 2    Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  5996.  bit 1    left shift key pressed
  5997.  bit 0    right shift key pressed
  5998.  
  5999. Bitfields for shift flags 2:
  6000.  bit 7    SysRq key pressed
  6001.  bit 6    CapsLock pressed
  6002.  bit 5    NumLock pressed
  6003.  bit 4    ScrollLock pressed
  6004.  bit 3    right Alt key pressed
  6005.  bit 2    right Ctrl key pressed
  6006.  bit 1    left Alt key pressed
  6007.  bit 0    left Ctrl key pressed
  6008. --------B-1620-------------------------------
  6009. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
  6010.     AH = 20h
  6011. Return: ??? see AH=10h
  6012. Note:    use AH=09h to determine whether this function is supported
  6013. SeeAlso: AH=00h,AH=10h,AH=21h
  6014. --------B-1621-------------------------------
  6015. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
  6016.     AH = 21h
  6017. Return: ??? see AH=11h
  6018. Note:    use AH=09h to determine whether this function is supported
  6019. SeeAlso: AH=01h,AH=11h,AH=20h
  6020. --------B-1622-------------------------------
  6021. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
  6022.     AH = 22h
  6023. Return: ??? see AH=12h
  6024. Note:    use AH=09h to determine whether this function is supported
  6025. SeeAlso: AH=02h,AH=12h
  6026. --------U-164252-----------------------------
  6027. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  6028.     AX = 4252h
  6029. Return: AX = 5242h if installed
  6030. Program: TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  6031.       PC Magazine utility CAPTURE written by Tom Kihlken
  6032. SeeAlso: AX=4253h,AX=4254h
  6033. --------U-164253-----------------------------
  6034. INT 16 - TEXTCAP 2.0 - UNINSTALL
  6035.     AX = 4253h
  6036. Return: AX = segment of resident code
  6037. Notes:    the uninstall code does not check whether interrupt vectors have been
  6038.       chained by other programs
  6039.     the caller must free the main memory block (using the returned segment)
  6040. SeeAlso: AX=4252h,AX=4254h
  6041. --------U-164254-----------------------------
  6042. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  6043.     AX = 4254h
  6044. Return: AX = status
  6045.         4254h if screen dump will be written as soon as disk becomes idle
  6046.         5442h if screen dump written
  6047. SeeAlso: AX=4252h,AX=4253h
  6048. --------e-164500-----------------------------
  6049. INT 16 - Shamrock Software EMAIL - GET STATUS
  6050.     AX = 4500h
  6051.     DL = port number (01h = COM1)
  6052.     ES:BX -> 13-byte buffer for ASCIZ name
  6053. Return: AX = 4D00h if EMAIL installed on specified port
  6054.         ES:BX -> "" if no connection
  6055.           -> "*" if connection but caller has not identified name
  6056.           -> name otherwise
  6057.         CX = version (CH = major, CL = minor)
  6058.         DL = privilege level of user (00h = guest)
  6059.         DH = chosen language (00h German, 01h English)
  6060. SeeAlso: AX=4501h,AX=4502h
  6061. --------e-164501-----------------------------
  6062. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  6063.     AX = 4501h
  6064.     DL = port number (01h = COM1)
  6065. Return: AX = 4D00h if EMAIL installed on specified port
  6066.         BX = maximum connect time in clock ticks
  6067.         CX = maximum connect time for guests (without name) in clock ticks
  6068.         DX = elapsed connect time of current user in clock ticks
  6069. SeeAlso: AX=4500h    
  6070. --------e-164502-----------------------------
  6071. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  6072.     AX = 4502h
  6073.     DL = port number (01h = COM1)
  6074. Return: AX = 4D00h if EMAIL installed on specified port
  6075.         BL = current value of serial port's Line Control Register
  6076.         BH = flags
  6077.         bit 0: ISO code
  6078.         bit 1: pause
  6079.         bit 2: linefeed
  6080.         bit 3: ANSI sequences
  6081.         CX = selected country code (33 = France, 49 = Germany, etc)
  6082.         DX = baudrate divisor (115200/DX = baudrate)
  6083. SeeAlso: AX=4500h
  6084. --------e-164503-----------------------------
  6085. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  6086.     AX = 4503h
  6087.     DL = port number (01h = COM1)
  6088.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  6089.     ES:BX -> ASCIZ string with new user command-word
  6090. Return: AX = 4D00h if EMAIL installed on specified port
  6091. Notes:    a single user command (consisting of only uppercase letters and digits)
  6092.       may be defined, and remains valid until it is overwritten or the
  6093.       EMAIL program terminates; the user command must be activated by
  6094.       calling AX=4504h at least once.
  6095.     an existing command word may be redefined with this function
  6096. SeeAlso: AX=4504h,AX=4505h
  6097. --------e-164504-----------------------------
  6098. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  6099.     AX = 4504h
  6100.     DL = port number (01h = COM1)
  6101.     ES:BX -> 80-byte buffer for ASCIZ user input line
  6102. Return: AX = 4D00h if EMAIL installed on specified port
  6103.         DL = flags
  6104.         bit 0: user function supported (always set)
  6105.         bit 1: user entered user-function command word
  6106.         if DL bit 1 set,
  6107.         ES:BX buffer contains line entered by user which begins with
  6108.             the defined command word and has been converted to all
  6109.             caps
  6110. Note:    caller must process the returned commandline and invoke AX=4505h
  6111.       within five seconds with the result of that processing
  6112. SeeAlso: AX=4503h,AX=4505h
  6113. --------e-164505-----------------------------
  6114. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  6115.     AX = 4505h
  6116.     DL = port number (01h = COM1)
  6117.     DH = error flag
  6118.         bit 3: set on error
  6119.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  6120. Return: AH = 4Dh if EMAIL installed on specified port
  6121.     AL = status
  6122.         00h successful
  6123.         02h unable to perform function (timeout, prev call not complete)
  6124.         other error
  6125. Notes:    if the error flag in DH is set, the string is not sent and an error
  6126.       message is generated instead; if this function is not called within
  6127.       five seconds of AX=4504h, EMAIL automatically generates an error
  6128.       message
  6129.     the string is copied into an internal buffer, allowing this function's
  6130.       caller to continue immediately
  6131. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  6132. --------e-164506-----------------------------
  6133. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  6134.     AX = 4506h
  6135.     DL = port number (01h = COM1)
  6136.     ES:BX -> 13-byte buffer for ASCIZ filename
  6137. Return: AX = 4D00h if EMAIL installed on specified port
  6138.         DH = Xmodem status
  6139.         00h no XGET command given
  6140.         01h XGET in progress
  6141.         02h XGET completed successfully
  6142.         ES:BX buffer filled with last filename given to XGET command
  6143.         (without path)
  6144. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  6145.       return DH=00h
  6146. SeeAlso: AX=4500h,INT 17/AX=2408h
  6147. --------J-165000-----------------------------
  6148. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  6149.     AX = 5000h
  6150.     BX = country code
  6151.         0001h USA (English), 0051h Japan
  6152. Return: AL = status
  6153.         00h successful
  6154.         01h bad country code
  6155.         02h other error
  6156. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  6157. --------J-165001-----------------------------
  6158. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  6159.     AX = 5001h
  6160. Return: AL = status
  6161.         00h successful
  6162.         BX = country code
  6163.         02h error
  6164. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  6165. --------J-1651-------------------------------
  6166. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  6167.     AH = 51h
  6168. Return: AL = standard shift key states (see AH=12h)
  6169.     AH = Kana lock (00h off, 01h on)
  6170. SeeAlso: AH=02h,AH=12h,AH=22h
  6171. --------A-165500-----------------------------
  6172. INT 16 C - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  6173.     AX = 5500h
  6174. Return: AX = 4D53h ('MS') if keyboard TSR present
  6175. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  6176.       that are present through this call.
  6177.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  6178.       handlers; otherwise it assumes that the TSR will handle the keyboard
  6179. SeeAlso: INT 1A/AX=3601h
  6180. --------U-1655FF-----------------------------
  6181. INT 16 - Swap Utilities - ???
  6182.     AX = 55FFh
  6183.     BX >= 0004h
  6184.     CX = function
  6185.         0000h set ??? flag
  6186.         other clear ??? flag
  6187. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
  6188. --------U-166969BX6968-----------------------
  6189. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  6190.     AX = 6969h
  6191.     BX = 6968h
  6192. Return: resident code unhooked, but not removed from memory
  6193. --------U-166969BX6969-----------------------
  6194. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  6195.     AX = 6969h
  6196.     BX = 6969h
  6197.     DX = 0000h
  6198. Return: DX nonzero if installed
  6199.         BX = CS of resident code
  6200.         DX = PSP segment of resident code
  6201.         DS:SI -> ASCIZ identification string "CPoint Talk"
  6202. --------b-166F00BX0000-----------------------
  6203. INT 16 - HP Vectra - ??? - INSTALLATION CHECK
  6204.     AX = 6F00h
  6205.     BX = 0000h
  6206. Return: BX = 4850h if present
  6207. Note:    called by recent MS Mouse drivers
  6208. --------b-166F0D-----------------------------
  6209. INT 16 - HP Vectra - ???
  6210.     AX = 6F0Dh
  6211.     ???
  6212. Return: ???
  6213. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  6214. SeeAlso: AX=6F0Eh
  6215. --------b-166F0E-----------------------------
  6216. INT 16 - HP Vectra - ???
  6217.     AX = 6F0Eh
  6218.     ???
  6219. Return: ???
  6220. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  6221. SeeAlso: AX=6F0Dh
  6222. --------K-1670-------------------------------
  6223. INT 16 - FAKEY.COM - INSTALLATION CHECK
  6224.     AH = 70h
  6225. Return: AX = 1954h if installed
  6226. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  6227. --------K-1671-------------------------------
  6228. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  6229.     AH = 71h
  6230.     CX = number of keystrokes
  6231.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  6232. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  6233. SeeAlso: AH=05h,AH=72h
  6234. --------K-1672-------------------------------
  6235. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  6236.     AH = 72h
  6237. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  6238. SeeAlso: AH=71h
  6239. --------K-1673-------------------------------
  6240. INT 16 - FAKEY.COM - PLAY TONES
  6241.     AH = 73h
  6242.     CX = number of tones to play
  6243.     DS:SI -> array of tones (see below)
  6244. Program: FAKEY is a keystroke faking utility by System Enhancement Associates
  6245. SeeAlso: INT 15/AX=1019h
  6246.  
  6247. Format of tone array entries:
  6248. Offset    Size    Description
  6249.  00h    WORD    divisor for timer channel 2
  6250.  02h    WORD    duration in clock ticks
  6251. --------R-1675-------------------------------
  6252. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  6253.     AH = 75h
  6254.     AL = number of ticks between checks for new screen changes
  6255. --------R-1676-------------------------------
  6256. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  6257.     AH = 76h
  6258.     AL = error checking type
  6259.         00h none
  6260.         01h fast
  6261.         02h slow
  6262. --------R-1677-------------------------------
  6263. INT 16 - pcANYWHERE III - LOG OFF
  6264.     AH = 77h
  6265.     AL = mode
  6266.         00h wait for another call
  6267.         01h leave in Memory Resident Mode
  6268.         02h leave in Automatic Mode
  6269.         FFh leave in current operating mode
  6270. --------U-167761-----------------------------
  6271. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  6272.     AX = 7761h ('wa')
  6273. Return: AX = 5741h ('WA') if installed
  6274. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  6275. SeeAlso: INT 21/AX=7761h
  6276. --------U-167788BX7789-----------------------
  6277. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  6278.     AX = 7788h
  6279.     BX = 7789h
  6280.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  6281. Return: AX = 7789h if installed and signature correct
  6282.     BX = 7788h
  6283.     SI destroyed          
  6284. --------R-1679-------------------------------
  6285. INT 16 - pcANYWHERE III - CHECK STATUS
  6286.     AH = 79h
  6287. Return: AX = status
  6288.         FFFFh if resident and active
  6289.         FFFEh if resident but not active
  6290.         FFFDh if in Memory Resident mode
  6291.         FFFCh if in Automatic mode
  6292.         other value if not resident
  6293. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  6294. --------R-167A-------------------------------
  6295. INT 16 - pcANYWHERE III - CANCEL SESSION
  6296.     AH = 7Ah
  6297. --------R-167B00-----------------------------
  6298. INT 16 - pcANYWHERE III - SUSPEND
  6299.     AX = 7B00h
  6300. SeeAlso: AH=79h,AX=7B01h
  6301. --------R-167B01-----------------------------
  6302. INT 16 - pcANYWHERE III - RESUME
  6303.     AX = 7B01h
  6304. SeeAlso: AH=79h,AX=7B00h
  6305. --------R-167C-------------------------------
  6306. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  6307.     AH = 7Ch
  6308. Return: AH = port number
  6309.     AL = baud rate
  6310.         00h = 50 baud
  6311.         01h = 75 baud
  6312.         02h = 110 baud
  6313.         03h = 134.5 baud
  6314.         04h = 150 baud
  6315.         05h = 300 baud
  6316.         06h = 600 baud
  6317.         07h = 1200 baud
  6318.         08h = 1800 baud
  6319.         09h = 2000 baud
  6320.         0Ah = 2400 baud
  6321.         0Bh = 4800 baud
  6322.         0Ch = 7200 baud
  6323.         0Dh = 9600 baud
  6324.         0Eh = 19200 baud
  6325. --------R-167D-------------------------------
  6326. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  6327.     AH = 7Dh
  6328.     AL = subfunction
  6329.         00h set terminal parameters
  6330.         01h get terminal parameters
  6331.         02h get configuration header and terminal parameters
  6332.     DS:CX -> terminal parameter block
  6333. --------R-167E-------------------------------
  6334. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  6335.     AH = 7Eh
  6336.     AL = subfunction
  6337.         01h port input status
  6338.         Return AX = 0 if no characer ready,
  6339.                AX = 1 if character ready
  6340.         02h port input character
  6341.         Return AL = received character
  6342.         03h port output character in CX
  6343.         11h hang up phone
  6344. --------R-167F-------------------------------
  6345. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  6346.     AH = 7Fh
  6347.     AL = subfunction
  6348.         00h enable remote keyboard only
  6349.         01h enable host keyboard only
  6350.         02h enable both keyboards
  6351.         08h display top 24 lines
  6352.         09h display bottom 24 lines
  6353.         10h Hayes modem
  6354.         11h other modem
  6355.         12h direct connect
  6356. --------U-1680-------------------------------
  6357. INT 16 - MAKEY.COM - INSTALLATION CHECK
  6358.     AH = 80h
  6359. Return: AX = 1954h if installed
  6360. Program: MAKEY is a utility by System Enhancement Associates
  6361. --------U-168765BX4321-----------------------
  6362. INT 16 - AT.COM version 8/26/87 - API
  6363.     AX = 8765h
  6364.     BX = 4321h
  6365.     CX = ??? or FFFFh
  6366.     if CX = FFFFh
  6367.         DX = number of event to remove or FFFFh
  6368. Return: ES:BX -> event record array
  6369. Program: AT.COM is a resident scheduler by Bill Frolik
  6370.  
  6371. Format of event record:
  6372. Offset    Size    Description
  6373.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  6374.  01h    BYTE    day of date on which to trigger
  6375.  02h    BYTE    month of date on which to trigger
  6376.  03h    BYTE    trigger time, minute
  6377.  04h    BYTE    trigger time, hour
  6378.  05h    WORD    offset of command to be executed
  6379. ----------1692-------------------------------
  6380. INT 16 - ???
  6381.     AH = 92h
  6382. Return: AH <= 80h if ???
  6383. Note:    called by DOS 3.2 KEYBxx.COM and DOS 5+ KEYB.COM
  6384. SeeAlso: AH=05h"PCjr",AH=A2h
  6385. --------U-1699-------------------------------
  6386. INT 16 - SCOUT v5.4 - GET ???
  6387.     AH = 99h
  6388. Return: AX = ABCDh
  6389.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  6390. Program: Scout is a memory-resident file manager by New-Ware
  6391. SeeAlso: AH=9Eh
  6392. --------U-169E-------------------------------
  6393. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  6394.     AH = 9Eh
  6395. Return: AX = ABCDh if installed
  6396. Program: Scout is a memory-resident file manager by New-Ware
  6397. SeeAlso: AH=99h
  6398. ----------16A2-------------------------------
  6399. INT 16 - ???
  6400.     AH = A2h
  6401. Return: AH <= 80h if ???
  6402. Note:    this function is called by DOS 5+ KEYB.COM
  6403. SeeAlso: AH=92h
  6404. --------V-16AA-------------------------------
  6405. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  6406.     AH = AAh
  6407.     Various registers set up by high level language.
  6408. Return: Graphics performed
  6409. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  6410.       Modula 2 and others from DataBiten in Sweden. The library is
  6411.       installed as a memory resident driver.
  6412. --------K-16CA--BX736B-----------------------
  6413. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  6414.     AH = CAh
  6415.     BX = 736Bh ("sk")
  6416.     CX = 736Bh
  6417.     AL = function
  6418.         00h installation check
  6419.         Return: DX = words available in keyboard buffer
  6420.         01h place keystroke in buffer
  6421.         DX = keystroke (DH = scan code, DL = ASCII character)
  6422.         Return: DX = words available in keyboard buffer
  6423.                 FFFFh on error
  6424.         02h flush STACKEY and BIOS keyboard buffers
  6425. Return: AX = CAFFh if installed
  6426.         BX = segment of resident code
  6427.         CX = STACKEY version (CH = major, CL = minor)
  6428. Program: STACKEY is a shareware keyboard-input faking TSR
  6429. Index:    installation check;STACKEY
  6430. --------V-16CA00BX6570-----------------------
  6431. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  6432.     AX = CA00h
  6433.     BX = 6570h ("ep")
  6434.     CX = 6570h
  6435. Return: AX = CAFFh if installed
  6436.         BX = segment of resident code
  6437.         CX = ??? (0090h)
  6438. Program: EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  6439.       permanent across mode switches
  6440. SeeAlso: AX=CA00h/BX=7670h
  6441. --------V-16CA00BX7670-----------------------
  6442. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  6443.     AX = CA00h
  6444.     BX = 7670h ("vp")
  6445.     CX = 7670h
  6446. Return: AX = CAFFh if installed
  6447.         BX = segment of resident code
  6448.         CX = ??? (0090h)
  6449. Program: VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  6450.       permanent across mode switches
  6451. SeeAlso: AX=CA00h/BX=6570h
  6452. --------t-16E0E0-----------------------------
  6453. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  6454.     AX = E0E0h
  6455. Return: AX = 1F1Fh if installed
  6456.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  6457. Note:    the returned TSR list provides support for communication among TSRs
  6458.       built with TurboPower's Turbo Professional and Object Professional
  6459.       libraries for Turbo Pascal
  6460. SeeAlso: AX=F0F0h
  6461. --------U-16ED--BHED-------------------------
  6462. INT 16 - BORLAND TURBO LIGHTNING - API
  6463.     AH = EDh
  6464.     BH = EDh
  6465.     BL = function
  6466.         00h installation check
  6467.         Return: AX = 5205h
  6468.             CH = major version
  6469.             CL = minor version
  6470.         01h ???
  6471.         02h get resident CS
  6472.         Return: AX = code segment of resident portion
  6473.         03h get resident ???
  6474.         Return: AX = offset of some buffer in resident code seg
  6475.         04h ???
  6476.         05h set ???
  6477.         AL = 0 to 0Ch
  6478.         Return: AX = status
  6479.                 0000h if OK
  6480.                 0001h if out of range.
  6481.         06h ???
  6482.         07h ???
  6483.         08h ???
  6484.         AL = char???
  6485.         CX = ???
  6486.         DX = ???
  6487.         Return: AX = 0, 1 or 2
  6488.         09h ???
  6489.         0Ah ???
  6490.         CX = ???
  6491.         DX = ???
  6492.         Return: AX = ???
  6493.         0Bh ???
  6494.         DS:SI -> ???
  6495.         Return: AX = 0, 40h, 80h
  6496.         0Ch ???
  6497.         DS:SI -> ???
  6498.         Return: AH = 0
  6499.             AL = ???
  6500.         0Dh set ???
  6501.         (sets an internal flag)
  6502.         0Eh ???
  6503.         DS:SI -> ???
  6504.         Return: AX = 0, 1 or 2.
  6505.         0Fh ???
  6506.         10h ???
  6507. Notes:    AX in general returns an error code from most functions.
  6508. Index:    installation check;Turbo Lightning
  6509. --------b-16F0-------------------------------
  6510. INT 16 - Compaq 386 - SET CPU SPEED
  6511.     AH = F0h
  6512.     AL = speed
  6513.         00h equivalent to 6 MHz 80286 (COMMON)
  6514.         01h equivalent to 8 MHz 80286 (FAST)
  6515.         02h full 16 MHz (HIGH)
  6516.         03h toggles between 8 MHz-equivalent and speed set by system board
  6517.         switch (AUTO or HIGH)
  6518.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  6519.         09h specify speed directly
  6520.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  6521. SeeAlso: AH=F1h,AH=F3h
  6522. --------t-16F0F0-----------------------------
  6523. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  6524.     AX = F0F0h
  6525. Return: AX = 0F0Fh if installed
  6526.         ES:DI -> last data block in TSR list
  6527. Note:    the returned TSR list provides support for communication among TSRs
  6528.       built with TurboPower's Turbo Professional and Object Professional
  6529.       libraries for Turbo Pascal
  6530. SeeAlso: AX=E0E0h
  6531.  
  6532. Format of data block:
  6533. Offset    Size    Description
  6534.  00h    DWORD    pointer to program tag (counted ASCII string)
  6535.  04h    WORD    interface version number (0400h)
  6536.  06h    DWORD    pointer to command entry point
  6537.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  6538.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  6539. ---swappable TSRs only---
  6540.  12h    DWORD    pointer to swapping data
  6541.  16h    DWORD    pointer to user data
  6542.     more???
  6543. --------b-16F1-------------------------------
  6544. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  6545.     AH = F1h
  6546. Return:    AL = speed code (see AH=F0h)
  6547.          if AL = 09h, CX = speed code
  6548. SeeAlso: AH=F0h,AH=F3h
  6549. --------b-16F2-------------------------------
  6550. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  6551.     AH = F2h
  6552. Return: AL = type
  6553.         00h if 11-bit AT keyboard is in use
  6554.         01h if 9-bit PC keyboard is in use 
  6555. --------b-16F3-------------------------------
  6556. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  6557.     AH = F3h
  6558.     AL = 00h limit is 6 Mhz
  6559.        = 01h limit is 8 Mhz/6 Mhz
  6560. SeeAlso: AH=F0h,AH=F1h
  6561. --------U-16F398-----------------------------
  6562. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  6563.     AX = F398h
  6564. Return: AX = 6A73h ("js")
  6565.     BH = scan code of current hot key
  6566.     BL = ASCII code of current hot key
  6567. Note:    NG.EXE was written by John Socha
  6568. --------b-16F400-----------------------------
  6569. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  6570.     AX = F400h
  6571. Return: AH = E2h
  6572.     AL = status
  6573.         00h not present
  6574.         01h enabled
  6575.         02h disabled
  6576. SeeAlso: AX=F401h,AX=F402h
  6577. --------b-16F401-----------------------------
  6578. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  6579.     AX = F401h
  6580. Return: AX = E201h
  6581. SeeAlso: AX=F400h,AX=F402h
  6582. --------b-16F402-----------------------------
  6583. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  6584.     AX = F402h
  6585. Return: AX = E202h
  6586. SeeAlso: AX=F400h,AX=F401h
  6587. --------v-16FA00DX5945-----------------------
  6588. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK???
  6589.     AX = FA00h
  6590.     DX = 5945h
  6591. Return: CF clear
  6592.     DI = 4559h
  6593.     BX = ??? (2F00h or FFFFh) (VSAFE only)
  6594. SeeAlso: INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  6595. --------v-16FA01DX5945-----------------------
  6596. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  6597.     AX = FA01h
  6598.     DX = 5945h
  6599. Return: CF clear if successful
  6600.     DI = 4559h
  6601. SeeAlso: AX=FA00h
  6602. --------v-16FA02DX5945-----------------------
  6603. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  6604.     AX = FA02h
  6605.     DX = 5945h
  6606.     BL = ???
  6607. Return: CF clear
  6608.     DI = 4559h
  6609.     CL = old value of ???
  6610. --------v-16FA03DX5945-----------------------
  6611. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  6612.     AX = FA03h
  6613.     DX = 5945h
  6614. Return: CF clear
  6615.     DI = 4559h
  6616.     AX = 0002h
  6617. --------v-16FA04DX5945-----------------------
  6618. INT 16 U - PC Tools v8+ VSAFE - GET ???
  6619.     AX = FA04h
  6620.     DX = 5945h
  6621. Return: CF clear
  6622.     DI = 4559h
  6623.     BL = ???
  6624. Note:    this function is a NOP under VWATCH
  6625. SeeAlso: AX=FA05h
  6626. --------v-16FA05DX5945-----------------------
  6627. INT 16 U - PC Tools v8+ VSAFE - SET ???
  6628.     AX = FA05h
  6629.     DX = 5945h
  6630.     BL = ???
  6631. Return: CF clear
  6632.     DI = 4559h
  6633. Note:    this function is a NOP under VWATCH
  6634. SeeAlso: AX=FA04h
  6635. --------v-16FA06DX5945-----------------------
  6636. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  6637.     AX = FA06h
  6638.     DX = 5945h
  6639. Return: CF clear
  6640.     DI = 4559h
  6641.     BL = ???
  6642. SeeAlso: AX=FA07h
  6643. --------v-16FA07DX5945-----------------------
  6644. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET ???
  6645.     AX = FA07h
  6646.     DX = 5945h
  6647.     BL = ???
  6648. Return: CF clear
  6649.     DI = 4559h
  6650. SeeAlso: AX=FA00h,AX=FA06h
  6651. --------U-16FE55-----------------------------
  6652. INT 16 U - PC Tools v8+ DATAMON, DRIVEMAP, CPSCHED, CPTASK - ???
  6653.     AX = FE55h
  6654.     CX = ???
  6655.     DX = ???
  6656.     ???
  6657. Return: DX:AX -> ???
  6658. --------U-16FEA4-----------------------------
  6659. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  6660.     AX = FEA4h
  6661.     ???
  6662. Return: ???
  6663. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  6664.       code in DESKTOP
  6665. SeeAlso: AX=FFA4h
  6666. --------U-16FEC6-----------------------------
  6667. INT 16 U - PC Tools v7+ CPSCHED - ???
  6668.     AX = FEC6h
  6669.     DL = ???
  6670.     ???
  6671. Return: ???
  6672. --------U-16FED3-----------------------------
  6673. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  6674.     AX = FED3h
  6675.     DS:SI -> 92-byte data record for ???
  6676. Return: ???
  6677. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  6678.       code in DESKTOP
  6679. SeeAlso: AX=FFD3h
  6680. --------U-16FEDC-----------------------------
  6681. INT 16 U - PC Tools v7+ CPSCHED - ???
  6682.     AX = FEDCh
  6683.     ???
  6684. Return: ???
  6685. --------U-16FEEFCX0000-----------------------
  6686. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  6687.     AX = FEEFh
  6688.     CX = 0000h
  6689. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  6690.         BX = segment of resident portion
  6691. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  6692.       code in DESKTOP
  6693. SeeAlso: AX=FFEFh
  6694. --------U-16FEF1-----------------------------
  6695. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  6696.     AX = FEF1h
  6697.     BX = ???
  6698. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  6699.     DX = 5555h
  6700. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  6701.       code in DESKTOP
  6702. SeeAlso: AX=FFF1h
  6703. --------K-16FF-------------------------------
  6704. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  6705.     AH = FFh
  6706.     DX = scan code
  6707. Return: AL = status
  6708.         00h success
  6709.         01h failure
  6710. Program: KBUF is a keyboard buffer expander by Mark Adler
  6711. SeeAlso: AH=05h
  6712. --------V-16FF-------------------------------
  6713. INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
  6714.     AH = FFh
  6715. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  6716.     AL+1 = Zoom interrupt number
  6717.     BX = hotkey
  6718. Note:    The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  6719.       the default hot key is F10
  6720. SeeAlso: INT 60"OPTIMA"
  6721. --------d-16FF70-----------------------------
  6722. INT 16 U - PC Tools v8+ DRIVEMAP - API???
  6723.     AX = FF70h
  6724.     BX = function (0000h-0002h)
  6725.     ???
  6726. Return: ???
  6727. BUG:    this call will branch to random locations on BX=0003h-5CD6h under v8.0
  6728.       due to range-testing the wrong register
  6729. SeeAlso: INT 2F/AH=92h"DRIVEMAP"
  6730. --------T-16FF80-----------------------------
  6731. INT 16 U - PC Tools v8+ CPTASK - API
  6732.     AX = FF80h
  6733.     BX = function (0000h-0009h or 4350h ['CP'])
  6734.     ???
  6735. Return: ???
  6736. --------U-16FF90-----------------------------
  6737. INT 16 U - PC Tools v8+ DESKTOP - ???
  6738.     AX = FF90h
  6739.     ???
  6740. Return: ???
  6741. Note:    available only when popped up
  6742. --------U-16FF91-----------------------------
  6743. INT 16 U - PC Tools v7+ DESKTOP - ???
  6744.     AX = FF91h
  6745.     ???
  6746. Return: AX = 0000h
  6747. Note:    calls AX=FFFDh after ???
  6748. SeeAlso: AX=FF92h,AX=FFFDh
  6749. --------U-16FF92-----------------------------
  6750. INT 16 U - PC Tools v7+ DESKTOP - ???
  6751.     AX = FF92h
  6752.     ???
  6753. Return: AX = 0000h
  6754. Note:    like AX=FF91h, but temporarily sets ??? to 3
  6755. SeeAlso: AX=FF91h,AX=FF92h
  6756. --------U-16FF93-----------------------------
  6757. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  6758.     AX = FF93h
  6759. --------U-16FF94-----------------------------
  6760. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  6761.     AX = FF94h
  6762.     CX = ??? (default 0017h)
  6763. --------U-16FF95-----------------------------
  6764. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  6765.     AX = FF95h
  6766.     BX = ???
  6767. --------U-16FF96-----------------------------
  6768. INT 16 U - PC Tools v7+ DESKTOP - ???
  6769.     AX = FF96h
  6770.     CL = ???
  6771. Return: AX = ???
  6772. --------U-16FF97-----------------------------
  6773. INT 16 U - PC Tools v7+ DESKTOP - ???
  6774.     AX = FF97h
  6775.     DS:DX -> buffer for ??? (see below)
  6776. Return: ???
  6777.  
  6778. Format of buffer:
  6779. Offset    Size    Description
  6780.  00h 48 BYTEs    ???
  6781.  30h 128 BYTEs    ???
  6782. --------U-16FF98-----------------------------
  6783. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  6784.     AX = FF98h
  6785.     DX = byte offset in file of overlay header
  6786. Return: BX = file handle for DESK.OVL file
  6787. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  6788.       overlay header, and seek to the offset specified by the header
  6789.  
  6790. Format of overlay header:
  6791. Offset    Size    Description
  6792.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  6793.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  6794. --------U-16FF99-----------------------------
  6795. INT 16 U - PC Tools v7+ DESKTOP - ???
  6796.     AX = FF99h
  6797.     ???
  6798. Return: ???
  6799. --------U-16FF9A-----------------------------
  6800. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  6801.     AX = FF9Ah
  6802. Return: ES:BX -> name of current color scheme
  6803. Note:    available even if not popped up
  6804. --------U-16FF9B-----------------------------
  6805. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  6806.     AX = FF9Bh
  6807. Return: ???
  6808. Note:    sounds triple-length beep
  6809. --------T-16FF9C-----------------------------
  6810. INT 16 U - PC Tools v8+ CPTASK - ???
  6811.     AX = FF9Ch
  6812.     BL = ??? (00h,01h)
  6813.     ???
  6814. Return: ???
  6815. Note:    sounds triple-length beep
  6816. ----------16FF9D-----------------------------
  6817. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  6818.     AX = FF9Dh
  6819.     ES:BX -> ??? word
  6820. Return: ???
  6821. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  6822.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  6823.       flag is always cleared if ES=0000h.
  6824. --------U-16FF9E-----------------------------
  6825. INT 16 U - PC Tools v7+ DESKTOP - ???
  6826.     AX = FF9Eh
  6827.     DL = ???
  6828.         bit 7: ???
  6829.         bits 6-0: function number??? (00h,01h,other)
  6830.     ???
  6831. Return: ???
  6832. --------U-16FFA1-----------------------------
  6833. INT 16 U - PC Tools v7+ DESKTOP - ???
  6834.     AX = FFA1h
  6835.     ???
  6836. Return: ???
  6837. Note:    same as AX=FFA2h, except ??? set to FFh
  6838. SeeAlso: AX=FFA2h
  6839. --------U-16FFA2-----------------------------
  6840. INT 16 U - PC Tools v7+ DESKTOP - ???
  6841.     AX = FFA2h
  6842.     ???
  6843. Return: ???
  6844. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  6845. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  6846. --------y-16FFA3BX0000-----------------------
  6847. INT 16 U - PC Tools v7+ DATAMON - INSTALLATION CHECK
  6848.     AX = FFA3h
  6849.     BX = 0000h
  6850.     CX = 0000h
  6851. Return: AX = segment of resident code
  6852.     BX = 5555h
  6853.     CX = 5555h
  6854. --------y-16FFA3BX0001-----------------------
  6855. INT 16 U - PC Tools v7+ DATAMON - GET ???
  6856.     AX = FFA3h
  6857.     BX = 0001h
  6858.     CX = 0001h
  6859. Return: AX:BX -> ???
  6860.     CX = BX
  6861. --------y-16FFA3BX0002-----------------------
  6862. INT 16 U - PC Tools v7+ DATAMON - GET ???
  6863.     AX = FFA3h
  6864.     BX = 0002h
  6865.     CX = 0002h
  6866. Return: AX = ??? (0 or 1)
  6867.     CX = BX = AX
  6868. --------y-16FFA3BX0003-----------------------
  6869. INT 16 U - PC Tools v7+ DATAMON - GET ???
  6870.     AX = FFA3h
  6871.     BX = 0003h
  6872.     CX = 0003h
  6873. Return: AX = ??? (0 or 1)
  6874.     CX = BX = AX
  6875. --------y-16FFA3BX0004-----------------------
  6876. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  6877.     AX = FFA3h
  6878.     BX = 0004h
  6879.     CX = 0004h
  6880. SeeAlso: AX=FFA3h/BX=0005h
  6881. --------y-16FFA3BX0005-----------------------
  6882. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  6883.     AX = FFA3h
  6884.     BX = 0005h
  6885.     CX = 0005h
  6886. SeeAlso: AX=FFA3h/BX=0004h
  6887. --------y-16FFA3BX0006-----------------------
  6888. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  6889.     AX = FFA3h
  6890.     BX = 0006h
  6891.     CX = 0006h
  6892.     DX = current PSP segment as known to DOS??? or 0000h
  6893. --------U-16FFA4-----------------------------
  6894. INT 16 U - PC Tools v7+ DESKTOP - ???
  6895.     AX = FFA4h
  6896. Return: ???
  6897. Notes:    available even when not popped up
  6898.     sets unknown flag if ??? conditions met
  6899. SeeAlso: AX=FEA4h
  6900. --------c-16FFA5CX1111-----------------------
  6901. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  6902.     AX = FFA5h
  6903.     CX = 1111h
  6904. Return: CH = 00h if installed
  6905.         ES:DI -> internal data (see below)
  6906.         CL = cache state
  6907.         01h enabled
  6908.         02h disabled
  6909. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  6910.  
  6911. Format of internal data:
  6912. Offset    Size    Description
  6913. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  6914.         each byte is either blank (20h) or drive letter (41h-54h)
  6915.  -8    BYTE    ???
  6916.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  6917.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  6918.  -3   3 BYTEs    ???
  6919. --------c-16FFA5CXAAAA-----------------------
  6920. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  6921.     AX = FFA5h
  6922.     CX = AAAAh
  6923. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  6924. SeeAlso: AX=FFA5h/CX=CCCCh
  6925. --------c-16FFA5CXCCCC-----------------------
  6926. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  6927.     AX = FFA5h
  6928.     CX = CCCCh
  6929. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  6930. Note:    delayed writes are automatically disabled on EXECing
  6931.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  6932.       however, delayed writes are not automatically reenabled upon the
  6933.       program's termination in v6.
  6934. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  6935. --------c-16FFA5CXDDDD-----------------------
  6936. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  6937.     AX = FFA5h
  6938.     CX = DDDDh
  6939. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  6940. --------c-16FFA5CXEEEE-----------------------
  6941. INT 16 - PC-Cache v6+ - ENABLE CACHE
  6942.     AX = FFA5h
  6943.     CX = EEEEh
  6944. SeeAlso: AX=FFA5h/CX=DDDDh
  6945. --------c-16FFA5CXFFFF-----------------------
  6946. INT 16 - PC-Cache v6+ - FLUSH CACHE
  6947.     AX = FFA5h
  6948.     CX = FFFFh
  6949. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  6950. --------U-16FFA6-----------------------------
  6951. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  6952.     AX = FFA6h
  6953. Return: DS:SI -> ???
  6954. Note:    available only when popped up
  6955. --------U-16FFA7-----------------------------
  6956. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  6957.     AX = FFA7h
  6958. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  6959. --------U-16FFA8-----------------------------
  6960. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  6961.     AX = FFA8h
  6962.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  6963.     ???
  6964. Return: ???
  6965. Notes:    available only when popped up
  6966.     strings copied into internal buffer, among other actions
  6967. --------U-16FFA9-----------------------------
  6968. INT 16 U - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  6969.     AX = FFA9h
  6970. Return: DS:SI -> version string
  6971. --------U-16FFAA-----------------------------
  6972. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  6973.     AX = FFAAh
  6974.     ???
  6975. Return: ???
  6976. Note:    available only when popped up
  6977. --------U-16FFAB-----------------------------
  6978. INT 16 U - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  6979.     AX = FFABh
  6980. Return: DS:SI -> editor setting strings???
  6981. --------U-16FFAC-----------------------------
  6982. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  6983.     AX = FFACh
  6984.     DL = ???
  6985. Note:    available only when popped up
  6986. --------U-16FFAD-----------------------------
  6987. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  6988.     AX = FFADh
  6989.     DL = ???
  6990. --------U-16FFAE-----------------------------
  6991. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  6992.     AX = FFAEh
  6993. Return: AL = ???
  6994. --------U-16FFAF-----------------------------
  6995. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  6996.     AX = FFAFh
  6997.     DL = ???
  6998. --------U-16FFB0-----------------------------
  6999. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  7000.     AX = FFB0h
  7001.     BL = ???
  7002. --------U-16FFB1-----------------------------
  7003. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  7004.     AX = FFB1h
  7005.     ???
  7006. Return: ???
  7007. --------U-16FFB2-----------------------------
  7008. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  7009.     AX = FFB2h
  7010. Return: DS:SI -> ???
  7011. --------U-16FFB3-----------------------------
  7012. INT 16 U - PC Tools v5.5+ DESKTOP API - ???
  7013.     AX = FFB3h
  7014.     ???
  7015. Return: ???
  7016. Note:    available only when popped up
  7017. --------U-16FFB4-----------------------------
  7018. INT 16 U - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  7019.     AX = FFB4h
  7020. Note:    available only when popped up
  7021. SeeAlso: AX=FFBBh
  7022. --------U-16FFB5-----------------------------
  7023. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  7024.     AX = FFB5h
  7025.     BX = window specifier (000Fh to 0019h) (see below)
  7026.     DX = 0000h get, nonzero = set
  7027.     ES:DI -> window parameter buffer (see below)
  7028. SeeAlso: AX=FFCBh
  7029.  
  7030. Values for window specifier:
  7031.  000Fh    comm/FAX
  7032.  0014h    hotkey selection
  7033.  0015h    ASCII table
  7034.  0016h    system colors menu
  7035.  
  7036. Format of window parameters:
  7037. Offset    Size    Description
  7038.  00h    BYTE    rows in window, not counting frame
  7039.  01h    BYTE    columns in window, not counting frame
  7040.  02h    BYTE    row number of top of window
  7041.  03h    BYTE    2*column number of left of window
  7042.  04h    BYTE    character attribute for ???
  7043.  05h    BYTE    character attribute for background/border
  7044.  06h    BYTE    character attribute for ???
  7045.  07h    DWORD    pointer to ??? on screen
  7046.  0Bh  4 BYTEs    ???
  7047.  0Fh    BYTE    nonzero if window may be resized
  7048. Note:    if running in monochrome mode, character attributes at offsets 04h to
  7049.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  7050.       are changed to 07h on reading
  7051. --------U-16FFB6-----------------------------
  7052. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  7053.     AX = FFB6h
  7054. Return: AH = ???
  7055.     AL = ???
  7056. --------U-16FFB7-----------------------------
  7057. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET ???
  7058.     AX = FFB7h
  7059.     BX = direction
  7060.         0000h copy to buffer
  7061.         else  copy from buffer
  7062.     DS:SI -> 70-byte buffer with ???
  7063. Return: data copied
  7064. Note:    available only when popped up under v6.0+
  7065. --------U-16FFB8-----------------------------
  7066. INT 16 U - PC Tools v5.1+ DESKTOP API - GET/SET???
  7067.     AX = FFB8h
  7068.     BH = subfunction
  7069.         00h get
  7070.         Return: BL = old value of ???
  7071.             CL = old value of ??? (v6.0+)
  7072.             CH = old value of ??? (v6.0+)
  7073.         nonzero set
  7074.         BL = new value for ???
  7075.         CL = new value for ??? (v6.0+)
  7076.         CH = new value for ??? (v6.0+)
  7077.         DH = ???
  7078.         Return: AL = old value replaced by CL (v6.0+)
  7079.             AH = old value replaced by CH (v6.0+)
  7080. --------U-16FFB9-----------------------------
  7081. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7082.     AX = FFB9h
  7083.     ???
  7084. Return: AX = ???
  7085.     CX = ???
  7086.     DS:SI -> ???
  7087.     ES:DI -> ???
  7088. --------U-16FFBA-----------------------------
  7089. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7090.     AX = FFBAh
  7091.     ???
  7092. Return: AX = ???
  7093. Note:    available only when popped up
  7094. --------U-16FFBB-----------------------------
  7095. INT 16 U - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  7096.     AX = FFBBh
  7097. Note:    available only when popped up
  7098. SeeAlso: AX=FFB4h
  7099. --------U-16FFBC-----------------------------
  7100. INT 16 U - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  7101.     AX = FFBCh
  7102. --------U-16FFBD-----------------------------
  7103. INT 16 U - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  7104.     AX = FFBDh
  7105.     ???
  7106. Return: ???
  7107. --------U-16FFBE-----------------------------
  7108. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7109.     AX = FFBEh
  7110.     ???
  7111. Return: ???
  7112. Note:    available only when popped up
  7113. --------U-16FFBF-----------------------------
  7114. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7115.     AX = FFBFh
  7116.     BX = DOS file handle to write on
  7117.     ???
  7118. Return: ???
  7119. Note:    available only when popped up
  7120. --------U-16FFC0-----------------------------
  7121. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7122.     AX = FFC0h
  7123.     ???
  7124. Return: AX = 0000h if successful
  7125.     AX = FFFFh on error
  7126. Note:    available only when popped up
  7127. --------U-16FFC1-----------------------------
  7128. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7129.     AX = FFC1h
  7130.     BL = ???
  7131.     ES:DI -> data structure (see below)
  7132.     ???
  7133. Return: AX = ???
  7134. Note:    available only when popped up
  7135. SeeAlso: AX=FFC2h,AX=FFC3h
  7136.  
  7137. Format of data structure:
  7138. Offset    Size    Description
  7139.  00h    WORD    ???
  7140.  02h    WORD    ???
  7141.  04h    WORD    ???
  7142.  06h    WORD    ???
  7143.  08h    WORD    ???
  7144.  0Ah    BYTE    ???
  7145.  0Bh    BYTE    ??? (zero/nonzero)
  7146. ---v7.1---
  7147.  0Ch    WORD    ???
  7148.  0Eh    BYTE    ???
  7149.  0Fh    WORD    ???
  7150.  11h    WORD    ???
  7151.     ???
  7152. --------U-16FFC2-----------------------------
  7153. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7154.     AX = FFC2h
  7155.     BL = ???
  7156.     ES:DI -> data structure (see AX=FFC1h)
  7157.     ???
  7158. Return: AH = ???
  7159.     CX = ???
  7160.     DH = ???
  7161.     DL = ???
  7162. Note:    available only when popped up
  7163. SeeAlso: AX=FFC1h,AX=FFC3h
  7164. --------U-16FFC3-----------------------------
  7165. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7166.     AX = FFC3h
  7167.     BL = ???
  7168.     ES:DI -> data structure (see AX=FFC1h)
  7169.     ???
  7170. Return: AH = ???
  7171.     CX = ???
  7172.     DH = ???
  7173.     DL = ???
  7174. Note:    available only when popped up
  7175. SeeAlso: AX=FFC1h,AX=FFC2h
  7176. --------U-16FFC4-----------------------------
  7177. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  7178.     AX = FFC4h
  7179. Return: AL = ???
  7180.     BX = segment of scratch space???
  7181.     CX = segment of stored screen data (section covered by window???)
  7182.     DX = segment of window parameters for ???
  7183.     ES:BP -> ???
  7184. Note:    available only when popped up in versions prior to 6.0
  7185. --------U-16FFC5-----------------------------
  7186. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  7187.     AX = FFC5h
  7188. Return: BL = nonzero if loaded resident
  7189.        = 00h if nonresident
  7190. Note:    available only when popped up; should call AX=FFEFh first to ensure
  7191.       that DESKTOP is active
  7192. SeeAlso: AX=FFEFh,AX=FFF3h
  7193. --------U-16FFC6-----------------------------
  7194. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  7195.     AX = FFC6h
  7196.     BL = new value for ???
  7197. --------U-16FFC7-----------------------------
  7198. INT 16 U - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  7199.     AX = FFC7h
  7200.     ???
  7201. Return: ???
  7202. --------U-16FFC8-----------------------------
  7203. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  7204.     AX = FFC8h
  7205. Return: DS:SI -> ???
  7206. Note:    valid only while popped up
  7207. --------U-16FFC9-----------------------------
  7208. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  7209.     AX = FFC9h
  7210.     DS:SI -> characters to store in clipboard
  7211.     CX = size in bytes
  7212. Return: CF set on error
  7213. Notes:    available only when popped up
  7214.     while copying, bytes of 00h and 0Ah are skipped
  7215. --------U-16FFCA-----------------------------
  7216. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  7217.     AX = FFCAh
  7218.     DX = ???
  7219. Return: AX destroyed
  7220. Note:    available only when popped up
  7221. --------U-16FFCB-----------------------------
  7222. INT 16 U - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  7223.     AX = FFCBh
  7224.     DX = window specifier???
  7225. Return: AX destroyed
  7226. Note:    available only when popped up
  7227. SeeAlso: AX=FFB5h
  7228. --------U-16FFCC-----------------------------
  7229. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  7230.     AX = FFCCh
  7231.     DS:SI -> ASCIZ string
  7232. Return: AX = ???
  7233.     CX = ???
  7234.     ES:DI -> address past last character displayed (v5.1/5.5)
  7235.           -> ??? on menu bar (v6.0)
  7236. --------U-16FFCD-----------------------------
  7237. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7238.     AX = FFCDh
  7239.     DS:DX -> ???
  7240. Return: ???
  7241. Note:    available only when popped up
  7242. --------U-16FFCE-----------------------------
  7243. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  7244.     AX = FFCEh
  7245.     CX = ???
  7246. Return: nothing???
  7247. --------U-16FFCF-----------------------------
  7248. INT 16 U - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  7249.     AX = FFCFh
  7250. Note:    available only when popped up
  7251. --------U-16FFD0-----------------------------
  7252. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  7253.     AX = FFD0h
  7254.     ???
  7255. Return: ???
  7256. Note:    available only when popped up
  7257. --------U-16FFD1-----------------------------
  7258. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  7259.     AX = FFD1h
  7260. Return: BX = number of copies
  7261.     DX = destination
  7262.         00h cancel
  7263.         01h LPT1
  7264.         02h LPT2
  7265.         03h    LPT3
  7266.         04h    COM1
  7267.         05h    COM2
  7268.         06h disk file
  7269. Note:    available only when popped up
  7270. --------U-16FFD2-----------------------------
  7271. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7272.     AX = FFD2h
  7273.     BX = ???
  7274. Return: BL = ???
  7275. Note:    available only when popped up
  7276. --------U-16FFD3-----------------------------
  7277. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7278.     AX = FFD3h
  7279.     DS:SI -> 92-byte data record for ???
  7280. Return: ???
  7281. SeeAlso: AX=FED3h
  7282. --------U-16FFD4BH3C-------------------------
  7283. INT 16 U - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  7284.     AX = FFD4h
  7285.     BH = 3Ch create file (with no attributes)
  7286.          3Dh open file
  7287.          41h delete file
  7288.     BL = access mode
  7289.          00h read only
  7290.          01h write only
  7291.          02h read/write
  7292.     DS:SI -> ASCIZ filename
  7293. Return: BX = file handle
  7294.         0000h on error
  7295. Note:    operation is attempted in (in order) the directory from which the
  7296.       desktop was started/run???, the directory specified with the
  7297.       filename, X:\PCTOOLS\, and X:\
  7298. --------U-16FFD5-----------------------------
  7299. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7300.     AX = FFD5h
  7301.     ???
  7302. Return: ???
  7303. Note:    available only when popped up
  7304. --------U-16FFD6-----------------------------
  7305. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7306.     AX = FFD6h
  7307.     BX = ???
  7308.     CX = ???
  7309.     DX = offset in ???
  7310.     ???
  7311. Return: ???
  7312. Note:    available only when popped up
  7313. --------U-16FFD7-----------------------------
  7314. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7315.     AX = FFD7h
  7316.     ???
  7317. Return: BL = ???
  7318. Note:    available only when popped up
  7319. --------U-16FFD8-----------------------------
  7320. INT 16 U - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  7321.     AX = FFD8h
  7322.     DS:BX -> ASCIZ filename
  7323. Return: BX = file handle
  7324.         0000h on error
  7325. Note:    pops up confirmation menu if file already exists
  7326.     only available when popped up???
  7327. --------U-16FFD9-----------------------------
  7328. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  7329.     AX = FFD9h
  7330. Return: AX = ???
  7331. Note:    available only when popped up
  7332. --------U-16FFDA-----------------------------
  7333. INT 16 U - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  7334.     AX = FFDAh
  7335.     DS:SI -> ??? (v5.1/5.5 only)
  7336. Return: DS:SI -> filename
  7337. --------U-16FFDB-----------------------------
  7338. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  7339.     AX = FFDBh
  7340.     BL = ???
  7341. Note:    available only when popped up
  7342. --------U-16FFDC-----------------------------
  7343. INT 16 U - PC Tools v5.1+ DESKTOP API - UNHOOK
  7344.     AX = FFDCh
  7345. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  7346.       original values
  7347. --------U-16FFDDBX0000-----------------------
  7348. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  7349.     AX = FFDDh
  7350.     BX = 0000h
  7351. Return: CX = 5555h 
  7352.     DX = 5555h if PCShell installed in resident mode
  7353. --------U-16FFDDBX0001-----------------------
  7354. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  7355.     AX = FFDDh
  7356.     BX = 0001h
  7357. Return: CF clear if request successful (PCShell will pop up)
  7358.     CF set on error
  7359. SeeAlso: AX=FFDDh/BX=0003h
  7360. --------U-16FFDDBX0002-----------------------
  7361. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  7362.     AX = FFDDh
  7363.     BX = 0002h
  7364. Return: AL = 
  7365.         00h ???
  7366.         01h ???
  7367. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  7368.       awaits a keystroke, and aborts the current process
  7369. --------U-16FFDDBX0003-----------------------
  7370. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  7371.     AX = FFDDh
  7372.     BX = 0003h
  7373. SeeAlso: AX=FFDDh/BX=0001h
  7374. --------U-16FFDDBX0004-----------------------
  7375. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  7376.     AX = FFDDh
  7377.     BX = 0004h
  7378. Return: CF clear if successful
  7379.         DS:SI -> ???
  7380. --------U-16FFDDBX0005-----------------------
  7381. INT 16 U - PC Tools v5.1+ PCShell API - ???
  7382.     AX = FFDDh
  7383.     BX = 0005h
  7384.     ???
  7385. Return: ???
  7386. Note:    resets various variables if certain conditions are met
  7387. --------U-16FFDDBX0006-----------------------
  7388. INT 16 U - PC Tools v5.1+ PCShell API - ???
  7389.     AX = FFDDh
  7390.     BX = 0006h
  7391.     ???
  7392. Return: ???
  7393. Note:    resets various variables if certain conditions are met
  7394. --------U-16FFDDBX0007-----------------------
  7395. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  7396.     AX = FFDDh
  7397.     BX = 0007h
  7398. Return: CF clear if successful
  7399. SeeAlso: AX=FFDDh/BX=0008h
  7400. --------U-16FFDDBX0008-----------------------
  7401. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  7402.     AX = FFDDh
  7403.     BX = 0008h
  7404. Return: CF undefined
  7405. SeeAlso: AX=FFDDh/BX=0007h
  7406. --------U-16FFDDBX0009-----------------------
  7407. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  7408.     AX = FFDDh
  7409.     BX = 0009h
  7410. Return: CF clear if successful
  7411.         DS:SI -> list of pointers (see below)
  7412.  
  7413. Format of returned pointer list:
  7414. Offset    Size    Description
  7415.  00h    WORD    offset of WORD containing ???
  7416.  02h    WORD    offset of name of program to execute
  7417.  04h    WORD    offset of 80-byte buffer for ???
  7418.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  7419.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  7420. --------U-16FFDDBX000A-----------------------
  7421. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  7422.     AX = FFDDh
  7423.     BX = 000Ah
  7424. Return: CX = 5555h if running
  7425.     DX = 5555h
  7426. Note:    also sets a flag
  7427. --------U-16FFDDBX000B-----------------------
  7428. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  7429.     AX = FFDDh
  7430.     BX = 000Bh
  7431.     ???
  7432. Return: CX = 5555h if PCRUN active
  7433.     DX = 5555h
  7434. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  7435. --------U-16FFDE-----------------------------
  7436. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  7437.     AX = FFDEh
  7438.     DS:DX -> menu description (must be on a paragraph boundary)
  7439. Return: AX = ???
  7440.         AL seems to be the number of the selected button
  7441. Note:    available only when popped up
  7442. SeeAlso: AX=FFEEh
  7443. --------U-16FFDF-----------------------------
  7444. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7445.     AX = FFDFh
  7446.     ???
  7447. Return: ???
  7448. --------U-16FFE0-----------------------------
  7449. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7450.     AX = FFE0h
  7451.     CX = ???
  7452.     DX = ???
  7453. Note:    available only when popped up
  7454. --------U-16FFE1-----------------------------
  7455. INT 16 U - PC Tools v5.1+ DESKTOP API - BEEP
  7456.     AX = FFE1h
  7457. --------U-16FFE2-----------------------------
  7458. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7459.     AX = FFE2h
  7460.     DX = ???
  7461. Return: ???
  7462. Note:    available only when popped up
  7463. --------U-16FFE3-----------------------------
  7464. INT 16 U - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  7465.     AX = FFE3h
  7466.     BL = character to print to currently open printer or print file
  7467. Return: CF set on error
  7468. Note:    available only when popped up
  7469. SeeAlso: INT 17/AH=00h
  7470. --------U-16FFE4-----------------------------
  7471. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7472.     AX = FFE4h
  7473.     DX = segment of ???
  7474. Return: ???
  7475. Note:    available only when popped up
  7476. --------U-16FFE5-----------------------------
  7477. INT 16 U - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  7478.     AX = FFE5h
  7479.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  7480.     DX = segment of window parameters???
  7481. Return: AX = DOS file handle for file
  7482.         DS:DX -> filename???
  7483.        = FFFFh if cancelled by user
  7484. Note:    available only when popped up
  7485. SeeAlso: AX=FFDAh
  7486. --------U-16FFE6-----------------------------
  7487. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  7488.     AX = FFE6h
  7489. Return: AX = 0000h if no key available
  7490.          else  BIOS keycode
  7491. Notes:    available only when popped up
  7492.     invokes INT 28 idle interrupt before checking for key
  7493. --------U-16FFE7-----------------------------
  7494. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7495.     AX = FFE7h
  7496.     BX = segment of ???
  7497. Return: ???
  7498. Note:    available only when popped up
  7499. --------U-16FFE8-----------------------------
  7500. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  7501.     AX = FFE8h
  7502.     CX = number
  7503.     DH = attribute
  7504.     DS:SI -> destination for ASCII number
  7505. Return: DS:SI buffer filled in with alternating characters and attributes
  7506. --------U-16FFE9-----------------------------
  7507. INT 16 U - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  7508.     AX = FFE9h
  7509. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  7510. Note:    available only when popped up
  7511. --------U-16FFEA-----------------------------
  7512. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  7513.     AX = FFEAh
  7514.     DS:SI -> counted string (count byte followed by string)
  7515. Return: ???
  7516. Note:    available only when popped up
  7517. --------U-16FFEB-----------------------------
  7518. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7519.     AX = FFEBh
  7520.     ???
  7521. Return: ???
  7522. --------U-16FFEC-----------------------------
  7523. INT 16 U - PC Tools v5.1+ DESKTOP API - GET KEY
  7524.     AX = FFECh
  7525.     DS:SI -> FAR routine to ???
  7526.     BX = ???
  7527.     ???
  7528. Return: AX = keystroke
  7529.         FFFFh if F10 pressed to go to menu
  7530. Notes:    available only when popped up
  7531.     invokes INT 28 while waiting for keystroke
  7532.     F10 is hotkey to Desktop menu
  7533. --------U-16FFED-----------------------------
  7534. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  7535.     AX = FFEDh
  7536. Return: AX = ???
  7537. Note:    available only when popped up
  7538. --------U-16FFEE-----------------------------
  7539. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  7540.     AX = FFEEh
  7541.     DS:SI -> pulldown menu system description (see below)
  7542. Return: AX destroyed
  7543. Notes:    available only when popped up
  7544.     if the accessory does not need any menu items of its own, it should
  7545.       call AX=FFFAh instead
  7546. SeeAlso: AX=FFF7h,AX=FFFAh
  7547.  
  7548. Format of pulldown menu system description:
  7549. Offset    Size    Description
  7550.  00h    WORD    offset of menu bar contents (counted string)
  7551.  02h    WORD    number of items on menu bar
  7552.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  7553.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  7554.  18h    WORD    offset of first menu definition (see below)
  7555.  1Ah    WORD    offset of second menu definition
  7556.     ...
  7557.  
  7558. Format of menu definition:
  7559. Offset    Size    Description
  7560.  00h    WORD    offset of menu contents (see below)
  7561.  02h    WORD    number of entries in menu
  7562.  04h    for each entry:
  7563.         Offset    Size    Description
  7564.          00h    BYTE    scancode of Alt-key to invoke entry
  7565.          01h    BYTE    character to highlight (01h=first, etc)
  7566.          02h    WORD    offset of FAR routine to handle selection
  7567.  
  7568. Format of menu contents:
  7569. Offset    Size    Description
  7570.  00h    BYTE    number of lines in menu
  7571.  01h    BYTE    width of menu
  7572.  02h  N BYTEs    counted strings, one for each line in menu
  7573. --------U-16FFEFCX0000-----------------------
  7574. INT 16 U - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  7575.     AX = FFEFh
  7576.     CX = 0000h
  7577. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  7578.         BX = segment of resident portion
  7579.         AX = ??? (v5.1/5.5 only)
  7580. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  7581. --------U-16FFF0-----------------------------
  7582. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  7583.     AX = FFF0h
  7584.     DX = ???
  7585. Return: AX destroyed
  7586. Note:    available only when popped up
  7587. --------U-16FFF1BX0000-----------------------
  7588. INT 16 U - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  7589.     AX = FFF1h
  7590.     BX = 0000h  leave ??? flag as is
  7591.         nonzero set ??? flag
  7592. Return: CX = 5555h if installed
  7593.     DX = 5555h
  7594. --------U-16FFF2-----------------------------
  7595. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  7596.     AX = FFF2h
  7597.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  7598.         or help text
  7599. Return: AX destroyed
  7600. Notes:    available only when popped up
  7601.     if the specified string does not start with '[', it is displayed
  7602.       centered on the bottom line, else the function key labels are shown
  7603. --------U-16FFF3-----------------------------
  7604. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  7605.     AX = FFF3h
  7606. Note:    releases any EMS being used; restores video mode, page, and cursor
  7607.       shape; and restores interrupt vectors
  7608. SeeAlso: AX=FFC5h,AX=FFEFh
  7609. --------U-16FFF4-----------------------------
  7610. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  7611.     AX = FFF4h
  7612.     ???
  7613. Return: ???
  7614. Note:    available only when popped up
  7615. SeeAlso: AX=FFF6h
  7616. --------U-16FFF5-----------------------------
  7617. INT 16 U - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  7618.     AX = FFF5h
  7619. Return: ES:BX -> screen attributes data structure (see below)
  7620.     AL = ??? (v6.0+)
  7621.  
  7622. Format of attribute data structure:
  7623. Offset    Size    Description
  7624.  -1    BYTE    attribute for desktop background
  7625.  00h    BYTE    attribute for normal characters on desktop menu
  7626.  01h    BYTE    attribute for highlighted characters on desktop menu
  7627.  02h  5    BYTEs    ???
  7628.  07h    BYTE    attribute for dialog boxes
  7629.  08h 15 BYTEs    ???
  7630.  17h    BYTE    attribute for message boxes
  7631. --------U-16FFF6-----------------------------
  7632. INT 16 U - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  7633.     AX = FFF6h
  7634.     DS = segment of editor buffer structure (see below)
  7635.     BX = ???
  7636.     DX = segment of window parameters structure (see AX=FFB5h)
  7637. Return: ???
  7638. Note:    available only when popped up
  7639. SeeAlso: AX=FFF4h
  7640.  
  7641. Format of editor buffer structure:
  7642. Offset    Size    Description
  7643.  00h    WORD    offset of current cursor position in buffer segment
  7644.  02h  2 BYTEs    ???
  7645.  04h    WORD    offset of beginning of file data in buffer segment
  7646.  06h 10 BYTEs    ???
  7647.  10h  N BYTEs    ASCIZ name of file being edited
  7648. --------U-16FFF7-----------------------------
  7649. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  7650.     AX = FFF7h
  7651.     DS:SI -> ???
  7652.     ???
  7653. Return: ???
  7654. Notes:    available only when popped up
  7655.     performs input processing on the menu bar set up with AX=FFEEh
  7656. SeeAlso: AX=FFEEh,AX=FFFBh
  7657. --------U-16FFF8-----------------------------
  7658. INT 16 U - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  7659.     AX = FFF8h
  7660.     DS:0000h -> window parameters structure (see AX=FFB5h)
  7661.     DS:BX -> DWORD to store address of ??? on screen
  7662. Return: ???
  7663. --------U-16FFF9-----------------------------
  7664. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  7665.     AX = FFF9h
  7666.     ES:BX -> FAR routine to redisplay the utility's window
  7667. Note:    available only when popped up
  7668. --------U-16FFFA-----------------------------
  7669. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  7670.     AX = FFFAh
  7671. Notes:    available only when popped up
  7672.     adds the "Window" option to the "Desktop" option which is the only one
  7673.       available when no accessories are active.  Unlike AX=FFEEh, no
  7674.       additional menu items are added between "Desktop" and "Window"
  7675. SeeAlso: AX=FFEEh,AX=FFFBh
  7676. --------U-16FFFB-----------------------------
  7677. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  7678.     AX = FFFBh
  7679. Return: ???
  7680. Notes:    available only when popped up
  7681.     performs input processing on the standard menu bar set up with AX=FFFAh
  7682. SeeAlso: AX=FFF7h
  7683. --------U-16FFFC-----------------------------
  7684. INT 16 U - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  7685.     AX = FFFCh
  7686. Return: ES:BX -> hotkey table (see below)
  7687.     DS:DX = original INT 9 vector
  7688.  
  7689. Format of hotkey table:
  7690. Offset    Size    Description
  7691.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  7692.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  7693.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  7694.  06h  2 BYTEs    scancode/shift state for screen autodial key
  7695. --------U-16FFFD-----------------------------
  7696. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY ???
  7697.     AX = FFFDh
  7698. Return: AX destroyed
  7699. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  7700. SeeAlso: AX=FF91h,AX=FF92h
  7701. --------M-16FFFE-----------------------------
  7702. INT 16 U - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  7703.     AX = FFFEh
  7704. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  7705. --------M-16FFFF-----------------------------
  7706. INT 16 U - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  7707.     AX = FFFFh
  7708. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  7709. --------P-17----DX0ABC-----------------------
  7710. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  7711.     DX = 0ABCh
  7712. Return: AX = AAAAh
  7713.     DX = BAAAh
  7714.     ES = code segment of resident portion
  7715. --------P-17----DX0B90-----------------------
  7716. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  7717.     DX = 0B90h
  7718. Return: DX = ABBBh
  7719.     ES = code segment of resident portion
  7720. --------P-17----DX0B91-----------------------
  7721. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  7722.     DX = 0B91h
  7723. Return: DX = ABCBh
  7724.     ES = code segment of resident portion
  7725. --------P-17----DX0F5F-----------------------
  7726. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  7727.     DX = 0F5Fh
  7728. Return: AX = AAAAh
  7729.     DX = F555h
  7730.     ES = code segment of resident portion
  7731. --------B-1700-------------------------------
  7732. INT 17 - PRINTER - WRITE CHARACTER
  7733.     AH = 00h
  7734.     AL = character to write
  7735.     DX = printer number (00h-02h)
  7736. Return: AH = printer status (see below)
  7737. SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  7738.  
  7739. Bitfields for printer status:
  7740.  bit 7    not busy
  7741.  bit 6    acknowledge
  7742.  bit 5    out of paper
  7743.  bit 4    selected
  7744.  bit 3    I/O error
  7745.  bits 2,1 unused
  7746.  bit 0    timeout
  7747. --------B-1701-------------------------------
  7748. INT 17 - PRINTER - INITIALIZE PORT
  7749.     AH = 01h
  7750.     DX = printer number (00h-02h)
  7751. Return: AH = printer status (see AH=00h)
  7752. SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
  7753. --------B-1702-------------------------------
  7754. INT 17 - PRINTER - GET STATUS
  7755.     AH = 02h
  7756.     DX = printer number (00h-02h)
  7757. Return: AH = printer status (see AH=00h)
  7758. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  7759. --------P-1702--DX0000-----------------------
  7760. INT 17 - INSET - INSTALLATION CHECK
  7761.     AH = 02h
  7762.     DX = 0000h
  7763.     CX = 07C3h (1987d)
  7764. Return: CX = 07C2h (1986d) if installed
  7765. Program: INSET is a text/graphics integration program
  7766. --------P-1703-------------------------------
  7767. INT 17 U - Emulaser ELTSR - ???
  7768.     AH = 03h
  7769.     ???
  7770. Return: ???
  7771. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  7772.       Vertisoft Systems, Inc.
  7773. SeeAlso: AH=04h,AH=0Eh,INT 1A/AH=E5h
  7774. --------P-1704-------------------------------
  7775. INT 17 U - Emulaser ELTSR - ???
  7776.     AH = 04h
  7777.     ???
  7778. Return: ???
  7779. SeeAlso: AH=03h,INT 1A/AH=E5h
  7780. --------P-1705-------------------------------
  7781. INT 17 U - Emulaser ELTSR - ???
  7782.     AH = 05h
  7783.     AL = subfunction
  7784.         01h ???
  7785.         02h ???
  7786.         03h ???
  7787.     ???
  7788. Return: ???
  7789. SeeAlso: AH=04h,INT 1A/AH=E5h
  7790. --------P-1706-------------------------------
  7791. INT 17 U - Emulaser ELTSR - ???
  7792.     AH = 06h
  7793.     ???
  7794. Return: ???
  7795. SeeAlso: AH=05h,INT 1A/AH=E5h
  7796. --------P-1707-------------------------------
  7797. INT 17 U - Emulaser ELTSR - OPEN CAPTURE FILE???
  7798.     AH = 07h
  7799.     ES:DX -> ASCIZ filename to be opened
  7800. Return: ???
  7801. Note:    new output will be appended to the specified file
  7802. SeeAlso: AH=08h,INT 1A/AH=E5h
  7803. --------P-1708-------------------------------
  7804. INT 17 U - Emulaser ELTSR - CLOSE CAPTURE FILE???
  7805.     AH = 08h
  7806.     ???
  7807. Return: ???
  7808. Desc:    close the file previously opened by function 07h
  7809. SeeAlso: AH=07h,INT 1A/AH=E5h
  7810. --------P-1709-------------------------------
  7811. INT 17 U - Emulaser ELTSR - ???
  7812.     AH = 09h
  7813.     ???
  7814. Return: ???
  7815. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  7816.       Vertisoft Systems, Inc.
  7817. SeeAlso: AH=08h,INT 1A/AH=E5h
  7818. --------P-170A-------------------------------
  7819. INT 17 U - Emulaser ELTSR - ???
  7820.     AH = 0Ah
  7821.     ???
  7822. Return: ???
  7823. SeeAlso: AH=09h,INT 1A/AH=E5h
  7824. --------P-170B-------------------------------
  7825. INT 17 U - Emulaser ELTSR - ???
  7826.     AH = 0Bh
  7827.     ???
  7828. Return: AX = ???
  7829. SeeAlso: AH=0Ah,INT 1A/AH=E5h
  7830. --------P-170C-------------------------------
  7831. INT 17 U - Emulaser ELTSR - SET ??? FLAG
  7832.     AH = 0Ch
  7833.     ???
  7834. Return: ???
  7835. SeeAlso: AH=0Bh,INT 1A/AH=E5h
  7836. --------P-170D-------------------------------
  7837. INT 17 U - Emulaser ELTSR - GET ScrlLk STATE???
  7838.     AH = 0Dh
  7839. Return: AX = 0000h or 0010h, depending on state
  7840. SeeAlso: AH=0Ch,INT 1A/AH=E5h
  7841. --------P-170E-------------------------------
  7842. INT 17 U - Emulaser ELTSR - TOGGLE ScrlLk???
  7843.     AH = 0Eh
  7844. Return: ???
  7845. Program: ELTSR is the resident portion of the Emulaser PostScript emulator by
  7846.       Vertisoft Systems, Inc.
  7847. SeeAlso: AH=0Dh,INT 1A/AH=E5h
  7848. --------P-1720-------------------------------
  7849. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
  7850.     AH = 20h
  7851.     AL = function number
  7852.         00h installation check
  7853.         Return: BX = driver version number (BH=major,BL=minor)
  7854.             CH = ??? (00h)
  7855.             CL = ???
  7856.             DX = ??? (0100h)
  7857.         Note: also enables the remaining functions
  7858.         01h set ??? flag
  7859.         02h get information
  7860.         CL = subfunction
  7861.             00h get printer type
  7862.             Return: ES:DI -> ASCIZ printer name
  7863.             01h get paper size
  7864.             DX = size index
  7865.             Return: ES:DI -> ASCIZ paper size description
  7866.             02h get ???
  7867.             Return: BX = ???
  7868.             03h get printer information???
  7869.             DX = ???
  7870.             ES:BX -> buffer for ??? (min 134 bytes)
  7871.         03h ???
  7872.         ES:BX -> ???
  7873.         04h get ???
  7874.         Return: ES:DI -> ???
  7875.         05h advance printer to next page
  7876.         Note: also clears flag set by function 01h
  7877.         06h advance printer to next page and shut down
  7878.         Note:    also clears flag set by function 01h and disables
  7879.               functions other than 00h
  7880.         07h not implemented, AX returned unchanged
  7881.     BL = printer number???
  7882. Return: AX = status
  7883.         0000h successful
  7884.         0001h invalid printer???
  7885.         0002h ???
  7886.         0003h invalid subfunction
  7887.         0005h driver disabled, must call function 00h first
  7888.         0009h unknown printer error
  7889.         000Bh printer not selected
  7890.         000Ch printer out of paper
  7891.         000Eh error while writing to serial printer
  7892.         000Fh ???
  7893.         0010h invalid function number
  7894.         0011h value out of range
  7895. Index:    installation check;PC Paint Plus
  7896. --------N-172400-----------------------------
  7897. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  7898.     AX = 2400h
  7899.     DL = new state
  7900.         00h disabled
  7901.         01h enabled
  7902. Return: DL = 24h if installed
  7903.     DH = minor version number
  7904.     CX = network address of this machine
  7905.     AL = status
  7906.         00h successful
  7907.         01h timeout
  7908.         02h header error
  7909.         03h data error
  7910.         04h busy
  7911.         05h invalid parameters
  7912. SeeAlso: AX=2403h,INT 16/AX=4500h
  7913. --------N-172401-----------------------------
  7914. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  7915.     AX = 2401h
  7916.     BL = timeout in clock ticks
  7917. Return: AL = status (see AX=2400h)
  7918.     DX:BX -> receive buffer
  7919. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  7920. --------N-172402-----------------------------
  7921. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  7922.     AX = 2402h
  7923.     transmit buffer filled (see AX=2403h)
  7924. Return: AL = status (see AX=2400h)
  7925. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  7926. --------N-172403-----------------------------
  7927. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  7928.     AX = 2403h
  7929. Return: AL = status (see AX=2400h)
  7930.     CX = number of characters in receive ring buffer
  7931.     DX:BX -> transmit buffer
  7932. SeeAlso: AX=2400h,AX=2402h
  7933. --------N-172404-----------------------------
  7934. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  7935.     AX = 2404h
  7936.     BX = target address
  7937. Return: AL = status (see AX=2400h)
  7938. SeeAlso: AX=2402h,AX=2405h
  7939. --------N-172405-----------------------------
  7940. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  7941.     AX = 2405h
  7942.     BX = target address
  7943. Return: AL = status (see AX=2400h)
  7944. SeeAlso: AX=2402h,AX=2404h
  7945. --------N-172406-----------------------------
  7946. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  7947.     AX = 2406h
  7948. Return: AL = status (see AX=2400h)
  7949. SeeAlso: AX=2407h,AX=240Ah
  7950. --------N-172407-----------------------------
  7951. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  7952.     AX = 2407h
  7953. Return: AL = status (see also AX=2400h)
  7954.         06h end of data
  7955.     DL = received character
  7956. SeeAlso: AX=2406h
  7957. --------N-172408-----------------------------
  7958. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  7959.     AX = 2408h
  7960. Return: AL = status (see also AX=2400h)
  7961.         06h end of data
  7962.     CX = number of bytes in receive buffer
  7963.     DX:SI -> receive buffer
  7964. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  7965. --------N-172409-----------------------------
  7966. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  7967.     AX = 2409h
  7968.     BX = target address
  7969.     CX = number of data bytes
  7970.     DL = command code to send
  7971.     DS:SI -> data bytes for command
  7972. Return: AL = status (see also AX=2400h)
  7973.         03h no response
  7974.         06h remote currently unable to perform command
  7975. SeeAlso: AX=2405h,AX=2408h
  7976. --------N-17240A-----------------------------
  7977. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  7978.     AX = 240Ah
  7979. Return: AL = status (see AX=2400h)
  7980. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  7981. --------N-17240B-----------------------------
  7982. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  7983.     AX = 240Bh
  7984.     DL = character to send
  7985. Return: AL = status (see also AX=2400h)
  7986.         03h transmission error
  7987.         06h write error
  7988. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  7989. --------N-17240C-----------------------------
  7990. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  7991.     AX = 240Ch
  7992. Return: AL = status (see also AX=2400h)
  7993.         03h transmission error
  7994.         06h remote breaks connection
  7995. SeeAlso: AX=240Ah,AX=240Bh
  7996. --------J-175000-----------------------------
  7997. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  7998.     AX = 5000h
  7999.     BX = country code
  8000.         0001h USA (English), 0051h Japan
  8001. Return: AL = status
  8002.         00h successful
  8003.         01h bad country code
  8004.         02h other error
  8005. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  8006. --------J-175001-----------------------------
  8007. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  8008.     AX = 5001h
  8009. Return: AL = status
  8010.         00h successful
  8011.         BX = country code
  8012.         02h error
  8013. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  8014. --------J-1751-------------------------------
  8015. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  8016.     AH = 51h
  8017.     DX = 2-byte JIS code
  8018. Return: DX = shift-JIS value or 0000h on error
  8019. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  8020.       characters to Shift-JIS characters, and the other performs the
  8021.       opposite conversion
  8022. SeeAlso: AX=5000h,AH=52h
  8023. --------J-1752-------------------------------
  8024. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  8025.     AH = 52h
  8026.     DX = 2-byte shift-JIS code
  8027. Return: DX = JIS code or 0000h on error
  8028. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  8029.       characters to Shift-JIS characters, and the other performs the
  8030.       opposite conversion
  8031. SeeAlso: AH=51h
  8032. --------V-1760-------------------------------
  8033. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  8034.     AH = 60h
  8035. Return: AL = 60h
  8036.     DX = CS of resident code
  8037. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  8038.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  8039.       consisting of an 80h followed by the actual command
  8040. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  8041. --------V-1761-------------------------------
  8042. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  8043.     AH = 61h
  8044. Return: AL = 61h
  8045.     DX = CS of resident code
  8046. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  8047. --------N-1781-------------------------------
  8048. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  8049.     AH = 81h
  8050.     AL = 00h (NTNX compatibility mode)
  8051.     CL = number of jobs to cancel
  8052. Return: AL = status
  8053.         00h success
  8054.         01h..7Fh warning
  8055.         80h general failure
  8056.         81h host overloaded (NTNX only)
  8057.         82h module busy (NTNX only)
  8058.         83h host busy (NTNX only)
  8059.         84h re-entry flag set
  8060.         85h invalid request
  8061.         86h invalid printer
  8062.         87h invalid process ID
  8063.         89h access denied
  8064.         8Ah option not available for given port type
  8065.         8Bh option not available for given task type
  8066.         91h printer busy
  8067.         C2h file not found
  8068.         C3h path not found
  8069.         C4h file access failure
  8070. Note:    cancels the last CL printouts for the current task
  8071. SeeAlso: AH=82h
  8072. --------N-1782-------------------------------
  8073. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  8074.     AH = 82h
  8075.     AL = 00h (NTNX compatibility mode)
  8076. Return: AL = status (see AH=81h)
  8077. SeeAlso: AH=81h
  8078. --------N-1783-------------------------------
  8079. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  8080.     AH = 83h
  8081.     AL = mode
  8082.         00h NTNX compatibility
  8083.         CL = number of copies (max 99, default 1)
  8084.         02h MW386 v2+
  8085.         BX = logical device number
  8086.             00h-03h = LPT1-LPT4
  8087.             04h-07h = COM1-COM4
  8088.         CX = number of copies
  8089. Return: AL = status (see AH=81h)
  8090. Note:    in NTNX compatibility mode, this function only affects LPT1
  8091. --------N-1784-------------------------------
  8092. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  8093.     AH = 84h
  8094.     AL = mode
  8095.         00h NTNX compatibility
  8096.         02h MW386 v2+
  8097.         BX = logical device number
  8098.             00h-03h = LPT1-LPT4
  8099.             04h-07h = COM1-COM4
  8100. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  8101.       under MW386 in NTNX compatibility mode)
  8102. --------J-1784-------------------------------
  8103. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  8104.     AH = 84h
  8105.     AL = character
  8106.     DX = printer number
  8107. Return: AH = printer status (see AH=00h)
  8108. SeeAlso: AH=00h,AH=85h
  8109. --------J-1785-------------------------------
  8110. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  8111.     AH = 85h
  8112.     AL = new state (00h enabled, 01h disabled)
  8113. SeeAlso: AH=84h"AX"
  8114. --------N-1787-------------------------------
  8115. INT 17 - Alloy NTNX - SET INDOS POINTER
  8116.     AH = 87h
  8117.     AL = 00h
  8118.     CX:BX -> buffer for user-written printer drivers
  8119. Return: BX,CX destroyed
  8120. Note:    must be executed before the printer is enabled
  8121. SeeAlso: AH=8Ah
  8122. --------N-1788-------------------------------
  8123. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  8124.     AH = 88h
  8125.     AL = mode
  8126.         00h NTNX compatibility
  8127.         DX = NTNX printer number
  8128.             00h host LPT1
  8129.             01h host LPT2
  8130.             02h host LPT3
  8131.             03h host LPT4
  8132.             04h host COM1
  8133.             05h host COM2
  8134.             06h user's logical COM2
  8135.             07h user's terminal AUX port
  8136.             08h user's logical COM1 (MW386 only)
  8137.         01h MW386
  8138.         DX = MW386 printer number
  8139. Return: AH = status (see AH=81h)
  8140. Note:    removes specified printer from the spooler's list of printers
  8141. SeeAlso: AH=89h,AH=8Bh
  8142. --------N-1789-------------------------------
  8143. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  8144.     AH = 89h
  8145.     AL = mode
  8146.         00h NTNX compatibility
  8147.         DX = NTNX printer number (see AH=88h)
  8148.         01h MW386
  8149.         DX = MW386 printer number
  8150. Return: AL = status (see AH=81h)
  8151. Note:    the specified printer is added to the spooler's list of available
  8152.       printers
  8153. SeeAlso: AH=88h,AH=8Bh
  8154. --------N-178A-------------------------------
  8155. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  8156.     AH = 8Ah
  8157.     ???
  8158. SeeAlso: AH=92h
  8159. --------N-178B-------------------------------
  8160. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  8161.     AH = 8Bh
  8162.     DS:DX -> ASCIZ printer name
  8163. Return: AL = status (see also AH=81h)
  8164.         00h successful
  8165.         DX = physical device number
  8166. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  8167. --------N-178C-------------------------------
  8168. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  8169.     AH = 8Ch
  8170.     DX = physical device number
  8171.     ES:DI -> 17-byte buffer for ASCIZ device name
  8172. Return: AL = status (see also AH=81h)
  8173.         00h successful
  8174.         ES:DI buffer filled
  8175. SeeAlso: AH=88h,AH=8Bh
  8176. --------N-178D-------------------------------
  8177. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  8178.     AH = 8Dh
  8179.     AL = 00h
  8180. Notes:    clears all buffers and resets spooler to boot-up values
  8181.     MW386 supports this function for compatibility only; it is a NOP
  8182. Return: AL = status (see AH=81h)
  8183. --------N-178E-------------------------------
  8184. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  8185.     AH = 8Eh
  8186.     AL = 00h
  8187. Return: CX:BX -> INT 28 entry point
  8188. SeeAlso: AH=8Fh
  8189. --------N-178F-------------------------------
  8190. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  8191.     AH = 8Fh
  8192.     AL = 00h
  8193. Return: CX:BX -> DOS intercept routine
  8194. SeeAlso: AH=8Eh
  8195. --------N-1790-------------------------------
  8196. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  8197.     AH = 90h
  8198.     AL = mode
  8199.         00h NTNX compatibility
  8200.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  8201.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  8202.         02h MW386 v2+
  8203.         BX = logical device number
  8204.             00h-03h = LPT1-LPT4
  8205.             04h-07h = COM1-COM4
  8206.     CX:SI -> ASCIZ pathname
  8207. Return: AL = status (see AH=81h)
  8208. Note:    in mode 00h, the file is always sent to logical LPT1
  8209. SeeAlso: AH=A0h
  8210. --------N-1791-------------------------------
  8211. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  8212.     AH = 91h
  8213.     AL = mode
  8214.         00h NTNX compatibility
  8215.         Return: CX = user number (00h = host)
  8216.             DX = currently selected printer number (00h-08h)
  8217.         01h MW386
  8218.         Return: CX = user number
  8219.             DX = physical dev number of currently selected printer
  8220.         02h MW386 v2+
  8221.         BX = logical device number
  8222.             00h-03h = LPT1-LPT4
  8223.             04h-07h = COM1-COM4
  8224.         Return: CX = user number
  8225.             DX = physical device number
  8226. Return: AL = status (see AH=81h)
  8227. SeeAlso: AH=8Ch
  8228. --------N-1792-------------------------------
  8229. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  8230.     AH = 92h
  8231.     AL = 00h
  8232.     CL = 00h
  8233. Return: CL = driver state
  8234.         01h initialized
  8235.         80h not initialized
  8236.     AX = status (see AH=81h)
  8237. SeeAlso: AH=8Ah
  8238. --------N-1794-------------------------------
  8239. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  8240.     AH = 94h
  8241.     AL = mode
  8242.         00h NTNX compatibility
  8243.         DX = NTNX printer number (see AH=88h)
  8244.         01h MW386
  8245.         DX = MW386 printer number
  8246.         02h MW386 v2+
  8247.         BX = logical printer number
  8248.         DX = MW386 printer number
  8249. Return: AL = status (see AH=81h)
  8250. Note:    modes 00h and 01h affect only logical LPT1
  8251. SeeAlso: AH=8Bh,AH=95h
  8252. --------N-1795-------------------------------
  8253. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  8254.     AH = 95h
  8255.     AL = mode
  8256.         00h NTNX compatibility
  8257.         Return: DX = NTNX printer number (see AH=88h)
  8258.                 (FFFFh if current printer not compatible with NTNX)
  8259.         01h MW386
  8260.         Return: DX = MW386 printer number
  8261.         02h MW386 v2+
  8262.         BX = logical device number
  8263.             00h-03h = LPT1-LPT4
  8264.             04h-07h = COM1-COM4
  8265.         Return: DX = MW386 printer number (FFFFh = none)
  8266. Return: AL = status (see AH=81h)
  8267. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  8268. SeeAlso: AH=94h
  8269. --------N-1796-------------------------------
  8270. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  8271.     AH = 96h
  8272.     AL = 00h
  8273. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  8274.       returning
  8275. SeeAlso: INT 14/AH=24h
  8276. --------N-1797-------------------------------
  8277. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  8278.     AH = 97h
  8279.     AL = mode
  8280.         00h NTNX compatibility
  8281.         02h MW386 v2+
  8282.         BX = logical device number
  8283.             00h-03h = LPT1-LPT4
  8284.             04h-07h = COM1-COM4
  8285.     CH,CL,DH = three character break sequence
  8286.     DL = subfunction
  8287.         00h set break string
  8288.         else reset break
  8289. Return: AL = status (see AH=81h)
  8290. Notes:    mode 00h affects only logical LPT1
  8291.     when the break string is encountered, the spool file will be closed and
  8292.       queued for printing automatically
  8293.     the break string is not permanently saved, and will be reset each time
  8294.       MW386 or the user is rebooted
  8295. SeeAlso: AH=9Bh
  8296. --------N-1798-------------------------------
  8297. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  8298.     AH = 98h
  8299.     AL = 00h
  8300.     DL = printer number (FFh=current)
  8301. Return: AL = status
  8302.         00h successful
  8303.         01h incorrect printer
  8304.         02h task not found
  8305. Note:    MW386 supports this function for compatibility only; it is a NOP
  8306. --------N-1799-------------------------------
  8307. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  8308.     AH = 99h
  8309.     AL = mode
  8310.         00h NTNX compatibility
  8311.         DL = NTNX printer number (see AH=88h)
  8312.             (FFh = task's current logical LPT1)
  8313.         DH = mode
  8314.             bit 0: get mode if 1, set mode if 0
  8315.             bit 1: private ("attached")
  8316.             bit 2: direct instead of spooled
  8317.             bits 3-7 reserved (0)
  8318.         01h MW386
  8319.         DX = MW386 printer number
  8320.         CL = mode (as for DH above)
  8321. Return: AL = status (see AH=81h)
  8322.     DH = mode (bits 1 and 2 set as above)
  8323.     DL = printer owner's user number if not spooled
  8324. --------N-179A-------------------------------
  8325. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  8326.     AH = 9Ah
  8327.     AL = mode
  8328.         00h NTNX compatibility
  8329.         DX = NTNX printer number (see AH=88h)
  8330.             (FFFFh = current logical LPT1)
  8331.         01h MW386
  8332.         DX = MW386 printer number
  8333.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  8334. Return: AL = status (see AH=81h)
  8335. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  8336.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  8337. SeeAlso: AH=A4h
  8338. --------N-179B-------------------------------
  8339. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  8340.     AH = 9Bh
  8341.     AL = mode
  8342.         00h NTNX compatibility
  8343.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  8344.         01h MW386
  8345.         CX = timeout value in seconds (00h = never)
  8346.         02h MW386 v2+
  8347.         BX = logical device number
  8348.             00h-03h = LPT1-LPT4
  8349.             04h-07h = COM1-COM4
  8350.         CX = timeout value in seconds (00h = never)
  8351. Return: AL = status (see AH=81h)
  8352. Notes:    modes 00h and 01h affect only the current logical LPT1
  8353.     if no data is sent to a printer for the specified amount of time, the
  8354.       spool file will be closed and queued for printing automatically
  8355. SeeAlso: AH=97h
  8356. --------N-17A0-------------------------------
  8357. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  8358.     AH = A0h
  8359.     AL = mode
  8360.         00h NTNX compatibility
  8361.         DX = ??? (NTNX, MW386 v1.x only)
  8362.         02h MW386 v2+
  8363.         BX = logical device number
  8364.             00h-03h = LPT1-LPT4
  8365.             04h-07h = COM1-COM4
  8366.     CX:SI -> ASCIZ pathname
  8367. Return: AL = status (see AH=81h)
  8368. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  8369.       the original file to be modified or deleted while the copy is printed
  8370.     in mode 00h, the file is printed on logical LPT1
  8371. SeeAlso: AH=90h
  8372. --------N-17A4-------------------------------
  8373. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  8374.     AH = A4h
  8375.     AL = new state
  8376.         00h form feed after end of print job disabled
  8377.         01h form feed enabled
  8378. Return: AL = status (see AH=81h)
  8379. Note:    only affects the current logical LPT1
  8380. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  8381. --------N-17A6-------------------------------
  8382. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  8383.     AH = A6h
  8384.     AL = new state
  8385.         00h banner page before print job disabled
  8386.         01h banner page enabled
  8387. Return: AL = status (see AH=81h)
  8388. Note:    only affects the current logical LPT1
  8389. SeeAlso: AH=A4h
  8390. --------N-17A7-------------------------------
  8391. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  8392.     AH = A7h
  8393.     AL = spool flags
  8394.         bit 0: banner page enabled (see AH=A4h)
  8395.         bit 1: form feed enabled (see AH=A6h)
  8396.         bits 2-6: reserved (0)
  8397.         bit 7: set flags if 1, get flags if 0
  8398.     BX = logical device number
  8399.         00h-03h = LPT1-LPT4
  8400.         04h-07h = COM1-COM4
  8401. Return: AL = status (see AH=81h)
  8402. Note:    the documentation does not state which register contains the result of
  8403.       a GET
  8404. SeeAlso: AH=A4h,AH=A6h
  8405. --------N-17A8-------------------------------
  8406. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  8407.     AH = A8h
  8408.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  8409. Return: AL = status (see AH=81h)
  8410. Note:    allows application to specify banner page filename for spool files
  8411.       collected from the application's printer output
  8412. SeeAlso: AH=A9h
  8413. --------N-17A9-------------------------------
  8414. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  8415.     AH = A9h
  8416.     AL = new spool drive (2=C:,3=D:,etc)
  8417. Return: AL = status (see AH=81h)
  8418. Note:    does not remove previous spooling directory since jobs may be pending
  8419. SeeAlso: AH=A8h
  8420. --------N-17AA-------------------------------
  8421. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  8422.     AH = AAh
  8423.     AL = mode
  8424.         00h NTNX
  8425.         DX = NTNX printer number (see AH=88h)
  8426.         01h MW386
  8427.         DX = MW386 printer number
  8428. Return: AH = instantaneous printer status
  8429.         00h printer ready
  8430.         01h not ready
  8431.         12h off line
  8432.         13h out of paper
  8433.         14h general device failure
  8434.         15h device timeout
  8435.         16h bad device number
  8436. --------N-17AF-------------------------------
  8437. INT 17 - Alloy MW386 - CHECK SPOOLER
  8438.     AH = AFh
  8439. Return: AX = 55AAh if spooler available
  8440. --------c-17C0-------------------------------
  8441. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  8442.     AH = C0h
  8443.     DX = printer port (0-3)
  8444. Return: ES:BX -> control block (see below)
  8445. SeeAlso: AH=C1h
  8446.  
  8447. Format of control block:
  8448. Offset    Size    Description
  8449.  00h    WORD    printer number
  8450.  02h    WORD    address of printer status port
  8451.  04h    WORD    number of first record in queue
  8452.  06h    WORD    number of last record in queue
  8453.  08h    DWORD    characters already printed
  8454.  0Ch    DWORD    number of characters remaining
  8455.  10h    DWORD    pointer to dequeue buffer
  8456.  14h    DWORD    previous count of characters printed
  8457.  18h    DWORD    number of clock ticks taken to print them
  8458.  1Ch    WORD    offset of next character to output
  8459.  1Eh    WORD    offset of next character to print
  8460.  20h    WORD    pointer to spooling queue record
  8461.  22h    BYTE    current spooling status
  8462.  23h    BYTE    current printer status:
  8463.         00h OK
  8464.         01h not ready
  8465.         02h paused with message
  8466.         03h paused
  8467.         04h initializing
  8468.         FEh non-existent port
  8469.         FFh not spooled
  8470.  24h    BYTE    current control record type
  8471.  25h    WORD    observed printer speed
  8472.  27h    WORD    characters to print per service
  8473.  29h    BYTE    01h if disk write needed
  8474.  2Ah    BYTE    01h if queued data should be flushed
  8475.  2Bh    BYTE    01h to update cps status
  8476. --------c-17C1--------------------------------
  8477. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  8478.     AH = C1h
  8479.     DX = printer port (0-3)
  8480.     DS:SI -> ASCIIZ string to save for display
  8481. Note:    flushes pending writes
  8482. SeeAlso: AH=C0h,AH=C2h
  8483. --------c-17C2-------------------------------
  8484. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  8485.     AH = C2h
  8486.     DX = printer port (0-3)
  8487. SeeAlso: AH=C3h
  8488. --------c-17C3-------------------------------
  8489. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  8490.     AH = C3h
  8491.     DX = printer port (0-3)
  8492. SeeAlso: AH=C2h,AH=C7h
  8493. --------c-17C4-------------------------------
  8494. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  8495.     AH = C4h
  8496. Return: DI = B0BFh
  8497.     SI = segment
  8498. --------c-17C5-------------------------------
  8499. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  8500.     AH = C5h
  8501.     DX = printer port (0-3)
  8502. Note:    cancels up to the pause record 
  8503. --------c-17C6-------------------------------
  8504. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  8505.     AH = C6h
  8506.     DX = printer port (0-3)
  8507. Return: AX = 0 printer not active or at pause
  8508.        = 1 printer busy
  8509. --------c-17C7-------------------------------
  8510. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  8511.     AH = C7h
  8512.     DX = printer port (0-3)
  8513. SeeAlso: AH=C3h
  8514. --------P-17CD00-----------------------------
  8515. INT 17 - INSET - EXECUTE COMMAND STRING
  8516.     AX = CD00h
  8517.     DS:DX -> ASCIZ command string (max 80 bytes)
  8518. Return: CX = 07C2h (1986d)
  8519. Note:    user interface menus pop up after last command, unless that command
  8520.     exits INSET
  8521. --------P-17CD01-----------------------------
  8522. INT 17 - INSET - GET IMAGE SIZE
  8523.     AX = CD01h
  8524.     DS:DX -> ASCIZ name of image file
  8525. Return: AX = height in 1/720th inch
  8526.     BX = width in 1/720th inch
  8527.     CX = 07C2h (1986d)
  8528. --------P-17CD02-----------------------------
  8529. INT 17 - INSET - INITIALIZE
  8530.     AX = CD02h
  8531. Return: CX = 07C2h (1986d)
  8532. Note:    all open files are closed and the printer is reset
  8533. SeeAlso: AX=CD04h
  8534. --------P-17CD03-----------------------------
  8535. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  8536.     AX = CD03h
  8537. Return: CX = 07C2h (1986d)
  8538. --------P-17CD04-----------------------------
  8539. INT 17 - INSET - INITIALIZE LINKED MODE
  8540.     AX = CD04h
  8541.     ES:SI -> FAR routine for linked mode
  8542. Return: CX = 07C2h
  8543. Note:    calling sequence for linked-mode routine
  8544.     AL = 00h send character in BL to printer
  8545.        = 01h send CX bytes from DS:DX to printer
  8546.        = 02h move print head to horizontal starting position of image
  8547.     return code for linked-mode routine:
  8548.     AX = 0000h success
  8549.        = 0001h failure
  8550. SeeAlso: AX=CD02h,AX=CD08h
  8551. --------P-17CD05-----------------------------
  8552. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  8553.     AX = CD05h
  8554.     DS:DX -> ASCIZ name of PIX file
  8555.     CX = left margin of text in 1/720th inch
  8556. Return: AH = printer type
  8557.         00h page-oriented (multiple images may be placed side-by-side)
  8558.         01h line-oriented (use AX=CD06h for vertical paper movement)
  8559.     CX = 07C2h (1986d)
  8560. SeeAlso: AX=CD07h
  8561. --------P-17CD06-----------------------------
  8562. INT 17 - INSET - GRAPHICS LINE FEED
  8563.     AX = CD06h
  8564. Return: AH = completion status
  8565.         00h image complete
  8566.         01h image incomplete
  8567.     CX = 07C2h (1986d)
  8568. SeeAlso: AX=CD09h
  8569. --------P-17CD07-----------------------------
  8570. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  8571.     AX = CD07h
  8572. Return: CX = 07C2h
  8573. SeeAlso: AX=CD05h
  8574. --------P-17CD08-----------------------------
  8575. INT 17 - INSET - CANCEL LINK MODE
  8576.     AX = CD08h
  8577. Return: CX = 07C2h
  8578. SeeAlso: AX=CD04h
  8579. --------P-17CD09-----------------------------
  8580. INT 17 - INSET - ALTER TEXT LINE SPACING
  8581.     AX = CD09h
  8582.     CX = line spacing in 1/720th inch
  8583. Return: CX = 07C2h
  8584. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  8585. SeeAlso: AX=CD06h
  8586. --------P-17CD0A-----------------------------
  8587. INT 17 - INSET - GET SETUP
  8588.     AX = CD0Ah
  8589.     DS:DX -> buffer for IN.SET data
  8590. Return: CX = 07C2h
  8591. --------P-17CD0B-----------------------------
  8592. INT 17 - INSET - START GETTING SCALED IMAGE
  8593.     AX = CD0Bh
  8594.     DS:SI -> ASCIZ pathname of .PIX file
  8595.     BX = number of bitplanes
  8596.     CX = number of rows in output bitmap
  8597.     DX = number of columns in output bitmap
  8598. Return: AX = status
  8599.         0000h OK
  8600.         FFFFh error    
  8601. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  8602. --------P-17CD0C-----------------------------
  8603. INT 17 - INSET - GET NEXT IMAGE STRIP
  8604.     AX = CD0Ch
  8605. Return:    AX = status
  8606.         0000h OK but not complete
  8607.         0001h OK and image complete
  8608.         FFFFh error
  8609.     DS:SI -> buffer (max 4K) for bit map strip 
  8610.     CX = start row
  8611.     DX = number of rows
  8612.     BX = offset in bytes between bit planes
  8613. Note:    buffer may be overwritten by subsequent calls
  8614. SeeAlso: AX=CD0Bh
  8615. --------P-17F0-------------------------------
  8616. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  8617.     AH = F0h
  8618.     DX = printer port (0-3)
  8619. Return: AX = 0001h Jetstream present
  8620.          else  non-Jetstream port
  8621. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  8622.       to drive printers at up to 80000 characters per second
  8623. --------P-17F1-------------------------------
  8624. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  8625.     AH = F1h
  8626.     CX = data buffer length
  8627.     DX = printer port (0-3)
  8628.     DS:SI -> data buffer
  8629. Return: AX = status
  8630.         0000h printer not ready (see also AH=02h)
  8631.         other printing started
  8632. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  8633. --------P-17F2-------------------------------
  8634. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  8635.     AH = F2h
  8636.     DX = printer port (0-3)
  8637. Return: AX = status
  8638.         0000h prior print request finished
  8639.         other number of characters left to print
  8640. SeeAlso: AH=02h,AH=F1h,AH=F3h
  8641. --------P-17F3-------------------------------
  8642. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  8643.     AH = F3h
  8644.     DX = printer port (0-3)
  8645. Return: AX = number of unprinted characters due to abort
  8646. SeeAlso: AH=F1h,AH=F4h
  8647. --------P-17F4-------------------------------
  8648. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  8649.     AH = F4h
  8650.     DX = printer port (0-3)
  8651.     DS:DS -> FAR post address (called with interrupts on)
  8652. SeeAlso: AH=F1h,AH=F3h
  8653. --------P-17F5-------------------------------
  8654. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  8655.     AH = F5h
  8656.     CX = data buffer length
  8657.     DX = printer port (0-3)
  8658.     DS:SI -> data buffer (32-bit physical address)
  8659. Return: AX = status
  8660.         0000h printer not ready (see also AH=02h)
  8661.         other printing started
  8662. SeeAlso: AH=F1h
  8663. --------B-18---------------------------------
  8664. INT 18 - START CASSETTE BASIC
  8665. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  8666.       unpredicatable on compatibles; this interrupt often reboots the
  8667.       system, and often has no effect at all
  8668. SeeAlso: INT 86"NetBIOS"
  8669. --------J-1800-------------------------------
  8670. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  8671.     AH = 00h
  8672. Return: AX = keystroke
  8673. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  8674. --------J-1801-------------------------------
  8675. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  8676.     AH = 01h
  8677. Return: ZF set if no keystroke available
  8678.     ZF clear if keystroke available
  8679.         AX = keystroke
  8680. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  8681. --------J-1802-------------------------------
  8682. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  8683.     AH = 02h
  8684. Return: AL = shift flags
  8685. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  8686. --------J-1803-------------------------------
  8687. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  8688.     AH = 03h
  8689.     ???
  8690. Return: ???
  8691. SeeAlso: AH=00h,AH=04h
  8692. --------J-1804-------------------------------
  8693. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  8694.     AH = 04h
  8695.     ???
  8696. Return: ???
  8697. Note:    details are not available at this time
  8698. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  8699. --------J-18---------------------------------
  8700. INT 18 - NEC PC-9800 series - VIDEO
  8701.     AH = function
  8702.         0Ah set video mode
  8703.         0Bh get video mode
  8704.         0Ch start text screen display
  8705.         0Dh end text screen display
  8706.         0Eh set single display area
  8707.         0Fh set multiple display area
  8708.         10h set cursor shape
  8709.         11h display cursor
  8710.         12h terminate cursor
  8711.         13h set cursor position
  8712.         14h read font patter
  8713.         16h initialize text video RAM
  8714.         1Ah define user character
  8715.     ???
  8716. Return: ???
  8717. Notes:    details are not available at this time
  8718.     text video RAM is located at segments A000h (characters) and A200h
  8719.       (attributes)
  8720. --------B-19---------------------------------
  8721. INT 19 - SYSTEM - BOOTSTRAP LOADER
  8722. Desc:    This interrupt reboots the system without clearing memory or restoring
  8723.       interrupt vectors.  Because interrupt vectors are preserved, this
  8724.       interrupt usually causes a system hang if any TSRs have hooked
  8725.       vectors from 00h through 1Ch, particularly INT 08.
  8726. Notes:    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive
  8727.       A: to 0000h:7C00h.  If this fails, and a hard disk is installed, the
  8728.       BIOS will read sector 1, head 0, track 0 of the first hard disk.
  8729.       This sector should contain a master bootstrap loader and a partition
  8730.       table.  After loading the master boot sector at 0000h:7C00h, the
  8731.       master bootstrap loader is given control.  It will scan the partition
  8732.       table for an active partition, and will then load the operating
  8733.       system's bootstrap loader (contained in the first sector of the
  8734.       active partition) and give it control.
  8735.     true IBM PCs and most clones issue an INT 18 if neither floppy nor hard
  8736.       disk have a valid boot sector
  8737.     to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  8738.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  8739.       a reset, store 0000h at 0040h:0072h before jumping.
  8740.     VDISK.SYS hooks this interrupt to allow applications to find out how
  8741.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  8742.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  8743.       at the beginning of its INT 19 handler segment, thus causing some
  8744.       programs to overwrite extended memory which is already in use.
  8745.     the default handler is at F000h:E6F2h for 100% compatible BIOSes
  8746.     MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk
  8747.       contains extended partitions which point at each other in a loop,
  8748.       since it will never find the end of the linked list of extended
  8749.       partitions
  8750. SeeAlso: INT 14/AH=17h,INT 18
  8751.  
  8752. Format of VDISK header block (at beginning of INT 19 handler's segment):
  8753. Offset    Size    Description
  8754.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  8755.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  8756.  1Dh 15 BYTEs    n/a
  8757.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  8758.  
  8759. Format of hard disk master boot sector:
  8760. Offset    Size    Description
  8761.  00h 446 BYTEs    Master bootstrap loader code
  8762. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  8763. 1CEh 16 BYTEs    partition record for partition 2
  8764. 1DEh 16 BYTEs    partition record for partition 3
  8765. 1EEh 16 BYTEs    partition record for partition 4
  8766. 1FEh    WORD    signature, AA55h indicates valid boot block
  8767.  
  8768. Format of partition record:
  8769. Offset    Size    Description
  8770.  00h    BYTE    boot indicator (80h = active partition)
  8771.  01h    BYTE    partition start head
  8772.  02h    BYTE    partition start sector (bits 0-5)
  8773.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  8774.  04h    BYTE    operating system indicator (see below)
  8775.  05h    BYTE    partition end head
  8776.  06h    BYTE    partition end sector (bits 0-5)
  8777.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  8778.  08h    DWORD    sectors preceding partition
  8779.  0Ch    DWORD    length of partition in sectors
  8780.  
  8781. Values for operating system indicator:
  8782.  00h empty
  8783.  01h DOS 12-bit FAT
  8784.  02h XENIX root file system
  8785.  03h XENIX /usr file system (obsolete)
  8786.  04h DOS 16-bit FAT
  8787.  05h DOS 3.3+ extended partition
  8788.  06h DOS 3.31+ Large File System
  8789.  07h QNX
  8790.  07h OS/2 HPFS
  8791.  07h Advanced Unix
  8792.  08h AIX bootable partition, SplitDrive
  8793.  09h AIX data partition
  8794.  09h Coherent filesystem
  8795.  0Ah OPUS
  8796.  0Ah Coherent swap partition
  8797.  10h OPUS
  8798.  24h NEC MS-DOS 3.x
  8799.  40h VENIX 80286
  8800.  50h Disk Manager, read-only partition
  8801.  51h Disk Manager, read/write partition
  8802.  51h Novell???
  8803.  52h CP/M
  8804.  52h Microport System V/386
  8805.  56h GoldenBow VFeature
  8806.  61h SpeedStor
  8807.  63h Unix SysV/386, 386/ix
  8808.  63h Mach, MtXinu BSD 4.3 on Mach
  8809.  63h GNU HURD
  8810.  64h Novell NetWare
  8811.  65h Novell NetWare (3.11)
  8812.  75h PC/IX
  8813.  80h Minix v1.1 - 1.4a
  8814.  81h Minix v1.4b+
  8815.  81h Linux
  8816.  81h Mitac Advanced Disk Manager
  8817.  82h Linux Swap partition (planned)
  8818.  93h Amoeba file system
  8819.  94h Amoeba bad block table
  8820.  B7h BSDI file system (secondarily swap)
  8821.  B8h BSDI swap partition (secondarily file system)
  8822.  C6h DR-DOS 6.0 LOGIN.EXE-secured partition
  8823.  DBh CP/M, Concurrent CP/M, Concurrent DOS
  8824.  DBh CTOS (Convergent Technologies OS)
  8825.  E1h SpeedStor 12-bit FAT extended partition
  8826.  E4h SpeedStor 16-bit FAT extended partition
  8827.  F2h DOS 3.3+ secondary
  8828.  FEh LANstep
  8829.  FFh Xenix bad block table
  8830. --------B-1A00-------------------------------
  8831. INT 1A - TIME - GET SYSTEM TIME
  8832.     AH = 00h
  8833. Return: CX:DX = number of clock ticks since midnight
  8834.     AL = midnight flag, nonzero if midnight passed since time last read
  8835. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  8836.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  8837.       it, leading to loss of a day if two consecutive midnights pass
  8838.       without a request for the time (e.g. if the system is on but idle)
  8839. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  8840. --------B-1A01-------------------------------
  8841. INT 1A - TIME - SET SYSTEM TIME
  8842.     AH = 01h
  8843.     CX:DX = number of clock ticks since midnight
  8844. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  8845. --------B-1A02-------------------------------
  8846. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  8847.     AH = 02h
  8848. Return: CF clear if successful
  8849.         CH = hour (BCD)
  8850.         CL = minutes (BCD)
  8851.         DH = seconds (BCD)    
  8852.         DL = daylight savings flag (00h standard time, 01h daylight time)
  8853.     CF set on error (i.e. clock not running or in middle of update)
  8854. SeeAlso: AH=00h
  8855. --------B-1A03-------------------------------
  8856. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  8857.     AH = 03h
  8858.     CH = hour (BCD)
  8859.     CL = minutes (BCD)
  8860.     DH = seconds (BCD)
  8861.     DL = daylight savings flag (00h standard time, 01h daylight time)
  8862. SeeAlso: AH=01h
  8863. --------B-1A04-------------------------------
  8864. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  8865.     AH = 04h
  8866. Return: CF clear if successful
  8867.         CH = century (BCD)
  8868.         CL = year (BCD)
  8869.         DH = month (BCD)
  8870.         DL = day (BCD)
  8871.     CF set on error
  8872. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  8873. --------B-1A05-------------------------------
  8874. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  8875.     AH = 05h
  8876.     CH = century (BCD)
  8877.     CL = year (BCD)
  8878.     DH = month (BCD)
  8879.     DL = day (BCD)
  8880. SeeAlso: AH=04h,INT 21/AH=2Bh
  8881. --------B-1A06-------------------------------
  8882. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  8883.     AH = 06h
  8884.     CH = hour (BCD)
  8885.     CL = minutes (BCD)
  8886.     DH = seconds (BCD)
  8887. Return: CF set on error (alarm already set or clock stopped for update)
  8888.     CF clear if successful
  8889. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  8890.       time
  8891. SeeAlso: AH=07h,INT 4A
  8892. --------B-1A07-------------------------------
  8893. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  8894.     AH = 07h
  8895. Return: alarm disabled
  8896. Note:    does not disable the real-time clock's IRQ
  8897. SeeAlso: AH=06h,INT 70
  8898. --------B-1A08-------------------------------
  8899. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  8900.     AH = 08h
  8901.     CH = hours in BCD
  8902.     CL = minutes in BCD
  8903.     DH = seconds in BCD
  8904. --------B-1A09-------------------------------
  8905. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  8906.     AH = 09h
  8907. Return: CH = hours in BCD
  8908.     CL = minutes in BCD
  8909.     DH = seconds in BCD
  8910.     DL = alarm status
  8911.         00h alarm not enabled
  8912.         01h alarm enabled but will not power up system
  8913.         02h alarm will power up system
  8914. --------B-1A0A-------------------------------
  8915. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  8916.     AH = 0Ah
  8917. Return: CF set on error
  8918.     CF clear if successful
  8919.         CX = count of days since Jan 1,1980
  8920. SeeAlso: AH=04h,AH=0Bh
  8921. --------B-1A0B-------------------------------
  8922. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  8923.     AH = 0Bh
  8924.     CX = count of days since Jan 1,1980
  8925. Return: CF set on error
  8926.     CF clear if successful
  8927. SeeAlso: AH=05h,AH=0Ah
  8928. --------J-1A10-------------------------------
  8929. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  8930.     AH = 10h
  8931.     ???
  8932. Return: ???
  8933. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  8934. --------J-1A11-------------------------------
  8935. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  8936.     AH = 11h
  8937.     ???
  8938. Return: ???
  8939. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  8940. --------J-1A12-------------------------------
  8941. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  8942.     AH = 12h
  8943.     ???
  8944. Return: ???
  8945. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  8946. --------A-1A3601-----------------------------
  8947. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  8948.     AX = 3601h
  8949. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  8950.         ASCIZ string "WPCORP\0"
  8951. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  8952.       third party product wants to interface with it.  The third party
  8953.       product must intercept this interrupt and return the address of a
  8954.       keyboard monitor routine.
  8955.     Before checking for keyboard input, and after every key entered by the
  8956.       user, Word Perfect will call the routine whose address was provided
  8957.       in DS:SI with the following parameters:
  8958.         Entry:    AX = key code or 0
  8959.             BX = WordPerfect state flag
  8960.         Exit:    AX = 0 or key code
  8961.             BX = 0 or segment address of buffer with key codes
  8962.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  8963. SeeAlso: INT 16/AX=5500h
  8964. --------N-1A6108-----------------------------
  8965. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  8966.     AX = 6108h
  8967.     STACK:    WORD    conversation ID (0000h-0009h)
  8968.         DWORD    pointer to message buffer
  8969.         WORD    length of message
  8970.         DWORD    pointer to reply buffer
  8971.         WORD    length of reply buffer
  8972.         WORD    0000h (use default "Cparams" structure)
  8973. Return: AX = status (see below)
  8974.     STACK unchanged
  8975. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  8976.       which implements the Simple Network Application Protocol
  8977. SeeAlso: AX=6205h
  8978.  
  8979. Values for status:
  8980.  0000h successful
  8981.  F830h "SNAP_ABORTED"
  8982.  FC04h "SNAP_SERVERDIED"
  8983.  FC05h "SNAP_RESEND"
  8984.  FC06h "SNAP_SELECTFAILED"
  8985.  FC07h "SNAP_WRONGVERSION"
  8986.  FC08h "SNAP_INVALIDACK"
  8987.  FC09h "SNAP_TIMEOUT"
  8988.  FC0Ah "SNAP_SERVERREJECT"
  8989.  FC0Bh "SNAP_NOREPLYDUE"
  8990.  FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  8991.  FC0Dh "SNAP_NOINIT"
  8992.  FC0Eh "SNAP_SOCKETERROR"
  8993.  FC0Fh "SNAP_BUFFERLIMIT"
  8994.  FC10h "SNAP_INVALIDCID"
  8995.  FC11h "SNAP_INVALIDOP"
  8996.  FC12h "SNAP_XMITFAIL"
  8997.  FC13h "SNAP_NOMORERETRIES"
  8998.  FC14h "SNAP_BADPARMS"
  8999.  FC15h "SNAP_NOMEMORY"
  9000.  FC16h "SNAP_NOMORECONVS"
  9001.  FFFFh failed (invalid function/parameter)
  9002. --------N-1A6205-----------------------------
  9003. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  9004.     AX = 6205h
  9005.     STACK:    WORD    conversation ID (0000h-0009h)
  9006.         DWORD    pointer to message
  9007.         WORD    length of message
  9008.         WORD    0000h (use default "Cparms" structure)
  9009. Return: AX = status (see AX=6108h)
  9010.     STACK unchanged
  9011. SeeAlso: AX=6108h
  9012. --------N-1A6308-----------------------------
  9013. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  9014.     AX = 6308h
  9015.     STACK:    WORD    offset of ASCIZ "guardian"
  9016.         WORD    offset of ASCIZ hostname
  9017.         WORD    offset of ASCIZ server name
  9018.         WORD    offset of ASCIZ userid
  9019.         WORD    offset of ASCIZ password
  9020.         WORD    offset of password length
  9021.         WORD    offset of password type
  9022.         WORD    offset of "Cparms" structure (see below)
  9023. Return: ???
  9024.     STACK unchanged
  9025. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  9026.       to allocate a buffer)
  9027. SeeAlso: AX=6405h,AX=7202h
  9028.  
  9029. Format of Cparms structure:
  9030. Offset    Size    Description
  9031.  00h    WORD    retry delay in seconds
  9032.  02h    WORD    timeout delay in seconds
  9033.  04h    WORD    maximum buffer size
  9034.  06h    WORD    encryption level
  9035. --------N-1A6405-----------------------------
  9036. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  9037.     AX = 6405h
  9038.     STACK:    WORD    conversation ID (0000h-0009h)
  9039.         DWORD    pointer to message buffer
  9040.         WORD    length of message
  9041.         WORD    0000h (use default "Cparms" structure)
  9042. Return: AX = status (see AX=6108h)
  9043.     STACK unchanged
  9044. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9045.       which implements the Simple Network Application Protocol
  9046. SeeAlso: AX=6308h
  9047. --------N-1A6900-----------------------------
  9048. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  9049.     AX = 6900h
  9050. Return: AX = value used for DS by resident code
  9051. SeeAlso: AX=6A01h,AX=6F01h
  9052. --------N-1A6A01-----------------------------
  9053. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  9054.     AX = 6A01h
  9055.     STACK:    WORD    number of bytes to allocate
  9056. Return: AX = offset of allocated buffer or 0000h if out of memory
  9057.     STACK unchanged
  9058. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9059.       which implements the Simple Network Application Protocol
  9060. SeeAlso: AX=6B01h
  9061. --------N-1A6B01-----------------------------
  9062. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  9063.     AX = 6B01h
  9064.     STACK:    WORD    offset within SNAP data segment of previously allocated
  9065.             buffer
  9066. Return:    STACK unchanged
  9067. Note:    this call is a NOP if the specified offset is 0000h
  9068. SeeAlso: AX=6A01h
  9069. --------N-1A6C04-----------------------------
  9070. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  9071.     AX = 6C04h
  9072.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  9073.         WORD    segment of source buffer
  9074.         WORD    offset of source buffer
  9075.         WORD    number of bytes to copy
  9076. Return: AX = offset of byte after last one copied to destination
  9077.     STACK unchanged
  9078. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9079.       which implements the Simple Network Application Protocol
  9080. SeeAlso: AX=6D04h
  9081. --------N-1A6D04-----------------------------
  9082. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  9083.     AX = 6D04h
  9084.     STACK:    WORD    offset within SNAP data segment of source buffer
  9085.         WORD    segment of destination buffer
  9086.         WORD    offset of destination buffer
  9087.         WORD    number of bytes to copy
  9088. Return: AX = offset of byte after last one copied from source
  9089.     buffer filled
  9090.     STACK unchanged
  9091. SeeAlso: AX=6C04h
  9092. --------N-1A6E01-----------------------------
  9093. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  9094.     AX = 6E01h
  9095.     STACK:    WORD    new value for ???
  9096. Return:    AX = old value of ???
  9097.     STACK unchanged
  9098. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9099.       which implements the Simple Network Application Protocol
  9100. --------N-1A6F01-----------------------------
  9101. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  9102.     AX = 6F01h
  9103.     STACK: WORD 0000h
  9104. Return: AX = status
  9105.         0000h SNAP is resident
  9106.         other SNAP not present
  9107.     STACK unchanged
  9108. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9109.       which implements the Simple Network Application Protocol, and is
  9110.       required by PCVENUS (a network shell).  The combination of SNAP and
  9111.       PCVENUS allows the use of the Andrew File System as one or more
  9112.       networked drives.
  9113. SeeAlso: AX=6900h,AX=7400h
  9114. --------N-1A7002-----------------------------
  9115. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  9116.     AX = 7002h
  9117.     STACK:    WORD    anchor number (0000h-0009h)
  9118.         WORD    new value for the anchor
  9119. Return: AX = status
  9120.         0000h successful
  9121.         FFFFh failed (top word on stack not in range 00h-09h)
  9122.     STACK unchanged
  9123. SeeAlso: AX=7101h
  9124. --------N-1A7101-----------------------------
  9125. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  9126.     AX = 7101h
  9127.     STACK:    WORD    anchor number (0000h-0009h)
  9128. Return:    AX = anchor's value
  9129.     STACK unchanged
  9130. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9131.       which implements the Simple Network Application Protocol
  9132. SeeAlso: AX=7002h
  9133. --------N-1A7202-----------------------------
  9134. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  9135.     AX = 7202h
  9136.     STACK:    WORD    conversation ID (0000h-0009h)
  9137.         WORD    offset within resident data segment of "Cparms"
  9138.             structure (see AX=6308h)
  9139. Return:    AX = status???
  9140.     STACK unchanged
  9141. SeeAlso: AX=6308h
  9142. --------N-1A7302-----------------------------
  9143. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  9144.     AX = 7302h
  9145.     STACK:    WORD    conversation ID (0000h-0009h)
  9146.         WORD    offset within resident data segment of ???
  9147. Return:    AX = ???
  9148.     ???
  9149.     STACK unchanged
  9150. SeeAlso: AX=7400h
  9151. --------N-1A7400-----------------------------
  9152. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  9153.     AX = 7400h
  9154. Return: AX = version (AH=major, AL=minor)
  9155. Note:    this call is only valid if SNAP is installed
  9156. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  9157. --------N-1A75-------------------------------
  9158. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  9159.     AH = 75h
  9160.     AL = ???
  9161. Return: AX = ??? (0000h)
  9162. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9163.       which implements the Simple Network Application Protocol
  9164. --------N-1A76-------------------------------
  9165. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  9166.     AH = 76h
  9167.     AL = ???
  9168. Return: AX = ???
  9169. --------N-1A77-------------------------------
  9170. INT 1A - SNAP.EXE 3.4 - ???
  9171.     AH = 77h
  9172.     AL = ??? (at least 01h)
  9173.     STACK:    WORD    ???
  9174.         ???
  9175. Return: ???
  9176.     STACK unchanged
  9177. --------N-1A7802-----------------------------
  9178. INT 1A - SNAP.EXE 3.4 - ???
  9179.     AX = 7802h
  9180.     STACK:    WORD    ???
  9181.         WORD    ???
  9182. Return: ???
  9183.     STACK unchanged
  9184. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  9185.       which implements the Simple Network Application Protocol
  9186. --------s-1A7F-------------------------------
  9187. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  9188.     AH = 7Fh
  9189.     ???
  9190. Return: ???
  9191. SeeAlso: AH=80h,AH=83h,AH=85h
  9192. --------s-1A80-------------------------------
  9193. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  9194.     AH = 80h
  9195.     AL = 00h source is 8253 channel 2
  9196.          01h source is cassette input
  9197.          02h source is I/O channel "Audio IN"
  9198.          03h source is sound generator chip
  9199. SeeAlso: AH=7Fh,AH=83h
  9200. --------s-1A8100-----------------------------
  9201. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  9202.     AX = 8100h
  9203. Return: AH > 80h if supported
  9204. --------s-1A83-------------------------------
  9205. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  9206.     AH = 83h
  9207.     AL = volume (0=lowest, 7=highest)
  9208.     CX = number of bytes to play
  9209.     DX = time between sound samples (multiples of 273 nanoseconds)
  9210.     ES:BX -> sound data (array of 8-bit PCM samples)
  9211. Return: ???
  9212. Notes:    this call returns immediately while the sound plays in the
  9213.       background
  9214.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  9215.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  9216.       device underflows to allow another INT 1A/AH=83h for seamless
  9217.       playing of long sounds.
  9218. SeeAlso: AH=84h,INT 15/AH=91h
  9219. --------s-1A84-------------------------------
  9220. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  9221.     AH = 84h
  9222. Return: ???
  9223. SeeAlso: AH=83h,AH=85h
  9224. --------s-1A85-------------------------------
  9225. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  9226.     AH = 85h
  9227.     ???
  9228. Return: ???
  9229. SeeAlso: AH=7Fh,AH=83h
  9230. --------c-1AA0-------------------------------
  9231. INT 1A U - Disk Spool II v2.07+ - INSTALLATION CHECK
  9232.     AH = A0h
  9233. Return: AH = B0h if installed
  9234.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  9235.         ES = code segment
  9236.         ES:BX -> name of current spool file
  9237.         ES:SI -> current despool file
  9238.         CL = 00h despooler is disabled
  9239.            = 41h despooler is enabled
  9240.         CH = 00h spooler is disabled
  9241.            = 41h spooler is enabled
  9242.         DL = 00h despooler is currently active printing a file
  9243.            = 41h despooler is standing by
  9244.         DH = 00h ???
  9245.            = 41h ???
  9246.         DI = 0000h ???
  9247.          0001h ???
  9248. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  9249.       Software Company
  9250. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9251.       as that is a licensed version of Disk Spool II
  9252. SeeAlso: AH=ABh,AH=C0h,AH=D0h,AH=E1h
  9253. --------c-1AAB-------------------------------
  9254. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  9255.     AH = ABh
  9256. Return:    AH = BAh if installed
  9257.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  9258.         ES = code segment
  9259.         ES:BX -> name of current spool file
  9260.         ES:SI -> current despool file
  9261.         CL = 00h despooler is disabled
  9262.            = 41h despooler is enabled
  9263.         CH = 00h spooler is disabled
  9264.            = 41h spooler is enabled
  9265.         DL = 00h despooler is currently active printing a file
  9266.            = 41h despooler is standing by
  9267.         DH = 00h ???
  9268.            = 41h ???
  9269.         DI = 0000h ???
  9270.          0001h ???
  9271. Program: Disk Spool II is a shareware disk-based print spooler by Budget
  9272.       Software Company
  9273. SeeAlso: AH=A0h,AH=ACh,AH=ADh,AH=E1h
  9274. --------c-1AAC-------------------------------
  9275. INT 1A U - Disk Spool II v1.83 - INSTALLATION CHECK
  9276.     AH = ACh
  9277. Return: (see AH=ABh)
  9278. Note:    this function is identical to AH=ABh
  9279. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  9280. --------c-1AAD-------------------------------
  9281. INT 1A U - Disk Spool II v1.83 - FUNCTION CALLS
  9282.     AH = ADh
  9283.     AL = function code
  9284.         02h enable spooler only
  9285.         03h enable the despooler
  9286.         04h disable the despooler
  9287.         08h inhibit popup menu
  9288.         09h enable popup menu
  9289.         0Ah ???
  9290.         0Bh disable the spooler
  9291.         0Ch start despooler after last successfully printed document???
  9292.         0Dh start despooler at the exact point where it last left off???
  9293.         0Eh pop up the menu
  9294.         0Fh ???
  9295.         11h ???
  9296.         14h ???
  9297.         15h ???
  9298.         16h ???
  9299.         17h ???
  9300.         18h ???
  9301.         19h ???
  9302.         20h clear file pointed to by the despooler???
  9303.         21h    ???
  9304.         22h    ???
  9305.         23h ???
  9306.         30h ???
  9307. Return: AH = 00h if successful
  9308. SeeAlso: AH=ABh
  9309. --------d-1AB001CX4D52-----------------------
  9310. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  9311.     AX = B001h
  9312.     CX = 4D52h ("MR")
  9313.     DX = 4349h ("CI")
  9314. Return: CX = 4943h ("IC") if installed
  9315.     DX = 524Dh ("RM") if installed
  9316.         ES:DI -> MRCINFO structure (see below)
  9317. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  9318.       be called first, as this call is used for the first, ROM-based
  9319.       MRCI server, while the other call is used for RAM-based servers
  9320.       which may be partially or entirely replacing a prior server
  9321. SeeAlso: INT 2F/AX=4A12h
  9322.  
  9323. Format of MRCINFO structure:
  9324. Offset    Size    Description
  9325.  00h  4 BYTEs    vendor signature
  9326.          "MSFT" Microsoft
  9327.  04h    WORD    server version (high=major)
  9328.  06h    WORD    MRCI specification version
  9329.  08h    DWORD    address of server entry point
  9330.  0Ch    WORD    bit flags: server capabilities (see below)
  9331.  0Eh    WORD    bit flags: hardware assisted capabilities (see below)
  9332.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  9333.  
  9334. Bitfields for capabilities:
  9335.  bit 0    standard compress
  9336.  bit 1    standard decompress
  9337.  bit 2    update compress
  9338.  bit 3    MaxCompress
  9339.  bit 4    reserved
  9340.  bit 5    incremental decompress
  9341.  bits 6-14 reserved
  9342.  bit 15    this structure is in ROM and can't be modified
  9343.      (server capabilities only)
  9344.  
  9345. Call MRCI entry point with:
  9346.     DS:SI -> MRCREQUEST structure (see below)
  9347.     CX = type of client (0000h application, 0001h file system)
  9348.     AX = operation
  9349.         0001h perform standard compression
  9350.         0002h perform standard decompression
  9351.         0004h perform update compression
  9352.         0008h perform MaxCompress
  9353.         0020h perform incremental decompression
  9354.     AX = FFFFh clear flags
  9355.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  9356. Return: AX = status
  9357.         0000h successful
  9358.         0001h invalid function
  9359.         0002h server busy, try again
  9360.         0003h destination buffer too small
  9361.         0004h incompressible data
  9362.         0005h bad compressed data format
  9363. Note:    MRCI driver may chain to a previous driver
  9364.  
  9365. Format of MRCREQUEST structure:
  9366. Offset    Size    Description
  9367.  00h    DWORD    pointer to source buffer
  9368.  04h    WORD    size of source buffer (0000h = 64K)
  9369.  06h    WORD    (UpdateCompress only)
  9370.          (call) offset in source buffer of beginning of changed data
  9371.         (return) offset in destination buffer of beginning of changed
  9372.             compressed data
  9373.  08h    DWORD    pointer to destination buffer
  9374.          must contain original compressed data for UpdateCompress
  9375.  0Ch    WORD    size of destination buffer (0000h = 64K)
  9376.          any compression: size of buffer for compressed data
  9377.          standard decompression: number of bytes to be decompressed
  9378.         incremental decompression: number of byte to decompress now
  9379.         (return) actual size of resulting data
  9380.  0Eh    WORD    client compressed data storage allocation size
  9381.  10h    DWORD    incremental decompression state data
  9382.          set to 00000000h before first incremental decompression call
  9383. Notes:    the source and destination buffers may not overlap
  9384.     the source and destination buffer sizes should normally be the same
  9385.     application should not update the contents of the MRCREQUEST structure
  9386.       between incremental decompression calls
  9387. --------c-1AC0-------------------------------
  9388. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  9389.     AH = C0h
  9390. Return: (see AH=A0h)
  9391. Notes:    this call is identical to AH=A0h
  9392.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9393.       as that is a licensed version of Disk Spool II
  9394. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  9395. --------c-1AD0-------------------------------
  9396. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  9397.     AH = D0h
  9398.     AL = function code
  9399.         01h enable spooler and despooler
  9400.         02h enable spooler only
  9401.         03h enable despooler at beginning of file
  9402.         04h disable the despooler
  9403.         05h disable the despooler and spooler
  9404.         06h clear the spool file
  9405.         08h inhibit the popup menu
  9406.         09h enable the popup menu
  9407.         0Ah ??? (called by Disk Spool's INT 21 handler)
  9408.         0Bh disable the spooler
  9409.         0Ch start despooler after last successfully printed document
  9410.         0Dh start despooler at the exact point where it last left off
  9411.         0Eh pop up the menu
  9412.         0Fh ???
  9413.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  9414.             when a program terminates)
  9415.         14h ???
  9416.         15h delete despool file and reset ???
  9417.         16h ??? (writes something to unknown file)
  9418.         17h ??? (writes something to despool file, then reads something
  9419.             else and ???)
  9420.         18h ??? (reads something from despool file, and then ???)
  9421.         19h ??? (creates/truncates spool file)
  9422.         20h clear file pointed to by the despooler
  9423.         21h ??? (writes something to unknown file)
  9424.         22h ??? (writes something to spool file if spooler/despooler using
  9425.             same file)
  9426.         23h ??? (opens/creates unknown file, then ???)
  9427.         30h ???
  9428.         31h ???
  9429.         32h beep
  9430.         33h append CRLF to spool file???
  9431.         34h ???
  9432.         35h ???
  9433.         36h ???
  9434.         37h append CRLF to spool file and start a new spool file???
  9435.         38h ???
  9436.         40h ??? (v4.05)
  9437.         41h ??? (v4.05)
  9438.         51h ??? (called by Disk Spool's INT 21 handler)
  9439.         52h ??? (called by Disk Spool's INT 21 handler)
  9440.         57h ???
  9441.         5Ah ??? (v4.05)
  9442.         5Bh ??? (v4.05)
  9443.         5Ch ??? (v4.05)
  9444. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9445.       as that is a licensed version of Disk Spool II
  9446. SeeAlso: AH=A0h,AH=ADh
  9447. --------c-1AE0-------------------------------
  9448. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  9449.     AH = E0h
  9450.     AL = subfunction
  9451.         01h enable spooler
  9452.         02h disable spooler
  9453.         03h enable despooler
  9454.         04h disable despooler
  9455.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9456. Return: AH = status
  9457.         00h successful
  9458.         F0h printer port not managed by Disk Spool II
  9459.         FFH failed
  9460. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9461.       as that is a licensed version of Disk Spool II
  9462. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  9463. --------c-1AE1-------------------------------
  9464. INT 1A - Disk Spool II v4.0x - GET STATUS
  9465.     AH = E1h
  9466.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9467. Return: AH = status
  9468.         00h successful
  9469.         CL = despooler state (00h disabled, 41h enabled)
  9470.         CH = spooler state (00h disabled, 41h enabled)
  9471.         DL = despooler activity (00h standing by, 41h printing)
  9472.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  9473.             or AutoDespool enabled)
  9474.         ES:SI -> ASCIZ name of current despool file
  9475.         ES:DI -> 3-byte file extension used by Disk Spool II
  9476.         F0h printer port not managed by Disk Spool II
  9477. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9478.       as that is a licensed version of Disk Spool II
  9479. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  9480. --------c-1AE2-------------------------------
  9481. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  9482.     AH = E2h
  9483.     AL = which
  9484.         01h first
  9485.         02h next (can only call after "first")
  9486.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9487. Return: AH = status
  9488.         00h successful
  9489.         ES:BX -> ASCIZ filename
  9490.         F0h no (more) spool files
  9491.         FFh failed
  9492. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9493.       as that is a licensed version of Disk Spool II
  9494. SeeAlso: AH=E0h,AH=E1h
  9495. --------c-1AE301-----------------------------
  9496. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  9497.     AX = E301h
  9498.     ES:BX -> ASCIZ filename (max 32 chars)
  9499. Return: AH = status
  9500.         00h successful
  9501.         ES:SI -> spool file status record (see below)
  9502.         F0h not a spool file
  9503.         FFh failed
  9504. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9505.       as that is a licensed version of Disk Spool II
  9506. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  9507.  
  9508. Format of spool file status record:
  9509. Offset    Size    Description
  9510.  00h    BYTE    hour of creation or last update
  9511.  01h    BYTE    minute of creation or last update
  9512.  02h    BYTE    year-1980 of creation or last update
  9513.  03h    BYTE    month of creation or last update
  9514.  04h    BYTE    day of creation or last update
  9515.  05h    BYTE    total number of copies to print
  9516.  06h    BYTE    number of copies already printed
  9517.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9518.  08h    BYTE    save status (00h delete after printing, 01h save)
  9519.  09h    BYTE    file status
  9520.           01h done printing, but being saved
  9521.         02h on hold
  9522.         03h queued for printing
  9523.         04h being spooled
  9524.         05h being despooled (i.e. printed)
  9525.  0Ah 16 BYTEs    ASCIZ description
  9526.  1Ah  2 WORDs    file size in bytes (high,low)
  9527.  1Eh  2 WORDs    bytes left to print (high,low)
  9528. --------c-1AE302-----------------------------
  9529. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  9530.     AX = E302h
  9531.     ES:BX -> ASCIZ filename (max 32 chars)
  9532.     ES:SI -> spool file status record (see AX=E301h)
  9533. Return: AH = status
  9534.         00h successful
  9535.         F0h not a spool file
  9536.         FFh failed
  9537. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9538.       as that is a licensed version of Disk Spool II
  9539. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  9540. --------c-1AE401-----------------------------
  9541. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  9542.     AX = E401h
  9543.     ES:BX -> ASCIZ filename (max 32 chars)
  9544.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9545. Return: AH = status
  9546.         00h successful
  9547.         FFh failed
  9548. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9549.       as that is a licensed version of Disk Spool II
  9550. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  9551. --------c-1AE402-----------------------------
  9552. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  9553.     AX = E402h
  9554.     ES:BX -> ASCIZ filename (max 32 chars)
  9555.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  9556. Return: AH = status
  9557.         00h successful
  9558.         FFh failed
  9559. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9560.       as that is a licensed version of Disk Spool II
  9561. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  9562. --------c-1AE5-------------------------------
  9563. INT 1A U - Emulaser ELSPL.COM - ???
  9564.     AH = E5h
  9565.     ???
  9566. Return: ???
  9567. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  9568.       as part of Vertisoft's Emulaser PostScript emulator
  9569. SeeAlso: AH=A0h,INT 17/AH=03h
  9570. --------c-1AEE-------------------------------
  9571. INT 1A U - Disk Spool II v4.05 - ???
  9572.     AH = EEh
  9573.     AL = printer port???
  9574.     ???
  9575. Return: ???
  9576. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  9577.       as that is a licensed version of Disk Spool II
  9578. SeeAlso: AH=E1h
  9579. --------U-1AF7-------------------------------
  9580. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  9581.     AH = F7h
  9582. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  9583.       time to correct for clock drift
  9584. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  9585.       version 1.1, but F7h is the function called by transient portion
  9586. SeeAlso: AH=F8h,AH=FFh"RighTime"
  9587. --------U-1AF8-------------------------------
  9588. INT 1A - RighTime v1.1 - ENABLE
  9589.     AH = F8h
  9590. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  9591.       time to correct for clock drift
  9592. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  9593.       TeSseRact program identifier based on its current state: "RighTime"
  9594.       when enabled, "RighTim"F7h when disabled.
  9595. SeeAlso: AH=F7h,AH=FFh"RighTime"
  9596. --------b-1AFE-------------------------------
  9597. INT 1A - AT&T 6300 - READ TIME AND DATE
  9598.     AH = FEh
  9599. Return: BX = day count (0 = Jan 1, 1984)
  9600.     CH = hour
  9601.     CL = minute
  9602.     DH = second
  9603.     DL = hundredths
  9604. SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  9605. --------b-1AFF-------------------------------
  9606. INT 1A - AT&T 6300 - SET TIME AND DATE
  9607.     AH = FFh
  9608.     BX = day count (0 = Jan 1, 1984)
  9609.     CH = hour
  9610.     CL = minute
  9611.     DH = second
  9612.     DL = hundredths
  9613. Return: ???
  9614. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  9615. --------U-1AFF-------------------------------
  9616. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  9617.     AH = FFh
  9618. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  9619.       time to correct for clock drift
  9620. Note:    upon being permanently disabled, RighTime closes the file handle
  9621.       referencing its executable (which is updated with time correction
  9622.       information every two minutes while RighTime is enabled).
  9623. --------s-1AFF00-----------------------------
  9624. INT 1A - SND - INSTALLATION CHECK???
  9625.     AX = FF00h
  9626. Return: AL = version??? (02h)
  9627.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  9628. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  9629.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  9630.       command set
  9631. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  9632. --------s-1AFF01-----------------------------
  9633. INT 1A - SND - PAUSE
  9634.     AX = FF01h
  9635.     DX = number of clock ticks to delay
  9636. Return:    AH = status
  9637.         00h successful
  9638.         01h SND busy
  9639. Notes:    if successful, execution returns to the caller after the delay expires;
  9640.       if SND is busy, execution returns immediately
  9641.     the IC v2.0 implementation of this API makes no special allowance for
  9642.       time rollover at midnight, which can cause the delay to be over one
  9643.       hour if this function is called just before the BIOS time count
  9644.       rolls over and the delay extends into the next day
  9645. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  9646. SeeAlso: INT E0/CL=BDh
  9647. --------s-1AFF02-----------------------------
  9648. INT 1A - SND - START SOUND
  9649.     AX = FF02h
  9650.     DX = frequency in Hertz (14h-FFFFh)
  9651. Return: AH = status
  9652.         00h successful
  9653.         01h SND busy
  9654. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  9655. --------s-1AFF03-----------------------------
  9656. INT 1A - SND - STOP SOUND
  9657.     AX = FF03h
  9658. Return: AH = status
  9659.         00h successful
  9660.         01h busy
  9661. Note:    turns off any sound currently being emitted by the PC's speaker unless
  9662.       SND is currently busy processing an API call (this includes
  9663.       background music).  Use AX=FF05h to stop the sound even if an API
  9664.       call is in progress.
  9665. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  9666. --------s-1AFF04-----------------------------
  9667. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  9668.     AX = FF04h
  9669.     DS:DX -> ASCIZ music string
  9670. Return: AH = status
  9671.         00h successful (music begins playing in background)
  9672.         01h busy
  9673. Note:    the music string accepted by SND is not the same as that accepted by
  9674.       BASIC and other programs which process music strings
  9675. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  9676. --------s-1AFF05-----------------------------
  9677. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  9678.     AX = FF05h
  9679. Return: AH = 00h (successful)
  9680. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  9681.       SND is currently busy, such as playing background music
  9682. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  9683. ---------------------------------------------
  9684.