home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / DESQVIEW / TECH / DVINT590.ZIP / DVINT.LST < prev    next >
Encoding:
File List  |  1990-10-14  |  115.7 KB  |  2,426 lines

  1. DVINT 90.5  excerpt of DESQview-specific functions from the Interrupt List
  2.  
  3. INT 10 - VIDEO (TopView) - GET VIDEO BUFFER
  4.         AH = FEh
  5.         ES:DI = segment:offset of assumed video buffer
  6. Return: ES:DI = segment:offset of actual video buffer
  7. Notes:  if no multitasker is installed, ES:DI is returned unchanged
  8.         TopView requires a call to AH=FFh to notify if that the screen has
  9.           changed; DESQview will check for changes itself until the first call
  10.           to AH=FFh
  11. SeeAlso: INT 15/AX=1024h, INT 21/AH=2Bh"DESQview"
  12. ---------------------------------------------
  13. INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER
  14.         AH = FFh
  15.         CX = number of sequential characters that have been modified
  16.         DI = offset of first character that has been modified
  17.         ES = segment of video buffer
  18. Notes:  avoid CX=0000h
  19.         DESQview will discontinue the automatic screen updating initiated by
  20.           AH=FEh after this call
  21. ---------------------------------------------
  22. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  23.         AX = 1000h
  24. Return: after other processes run
  25. Note:   under DESQview, if the process issuing this call has hooked INT 08h,
  26.           the current time-slice is set to expire at the next clock tick rather
  27.           than immediately
  28. ---------------------------------------------
  29. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  30.         AX = 1001h
  31.         BX = number of bytes to allocate
  32. Return: ES:DI -> block of memory or 0000h:0000h (DV 2.26+)
  33. Note:   use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  34.           common memory
  35. SeeAlso: AX=1002h,AX=DE0Ch,AX=DE15h
  36. ---------------------------------------------
  37. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  38.         AX = 1002h
  39.         ES:DI -> previously allocated block
  40. Return: block freed
  41. SeeAlso: AX=1001h,DE0Dh
  42. ---------------------------------------------
  43. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  44.         AX = 1003h
  45.         BH = attribute
  46.         BL = character
  47.         DX = segment of object handle for window
  48. Note:   BX=0 does not display anything, it only positions the hardware cursor
  49. ---------------------------------------------
  50. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  51.         AH = 10h
  52.         AL = 04h thru 12h
  53. Return: pops up "Programming error" window in DV 2.x
  54. ---------------------------------------------
  55. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  56.         AX = 1013h
  57.         ES:DI -> FAR service routine
  58. Return: BX = bit mask indicating which bit was allocated
  59.              0000h if no more bits available
  60. SeeAlso: AX=1014h,AX=1015h
  61. Note:   only a few TopView/DESQview API calls are allowed during a hardware
  62.           interrupt; if other calls need to be made, the interrupt handler
  63.           must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  64. ---------------------------------------------
  65. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  66.         AX = 1014h
  67.         BX = bit mask from INT 15/AX=1013h
  68. SeeAlso: AX=1013h,AX=1015h
  69. ---------------------------------------------
  70. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  71.         AX = 1015h
  72.         BX = bit mask for interrupts to post
  73. Return: indicated routines will be called: (DV 2.0x) at next task switch
  74.                                            (DV 2.2x) immediately
  75. SeeAlso: AX=1013h,AX=1014h
  76. Notes:  this is one of the few TopView calls which are allowed from a hardware
  77.           interrupt handler
  78.         the handler will be called with ES containing the segment of the handle
  79.           of the next task to be executed; on return, ES must be the segment of
  80.           a task handle
  81. ---------------------------------------------
  82. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  83.         AX = 1016h
  84.         ES:DI = possible object handle
  85. Return: BX = FFFFh if ES:DI is a valid object handle
  86.              0000h if ES:DI is not
  87. SeeAlso: AX=DE14h
  88. ---------------------------------------------
  89. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  90.         AX = 1017h
  91. Return: pops up "Programming error" window in DV 2.x
  92. ---------------------------------------------
  93. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  94.         AX = 1018h
  95.         BH = column
  96.         BL = row
  97.         ES = segment of object handle for window below which to search
  98.              0000h = start search with topmost window
  99. Return: ES = segment of object handle for window which is visible at the
  100.                indicated position, or covered by indicated window
  101.            = 0000h no window
  102. SeeAlso: AX=1023h,AX=1024h
  103. ---------------------------------------------
  104. INT 15 - TopView - "SOUND" - MAKE TONE
  105.         AX = 1019h
  106.         BX = frequency in Hertz (0000h = silence)
  107.         CX = duration in clock ticks (18.2 ticks/sec)
  108. Return: immediately, tone continues to completion
  109. Notes:  if another tone is already playing, the new tone does not start until
  110.           completion of the previous one.  Up to 32 tones may be queued before
  111.           the process is blocked until a note completes.
  112.         in DV 2.00, the lowest tone allowed is 20 Hz
  113.         if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  114.           notes are also cancelled
  115. ---------------------------------------------
  116. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  117.         AX = 101Ah
  118. Return: stack switched
  119. Notes:  this call may not be nested; a second call must be preceded by a call
  120.           to "USTACK" (AX=1025h)
  121.         while TopView requires many API calls to be executed while on the
  122.           task's internal stack, DESQview allows those calls to be executed
  123.           regardless of the current stack
  124. SeeAlso: AX=1025h
  125. ---------------------------------------------
  126. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  127.         AX = 101Bh
  128. Return: task-switching temporarily disabled
  129. Notes:  will not task-switch until "ENDC" (AX = 101Ch) called unless task
  130.           voluntarily releases the CPU (upon regaining the CPU, task-switching
  131.           will again be disabled)
  132.         suspends the caller until DOS is free
  133. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  134. ---------------------------------------------
  135. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  136.         AX = 101Ch
  137. Return: task-switching enabled
  138. Note:   this API call may be made from within a hardware interrupt handler
  139. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh
  140. ---------------------------------------------
  141. INT 15 - TopView - "STOP" - STOP TASK
  142.         AX = 101Dh
  143.         ES = segment of object handle for task to be stopped
  144.              (== handle of main window for that task)
  145. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  146. Note:   once a task has been stopped, additional "STOP"s are ignored
  147. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  148.           current task
  149. SeeAlso: AX=101Eh,102Bh
  150. ---------------------------------------------
  151. INT 15 - TopView - "START" - START TASK
  152.         AX = 101Eh
  153.         ES = segment of object handle for task to be started
  154.              (== handle of main window for that task)
  155. Return: indicated task is started up again
  156. Note:   once a task has been started, additional "START"s are ignored
  157. SeeAlso: AX=101Dh,102Bh
  158. ---------------------------------------------
  159. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  160.         AX = 101Fh
  161.         BX = bit fields
  162.              bits 0-12: number of characters to display
  163.              bits 13,14: which mouse button may be pressed to remove window
  164.                          00 = either
  165.                          01 = left
  166.                          10 = right
  167.                          11 = either
  168.              bit 15: beep if 1
  169.         DS:DI -> text of message
  170.         CH = width of error window (0 = default)
  171.         CL = height of error window (0 = default)
  172.         DX = segment of object handle
  173. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  174. Note:   window remains on-screen until ESC or indicated mouse button is pressed
  175. ---------------------------------------------
  176. INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
  177.         AX = 1020h
  178. Return: pops up "Programming error" window in DV 2.0x
  179. ---------------------------------------------
  180. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  181.         AX = 1021h
  182.         BX = segment of object handle for task to interrupt (not self)
  183.         DX:CX -> FAR routine to jump to next time task is run
  184. Return: nothing
  185. Notes:  the FAR routine is entered with the current ES, DS, SI, DI, and BP
  186.           values, using the task's internal stack (see AX=101Ah); only SS:SP
  187.           needs to be preserved
  188.         multiple PGMINTs to a single task are processed last-in first-out
  189.         if the other task is in a DOS or DV API call, the interruption will
  190.           occur on return from that call
  191. ---------------------------------------------
  192. INT 15 - TopView - "GETVER" - GET VERSION
  193.         AX = 1022h
  194.         BX = 0
  195. Return: BX nonzero, TopView or compatible loaded
  196.         (BL = major version, BH = minor version)
  197. Notes:  TaskView returns BX = 0001h, DESQview 2.0 returns BX = 0A01h
  198. ---------------------------------------------
  199. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  200.         AX = 1023h
  201.         BX = segment of object handle for parent window within which to
  202.              position the window (0 = full screen)
  203.         ES = segment of object handle for window to be positioned
  204.         DL = bit flags
  205.              bits 0,1: horizontal position
  206.                 00 = current
  207.                 01 = center
  208.                 10 = left
  209.                 11 = right
  210.              bits 2,3: vertical position
  211.                 00 = current
  212.                 01 = center
  213.                 10 = top
  214.                 11 = bottom
  215.              bit 4: don't redraw screen if set
  216.              bits 5-7 not used
  217.         CH = number of columns to offset from position specified by DL
  218.         CL = number of rows to offset from position specified by DL
  219. Return: nothing
  220. ---------------------------------------------
  221. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  222.         AX = 1024h
  223.         BX = segment of object handle for window
  224.               (0 = use default)
  225. Return: ES:DI -> virtual screen
  226.         CX = size of virtual screen in bytes
  227.         DL = 00h text screen
  228.              01h graphics screen
  229. SeeAlso: INT 10/AH=FEh
  230. ---------------------------------------------
  231. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  232.         AX = 1025h
  233. Return: stack switched back
  234. Notes:  call only after having switched to internal stack with AX=101Ah
  235.         while TopView requires many API calls to be executed while on the
  236.           task's private stack, DESQview allows those calls to be executed
  237.           regardless of the current stack
  238. SeeAlso: AX=101Ah
  239. ---------------------------------------------
  240. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  241.         AH = 10h
  242.         AL = 26h thru 2Ah
  243. Return: pops up "Programming error" window in DV 2.x
  244. ---------------------------------------------
  245. INT 15 - DESQview 2.0 (TopView???) - "POSTTASK" - AWAKEN TASK
  246.         AX = 102Bh
  247.         BX = segment of object handle for task
  248. Return: nothing
  249. Note:   forces a task which is waiting on its objectq to continue by placing
  250.           the handle for the task on the objectq
  251. SeeAlso: AX=101Dh,AX=101Eh
  252. ---------------------------------------------
  253. INT 15 - DESQview 2.0 (TopView???) - START NEW APPLICATION IN NEW PROCESS
  254.         AX = 102Ch
  255.         ES:DI -> contents of .PIF/.DVP file (see below)
  256.         BX = size of .PIF/.DVP info
  257. Return: BX = segment of object handle for new task
  258.              0000h on error
  259.  
  260. Format of .PIF/.DVP file:
  261. Offset  Size    Description
  262.  00h    WORD    reserved (0)
  263.  02h 30 BYTEs   blank-padded program title
  264.  20h    WORD    maximum memory to allocate to partition in K
  265.  22h    WORD    minimum memory required in K
  266.  24h 64 BYTEs   ASCIZ program pathname
  267.  64h    BYTE    default drive letter ('A',...)
  268.  65h 64 BYTEs   ASCIZ default directory name
  269.  A5h 64 BYTEs   ASCIZ program parameters
  270.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  271.  E6h    BYTE    number of text pages used
  272.  E7h    BYTE    number of first interrupt to save
  273.  E8h    BYTE    number of last interrupt to save
  274.  E9h    BYTE    rows in virtual screen buffer
  275.  EAh    BYTE    columns in virtual screen buffer
  276.  EBh    BYTE    initial window position, row
  277.  ECh    BYTE    initial window position, column
  278.  EDh    WORD    system memory in K
  279.  EFh 64 BYTEs   ASCIZ shared program name
  280. 12Fh 64 BYTEs   ASCIZ shared program data file
  281. 16Fh    BYTE    flags1
  282.                 bit 7: writes text directly to screen
  283.                 bit 6: runs in foreground only
  284.                 bit 5: uses math coprocessor
  285.                 bit 4: accesses system keyboard buffer directly
  286.                 bits 3-1: reserved (0)
  287.                 bit 0: swappable
  288. 170h    BYTE    flags2
  289.                 bit 6: uses command-line parameters in field at A5h
  290.                 bit 5: swaps interrupt vectors
  291. ---information unique to .DVP files---
  292. 171h  2 BYTEs   keys to use on open menu
  293. 173h    WORD    size of script buffer in bytes
  294. 175h    WORD    automatically give up CPU after this many tests for keyboard
  295.                 input in one clock tick (default 0 = never)
  296. 177h    BYTE    nonzero = "uses own colors"
  297. 178h    BYTE    nonzero if application swappable
  298. 179h  3 BYTEs   reserved (0)
  299. 17Ch    BYTE    nonzero to automatically close on exit
  300. 17Dh    BYTE    nonzero if copy-protect floppy is required
  301. ---information unique to DESQview 2.0+---
  302. 17Eh    BYTE    .DVP version number
  303.                 00h DESQview 1.2+
  304.                 01h DESQview 2.0+
  305.                 02h DESQview 2.2+
  306. 17Fh    BYTE    reserved (0)
  307. 180h    BYTE    initial number of rows in physical window
  308. 181h    BYTE    initial number of columns in physical window
  309. 182h    WORD    maximum expanded memory to allow, in K
  310. 184h    BYTE    flags3
  311.                 bit 7: automatically assign window position
  312.                 bit 5: maximum memory value has been specified
  313.                 bit 4: disallow "Close" command
  314.                 bit 3: foreground-only when doing graphics
  315.                 bit 2: don't virtualize
  316. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  317. 186h    BYTE    number of graphics pages used
  318. 187h    WORD    extra system memory size
  319. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  320. ---information unique to DESQview 2.2+---
  321. 18Ah    BYTE    serial port usage
  322.                 FFh uses all serial ports
  323.                 00h no serial ports
  324.                 01h only COM1
  325.                 02h only COM2
  326. 18Bh    BYTE    flags4
  327.                 bit 7: automatically close application on exit if .COM or .EXE
  328.                         specified
  329.                 bit 6: swappable if not using serial ports
  330.                 bit 5: start program with window hidden (v2.26+)
  331.                 bit 4: start program in background (v2.26+)
  332.                 bit 3: virtualize text
  333.                 bit 2: virtualize graphics
  334.                 bit 1: share CPU when foreground
  335.                 bit 0: share EGA when foreground and zoomed
  336. 18Ch    BYTE    protection level for 386 machines
  337. 18Dh 19 BYTEs   reserved (0)
  338. ---------------------------------------------
  339. INT 15 - DESQview 2.0 - KEYBOARD MOUSE CONTROL
  340.         AX = 102Dh
  341.         BL = subfunction
  342.              00h determine whether using keyboard mouse
  343.                 Return: BL = 00h using real mouse
  344.                              01h using keyboard mouse
  345.              01h turn keyboard mouse on
  346.              02h turn keyboard mouse off
  347. ---------------------------------------------
  348. INT 15 - TopView commands
  349.         AH = 11h
  350.         AL = various (except 17h)
  351. Note:   in DESQview 2.x, these function calls are identical to AH=DEh, so
  352.           see those below
  353. SeeAlso: AH=DEh
  354. ---------------------------------------------
  355. INT 15 - DESQview 2.2+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  356.         AX = 1117h
  357.         BX = 0000h      get current mapping context without setting
  358.              nonzero    set new mapping context
  359. Return: BX = mapping context in effect before call
  360.         interrupts enabled
  361. Notes:  this function differs from AX = DE17h for DESQview v2.20 through 2.25
  362.         mapping contexts determine conventional-memory addressability; setting
  363.           a mapping context ensures that the associated program and data areas
  364.           are in memory for access.  Usable by drivers, TSRs and shared
  365.           programs.
  366.         caller need not be running under DESQview, but must ensure that the
  367.           stack in use will not be mapped out by the call
  368. ---------------------------------------------
  369. INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
  370.         AX = 11DEh
  371. Return: CF clear if installed
  372.             AX = segment at which XDV is located
  373. ---------------------------------------------
  374. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  375.         AH = 12h
  376.         BH = 00h
  377.         BL = which handle to return
  378.             00h handle in DWORD on top of stack
  379.             01h current task's window handle
  380.             02h given task's mailbox handle (task's handle on stack)
  381.             03h current task's mailbox handle
  382.             04h given task's keyboard handle (task's handle on stack)
  383.             05h current task's keyboard object handle
  384.             06h given task's OBJECTQ handle (task's handle on stack)
  385.             07h current task's OBJECTQ handle
  386.             08h   \
  387.               thru > return 0000:0000 under DV < 2.26
  388.             10h   /
  389.             0Ch (2.26+) task owning object with handle in DWORD on top of stack
  390.             0Dh (2.26+) task handle of owner (parent) of current task
  391. Return: DWORD on top of stack is object handle
  392. Note:   BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  393.           mailbox, panel, pointer, and timer objects) or is an orphan (task,
  394.           window)
  395. ---------------------------------------------
  396. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  397.         AH = 12h
  398.         BH = 01h
  399.         BL = object type to create
  400.             00h (DV 2.0x only) handle is DWORD on top of stack
  401.             01h (DV 2.0x only) use task's window handle
  402.             02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  403.             03h (DV 2.0x only) current task's mailbox
  404.             04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  405.             05h (DV 2.0x only) current task's keyboard object
  406.             08h WINDOW class
  407.             09h MAILBOX class
  408.             0Ah KEYBOARD class
  409.             0Bh TIMER object (counts down 32-bit time in 10ms increments)
  410.             0Fh POINTER object
  411.             10h PANEL object
  412.         STACK: (if window object or WINDOW class)
  413.                DWORD address to jump to (no new task if high word == 0)
  414.                DWORD (reserved) 0 = non-task window, FFFFh = task window
  415.                DWORD bytes for task's private stack (FFFFh == default of 0100h)
  416.                DWORD bytes system memory for input buffer for READ/READN
  417.                         (0 == none, -1 == default--same as logical window size)
  418.                DWORD window size, columns
  419.                DWORD window size, rows
  420.                DWORD length of window title
  421.                DWORD address of window title
  422. Return: DWORD on top of stack is new object handle
  423. Notes:  if a new task is created, it is started with
  424.           AX = BX = SI = DI = BP = 0
  425.           DX:CX = handle of parent task
  426.           DS = ES = SS = segment of private stack (and new task's handle)
  427.         new windows are orphans, inherit the colors/hidden status of the
  428.           creating task's window, and are placed in the upper left hand corner
  429.           of the screen but not automatically redrawn
  430.         new keyboards are closed, and have all object bits cleared except for
  431.           the hardware cursor bit
  432. SeeAlso: AH=12h/BH=02h
  433. ---------------------------------------------
  434. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  435.         AH = 12h
  436.         BH = 02h
  437.         BL = object
  438.             00h handle in DWORD on top of stack
  439.                 window: close window and free
  440.                 timer: free timer
  441.                 panel: free panel object
  442.                 pointer: free pointer
  443.             01h task's window handle - kills task, never returns
  444.             02h given task's mailbox (task's handle on top of stack)
  445.             03h current task's mailbox
  446.             04h given task's keyboard (task's handle on top of stack)
  447.             05h current task's keyboard object
  448. Notes:  when a window is freed, its keyboard and pointer objects are freed;
  449.           task windows also free any mailbox, objectq, and panel objects held
  450.           by the task and any child tasks
  451.         if the keyboard being freed is the default keyboard for a task, this
  452.           call is equivalent to CLOSE
  453.         panel and pointer objects are automatically closed if open
  454. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh
  455. ---------------------------------------------
  456. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  457.         AH = 12h
  458.         BX = 0300h
  459.         STACK: DWORD handle of panel object
  460. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  461.                DWORD address of directory
  462. Note:   a null string is returned if the object is not open
  463.  
  464. Format of panel file:
  465. Offset  Size    Description
  466.  00h  2 BYTEs   C0h C3h
  467.  02h    BYTE    number of panels in file
  468.  03h    for each panel in file:
  469.             8 BYTEs  blank-padded panel name
  470.               DWORD  panel offset in file
  471.               WORD   panel length
  472.         data for panels (each consists of one or more window/query/manager
  473.         streams)
  474.             first byte of each panel must be 1Bh, fifth byte must be E5h
  475. ---------------------------------------------
  476. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  477.         AH = 12h
  478.         BH = 03h
  479.         BL = object
  480.             00h mailbox handle in DWORD on top of stack
  481.             02h sender of last msg read from mailbox (task's handle on stack)
  482.             03h sender of last msg read from current task's mailbox
  483. Return: DWORD on stack is task handle of message sender
  484. SeeAlso: AH=12h/BH=00h
  485. ---------------------------------------------
  486. INT 15 - DESQview 2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  487.         AH = 12h
  488.         BH = 03h
  489.         BL = window to be connected
  490.             00h handle of window to be attached in DWORD on top of stack
  491.             01h attach current task's main window
  492.         STACK: DWORD handle of window to attach to or 00000000h to detach
  493. Return: ???
  494. Notes:  when two windows are connected, both will move if the user moves either
  495.         multiple windows may be attached to a single window, but each window
  496.           may only be attached to one window at a time
  497. ---------------------------------------------
  498. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  499.         AH = 12h
  500.         BX = 0400h
  501.         STACK: DWORD timer's handle
  502. Return: after timer expires
  503.         STACK: DWORD time in 1/100 sec after midnight when timer expired
  504. ---------------------------------------------
  505. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  506.         AH = 12h
  507.         BH = 04h
  508.         BL = window to read from
  509.             00h handle is DWORD on top of stack
  510.             01h use calling task's default window
  511.             0Ch (DV 2.26+) default window of task owning handle on top of stack
  512.             0Dh (DV 2.26+) default window of parent task of current task
  513. Return: STACK:  DWORD number of bytes read
  514.                 DWORD address of buffer
  515. Notes:  reading starts at the current logical cursor position; the cursor is
  516.           updated to point at the character following the last one read
  517.         any translucent blanks (FFh) which are visible on screen are changed
  518.           to the character which is seen through them
  519.         the string produced by the read is placed in an input buffer which may
  520.           be reused by the next READ or READN of a window
  521.         window stream opcodes D8h and D9h determine whether the read returns
  522.           characters or attributes
  523. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h
  524. ---------------------------------------------
  525. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  526.         AH = 12h
  527.         BH = 04h
  528.         BL = object
  529.             00h handle is DWORD on top of stack
  530.                 mailbox: wait for and get next message
  531.                 keyboard: wait for and get pointer to next input buffer
  532.                 pointer: wait for and get next message
  533.             02h get next message from mailbox (task's handle on top of stack)
  534.             03h get next message from current task's mailbox
  535.             04h get the next input from keyboard (handle on top of stack)
  536.             05h get the next input from task's default keyboard
  537.             06h wait for input from any object in OBJECTQ (handle on stack)
  538.             07h wait for input from any object in task's default OBJECTQ
  539. Return: STACK: (if objectq) DWORD handle of object with input
  540.                (otherwise)  DWORD number of bytes
  541.                             DWORD address
  542. Notes:  for a keyboard in keystroke mode, the input buffer is a single byte
  543.           containing the character code as returned by the BIOS; the BIOS scan
  544.           code is available via the STATUS call if the character is zero
  545.         for a keyboard in field mode, the input buffer format is determined
  546.           by the field table header for the window the keyboard is attached to
  547.         keyboard input buffers and mailbox message buffers may be invalidated
  548.           by the next READ, ERASE, CLOSE, or FREE message to the same object
  549. SeeAlso: AH=12h/BH=05h"OBJECT"
  550.  
  551. Format of pointer message:
  552. Offset  Size    Description
  553.  00h    WORD    row
  554.  02h    WORD    column
  555.  04h    BYTE    status
  556.                 bit 6: set when press/release mode active and button released
  557.                 bits 7-2: number of clicks-1 if multiple-click mode active
  558.                 bits 1,0: button pressed (00=none,01=button1,10=button2)
  559.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  560. ---------------------------------------------
  561. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  562.         AH = 12h
  563.         BX = 0400h
  564.         STACK: DWORD handle of panel object
  565.                DWORD window's handle (or 0 for current task's window)
  566.                DWORD length of panel name
  567.                DWORD pointer to panel name
  568. Return: STACK: DWORD handle of keyboard or 0
  569.                DWORD handle of window which was used
  570. Notes:  status of APPLY may be checked with STATUS message
  571.         panel MUST have the following format
  572.           first byte must be 1Bh (i.e. must start with a stream)
  573.           first opcode in stream must be E5h
  574.             single byte arg of opcode is interpreted thus:
  575.               bits 7,6  11 means create new window
  576.                         10 means create new field table for existing window
  577.                         01 means use existing window and field table
  578.               bit 5 if set, panel contains a field table 
  579.                         (creates a new keyboard and puts it in field mode)
  580.               bit 4 if set, panel contains input fields
  581.               bit 3 if set, panel contains select fields but no input fields
  582.         if the panel contains input or select fields, a keyboard handle is
  583.           returned; either the window's current open keyboard or a
  584.           newly-created keyboard object.  The caller should read that keyboard
  585.           to obtain input from the panel.
  586. --------------------------------------------
  587. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  588.         AH = 12h
  589.         BH = 05h
  590.         BL = object
  591.             00h handle is DWORD on top of stack
  592.                 timer: start timer to end at a specified time
  593.                 keyboard: add input buffer to queue
  594.                 pointer: move pointer icon to specified position
  595.             02h send message by value/status=0 to mbox (task's handle on stack)
  596.             03h send message by value/status=0 to current task's mailbox
  597.             04h add input buffer to KEYBOARD queue (handle on top of stack)
  598.             05h add input buffer to task's default KEYBOARD queue
  599.             06h add an object to OBJECTQ (handle on top of stack)
  600.             07h add an object to task's default OBJECTQ
  601.         STACK: (if mailbox)  DWORD length
  602.                              DWORD address
  603.                (if keyboard) DWORD status (scan code in keystroke mode)
  604.                              DWORD length (should be 1 in keystroke mode)
  605.                              DWORD address
  606.                (if objectq)  DWORD handle of object to add
  607.                (if timer)    DWORD 1/100ths seconds since midnight (actually
  608.                                    only accurate to 1/18 sec)
  609.                (if pointer)  DWORD column relative to origin of window
  610.                              DWORD row relative to origin of window
  611. Notes:  under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  612.         the data and status written to a keyboard object must match the format
  613.           returned by the keyboard object in the current mode
  614.         the pointer position is scaled according to the current scaling factors
  615. SeeAlso: AH=12h/BH=04h
  616. ---------------------------------------------
  617. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  618.         AH = 12h
  619.         BH = 05h
  620.         BL = window to write to
  621.             00h DWORD on top of stack is window handle
  622.             01h write string to task's default window
  623.             0Ch (DV 2.26+) default window of task owning handle on top of stack
  624.             0Dh (DV 2.26+) default window of parent of current task
  625.         STACK: DWORD object handle if handle passed on stack
  626.                DWORD total length of string (high word == 0)
  627.                DWORD address of string to display
  628. Return: indicated actions performed
  629.         a. non-control characters are displayed (opcodes DEh and DFh control
  630.            whether the attributes are left or changed to the current attrib)
  631.         b. CR/LF/BS/Tab cause the usual cursor movement
  632.         c. ESC starts a data structure with additional commands if following
  633.            byte is less than 20h; otherwise, it is written to the window
  634.         STACK:  DWORD handle of new window if window stream opcode E6h
  635.                 else nothing
  636.  
  637. Data Structure:
  638.         MAGIC  DB  1Bh
  639.         MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  640.         LENGTH DW  ?   ; length of remainder in bytes
  641.         var-length fields follow, each an OPCODE followed by
  642.              zero or more args
  643.  
  644. MODE 00h (set or display values) "WINDOW STREAM"
  645.     Opcodes:args
  646.         00h  display 20h blanks with the default attribute
  647.         01h-1Fh display OPCODE blanks with the default attribute
  648.         20h  display char with default attribute 20h times
  649.              BYTE char to repeat
  650.         21h-3Fh display char with default attribute OPCODE-20h times
  651.              BYTE char to repeat
  652.         40h  display 20h blanks with specified attribute
  653.              BYTE attribute of blanks
  654.         41h-5Fh display OPCODE-40h blanks with specified attribute
  655.              BYTE attribute of blanks
  656.         60h  display next 20h characters
  657.              20h BYTES characters to display
  658.         61h-7Fh display next OPCODE-60h characters
  659.              N BYTES characters to display
  660.         80h-87h  display N blanks with default attribute
  661.              BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  662.                       [000h means 800h]
  663.         88h-8Fh display N copies of the character
  664.              BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  665.                       [000h means 800h]
  666.              BYTE character to repeat
  667.         90h-97h  display N blanks with specified attribute
  668.              BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  669.                       [000h means 800h]
  670.              BYTE attribute
  671.         98h-9FH  display string at logical cursor pos
  672.              BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  673.                       [000h means 800h]
  674.              N BYTES string to display
  675.         A0h  set logical cursor row
  676.              BYTE row number (0 is top)
  677.         A1h  set logical cursor column
  678.              BYTE column number (0 is leftmost)
  679.         A2h  set top edge of scrolling region
  680.              BYTE row
  681.         A3h  set left edge of scrolling region
  682.              BYTE column
  683.         A4h  set row of physical window position
  684.              BYTE line
  685.         A5h  set column of physical window position
  686.              BYTE column
  687.         A6h  set height of physical window
  688.              BYTE #rows
  689.         A7h  set width of physical window
  690.              BYTE #columns
  691.         A8h  set viewport row
  692.              BYTE row
  693.         A9h  set viewport column
  694.              BYTE column
  695.         AAh  set virtual screen height [contents of window unpredictable after]
  696.              BYTE rows
  697.         ABh  set virtual screen width [contents of window unpredictable after]
  698.              BYTE columns
  699.         ACh-AEh  unused
  700.         AFh  set compatible/preferred video modes
  701.              BYTE compatibility/preference mask
  702.                 bit 7   compatible with monochrome
  703.                 bit 6   compatible with color text, EGA/VGA graphics
  704.                 bit 5   compatible with medium-resolution CGA graphics
  705.                 bit 4   compatible with high-resolution CGA graphics
  706.                 bit 3   prefer monochrome
  707.                 bit 2   prefer color text, EGA/VGA graphics
  708.                 bit 1   prefer medium-resolution CGA graphics
  709.                 bit 0   prefer high-resolution CGA graphics
  710.         B0h  move logical cursor down
  711.              BYTE #rows (signed, negative values move up)
  712.                         [if #rows=0 and hardware cursor owner, update hw crsr]
  713.         B1h  move logical cursor right
  714.              BYTE #cols (signed, negative values move left)
  715.                         [if #cols=0 and hardware cursor owner, update hw crsr]
  716.         B2h  shift top edge of scrolling region
  717.              BYTE #rows (signed)
  718.         B3h  shift left edge of scrolling region
  719.              BYTE #cols (signed)
  720.         B4h  shift physical window down
  721.              BYTE #lines (signed)
  722.         B5h  shift physical window right
  723.              BYTE #columns (signed)
  724.         B6h  expand physical window vertically
  725.              BYTE #lines (signed)
  726.         B7h  expand physical window horizontally
  727.              BYTE #columns (signed)
  728.         B8h  adjust viewport row
  729.              BYTE #rows (signed)
  730.         B9h  adjust viewport column
  731.              BYTE #columns (signed)
  732.         BAh  adjust virtual screen height [contents of window unpredict after]
  733.              BYTE #rows to increase (signed)
  734.         BBh  adjust virtual screen width [contents of window unpredictbl after]
  735.              BYTE #cols to increase (signed)
  736.         BCh-BFh  reserved (currently unused)
  737.         C0h  set logical cursor position
  738.              BYTE row number (0 is top border)
  739.              BYTE column number (0 is left border)
  740.         C1h  set top left corner of scrolling region
  741.              BYTE row
  742.              BYTE column
  743.         C2h  set physical window pos
  744.              BYTE upper left row (no top border if 0)
  745.              BYTE upper left column (no left border if 0)
  746.         C3h  set current window size
  747.              BYTE #rows
  748.              BYTE #cols
  749.         C4h  set upper left corner of viewport (portion of virtual screen
  750.              displayed in window)
  751.              BYTE row
  752.              BYTE column
  753.         C5h  set size of virtual screen [contents unpredictable afterwards]
  754.              BYTE #rows
  755.              BYTE #cols
  756.         C6h  unused
  757.         C7h  unused
  758.         C8h  set logical cursor relative to current position
  759.              BYTE number of rows to move down (signed)
  760.              BYTE number of columns to move right (signed)
  761.                   [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  762.         C9h  shift top left corner of scrolling region
  763.              BYTE #rows (signed)
  764.              BYTE #cols (signed)
  765.         CAh  set window pos relative to current position
  766.              BYTE number of rows to shift down (signed)
  767.              BYTE number of columns to shift right (signed)
  768.         CBh  set window size relative to current size
  769.              BYTE number of rows to expand (signed)
  770.              BYTE number of cols to expand (signed)
  771.         CCh  shift viewport relative to current position
  772.              BYTE rows to shift (signed)
  773.              BYTE cols to shift (signed)
  774.         CDh  resize virtual screen
  775.              BYTE #rows to expand (signed)
  776.              BYTE #cols to expand (signed)
  777.         CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  778.         CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  779.         D0h  allow window frame to extend beyond screen
  780.         D1h  always display a complete frame, even if window extends beyond 
  781.              edge of screen
  782.         D2h  allow DV to change logical colors on video mode switch (default)
  783.         D3h  application changes logical attributes
  784.         D4h  window is visible [must redraw to actually make visible]
  785.         D5h  window is hidden [must redraw to actually remove]
  786.         D6h  window has frame (default)
  787.         D7h  window unframed [must redraw to actually remove frame]
  788.         D8h  READ/READN will read characters from window (default)
  789.         D9h  READ/READN will read attributes from window
  790.         DAh  use logical attributes, which may be remapped
  791.                 attributes
  792.                    1 normal text
  793.                    2 highlighted normal text
  794.                    3 help text
  795.                    4 highlighted help text
  796.                    5 error message
  797.                    6 highlighted error message
  798.                    7 emphasized text
  799.                    8 marked text
  800.                    9-16 are reverse video versions of 1-8
  801.         DBh  use physical attributes for characters
  802.         DCh  enable special actions for control characters (default)
  803.         DDh  disable special control char handling, all chars displayable by
  804.              BIOS TTY call
  805.         DEh  write both character and attribute (default)
  806.         DFh  write character only, leave attribute untouched
  807.         E0h  repeat following commands through E1h opcode
  808.              BYTE number of times to repeat (00h means 256 times)
  809.         E1h  end of commands to repeat, start repeating them
  810.         E2h  set current output color
  811.              BYTE color
  812.         E3h  clear virtual screen from scroll origin to end using current color
  813.         E4h  redraw window
  814.         E5h  select menu style
  815.              BYTE style (normally 18h)
  816.                 bits 5,4 = 01 use two-letter menu entries for remainder of
  817.                   this stream
  818.         E5h  (panel file only)
  819.              BYTE modifier
  820.                 bits 7,6 = 11 panel stream creates new window
  821.                          = 10 panel defines new field table for existing window
  822.                          = 01 panel stream uses existing window & field table
  823.                 bit 5 = 1 stream contains a field table (create kyboard object)
  824.                 bit 4 = 1 stream defines input fields (create keyboard object)
  825.                 bit 3 = 1 stream defines select fields but not input fields
  826.                 bit 2 = 1 stream defines exclusive input window (DV 2.2)
  827.                 bit 1 reserved
  828.                 bit 0 reserved
  829.         E6h  create new window and perform rest of manipulations in new window
  830.              BYTE number of rows
  831.              BYTE number of columns
  832.              Return: DWORD object handle of new window returned on stack at end
  833.         E7h  no operation
  834.         E8h  scroll area up (top left corner defined by opcode C1h)
  835.              BYTE height
  836.              BYTE width
  837.         E9h  scroll area down (top left corner defined by opcode C1h)
  838.              BYTE height
  839.              BYTE width
  840.         EAh  scroll area left (top left corner defined by opcode C1h)
  841.              BYTE height
  842.              BYTE width
  843.         EBh  scroll area right (top left corner defined by opcode C1h)
  844.              BYTE height
  845.              BYTE width
  846.         ECh  set logical attributes for window contents
  847.              BYTE video modes command applies to
  848.                 bit 7   monochrome
  849.                 bit 6   color text, EGA/VGA graphics
  850.                 bit 5   medium-resolution CGA graphics
  851.                 bit 4   high-resolution CGA graphics
  852.              BYTE which attributes to set
  853.                 bit 7  if set, copy single following byte to indicated attribs
  854.                 bits 4-6  # of first attribute to change - 1
  855.                 bits 0-3  # of consecutive attributes to change
  856.              N BYTEs new attributes
  857.         EDh  set logical attributes for window frame
  858.              BYTE video modes command applies to (see opcode ECh)
  859.              BYTE which attributes to set
  860.                 bit 7  if set, copy single following byte to indicated attrs
  861.                 bits 4-6  # of first attribute to change - 1
  862.                 bits 0-3  # of consecutive attributes to change
  863.              N BYTEs new attributes
  864.                   attributes
  865.                        1 = top left corner
  866.                        2 = top right corner
  867.                        3 = bottom left corner
  868.                        4 = bottom right corner
  869.                        5 = top edge
  870.                        6 = bottom edge
  871.                        7 = left edge
  872.                        8 = right edge
  873.         EEh  set characters for window frame
  874.              BYTE video modes command applies to (see opcode ECh)
  875.              BYTE which characters to set
  876.                 bit 7  if set, copy single following byte to indicated chars
  877.                 bits 4-6  # of first char to change - 1
  878.                 bits 0-3  # of consecutive chars to change
  879.              N BYTEs new chars (same relative position as attributes above)
  880.         EFh  set window name
  881.              BYTE length of name (should be in range 0 to logical screen width)
  882.              N BYTEs name
  883.         F0h  clear input field to blanks
  884.              BYTE field number
  885.         F1h  fill input field with character
  886.              BYTE field number
  887.              BYTE char
  888.         F2h  set color of input field
  889.              BYTE field number (1-N)
  890.              BYTE attribute
  891.         F3h  set initial contents of input field
  892.              BYTE field number (1-N)
  893.              N BYTEs enough chars to exactly fill field as defined by op FFh
  894.         F4h  position cursor to start of specific input field
  895.              BYTE field number (1-N)
  896.         F5h  change field table entry
  897.              BYTE field number
  898.              7-8 BYTEs field table entry (see opcode FFh below)
  899.         F6h  set field type
  900.              BYTE field number
  901.              BYTE type
  902.                         00h inactive
  903.                         40h output field
  904.                         80h input field
  905.                         C0h deselected field
  906.                         C2h selected field
  907.         F7h  "broadcast write"  write data to fields with program output bit
  908.                 set in field table entry, in field number order
  909.              N BYTEs (total length of all program output fields)
  910.         F8h  scroll field up a line
  911.              BYTE field number
  912.         F9h  scroll field down a line
  913.              BYTE field number
  914.         FAh  scroll field left
  915.              BYTE field number
  916.         FBh  scroll field right
  917.              BYTE field number
  918.         FCh  set field table header
  919.              BYTE number of fields (must be <= existing number of fields)
  920.              BYTE screen behavior bits
  921.                 bit 7  reserved
  922.                 bit 6  set if menu items may be selected via keyboard
  923.                 bit 5  set if left mouse button may terminate entry
  924.                 bit 4  set if right mouse button may terminate entry
  925.                 bit 3  if set, select fields return contents or blanks rather
  926.                         than 'Y' or 'N'
  927.                 bit 2  if set, modified bits reset on return to application
  928.                 bits 0,1 = 00 no data returned on read of keyboard
  929.                            01 data returned as array of chars containing
  930.                                 all fields packed together, with no field
  931.                                 numbers
  932.                            10 data returned as numbered variable-length
  933.                                 records for all fields
  934.                            11 data returned as numbered variable-length
  935.                                 records for the fields which were modified
  936.              BYTE current input field (updated by DESQview)
  937.              BYTE current select field (updated by DESQview)
  938.              BYTE attribute for select fields when they are pointed at
  939.              BYTE attribute for select fields which have been selected
  940.         FDh  reset modified bit for all fields
  941.         FEh  reset selected and modified bits for all fields
  942.         FFh  set up input fields
  943.              6 BYTEs table header (see opcode FCh above)
  944.              the field table entries, one for each field
  945.                  BYTE start row    \
  946.                  BYTE start column  \ if menu selection and start is to
  947.                  BYTE end row       / right or below end, select from kbd only
  948.                  BYTE end column   /
  949.                  BYTE field type
  950.                     bits 7,6 = 00 inactive (non-entry) field
  951.                                01 echos keystrokes input to make menu selection
  952.                                10 fill-in field
  953.                                11 select field
  954.                     bit 5  field can be filled by broadcast write (F7h opcode)
  955.                     bit 4  reserved
  956.                     bit 3  reserved
  957.                     bit 2  reserved
  958.                     bit 1  set if field selected
  959.                     bit 0  set if field modified
  960.                  BYTE modifier
  961.                       if type is fill-in, then bit flags to determine behavior
  962.                           bit 7  if set, automatically enter CR when field full
  963.                           bit 6  move to next field when current field is full
  964.                           bit 5  if set, enter text from right end (for numbers)
  965.                           bit 4  if set, force input to uppercase
  966.                           bit 3  if set, clear old contents on first keystroke
  967.                           bit 2  if set, input returned when cursor moves out
  968.                                  of modified field (API level 2.02+)
  969.                           bit 1  reserved
  970.                           bit 0  reserved
  971.                       if select field, first key to press to activate
  972.                           00h if have to point-&-click or is an extended-ASCII
  973.                               keystroke (only if two-key menus enabled)
  974.                  BYTE (select field only) normal color of field
  975.                  BYTE second key for select field.  This byte is present iff
  976.                       two-letter menu entries selected with opcode E5h, and
  977.                       in that case is present regardless of field type
  978.              Note: DESQview uses and updates the actual copy of the information
  979.                which is contained in the stream.  Thus this info must remain
  980.                intact until after the data entry is complete.
  981.  
  982. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  983.         A0h return logical cursor row in next byte
  984.         A1h return logical cursor column in next byte
  985.         A2h return top row of scrolling region in next byte
  986.         A3h return left column of scrolling region in next byte
  987.         A4h return row of physical window origin in next byte
  988.         A5h return column of physical window origin in next byte
  989.         A6h return height of physcial window in next byte
  990.         A7h return width of physical window in next byte
  991.         A8h return row of viewport origin in next byte
  992.         A9h return column of viewport origin in next byte
  993.         AAh return height of virtual screen in next byte
  994.         ABh return width of virtual screen in next byte
  995.         AFh return current video mode in next byte
  996.         C0h return current logical cursor position in next two bytes
  997.         C1h return top left corner of scrolling region in next two bytes
  998.         C2h return current window position in next two bytes
  999.         C3h return current window size in next two bytes
  1000.         C4h return current viewport origin in next two bytes
  1001.         C5h return current virtual screen size in next two bytes
  1002.         D0h \ overwritten with D0h if frames may fall off screen edge
  1003.         D1h /                  D1h if frames always displayed entirely
  1004.         D2h \ overwritten with D2h if DESQview controls color palette
  1005.         D3h /                  D3h if application changes color palette
  1006.         D4h \ overwritten with D4h if window visible
  1007.         D5h /                  D5h if window hidden
  1008.         D6h \ overwritten with D6h if window has frame
  1009.         D7h /                  D7h if window unframed
  1010.         D8h \ overwritten with D8h if reading characters from window
  1011.         D9h /                  D9h if reading attributes from window
  1012.         DAh \ overwritten with DAh if using logical attributes
  1013.         DBh /                  DBh if using physical attributes
  1014.         DCh \ overwritten with DCh if TTY control char interpretation on
  1015.         DDh /                  DDh if TTY control char interpretation off
  1016.         DEh \ overwritten with DEh if writing both characters and attributes
  1017.         DFh /                  DFh if leaving attributes untouched
  1018.         E2h return current color in next byte
  1019.         ECh get logical attributes for window contents
  1020.             BYTE execute call if currently in specified video mode
  1021.                 bit 7   monochrome
  1022.                 bit 6   color text, EGA/VGA graphics
  1023.                 bit 5   medium-resolution CGA graphics
  1024.                 bit 4   high-resolution CGA graphics
  1025.             BYTE which attributes to get
  1026.                 bit 7 unused???
  1027.                 bits 4-6 first attribute to get - 1
  1028.                 bits 0-3 # consecutive attributes
  1029.             N BYTEs buffer to hold attributes
  1030.         EDh get logical attributes for window frame
  1031.             BYTE execute call if currently in video mode (see opcode ECh)
  1032.             BYTE which attributes to get
  1033.                 bit 7 unused???
  1034.                 bits 4-6 first attribute to get - 1
  1035.                 bits 0-3 # consecutive attributes
  1036.             N BYTEs buffer to hold attributes
  1037.         EEh get characters for window frame
  1038.             BYTE execute call if currently in video mode (see opcode ECh)
  1039.             BYTE which attributes to get
  1040.                 bit 7 unused???
  1041.                 bits 4-6 first char to get - 1
  1042.                 bits 0-3 # consecutive chars
  1043.             N BYTEs buffer to hold chars
  1044.         EFh return first N characters of current window name
  1045.             BYTE    max length of returned name
  1046.             N BYTEs buffer to hold window name
  1047.         F3h return contents of specified field
  1048.             BYTE field number
  1049.             N BYTEs buffer to hold field contents (size exactly equal to field
  1050.                     size)
  1051.         F5h get field table entry
  1052.             BYTE field number
  1053.             7-8 BYTEs buffer to hold field table entry
  1054.                Notes: DV < 2.26 always returns 7 bytes
  1055.                       DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1056.                         table is using 8-byte entries and eighth byte after
  1057.                         F5h is E7h (NOP); otherwise, 7 bytes are returned
  1058.                       DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1059.                         depending on the field table entry size
  1060.         F6h get type of a field
  1061.             BYTE field number
  1062.             BYTE type
  1063.         FCh get field table header
  1064.             6 BYTEs buffer to store header
  1065.  
  1066. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1067.         00h allow window to be moved horizontally
  1068.         01h allow window to be moved vertically
  1069.         02h allow window to change width
  1070.         03h allow window to change height
  1071.         04h allow window to be scrolled horizontally
  1072.         05h allow window to be scrolled vertically
  1073.         06h allow "Close Window" menu selection for application
  1074.         07h allow "Hide Window" menu selection for application
  1075.         08h allow application to be suspended ("Rearrange/Freeze")
  1076.         0Eh allow "Scissors" menu
  1077.         10h allow DESQview main menu to be popped up
  1078.         11h allow "Switch Windows" menu
  1079.         12h allow "Open Window" menu
  1080.         13h allow "Quit" menu selection
  1081.         20h-33h opposite of 00h-13h, disallow specified action
  1082.         40h notify if horizontal position of window changes
  1083.         41h notify if vertical position of window changes
  1084.         42h notify if width of window changes
  1085.         43h notify if height of window changes
  1086.         44h notify if window scrolled horizontally
  1087.         45h notify if window scrolled vertically
  1088.         46h notify if window is closed--program has to clean up and exit itself
  1089.         47h notify if window is hidden
  1090.         48h notify if "?" on main menu selected
  1091.         49h notify if pointer message sent to window
  1092.         4Ah notify if window is placed in foreground
  1093.         4Bh notify if window is placed in background
  1094.         4Ch notify if video mode changes
  1095.         4Dh notify if "Scissors" menu "Cut" option selected
  1096.         4Eh notify if "Scissors" menu "Copy" option selected
  1097.         4Fh notify if "Scissors" menu "Paste" option selected
  1098.         50h notify if DESQview main menu about to pop up
  1099.         51h notify if DESQview main menu popped down
  1100.         60h-71h  opposite of 40h-51h: don't notify on specified event
  1101.         84h attach window to parent task's window (both move together)
  1102.         85h detach window from parent task's window (may move independently)
  1103.         86h disable background operation for application
  1104.         87h enable running in background
  1105.         88h set minimum size of physical window
  1106.             BYTE rows
  1107.             BYTE columns
  1108.         89h set maximum size of physical window
  1109.             BYTE rows
  1110.             BYTE cols
  1111.         8Ah set primary asynchronous notification routine
  1112.             DWORD address of routine, 0000h:0000h means none (see also below)
  1113.         8Bh set async notification parameter
  1114.             DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1115.         ACh (DV2.2+) perform regular select field attribute processing
  1116.         ADh (DV2.2+) protect attributes in selected field from being lost
  1117.         AEh make window default notify window for owning app (API level 2.00+)
  1118.         AFh set selected field marker character
  1119.             BYTE character to display at left edge of selected fields
  1120.         BCh set standard field processing mode 
  1121.         BDh set alternate field processing mode (enables cursor pad for menus)
  1122.         BEh disables changing reverse logical attributes with ECh opcode
  1123.         BFh enables changing reverse logical attributes with ECh opcode
  1124.         C0h make current window topmost in system
  1125.         C1h force current process into foreground
  1126.         C2h make current window topmost in process
  1127.         C3h position mouse pointer relative to origin of current field
  1128.             BYTE rows below upper left corner of field
  1129.             BYTE columns to right of upper left corner of field
  1130.         C4h position mouse pointer relative to origin of given field
  1131.             BYTE field number
  1132.             BYTE rows below upper left corner of field
  1133.             BYTE columns to right of upper left corner of field
  1134.         C5h orphan current window (also hides it)
  1135.                 Note: must be last in stream; all subsequent commands ignored
  1136.         C6h show all windows for this process
  1137.         C7h hide all windows for this process
  1138.         C8h suspend process and hide all its windows
  1139.         C9h force current process into background
  1140.         CAh make current window bottom-most in process
  1141.         CBh cancel current window manager operation, remove DV menu, give 
  1142.             control to topmost application
  1143.         CCh orphan window and give it to the system for use as paste data
  1144.         CEh reorder windows
  1145.             DWORD pointer to null-terminated list of words
  1146.                   each word is segment of object handle for a window
  1147.         FFh no operation
  1148.  
  1149. MODES 14h to 1Fh "USER STREAMS"
  1150.         normally NOPs, but may be defined by SETESC message to invoke FAR
  1151.         routines, one for each mode number
  1152.           on entry to handler,
  1153.                 DS:SI -> first byte of actual stream (not header)
  1154.                 CX = #bytes in stream
  1155.                 ES:DI = window's handle
  1156.  
  1157. Asynchronous notification routine defined by manager stream 8Ah called with:
  1158.         ES:DI = handle of window
  1159.         DS:SI is 32-bit value set by 8Bh manager stream opcode
  1160.            mailbox contains message indicating event
  1161.               Opcode
  1162.                40h  horizontal movement
  1163.                    DWORD object handle of window
  1164.                    BYTE  new row
  1165.                    BYTE  new col
  1166.                41h  vertical movement
  1167.                    DWORD object handle of window
  1168.                    BYTE  new row
  1169.                    BYTE  new col
  1170.                42h  horizontal size change
  1171.                    DWORD object handle of window
  1172.                    BYTE  new rows
  1173.                    BYTE  new cols
  1174.                43h  vertical size change
  1175.                    DWORD object handle of window
  1176.                    BYTE  new rows
  1177.                    BYTE  new cols
  1178.                44h  scrolled horizontally
  1179.                    DWORD object handle of window
  1180.                    BYTE  mouse row within window
  1181.                    BYTE  mouse column within window
  1182.                    BYTE  field mouse is on, 0 if none
  1183.                    BYTE  amount moved: >0 right, <0 left, 0 done
  1184.                45h  scrolled vertically
  1185.                    DWORD object hande of window
  1186.                    BYTE  mouse row within window
  1187.                    BYTE  mouse column within window
  1188.                    BYTE  field mouse is on, 0 if none
  1189.                    BYTE  amount moved: >0 down, <0 up, 0 done
  1190.                46h  window close request
  1191.                    DWORD object handle of window
  1192.                    BYTE  mouse pointer row
  1193.                    BYTE  mouse pointer column
  1194.                    BYTE  field mouse is on, 0 if none
  1195.                47h  application's windows hidden
  1196.                48h  Help for Program selected
  1197.                    DWORD object handle of window
  1198.                    BYTE  mouse pointer row
  1199.                    BYTE  mouse pointer column
  1200.                    BYTE  field mouse is on, 0 if none
  1201.                49h  pointer message sent to window
  1202.                    DWORD pointer handle which received message
  1203.                4Ah  switched to window from another ("raise")
  1204.                4Bh  switched away from the window ("lower")
  1205.                4Ch  video mode changed
  1206.                    BYTE new BIOS video mode
  1207.                4Dh  Scissors/cUt selected
  1208.                    DWORD object handle of window
  1209.                    BYTE  row of upper left corner
  1210.                    BYTE  column of upper left corner
  1211.                    BYTE  field number ul corner is in, 0=none
  1212.                    DWORD handle of orphaned window created with
  1213.                          copy of data from specified region
  1214.                    BYTE  height of region
  1215.                    BYTE  width of region
  1216.                4Eh  Scissors/Copy selected
  1217.                    DWORD object handle of window
  1218.                    BYTE  row of upper left corner
  1219.                    BYTE  column of upper left corner
  1220.                    BYTE  field number ul corner is in, 0=none
  1221.                    DWORD handle of orphaned window created with
  1222.                          copy of data from specified region
  1223.                    BYTE  height of region
  1224.                    BYTE  width of region
  1225.                4Fh  Scissors/Paste selected
  1226.                    DWORD object handle of window
  1227.                    BYTE  row of upper left corner
  1228.                    BYTE  column of upper left corner
  1229.                    BYTE  field number ul corner is in, 0=none
  1230.                    DWORD handle of orphaned window with data
  1231.                    BYTE  height of region
  1232.                    BYTE  width of region
  1233.                         Note: orphaned data window should be adopted or freed
  1234.                                 when done
  1235.                50h  main menu about to pop up
  1236.                51h  main menu popped down
  1237. Return: all registers unchanged
  1238. ---------------------------------------------
  1239. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1240.         AH = 12h
  1241.         BH = 06h
  1242.         BL = object
  1243.             00h object handle in DWORD on top of stack
  1244.                 mailbox, keyboard, pointer, or timer
  1245.             04h given task's keyboard (task's handle on top of stack)
  1246.             05h current task's default keyboard
  1247.         STACK: DWORD new priority of object in task's OBJECTQ 
  1248. Notes:  initially all objects have the same default value.  Should only make 
  1249.           relative adjustments to this default value.
  1250.         when changing priorities, all objects already on the objectq are
  1251.           reordered
  1252. SeeAlso: AH=12h/BH=07h
  1253. ---------------------------------------------
  1254. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1255.         AH = 12h
  1256.         BH = 07h
  1257.         BL = object
  1258.             00h object handle in DWORD on top of stack
  1259.                 mailbox, keyboard, pointer, or timer
  1260.             04h given task's keyboard (task's handle on top of stack)
  1261.             05h current task's default keyboard
  1262. Return: STACK: DWORD object priority
  1263. Note:   initially all objects have the same default value.  Should only make 
  1264.           relative adjustments to this default value.
  1265. SeeAlso: AH=12h/BH=06h
  1266. ---------------------------------------------
  1267. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1268.         AH = 12h
  1269.         BH = 08h
  1270.         BL = object
  1271.             00h handle in DWORD on top of stack
  1272.                 window: total character positions in window
  1273.                 timer: elapsed time since timer started
  1274.                 pointer: number of messages queued to pointer object
  1275.                 panel: number of panels in panel file
  1276.                 keyboard: number of input buffers queued
  1277.             01h total chars in current task's default window
  1278.             02h number of messages in task's mailbox (task's handle on stack)
  1279.             03h number of messages in current task's mailbox
  1280.             04h number of input buffers queued in task's kbd (handle on stack)
  1281.             05h number of input buffers queued for current task's default kbd
  1282.             06h number of objects queued in OBJECTQ (task's handle on stack)
  1283.             07h number of objects queued in current task's OBJECTQ
  1284.             0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1285.             0Dh (DV 2.26+) total chars in parent task's window
  1286. Return: DWORD on top of stack is result
  1287. Note:   for panel objects, a count of zero is returned if no panel file is open
  1288.           for the object
  1289. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1290. ---------------------------------------------
  1291. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1292.         AH = 12h
  1293.         BH = 09h
  1294.         BL = object
  1295.             00h handle in DWORD on top of stack
  1296.                 window: get chars/line
  1297.                 timer: get 1/100 seconds remaining before timer expires
  1298.             01h get number of chars/line in current task's default window
  1299.             0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1300.             0Dh (DV 2.26+) get chars/line in parent task's window
  1301. Return: DWORD on top of stack is length
  1302. SeeAlso: AH=12h/BH=08h
  1303. ---------------------------------------------
  1304. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1305.         AH = 12h
  1306.         BH = 0Ah
  1307.         BL = window to write to
  1308.             00h window handle is DWORD on top of stack
  1309.             01h current task's default window
  1310.             0Ch (DV 2.26+) default window of task owning handle on top of stack
  1311.             0Dh (DV 2.26+) default window of parent of current task
  1312.         STACK:  DWORD count of attributes
  1313.                 DWORD address of attribute string
  1314.                 DWORD count of characters
  1315.                 DWORD address of character string
  1316. Notes:  if one string is longer than the other, the shorter one will be reused
  1317.           until the longer one is exhausted
  1318.         the cursor is left just after the last character written
  1319. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1320. ---------------------------------------------
  1321. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1322.         AH = 12h
  1323.         BH = 0Ah
  1324.         BL = mailbox to write to
  1325.             00h handle is DWORD on top of stack
  1326.             02h default mailbox of task whose handle is on top of stack
  1327.             03h current task's default mailbox
  1328.         STACK:  DWORD   status (low byte)
  1329.                 DWORD   length of message
  1330.                 DWORD   address of message
  1331. Notes:  the message is copied into either system or common memory
  1332.         insufficient memory normally causes the process to be aborted; under
  1333.           DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1334. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1335. ---------------------------------------------
  1336. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1337.         AH = 12h
  1338.         BH = 0Ah
  1339.         BL = object
  1340.             00h handle is DWORD on top of stack
  1341.                 timer: start timer for specified interval
  1342.                 pointer: set control flags
  1343.                 keyboard: set control flags
  1344.             04h set control flags on KEYBOARD object (handle on top of stack)
  1345.             05h set control flags on task's default KEYBOARD object
  1346.         STACK: (if timer)   DWORD duration in 1/100 seconds
  1347.                (otherwise)  DWORD bits to set
  1348. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1349.  
  1350. For keyboard objects, the bits have the following significance:
  1351.         bit 15 reserved, can't be set
  1352.         bit 14 unused
  1353.         bit 13 reserved, can't be set
  1354.         bit 12-6 unused
  1355.         bit 5  (DV 2.2+) exclusive input
  1356.         bit 4  filter all keys (used with handler established by SETESC)
  1357.                 if 0, only keys that would normally be displayed are filtered
  1358.         bit 3  program continues executing while input in progress
  1359.         bit 2  insert mode active for field mode
  1360.         bit 1  hardware cursor displayed when task is hardware cursor owner
  1361.                 must be set if keyboard in field mode and field table includes
  1362.                 input fields
  1363.         bit 0  keyboard is in field mode rather than keystroke mode
  1364.  
  1365. For pointer objects, the bits have the following significance:
  1366.         bit 15 reserved, can't be set
  1367.         bit 14-8 unused
  1368.         bit 7  mouse pointer is hidden while in window
  1369.         bit 6  get messages even if window not topmost
  1370.         bit 5  get messages even if window not foreground
  1371.         bit 4  multiple clicks separated by less than 1/3 second are counted
  1372.                 and returned in a single message
  1373.         bit 3  pointer position is relative to screen origin, not window origin
  1374.         bit 2  send message on button release as well as button press
  1375.         bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  1376.                 pointer leaves the window
  1377.         bit 0  send message only on button activity, not movement
  1378.                DV-specific, and INT 15h/AX=DE0Fh must have been called first
  1379. ---------------------------------------------
  1380. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  1381.         AH = 12h
  1382.         BH = 0Bh
  1383.         BL = window to write attributes to
  1384.             00h handle is DWORD on top of stack
  1385.             01h current task's default window
  1386.             0Ch (DV 2.26+) default window of task owning handle on top of stack
  1387.             0Dh (DV 2.26+) default window of parent of current task
  1388.         STACK:  DWORD number of attributes to write
  1389.                 DWORD address of attributes
  1390. Note:   the attributes are written starting at the current cursor position; the
  1391.           cursor is left just after the last position written
  1392. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  1393. ---------------------------------------------
  1394. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  1395.         AH = 12h
  1396.         BH = 0Bh
  1397.         BL = mailbox to write to
  1398.             00h handle is DWORD on top of stack
  1399.             02h default mailbox of task whose handle is on top of stack
  1400.             03h current task's default mailbox
  1401.         STACK:  DWORD   status (low byte)
  1402.                 DWORD   length of message
  1403.                 DWORD   address of message
  1404. Notes:  only a pointer to the message is stored, but the write may still fail
  1405.           due to insufficient memory
  1406.         under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1407. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  1408. ---------------------------------------------
  1409. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  1410.         AH = 12h
  1411.         BH = 0Bh
  1412.         BL = OBJECTQ from which to remove all copies of a particular object
  1413.             06h OBJECTQ of task whose handle is on top of stack
  1414.             07h task's default OBJECTQ
  1415.         STACK:  DWORD   handle of object to remove
  1416. Note:   should be sent whenever an object is erased or closed
  1417. ---------------------------------------------
  1418. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1419.         AH = 12h
  1420.         BH = 0Bh
  1421.         BL = object
  1422.             00h handle is DWORD on top of stack
  1423.                 pointer: reset control flags
  1424.                 keyboard: reset control flags
  1425.             04h clear control flags on KEYBOARD object (handle on top of stack)
  1426.             05h clear control flags on task's default KEYBOARD object
  1427.         STACK:  DWORD   which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  1428. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  1429. ---------------------------------------------
  1430. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1431.         AH = 12h
  1432.         BH = 0Ch
  1433.         BL = object
  1434.             00h handle is DWORD on top of stack
  1435.                 window:   fill with given character from scroll origin to end
  1436.                 keyboard: attach to a window
  1437.                 timer:    open
  1438.                 pointer:  start taking input for window
  1439.                 panel:    associate with a panel file
  1440.             01h fill task's default window with given char from scrl org to end
  1441.             02h open given task's mailbox for input (task's handle on stack)
  1442.             03h open current task's mailbox
  1443.             04h attach a KEYBOARD to a window (handle on top of stack)
  1444.             05h attach task's default KEYBOARD to a window
  1445.             06h open a task's OBJECTQ (task's handle on top of stack)
  1446.             07h open current task's OBJECTQ
  1447.             0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  1448.             0Dh (DV 2.26+) fill default window of parent of current task
  1449.          STACK: (if window)   DWORD character to fill with
  1450.                 (if keyboard) DWORD handle of window to attach to
  1451.                 (if pointer)  DWORD handle of window to attach to
  1452.                 (if panel)    DWORD length of filename or resident panel
  1453.                               DWORD address of filename or resident panel
  1454.                 (otherwise)   nothing
  1455. Notes:  if first byte of panel file name is 1Bh, then the "name" IS a panel
  1456.         if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1457.           the panel file
  1458.         result code of open may be retrieved with STATUS message
  1459.         logical cursor is left at scroll origin after filling window
  1460.         the task opening a mailbox becomes its owner, and the only task allowed
  1461.           to read the mailbox
  1462.         messages are only sent to a pointer object when the mouse is positioned
  1463.           in the window to which the pointer has been attached
  1464.         there is no need to explicitly open a timer object, as ADDTO and WRITE
  1465.           messages automatically open the timer
  1466. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  1467. ---------------------------------------------
  1468. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1469.         AH = 12h
  1470.         BH = 0Dh
  1471.         BL = object
  1472.             00h handle is DWORD on top of stack
  1473.                 timer:    close
  1474.                 keyboard: detach from window and discard queued input
  1475.                 pointer:  stop taking input
  1476.                 panel:    close
  1477.                 mailbox:  close, unlock, and discard any pending messages
  1478.             02h close given task's mailbox (task's handle on top of stack)
  1479.             03h close task's default mailbox
  1480.             04h close KEYBOARD object (handle on top of stack)
  1481.             05h close task's default KEYBOARD
  1482.             06h close givent task's OBJECTQ (task's handle on top of stack)
  1483.             07h close current task's OBJECTQ
  1484. Notes:  when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  1485.           ERASE message (AH=12h/BH=0Eh)
  1486.         when a panel object is closed, the panel file and any panels currently
  1487.           in use are freed; window and keyboard objects created by APPLY are
  1488.           not affected, but field mode input ceases
  1489.         open but idle timer objects consume a small amount of CPU time
  1490. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  1491. ---------------------------------------------
  1492. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  1493.         AH = 12h
  1494.         BH = 0Eh
  1495.         BL = object
  1496.             00h handle is DWORD on top of stack
  1497.                 window:   clear from scroll origin to end of window
  1498.                 keyboard: discard input
  1499.                 timer:    cancel current interval
  1500.                 pointer:  discard all pending messages
  1501.                 mailbox:  discard all pending messages
  1502.             01h clear task's default window from scroll origin to end
  1503.             02h discard all queued messages in mailbox (handle on top of stack)
  1504.             03h discard all queued messages in current task's default mailbox
  1505.             04h discard all input queued to KEYBOARD (handle on top of stack)
  1506.             05h discard all input queued to task's default KEYBOARD
  1507.             06h remove all objects from OBJECTQ (task's handle on top of stack)
  1508.             07h remove all objects from current task's OBJECTQ
  1509.             0Ch (DV 2.26+) clear window of task owning handle on top of stack
  1510.             0Dh (DV 2.26+) clear default window of parent of current task
  1511. Note:   when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  1512. SeeAlso: AH=12h/BH=02h
  1513. ---------------------------------------------
  1514. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  1515.         AH = 12h
  1516.         BH = 0Fh
  1517.         BL = object
  1518.             00h handle is DWORD on top of stack
  1519.                 timer:   is it running?
  1520.                 pointer: return status of last message
  1521.                 panel:   verify success of last OPEN or APPLY
  1522.             02h return status of last msg READ from mailbox (handle on stack)
  1523.             03h return status of last msg READ from task's default mailbox
  1524.             04h get status of last msg from task's KEYBOARD (task handle on stk)
  1525.             05h get status of last msg from task's default KEYBOARD
  1526.             06h return whether OBJECTQ is open or not (handle on top of stack)
  1527.             07h return whether task's default OBJECTQ is open or not
  1528. Return: DWORD on top of stack is status
  1529. Notes:  if object is a panel object, the status indicates the error code:
  1530.           00h successful
  1531.           14h panel name not in panel directory
  1532.           15h not enough memory to apply panel
  1533.           16h invalid panel format
  1534.           17h panel file already open
  1535.           81h-92h  DOS error codes+80h                  \  codes > 80h indicate
  1536.           95h not enough memory to open panel file       > that the panel was
  1537.           98h null panel file name                      /  not opened
  1538.         if object is a timer, the status is:
  1539.           00000000h open but not running
  1540.           40000000h open and running
  1541.           80000000h closed
  1542.         if object is an OBJECTQ, the status is:
  1543.           00000000h open
  1544.           80000000h closed
  1545.         if object is a keyboard in keystroke mode, the status is the extended
  1546.           character code (scan code) of teh last keystroke
  1547.         if object is a keyboard in field mode, the status indicates the reason
  1548.           for the last return from the field manager
  1549.           00h Enter key pressed
  1550.           01h Button 1 or keystroke selection
  1551.           02h Button 2
  1552.           03h validation
  1553.           04h auto Enter on field
  1554.           1Bh Escape pressed
  1555.           46h ^Break pressed
  1556.           other: extended code for key terminating input
  1557.         the status of mailbox messages sent by the window manager is always 80h
  1558.         the status of a pointer message is the same as the status field in the
  1559.           message
  1560. SeeAlso: AH=12h/BH=04h"READ"
  1561. ---------------------------------------------
  1562. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  1563.         AH = 12h
  1564.         BH = 10h
  1565.         BL = object
  1566.             00h handle is DWORD on top of stack
  1567.                 window: return TRUE if logical cursor past end of window
  1568.                 mailbox: ???
  1569.             01h returns TRUE if logical cursor past end of task's def window
  1570.             02h return ??? for task's mailbox (task's handle on top of stack)
  1571.             03h return ??? for current task's mailbox
  1572.             0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  1573.             0Dh (DV 2.26+) check log cursor of window of parent task
  1574. Return: DWORD on top of stack is status
  1575. ---------------------------------------------
  1576. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  1577.         AH = 12h
  1578.         BH = 11h
  1579.         BL = window for which to move cursor
  1580.             00h window's handle is DWORD on top of stack
  1581.             01h task's default window
  1582.             0Ch (DV 2.26+) default window of task owning handle on top of stack
  1583.             0Dh (DV 2.26+) default window of parent of current task
  1584.         STACK: DWORD column
  1585.                DWORD row
  1586. ---------------------------------------------
  1587. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  1588.         AH = 12h
  1589.         BH = 11h
  1590.         BL = mailbox to name
  1591.             00h DWORD on top of stack is mailbox handle
  1592.             02h use given task's mailbox (task's handle on top of stack)
  1593.             03h use current task's default mailbox
  1594.         STACK: DWORD length of name
  1595.                DWORD address of name
  1596. SeeAlso: AX=DE0Eh
  1597. ---------------------------------------------
  1598. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  1599.         AH = 12h
  1600.         BX = 1100h
  1601.         STACK: DWORD object handle for pointer object
  1602.                DWORD number of colums to scale pointer position to
  1603.                DWORD number of rows to scale pointer position to
  1604. SeeAlso: AH=12h/BX=1200h
  1605. ---------------------------------------------
  1606. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  1607.         AH = 12h
  1608.         BH = 12h
  1609.         BL = window to read from
  1610.             00h handle is DWORD on top of stack
  1611.             01h read next N chars or attributes on task's default window
  1612.             0Ch (DV 2.26+) read window of task owning handle on top of stack
  1613.             0Dh (DV 2.26+) read default window of parent of current task
  1614.         STACK: DWORD count
  1615. Return: STACK: DWORD width of screen line
  1616.                DWORD address
  1617.                DWORD count actually read
  1618. Notes:  reading starts at the current logical cursor position; the cursor is
  1619.           updated to point at the character following the last one read
  1620.         any translucent blanks (FFh) which are visible on screen are changed
  1621.           to the character which is seen through them
  1622.         the string produced by the read is placed in an input buffer which may
  1623.           be reused by the next READ or READN of a window
  1624.         window stream opcodes D8h and D9h determine whether the read returns
  1625.           characters or attributes
  1626. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  1627. ---------------------------------------------
  1628. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  1629.         AH = 12h
  1630.         BX = 1200h
  1631.         STACK: DWORD object handle for pointer
  1632. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  1633.                DWORD pointer pos scaled as if window were this many rows high
  1634. SeeAlso: AH=12h/BX=1100h
  1635. ---------------------------------------------
  1636. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  1637.         AH = 12h
  1638.         BH = 13h
  1639.         BL = window object
  1640.             00h DWORD on top of stack is handle for window to redraw
  1641.             01h redraw task's default window
  1642.             0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  1643.             0Dh (DV 2.26+) redraw default window of parent of current task
  1644. SeeAlso: AH=12h/BH=0Eh
  1645. ---------------------------------------------
  1646. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  1647.         AH = 12h
  1648.         BX = 1300h
  1649.         STACK: DWORD object handle for pointer
  1650.                DWORD character to use for pointer
  1651. ---------------------------------------------
  1652. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  1653.         AH = 12h
  1654.         BH = 14h
  1655.         BL = message modifier
  1656.             00h handle is DWORD on top of stack
  1657.             01h define user stream
  1658.             04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  1659.             05h intercept keystrokes from task's default KEYBOARD to a window
  1660.         STACK: (if window)   DWORD user stream number (14h-1Fh)
  1661.                              DWORD address of FAR user stream handler
  1662.                (if keyboard) DWORD address of FAR filter function
  1663.  
  1664. The keyboard filter function is called when the keyboard is in field mode.  On
  1665. entry,
  1666.         AL = character
  1667.         AH = 00h or extended ASCII code if AL = 00h
  1668.         BL = field number
  1669.         CH = cursor column
  1670.         CL = cursor row
  1671.         DL = field type modifier (sixth item in field table entry)
  1672.         DH = seventh item in field table entry
  1673.         ES:SI = window's handle
  1674.         DS:DI -> field table entry for field containing the cursor
  1675. The filter function should return
  1676.         AH = 00h use keystroke
  1677.              01h ignore keystroke
  1678.              FFh beep and ignore keystroke
  1679. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  1680. ---------------------------------------------
  1681. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  1682.         AH = 12h
  1683.         BH = 14h
  1684.         BL = object
  1685.             00h mailbox handle is DWORD on top of stack
  1686.             02h use given task's mailbox (task's handle on top of stack)
  1687.             03h use current task's default mailbox
  1688. Note:   release exclusive access by sending CLOSE message to mailbox
  1689.         access may be requested multiple times, and requires multiple CLOSEs
  1690. SeeAlso: AH=12h/BH=0Dh
  1691. ---------------------------------------------
  1692. INT 15 - DESQview 2.2+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  1693.         AH = 12h
  1694.         BH = 15h
  1695.         BL = object
  1696.             00h DWORD on top of stack
  1697.                 mailbox, keyboard, or pointer only
  1698.             02h mailbox for task whose handle is on top of stack
  1699.             03h mailbox for current task
  1700.             04h keyboard for task whose handle is on top of stack
  1701.             05h keyboard for current task
  1702.         STACK: DWORD flags
  1703.                 if mailbox:
  1704.                         bit 0: all mail messages in common memory
  1705.                         bit 1: allow write even if closed
  1706.                         bit 2: don't erase messages when mailbox closed
  1707.                 if keyboard:
  1708.                         bit 5: exclusive input when keyboard in use for input
  1709. Return: nothing
  1710. Notes:  only available if the API level has been set to at least 2.20
  1711.         equivalent to performing SUBFROM and ADDTO calls on the object
  1712. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  1713. ---------------------------------------------
  1714. INT 15 - DESQview 2.2+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  1715.         AH = 12h 
  1716.         BH = 16h
  1717.         BL = object
  1718.             00h DWORD on top of stack
  1719.                 mailbox, keyboard, or pointer only
  1720.             02h mailbox for task whose handle is on top of stack
  1721.             03h mailbox for current task
  1722.             04h keyboard for task whose handle is on top of stack
  1723.             05h keyboard for current task
  1724. Return: STACK: DWORD current control flags
  1725. Note:   only available if the API level has been set to at least 2.20
  1726. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=15h
  1727. ---------------------------------------------
  1728. INT 15 - DESQview - GET PROGRAM NAME
  1729.         AX = DE00h
  1730. Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
  1731. SeeAlso: AX=DE07h
  1732.  
  1733. Format of program entry in DESQVIEW.DVO:
  1734. Offset  Size    Description
  1735.  00h    BYTE    length of name
  1736.  01h  N BYTEs   name
  1737.       2 BYTEs   keys to invoke program (second = 00h if only one key used)
  1738.         WORD    ??? seems always to be 0000h
  1739.         BYTE    end flag: 00h for all but last entry, which is FFh
  1740. ---------------------------------------------
  1741. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  1742.         AX = DE01h
  1743. Return: nothing
  1744. Note:   reads DESQVIEW.DVO, disables Open menu if file not in current directory
  1745. ---------------------------------------------
  1746. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  1747.         AX = DE02h
  1748. Return: nothing
  1749. Note:   this call is a NOP in DV 2.x
  1750. SeeAlso: AX=DE03h
  1751. ---------------------------------------------
  1752. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  1753.         AX = DE03h
  1754. Return: AX = ??? for current window
  1755.         BX = ??? for current window
  1756. Note:   this call is a NOP in DV 2.x
  1757. SeeAlso: AX=DE02h
  1758. ---------------------------------------------
  1759. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  1760.         AX = DE04h
  1761. Return: BX = bytes of common memory available
  1762.         CX = largest block available
  1763.         DX = total common memory in bytes
  1764. SeeAlso: AX=DE05h,DE06h
  1765. ---------------------------------------------
  1766. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  1767.         AX = DE05h
  1768. Return: BX = K of memory available
  1769.         CX = largest block available
  1770.         DX = total conventional memory in K
  1771. SeeAlso: AX=DE04h,DE06h
  1772. ---------------------------------------------
  1773. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  1774.         AX = DE06h
  1775. Return: BX = K of expanded memory available
  1776.         CX = largest block available
  1777.         DX = total expanded memory in K
  1778. SeeAlso: AX=DE04h,DE05h
  1779. ---------------------------------------------
  1780. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  1781.         AX = DE07h
  1782. Return: AX = number of program as it appears on the "Switch Windows" menu
  1783. Note:   this API call may be made from a hardware interrupt handler
  1784. SeeAlso: AX=DE00h
  1785. ---------------------------------------------
  1786. INT 15 - DESQview - GET ???
  1787.         AX = DE08h
  1788. Return: AX = 0000h if ??? is not set to the current task
  1789.              0001h if ??? is set to the current task
  1790. ---------------------------------------------
  1791. INT 15 - DESQview - UNIMPLEMENTED
  1792.         AX = DE09h
  1793. Return: nothing (NOP in DV 1.x and 2.x)
  1794. ---------------------------------------------
  1795. INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  1796.         AX = DE0Ah
  1797.         BL = character
  1798. Return: character displayed, next call will display in next position (which
  1799.         wraps back to the start of the line if off the right edge of screen)
  1800. Notes:  displays character on bottom line of *physical* screen, regardless
  1801.           of current size of window (even entirely hidden)
  1802.         does not know about graphics display modes, just pokes the characters
  1803.           into display memory
  1804.         this API call may be made from a hardware interrupt handler
  1805. SeeAlso: AX=1003h
  1806. ---------------------------------------------
  1807. INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  1808.         AX = DE0Bh
  1809.         BL = API level major version number
  1810.         BH = API level minor version number
  1811. Return: AX = maximum API level (AL = major, AH = minor)
  1812. Notes:  if the requested API level is greater than the version of DESQview, a
  1813.           "You need a newer version" error window is popped up
  1814.         the API level defaults to 1.00, and is inherited by child tasks
  1815.         some early copies of DV 2.00 return AX=0200h instead of 0002h
  1816. ---------------------------------------------
  1817. INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  1818.         AX = DE0Ch
  1819.         BX = number of bytes
  1820. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  1821. Note:   use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  1822.           system memory
  1823. SeeAlso: AX=1001h,AX=DE0Dh,AX=DE15h
  1824. ---------------------------------------------
  1825. INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  1826.         AX = DE0Dh
  1827.         ES:DI -> previously allocated block
  1828. Return: nothing
  1829. SeeAlso: AX=1002h,AX=DE0Ch
  1830. ---------------------------------------------
  1831. INT 15 - DESQview 2.x - "FINDMAIL" - FIND MAILBOX BY NAME
  1832.         AX = DE0Eh
  1833.         ES:DI -> name to find
  1834.         CX = length of name
  1835. Return: BX = 0000h not found
  1836.              0001h found
  1837.                 DS:SI = object handle
  1838. SeeAlso: AH=12h/BH=11h
  1839. ---------------------------------------------
  1840. INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
  1841.         AX = DE0Fh
  1842. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  1843. Notes:  sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  1844.         enables an additional mouse mode
  1845. ---------------------------------------------
  1846. INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  1847.         AX = DE10h
  1848.         BH = scan code
  1849.         BL = character
  1850. Return: nothing
  1851. Notes:  a later read will get the keystroke as if it had been typed by the user
  1852.         multiple pushes are read last-in first-out
  1853.         if a script exists for the pushed key in the current application, the
  1854.           script will be executed
  1855.         early copies of DV 2.00 destroy AX, BX, ES, and DI
  1856. SeeAlso: INT 16/AH=05h
  1857. ---------------------------------------------
  1858. INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
  1859.         AX = DE11h
  1860.         BL = 00h      viewport will not move automatically
  1861.              nonzero  viewport will move to keep cursor visible (default)
  1862. Return: nothing
  1863. ---------------------------------------------
  1864. INT 15 - DESQview 2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  1865.         AX = DE12h
  1866.         BX = 0000h    select normal style (linefeed only moved down)
  1867.              nonzero  select C style (linefeed moves to start of next line)
  1868. Return: nothing
  1869. Note:   set on a per-task basis, and inherited from the parent task
  1870. ---------------------------------------------
  1871. INT 15 - DESQview 2.2+ - GET CRITICAL NESTING COUNT
  1872.         AX = DE13h
  1873. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  1874.              without matching ENDC (see INT 15/AX=101Ch)
  1875. Note:   this API call may be made from within a hardware interrupt handler
  1876. SeeAlso: AX=101Bh,101Ch,DE1Bh,DE1Ch
  1877. ---------------------------------------------
  1878. INT 15 - DESQview 2.2+ - GET OBJECT TYPE
  1879.         AX = DE14h
  1880.         ES:DI -> object
  1881. Return: BL = 00h not an object
  1882.              08h window or task
  1883.              09h mailbox
  1884.              0Ah keyboard
  1885.              0Bh timer
  1886.              0Ch objectq
  1887.              0Fh pointer
  1888.              10h panel
  1889. SeeAlso: AX=1016h
  1890. ---------------------------------------------
  1891. INT 15 - DESQview 2.2+ - SET ERROR HANDLING
  1892.         AX = DE15h
  1893.         BL = 00h post system error on all error conditions
  1894.              01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  1895.                  messages sent to mailboxes which fail due to lack of system
  1896.                  or common memory
  1897.              02h (v2.26+) same as 01h, but return null pointer for GETMEM
  1898.                  calls which fail due to lack of system memory
  1899. Return: nothing
  1900. SeeAlso: AX=DE16h
  1901. ---------------------------------------------
  1902. INT 15 - DESQview 2.2+ - GET ERROR HANDLING
  1903.         AX = DE16h
  1904. Return: BL = 00h always post system error
  1905.              01h return carry flag set on failed mailbox writes
  1906.              02h return CF set on failed mailbox writes and NULL on failed
  1907.                  GETMEM calls
  1908. SeeAlso: AX=DE15h
  1909. ---------------------------------------------
  1910. INT 15 - DESQview 2.20-2.25 - reserved
  1911.         AX = DE17h
  1912. Return: pops up "Programming error" window
  1913. Note:   AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  1914. ---------------------------------------------
  1915. INT 15 - DESQview 2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  1916.         AX = DE17h
  1917.         BX = 0000h      get current mapping context without setting
  1918.              nonzero    set new mapping context
  1919. Return: BX = mapping context in effect before call
  1920. Notes:  mapping contexts determine conventional-memory addressability; setting
  1921.           a mapping context ensures that the associated program and data areas
  1922.           are in memory for access.  Usable by drivers, TSRs and shared
  1923.           programs.
  1924.         caller need not be running under DESQview
  1925.         this API call may be made from a hardware interrupt handler
  1926. ---------------------------------------------
  1927. INT 15 - DESQview 2.2+ internal - ???
  1928.         AX = DE18h
  1929.         BP = function number
  1930.             high byte must be 10h
  1931.             low byte is function
  1932.                 00h set ???
  1933.                     BL = ???  (00h-10h, video mode???)
  1934.                     BH = value to store
  1935.                 03h set ???
  1936.                     BL = ??? (stored in driver)
  1937.                 0Ah get ???
  1938.                     ES:DI -> 18-byte buffer to hold ???
  1939. Note:   calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  1940. ---------------------------------------------
  1941. INT 15 - DESQview 2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  1942.         AX = DE19h
  1943.         BX = number of bytes to allocate
  1944. Return: AX = 0000h successful
  1945.                 ES:DI -> allocated block
  1946.              nonzero insufficient memory
  1947. Note:   this API call may be made from within a hardware interrupt handler
  1948. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  1949. ---------------------------------------------
  1950. INT 15 - DESQview 2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  1951.         AX = DE1Ah
  1952.         DS:SI -> previously allocated block
  1953. Note:   this function may be called from within a hardware interrupt handler
  1954. SeeAlso: AX=DE0Dh,DE19h
  1955. ---------------------------------------------
  1956. INT 15 - DESQview 2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  1957.         AX = DE1Bh
  1958. Return: nothing
  1959. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  1960. ---------------------------------------------
  1961. INT 15 - DESQview 2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  1962.         AX = DE1Ch
  1963. Return: nothing
  1964. Notes:  similar to AX=101Bh, but begins the critical region without ensuring
  1965.           that DOS is free
  1966.         the official documentation states that this call should be paired with
  1967.           "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  1968.         this API call may be made from within a hardware interrupt handler
  1969. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  1970. ---------------------------------------------
  1971. INT 15 - DESQview 2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  1972.         AX = DE1Dh
  1973.         DX = segment of handle for task to receive keystroke
  1974.         BL = character
  1975.         BH = scan code
  1976. Return: AX = 0000h if successful
  1977.            nonzero if receiver's keyboard buffer was full
  1978. Notes:  the key is treated as though the user had pressed it, ignoring any
  1979.           script which may be bound to the key, and using the current field
  1980.           table if the keyboard object is in field processing mode
  1981.         multiple PUTKEYs are seen in the order in which they are executed
  1982. SeeAlso: AX=DE10h
  1983. ---------------------------------------------
  1984. INT 15 - DESQview 2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  1985.         AX = DE1Eh
  1986. Return: CL = actual number of rows on screen
  1987.         CH = actual number of columns on screen
  1988.         BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  1989. Note:   this API call may be made from a hardware interrupt handler
  1990. SeeAlso: INT 10/AH=0Fh
  1991. ---------------------------------------------
  1992. INT 15 - DESQview 2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  1993.         AX = DE1Fh
  1994. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  1995. Note:   this API call may be made from within a hardware interrupt handler
  1996. SeeAlso: AX=DE13h
  1997. ---------------------------------------------
  1998. INT 15 - DESQview 2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  1999.         AX = DE20h
  2000.         BX = segment of handle of task to interupt
  2001.         DX:CX -> FAR interrupt routine
  2002. Return: nothing
  2003. Notes:  unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  2004.           making the DISPATCHINT call
  2005.         multiple "DISPATCHINT" calls are processed in the order in which they
  2006.           were executed
  2007.         the FAR routine is entered with the current ES, DS, SI, DI, and BP
  2008.           values, using the task's internal stack (see AX=101Ah); only SS:SP
  2009.           needs to be preserved
  2010.         this API call may be made from within a hardware interrupt handler
  2011. SeeAlso: AX=1021h
  2012. ---------------------------------------------
  2013. INT 15 - DESQview 2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  2014.         AX = DE21h
  2015.         BX = 0000h turn off
  2016.              nonzero turn on
  2017. Return: BX = old state of virtualization
  2018. Note:   this API call may be made from within a hardware interrupt handler
  2019. ---------------------------------------------
  2020. INT 15 - DESQview 2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  2021.         AX = DE22h
  2022.         DX = segment of task handle
  2023. Return: DX = total amount of memory in paragraphs
  2024.         BX = amount of system memory in paragraphs
  2025.         CX = largest block of system memory available in paragraphs
  2026.         AX = flags
  2027.             bit 0: system memory resides in shared memory
  2028.                 1: process's memory is swapped out
  2029.                 2: process's system memory is swapped out
  2030. Notes:  if the task handle is a child task, the returned values will be for the
  2031.           process containing the task, rather than the task itself
  2032.         if the process's system memory is swapped out, BX,CX,DX remain
  2033.           unchanged, because the memory usage cannot be determined
  2034. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  2035. ---------------------------------------------
  2036. INT 21 - DESQview - INSTALLATION CHECK
  2037.         AH = 2Bh
  2038.         AL = subfunction (DV v2.00+)
  2039.             01h get version
  2040.                 Return: BX = version (BH = major, BL = minor)
  2041.                 Note: early copies of v2.00 return 0002h
  2042.             02h get shadow buffer info, and start shadowing
  2043.                 Return: BH = rows in shadow buffer
  2044.                         BL = columns in shadow buffer
  2045.                         DX = segment of shadow buffer
  2046.             04h get shadow buffer info
  2047.                 Return: BH = rows in shadow buffer
  2048.                         BL = columns in shadow buffer
  2049.                         DX = segment of shadow buffer
  2050.             05h stop shadowing
  2051.         CX = 4445h ('DE')
  2052.         DX = 5351h ('SQ')
  2053. Return: AL = FFh if DESQview not installed
  2054. Note:   in DESQview v1.x, there were no subfunctions; this call only identified
  2055.         whether or not DESQview was loaded
  2056. SeeAlso: INT 10/AH=FEh,FFh
  2057. ---------------------------------------------
  2058. INT 29 - DOS 2+ internal - FAST PUTCHAR
  2059.         AL = character to display
  2060. Return: nothing
  2061. Notes:  this interrupt is called from the DOS output routines if output is
  2062.           going to a device rather than a file, and the device driver's
  2063.           attribute word has bit 4 (10h) set.
  2064.         COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  2065.           vector and assume that ANSI.SYS is installed if the segment is larger
  2066.         the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  2067.         the default handler under DESQview 2.2 understands the <Esc>[2J
  2068.           screen-clearing sequence, calls INT 10/AH=0Eh for all others
  2069. SeeAlso: INT 79
  2070. ---------------------------------------------
  2071. INT 2A - MS Networks or NETBIOS - ???
  2072.         AX = 2001h
  2073.         ???
  2074. Return: ???
  2075. Note:   intercepted by DESQview 2.x
  2076. ---------------------------------------------
  2077. INT 2F - Multiplex - DESQview 2.26 External Dev Interface - INSTALLATION CHECK
  2078.         AX = DE00h
  2079.         BX = 4445h ("DE")
  2080.         CX = 5844h ("XD")
  2081.         DX = 4931h ("I1")
  2082. Return: AL = FFh if installed (even if other registers do not match)
  2083.         if BX,CX, and DX were as specified on entry,
  2084.             BX = 4845h ("HE")
  2085.             CX = 5245h ("RE")
  2086.             DX = 4456h ("DV")
  2087. Notes:  AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2088.         programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2089.         the XDI handler should not issue any DOS or BIOS calls, nor should it
  2090.           issue DESQview API calls other than those allowed from hardware ints
  2091. ---------------------------------------------
  2092. INT 2F - Multiplex - DESQview 2.26 External Dev Itrface - DRIVER CUSTOM SUBFUNC
  2093.         AX = DE01h
  2094.         BX = driver ID
  2095.         other registers as needed by driver
  2096. Notes:  XDI drivers should pass this call through to previous handler if ID
  2097.           does not match
  2098.         DESQview never calls this function
  2099. ---------------------------------------------
  2100. INT 2F - Multiplex - DESQview 2.26 XMS XDI - ???
  2101.         AX = DE01h
  2102.         BX = FFFEh
  2103.         CX = 4D47h
  2104.         DX = 0052h
  2105. Return: AL = FFh
  2106.         DX = 584Dh
  2107. ---------------------------------------------
  2108. INT 2F - Multiplex - DESQview 2.26 XDI - DVTree DVTXDI.COM
  2109.         AX = DE01h
  2110.         BX = 7474h
  2111.         CL = function
  2112.             00h installation check
  2113.                 Return: AL = FFh
  2114.             01h get process handle
  2115.                 DX = keys on Open Window menu (DL = first, DH = second)
  2116.                 Return: AX = process handle or 0000h if not running
  2117. Return: BX = 4F4Bh ("OK")
  2118.         DL = ???
  2119. Note:   DVTree is a shareware DOS shell/DESQview process manager by Mike Weaver
  2120. ---------------------------------------------
  2121. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  2122.         AX = DE02h
  2123.         BX = mapping context of DESQview
  2124.         DX = handle of DESQview system task
  2125. SeeAlso: AX=DE03h
  2126. Note:   driver should pass this call to previous handler after doing its work
  2127. ---------------------------------------------
  2128. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  2129.         AX = DE03h
  2130.         BX = mapping context of DESQview
  2131.         DX = handle of DESQview system task
  2132. SeeAlso: AX=DE02h
  2133. Notes:  driver should pass this call to previous handler before doing its work
  2134.         DESQview makes this call when it is exiting, but before unhooking any
  2135.           interrupt vectors
  2136. ---------------------------------------------
  2137. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  2138.         AX = DE04h
  2139.         BX = mapping context of new process
  2140.         DX = handle of process
  2141. Return: nothing
  2142. Notes:  XMS XDI handler (installed by default) allocates a 22-byte record
  2143.           (see below) from "common" memory to control access to XMS memory
  2144.         all DOS, BIOS, and DV API calls are valid in handler
  2145.         driver should pass this call to previous handler after processing it
  2146. SeeAlso: AX=DE05h
  2147.  
  2148. Format of XMS XDI structure:
  2149. Offset  Size    Description
  2150.  00h    DWORD   pointer to 10-byte record???
  2151.  04h    DWORD   pointer to next XMS XDI structure
  2152.  08h    WORD    mapping context
  2153.  0Ah    BYTE    ???
  2154.  0Bh  5 BYTEs   XMS entry point to return for INT 2F/AX=4310h
  2155.                 (FAR jump to next field)
  2156.  10h  6 BYTEs   FAR handler for XMS driver entry point
  2157.                 (consists of a FAR CALL followed by RETF)
  2158. ---------------------------------------------
  2159. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  2160.         AX = DE05h
  2161.         BX = mapping context of process
  2162.         DX = handle of last task in process
  2163. Return: nothing
  2164. Notes:  XMS XDI handler releases the structure allocated by AX=DE04h
  2165.         driver should pass this call to previous handler before processing it
  2166.         all DOS, BIOS, and DV API calls except those generating a task switch
  2167.           are valid in handler
  2168. SeeAlso: AX=DE04h
  2169. ---------------------------------------------
  2170. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  2171.         AX = DE06h
  2172.         BX = mapping context of process containing task
  2173.         DX = handle of new task
  2174. Notes:  driver should pass this call to previous handler after processing it
  2175.         all DOS, BIOS, and DV API calls are valid in handler
  2176. ---------------------------------------------
  2177. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  2178.         AX = DE07h
  2179.         BX = mapping context of process containing task
  2180.         DX = handle of task
  2181. Notes:  driver should pass this call to previous handler before processing it
  2182.         all DOS, BIOS, and DV API calls except those generating a task switch
  2183.           are valid in handler
  2184. ---------------------------------------------
  2185. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  2186.         AX = DE08h
  2187.         BX = mapping context of task being switched from
  2188.         DX = handle of task being switched from
  2189. Notes:  invoked prior to task swap, interrupts, etc
  2190.         driver should pass this call to previous handler after processing it
  2191. ---------------------------------------------
  2192. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  2193.         AX = DE09h
  2194.         BX = mapping context of task being switched to
  2195.         DX = handle of task being switched to
  2196. Notes:  state is restored except for interrupts
  2197.         driver should pass this call to previous handler before processing it
  2198. ---------------------------------------------
  2199. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  2200.         AX = DE0Ah
  2201.         BX = mapping context of task receiving focus
  2202.         DX = handle of running task
  2203. Notes:  driver should pass this call to previous handler before processing it
  2204.         this call often occurs inside a keyboard interrupt
  2205. ---------------------------------------------
  2206. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  2207.         AX = DE0Bh
  2208.         BX = mapping context of DESQview system task
  2209.         CX = number of system memory paragraphs required for the use of all
  2210.                 XDI drivers (DV will add this to system memory in DVP buffer)
  2211.         DX = handle of DESQview system task
  2212.         SI = mapping context of new process if it starts
  2213.         ES:DI -> DVP buffer
  2214. Return: CX incremented as needed
  2215. Notes:  once DV invokes this function, the DVP buffer contents may be changed
  2216.         driver should pass this call to previous handler before processing it
  2217. ---------------------------------------------
  2218. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  2219.         AX = DE0Ch
  2220.         BX = mapping context of task being swapped out
  2221.         DX = handle of DESQview system task
  2222. Note:   driver should pass this call to previous handler after processing it
  2223. ---------------------------------------------
  2224. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  2225.         AX = DE0Dh
  2226.         BX = mapping context of process just swapped in
  2227.         DX = handle of DESQview system task
  2228. Note:   driver should pass this call to previous handler before processing it
  2229. ---------------------------------------------
  2230. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  2231.         AX = DE0Eh
  2232.         BX = mapping context of DESQview system task
  2233.         DX = handle of DESQview system task
  2234.         SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2235. Note:   driver should pass this call to previous handler after processing it
  2236. ---------------------------------------------
  2237. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  2238. ---------------------------------------------
  2239. INT 58 - IRQ8 relocated by DESQview 2.26+
  2240. SeeAlso: INT 70
  2241. ---------------------------------------------
  2242. INT 59 - IRQ9 relocated by DESQview 2.26+
  2243. SeeAlso: INT 71
  2244. ---------------------------------------------
  2245. INT 5A - IRQ10 relocated by DESQview 2.26+
  2246. SeeAlso: INT 72
  2247. ---------------------------------------------
  2248. INT 5B - IRQ11 relocated by DESQview 2.26+
  2249. SeeAlso: INT 73
  2250. ---------------------------------------------
  2251. INT 5C - IRQ12 relocated by DESQview 2.26+
  2252. SeeAlso: INT 74
  2253. ---------------------------------------------
  2254. INT 5D - IRQ13 relocated by DESQview 2.26+
  2255. SeeAlso: INT 75
  2256. ---------------------------------------------
  2257. INT 5E - IRQ14 relocated by DESQview 2.26+
  2258. SeeAlso: INT 76
  2259. ---------------------------------------------
  2260. INT 5F - IRQ15 relocated by DESQview 2.26+
  2261. SeeAlso: INT 77
  2262. ---------------------------------------------
  2263. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  2264.         AX = DE00h
  2265. Return: AH = 00h    VCPI is present
  2266.             BH = major version number
  2267.             BL = minor version number
  2268.         AH nonzero  VCPI not present
  2269. ---------------------------------------------
  2270. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  2271.         AX = DE01h
  2272.         ES:DI -> 4K page table buffer
  2273.         DS:SI -> three descriptor table entries in GDT
  2274.                 first becomes code segment descriptor, other two for use by
  2275.                 main control program
  2276. Return: AH = 00h successful
  2277.             DI -> first unused page table entry in buffer
  2278.             EBX -> protected mode entry point in code segment
  2279.         AH = nonzero  failed
  2280. ---------------------------------------------
  2281. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  2282.         AX = DE02h
  2283. Return: AH = 00h  successful
  2284.             EDX = physical address of highest 4K memory page
  2285.         AH nonzero: failed
  2286. ---------------------------------------------
  2287. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  2288.         AX = DE03h
  2289. Return: AH = 00h  successful
  2290.             EDX = number of free 4K pages
  2291.         AH nonzero: failed
  2292. Notes:  returns total number of pages available to ALL tasks in system
  2293.         also available in protected mode by calling the protected-mode VCPI
  2294.           entry point
  2295. SeeAlso: AX=DE04h
  2296. ---------------------------------------------
  2297. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  2298.         AX = DE04h
  2299. Return: AH = 00h successful
  2300.             EDX = physical address of allocated page
  2301.         AH nonzero: failed
  2302. Notes:  the client program is responsible for freeing all memory allocated
  2303.           with this call before terminating
  2304.         also available in protected mode by calling the protected-mode VCPI
  2305.           entry point
  2306. SeeAlso: AX=DE03h,DE05h
  2307. ---------------------------------------------
  2308. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  2309.         AX = DE05h
  2310.         EDX = physical address of 4K page
  2311. Return: AH = 00h successful
  2312.         AH nonzero: failed
  2313. Note:   also available in protected mode by calling the protected-mode VCPI
  2314.           entry point
  2315. SeeAlso: AX=DE04h
  2316. ---------------------------------------------
  2317. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  2318.         AX = DE06h
  2319.         CX = page number (linear address shifted right 12 bits)
  2320. Return: AH = 00h successful
  2321.             EDX = physical address of page
  2322.         AH nonzero: invalid page number (AH = 8Bh recommended)
  2323. ---------------------------------------------
  2324. INT 67 - Virtual Control Program Interface - READ CR0
  2325.         AX = DE07h
  2326. Return: AH = 00h
  2327.         EBX = value of Control Register 0
  2328. SeeAlso: AX=DE07h
  2329. ---------------------------------------------
  2330. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  2331.         AX = DE08h
  2332.         ES:DI -> array of 8 DWORDs
  2333. Return: AH = 00h
  2334.         buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  2335. SeeAlso: AX=DE09h
  2336. ---------------------------------------------
  2337. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  2338.         AX = DE09h
  2339.         ES:DI -> array of 8 DWORDs holding new values of debug registers
  2340. Return: AH = 00h
  2341. Note:   values for DR4 and DR5 ignored
  2342. SeeAlso: AX=DE08h
  2343. ---------------------------------------------
  2344. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  2345.         AX = DE0Ah
  2346. Return: AH = 00h successful
  2347.             BX = first vector used by master 8259 (IRQ0)
  2348.             CX = first vector used by slave 8259 (IRQ8)
  2349.         AH nonzero: failed
  2350. Note:   CX is undefined in systems without a slave 8259
  2351. SeeAlso: AX=DE0Bh
  2352. ---------------------------------------------
  2353. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  2354.         AX = DE0Bh
  2355.         BX = first vector used by master 8259
  2356.         CX = first vector used by slave 8259
  2357.         interrupts disabled
  2358. Return: AH = 00h successful
  2359.         AH nonzero: failed 
  2360. Notes:  This call merely informs the server that the client has changed the
  2361.           interrupt mappings.  The client may not change the mappings if they
  2362.           have already been changed by the server or another client, and is
  2363.           responsible for restoring the original mappings before terminating.
  2364. SeeAlso: AX=DE0Ah
  2365. ---------------------------------------------
  2366. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  2367.         AX = DE0Ch
  2368.         ESI = linear address in first megabyte of values for system registers
  2369.         interrupts disabled
  2370. Return: interrupts disabled
  2371.         GDTR, IDTR, LDTR, TR loaded
  2372.         SS:ESP must have at least 16 bytes space, and the entry point is
  2373.                 required to set up a new stack before enabling interrupts
  2374.         EAX, ESI, DS, ES, FS, GS destroyed
  2375. SeeAlso: INT 15/AH=89h
  2376.  
  2377. Note:   in protected mode, calling the protected-mode VCPI entry point with 
  2378.           AX = DE0Ch
  2379.           DS = segment selector from function DE01h
  2380.           SS:ESP in first megabyte of linear memory
  2381.           STACK:QWORD  return address from FAR call to 32-bit segment
  2382.                 DWORD  EIP
  2383.                 DWORD  CS
  2384.                 DWORD  reserved for EFLAGS
  2385.                 DWORD  ESP
  2386.                 DWORD  SS
  2387.                 DWORD  ES
  2388.                 DWORD  DS
  2389.                 DWORD  FS
  2390.                 DWORD  GS
  2391.           and interrupts disabled, will switch to virtual86 mode with
  2392.           interrupts disabled, all segment registers loaded, and EAX destroyed.
  2393.  
  2394. Format of system register values for switch to protected mode:
  2395. Offset  Size    Description
  2396.  00h    DWORD   value for CR3
  2397.  04h    DWORD   linear address in first megabyte of value for GDTR
  2398.  08h    DWORD   linear address in first megabyte of value for IDTR
  2399.  0Ch    WORD    value for LDTR
  2400.  0Eh    WORD    value for TR
  2401.  10h    PWORD   CS:EIP of protected mode entry-point
  2402. ---------------------------------------------
  2403. INT 71 - IRQ9 - AT/XT286/PS50+ - LAN ADAPTER 1
  2404. Notes:  may be masked by setting bit 1 on I/O port A1h
  2405.         rerouted to INT 0A by BIOS
  2406.         under DESQview, only the INT 15h vector and BASIC segment address (the
  2407.           word at 0000h:0510h) may be assumed to be valid for the handler's
  2408.           process
  2409. SeeAlso: INT 0A, INT 59
  2410. ---------------------------------------------
  2411. INT 74 - IRQ12 - PS50+ - MOUSE INTERRUPT
  2412. Notes:  may be masked by setting bit 4 on I/O port A1h
  2413.         under DESQview, only the INT 15h vector and BASIC segment address (the
  2414.           word at 0000h:0510h) may be assumed to be valid for the handler's
  2415.           process
  2416. SeeAlso: INT 33, INT 5C
  2417. ---------------------------------------------
  2418. INT 75 - IRQ13 - AT/XT286/PS50+ - 80287 ERROR
  2419. Notes:  may be masked by setting bit 5 on I/O port A1h
  2420.         rerouted to INT 02 by BIOS
  2421.         under DESQview, only the INT 15h vector and BASIC segment address (the
  2422.           word at 0000h:0510h) may be assumed to be valid for the handler's
  2423.           process
  2424. SeeAlso: INT 5D
  2425. ---------------------------------------------
  2426.