home *** CD-ROM | disk | FTP | other *** search
/ Mega CD-ROM 1 / megacd_rom_1.zip / megacd_rom_1 / DESQVIEW / DVINT28.ZIP / DVINT.LST next >
File List  |  1991-11-17  |  124KB  |  3,058 lines

  1. DESQview/QEMM Interrupt List    Release 28 (v91.5)    Last change 11/17/91
  2. This compilation is Copyright (c) 1989, 1990, 1991 Ralf Brown
  3. ---------------------------------------------
  4. This file is an extract of the full MSDOS interrupt list, distributed as
  5. INTER28A, INTER28B, and INTER28C.
  6.  
  7. If you notice any mistakes or omissions, please let me know!  It is only with
  8. YOUR help that the list can continue to grow at the current rate.  Please send
  9. all changes to me rather than distributing a modified version of the list.
  10.  
  11. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  12. that they have already been addressed.
  13.  
  14.      Ralf Brown
  15.  
  16. ARPA: ralf@cs.cmu.edu
  17. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  18. BIT:  ralf%cs.cmu.edu@cmuccvma
  19. FIDO: Ralf Brown 1:129/26.1 or 1:129/53
  20.     or post a message to me in the DR_DEBUG echo
  21. CIS:  >INTERNET:ralf@cs.cmu.edu 
  22.  
  23. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  24. because of bad return paths.  If you don't get a response from me within a
  25. reasonable period of time, send it again with a better return path (starting at
  26. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  27. ---------------------------------------------
  28. See INTERRUP.1ST for the key to system abbreviations and a list of the
  29. trademarks mentioned here.
  30. ---------------------------------------------
  31. DISCLAIMER:  THIS MATERIAL IS PROVIDED "AS IS".     I verify the information
  32. contained in this list to the best of my ability, but I cannot be held
  33. responsible for any problems caused by use or misuse of the information,
  34. especially for those functions not officially  documented.  If it is marked
  35. "internal", you should check it carefully to make sure it works the same
  36. way in your version of the software (and please let me know whether or not
  37. it works the same way).     Information marked with "???" is known to be
  38. incomplete or guesswork.
  39. ---------------------------------------------
  40. The use of -> instead of = signifies that the indicated register or register
  41. pair contains a pointer to the specified item, rather than the item itself
  42. ----------1000-------------------------------
  43. INT 10 - VIDEO - SET VIDEO MODE
  44.     AH = 00h
  45.     AL = mode (see below)
  46. Return: AL = video mode flag (Phoenix BIOS)
  47.         20h mode > 7
  48.         30h modes <= 7 except mode 6
  49.         3Fh mode 6
  50.     AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
  51. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  52.       (EGA or higher only)
  53.     the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond
  54.       SpeedSTAR VGA, Groundhog Graphics Shadow VGA
  55. SeeAlso: AX=0070h,AX=007Eh,AX=10F0h,AX=6F05h,AH=FFh"GO32",INT 5F/AH=00h
  56.  
  57. Values for video mode:
  58.       text/ text pixel     pixel    colors    disply    scrn  system
  59.       grph resol  box    resoltn        pages    addr
  60.  00h = T   40x25  8x8        16gray       8    B800 CGA,PCjr
  61.      = T   40x25  8x14        16gray       8    B800 EGA
  62.      = T   40x25  8x16          16       8    B800 MCGA
  63.      = T   40x25  9x16          16       8    B800 VGA
  64.  01h = T   40x25  8x8          16       8    B800 CGA,PCjr
  65.      = T   40x25  8x14          16       8    B800 EGA
  66.      = T   40x25  8x16          16       8    B800 MCGA
  67.      = T   40x25  9x16          16       8    B800 VGA
  68.  02h = T   80x25  8x8        16gray       4    B800 CGA,PCjr
  69.      = T   80x25  8x14        16gray       4    B800 EGA
  70.      = T   80x25  8x16          16       4    B800 MCGA
  71.      = T   80x25  9x16          16       4    B800 VGA
  72.  03h = T   80x25  8x8          16       4    B800 CGA,PCjr
  73.      = T   80x25  8x14          16       4    B800 EGA
  74.      = T   80x25  8x16          16       4    B800 MCGA
  75.      = T   80x25  9x16          16       4    B800 VGA
  76.  04h = G   40x25  8x8    320x200       4        B800 CGA,PCjr,EGA,MCGA,VGA
  77.  05h = G   40x25  8x8    320x200     4gray        B800 CGA,PCjr,EGA
  78.      = G   40x25  8x8    320x200       4        B800 MCGA,VGA
  79.  06h = G   80x25  8x8    640x200       2        B800 CGA,PCjr,EGA,MCGA,VGA
  80.  07h = T   80x25  9x14         mono      var    B000 MDA,Hercules,EGA
  81.      = T   80x25  9x16         mono        B000 VGA
  82.  08h = G   20x25  8x8    160x200      16             PCjr
  83.      = T  132x25  8x8          16        B800 ATI EGA/VGA Wonder **
  84.      = T  132x25  8x8         mono        B000 ATI EGA/VGA Wonder **
  85.      = G   90x43  8x8    720x352     mono        B000 Hercules + MSHERC.COM
  86.  09h = G   40x25  8x8    320x200      16             PCjr
  87.  0Ah = G   80x25  8x8    640x200       4             PCjr
  88.  0Bh =     reserved (used internally by EGA BIOS)
  89.  0Ch =     reserved (used internally by EGA BIOS)
  90.  0Dh = G   40x25  8x8    320x200      16       8    A000 EGA,VGA
  91.  0Eh = G   80x25  8x8    640x200      16       4    A000 EGA,VGA
  92.  0Fh = G   80x25  8x14    640x350     mono       2    A000 EGA,VGA
  93.  10h = G   80x25  8x14    640x350       4       2    A000 64k EGA
  94.      = G        640x350      16        A000 256k EGA,VGA
  95.  11h = G   80x30  8x16    640x480     mono        A000 VGA,MCGA,ATI EGA,ATI VIP
  96.  12h = G   80x30  8x16    640x480 16/256k        A000 VGA,ATI VIP
  97.      = G   80x30  8x16    640x480     16/64        A000 ATI EGA Wonder
  98.      = G        640x480      16             UltraVision+256K EGA
  99.  13h = G   40x25  8x8    320x200 256/256k    A000 VGA,MCGA,ATI VIP
  100.  21h = G   80x43  8x8    720x348     mono        B000 DESQview 2.x+Hercules ***
  101.  22h = G   80x43  8x8    720x348     mono        B800 DESQview 2.x+Hercules ***
  102.  
  103.  *** DESQview intercepts calls to change into these two modes (21h is page 0,
  104.       22h is page 1) even if there is no Hercules graphics board installed
  105. ----------1080--DX4456-----------------------
  106. INT 10 - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER
  107.     AH = 80h
  108.     DX = 4456h ('DV')
  109.     ES:DI -> FAR subroutine to be called on ???
  110. Return: DS = segment of DESQview data structure for video buffer
  111. Note:    this function is probably meant for internal use only, due to the magic
  112.       value required in DX
  113.     the subroutine seems to be called when the DESQview menu is accessed;
  114.       on entry, AL = 03h or 04h
  115. ----------1081--DX4456-----------------------
  116. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET ???
  117.     AH = 81h
  118.     DX = 4456h ('DV')
  119. Return: ES = segment of DESQview data structure for video buffer
  120.         BYTE ES:[0] = current window number in DV 2.0x
  121. Note:    this function is probably meant for internal use only, due to the magic
  122.       value required in DX
  123. SeeAlso: AH=82h
  124. ----------1082--DX4456-----------------------
  125. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO
  126.     AH = 82h
  127.     DX = 4456h ('DV')
  128. Return: DS = segment in DESQview for data structure
  129.          in DV 2.00,
  130.           BYTE DS:[0] = window number
  131.           WORD DS:[1] = segment of other data structure
  132.           WORD DS:[3] = segment of window's object handle
  133.     ES = segment of DESQview data structure for video buffer
  134.     AL = current window number
  135.     AH = ???
  136.     BL = direct screen writes
  137.         00h program does not do direct writes
  138.         01h program does direct writes, so shadow buffer not usable
  139.     BH = ???
  140.     CL = current video mode
  141.     CH = ???
  142. Note:    this function is probably meant for internal use only, due to the magic
  143.       value required in DX
  144. SeeAlso: AH=81h
  145. ----------10FE------------------------------
  146. INT 10 - TopView - GET SHADOW BUFFER
  147.     AH = FEh
  148.     ES:DI -> assumed video buffer (B800h:0000h color, B000h:0000h mono)
  149. Return: ES:DI -> actual video buffer for calling process
  150. Notes:    if no multitasker is installed, ES:DI is returned unchanged
  151.     TopView requires a call to AH=FFh to notify it that the screen has
  152.       changed; DESQview will check for changes itself until the first call
  153.       to AH=FFh
  154. SeeAlso: AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
  155. ----------10FF-------------------------------
  156. INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
  157.     AH = FFh
  158.     CX = number of consecutive changed characters
  159.     ES:DI -> first changed character in shadow buffer
  160. Notes:    avoid CX=0000h
  161.     DESQview will discontinue the automatic screen updating initiated by
  162.       AH=FEh after this call
  163. SeeAlso: AH=FEh
  164. ----------151000-----------------------------
  165. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  166.     AX = 1000h
  167. Return: after other processes run
  168. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  169.       the current time-slice is set to expire at the next clock tick rather
  170.       than immediately
  171. SeeAlso: AH=00h"MultiDOS",INT 21/AH=EEh"DoubleDOS",INT 2F/AX=1680h
  172. SeeAlso: INT 7F/AH=E8h
  173. ----------151001-----------------------------
  174. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  175.     AX = 1001h
  176.     BX = number of bytes to allocate
  177. Return: ES:DI -> block of memory or 0000h:0000h (DV 2.26+)
  178. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  179.       common memory
  180. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  181. ----------151002-----------------------------
  182. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  183.     AX = 1002h
  184.     ES:DI -> previously allocated block
  185. Return: block freed
  186. SeeAlso: AX=1001h,AX=DE0Dh
  187. ----------151003-----------------------------
  188. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  189.     AX = 1003h
  190.     BH = attribute
  191.     BL = character
  192.     DX = segment of object handle for window
  193. Note:    BX=0 does not display anything, it only positions the hardware cursor
  194. ----------1510-------------------------------
  195. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  196.     AH = 10h
  197.     AL = 04h thru 12h
  198. Return: pops up "Programming error" window in DV 2.x
  199. ----------151013-----------------------------
  200. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  201.     AX = 1013h
  202.     ES:DI -> FAR service routine
  203. Return: BX = bit mask indicating which bit was allocated
  204.          0000h if no more bits available
  205. SeeAlso: AX=1014h,AX=1015h
  206. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  207.       interrupt; if other calls need to be made, the interrupt handler
  208.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  209. ----------151014-----------------------------
  210. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  211.     AX = 1014h
  212.     BX = bit mask from INT 15/AX=1013h
  213. SeeAlso: AX=1013h,AX=1015h
  214. ----------151015-----------------------------
  215. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  216.     AX = 1015h
  217.     BX = bit mask for interrupts to post
  218. Return: indicated routines will be called: (DV 2.0x) at next task switch
  219.                        (DV 2.2x) immediately
  220. SeeAlso: AX=1013h,AX=1014h
  221. Notes:    this is one of the few TopView calls which are allowed from a hardware
  222.       interrupt handler
  223.     the handler will be called with ES containing the segment of the handle
  224.       of the next task to be executed; on return, ES must be the segment of
  225.       a task handle
  226. ----------151016-----------------------------
  227. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  228.     AX = 1016h
  229.     ES:DI = possible object handle
  230. Return: BX = FFFFh if ES:DI is a valid object handle
  231.          0000h if ES:DI is not
  232. SeeAlso: AX=DE14h
  233. ----------151017-----------------------------
  234. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  235.     AX = 1017h
  236. Return: pops up "Programming error" window in DV 2.x
  237. ----------151018-----------------------------
  238. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  239.     AX = 1018h
  240.     BH = column
  241.     BL = row
  242.     ES = segment of object handle for window below which to search
  243.          0000h = start search with topmost window
  244. Return: ES = segment of object handle for window which is visible at the
  245.            indicated position, or covered by indicated window
  246.        = 0000h no window
  247. SeeAlso: AX=1023h,AX=1024h
  248. ----------151019-----------------------------
  249. INT 15 - TopView - "SOUND" - MAKE TONE
  250.     AX = 1019h
  251.     BX = frequency in Hertz (0000h = silence)
  252.     CX = duration in clock ticks (18.2 ticks/sec)
  253. Return: immediately, tone continues to completion
  254. Notes:    if another tone is already playing, the new tone does not start until
  255.       completion of the previous one.  Up to 32 tones may be queued before
  256.       the process is blocked until a note completes.
  257.     in DV 2.00, the lowest tone allowed is 20 Hz
  258.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  259.       notes are also cancelled
  260. SeeAlso: INT 16/AH=73h
  261. ----------15101A-----------------------------
  262. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  263.     AX = 101Ah
  264. Return: stack switched
  265. Notes:    this call may not be nested; a second call must be preceded by a call
  266.       to "USTACK" (AX=1025h)
  267.     while TopView requires many API calls to be executed while on the
  268.       task's internal stack, DESQview allows those calls to be executed
  269.       regardless of the current stack
  270. SeeAlso: AX=1025h
  271. ----------15101B-----------------------------
  272. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  273.     AX = 101Bh
  274. Return: task-switching temporarily disabled
  275. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  276.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  277.       will again be disabled)
  278.     suspends the caller until DOS is free
  279. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  280. ----------15101C-----------------------------
  281. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  282.     AX = 101Ch
  283. Return: task-switching enabled
  284. Note:    this API call may be made from within a hardware interrupt handler
  285. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h
  286. ----------15101D-----------------------------
  287. INT 15 - TopView - "STOP" - STOP TASK
  288.     AX = 101Dh
  289.     ES = segment of object handle for task to be stopped
  290.          (== handle of main window for that task)
  291. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  292. Note:    once a task has been stopped, additional "STOP"s are ignored
  293. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  294.       current task
  295. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX"
  296. ----------15101E-----------------------------
  297. INT 15 - TopView - "START" - START TASK
  298.     AX = 101Eh
  299.     ES = segment of object handle for task to be started
  300.          (== handle of main window for that task)
  301. Return: indicated task is started up again
  302. Note:    once a task has been started, additional "START"s are ignored
  303. SeeAlso: AX=101Dh,AX=102Bh
  304. ----------15101F-----------------------------
  305. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  306.     AX = 101Fh
  307.     BX = bit fields
  308.          bits 0-12: number of characters to display
  309.          bits 13,14: which mouse button may be pressed to remove window
  310.              00 = either
  311.              01 = left
  312.              10 = right
  313.              11 = either
  314.          bit 15: beep if 1
  315.     DS:DI -> text of message
  316.     CH = width of error window (0 = default)
  317.     CL = height of error window (0 = default)
  318.     DX = segment of object handle
  319. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  320. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  321. ----------151020-----------------------------
  322. INT 15 - TopView - UNIMPLEMENTED IN DV 2.00+
  323.     AX = 1020h
  324. Return: pops up "Programming error" window in DV 2.00+
  325. ----------151021-----------------------------
  326. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  327.     AX = 1021h
  328.     BX = segment of object handle for task to interrupt (not self)
  329.     DX:CX -> FAR routine to jump to next time task is run
  330. Return: nothing
  331. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  332.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  333.       needs to be preserved
  334.     multiple PGMINTs to a single task are processed last-in first-out
  335.     if the other task is in a DOS or DV API call, the interruption will
  336.       occur on return from that call
  337. ----------151022BX0000-----------------------
  338. INT 15 - TopView - "GETVER" - GET VERSION
  339.     AX = 1022h
  340.     BX = 0000h
  341. Return: BX nonzero, TopView or compatible loaded
  342.     (BL = major version, BH = minor version)
  343. Notes:    TaskView returns BX = 0001h, DESQview 2.0+ returns BX = 0A01h
  344. ----------151023-----------------------------
  345. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  346.     AX = 1023h
  347.     BX = segment of object handle for parent window within which to
  348.          position the window (0 = full screen)
  349.     ES = segment of object handle for window to be positioned
  350.     DL = bit flags
  351.          bits 0,1: horizontal position
  352.         00 = current
  353.         01 = center
  354.         10 = left
  355.         11 = right
  356.          bits 2,3: vertical position
  357.         00 = current
  358.         01 = center
  359.         10 = top
  360.         11 = bottom
  361.          bit 4: don't redraw screen if set
  362.          bits 5-7 not used
  363.     CH = number of columns to offset from position specified by DL
  364.     CL = number of rows to offset from position specified by DL
  365. Return: nothing
  366. ----------151024-----------------------------
  367. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  368.     AX = 1024h
  369.     BX = segment of object handle for window
  370.           (0 = use default)
  371. Return: ES:DI -> virtual screen
  372.     CX = size of virtual screen in bytes
  373.     DL = 00h text screen
  374.          01h graphics screen
  375. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  376. ----------151025-----------------------------
  377. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  378.     AX = 1025h
  379. Return: stack switched back
  380. Notes:    call only after having switched to internal stack with AX=101Ah
  381.     while TopView requires many API calls to be executed while on the
  382.       task's private stack, DESQview allows those calls to be executed
  383.       regardless of the current stack
  384. SeeAlso: AX=101Ah
  385. ----------1510-------------------------------
  386. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  387.     AH = 10h
  388.     AL = 26h thru 2Ah
  389. Return: pops up "Programming error" window in DV 2.x
  390. ----------15102B-----------------------------
  391. INT 15 - DESQview 2.0+ (TopView???) - "POSTTASK" - AWAKEN TASK
  392.     AX = 102Bh
  393.     BX = segment of object handle for task
  394. Return: nothing
  395. Note:    forces a task which is waiting on its objectq to continue by placing
  396.       the handle for the task on the objectq
  397. SeeAlso: AX=101Dh,AX=101Eh
  398. ----------15102C-----------------------------
  399. INT 15 - DESQview 2.0+ (TopView???) - START NEW APPLICATION IN NEW PROCESS
  400.     AX = 102Ch
  401.     ES:DI -> contents of .PIF/.DVP file (see below)
  402.     BX = size of .PIF/.DVP info
  403. Return: BX = segment of object handle for new task
  404.          0000h on error
  405.  
  406. Format of .PIF/.DVP file:
  407. Offset    Size    Description
  408.  00h    BYTE    reserved (0)
  409.  01h    BYTE    checksum of bytes 02h through 170h
  410.  02h 30 BYTEs    blank-padded program title
  411.  20h    WORD    maximum memory to allocate to partition in K
  412.  22h    WORD    minimum memory required in K
  413.  24h 64 BYTEs    ASCIZ program pathname
  414.  64h    BYTE    default drive letter ('A',...)
  415.  65h 64 BYTEs    ASCIZ default directory name
  416.  A5h 64 BYTEs    ASCIZ program parameters
  417.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  418.  E6h    BYTE    number of text pages used
  419.  E7h    BYTE    number of first interrupt to save
  420.  E8h    BYTE    number of last interrupt to save
  421.  E9h    BYTE    rows in virtual screen buffer
  422.  EAh    BYTE    columns in virtual screen buffer
  423.  EBh    BYTE    initial window position, row
  424.  ECh    BYTE    initial window position, column
  425.  EDh    WORD    system memory in K
  426.  EFh 64 BYTEs    ASCIZ shared program name
  427. 12Fh 64 BYTEs    ASCIZ shared program data file
  428. 16Fh    BYTE    flags1
  429.         bit 7: writes text directly to screen
  430.         bit 6: runs in foreground only
  431.         bit 5: uses math coprocessor
  432.         bit 4: accesses system keyboard buffer directly
  433.         bits 3-1: reserved (0)
  434.         bit 0: swappable
  435. 170h    BYTE    flags2
  436.         bit 6: uses command-line parameters in field at A5h
  437.         bit 5: swaps interrupt vectors
  438. ---information unique to .DVP files---
  439. 171h  2 BYTEs    keys to use on open menu
  440. 173h    WORD    size of script buffer in bytes
  441. 175h    WORD    automatically give up CPU after this many tests for keyboard
  442.         input in one clock tick (default 0 = never)
  443. 177h    BYTE    nonzero = "uses own colors"
  444. 178h    BYTE    nonzero if application swappable
  445. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  446.         in actual .DVP files, frequently 01h
  447. 17Ch    BYTE    nonzero to automatically close on exit
  448. 17Dh    BYTE    nonzero if copy-protect floppy is required
  449. ---information unique to DESQview 2.0+---
  450. 17Eh    BYTE    .DVP version number
  451.         00h DESQview 1.2+
  452.         01h DESQview 2.0+
  453.         02h DESQview 2.2+
  454. 17Fh    BYTE    reserved (0)
  455. 180h    BYTE    initial number of rows in physical window
  456. 181h    BYTE    initial number of columns in physical window
  457. 182h    WORD    maximum expanded memory to allow, in K
  458. 184h    BYTE    flags3
  459.         bit 7: automatically assign window position
  460.         bit 5: maximum memory value has been specified
  461.         bit 4: disallow "Close" command
  462.         bit 3: foreground-only when doing graphics
  463.         bit 2: don't virtualize
  464.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  465. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  466. 186h    BYTE    number of graphics pages used
  467. 187h    WORD    extra system memory size
  468. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  469. ---information unique to DESQview 2.2+---
  470. 18Ah    BYTE    serial port usage
  471.         FFh uses all serial ports
  472.         00h no serial ports
  473.         01h only COM1
  474.         02h only COM2
  475. 18Bh    BYTE    flags4
  476.         bit 7: automatically close application on exit if .COM or .EXE
  477.             specified
  478.         bit 6: swappable if not using serial ports
  479.         bit 5: start program with window hidden (v2.26+)
  480.         bit 4: start program in background (v2.26+)
  481.         bit 3: virtualize text
  482.         bit 2: virtualize graphics
  483.         bit 1: share CPU when foreground
  484.         bit 0: share EGA when foreground and zoomed
  485. 18Ch    BYTE    protection level for 386 machines
  486. 18Dh 19 BYTEs    reserved (0)
  487. ----------15102D-----------------------------
  488. INT 15 - DESQview 2.0+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  489.     AX = 102Dh
  490.     BL = subfunction
  491.          00h determine whether using keyboard mouse
  492.         Return: BL = 00h using real mouse
  493.                  01h using keyboard mouse
  494.          01h turn keyboard mouse on
  495.          02h turn keyboard mouse off
  496. ----------15102E-----------------------------
  497. INT 15 - DESQview 2.40 - ALLOCATE ??? MEMORY
  498.     AX = 102Eh
  499.     BX = number of bytes
  500. Return: AX = status
  501.         0000h successful
  502.         ES = segment of allocated memory
  503.         0001h failed    
  504. ----------1511-------------------------------
  505. INT 15 - TopView commands
  506.     AH = 11h
  507.     AL = various (except 17h)
  508. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  509.       see those below
  510. SeeAlso: AH=DEh
  511. ----------151117BX0000-----------------------
  512. INT 15 - DESQview 2.2+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  513.     AX = 1117h
  514.     BX = 0000h    get current mapping context without setting
  515.          nonzero    set new mapping context
  516. Return: BX = mapping context in effect before call
  517.     interrupts enabled
  518. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  519.     mapping contexts determine conventional-memory addressability; setting
  520.       a mapping context ensures that the associated program and data areas
  521.       are in memory for access.  Usable by drivers, TSRs and shared
  522.       programs.
  523.     caller need not be running under DESQview, but must ensure that the
  524.       stack in use will not be mapped out by the call
  525. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  526. ----------1511DE-----------------------------
  527. INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
  528.     AX = 11DEh
  529. Return: CF clear if installed
  530.         AX = segment at which XDV is located
  531. ----------1512--BH00-------------------------
  532. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  533.     AH = 12h
  534.     BH = 00h
  535.     BL = which handle to return
  536.         00h handle in DWORD on top of stack
  537.         01h current task's window handle
  538.         02h given task's mailbox handle (task's handle on stack)
  539.         03h current task's mailbox handle
  540.         04h given task's keyboard handle (task's handle on stack)
  541.         05h current task's keyboard object handle
  542.         06h given task's OBJECTQ handle (task's handle on stack)
  543.         07h current task's OBJECTQ handle
  544.         08h      \
  545.           thru > return 0000:0000 under DV < 2.26
  546.         10h      /
  547.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  548.         0Dh (2.26+) task handle of owner (parent) of current task
  549. Return: DWORD on top of stack is object handle
  550. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  551.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  552.       window)
  553. ----------1512--BH01-------------------------
  554. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  555.     AH = 12h
  556.     BH = 01h
  557.     BL = object type to create
  558.         00h (DV 2.0x only) handle is DWORD on top of stack
  559.         01h (DV 2.0x only) use task's window handle
  560.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  561.         03h (DV 2.0x only) current task's mailbox
  562.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  563.         05h (DV 2.0x only) current task's keyboard object
  564.         08h WINDOW class
  565.         09h MAILBOX class
  566.         0Ah KEYBOARD class
  567.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  568.         0Fh POINTER object
  569.         10h PANEL object
  570.     STACK: (if window object or WINDOW class)
  571.            DWORD address to jump to (no new task if high word == 0)
  572.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  573.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  574.            DWORD bytes system memory for input buffer for READ/READN
  575.             (0 == none, -1 == default--same as logical window size)
  576.            DWORD window size, columns
  577.            DWORD window size, rows
  578.            DWORD length of window title
  579.            DWORD address of window title
  580. Return: DWORD on top of stack is new object handle
  581. Notes:    if a new task is created, it is started with
  582.       AX = BX = SI = DI = BP = 0
  583.       DX:CX = handle of parent task
  584.       DS = ES = SS = segment of private stack (and new task's handle)
  585.     new windows are orphans, inherit the colors/hidden status of the
  586.       creating task's window, and are placed in the upper left hand corner
  587.       of the screen but not automatically redrawn
  588.     new keyboards are closed, and have all object bits cleared except for
  589.       the hardware cursor bit
  590. SeeAlso: AH=12h/BH=02h
  591. ----------1512--BH02-------------------------
  592. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  593.     AH = 12h
  594.     BH = 02h
  595.     BL = object
  596.         00h handle in DWORD on top of stack
  597.         window: close window and free
  598.         timer: free timer
  599.         panel: free panel object
  600.         pointer: free pointer
  601.         01h task's window handle - kills task, never returns
  602.         02h given task's mailbox (task's handle on top of stack)
  603.         03h current task's mailbox
  604.         04h given task's keyboard (task's handle on top of stack)
  605.         05h current task's keyboard object
  606. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  607.       task windows also free any mailbox, objectq, and panel objects held
  608.       by the task and any child tasks
  609.     if the keyboard being freed is the default keyboard for a task, this
  610.       call is equivalent to CLOSE
  611.     panel and pointer objects are automatically closed if open
  612. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh
  613. ----------1512--BH03-------------------------
  614. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  615.     AH = 12h
  616.     BH = 03h
  617.     BL = object
  618.         00h mailbox handle in DWORD on top of stack
  619.         02h sender of last msg read from mailbox (task's handle on stack)
  620.         03h sender of last msg read from current task's mailbox
  621. Return: DWORD on stack is task handle of message sender
  622. SeeAlso: AH=12h/BH=00h
  623. ----------1512--BH03-------------------------
  624. INT 15 - DESQview 2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  625.     AH = 12h
  626.     BH = 03h
  627.     BL = window to be connected
  628.         00h handle of window to be attached in DWORD on top of stack
  629.         01h attach current task's main window
  630.     STACK: DWORD handle of window to attach to or 00000000h to detach
  631. Return: ???
  632. Notes:    when two windows are connected, both will move if the user moves either
  633.     multiple windows may be attached to a single window, but each window
  634.       may only be attached to one window at a time
  635. ----------1512--BX0300-----------------------
  636. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  637.     AH = 12h
  638.     BX = 0300h
  639.     STACK: DWORD handle of panel object
  640. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  641.            DWORD address of directory
  642. Note:    a null string is returned if the object is not open
  643.  
  644. Format of panel file:
  645. Offset    Size    Description
  646.  00h  2 BYTEs    C0h C3h
  647.  02h    BYTE    number of panels in file
  648.  03h    for each panel in file:
  649.         8 BYTEs  blank-padded panel name
  650.           DWORD  panel offset in file
  651.           WORD   panel length
  652.     data for panels (each consists of one or more window/query/manager
  653.     streams)
  654.         first byte of each panel must be 1Bh, fifth byte must be E5h
  655. ----------1512--BH04-------------------------
  656. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  657.     AH = 12h
  658.     BH = 04h
  659.     BL = window to read from
  660.         00h handle is DWORD on top of stack
  661.         01h use calling task's default window
  662.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  663.         0Dh (DV 2.26+) default window of parent task of current task
  664. Return: STACK:    DWORD number of bytes read
  665.         DWORD address of buffer
  666. Notes:    reading starts at the current logical cursor position; the cursor is
  667.       updated to point at the character following the last one read
  668.     any translucent blanks (FFh) which are visible on screen are changed
  669.       to the character which is seen through them
  670.     the string produced by the read is placed in an input buffer which may
  671.       be reused by the next READ or READN of a window
  672.     window stream opcodes D8h and D9h determine whether the read returns
  673.       characters or attributes
  674. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h
  675. ----------1512--BH04-------------------------
  676. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  677.     AH = 12h
  678.     BH = 04h
  679.     BL = object
  680.         00h handle is DWORD on top of stack
  681.         mailbox: wait for and get next message
  682.         keyboard: wait for and get pointer to next input buffer
  683.         pointer: wait for and get next message
  684.         02h get next message from mailbox (task's handle on top of stack)
  685.         03h get next message from current task's mailbox
  686.         04h get the next input from keyboard (handle on top of stack)
  687.         05h get the next input from task's default keyboard
  688.         06h wait for input from any object in OBJECTQ (handle on stack)
  689.         07h wait for input from any object in task's default OBJECTQ
  690. Return: STACK: (if objectq) DWORD handle of object with input
  691.            (otherwise)  DWORD number of bytes
  692.                 DWORD address
  693. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  694.       containing the character code as returned by the BIOS; the BIOS scan
  695.       code is available via the STATUS call if the character is zero
  696.     for a keyboard in field mode, the input buffer format is determined
  697.       by the field table header for the window the keyboard is attached to
  698.     keyboard input buffers and mailbox message buffers may be invalidated
  699.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  700. SeeAlso: AH=12h/BH=05h"OBJECT"
  701.  
  702. Format of pointer message:
  703. Offset    Size    Description
  704.  00h    WORD    row
  705.  02h    WORD    column
  706.  04h    BYTE    status
  707.         bit 6: set when press/release mode active and button released
  708.         bits 7-2: number of clicks-1 if multiple-click mode active
  709.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  710.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  711. ----------1512--BX0400-----------------------
  712. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  713.     AH = 12h
  714.     BX = 0400h
  715.     STACK: DWORD timer's handle
  716. Return: after timer expires
  717.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  718. ----------1512--BX0400-----------------------
  719. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  720.     AH = 12h
  721.     BX = 0400h
  722.     STACK: DWORD handle of panel object
  723.            DWORD window's handle (or 0 for current task's window)
  724.            DWORD length of panel name
  725.            DWORD pointer to panel name
  726. Return: STACK: DWORD handle of keyboard or 0
  727.            DWORD handle of window which was used
  728. Notes:    status of APPLY may be checked with STATUS message
  729.     panel MUST have the following format
  730.       first byte must be 1Bh (i.e. must start with a stream)
  731.       first opcode in stream must be E5h
  732.         single byte arg of opcode is interpreted thus:
  733.           bits 7,6    11 means create new window
  734.             10 means create new field table for existing window
  735.             01 means use existing window and field table
  736.           bit 5 if set, panel contains a field table 
  737.             (creates a new keyboard and puts it in field mode)
  738.           bit 4 if set, panel contains input fields
  739.           bit 3 if set, panel contains select fields but no input fields
  740.     if the panel contains input or select fields, a keyboard handle is
  741.       returned; either the window's current open keyboard or a
  742.       newly-created keyboard object.  The caller should read that keyboard
  743.       to obtain input from the panel.
  744. ----------1512--BH05------------------------
  745. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  746.     AH = 12h
  747.     BH = 05h
  748.     BL = object
  749.         00h handle is DWORD on top of stack
  750.         timer: start timer to end at a specified time
  751.         keyboard: add input buffer to queue
  752.         pointer: move pointer icon to specified position
  753.         02h send message by value/status=0 to mbox (task's handle on stack)
  754.         03h send message by value/status=0 to current task's mailbox
  755.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  756.         05h add input buffer to task's default KEYBOARD queue
  757.         06h add an object to OBJECTQ (handle on top of stack)
  758.         07h add an object to task's default OBJECTQ
  759.     STACK: (if mailbox)  DWORD length
  760.                  DWORD address
  761.            (if keyboard) DWORD status (scan code in keystroke mode)
  762.                  DWORD length (should be 1 in keystroke mode)
  763.                  DWORD address
  764.            (if objectq)  DWORD handle of object to add
  765.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  766.                    only accurate to 1/18 sec)
  767.            (if pointer)  DWORD column relative to origin of window
  768.                  DWORD row relative to origin of window
  769. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  770.     the data and status written to a keyboard object must match the format
  771.       returned by the keyboard object in the current mode
  772.     the pointer position is scaled according to the current scaling factors
  773. SeeAlso: AH=12h/BH=04h
  774. ----------1512--BH05-------------------------
  775. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  776.     AH = 12h
  777.     BH = 05h
  778.     BL = window to write to
  779.         00h DWORD on top of stack is window handle
  780.         01h write string to task's default window
  781.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  782.         0Dh (DV 2.26+) default window of parent of current task
  783.     STACK: DWORD object handle if handle passed on stack
  784.            DWORD total length of string (high word == 0)
  785.            DWORD address of string to display
  786. Return: indicated actions performed
  787.     a. non-control characters are displayed (opcodes DEh and DFh control
  788.        whether the attributes are left or changed to the current attrib)
  789.     b. CR/LF/BS/Tab cause the usual cursor movement
  790.     c. ESC starts a data structure with additional commands if following
  791.        byte is less than 20h; otherwise, it is written to the window
  792.     STACK:    DWORD handle of new window if window stream opcode E6h
  793.         else nothing
  794.  
  795. Data Structure:
  796.     MAGIC  DB  1Bh
  797.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  798.     LENGTH DW  ?   ; length of remainder in bytes
  799.     var-length fields follow, each an OPCODE followed by
  800.          zero or more args
  801.  
  802. MODE 00h (set or display values) "WINDOW STREAM"
  803.     Opcodes:args
  804.     00h  display 20h blanks with the default attribute
  805.     01h-1Fh display OPCODE blanks with the default attribute
  806.     20h  display char with default attribute 20h times
  807.          BYTE char to repeat
  808.     21h-3Fh display char with default attribute OPCODE-20h times
  809.          BYTE char to repeat
  810.     40h  display 20h blanks with specified attribute
  811.          BYTE attribute of blanks
  812.     41h-5Fh display OPCODE-40h blanks with specified attribute
  813.          BYTE attribute of blanks
  814.     60h  display next 20h characters
  815.          20h BYTEs characters to display
  816.     61h-7Fh display next OPCODE-60h characters
  817.          N BYTEs characters to display
  818.     80h-87h     display N blanks with default attribute
  819.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  820.               [000h means 800h]
  821.     88h-8Fh display N copies of the character
  822.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  823.               [000h means 800h]
  824.          BYTE character to repeat
  825.     90h-97h     display N blanks with specified attribute
  826.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  827.               [000h means 800h]
  828.          BYTE attribute
  829.     98h-9FH     display string at logical cursor pos
  830.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  831.               [000h means 800h]
  832.          N BYTEs string to display
  833.     A0h  set logical cursor row
  834.          BYTE row number (0 is top)
  835.     A1h  set logical cursor column
  836.          BYTE column number (0 is leftmost)
  837.     A2h  set top edge of scrolling region
  838.          BYTE row
  839.     A3h  set left edge of scrolling region
  840.          BYTE column
  841.     A4h  set row of physical window position
  842.          BYTE line
  843.     A5h  set column of physical window position
  844.          BYTE column
  845.     A6h  set height of physical window
  846.          BYTE #rows
  847.     A7h  set width of physical window
  848.          BYTE #columns
  849.     A8h  set viewport row
  850.          BYTE row
  851.     A9h  set viewport column
  852.          BYTE column
  853.     AAh  set virtual screen height [contents of window unpredictable after]
  854.          BYTE rows
  855.     ABh  set virtual screen width [contents of window unpredictable after]
  856.          BYTE columns
  857.     ACh-AEh     unused
  858.     AFh  set compatible/preferred video modes
  859.          BYTE compatibility/preference mask
  860.         bit 7    compatible with monochrome
  861.         bit 6    compatible with color text, EGA/VGA graphics
  862.         bit 5    compatible with medium-resolution CGA graphics
  863.         bit 4    compatible with high-resolution CGA graphics
  864.         bit 3    prefer monochrome
  865.         bit 2    prefer color text, EGA/VGA graphics
  866.         bit 1    prefer medium-resolution CGA graphics
  867.         bit 0    prefer high-resolution CGA graphics
  868.     B0h  move logical cursor down
  869.          BYTE #rows (signed, negative values move up)
  870.             [if #rows=0 and hardware cursor owner, update hw crsr]
  871.     B1h  move logical cursor right
  872.          BYTE #cols (signed, negative values move left)
  873.             [if #cols=0 and hardware cursor owner, update hw crsr]
  874.     B2h  shift top edge of scrolling region
  875.          BYTE #rows (signed)
  876.     B3h  shift left edge of scrolling region
  877.          BYTE #cols (signed)
  878.     B4h  shift physical window down
  879.          BYTE #lines (signed)
  880.     B5h  shift physical window right
  881.          BYTE #columns (signed)
  882.     B6h  expand physical window vertically
  883.          BYTE #lines (signed)
  884.     B7h  expand physical window horizontally
  885.          BYTE #columns (signed)
  886.     B8h  adjust viewport row
  887.          BYTE #rows (signed)
  888.     B9h  adjust viewport column
  889.          BYTE #columns (signed)
  890.     BAh  adjust virtual screen height [contents of window unpredict after]
  891.          BYTE #rows to increase (signed)
  892.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  893.          BYTE #cols to increase (signed)
  894.     BCh-BFh     reserved (currently unused)
  895.     C0h  set logical cursor position
  896.          BYTE row number (0 is top border)
  897.          BYTE column number (0 is left border)
  898.     C1h  set top left corner of scrolling region
  899.          BYTE row
  900.          BYTE column
  901.     C2h  set physical window pos
  902.          BYTE upper left row (no top border if 0)
  903.          BYTE upper left column (no left border if 0)
  904.     C3h  set current window size
  905.          BYTE #rows
  906.          BYTE #cols
  907.     C4h  set upper left corner of viewport (portion of virtual screen
  908.          displayed in window)
  909.          BYTE row
  910.          BYTE column
  911.     C5h  set size of virtual screen [contents unpredictable afterwards]
  912.          BYTE #rows
  913.          BYTE #cols
  914.     C6h  unused
  915.     C7h  unused
  916.     C8h  set logical cursor relative to current position
  917.          BYTE number of rows to move down (signed)
  918.          BYTE number of columns to move right (signed)
  919.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  920.     C9h  shift top left corner of scrolling region
  921.          BYTE #rows (signed)
  922.          BYTE #cols (signed)
  923.     CAh  set window pos relative to current position
  924.          BYTE number of rows to shift down (signed)
  925.          BYTE number of columns to shift right (signed)
  926.     CBh  set window size relative to current size
  927.          BYTE number of rows to expand (signed)
  928.          BYTE number of cols to expand (signed)
  929.     CCh  shift viewport relative to current position
  930.          BYTE rows to shift (signed)
  931.          BYTE cols to shift (signed)
  932.     CDh  resize virtual screen
  933.          BYTE #rows to expand (signed)
  934.          BYTE #cols to expand (signed)
  935.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  936.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  937.     D0h  allow window frame to extend beyond screen
  938.     D1h  always display a complete frame, even if window extends beyond 
  939.          edge of screen
  940.     D2h  allow DV to change logical colors on video mode switch (default)
  941.     D3h  application changes logical attributes
  942.     D4h  window is visible [must redraw to actually make visible]
  943.     D5h  window is hidden [must redraw to actually remove]
  944.     D6h  window has frame (default)
  945.     D7h  window unframed [must redraw to actually remove frame]
  946.     D8h  READ/READN will read characters from window (default)
  947.     D9h  READ/READN will read attributes from window
  948.     DAh  use logical attributes, which may be remapped
  949.         attributes
  950.            1 normal text
  951.            2 highlighted normal text
  952.            3 help text
  953.            4 highlighted help text
  954.            5 error message
  955.            6 highlighted error message
  956.            7 emphasized text
  957.            8 marked text
  958.            9-16 are reverse video versions of 1-8
  959.     DBh  use physical attributes for characters
  960.     DCh  enable special actions for control characters (default)
  961.     DDh  disable special control char handling, all chars displayable by
  962.          BIOS TTY call
  963.     DEh  write both character and attribute (default)
  964.     DFh  write character only, leave attribute untouched
  965.     E0h  repeat following commands through E1h opcode
  966.          BYTE number of times to repeat (00h means 256 times)
  967.     E1h  end of commands to repeat, start repeating them
  968.     E2h  set current output color
  969.          BYTE color
  970.     E3h  clear virtual screen from scroll origin to end using current color
  971.     E4h  redraw window
  972.     E5h  select menu style
  973.          BYTE style (normally 18h)
  974.         bits 5,4 = 01 use two-letter menu entries for remainder of
  975.           this stream
  976.     E5h  (panel file only)
  977.          BYTE modifier
  978.         bits 7,6 = 11 panel stream creates new window
  979.              = 10 panel defines new field table for existing window
  980.              = 01 panel stream uses existing window & field table
  981.         bit 5 = 1 stream contains a field table (create kyboard object)
  982.         bit 4 = 1 stream defines input fields (create keyboard object)
  983.         bit 3 = 1 stream defines select fields but not input fields
  984.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  985.         bit 1 reserved
  986.         bit 0 reserved
  987.     E6h  create new window and perform rest of manipulations in new window
  988.          BYTE number of rows
  989.          BYTE number of columns
  990.          Return: DWORD object handle of new window returned on stack at end
  991.     E7h  no operation
  992.     E8h  scroll area up (top left corner defined by opcode C1h)
  993.          BYTE height
  994.          BYTE width
  995.     E9h  scroll area down (top left corner defined by opcode C1h)
  996.          BYTE height
  997.          BYTE width
  998.     EAh  scroll area left (top left corner defined by opcode C1h)
  999.          BYTE height
  1000.          BYTE width
  1001.     EBh  scroll area right (top left corner defined by opcode C1h)
  1002.          BYTE height
  1003.          BYTE width
  1004.     ECh  set logical attributes for window contents
  1005.          BYTE video modes command applies to
  1006.         bit 7    monochrome
  1007.         bit 6    color text, EGA/VGA graphics
  1008.         bit 5    medium-resolution CGA graphics
  1009.         bit 4    high-resolution CGA graphics
  1010.          BYTE which attributes to set
  1011.         bit 7  if set, copy single following byte to indicated attribs
  1012.         bits 4-6  # of first attribute to change - 1
  1013.         bits 0-3  # of consecutive attributes to change
  1014.          N BYTEs new attributes
  1015.     EDh  set logical attributes for window frame
  1016.          BYTE video modes command applies to (see opcode ECh)
  1017.          BYTE which attributes to set
  1018.         bit 7  if set, copy single following byte to indicated attrs
  1019.         bits 4-6  # of first attribute to change - 1
  1020.         bits 0-3  # of consecutive attributes to change
  1021.          N BYTEs new attributes
  1022.           attributes
  1023.                1 = top left corner
  1024.                2 = top right corner
  1025.                3 = bottom left corner
  1026.                4 = bottom right corner
  1027.                5 = top edge
  1028.                6 = bottom edge
  1029.                7 = left edge
  1030.                8 = right edge
  1031.     EEh  set characters for window frame
  1032.          BYTE video modes command applies to (see opcode ECh)
  1033.          BYTE which characters to set
  1034.         bit 7  if set, copy single following byte to indicated chars
  1035.         bits 4-6  # of first char to change - 1
  1036.         bits 0-3  # of consecutive chars to change
  1037.          N BYTEs new chars (same relative position as attributes above)
  1038.     EFh  set window name
  1039.          BYTE length of name (should be in range 0 to logical screen width)
  1040.          N BYTEs name
  1041.     F0h  clear input field to blanks
  1042.          BYTE field number
  1043.     F1h  fill input field with character
  1044.          BYTE field number
  1045.          BYTE char
  1046.     F2h  set color of input field
  1047.          BYTE field number (1-N)
  1048.          BYTE attribute
  1049.     F3h  set initial contents of input field
  1050.          BYTE field number (1-N)
  1051.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1052.     F4h  position cursor to start of specific input field
  1053.          BYTE field number (1-N)
  1054.     F5h  change field table entry
  1055.          BYTE field number
  1056.          7-8 BYTEs field table entry (see opcode FFh below)
  1057.     F6h  set field type
  1058.          BYTE field number
  1059.          BYTE type
  1060.             00h inactive
  1061.             40h output field
  1062.             80h input field
  1063.             C0h deselected field
  1064.             C2h selected field
  1065.     F7h  "broadcast write"    write data to fields with program output bit
  1066.         set in field table entry, in field number order
  1067.          N BYTEs (total length of all program output fields)
  1068.     F8h  scroll field up a line
  1069.          BYTE field number
  1070.     F9h  scroll field down a line
  1071.          BYTE field number
  1072.     FAh  scroll field left
  1073.          BYTE field number
  1074.     FBh  scroll field right
  1075.          BYTE field number
  1076.     FCh  set field table header
  1077.          BYTE number of fields (must be <= existing number of fields)
  1078.          BYTE screen behavior bits
  1079.         bit 7  reserved
  1080.         bit 6  set if menu items may be selected via keyboard
  1081.         bit 5  set if left mouse button may terminate entry
  1082.         bit 4  set if right mouse button may terminate entry
  1083.         bit 3  if set, select fields return contents or blanks rather
  1084.             than 'Y' or 'N'
  1085.         bit 2  if set, modified bits reset on return to application
  1086.         bits 0,1 = 00 no data returned on read of keyboard
  1087.                01 data returned as array of chars containing
  1088.                 all fields packed together, with no field
  1089.                 numbers
  1090.                10 data returned as numbered variable-length
  1091.                 records for all fields
  1092.                11 data returned as numbered variable-length
  1093.                 records for the fields which were modified
  1094.          BYTE current input field (updated by DESQview)
  1095.          BYTE current select field (updated by DESQview)
  1096.          BYTE attribute for select fields when they are pointed at
  1097.          BYTE attribute for select fields which have been selected
  1098.     FDh  reset modified bit for all fields
  1099.     FEh  reset selected and modified bits for all fields
  1100.     FFh  set up input fields
  1101.          6 BYTEs table header (see opcode FCh above)
  1102.          the field table entries, one for each field
  1103.          BYTE start row       \
  1104.          BYTE start column  \ if menu selection and start is to
  1105.          BYTE end row        / right or below end, select from kbd only
  1106.          BYTE end column   /
  1107.          BYTE field type
  1108.             bits 7,6 = 00 inactive (non-entry) field
  1109.                    01 echos keystrokes input to make menu selection
  1110.                    10 fill-in field
  1111.                    11 select field
  1112.             bit 5  field can be filled by broadcast write (F7h opcode)
  1113.             bit 4  reserved
  1114.             bit 3  reserved
  1115.             bit 2  reserved
  1116.             bit 1  set if field selected
  1117.             bit 0  set if field modified
  1118.          BYTE modifier
  1119.               if type is fill-in, then bit flags to determine behavior
  1120.               bit 7     if set, automatically enter CR when field full
  1121.               bit 6     move to next field when current field is full
  1122.               bit 5     if set, enter text from right end (for numbers)
  1123.               bit 4     if set, force input to uppercase
  1124.               bit 3     if set, clear old contents on first keystroke
  1125.               bit 2     if set, input returned when cursor moves out
  1126.                  of modified field (API level 2.02+)
  1127.               bit 1     reserved
  1128.               bit 0     reserved
  1129.               if select field, first key to press to activate
  1130.               00h if have to point-&-click or is an extended-ASCII
  1131.                   keystroke (only if two-key menus enabled)
  1132.          BYTE (select field only) normal color of field
  1133.          BYTE second key for select field.  This byte is present iff
  1134.               two-letter menu entries selected with opcode E5h, and
  1135.               in that case is present regardless of field type
  1136.          Note: DESQview uses and updates the actual copy of the information
  1137.            which is contained in the stream.  Thus this info must remain
  1138.            intact until after the data entry is complete.
  1139.  
  1140. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1141.     A0h return logical cursor row in next byte
  1142.     A1h return logical cursor column in next byte
  1143.     A2h return top row of scrolling region in next byte
  1144.     A3h return left column of scrolling region in next byte
  1145.     A4h return row of physical window origin in next byte
  1146.     A5h return column of physical window origin in next byte
  1147.     A6h return height of physcial window in next byte
  1148.     A7h return width of physical window in next byte
  1149.     A8h return row of viewport origin in next byte
  1150.     A9h return column of viewport origin in next byte
  1151.     AAh return height of virtual screen in next byte
  1152.     ABh return width of virtual screen in next byte
  1153.     AFh return current video mode in next byte
  1154.     C0h return current logical cursor position in next two bytes
  1155.     C1h return top left corner of scrolling region in next two bytes
  1156.     C2h return current window position in next two bytes
  1157.     C3h return current window size in next two bytes
  1158.     C4h return current viewport origin in next two bytes
  1159.     C5h return current virtual screen size in next two bytes
  1160.     D0h \ overwritten with D0h if frames may fall off screen edge
  1161.     D1h /               D1h if frames always displayed entirely
  1162.     D2h \ overwritten with D2h if DESQview controls color palette
  1163.     D3h /               D3h if application changes color palette
  1164.     D4h \ overwritten with D4h if window visible
  1165.     D5h /               D5h if window hidden
  1166.     D6h \ overwritten with D6h if window has frame
  1167.     D7h /               D7h if window unframed
  1168.     D8h \ overwritten with D8h if reading characters from window
  1169.     D9h /               D9h if reading attributes from window
  1170.     DAh \ overwritten with DAh if using logical attributes
  1171.     DBh /               DBh if using physical attributes
  1172.     DCh \ overwritten with DCh if TTY control char interpretation on
  1173.     DDh /               DDh if TTY control char interpretation off
  1174.     DEh \ overwritten with DEh if writing both characters and attributes
  1175.     DFh /               DFh if leaving attributes untouched
  1176.     E2h return current color in next byte
  1177.     ECh get logical attributes for window contents
  1178.         BYTE execute call if currently in specified video mode
  1179.         bit 7    monochrome
  1180.         bit 6    color text, EGA/VGA graphics
  1181.         bit 5    medium-resolution CGA graphics
  1182.         bit 4    high-resolution CGA graphics
  1183.         BYTE which attributes to get
  1184.         bit 7 unused???
  1185.         bits 4-6 first attribute to get - 1
  1186.         bits 0-3 # consecutive attributes
  1187.         N BYTEs buffer to hold attributes
  1188.     EDh get logical attributes for window frame
  1189.         BYTE execute call if currently in video mode (see opcode ECh)
  1190.         BYTE which attributes to get
  1191.         bit 7 unused???
  1192.         bits 4-6 first attribute to get - 1
  1193.         bits 0-3 # consecutive attributes
  1194.         N BYTEs buffer to hold attributes
  1195.     EEh get characters for window frame
  1196.         BYTE execute call if currently in video mode (see opcode ECh)
  1197.         BYTE which attributes to get
  1198.         bit 7 unused???
  1199.         bits 4-6 first char to get - 1
  1200.         bits 0-3 # consecutive chars
  1201.         N BYTEs buffer to hold chars
  1202.     EFh return first N characters of current window name
  1203.         BYTE    max length of returned name
  1204.         N BYTEs buffer to hold window name
  1205.     F3h return contents of specified field
  1206.         BYTE field number
  1207.         N BYTEs buffer to hold field contents (size exactly equal to field
  1208.             size)
  1209.     F5h get field table entry
  1210.         BYTE field number
  1211.         7-8 BYTEs buffer to hold field table entry
  1212.            Notes: DV < 2.26 always returns 7 bytes
  1213.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1214.             table is using 8-byte entries and eighth byte after
  1215.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1216.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1217.             depending on the field table entry size
  1218.     F6h get type of a field
  1219.         BYTE field number
  1220.         BYTE type
  1221.     FCh get field table header
  1222.         6 BYTEs buffer to store header
  1223.  
  1224. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1225.     00h allow window to be moved horizontally
  1226.     01h allow window to be moved vertically
  1227.     02h allow window to change width
  1228.     03h allow window to change height
  1229.     04h allow window to be scrolled horizontally
  1230.     05h allow window to be scrolled vertically
  1231.     06h allow "Close Window" menu selection for application
  1232.     07h allow "Hide Window" menu selection for application
  1233.     08h allow application to be suspended ("Rearrange/Freeze")
  1234.     0Eh allow "Scissors" menu
  1235.     10h allow DESQview main menu to be popped up
  1236.     11h allow "Switch Windows" menu
  1237.     12h allow "Open Window" menu
  1238.     13h allow "Quit" menu selection
  1239.     20h-33h opposite of 00h-13h, disallow specified action
  1240.     40h notify if horizontal position of window changes
  1241.     41h notify if vertical position of window changes
  1242.     42h notify if width of window changes
  1243.     43h notify if height of window changes
  1244.     44h notify if window scrolled horizontally
  1245.     45h notify if window scrolled vertically
  1246.     46h notify if window is closed--program has to clean up and exit itself
  1247.     47h notify if window is hidden
  1248.     48h notify if "?" on main menu selected
  1249.     49h notify if pointer message sent to window
  1250.     4Ah notify if window is placed in foreground
  1251.     4Bh notify if window is placed in background
  1252.     4Ch notify if video mode changes
  1253.     4Dh notify if "Scissors" menu "Cut" option selected
  1254.     4Eh notify if "Scissors" menu "Copy" option selected
  1255.     4Fh notify if "Scissors" menu "Paste" option selected
  1256.     50h notify if DESQview main menu about to pop up
  1257.     51h notify if DESQview main menu popped down
  1258.     60h-71h     opposite of 40h-51h: don't notify on specified event
  1259.     84h attach window to parent task's window (both move together)
  1260.     85h detach window from parent task's window (may move independently)
  1261.     86h disable background operation for application
  1262.     87h enable running in background
  1263.     88h set minimum size of physical window
  1264.         BYTE rows
  1265.         BYTE columns
  1266.     89h set maximum size of physical window
  1267.         BYTE rows
  1268.         BYTE cols
  1269.     8Ah set primary asynchronous notification routine
  1270.         DWORD address of routine, 0000h:0000h means none (see also below)
  1271.     8Bh set async notification parameter
  1272.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1273.     ACh (DV2.2+) perform regular select field attribute processing
  1274.     ADh (DV2.2+) protect attributes in selected field from being lost
  1275.     AEh make window default notify window for owning app (API level 2.00+)
  1276.     AFh set selected field marker character
  1277.         BYTE character to display at left edge of selected fields
  1278.     BCh set standard field processing mode 
  1279.     BDh set alternate field processing mode (enables cursor pad for menus)
  1280.     BEh disables changing reverse logical attributes with ECh opcode
  1281.     BFh enables changing reverse logical attributes with ECh opcode
  1282.     C0h make current window topmost in system
  1283.     C1h force current process into foreground
  1284.     C2h make current window topmost in process
  1285.     C3h position mouse pointer relative to origin of current field
  1286.         BYTE rows below upper left corner of field
  1287.         BYTE columns to right of upper left corner of field
  1288.     C4h position mouse pointer relative to origin of given field
  1289.         BYTE field number
  1290.         BYTE rows below upper left corner of field
  1291.         BYTE columns to right of upper left corner of field
  1292.     C5h orphan current window (also hides it)
  1293.         Note: must be last in stream; all subsequent commands ignored
  1294.     C6h show all windows for this process
  1295.     C7h hide all windows for this process
  1296.     C8h suspend process and hide all its windows
  1297.     C9h force current process into background
  1298.     CAh make current window bottom-most in process
  1299.     CBh cancel current window manager operation, remove DV menu, give 
  1300.         control to topmost application
  1301.     CCh orphan window and give it to the system for use as paste data
  1302.     CEh reorder windows
  1303.         DWORD pointer to null-terminated list of words
  1304.           each word is segment of object handle for a window
  1305.     FFh no operation
  1306.  
  1307. MODES 14h to 1Fh "USER STREAMS"
  1308.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1309.     routines, one for each mode number
  1310.       on entry to handler,
  1311.         DS:SI -> first byte of actual stream (not header)
  1312.         CX = #bytes in stream
  1313.         ES:DI = window's handle
  1314.  
  1315. Asynchronous notification routine defined by manager stream 8Ah called with:
  1316.     ES:DI = handle of window
  1317.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1318.        mailbox contains message indicating event
  1319.           Opcode
  1320.            40h  horizontal movement
  1321.            DWORD object handle of window
  1322.            BYTE     new row
  1323.            BYTE     new col
  1324.            41h  vertical movement
  1325.            DWORD object handle of window
  1326.            BYTE     new row
  1327.            BYTE     new col
  1328.            42h  horizontal size change
  1329.            DWORD object handle of window
  1330.            BYTE     new rows
  1331.            BYTE     new cols
  1332.            43h  vertical size change
  1333.            DWORD object handle of window
  1334.            BYTE     new rows
  1335.            BYTE     new cols
  1336.            44h  scrolled horizontally
  1337.            DWORD object handle of window
  1338.            BYTE     mouse row within window
  1339.            BYTE     mouse column within window
  1340.            BYTE     field mouse is on, 0 if none
  1341.            BYTE     amount moved: >0 right, <0 left, 0 done
  1342.            45h  scrolled vertically
  1343.            DWORD object hande of window
  1344.            BYTE     mouse row within window
  1345.            BYTE     mouse column within window
  1346.            BYTE     field mouse is on, 0 if none
  1347.            BYTE     amount moved: >0 down, <0 up, 0 done
  1348.            46h  window close request
  1349.            DWORD object handle of window
  1350.            BYTE     mouse pointer row
  1351.            BYTE     mouse pointer column
  1352.            BYTE     field mouse is on, 0 if none
  1353.            47h  application's windows hidden
  1354.            48h  Help for Program selected
  1355.            DWORD object handle of window
  1356.            BYTE     mouse pointer row
  1357.            BYTE     mouse pointer column
  1358.            BYTE     field mouse is on, 0 if none
  1359.            49h  pointer message sent to window
  1360.            DWORD pointer handle which received message
  1361.            4Ah  switched to window from another ("raise")
  1362.            4Bh  switched away from the window ("lower")
  1363.            4Ch  video mode changed
  1364.            BYTE new BIOS video mode
  1365.            4Dh  Scissors/cUt selected
  1366.            DWORD object handle of window
  1367.            BYTE     row of upper left corner
  1368.            BYTE     column of upper left corner
  1369.            BYTE     field number ul corner is in, 0=none
  1370.            DWORD handle of orphaned window created with
  1371.              copy of data from specified region
  1372.            BYTE     height of region
  1373.            BYTE     width of region
  1374.            4Eh  Scissors/Copy selected
  1375.            DWORD object handle of window
  1376.            BYTE     row of upper left corner
  1377.            BYTE     column of upper left corner
  1378.            BYTE     field number ul corner is in, 0=none
  1379.            DWORD handle of orphaned window created with
  1380.              copy of data from specified region
  1381.            BYTE     height of region
  1382.            BYTE     width of region
  1383.            4Fh  Scissors/Paste selected
  1384.            DWORD object handle of window
  1385.            BYTE     row of upper left corner
  1386.            BYTE     column of upper left corner
  1387.            BYTE     field number ul corner is in, 0=none
  1388.            DWORD handle of orphaned window with data
  1389.            BYTE     height of region
  1390.            BYTE     width of region
  1391.             Note: orphaned data window should be adopted or freed
  1392.                 when done
  1393.            50h  main menu about to pop up
  1394.            51h  main menu popped down
  1395. Return: all registers unchanged
  1396. ----------1512--BH06-------------------------
  1397. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1398.     AH = 12h
  1399.     BH = 06h
  1400.     BL = object
  1401.         00h object handle in DWORD on top of stack
  1402.         mailbox, keyboard, pointer, or timer
  1403.         04h given task's keyboard (task's handle on top of stack)
  1404.         05h current task's default keyboard
  1405.     STACK: DWORD new priority of object in task's OBJECTQ 
  1406. Notes:    initially all objects have the same default value.  Should only make 
  1407.       relative adjustments to this default value.
  1408.     when changing priorities, all objects already on the objectq are
  1409.       reordered
  1410. SeeAlso: AH=12h/BH=07h
  1411. ----------1512--BH07-------------------------
  1412. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1413.     AH = 12h
  1414.     BH = 07h
  1415.     BL = object
  1416.         00h object handle in DWORD on top of stack
  1417.         mailbox, keyboard, pointer, or timer
  1418.         04h given task's keyboard (task's handle on top of stack)
  1419.         05h current task's default keyboard
  1420. Return: STACK: DWORD object priority
  1421. Note:    initially all objects have the same default value.  Should only make 
  1422.       relative adjustments to this default value.
  1423. SeeAlso: AH=12h/BH=06h
  1424. ----------1512--BH08-------------------------
  1425. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1426.     AH = 12h
  1427.     BH = 08h
  1428.     BL = object
  1429.         00h handle in DWORD on top of stack
  1430.         window: total character positions in window
  1431.         timer: elapsed time since timer started
  1432.         pointer: number of messages queued to pointer object
  1433.         panel: number of panels in panel file
  1434.         keyboard: number of input buffers queued
  1435.         01h total chars in current task's default window
  1436.         02h number of messages in task's mailbox (task's handle on stack)
  1437.         03h number of messages in current task's mailbox
  1438.         04h number of input buffers queued in task's kbd (handle on stack)
  1439.         05h number of input buffers queued for current task's default kbd
  1440.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1441.         07h number of objects queued in current task's OBJECTQ
  1442.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1443.         0Dh (DV 2.26+) total chars in parent task's window
  1444. Return: DWORD on top of stack is result
  1445. Note:    for panel objects, a count of zero is returned if no panel file is open
  1446.       for the object
  1447. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1448. ----------1512--BH09-------------------------
  1449. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1450.     AH = 12h
  1451.     BH = 09h
  1452.     BL = object
  1453.         00h handle in DWORD on top of stack
  1454.         window: get chars/line
  1455.         timer: get 1/100 seconds remaining before timer expires
  1456.         01h get number of chars/line in current task's default window
  1457.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1458.         0Dh (DV 2.26+) get chars/line in parent task's window
  1459. Return: DWORD on top of stack is length
  1460. SeeAlso: AH=12h/BH=08h
  1461. ----------1512--BH0A-------------------------
  1462. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1463.     AH = 12h
  1464.     BH = 0Ah
  1465.     BL = window to write to
  1466.         00h window handle is DWORD on top of stack
  1467.         01h current task's default window
  1468.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1469.         0Dh (DV 2.26+) default window of parent of current task
  1470.     STACK:    DWORD count of attributes
  1471.         DWORD address of attribute string
  1472.         DWORD count of characters
  1473.         DWORD address of character string
  1474. Notes:    if one string is longer than the other, the shorter one will be reused
  1475.       until the longer one is exhausted
  1476.     the cursor is left just after the last character written
  1477. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1478. ----------1512--BH0A-------------------------
  1479. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1480.     AH = 12h
  1481.     BH = 0Ah
  1482.     BL = mailbox to write to
  1483.         00h handle is DWORD on top of stack
  1484.         02h default mailbox of task whose handle is on top of stack
  1485.         03h current task's default mailbox
  1486.     STACK:    DWORD    status (low byte)
  1487.         DWORD    length of message
  1488.         DWORD    address of message
  1489. Notes:    the message is copied into either system or common memory
  1490.     insufficient memory normally causes the process to be aborted; under
  1491.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1492. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1493. ----------1512--BH0A-------------------------
  1494. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1495.     AH = 12h
  1496.     BH = 0Ah
  1497.     BL = object
  1498.         00h handle is DWORD on top of stack
  1499.         timer: start timer for specified interval
  1500.         pointer: set control flags
  1501.         keyboard: set control flags
  1502.         04h set control flags on KEYBOARD object (handle on top of stack)
  1503.         05h set control flags on task's default KEYBOARD object
  1504.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1505.            (otherwise)  DWORD bits to set
  1506. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1507.  
  1508. For keyboard objects, the bits have the following significance:
  1509.     bit 15 reserved, can't be set
  1510.     bit 14 unused
  1511.     bit 13 reserved, can't be set
  1512.     bit 12-6 unused
  1513.     bit 5  (DV 2.2+) exclusive input
  1514.     bit 4  filter all keys (used with handler established by SETESC)
  1515.         if 0, only keys that would normally be displayed are filtered
  1516.     bit 3  program continues executing while input in progress
  1517.     bit 2  insert mode active for field mode
  1518.     bit 1  hardware cursor displayed when task is hardware cursor owner
  1519.         must be set if keyboard in field mode and field table includes
  1520.         input fields
  1521.     bit 0  keyboard is in field mode rather than keystroke mode
  1522.  
  1523. For pointer objects, the bits have the following significance:
  1524.     bit 15 reserved, can't be set
  1525.     bit 14-8 unused
  1526.     bit 7  mouse pointer is hidden while in window
  1527.     bit 6  get messages even if window not topmost
  1528.     bit 5  get messages even if window not foreground
  1529.     bit 4  multiple clicks separated by less than 1/3 second are counted
  1530.         and returned in a single message
  1531.     bit 3  pointer position is relative to screen origin, not window origin
  1532.     bit 2  send message on button release as well as button press
  1533.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1534.         pointer leaves the window
  1535.     bit 0  send message only on button activity, not movement
  1536.            DV-specific, and INT 15h/AX=DE0Fh must have been called first
  1537. ----------1512--BH0B-------------------------
  1538. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1539.     AH = 12h
  1540.     BH = 0Bh
  1541.     BL = window to write attributes to
  1542.         00h handle is DWORD on top of stack
  1543.         01h current task's default window
  1544.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1545.         0Dh (DV 2.26+) default window of parent of current task
  1546.     STACK:    DWORD number of attributes to write
  1547.         DWORD address of attributes
  1548. Note:    the attributes are written starting at the current cursor position; the
  1549.       cursor is left just after the last position written
  1550. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1551. ----------1512--BH0B-------------------------
  1552. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1553.     AH = 12h
  1554.     BH = 0Bh
  1555.     BL = mailbox to write to
  1556.         00h handle is DWORD on top of stack
  1557.         02h default mailbox of task whose handle is on top of stack
  1558.         03h current task's default mailbox
  1559.     STACK:    DWORD    status (low byte)
  1560.         DWORD    length of message
  1561.         DWORD    address of message
  1562. Notes:    only a pointer to the message is stored, but the write may still fail
  1563.       due to insufficient memory
  1564.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1565. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1566. ----------1512--BH0B-------------------------
  1567. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1568.     AH = 12h
  1569.     BH = 0Bh
  1570.     BL = OBJECTQ from which to remove all copies of a particular object
  1571.         06h OBJECTQ of task whose handle is on top of stack
  1572.         07h task's default OBJECTQ
  1573.     STACK:    DWORD    handle of object to remove
  1574. Note:    should be sent whenever an object is erased or closed
  1575. ----------1512--BH0B-------------------------
  1576. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1577.     AH = 12h
  1578.     BH = 0Bh
  1579.     BL = object
  1580.         00h handle is DWORD on top of stack
  1581.         pointer: reset control flags
  1582.         keyboard: reset control flags
  1583.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1584.         05h clear control flags on task's default KEYBOARD object
  1585.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1586. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1587. ----------1512--BH0C-------------------------
  1588. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1589.     AH = 12h
  1590.     BH = 0Ch
  1591.     BL = object
  1592.         00h handle is DWORD on top of stack
  1593.         window:      fill with given character from scroll origin to end
  1594.         keyboard: attach to a window
  1595.         timer:      open
  1596.         pointer:  start taking input for window
  1597.         panel:      associate with a panel file
  1598.         01h fill task's default window with given char from scrl org to end
  1599.         02h open given task's mailbox for input (task's handle on stack)
  1600.         03h open current task's mailbox
  1601.         04h attach a KEYBOARD to a window (handle on top of stack)
  1602.         05h attach task's default KEYBOARD to a window
  1603.         06h open a task's OBJECTQ (task's handle on top of stack)
  1604.         07h open current task's OBJECTQ
  1605.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  1606.         0Dh (DV 2.26+) fill default window of parent of current task
  1607.      STACK: (if window)   DWORD character to fill with
  1608.         (if keyboard) DWORD handle of window to attach to
  1609.         (if pointer)  DWORD handle of window to attach to
  1610.         (if panel)    DWORD length of filename or resident panel
  1611.                   DWORD address of filename or resident panel
  1612.         (otherwise)   nothing
  1613. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  1614.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1615.       the panel file
  1616.     result code of open may be retrieved with STATUS message
  1617.     logical cursor is left at scroll origin after filling window
  1618.     the task opening a mailbox becomes its owner, and the only task allowed
  1619.       to read the mailbox
  1620.     messages are only sent to a pointer object when the mouse is positioned
  1621.       in the window to which the pointer has been attached
  1622.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  1623.       messages automatically open the timer
  1624. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  1625. ----------1512--BH0D-------------------------
  1626. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1627.     AH = 12h
  1628.     BH = 0Dh
  1629.     BL = object
  1630.         00h handle is DWORD on top of stack
  1631.         timer:      close
  1632.         keyboard: detach from window and discard queued input
  1633.         pointer:  stop taking input
  1634.         panel:      close
  1635.         mailbox:  close, unlock, and discard any pending messages
  1636.         02h close given task's mailbox (task's handle on top of stack)
  1637.         03h close task's default mailbox
  1638.         04h close KEYBOARD object (handle on top of stack)
  1639.         05h close task's default KEYBOARD
  1640.         06h close givent task's OBJECTQ (task's handle on top of stack)
  1641.         07h close current task's OBJECTQ
  1642. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  1643.       ERASE message (AH=12h/BH=0Eh)
  1644.     when a panel object is closed, the panel file and any panels currently
  1645.       in use are freed; window and keyboard objects created by APPLY are
  1646.       not affected, but field mode input ceases
  1647.     open but idle timer objects consume a small amount of CPU time
  1648. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  1649. ----------1512--BH0E-------------------------
  1650. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  1651.     AH = 12h
  1652.     BH = 0Eh
  1653.     BL = object
  1654.         00h handle is DWORD on top of stack
  1655.         window:      clear from scroll origin to end of window
  1656.         keyboard: discard input
  1657.         timer:      cancel current interval
  1658.         pointer:  discard all pending messages
  1659.         mailbox:  discard all pending messages
  1660.         01h clear task's default window from scroll origin to end
  1661.         02h discard all queued messages in mailbox (handle on top of stack)
  1662.         03h discard all queued messages in current task's default mailbox
  1663.         04h discard all input queued to KEYBOARD (handle on top of stack)
  1664.         05h discard all input queued to task's default KEYBOARD
  1665.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  1666.         07h remove all objects from current task's OBJECTQ
  1667.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  1668.         0Dh (DV 2.26+) clear default window of parent of current task
  1669. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  1670. SeeAlso: AH=12h/BH=02h
  1671. ----------1512--BH0F-------------------------
  1672. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  1673.     AH = 12h
  1674.     BH = 0Fh
  1675.     BL = object
  1676.         00h handle is DWORD on top of stack
  1677.         timer:     is it running?
  1678.         pointer: return status of last message
  1679.         panel:     verify success of last OPEN or APPLY
  1680.         02h return status of last msg READ from mailbox (handle on stack)
  1681.         03h return status of last msg READ from task's default mailbox
  1682.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  1683.         05h get status of last msg from task's default KEYBOARD
  1684.         06h return whether OBJECTQ is open or not (handle on top of stack)
  1685.         07h return whether task's default OBJECTQ is open or not
  1686. Return: DWORD on top of stack is status
  1687. Notes:    if object is a panel object, the status indicates the error code:
  1688.       00h successful
  1689.       14h panel name not in panel directory
  1690.       15h not enough memory to apply panel
  1691.       16h invalid panel format
  1692.       17h panel file already open
  1693.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  1694.       95h not enough memory to open panel file     > that the panel was
  1695.       98h null panel file name            /  not opened
  1696.     if object is a timer, the status is:
  1697.       00000000h open but not running
  1698.       40000000h open and running
  1699.       80000000h closed
  1700.     if object is an OBJECTQ, the status is:
  1701.       00000000h open
  1702.       80000000h closed
  1703.     if object is a keyboard in keystroke mode, the status is the extended
  1704.       character code (scan code) of teh last keystroke
  1705.     if object is a keyboard in field mode, the status indicates the reason
  1706.       for the last return from the field manager
  1707.       00h Enter key pressed
  1708.       01h Button 1 or keystroke selection
  1709.       02h Button 2
  1710.       03h validation
  1711.       04h auto Enter on field
  1712.       1Bh Escape pressed
  1713.       46h ^Break pressed
  1714.       other: extended code for key terminating input
  1715.     the status of mailbox messages sent by the window manager is always 80h
  1716.     the status of a pointer message is the same as the status field in the
  1717.       message
  1718. SeeAlso: AH=12h/BH=04h"READ"
  1719. ----------1512--BH10-------------------------
  1720. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  1721.     AH = 12h
  1722.     BH = 10h
  1723.     BL = object
  1724.         00h handle is DWORD on top of stack
  1725.         window: return TRUE if logical cursor past end of window
  1726.         mailbox: ???
  1727.         01h returns TRUE if logical cursor past end of task's def window
  1728.         02h return ??? for task's mailbox (task's handle on top of stack)
  1729.         03h return ??? for current task's mailbox
  1730.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  1731.         0Dh (DV 2.26+) check log cursor of window of parent task
  1732. Return: DWORD on top of stack is status
  1733. ----------1512--BH11-------------------------
  1734. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  1735.     AH = 12h
  1736.     BH = 11h
  1737.     BL = window for which to move cursor
  1738.         00h window's handle is DWORD on top of stack
  1739.         01h task's default window
  1740.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1741.         0Dh (DV 2.26+) default window of parent of current task
  1742.     STACK: DWORD column
  1743.            DWORD row
  1744. ----------1512--BH11-------------------------
  1745. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  1746.     AH = 12h
  1747.     BH = 11h
  1748.     BL = mailbox to name
  1749.         00h DWORD on top of stack is mailbox handle
  1750.         02h use given task's mailbox (task's handle on top of stack)
  1751.         03h use current task's default mailbox
  1752.     STACK: DWORD length of name
  1753.            DWORD address of name
  1754. SeeAlso: AX=DE0Eh
  1755. ----------1512--BX1100-----------------------
  1756. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  1757.     AH = 12h
  1758.     BX = 1100h
  1759.     STACK: DWORD object handle for pointer object
  1760.            DWORD number of colums to scale pointer position to
  1761.            DWORD number of rows to scale pointer position to
  1762. SeeAlso: AH=12h/BX=1200h
  1763. ----------1512--BH12-------------------------
  1764. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  1765.     AH = 12h
  1766.     BH = 12h
  1767.     BL = window to read from
  1768.         00h handle is DWORD on top of stack
  1769.         01h read next N chars or attributes on task's default window
  1770.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  1771.         0Dh (DV 2.26+) read default window of parent of current task
  1772.     STACK: DWORD count
  1773. Return: STACK: DWORD width of screen line
  1774.            DWORD address
  1775.            DWORD count actually read
  1776. Notes:    reading starts at the current logical cursor position; the cursor is
  1777.       updated to point at the character following the last one read
  1778.     any translucent blanks (FFh) which are visible on screen are changed
  1779.       to the character which is seen through them
  1780.     the string produced by the read is placed in an input buffer which may
  1781.       be reused by the next READ or READN of a window
  1782.     window stream opcodes D8h and D9h determine whether the read returns
  1783.       characters or attributes
  1784. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  1785. ----------1512--BX1200-----------------------
  1786. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  1787.     AH = 12h
  1788.     BX = 1200h
  1789.     STACK: DWORD object handle for pointer
  1790. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  1791.            DWORD pointer pos scaled as if window were this many rows high
  1792. SeeAlso: AH=12h/BX=1100h
  1793. ----------1512--BH13-------------------------
  1794. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  1795.     AH = 12h
  1796.     BH = 13h
  1797.     BL = window object
  1798.         00h DWORD on top of stack is handle for window to redraw
  1799.         01h redraw task's default window
  1800.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  1801.         0Dh (DV 2.26+) redraw default window of parent of current task
  1802. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  1803. ----------1512--BX1300-----------------------
  1804. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  1805.     AH = 12h
  1806.     BX = 1300h
  1807.     STACK: DWORD object handle for pointer
  1808.            DWORD character to use for pointer
  1809. ----------1512--BH14-------------------------
  1810. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  1811.     AH = 12h
  1812.     BH = 14h
  1813.     BL = message modifier
  1814.         00h handle is DWORD on top of stack
  1815.         01h define user stream
  1816.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  1817.         05h intercept keystrokes from task's default KEYBOARD to a window
  1818.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  1819.                  DWORD address of FAR user stream handler
  1820.            (if keyboard) DWORD address of FAR filter function
  1821.  
  1822. The keyboard filter function is called when the keyboard is in field mode.  On
  1823. entry,
  1824.     AL = character
  1825.     AH = 00h or extended ASCII code if AL = 00h
  1826.     BL = field number
  1827.     CH = cursor column
  1828.     CL = cursor row
  1829.     DL = field type modifier (sixth item in field table entry)
  1830.     DH = seventh item in field table entry
  1831.     ES:SI = window's handle
  1832.     DS:DI -> field table entry for field containing the cursor
  1833. The filter function should return
  1834.     AH = 00h use keystroke
  1835.          01h ignore keystroke
  1836.          FFh beep and ignore keystroke
  1837. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  1838. ----------1512--BH14-------------------------
  1839. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  1840.     AH = 12h
  1841.     BH = 14h
  1842.     BL = object
  1843.         00h mailbox handle is DWORD on top of stack
  1844.         02h use given task's mailbox (task's handle on top of stack)
  1845.         03h use current task's default mailbox
  1846. Note:    release exclusive access by sending CLOSE message to mailbox
  1847.     access may be requested multiple times, and requires multiple CLOSEs
  1848. SeeAlso: AH=12h/BH=0Dh
  1849. ----------1512--BH15-------------------------
  1850. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  1851.     AH = 12h
  1852.     BH = 15h
  1853.     BL = object
  1854.         00h DWORD on top of stack
  1855.         mailbox, keyboard, or pointer only
  1856.         02h mailbox for task whose handle is on top of stack
  1857.         03h mailbox for current task
  1858.         04h keyboard for task whose handle is on top of stack
  1859.         05h keyboard for current task
  1860.     STACK: DWORD flags
  1861.         if mailbox:
  1862.             bit 0: all mail messages in common memory
  1863.             bit 1: allow write even if closed
  1864.             bit 2: don't erase messages when mailbox closed
  1865.         if keyboard:
  1866.             bit 5: exclusive input when keyboard in use for input
  1867. Return: nothing
  1868. Notes:    only available if the API level has been set to at least 2.20
  1869.     equivalent to performing SUBFROM and ADDTO calls on the object
  1870. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  1871. ----------1512--BH16-------------------------
  1872. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  1873.     AH = 12h 
  1874.     BH = 16h
  1875.     BL = object
  1876.         00h DWORD on top of stack
  1877.         mailbox, keyboard, or pointer only
  1878.         02h mailbox for task whose handle is on top of stack
  1879.         03h mailbox for current task
  1880.         04h keyboard for task whose handle is on top of stack
  1881.         05h keyboard for current task
  1882. Return: STACK: DWORD current control flags
  1883. Note:    only available if the API level has been set to at least 2.20
  1884. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h
  1885. ----------15DE00-----------------------------
  1886. INT 15 - DESQview - GET PROGRAM NAME
  1887.     AX = DE00h
  1888. Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
  1889. SeeAlso: AX=DE07h
  1890.  
  1891. Format of program entry in DESQVIEW.DVO:
  1892. Offset    Size    Description
  1893.  00h    BYTE    length of name
  1894.  01h  N BYTEs    name
  1895.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  1896.     WORD    program type
  1897.         0000h normal program
  1898.         0004h divider
  1899.         0080h Delete a Program
  1900.         0081h Change a Program
  1901.     BYTE    end flag: 00h for all but last entry, which is FFh
  1902. ----------15DE01-----------------------------
  1903. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  1904.     AX = DE01h
  1905. Return: nothing
  1906. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  1907. ----------15DE02-----------------------------
  1908. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  1909.     AX = DE02h
  1910. Return: nothing
  1911. Note:    this call is a NOP in DV 2.x
  1912. SeeAlso: AX=DE03h
  1913. ----------15DE03-----------------------------
  1914. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  1915.     AX = DE03h
  1916. Return: AX = ??? for current window
  1917.     BX = ??? for current window
  1918. Note:    this call is a NOP in DV 2.x
  1919. SeeAlso: AX=DE02h
  1920. ----------15DE04-----------------------------
  1921. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  1922.     AX = DE04h
  1923. Return: BX = bytes of common memory available
  1924.     CX = largest block available
  1925.     DX = total common memory in bytes
  1926. SeeAlso: AX=DE05h,AX=DE06h
  1927. ----------15DE05-----------------------------
  1928. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  1929.     AX = DE05h
  1930. Return: BX = K of memory available
  1931.     CX = largest block available
  1932.     DX = total conventional memory in K
  1933. SeeAlso: AX=DE04h,AX=DE06h
  1934. ----------15DE06-----------------------------
  1935. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  1936.     AX = DE06h
  1937. Return: BX = K of expanded memory available
  1938.     CX = largest block available
  1939.     DX = total expanded memory in K
  1940. SeeAlso: AX=DE04h,AX=DE05h
  1941. ----------15DE07-----------------------------
  1942. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  1943.     AX = DE07h
  1944. Return: AX = number of program as it appears on the "Switch Windows" menu
  1945. Note:    this API call may be made from a hardware interrupt handler
  1946. SeeAlso: AX=DE00h
  1947. ----------15DE08-----------------------------
  1948. INT 15 - DESQview - GET ???
  1949.     AX = DE08h
  1950. Return: AX = 0000h if ??? is not set to the current task
  1951.          0001h if ??? is set to the current task
  1952. ----------15DE09-----------------------------
  1953. INT 15 - DESQview - UNIMPLEMENTED
  1954.     AX = DE09h
  1955. Return: nothing (NOP in DV 1.x and 2.x)
  1956. ----------15DE0A-----------------------------
  1957. INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  1958.     AX = DE0Ah
  1959.     BL = character
  1960. Return: character displayed, next call will display in next position (which
  1961.     wraps back to the start of the line if off the right edge of screen)
  1962. Notes:    displays character on bottom line of *physical* screen, regardless
  1963.       of current size of window (even entirely hidden)
  1964.     does not know about graphics display modes, just pokes the characters
  1965.       into display memory
  1966.     this API call may be made from a hardware interrupt handler
  1967. SeeAlso: AX=1003h
  1968. ----------15DE0B-----------------------------
  1969. INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  1970.     AX = DE0Bh
  1971.     BL = API level major version number
  1972.     BH = API level minor version number
  1973. Return: AX = maximum API level (AL = major, AH = minor)
  1974. Notes:    if the requested API level is greater than the version of DESQview, a
  1975.       "You need a newer version" error window is popped up
  1976.     the API level defaults to 1.00, and is inherited by child tasks
  1977.     some early copies of DV 2.00 return AX=0200h instead of 0002h
  1978. ----------15DE0C-----------------------------
  1979. INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  1980.     AX = DE0Ch
  1981.     BX = number of bytes
  1982. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  1983. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  1984.       system memory
  1985. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  1986. ----------15DE0D-----------------------------
  1987. INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  1988.     AX = DE0Dh
  1989.     ES:DI -> previously allocated block
  1990. Return: nothing
  1991. SeeAlso: AX=1002h,AX=DE0Ch
  1992. ----------15DE0E-----------------------------
  1993. INT 15 - DESQview 2.x - "FINDMAIL" - FIND MAILBOX BY NAME
  1994.     AX = DE0Eh
  1995.     ES:DI -> name to find
  1996.     CX = length of name
  1997. Return: BX = 0000h not found
  1998.          0001h found
  1999.         DS:SI = object handle
  2000. SeeAlso: AH=12h/BH=11h
  2001. ----------15DE0F-----------------------------
  2002. INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
  2003.     AX = DE0Fh
  2004. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  2005. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  2006.     enables an additional mouse mode
  2007. ----------15DE10-----------------------------
  2008. INT 15 - DESQview 2+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  2009.     AX = DE10h
  2010.     BH = scan code
  2011.     BL = character
  2012. Return: nothing
  2013. Notes:    a later read will get the keystroke as if it had been typed by the user
  2014.     multiple pushes are read last-in first-out
  2015.     if a script exists for the pushed key in the current application, the
  2016.       script will be executed
  2017.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  2018. SeeAlso: INT 16/AH=05h
  2019. ----------15DE11BL00-------------------------
  2020. INT 15 - DESQview 2+ - "JUSTIFY" - EN/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
  2021.     AX = DE11h
  2022.     BL = 00h      viewport will not move automatically
  2023.          nonzero  viewport will move to keep cursor visible (default)
  2024. Return: nothing
  2025. ----------15DE12BX0000-----------------------
  2026. INT 15 - DESQview 2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  2027.     AX = DE12h
  2028.     BX = 0000h    select normal style (linefeed only moves down)
  2029.          nonzero  select C style (linefeed moves to start of next line)
  2030. Return: nothing
  2031. Note:    set on a per-task basis, and inherited from the parent task
  2032. ----------15DE13-----------------------------
  2033. INT 15 - DESQview 2.2+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  2034.     AX = DE13h
  2035. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  2036.          without matching ENDC (see INT 15/AX=101Ch)
  2037. Note:    this API call may be made from within a hardware interrupt handler
  2038. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  2039. ----------15DE14-----------------------------
  2040. INT 15 - DESQview 2.2+ - GET OBJECT TYPE
  2041.     AX = DE14h
  2042.     ES:DI -> object
  2043. Return: BL = 00h not an object
  2044.          08h window or task
  2045.          09h mailbox
  2046.          0Ah keyboard
  2047.          0Bh timer
  2048.          0Ch objectq
  2049.          0Fh pointer
  2050.          10h panel
  2051. SeeAlso: AX=1016h
  2052. ----------15DE15BL00-------------------------
  2053. INT 15 - DESQview 2.2+ - SET ERROR HANDLING
  2054.     AX = DE15h
  2055.     BL = 00h post system error on all error conditions
  2056.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  2057.          messages sent to mailboxes which fail due to lack of system
  2058.          or common memory
  2059.          02h (v2.26+) same as 01h, but return null pointer for GETMEM
  2060.          calls which fail due to lack of system memory
  2061. Return: nothing
  2062. SeeAlso: AX=DE16h
  2063. ----------15DE16-----------------------------
  2064. INT 15 - DESQview 2.2+ - GET ERROR HANDLING
  2065.     AX = DE16h
  2066. Return: BL = 00h always post system error
  2067.          01h return carry flag set on failed mailbox writes
  2068.          02h return CF set on failed mailbox writes and NULL on failed
  2069.          GETMEM calls
  2070. SeeAlso: AX=DE15h
  2071. ----------15DE17-----------------------------
  2072. INT 15 - DESQview 2.20-2.25 - reserved
  2073.     AX = DE17h
  2074. Return: pops up "Programming error" window
  2075. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  2076. SeeAlso: AX=1117h
  2077. ----------15DE17BX0000-----------------------
  2078. INT 15 - DESQview 2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  2079.     AX = DE17h
  2080.     BX = 0000h    get current mapping context without setting
  2081.          nonzero    set new mapping context
  2082. Return: BX = mapping context in effect before call
  2083. Notes:    mapping contexts determine conventional-memory addressability; setting
  2084.       a mapping context ensures that the associated program and data areas
  2085.       are in memory for access.  Usable by drivers, TSRs and shared
  2086.       programs.
  2087.     caller need not be running under DESQview
  2088.     this API call may be made from a hardware interrupt handler
  2089. SeeAlso: AX=1117h,INT 2F/AX=1685h
  2090. ----------15DE18-----------------------------
  2091. INT 15 - DESQview 2.2+ internal -
  2092.     AX = DE18h
  2093.     BP = function number
  2094.         high byte must be 10h
  2095.         low byte is function
  2096.         00h set ???
  2097.             BL = ???  (00h-10h, video mode???)
  2098.             BH = value to store
  2099.         03h set ???
  2100.             BL = ??? (stored in driver)
  2101.         0Ah get ???
  2102.             ES:DI -> 18-byte buffer to hold ???
  2103. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  2104. ----------15DE19-----------------------------
  2105. INT 15 - DESQview 2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  2106.     AX = DE19h
  2107.     BX = number of bytes to allocate
  2108. Return: AX = 0000h successful
  2109.         ES:DI -> allocated block
  2110.          nonzero insufficient memory
  2111. Note:    this API call may be made from within a hardware interrupt handler
  2112. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  2113. ----------15DE1A-----------------------------
  2114. INT 15 - DESQview 2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  2115.     AX = DE1Ah
  2116.     DS:SI -> previously allocated block
  2117. Note:    this function may be called from within a hardware interrupt handler
  2118. SeeAlso: AX=DE0Dh,AX=DE19h
  2119. ----------15DE1B-----------------------------
  2120. INT 15 - DESQview 2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  2121.     AX = DE1Bh
  2122. Return: nothing
  2123. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  2124. ----------15DE1C-----------------------------
  2125. INT 15 - DESQview 2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  2126.     AX = DE1Ch
  2127. Return: nothing
  2128. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  2129.       that DOS is free
  2130.     the official documentation states that this call should be paired with
  2131.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  2132.     this API call may be made from within a hardware interrupt handler
  2133. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  2134. ----------15DE1D-----------------------------
  2135. INT 15 - DESQview 2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  2136.     AX = DE1Dh
  2137.     DX = segment of handle for task to receive keystroke
  2138.     BL = character
  2139.     BH = scan code
  2140. Return: AX = 0000h if successful
  2141.        nonzero if receiver's keyboard buffer was full
  2142. Notes:    the key is treated as though the user had pressed it, ignoring any
  2143.       script which may be bound to the key, and using the current field
  2144.       table if the keyboard object is in field processing mode
  2145.     multiple PUTKEYs are seen in the order in which they are executed
  2146. SeeAlso: AX=DE10h
  2147. ----------15DE1E-----------------------------
  2148. INT 15 - DESQview 2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  2149.     AX = DE1Eh
  2150. Return:    CL = actual number of rows on screen
  2151.     CH = actual number of columns on screen
  2152.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  2153. Note:    this API call may be made from a hardware interrupt handler
  2154. SeeAlso: INT 10/AH=0Fh
  2155. ----------15DE1F-----------------------------
  2156. INT 15 - DESQview 2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  2157.     AX = DE1Fh
  2158. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  2159. Note:    this API call may be made from within a hardware interrupt handler
  2160. SeeAlso: AX=DE13h
  2161. ----------15DE20-----------------------------
  2162. INT 15 - DESQview 2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  2163.     AX = DE20h
  2164.     BX = segment of handle of task to interupt
  2165.     DX:CX -> FAR interrupt routine
  2166. Return: nothing
  2167. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  2168.       making the DISPATCHINT call
  2169.     multiple "DISPATCHINT" calls are processed in the order in which they
  2170.       were executed
  2171.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  2172.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  2173.       needs to be preserved
  2174.     this API call may be made from within a hardware interrupt handler
  2175. SeeAlso: AX=1021h
  2176. ----------15DE21BX0000-----------------------
  2177. INT 15 - DESQview 2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  2178.     AX = DE21h
  2179.     BX = 0000h turn off
  2180.          nonzero turn on
  2181. Return: BX = old state of virtualization
  2182. Note:    this API call may be made from within a hardware interrupt handler
  2183. ----------15DE22-----------------------------
  2184. INT 15 - DESQview 2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  2185.     AX = DE22h
  2186.     DX = segment of task handle
  2187. Return: DX = total amount of memory in paragraphs
  2188.     BX = amount of system memory in paragraphs
  2189.     CX = largest block of system memory available in paragraphs
  2190.     AX = flags
  2191.         bit 0: system memory resides in shared memory
  2192.         1: process's memory is swapped out
  2193.         2: process's system memory is swapped out
  2194. Notes:    if the task handle is a child task, the returned values will be for the
  2195.       process containing the task, rather than the task itself
  2196.     if the process's system memory is swapped out, BX,CX,DX remain
  2197.       unchanged, because the memory usage cannot be determined
  2198. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  2199. ----------15DE23-----------------------------
  2200. INT 15 - DESQview 2.31+ - ???
  2201.     AX = DE23h
  2202.     BX = ??? IRQ number on first PIC?
  2203.     CX = ??? IRQ number on second PIC?
  2204. Return: ???
  2205. ----------15DE24-----------------------------
  2206. INT 15 - DESQview 2.40 - ???
  2207.     AX = DE24h
  2208. Return: BX = ??? (0000h for v2.40)
  2209. ----------15DE25-----------------------------
  2210. INT 15 - DESQview 2.40 - ???
  2211.     AX = DE25h
  2212.     ???
  2213. Return: nothing
  2214. ----------15DE26-----------------------------
  2215. INT 15 - DESQview 2.40 - GET ???
  2216.     AX = DE26h
  2217. Return: BX = segment of handle for ??? (current window?)
  2218. ----------1605-------------------------------
  2219. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  2220.     AH = 05h
  2221.     CH = scan code
  2222.     CL = ASCII character
  2223. Return: AL = 00h if successful
  2224.          01h if keyboard buffer full
  2225. Note:    under DESQview, the following "keystrokes" invoke the following
  2226.       actions when they are read from the keyboard buffer:
  2227.           38FBh or FB00h    switch to next window (only if main menu
  2228.                 popped up)
  2229.         38FCh or FC00h    pop up DESQview main menu
  2230.         38FEh or FE00h    close the current window
  2231.         38FFh or FF00h    pop up DESQview learn menu
  2232. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  2233. ----------16FFA5CXCCCC-----------------------
  2234. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  2235.     AX = FFA5h
  2236.     CX = CCCCh
  2237. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  2238. Note:    delayed writes are automatically disabled on EXECing
  2239.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  2240.       however, delayed writes are not automatically reenabled upon the
  2241.       program's termination in v6.
  2242. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  2243. ----------212B--CX4445-----------------------
  2244. INT 21 - DESQview - INSTALLATION CHECK
  2245.     AH = 2Bh
  2246.     CX = 4445h ('DE')
  2247.     DX = 5351h ('SQ')
  2248.     AL = subfunction (DV v2.00+)
  2249.         01h get version
  2250.         Return: BX = version (BH = major, BL = minor)
  2251.         Note: early copies of v2.00 return 0002h
  2252.         02h get shadow buffer info, and start shadowing
  2253.         Return: BH = rows in shadow buffer
  2254.             BL = columns in shadow buffer
  2255.             DX = segment of shadow buffer
  2256.         04h get shadow buffer info
  2257.         Return: BH = rows in shadow buffer
  2258.             BL = columns in shadow buffer
  2259.             DX = segment of shadow buffer
  2260.         05h stop shadowing
  2261. Return: AL = FFh if DESQview not installed
  2262. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  2263.     whether or not DESQview was loaded
  2264. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h
  2265. ----------29---------------------------------
  2266. INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
  2267.     AL = character to display
  2268. Return: nothing
  2269. Notes:    automatically called when writing to a device with bit 4 of its device
  2270.       driver header set (see also INT 21/AH=52h)
  2271.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  2272.       vector and assume that ANSI.SYS is installed if the segment is larger
  2273.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  2274.     the default handler under DESQview 2.2 understands the <Esc>[2J
  2275.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  2276. SeeAlso: INT 79
  2277. ----------2A2001-----------------------------
  2278. INT 2A - MS Networks or NETBIOS - ???
  2279.     AX = 2001h
  2280.     ???
  2281. Return: ???
  2282. Note:    intercepted by DESQview 2.x
  2283. ----------2F1A00BX4156-----------------------
  2284. INT 2F - Multiplex - AVATAR.SYS - INSTALLATION CHECK
  2285.     AX = 1A00h
  2286.     BX = 4156h ('AV')
  2287.     CX = 4154h ('AT')
  2288.     DX = 4152h ('AR')
  2289. Return: AL = FFh if installed
  2290.         CF clear
  2291.         BX = AVATAR protocol level supported
  2292.         CX = driver type
  2293.         0000h AVATAR.SYS
  2294.         4456h DVAVATAR.COM inside DESQview window
  2295.         DX = 0016h
  2296. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  2297.       the magic values
  2298.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  2299.       interprets AVATAR command codes in the same way that ANSI interprets
  2300.       ANSI command codes
  2301. ----------2FB700-----------------------------
  2302. INT 2F - Multiplex - APPEND - INSTALLATION CHECK
  2303.     AX = B700h
  2304. Return: AL = status
  2305.         00h not installed
  2306.         FFh installed
  2307. Note:    MSDOS 3.30 APPEND refuses to install itself when run inside TopView or
  2308.       a TopView-compatible environment
  2309. ----------2FD200BX5144-----------------------
  2310. INT 2F - Multiplex - Quarterdeck QEMM/QRAM/MFT 5.0 - INSTALLATION CHECK
  2311.     AX = D200h
  2312.     BX = 5144h ("QD")
  2313.     CX = 4D45h ("ME")
  2314.     DX = 4D30h ("M0")
  2315. Return: AL = FFh installed      
  2316.     if BX,CX,DX registers were as specified on entry:
  2317.         BX = 4D45h ("ME")
  2318.         CX = 4D44h ("MD")
  2319.         DX = 5652h ("VR")
  2320. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2321.       through FFh, then C0h through D1h
  2322.     QEMM and QRAM both responded the same
  2323.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  2324.       Quarterdeck product, it just chains to the previous INT 2F handler
  2325. ----------2FD201BX4849-----------------------
  2326. INT 2F - Multiplex - Quarterdeck QEMM/QRAM 5.0 - GET HIRAM MEMORY CHAIN
  2327.     AX = D201h
  2328.     BX = 4849h ("HI")
  2329.     CX = 5241h ("RA")
  2330.     DX = 4D30h ("M0")
  2331. Return: BX = 4F4Bh ("OK")
  2332.     CX = segment of start of HIRAM chain
  2333.     DX = QEMM/QRAM code segment
  2334. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2335.       through FFh, then C0h through D1h
  2336.     QEMM and QRAM both responded the same
  2337.     the HIRAM memory chain has the same format as the regular DOS 4.0
  2338.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  2339.       have the block header program name field set to "UMB"
  2340. ----------2FD201BX5145-----------------------
  2341. INT 2F - Multiplex - Quarterdeck QEMM 5.0+ - INSTALLATION CHECK
  2342.     AX = D201h
  2343.     BX = 5145h ("QE")
  2344.     CX = 4D4Dh ("MM")
  2345.     DX = 3432h ("42")
  2346. Return: BX = 4F4Bh ("OK")
  2347.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  2348. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2349.       through FFh, then C0h through D1h
  2350. SeeAlso: INT 67/AH=3Fh
  2351. ----------2FD201BX5649-----------------------
  2352. INT 2F - Multiplex - Quarterdeck VIDRAM 5.0 - INSTALLATION CHECK
  2353.     AX = D201h
  2354.     BX = 5649h ("VI")
  2355.     CX = 4452h ("DR")
  2356.     DX = 414dh ("AM")
  2357. Return: BX = 4F4Bh ("OK")
  2358.     ES:DI -> VIDRAM entry point
  2359. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2360.       through FFh, then C0h through D1h
  2361.  
  2362. Call VIDRAM entry point with:
  2363.     AH = 00h get status
  2364.         Return: AL = VIDRAM state (see below)
  2365.             BL = bit 0: ???
  2366.                  bits 1-7 not used
  2367.             BH = ???
  2368.             CL = current monitor (01h = mono, 80h = color)
  2369.             SI = current top of memory (paragraph)???
  2370.             DI = segment of ???
  2371.     AH = 01h setup
  2372.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  2373.         BL = bit 0: ???
  2374.              bits 1-7 not used
  2375.         BH = ???
  2376.         CL = monitor (01h = monochrome, 80h = color)
  2377.         SI = new top of memory (paragraph)???
  2378.     AH = 02h get ???
  2379.         Return: ES:DI -> ??? data
  2380. Return: CF set on error
  2381.     CF clear if successful
  2382. ----------2FD201BX4D41-----------------------
  2383. INT 2F - Multiplex - Quarterdeck MANIFEST 5.0 - INSTALLATION CHECK
  2384.     AX = D201h
  2385.     BX = 4D41h ("MA")
  2386.     CX = 4E49h ("NI")
  2387.     DX = 4645h ("FE")
  2388. Return: BX = 5354h ("ST")
  2389. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2390.       through FFh, then C0h through D1h
  2391. ----------2FDE00BX4445-----------------------
  2392. INT 2F - DESQview 2.26+ External Device Interface - INSTALLATION CHECK
  2393.     AX = DE00h
  2394.     BX = 4445h ("DE")
  2395.     CX = 5844h ("XD")
  2396.     DX = 4931h ("I1")
  2397. Return: AL = FFh if installed (even if other registers do not match)
  2398.     if BX,CX, and DX were as specified on entry,
  2399.         BX = 4845h ("HE")
  2400.         CX = 5245h ("RE")
  2401.         DX = 4456h ("DV")
  2402. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2403.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2404.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  2405.       issue DESQview API calls other than those allowed from hardware ints
  2406. ----------2FDE01-----------------------------
  2407. INT 2F - DESQview 2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2408.     AX = DE01h
  2409.     BX = driver ID
  2410.     other registers as needed by driver
  2411. Notes:    XDI drivers should pass this call through to previous handler if ID
  2412.       does not match
  2413.     DESQview never calls this function
  2414. ----------2FDE01BX5242-----------------------
  2415. INT 2F - DESQview 2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2416.     AX = DE01h
  2417.     BX = 5242h ("RB")
  2418.     CX:DX = program identifier
  2419.         656F7000h ("eop",0) for DVeop
  2420. Return: AX = 5242h ("RB") if installed
  2421.         ES:BX -> data or entry point
  2422.         CX = version number (CH = major, CL = minor)
  2423.  
  2424. Call DVeop entry point with:
  2425.     ES:DI -> callback address or 0000h:0000h to remove callback
  2426. Return: AX = status
  2427.         0000h failed (callback table full or attempted to remove non-
  2428.             existent callback)
  2429.         0001h successful
  2430.         ES:DI -> chaining address
  2431.     BX,CX,DX destroyed
  2432. Notes:    the callback function is called with a simulated interrupt when the
  2433.       DESQview window containing it is closed; it should perform all
  2434.       necessary cleanup and then perform a FAR jump to the chaining address
  2435.       or an IRET if the chaining address is 0000h:0000h
  2436.     if the program wishes to remove itself before the window is closed, it
  2437.       should call the DVeop entry point with the previously returned
  2438.       chaining address and ignore the returned chaining address.
  2439. ----------2FDE01BX7474-----------------------
  2440. INT 2F - DESQview 2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2441.     AX = DE01h
  2442.     BX = 7474h
  2443.     CL = function
  2444.         00h installation check
  2445.         Return: AL = FFh
  2446.         01h get process handle
  2447.         DX = keys on Open Window menu (DL = first, DH = second)
  2448.         Return: AX = process handle or 0000h if not running
  2449.         02h (v1.3+) set TMAN handle
  2450.         DX = TMAN process handle
  2451.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2452.         DX = keys on Open Window menu (DL = first, DH = second)
  2453. Return: BX = 4F4Bh ("OK")
  2454.     DL destroyed
  2455. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2456.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2457. ----------2FDE01BX7575-----------------------
  2458. INT 2F - DESQview 2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2459.     AX = DE01h
  2460.     BX = 7575h
  2461.     CX = function
  2462.         0000h installation check
  2463.         Return: AX = 00FFh if installed
  2464.         0001h turn on notification (currently unused)
  2465.         Return: AX = 0001h
  2466.         0002h turn off notification (currently unused)
  2467.         Return: AX = 0001h
  2468.         0003h get process information
  2469.         Return: AX = status
  2470.                 0000h failed
  2471.                 0001h successful
  2472.                 BX = last instantaneous time slice in 1/100s
  2473.                 CX = number of processes
  2474.                 ES:DI -> process info array (see below)
  2475.         0004h get version
  2476.         Return: AH = major version
  2477.             AL = minor version
  2478.         0005h (v1.10+) get time since DESQview started
  2479.         Return: DX:AX = 1/100s since DV start
  2480.         0006h (v1.10+) get number of task switches
  2481.         Return: DX:AX = total task switches
  2482.             CX = task switches in last instantaneous interval
  2483. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2484.       Daniel J. Bodoh
  2485.     for v1.00, function 0003h allocates common memory, which the caller
  2486.       must deallocate after reading the process information; only the
  2487.       currently used records are placed in the buffer
  2488.     for v1.10, function 0003h merely returns a pointer to the internal
  2489.       array of process information; the caller should make a copy of the
  2490.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2491.       those records with bit 7 of the first byte set are valid.
  2492.  
  2493. Format of information for one process (v1.00):
  2494. Offset    Size    Description
  2495.  00h    BYTE    flags
  2496.         bit 7: process slot is valid
  2497.  01h 14 BYTEs    ???
  2498.  
  2499. Format of information for one process (v1.10):
  2500. Offset    Size    Description
  2501.  00h    BYTE    flags
  2502.         bit 7: valid record
  2503.             2: DESQview system task
  2504.             1: task has keyboard (currently unused)
  2505.             0: task swapped out (currently unused)
  2506.  01h    WORD    Open Window keys
  2507.  03h    WORD    Switch Windows number
  2508.  05h    WORD    segment of process handle
  2509.  07h    WORD    number of tasks for process
  2510.  09h    WORD    process mapping context
  2511.  0Bh    DWORD    time process started (relative to start of DESQview)
  2512.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2513.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2514.  17h    DWORD    total CPU time in 1/100s since process started
  2515.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2516.  1Fh    DWORD    CPU time in current instantaneous interval
  2517.  23h    DWORD    hook for other programs
  2518. ----------2FDE01BXFFFE-----------------------
  2519. INT 2F - DESQview 2.26+ XDI - DVXMS.DVR - ???
  2520.     AX = DE01h
  2521.     BX = FFFEh
  2522.     CX = 4D47h ("MG")
  2523.     DX = 0052h (0,"R")
  2524. Return: AL = FFh
  2525.     DX = 584Dh
  2526. ----------2FDE02-----------------------------
  2527. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  2528.     AX = DE02h
  2529.     BX = mapping context of DESQview
  2530.     DX = handle of DESQview system task
  2531. SeeAlso: AX=DE03h
  2532. Note:    driver should pass this call to previous handler after doing its work
  2533. ----------2FDE03-----------------------------
  2534. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  2535.     AX = DE03h
  2536.     BX = mapping context of DESQview
  2537.     DX = handle of DESQview system task
  2538. SeeAlso: AX=DE02h
  2539. Notes:    driver should pass this call to previous handler before doing its work
  2540.     DESQview makes this call when it is exiting, but before unhooking any
  2541.       interrupt vectors
  2542. ----------2FDE04-----------------------------
  2543. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  2544.     AX = DE04h
  2545.     BX = mapping context of new process
  2546.     DX = handle of process
  2547. Return: nothing
  2548. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2549.       (see below) from "common" memory to control access to XMS memory
  2550.     all DOS, BIOS, and DV API calls are valid in handler
  2551.     driver should pass this call to previous handler after processing it
  2552. SeeAlso: AX=DE05h
  2553.  
  2554. Format of XMS XDI structure:
  2555. Offset    Size    Description
  2556.  00h    DWORD    pointer to 10-byte record???
  2557.  04h    DWORD    pointer to next XMS XDI structure
  2558.  08h    WORD    mapping context
  2559.  0Ah    BYTE    ???
  2560.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2561.         (FAR jump to next field)
  2562.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2563.         (consists of a FAR CALL followed by RETF)
  2564. ----------2FDE05-----------------------------
  2565. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  2566.     AX = DE05h
  2567.     BX = mapping context of process
  2568.     DX = handle of last task in process
  2569. Return: nothing
  2570. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2571.     driver should pass this call to previous handler before processing it
  2572.     all DOS, BIOS, and DV API calls except those generating a task switch
  2573.       are valid in handler
  2574. SeeAlso: AX=DE04h
  2575. ----------2FDE06-----------------------------
  2576. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  2577.     AX = DE06h
  2578.     BX = mapping context of process containing task
  2579.     DX = handle of new task
  2580. Notes:    driver should pass this call to previous handler after processing it
  2581.     all DOS, BIOS, and DV API calls are valid in handler
  2582. ----------2FDE07-----------------------------
  2583. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  2584.     AX = DE07h
  2585.     BX = mapping context of process containing task
  2586.     DX = handle of task
  2587. Notes:    driver should pass this call to previous handler before processing it
  2588.     all DOS, BIOS, and DV API calls except those generating a task switch
  2589.       are valid in handler
  2590. ----------2FDE08-----------------------------
  2591. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  2592.     AX = DE08h
  2593.     BX = mapping context of task being switched from
  2594.     DX = handle of task being switched from
  2595. Notes:    invoked prior to task swap, interrupts, etc
  2596.     driver should pass this call to previous handler after processing it
  2597. ----------2FDE09-----------------------------
  2598. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  2599.     AX = DE09h
  2600.     BX = mapping context of task being switched to
  2601.     DX = handle of task being switched to
  2602. Notes:    state is restored except for interrupts
  2603.     driver should pass this call to previous handler before processing it
  2604. ----------2FDE0A-----------------------------
  2605. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  2606.     AX = DE0Ah
  2607.     BX = mapping context of task receiving focus
  2608.     DX = handle of running task
  2609. Notes:    driver should pass this call to previous handler before processing it
  2610.     this call often occurs inside a keyboard interrupt
  2611. ----------2FDE0B-----------------------------
  2612. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  2613.     AX = DE0Bh
  2614.     BX = mapping context of DESQview system task
  2615.     CX = number of system memory paragraphs required for the use of all
  2616.         XDI drivers (DV will add this to system memory in DVP buffer)
  2617.     DX = handle of DESQview system task
  2618.     SI = mapping context of new process if it starts
  2619.     ES:DI -> DVP buffer
  2620. Return: CX incremented as needed
  2621. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2622.     driver should pass this call to previous handler before processing it
  2623. ----------2FDE0C-----------------------------
  2624. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  2625.     AX = DE0Ch
  2626.     BX = mapping context of task being swapped out
  2627.     DX = handle of DESQview system task
  2628. Note:    driver should pass this call to previous handler after processing it
  2629. ----------2FDE0D-----------------------------
  2630. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  2631.     AX = DE0Dh
  2632.     BX = mapping context of process just swapped in
  2633.     DX = handle of DESQview system task
  2634. Note:    driver should pass this call to previous handler before processing it
  2635. ----------2FDE0E-----------------------------
  2636. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  2637.     AX = DE0Eh
  2638.     BX = mapping context of DESQview system task
  2639.     DX = handle of DESQview system task
  2640.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2641. Note:    driver should pass this call to previous handler after processing it
  2642. ----------4B8102DX0000-----------------------
  2643. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  2644.     AX = 8102h
  2645.     DX = 0000h
  2646. Return: CF clear if successful
  2647.         AH = major version number
  2648.         AL = minor version number
  2649.         BX = product number
  2650.         5145h ("QE") for QEMM-386
  2651.         CX = product revision number
  2652.         SI:DI = maximum DMA buffer size
  2653.         DX = flags
  2654.         bit 0: PC/XT bus (DMA in first megabyte only)
  2655.             1: physical buffer/remap region in first megabyte
  2656.             2: automatic remap enabled
  2657.             3: all memory is physically contiguous
  2658.          4-15: reserved (zero)
  2659.     CF set on error
  2660.         AL = error code (see below)
  2661. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  2662.       apparently not always the case
  2663. SeeAlso: INT 31
  2664.  
  2665. Values for error code:
  2666.  01h    region not in contiguous memory
  2667.  02h    region crossed a physical alignment boundary
  2668.  03h    unable to lock pages
  2669.  04h    no buffer available
  2670.  05h    region too large for buffer
  2671.  06h    buffer currently in use
  2672.  07h    invalid memory region
  2673.  08h    region was not locked
  2674.  09h    number of physical pages greater than table length
  2675.  0Ah    invalid buffer ID
  2676.  0Bh    copy out of buffer range
  2677.  0Ch    invalid DMA channel number
  2678.  0Dh    disable count overflow
  2679.  0Eh    disable count underflow
  2680.  0Fh    function not supported
  2681.  10h    reserved flag bits set in DX
  2682.  
  2683. Format of DMA descriptor structure (DDS):
  2684. Offset    Size    Description
  2685.  00h    DWORD    region size
  2686.  04h    DWORD    offset
  2687.  08h    WORD    segment/selector
  2688.  0Ah    WORD    buffer ID
  2689.  0Ch    DWORD    physical address
  2690.  
  2691. Format of Extended DMA descriptor structure (EDDS):
  2692. Offset    Size    Description
  2693.  00h    DWORD    region size
  2694.  04h    DWORD    offset
  2695.  08h    WORD    segment/selector
  2696.  0Ah    WORD    reserved
  2697.  0Ch    WORD    number available
  2698.  0Eh    WORD    number used
  2699.  10h    DWORD    region 0 physical address
  2700.  14h    DWORD    region 0 size in bytes
  2701.  18h    DWORD    region 1 physical address
  2702.  1Ch    DWORD    region 1 size in bytes
  2703.     ...
  2704.  
  2705. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  2706. Offset    Size    Description
  2707.  00h    DWORD    region size
  2708.  04h    DWORD    offset
  2709.  08h    WORD    segment/selector
  2710.  0Ah    WORD    reserved
  2711.  0Ch    WORD    number available
  2712.  0Eh    WORD    number used
  2713.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  2714.  14h    DWORD    page table entry 1
  2715.     ...
  2716. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  2717.       is present and locked
  2718. ----------4B810D-----------------------------
  2719. INT 4B - QEMM-386 - BUG
  2720.     AX = 810Dh
  2721. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  2722.       call
  2723. ----------50---------------------------------
  2724. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  2725. Notes:    this is the default location; DV 2.26+ searches for unused ranges of
  2726.       interrupts and uses the lowest available range in its list for
  2727.       relocating these IRQs and the next lowest for relocating IRQ8-IRQ15
  2728.     a range of eight interrupts starting at a multiple of 8 is considered
  2729.       available if all vectors are identical and it has not been excluded
  2730.       with an /XB:nn commandline switch
  2731.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  2732.       are available, F8h and then 50h are used anyway)
  2733.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  2734.       are available, F8h and then F0h are used anyway)
  2735. SeeAlso: INT 58"DESQview"
  2736. ----------58---------------------------------
  2737. INT 58 - IRQ8 relocated by DESQview 2.26+
  2738. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2739. SeeAlso: INT 50"DESQview",INT 70
  2740. ----------59---------------------------------
  2741. INT 59 - IRQ9 relocated by DESQview 2.26+
  2742. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2743. SeeAlso: INT 50"DESQview",INT 71
  2744. ----------5A---------------------------------
  2745. INT 5A - IRQ10 relocated by DESQview 2.26+
  2746. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2747. SeeAlso: INT 50"DESQview",INT 72
  2748. ----------5B---------------------------------
  2749. INT 5B - IRQ11 relocated by DESQview 2.26+
  2750. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2751. SeeAlso: INT50"DESQview",INT 73
  2752. ----------5C---------------------------------
  2753. INT 5C - IRQ12 relocated by DESQview 2.26+
  2754. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2755. SeeAlso: INT 50"DESQview",INT 74
  2756. ----------5D---------------------------------
  2757. INT 5D - IRQ13 relocated by DESQview 2.26+
  2758. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2759. SeeAlso: INT 50"DESQview",INT 75
  2760. ----------5E---------------------------------
  2761. INT 5E - IRQ14 relocated by DESQview 2.26+
  2762. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2763. SeeAlso: INT 50"DESQview",INT 76
  2764. ----------5F---------------------------------
  2765. INT 5F - IRQ15 relocated by DESQview 2.26+
  2766. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  2767. SeeAlso: INT 50"DESQview",INT 77
  2768. ----------673F--CX5145-----------------------
  2769. INT 67 - QEMM-386 v5.11+ - INSTALLATION CHECK
  2770.     AH = 3Fh
  2771.     CX = 5145h
  2772.     DX = 4D4Dh
  2773. Return: AH = 00h if installed
  2774.         ES:DI -> QEMM API entry point
  2775.  
  2776. Call QEMM entry point with:
  2777.     AH = 00h get Windows3 status
  2778.         Return: CF clear
  2779.             AL = ???
  2780.                 bit 0 set if Windows3 support active
  2781.     AH = 01h set Windows3 status
  2782.         AL = ???
  2783.             bit 0 set: turn on Windows3 support
  2784.         Return: CF clear if successful
  2785.             CF set on error
  2786.     AH = 02h ???
  2787.         Return: CF clear
  2788.             AX = ???
  2789.     AH = 03h get QEMM version
  2790.         Return: CF clear
  2791.             AX = BX = version in BCD
  2792.     AH = 04h ???
  2793.     AH = 05h ???
  2794.     AH = 06h set mapping context???
  2795.         DX = page table number
  2796.         Return: CF clear
  2797.     AH = 07h get mapping context???
  2798.         Return: CF clear
  2799.             DX = page table number
  2800.     AH = 08h ???
  2801.         DX = linear page number
  2802.         Return: CF clear
  2803.     AH = 09h ???
  2804.         CX = ???
  2805.         Return: CF clear
  2806.             DX = linear page number
  2807.     AH = 0Ah ???
  2808.         CX = ???
  2809.         DX = linear page number
  2810.         Return: CF clear
  2811.     AH = 0Bh ???
  2812.         CX = 0100h
  2813.         DX = ???
  2814.         Return: AH = 00h
  2815.     AH = 0Ch get ???
  2816.         Return: CF clear
  2817.             BX = 0001h
  2818.             CX = ???
  2819.             DX = ???
  2820.     AH = 0Dh ???
  2821.         AL = zero/nonzero ???
  2822.         Return: CF clear
  2823.     AH = 0Eh ???
  2824.         DX = ???
  2825.         Return: CF clear
  2826.     AH = 0Fh ???
  2827.         CX = 0100h
  2828.         DX = 0010h
  2829.         ???
  2830.     AX = 1000h get ???
  2831.         Return: CF clear
  2832.             EAX = ???
  2833.     AX = 1001h get CPU debug registers
  2834.         ??? -> buffer for debug registers (8 DWORDs)
  2835.         Return: CF clear
  2836.     AX = 1002h set CPU debug registers
  2837.         ??? -> buffer containing debug registers (8 DWORDs)
  2838.         Return: CF clear
  2839.     AX = 1003h get machine status word
  2840.         Return: CF clear
  2841.             EAX = contents of CR0
  2842.     AX = 1004h ???
  2843.         ???
  2844.         Return: CF clear if successful
  2845.                 EDX = linear address of ???
  2846.             CF set on error
  2847.     AX = 1005h set ???
  2848.         EDX = ???
  2849.         Return: CF clear
  2850.     AX = 1006h NOP
  2851.         Return: CF set
  2852.     AX = 1007h get ???
  2853.         Return: CF clear
  2854.             EDX = ???
  2855.     AX = 1008h ???
  2856.         CX = ???
  2857.         ???
  2858.         Return: CF clear
  2859.             EDX = linear address of ???
  2860.     AX = 1009h ??? related to task switching???
  2861.     AX = 100Ah ??? related to task switching???
  2862.     AH = 11h get ???
  2863.         Return: CF clear
  2864.             BL = ???
  2865.     AH = 12h get HIRAM chain
  2866.         Return: CF clear
  2867.             BX = segment of first MCB in high memory
  2868.     AX = 1300h ???
  2869.         BL = ???
  2870.         Return: CF clear
  2871.             ???
  2872.     AX = 1301h ???
  2873.         CX = ???
  2874.         DX = ???
  2875.         DI = ???
  2876.         Return: CF clear
  2877.     AX = 1302h ???
  2878.         ???
  2879.         Return: CF clear
  2880.             ???
  2881.     AX = 1303h ??? EMS allocation
  2882.         BX = number of pages of EMS to allocate
  2883.         ???
  2884.         Return: CF clear
  2885.             ???
  2886.     AX = 1304h EMS deallocation
  2887.         DX = EMS handle
  2888.         Return: CF clear
  2889.     AX = 1305h ???
  2890.         CX = ???
  2891.         Return: CF clear
  2892.     AX = 1306h ???
  2893.         ???
  2894.         Return: CF clear
  2895.             ???
  2896.     AX = 1307h ???
  2897.         ???
  2898.         Return: CF clear
  2899.     AX = 1308h ???
  2900.         BL = ???
  2901.         Return: CF clear
  2902.     AX = 1309h set ??? address for QEMM real-mode stub to call
  2903.         ES???:BX -> new address for ???
  2904.         Return: CF clear
  2905.     AX = 130Ah ???
  2906.         CX:DX -> ???
  2907.         Return: CF clear
  2908.     AX = 130Bh ???
  2909.         BL = ???
  2910.         Return: CF clear
  2911.             ???
  2912.     AX = 130Ch set ???
  2913.         BX = ???
  2914.         Return: CF clear
  2915.     AX = 130Dh ???
  2916.         ???
  2917.         Return: CF clear
  2918.     AX = 130Eh ???
  2919.         ???
  2920.         Return: CF clear
  2921.     AX = 130Fh ???
  2922.         ???
  2923.         Return: CF clear
  2924.     AX = 1310h ???
  2925.         ???
  2926.         Return: CF clear
  2927.     AX = 1311h set ???
  2928.         BL = ???
  2929.         Return: CF clear
  2930.     AH = 14h ???
  2931.         AL = subfunction (00h-0Bh)
  2932.         ???
  2933.     AH = 15h ???
  2934.         ???:BX -> ???
  2935.         Return: CF set
  2936.     AH = 16h ???
  2937.         ES:DI -> ???
  2938.         AL = zero/nonzero ???
  2939.     AH = 17h get ???
  2940.         ES:DI -> buffer for ??? (see below)
  2941.         Return: CF clear
  2942.     AH = 18h ???
  2943.         ES???:BX -> ???
  2944.         CX = ???
  2945.         Return: CF clear
  2946.             AL = ???
  2947.     AH = 19h NOP
  2948.         Return: CF set
  2949.     AH = 1Ah I/O port access
  2950.         AL = subfunction
  2951.             00h get byte from I/O port
  2952.             Return: BL = port value
  2953.             01h send byte to I/O port
  2954.                 BL = value to send
  2955.             02h send byte to I/O port, get byte from following port
  2956.                 BH = value to send
  2957.             Return: BL = value read
  2958.             03h send bytes to two consecutive I/O ports
  2959.                 BH = value for first I/O port (DX)
  2960.             BL = value for second I/O port (DX+1)
  2961.         DX = port number
  2962.         Return: CF clear
  2963.     AH = 1Bh ???
  2964.         AL = subfunction (00h-07h) !!!
  2965.     AH = 1Ch ???
  2966.         AL = subfunction (00h-2Ah)
  2967.     AH = 1Dh (v6.00)
  2968.         AL = subfunction
  2969.             00h ???
  2970.             01h ???
  2971.             Note: clears any pending IRQ7 at end of function
  2972.             else
  2973.             Return: CF set
  2974.     AH = 1Eh (v6.00)
  2975.         AL = subfunction
  2976.             00h ???
  2977.             Return: BL = ???
  2978.                 BH = ???
  2979.                 CL = ???
  2980.                 CH = ???
  2981.                 DX = ??? (0000h)
  2982.                 SI = ??? (0000h)
  2983.                 DI = ??? (0000h)
  2984.             01h get ???
  2985.             Return: BX = ???
  2986.                 CF clear
  2987.             02h ???
  2988.             Return: BX = ???
  2989.                 CF clear
  2990.             else
  2991.                 Return: CF set
  2992.     AH = 1Fh (v6.00)
  2993.         AL = subfunction
  2994.             00h get ???
  2995.                 CX = ???
  2996.             Return: EDX = ???
  2997.                 CF clear
  2998.             01h set ???
  2999.                 CX = ???
  3000.             EDX = ???
  3001.             else
  3002.             Return: CF set
  3003.     AH = 20h (v6.00)
  3004.         AL = subfunction
  3005.             00h ???
  3006.             Return: BL = ???
  3007.                 CF clear
  3008.             01h ???
  3009.                 BL = ??? (bit 0 only)
  3010.             Return: BL = ???
  3011.                 CF clear
  3012.             else
  3013.             Return: CF set
  3014.     AH = 21h (v6.00)
  3015.         AL = subfunction
  3016.             00h ???
  3017.             Return: ???
  3018.                 CF clear
  3019.             else
  3020.             Return: CF set
  3021. ----------71---------------------------------
  3022. INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
  3023. Notes:    may be masked by setting bit 1 on I/O port A1h
  3024.     the default BIOS handler invokes INT 0A for compatibility, since the
  3025.       pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the
  3026.       AT expansion bus.
  3027.     under DESQview, only the INT 15h vector and BASIC segment address (the
  3028.       word at 0000h:0510h) may be assumed to be valid for the handler's
  3029.       process
  3030. SeeAlso: INT 0A,INT 59
  3031. ----------74---------------------------------
  3032. INT 74 - IRQ12 - POINTING DEVICE (PS)
  3033. Notes:    may be masked by setting bit 4 on I/O port A1h
  3034.     under DESQview, only the INT 15h vector and BASIC segment address (the
  3035.       word at 0000h:0510h) may be assumed to be valid for the handler's
  3036.       process
  3037. SeeAlso: INT 33,INT 5C
  3038. ----------75---------------------------------
  3039. INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
  3040.    redirected to INT 02 by the BIOS, for compatibility with the PC
  3041. Notes:    may be masked by setting bit 5 on I/O port A1h
  3042.     not all clones wire the coprocessor to generate this IRQ; some systems
  3043.       generate an NMI (see INT 02) or assert the -ERROR pin on the CPU
  3044.       (see INT 10"COPROCESSOR")
  3045.     under DESQview, only the INT 15h vector and BASIC segment address (the
  3046.       word at 0000h:0510h) may be assumed to be valid for the handler's
  3047.       process
  3048. SeeAlso: INT 10"COPROCESSOR",INT 5D
  3049. ---------------------------------------------
  3050. This compilation is Copyright (c) 1989, 1990, 1991 Ralf Brown
  3051.  
  3052. ARPA: ralf@cs.cmu.edu
  3053. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  3054. BIT:  ralf%cs.cmu.edu@cmuccvma
  3055. FIDO: Ralf Brown 1:129/26.1
  3056.     or post a message to me in the DR_DEBUG echo
  3057. CIS:  >INTERNET:ralf@cs.cmu.edu
  3058.