home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 033 / dvint43.zip / DVINT.LST next >
File List  |  1994-11-06  |  242KB  |  6,166 lines

  1. DESQview/QEMM Interrupt List    Release 43        Last change 11/6/94
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------!---FILELIST-------------------------
  4. Please redistribute the following files unmodified as a group, in an archive
  5. named DVINT43 (preferably the original authenticated PKZIP archive):
  6.     INTERRUP.1ST    the read-me file, containing credits, availability info
  7.     DVINT.LST    this file (103 pages at 60 lines per page)
  8.     RBROWN.TXT    a list of other products by Ralf Brown
  9. --------!---CONTACT_INFO---------------------
  10. If you notice any mistakes or omissions, please let me know!  It is only with
  11. YOUR help that the list can continue to grow at the current rate.  Please send
  12. all changes to me rather than distributing a modified version of the list.
  13.  
  14. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  15. that they have already been addressed.
  16.  
  17.      Ralf Brown
  18.  
  19. Internet: ralf@telerama.lm.com
  20. UUCP: {uunet,harvard}!telerama.lm.com!ralf
  21. FIDO: Ralf Brown 1:129/26.1
  22.     or post a message to me in the DR_DEBUG echo (I probably won't see it
  23.     unless you address it to me)
  24. CIS:  >INTERNET:ralf@telerama.lm.com
  25.  
  26. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  27. because of bad return paths.  If you don't get a response from me within a
  28. reasonable period of time, send it again with a better return path (starting at
  29. harvard or ucbvax for UUCP, from the Internet for others).
  30. --------!------------------------------------
  31. See INTERRUP.1ST for the key to system abbreviations and a list of the
  32. trademarks mentioned here.
  33. --------!---DISCLAIMER-----------------------
  34. DISCLAIMER:  THIS MATERIAL IS PROVIDED "AS IS".     I verify the information
  35. contained in this list to the best of my ability, but I cannot be held
  36. responsible for any problems caused by use or misuse of the information,
  37. especially for those functions not officially documented.  If it is marked
  38. "internal" or undocumented, you should check it carefully to make sure it
  39. works the same way in your version of the software (and please let me know
  40. whether or not it works the same way).    Information marked with "???" is
  41. known to be incomplete or guesswork.
  42. --------!---FLAGS----------------------------
  43. The use of -> instead of = signifies that the indicated register or register
  44. pair contains a pointer to the specified item, rather than the item itself.
  45. One or more letters may follow the interrupt number; they have the following
  46. meanings:  U - undocumented function, u - partially documented function,
  47. P - available only in protected mode, R - available only in real or V86 mode,
  48. C - callout or callback (usually hooked rather than called),
  49. O - obsolete (no longer present in current versions)
  50. --------!---CATEGORIES-----------------------
  51. The ninth column of the divider line preceding an entry usually contains a
  52. classification code (the entry has not been classified if that character is
  53. a dash).  The codes currently in use are:
  54.     A - applications, a - access software (screen readers, etc),
  55.     B - BIOS, b - vendor-specific BIOS extensions,
  56.     C - CPU-generated, c - caches/spoolers,
  57.     D - DOS kernel, d - disk I/O enhancements,
  58.     E - DOS extenders, e - electronic mail, F - FAX,
  59.     f - file manipulation, G - debuggers/debugging tools, g - games,
  60.     H - hardware, h - vendor-specific hardware,
  61.     I - IBM workstation/terminal emulators, i - system info/monitoring
  62.     J - Japanese, j - joke programs,
  63.     K - keyboard enhancers, k - file/disk compression,
  64.     l - shells/command interpreters,
  65.     M - mouse/pointing device, m - memory management,
  66.     N - network, n - non-traditional input devices,
  67.     O - other operating systems,
  68.     P - printer enhancements, p - power management,
  69.     Q - DESQview/TopView and Quarterdeck programs,
  70.     R - remote control/file access, r - runtime support,
  71.     S - serial I/O, s - sound/speech,
  72.     T - DOS-based task switchers/multitaskers, t - TSR libraries
  73.     U - resident utilities, u - emulators,
  74.     V - video, v - virus/antivirus,
  75.     W - MS Windows, X - expansion bus BIOSes,
  76.     y - security, * - reserved (and not otherwise classified)
  77. --------H-0A---------------------------------
  78. INT 0A - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)
  79. Notes:    the TOPS and PCnet adapters use this interrupt request line by default
  80.     DOS 3.2 revectors IRQ2 to a stack-switching routine
  81.     on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
  82.       connects to the slave 8259.  The BIOS redirects the interrupt for
  83.       IRQ9 back here.
  84.     under DESQview, only the INT 15h vector and BASIC segment address (the
  85.       word at 0000h:0510h) may be assumed to be valid for the handler's
  86.       process
  87.     many VGA boards do not implement the vertical retrace interrupt,
  88.       including the IBM VGA Adapter where the traces are either cut or
  89.       removed
  90. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
  91. --------H-0D---------------------------------
  92. INT 0D - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2)
  93. Notes:    under DESQview, only the INT 15h vector and BASIC segment address (the
  94.       word at 0000h:0510h) may be assumed to be valid for the handler's
  95.       process
  96.     the Tandy 1000, 1000A, and 1000HD use IRQ2 for the hard disk; the
  97.       1000EX, HX, RLX, RLX-HD, RLX-B, RLX-HD-B use IRQ5 instead; the
  98.       1000RL, RL-HD, SL, SL/2, TL, TL/2, and TL/3 are jumper-selectable
  99.       for either IRQ2 or IRQ5 (default IRQ5); the 1000SX and TX are
  100.       DIP-switch selectable for IRQ2 or IRQ5 (default IRQ2); the RSX and
  101.       RSX-HD use IRQ14.  Tandy systems which use IRQ2 for the hard disk
  102.       interrupt use IRQ5 for vertical retrace.
  103.     may be masked by setting bit 5 on I/O port 21h
  104. SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS"
  105. SeeAlso: INT 7D"GO32"
  106. --------V-1000-------------------------------
  107. INT 10 - VIDEO - SET VIDEO MODE
  108.     AH = 00h
  109.     AL = mode (see #0009)
  110. Return: AL = video mode flag (Phoenix, AMI BIOS)
  111.         20h mode > 7
  112.         30h modes 0-5 and 7
  113.         3Fh mode 6
  114.     AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
  115. Desc:    specify the display mode for the currently active display adapter
  116. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  117.       (EGA or higher only)
  118. SeeAlso: AX=0070h,AX=007Eh,AX=10E0h,AX=10F0h,AH=40h,AX=6F05h,AH=FFh"GO32"
  119.  
  120. (Table 0009)
  121. Values for video mode:
  122.      text/ text pixel    pixel    colors disply scrn  system
  123.      grph resol     box  resolution       pages  addr
  124.  21h = T 132x30      .      .     16      .    .  Avance Logic AL2101
  125.      = G  80x43     8x8   720x348    mono      .   B000 DESQview 2.x+Hercules [4]
  126.  22h = T 132x43      .      .      .      .    .  Allstar Peacock (VGA)
  127.      = G  80x43     8x8   720x348    mono      .   B800 DESQview 2.x+Hercules [4]
  128. Notes:
  129. [4] DESQview intercepts calls to change into these two modes (21h is page 0,
  130.       22h is page 1) even if there is no Hercules graphics board installed
  131. --------Q-1080--DX4456-----------------------
  132. INT 10 U - VIDEO - DESQview 2.0x only - internal - SET ??? HANDLER
  133.     AH = 80h
  134.     DX = 4456h ('DV')
  135.     ES:DI -> FAR subroutine to be called on ???
  136. Return: DS = segment of DESQview data structure for video buffer
  137. Note:    this function is probably meant for internal use only, due to the magic
  138.       value required in DX
  139.     the subroutine seems to be called when the DESQview menu is accessed;
  140.       on entry, AL = 03h or 04h
  141. --------Q-1081--DX4456-----------------------
  142. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET ???
  143.     AH = 81h
  144.     DX = 4456h ('DV')
  145. Return: ES = segment of DESQview data structure for video buffer
  146.         BYTE ES:[0] = current window number in DV 2.0x
  147. Note:    this function is probably meant for internal use only, due to the magic
  148.       value required in DX
  149. SeeAlso: AH=82h"DESQview"
  150. --------Q-1082--DX4456-----------------------
  151. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET CURRENT WINDOW INFO
  152.     AH = 82h
  153.     DX = 4456h ('DV')
  154. Return: DS = segment in DESQview for data structure
  155.          in DV 2.00,
  156.           BYTE DS:[0] = window number
  157.           WORD DS:[1] = segment of other data structure
  158.           WORD DS:[3] = segment of window's object handle
  159.     ES = segment of DESQview data structure for video buffer
  160.     AL = current window number
  161.     AH = ???
  162.     BL = direct screen writes
  163.         00h program does not do direct writes
  164.         01h program does direct writes, so shadow buffer not usable
  165.     BH = ???
  166.     CL = current video mode
  167.     CH = ???
  168. Note:    this function is probably meant for internal use only, due to the magic
  169.       value required in DX
  170. SeeAlso: AH=81h"DESQview"
  171. --------V-10FE-------------------------------
  172. INT 10 - TopView - GET SHADOW BUFFER
  173.     AH = FEh
  174.     ES:DI -> assumed video buffer
  175.         B800h:0000h color text/CGA graphics, B000h:0000h mono text,
  176.           or A000h:0000h EGA/VGA graphics (RSIS environments only)
  177. Return: ES:DI -> actual video buffer for calling process
  178. Desc:    Determine the address of the virtual screen to which the program
  179.       should write instead of the actual video memory; this permits
  180.       programs to be multitasked without interfering with each other's
  181.       output, and allows memory managers to move the video memory to
  182.       permit larger programs to be loaded.
  183. Notes:    if no multitasker or RSIS-compliant environment is installed, ES:DI is
  184.       returned unchanged; RSIS is the Relocated Screen Interface
  185.       Specification
  186.     for display pages other than 0, use AH=05h and AH=0Fh to determine
  187.       whether a particular page exists
  188.     TopView requires a call to AH=FFh to notify it that the screen has
  189.       changed; DESQview will check for changes itself until the first call
  190.       to AH=FFh
  191. SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
  192. SeeAlso: INT 21/AH=ECh"DoubleDOS"
  193. --------V-10FF-------------------------------
  194. INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
  195.     AH = FFh
  196.     CX = number of consecutive changed characters
  197.     ES:DI -> first changed character in shadow buffer
  198. Notes:    avoid CX=0000h
  199.     DESQview will discontinue the automatic screen updating initiated by
  200.       AH=FEh after this call
  201.     not supported (ignored) by DESQview/X 1.0x
  202. SeeAlso: AH=93h,AH=FEh
  203. --------d-1320-------------------------------
  204. INT 13 - DISK - ??? (Western Digital "Super BIOS")
  205.     AH = 20h
  206.     ???
  207. Return: ???
  208. Notes:    returns some kind of status related to whether the drive contains its
  209.       default media type
  210.     QEMM v6.00 calls INT 13/AX=2000h/DL=81h in some cases
  211. --------Q-151000-----------------------------
  212. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  213.     AX = 1000h
  214. Return: after other processes run
  215. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  216.       the current time-slice is set to expire at the next clock tick rather
  217.       than immediately
  218. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  219. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  220. SeeAlso: INT 7F/AH=E8h
  221. --------Q-151001-----------------------------
  222. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  223.     AX = 1001h
  224.     BX = number of bytes to allocate
  225. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  226.     AX = status (DV v2.42)
  227.         0000h successful
  228.         0001h failed
  229. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  230.       common memory.  Under DV v2.42, this call never generates a user
  231.       prompt regardless of the SETERROR value; instead, it always returns
  232.       AX=0001h and ES:DI=0000h:0000h if out of memory
  233. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  234. --------Q-151002-----------------------------
  235. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  236.     AX = 1002h
  237.     ES:DI -> previously allocated block
  238. Return: block freed
  239. SeeAlso: AX=1001h,AX=DE0Dh
  240. --------Q-151003-----------------------------
  241. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  242.     AX = 1003h
  243.     BH = attribute
  244.     BL = character
  245.     DX = segment of object handle for window
  246. Note:    BX=0 does not display anything, it only positions the hardware cursor
  247. --------Q-1510-------------------------------
  248. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  249.     AH = 10h
  250.     AL = 04h thru 12h
  251. Return: pops up "Programming error" window in DV 2.x
  252. --------Q-151013-----------------------------
  253. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  254.     AX = 1013h
  255.     ES:DI -> FAR service routine
  256. Return: BX = bit mask indicating which bit was allocated
  257.          0000h if no more bits available
  258. SeeAlso: AX=1014h,AX=1015h
  259. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  260.       interrupt; if other calls need to be made, the interrupt handler
  261.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  262. --------Q-151014-----------------------------
  263. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  264.     AX = 1014h
  265.     BX = bit mask from INT 15/AX=1013h
  266. SeeAlso: AX=1013h,AX=1015h
  267. --------Q-151015-----------------------------
  268. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  269.     AX = 1015h
  270.     BX = bit mask for interrupts to post
  271. Return: indicated routines will be called: (DV 2.0x) at next task switch
  272.                        (DV 2.2x) immediately on return from
  273.                              hardware interrupt
  274. SeeAlso: AX=1013h,AX=1014h
  275. Notes:    this is one of the few TopView calls which are allowed from a hardware
  276.       interrupt handler
  277.     the handler will be called with ES containing the segment of the handle
  278.       of the next task to be executed; on return, ES must be the segment of
  279.       a task handle
  280. --------Q-151016-----------------------------
  281. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  282.     AX = 1016h
  283.     ES:DI = possible object handle
  284. Return: BX = status
  285.         FFFFh if ES:DI is a valid object handle (see #0282)
  286.         0000h if ES:DI is not
  287. Note:    under DESQview versions prior to 2.50, an object handle is always a
  288.       pointer to the object; for versions 2.50 and up, only task handles
  289.       are always pointers (other handles may consist of a unique object
  290.       number and offset into DESQview's common memory)
  291. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  292.  
  293. (Table 0281)
  294. Values for DESQview object type:
  295.  00h    window/task
  296.  01h    mailbox
  297.  02h    keyboard
  298.  03h    timer
  299.  04h    pointer
  300.  05h    panel
  301.  06h    objectq
  302.  
  303. Format of DESQview object:
  304. Offset    Size    Description    (Table 0282)
  305.  00h    WORD    offset in common memory of previous object of same type
  306.  02h    WORD    offset in common memory of next object of same type
  307.  04h    WORD    signature FEDCh (DV 2.42-)
  308.         signature FEDCh or object number (DV 2.50+)
  309.  06h    WORD    object type (see #0281)
  310.  08h    DWORD    object handle to return to caller
  311.  0Ch    DWORD    canonicalized object address (segment = common memory)
  312.  10h    WORD    offset in common memory of owning task
  313.         (0000h for unowned OBJECTQs)
  314.  12h    WORD    mapping context
  315.         offset in common memory of mapping context record (see #0284)
  316.     remainder varies by object type and DESQview version
  317. ---v2.42 keyboard object---
  318.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  319.         bit 15: keyboard opened
  320.  16h  4 BYTEs    ???
  321.  1Ah    WORD    priority in OBJECTQ???
  322.  1Ch    ...
  323.  25h    WORD    offset in common memory of ??? task
  324.  27h  4 BYTEs    ???
  325. ---v2.42 objectq object---
  326.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  327.         bit 15: OBJECTQ opened
  328.  16h  2 BYTEs    ???
  329.  18h    WORD    offset in common memory of ??? task
  330.  1Ah  6 BYTEs    ???
  331. ---v2.42 mailbox object---
  332.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  333.         bit 15: mailbox opened
  334.  1Ah    WORD    priority in OBJECTQ???
  335.  1Ch  6 BYTEs    ???
  336.  22h    WORD    offset in common memory of mailbox name (counted string)
  337.         0000h if no name
  338.      <= 5 BYTEs ???
  339. ---v2.22-2.42,2.52,2.60 window/task object---
  340.  14h    BYTE    00h window, 01h task
  341.  15h    BYTE    internal (not Switch menu) window number???
  342.  16h    BYTE    internal (not Switch menu) window number???
  343.  17h    WORD    segment of internal window record (see #0285)
  344.  19h  2 BYTEs    ???
  345.  1Bh    BYTE    cursor row
  346.  1Ch    BYTE    cursor column
  347.  1Dh    BYTE    visible window origin, row
  348.  1Eh    BYTE    visible window origin, column
  349.  1Fh    BYTE    window height (logical)
  350.  20h    BYTE    window width (logical)
  351.  21h    BYTE    window position, row
  352.  22h    BYTE    window position, column
  353.  23h    BYTE    window height (visible)
  354.  24h    BYTE    window width (visible)
  355.  25h    BYTE    row of top of frame (or window if unframed)
  356.  26h    BYTE    column of left of frame (or window if unframed)
  357.  27h    BYTE    window height (physical, including frame)
  358.  28h    BYTE    window width (physical, including frame)
  359.  29h    BYTE    unzoomed visible origin, row (00h before first zoom)
  360.  2Ah    BYTE    unzoomed visible origin, column (00h before first zoom)
  361.  2Bh    BYTE    unzoomed window position, row (00h before first zoom)
  362.  2Ch    BYTE    unzoomed window position, column (00h before first zoom)
  363.  2Dh    BYTE    unzoomed window height (00h before first zoom)
  364.  2Eh    BYTE    unzoomed window width (00h before first zoom)
  365.         unzoomed parameters above are updated when window is zoomed
  366.           to full screen
  367.  2Fh    BYTE    ??? initially logical window height
  368.  30h    BYTE    ??? initially logical window width
  369.  31h  2 BYTEs    ???
  370.  33h    BYTE    minimum height of window
  371.  34h    BYTE    minimum width of window
  372.  35h    BYTE    maximum height of window
  373.  36h    BYTE    maximum width of window
  374.  37h  3 BYTEs    ???
  375.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  376.  42h 24 BYTEs    attributes???
  377.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  378.  62h  3 BYTEs    ???
  379.  65h    BYTE    ??? bitflags
  380.  66h    BYTE    bit 0: window is zoomed
  381.  67h    BYTE    ???
  382.  68h    WORD    offset in common memory of window name or 0000h if untitled
  383.  6Ah    WORD    length of window name
  384.  6Ch  2 BYTEs    ???
  385.  6Eh    WORD    offset of logical cursor in window (in character cells)
  386.  70h    DWORD    pointer to field table for window
  387.  74h    BYTE    ???
  388.  75h  2 BYTEs    ???
  389.  77h    BYTE    number of last-visited field
  390.  78h    DWORD    pointer to field table entry for last-visited field
  391.  7Ch  3 BYTEs    ???
  392.  7Fh    BYTE    select field marker character
  393.  80h    BYTE    ??? bit flags
  394.         bit 0: allow ECh window stream opcode to change reverse logattr
  395.         bit 1: alternate field processing mode selected
  396.  81h    BYTE    ???
  397.  82h    DWORD    notification function (manager stream opcode 8Ah)
  398.         no notification if segment = 0000h
  399.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  400.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  401.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  402.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  403.  90h    BYTE    ??? bitflags
  404.  91h    BYTE    ???
  405.  ---task object only
  406.  92h    BYTE    bit flags (bits 0-4)
  407.  93h    BYTE    character for ??? (default 20h)
  408.  94h    BYTE    ??? flag
  409.  95h    WORD    offset in common memory of ???
  410.  97h  2 BYTEs    ???
  411.  99h    WORD    ???
  412.  9Bh    BYTE    ??? bit flags
  413.         bit 3: ???
  414.         bit 6: perform protected-attribute processing on select fields
  415.  9Ch    BYTE    ???
  416.  9Dh    WORD    offset in common memory of current register save record
  417.           (see #0283).    No register save record in use if < 01C0h
  418.  9Fh    WORD    offset in common memory of task's keyboard object
  419.  A1h    WORD    offset in common memory of task's OBJECTQ object
  420.  A3h    WORD    offset in common memory of task's mailbox object
  421.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  422.  A7h    DWORD    user's SS:SP
  423.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  424.  ADh  6 BYTEs    ???
  425.  B3h    BYTE    ??? bit flags
  426.         bit 0: run in foreground only
  427.  B4h    BYTE    ???
  428.  B5h    BYTE    ??? bitflags
  429.  B6h    BYTE    task status (see #0386 at AX=DE2Ch)
  430.  B7h  9 BYTEs    ???
  431.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  432.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  433.  C4h  2 BYTEs    ??? (0000h)
  434.  C6h    WORD    segment of keyboard buffer for task
  435.  C8h    WORD    offset in common memory of ??? keyboard object
  436.  CAh    BYTE    ???
  437. ---v2.22-2.42
  438.  CBh    WORD    offset in common memory of ??? object
  439.  CEh    BYTE    ??? flag
  440.  CFh    WORD    offset in common memory of default notify window for task
  441.           or 0000h if none
  442.  D1h  4 BYTEs    ???
  443.  D5h    BYTE    window number on Switch Window menu
  444.  D6h  5 BYTEs    ???
  445.  DBh    WORD    offset in common memory of ??? object
  446.  DDh  2 BYTEs    ???
  447.  DFh    WORD    API level for task
  448.  E1h    WORD    offset in common memory of object task is waiting on if task
  449.           status is 'waiting', else 0000h
  450.  E7h    WORD    segment of ???
  451.  E9h 4    BYTEs    ???
  452.  EDh    WORD    EMS handle of virtualization buffer, 0000h if no virtualization
  453.  F1h 12 BYTEs    ???
  454.  FBh    WORD    ???
  455.  FDh    BYTE    ???
  456.  FFh 12 BYTEs    ???
  457. 10Bh    DWORD    pointer to process record (see #0286,#0287)
  458. 10Dh 10 BYTEs    ???
  459. 119h    DWORD    SS:SP for ???
  460. 11Dh  4 BYTEs    ???
  461. 121h    DWORD    pointer to ???
  462. 125h 25 BYTEs    ???
  463. 13Eh    DWORD    pointer to ??? in system memory
  464. ---v2.22
  465. 142h  3 BYTEs    ???
  466. 145h        task's default keyboard object
  467. ---v2.42
  468. 142h    DWORD    pointer to first task instance data record in system memory
  469. 148h    DWORD    pointer to last task instance data record in system memory
  470.         (see #0288)
  471. 14Ah    BYTE    ???
  472. 14Dh 42 BYTEs    task's default keyboard object
  473. 177h 32 BYTEs    task's ObjectQ object
  474. 197h 41 BYTEs    task's default mailbox object
  475. 1C0h 24 BYTEs    first register save record
  476. 450h    --    default top of private stack
  477. ---v2.52 (probably all DV/X)
  478. Same as v2.60 below except there is an extra 29 bytes inserted somewhere
  479.   before offset 9Fh, but not yet known exactly where.  Also, for the WAIT_ON
  480.   field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
  481.   0000h even when waiting.
  482. ---v2.60
  483.  CBh    WORD    ??? (added in 2.50 - rest is same as 2.42)
  484.  CDh    WORD    offset in common memory of ??? object
  485.  D0h    BYTE    ??? flag
  486.  D1h    WORD    offset in common memory of default notify window for task
  487.           or 0000h if none
  488.  D3h  4 BYTEs    ???
  489.  D7h    BYTE    window number on Switch Window menu
  490.  D8h  5 BYTEs    ???
  491.  DDh    WORD    offset in common memory of ??? object
  492.  DFh  2 BYTEs    ???
  493.  E1h    WORD    API level for task
  494.  E3h    WORD    If status at B6h=waiting, offset in common memory of object
  495.           that task is waiting on, else 0000h. (Task with CPU also
  496.           has 0000h here)
  497.  E9h    WORD    segment of ???
  498.  EBh 4    BYTEs    ???
  499.  EFh    WORD    EMS handle of virtualization buffer, 0 if no virtualization
  500.  F3h 12 BYTEs    ???
  501.  FDh    WORD    ???
  502.  FFh    BYTE    ???
  503. 101h  8 BYTEs    ???
  504. 109h    DWORD    pointer to process record in system memory
  505. 10Dh 14 BYTEs  ???
  506. 11Bh    DWORD    SS:SP for ???
  507. 11Fh  4 BYTEs    ???
  508. 123h    DWORD    pointer to ???
  509. 127h 25 BYTEs    ???
  510. 140h    DWORD    pointer to ??? in system memory
  511. 144h    DWORD    pointer to first task instance data record in system memory
  512. 148h    DWORD    pointer to last task instance data record in system memory
  513.         (from INT 15/AX=DE27h, see below)
  514. 14Ch    BYTE    ???
  515. 14Eh 42 BYTEs    task's default keyboard object
  516. 179h 32 BYTEs    task's ObjectQ object
  517. 199h 41 BYTEs    task's default mailbox object
  518. 1C2h 24 BYTEs    first register save record
  519. 452h    --    default top of private stack
  520.  
  521. Format of DESQview Register Save Record:
  522. Offset    Size    Description    (Table 0283)
  523.  00h    WORD    AX
  524.  02h    WORD    BX
  525.  04h    WORD    CX
  526.  06h    WORD    DX
  527.  08h    WORD    DI
  528.  0Ah    WORD    SI
  529.  0Eh    WORD    DS
  530.  10h    WORD    ES
  531.  12h    DWORD    return address
  532.  16h    WORD    original flags
  533.  
  534. Format of DESQview mapping context record:
  535. Offset    Size    Description    (Table 0284)
  536.  00h    WORD    lowest segment in process's memory
  537.         (often start of system memory chain)
  538.  02h    WORD    size of process's memory in paragraphs
  539.  04h    BYTE    flag: 00h if process swapped out, 01h otherwise
  540.  05h    BYTE    flag: 00h if allocated in conventional memory, 01h if EMS
  541.  06h  2 BYTEs    ???
  542.  08h    WORD    EMS handle if in EMS, else 0
  543.  0Ah  2 BYTEs    ??? (nonzero if system memory resides in shared mem???)
  544.  0Ch    WORD    segment of system memory block that contains process record,
  545.           referenced from segment of start of system memory chain
  546.  0Eh    BYTE    ???
  547.  0Fh    WORD    size of system memory block that contains process record
  548.           and DOS memory in paragraphs
  549.  11h    BYTE    bit flags
  550.         Bit 0: Swapped out???
  551.         Bit 1: ???
  552.         Bit 2: Swapped out???
  553.  12h    BYTE    ???
  554.  13h    BYTE    reference count
  555.  ---v2.31
  556.  14h 10 BYTEs    ???
  557.  1Eh    WORD    segment of process record
  558.  20h  2 BYTEs    ???
  559.  22h    WORD    segment of ???    (in first free system memory block???)
  560.  24h    WORD    segment of end of system memory chain
  561.  26h    WORD    segment of start of system memory chain
  562.  28h  8 BYTEs    ???
  563.  2Ah    DWORD    pointer to ??? (process record???)
  564.  2Dh 10 BYTEs    ???
  565.  37h    BYTE    lowest interrupt vector to save on context switch
  566.  38h    BYTE    highest interrupt vector to save on context switch
  567.  39h    WORD    offset in common memory of main task with this context
  568.  3Ah 12 BYTEs    ???
  569.  46h    BYTE    internal mapping context number
  570.  47h 12 BYTEs    ???
  571.  ---v2.5x-2.60
  572.  14h  6 BYTEs    ???
  573.  1Ah    WORD    segment of process record
  574.  1Ch  2 BYTEs    ???
  575.  1Eh    WORD    segment of first free system memory block
  576.  20h    WORD    segment of start of system memory chain
  577.  22h    WORD    segment of end of system memory chain
  578.  24h 8    BYTEs    ???
  579.  2Ch    DWORD    pointer to ??? (1 segment into process record???)
  580.  30h 3    BYTEs    ???
  581.  33h    WORD    Offset in common memory of main task with this context
  582.  35h 7    BYTEs    ???
  583.  3Ch    BYTE    internal mapping context number
  584.  3Dh 14 BYTEs    ???
  585.  4Bh    WORD    first DOS memory segment (first MCB segment+1)
  586.  4Dh    BYTE    ??? (flag???)
  587.  ---v2.53 (2.5x???)
  588.  4Eh 12 BYTEs    ???
  589.  ---v2.60
  590.  4Eh    WORD    segment of script buffer (see #0289)
  591.  50h  6 BYTEs    ???
  592.  
  593. Format of DESQview Internal Window Record (v2.31-2.60):
  594. Offset    Size    Description    (Table 0285)
  595.  00h    BYTE    internal window number???
  596.  01h    BYTE    display page???
  597.  02h    BYTE    video mode
  598.  03h  3 BYTEs    ???
  599.  06h    BYTE    logical window height
  600.  07h    BYTE    logical window width
  601.  08h    DWORD    pointer to text video buffer
  602.  0Ch 116 BYTEs    ???
  603.  
  604. Format of DESQview process record (v2.31):
  605. Offset    Size    Description    (Table 0286)
  606. -470h 13 BYTEs    filename of ??? Script
  607. -463h 1117 BYTEs ??? (script buffer???)
  608.  -6h  6 BYTEs    ???
  609.  00h    WORD    segment of parent PSP in process
  610.  02h  5 BYTEs    ???
  611.  07h    WORD    segment of current PSP in process
  612.  09h    WORD    segment of first MCB in process
  613.  0Bh 13 BYTEs    ???
  614.  18h 1024 BYTEs process's interrupt vector table
  615. 418h 376 BYTEs    ???
  616. 590h        first MCB in process
  617.  
  618. Format of DESQview process record (v2.52-v2.60) (probably also 2.5x):
  619. Offset    Size    Description    (Table 0287)
  620.  00h 28 BYTEs    EXE header of last EXE, ??? if last program run was COM
  621.  1Ch ??? BYTEs    overwritten with ASCIZ filename of last program run (EXE/COM)
  622. 11Ch    WORD    segment of parent PSP in process
  623. 11Eh  4 BYTEs    ???
  624. 122h    WORD    segment of current PSP
  625. 124h    WORD    segment of current PSP
  626. 126h    WORD    segment of first MCB in process
  627. 128h  4 BYTEs    ???
  628. 12Ch    DWORD    pointer to first process instance data record in system memory
  629. 130h    DWORD    pointer to last process instance data record in system memory
  630.         (from INT 15/AX=DE27h, see below)
  631. 134h  8 BYTEs    ???
  632. 13Ch    WORD    size of current environment
  633. 13Eh    WORD    segment of current environment
  634. 140h    WORD    segment of current PSP
  635. 142h    DWORD    entry point of current program
  636. 146h 10 BYTEs    ???
  637. ---v2.52 (v2.5x???)
  638. 150h    BYTE    ???
  639. 151h    WORD    segment of parent PSP in process
  640. 153h    WORD    ???
  641. 155h    WORD    ???
  642. 157h    WORD    ???
  643. 159h  4 BYTEs    ???
  644. 15Dh    WORD    segment of current environment
  645. 15Fh    WORD    segment of current PSP
  646. 161h    WORD    segment of ???
  647. 162h    WORD    ???
  648. 164h  3 BYTEs    ???
  649. 168h 1024 BYTEs process's interrupt vector table
  650. 568h 120 BYTEs    ???
  651. 5E0h        first MCB in process
  652. ---v2.60
  653. 150h    WORD    segment of parent PSP in process
  654. 152h    WORD    ???
  655. 154h    WORD    ???
  656. 156h    WORD    ???
  657. 158h  4 BYTEs    ???
  658. 15Ch    WORD    segment of current environment
  659. 15Eh    WORD    segment of current PSP
  660. 160h    WORD    segment of ???
  661. 162h    WORD    ???
  662. 164h 1024 BYTEs process's interrupt vector table
  663. 564h 108 BYTEs    ???
  664. 5D0h        first MCB in process
  665.  
  666. Format of DESQview task or process instance data record (v2.5x???, v2.60):
  667. Offset    Size    Description    (Table 0288)
  668.  00h    DWORD    pointer to next record of same type or 00000000
  669.  04h    DWORD    pointer to previous record of same type or 00000000
  670.  08h    DWORD    pointer to source area of memory during restore state
  671.  0Ch    WORD    number of bytes to save/restore
  672.  0Eh    DWORD    pointer to destination area of memory during restore state
  673.  12h    WORD    ??? (0)
  674.  14h  N BYTEs    source memory buffer during restore state
  675.  
  676. Format of DESQview script buffer (v2.60):
  677. Offset    Size    Description    (Table 0289)
  678.  00h 13 BYTEs    ASCIZ Script filename
  679.  0Dh 80 BYTEs    ???
  680.  5Eh  N BYTEs    script records (see #0290)
  681.  
  682. Format of one DESQview script record (v2.60):
  683. Offset    Size    Description    (Table 0290)
  684.  00h    BYTE    signature 12h
  685.  01h 18 BYTEs    blank-padded script name
  686.  13h    BYTE    ASCII code of key attached to script or 0 if non-ASCII key
  687.  14h    BYTE    scan code of key attached to script if non-ASCII, else 0
  688.  15h    BYTE    ???
  689.  16h    WORD    size of script in bytes
  690.  18h  N    BYTEs    script (ASCII code of each keystroke; if 0, next byte is
  691.           scan code of non-ASCII key)
  692.  
  693. Format of DESQview Common Memory Header (v2.31-2.60):
  694. Offset    Size    Description    (Table 0291)
  695.  00h    WORD    offset of lowest used block
  696.  02h    WORD    bytes of commom memory, including header
  697.  04h    WORD    offset of first free block
  698.  06h  N BYTEs    size depends of DV version, ??? (DVP buffer???)
  699. Note:    the above is located at the beginning of the commom memory segment
  700. SeeAlso: #0292,#0293,#0298
  701.  
  702. Format of DESQview Free block header:
  703. Offset    Size    Description    (Table 0292)
  704.  00h    WORD    size of block in bytes including header
  705.  02h    WORD    offset of next free block
  706.  04h  N BYTEs    free block
  707. SeeAlso: #0291,#0293
  708.  
  709. Format of DESQview Used block header:
  710. Offset    Size    Description    (Table 0293)
  711.  00h    WORD    size of block in bytes including header
  712.  02h  N BYTEs    used block
  713. SeeAlso: #0291,#0292
  714. --------Q-151017-----------------------------
  715. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  716.     AX = 1017h
  717. Return: pops up "Programming error" window in DV 2.x
  718. --------Q-151018-----------------------------
  719. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  720.     AX = 1018h
  721.     BH = column
  722.     BL = row
  723.     ES = segment of object handle for window below which to search
  724.          0000h = start search with topmost window
  725. Return: ES = segment of object handle for window which is visible at the
  726.            indicated position, or covered by indicated window
  727.         0000h if no window
  728. SeeAlso: AX=1023h,AX=1024h
  729. --------Q-151019-----------------------------
  730. INT 15 - TopView - "SOUND" - MAKE TONE
  731.     AX = 1019h
  732.     BX = frequency in Hertz (0000h = silence)
  733.     CX = duration in clock ticks (18.2 ticks/sec)
  734. Return: immediately, tone continues to completion
  735. Notes:    if another tone is already playing, the new tone does not start until
  736.       completion of the previous one.  Up to 32 tones may be queued before
  737.       the process is blocked until a note completes.
  738.     in DV 2.00, the lowest tone allowed is 20 Hz
  739.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  740.       notes are also cancelled
  741. SeeAlso: AH=82h"HUNTER",INT 16/AH=73h
  742. --------Q-15101A-----------------------------
  743. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  744.     AX = 101Ah
  745. Return: stack switched
  746. Notes:    this call may not be nested; a second call must be preceded by a call
  747.       to "USTACK" (AX=1025h)
  748.     while TopView requires many API calls to be executed while on the
  749.       task's internal stack, DESQview allows those calls to be executed
  750.       regardless of the current stack
  751. SeeAlso: AX=1025h
  752. --------Q-15101B-----------------------------
  753. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  754.     AX = 101Bh
  755. Return: task-switching temporarily disabled
  756. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  757.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  758.       will again be disabled)
  759.     suspends the caller until DOS is free
  760. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  761. SeeAlso: INT 60/DI=0602h
  762. --------Q-15101C-----------------------------
  763. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  764.     AX = 101Ch
  765. Return: task-switching enabled
  766. Note:    this API call may be made from within a hardware interrupt handler
  767. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  768. --------Q-15101D-----------------------------
  769. INT 15 - TopView - "STOP" - STOP TASK
  770.     AX = 101Dh
  771.     ES = segment of object handle for task to be stopped
  772.          (== handle of main window for that task)
  773. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  774. Note:    once a task has been stopped, additional "STOP"s are ignored
  775. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  776.       current task
  777. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  778. --------Q-15101E-----------------------------
  779. INT 15 - TopView - "START" - START TASK
  780.     AX = 101Eh
  781.     ES = segment of object handle for task to be started
  782.          (== handle of main window for that task)
  783. Return: indicated task is started up again
  784. Note:    once a task has been started, additional "START"s are ignored
  785. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  786. --------Q-15101F-----------------------------
  787. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  788.     AX = 101Fh
  789.     BX = bit fields
  790.          bits 0-12: number of characters to display
  791.          bits 13,14: which mouse button may be pressed to remove window
  792.              00 = either
  793.              01 = left
  794.              10 = right
  795.              11 = either
  796.          bit 15: beep if 1
  797.     ES:DI -> text of message
  798.     CH = width of error window (0 = default)
  799.     CL = height of error window (0 = default)
  800.     DX = segment of object handle
  801. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  802. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  803. --------Q-151020-----------------------------
  804. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  805.     AX = 1020h
  806. Return: pops up "Programming error" window in DV v2.00+
  807. --------Q-151021-----------------------------
  808. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  809.     AX = 1021h
  810.     BX = segment of object handle for task to interrupt (not self)
  811.     DX:CX -> FAR routine to jump to next time task is run
  812. Return: nothing
  813. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  814.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  815.       needs to be preserved
  816.     multiple PGMINTs to a single task are processed last-in first-out
  817.     if the other task is in a DOS or DV API call, the interruption will
  818.       occur on return from that call
  819. --------Q-151022BX0000-----------------------
  820. INT 15 - TopView - "GETVER" - GET VERSION
  821.     AX = 1022h
  822.     BX = 0000h
  823. Return: BX nonzero, TopView or compatible loaded
  824.     (BL = major version, BH = minor version)
  825. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  826. --------Q-151023-----------------------------
  827. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  828.     AX = 1023h
  829.     BX = segment of object handle for parent window within which to
  830.            position the window (0 = full screen)
  831.     ES = segment of object handle for window to be positioned
  832.     DL = general window position (see #0294)
  833.     CH = number of columns to offset from position specified by DL
  834.     CL = number of rows to offset from position specified by DL
  835. Return: nothing
  836.  
  837. Bitfields for TopView general window position:
  838. Bit(s)    Description    (Table 0294)
  839.  0,1    horizontal position
  840.     00 = current, 01 = center, 10 = left, 11 = right
  841.  2,3    vertical position
  842.     00 = current, 01 = center, 10 = top, 11 = bottom
  843.  4    don't redraw screen if set
  844.  5-7    not used
  845. --------Q-151024-----------------------------
  846. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  847.     AX = 1024h
  848.     BX = segment of object handle for window
  849.           (0 = use default)
  850. Return: ES:DI -> virtual screen
  851.     CX = size of virtual screen in bytes
  852.     DL = 00h text screen
  853.          01h graphics screen
  854. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  855. --------Q-151025-----------------------------
  856. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  857.     AX = 1025h
  858. Return: stack switched back
  859. Notes:    call only after having switched to internal stack with AX=101Ah
  860.     while TopView requires many API calls to be executed while on the
  861.       task's private stack, DESQview allows those calls to be executed
  862.       regardless of the current stack
  863. SeeAlso: AX=101Ah
  864. --------Q-1510-------------------------------
  865. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  866.     AH = 10h
  867.     AL = 26h thru 2Ah
  868. Return: pops up "Programming error" window in DV 2.x
  869. --------Q-15102B-----------------------------
  870. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  871.     AX = 102Bh
  872.     BX = segment of object handle for task
  873. Return: nothing
  874. Note:    forces a task which is waiting on its objectq to continue by placing
  875.       the handle for the task on the objectq
  876. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  877. --------Q-15102C-----------------------------
  878. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  879.     AX = 102Ch
  880.     ES:DI -> contents of .PIF/.DVP file (see #0295)
  881.     BX = size of .PIF/.DVP info
  882. Return: BX = segment of object handle for new task
  883.          0000h on error
  884. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  885.  
  886. Format of .PIF/.DVP file:
  887. Offset    Size    Description    (Table 0295)
  888.  00h    BYTE    reserved (0)
  889.  01h    BYTE    checksum of bytes 02h through 170h
  890.  02h 30 BYTEs    blank-padded program title
  891.  20h    WORD    maximum memory to allocate to partition in KB
  892.  22h    WORD    minimum memory required in KB
  893.  24h 64 BYTEs    ASCIZ program pathname
  894.  64h    BYTE    default drive letter ('A',...)
  895.  65h 64 BYTEs    ASCIZ default directory name
  896.  A5h 64 BYTEs    ASCIZ program parameters
  897.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  898.  E6h    BYTE    number of text pages used
  899.  E7h    BYTE    number of first interrupt to save
  900.  E8h    BYTE    number of last interrupt to save
  901.  E9h    BYTE    rows in virtual screen buffer
  902.  EAh    BYTE    columns in virtual screen buffer
  903.  EBh    BYTE    initial window position, row
  904.  ECh    BYTE    initial window position, column
  905.  EDh    WORD    system memory in KB
  906.  EFh 64 BYTEs    ASCIZ shared program name
  907. 12Fh 64 BYTEs    ASCIZ shared program data file
  908. 16Fh    BYTE    flags1
  909.         bit 7: writes text directly to screen
  910.         bit 6: runs in foreground only (see also offset 184h)
  911.         bit 5: uses math coprocessor
  912.         bit 4: accesses system keyboard buffer directly
  913.         bits 3-1: reserved (0)
  914.         bit 0: swappable
  915. 170h    BYTE    flags2
  916.         bit 6: uses command-line parameters in field at A5h
  917.         bit 5: swaps interrupt vectors
  918. ---information unique to .DVP files---
  919. 171h  2 BYTEs    keys to use on open menu
  920. 173h    WORD    size of script buffer in bytes
  921. 175h    WORD    automatically give up CPU after this many tests for keyboard
  922.           input in one clock tick (default 0 = never)
  923. 177h    BYTE    nonzero = "uses own colors"
  924. 178h    BYTE    nonzero if application swappable
  925. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  926.         in actual .DVP files, frequently 01h
  927. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  928. 17Dh    BYTE    nonzero if copy-protect floppy is required
  929. ---information unique to DESQview 2.0+---
  930. 17Eh    BYTE    .DVP version number
  931.         00h DESQview v1.2+
  932.         01h DESQview v2.0+
  933.         02h DESQview v2.2+
  934. 17Fh    BYTE    reserved (0)
  935. 180h    BYTE    initial number of rows in physical window
  936. 181h    BYTE    initial number of columns in physical window
  937. 182h    WORD    maximum expanded memory to allow, in KB
  938. 184h    BYTE    flags3
  939.         bit 7: automatically assign window position
  940.         bit 5: maximum memory value has been specified
  941.         bit 4: disallow "Close" command
  942.         bit 3: foreground-only when doing graphics
  943.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  944.         bit 2: don't virtualize (see also offset 18Bh)
  945.         bit 1: foreground-only during DOS calls
  946.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  947. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  948.         (see #0296)
  949. 186h    BYTE    number of graphics pages used
  950. 187h    WORD    extra system memory size
  951. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  952. ---information unique to DESQview 2.2+---
  953. 18Ah    BYTE    serial port usage
  954.         FFh uses all serial ports
  955.         00h no serial ports
  956.         01h only COM1
  957.         02h only COM2
  958. 18Bh    BYTE    flags4
  959.         bit 7: automatically close application on exit if .COM or .EXE
  960.             specified (see also offset 17Ch)
  961.         bit 6: swappable if not using serial ports
  962.         bit 5: start program with window hidden (v2.26+)
  963.         bit 4: start program in background (v2.26+)
  964.         bit 3: virtualize text (see also offset 184h)
  965.         bit 2: virtualize graphics (see also offset 184h)
  966.         bit 1: share CPU when foreground
  967.         bit 0: share EGA when foreground and zoomed
  968. 18Ch    BYTE    protection level for 386 machines
  969. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  970. ---information unique to DESQview/X 1.0---
  971. 18Dh    BYTE    X flags
  972.         bits 3-7: unused (0)
  973.         bit 2: don't display wait message when opening window
  974.         bit 1: don't display DOS window
  975.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  976.                (NEWPROC) inherit DOS client layer usage
  977. 18Eh    BYTE    X keyboard behavior (0-3)
  978. 18Fh    BYTE    font scaling
  979.         00h fixed fonts
  980.         01h scalable fonts
  981. 190h 10 BYTEs    reserved (0)
  982. 19Ah    WORD    length of data follownig XDVP signature
  983. 19Ch  4 BYTEs    signature "XDVP"
  984. 1A0h  N BYTEs    list of variable length records (see #0297)
  985.  
  986. Bitfields for DESQview keyboard conflict level:
  987. Bit(s)    Description    (Table 0296)
  988.  3    save/restore entire INT 09 handler state every taskswtch
  989.  2    take special precautions for programs which read the BIOS keyboard
  990.       buffer directly from memory
  991.  1    never indicate keystroke available during scripts/xfers
  992.  0    only indicate keystroke available every sixth poll
  993.  
  994. Format of DESQview/X variable length record:
  995. Offset    Size    Description    (Table 0297)
  996.  00h    WORD    length of following record, 0000h if end of record list
  997.  02h    BYTE    record type
  998.         01h script filename, up to 64 characters
  999.         02h command-line parameters (allows >64 characters on cmdline)
  1000.         03h environment inheritance
  1001.         04h environment string
  1002.         05h starting window position
  1003. ---types 01h,02h,04h---
  1004.  03h  N BYTEs    ASCII data
  1005. ---type 03h---
  1006.  03h    BYTE    inheritance
  1007.         00h do not inherit
  1008.         01h inherit environment
  1009. ---type 05h---
  1010.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  1011.         starting row, starting column, starting height, starting width
  1012. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  1013.       only the last instance of each type is used; multiple occurrences of
  1014.       type 04h are concatenated
  1015. --------Q-15102D-----------------------------
  1016. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  1017.     AX = 102Dh
  1018.     BL = subfunction
  1019.          00h determine whether using keyboard mouse
  1020.         Return: BL = 00h using real mouse
  1021.                  01h using keyboard mouse
  1022.          01h turn keyboard mouse on
  1023.          02h turn keyboard mouse off
  1024. --------Q-15102E-----------------------------
  1025. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  1026.     AX = 102Eh
  1027.     BX = number of bytes
  1028. Return: AX = status
  1029.         0000h successful
  1030.         ES:DI -> allocated system memory (see #0298)
  1031.         0001h failed
  1032.         ES:DI = 0000h:0000h
  1033. Note:    under DV 2.42, this call is identical to AX=1001h
  1034. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  1035.  
  1036. Format of DESQview system memory block header:
  1037. Offset    Size    Description    (Table 0298)
  1038.  00h    WORD    segment of next header or 0000h
  1039.  02h    WORD    segment of previous header or 0000h
  1040.  04h    WORD    size of block in paragraphs, including header
  1041.  06h    BYTE    availability flag (00h in use, 01h free)
  1042. Note:    this header is located one paragraph before the memory block proper
  1043. SeeAlso: #0291
  1044. --------Q-1511-------------------------------
  1045. INT 15 - TopView commands
  1046.     AH = 11h
  1047.     AL = various (except 17h)
  1048. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  1049.       see those below
  1050. SeeAlso: AH=DEh
  1051. --------Q-151117BX0000-----------------------
  1052. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  1053.     AX = 1117h
  1054.     BX = 0000h    get current mapping context without setting
  1055.          nonzero    set new mapping context
  1056. Return: BX = mapping context in effect before call
  1057.     interrupts enabled
  1058. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  1059.     mapping contexts determine conventional-memory addressability; setting
  1060.       a mapping context ensures that the associated program and data areas
  1061.       are in memory for access.  Usable by drivers, TSRs and shared
  1062.       programs.
  1063.     caller need not be running under DESQview, but must ensure that the
  1064.       stack in use will not be mapped out by the call
  1065. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  1066. --------m-1511DE-----------------------------
  1067. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  1068.     AX = 11DEh
  1069. Return: CF clear if installed
  1070.         AX = segment at which QEXT.SYS is located
  1071. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  1072.       versions also implement the XMS standard
  1073. Note:    a private entry point (see #0299) may be found by searching the
  1074.       beginning of the returned segment for the signature string
  1075.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  1076.       prior to the signature contains the QEXT version number in BCD,
  1077.       and the word prior to that contains the offset within the QEXT
  1078.       code segment of the private entry point
  1079. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  1080.  
  1081. (Table 0299)
  1082. Call QEXT.SYS private entry point with:
  1083.     AH = 00h ???
  1084.     AH = nonzero ???
  1085. --------Q-1512--BH00-------------------------
  1086. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  1087.     AH = 12h
  1088.     BH = 00h
  1089.     BL = which handle to return
  1090.         00h handle in DWORD on top of stack
  1091.         01h current task's window handle
  1092.         02h given task's mailbox handle (task's handle on stack)
  1093.         03h current task's mailbox handle
  1094.         04h given task's keyboard handle (task's handle on stack)
  1095.         05h current task's keyboard object handle
  1096.         06h given task's OBJECTQ handle (task's handle on stack)
  1097.         07h current task's OBJECTQ handle
  1098.         08h      \
  1099.           thru > return 0000:0000 under DV < 2.26
  1100.         10h      /
  1101.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  1102.         0Dh (2.26+) task handle of owner (parent) of current task
  1103. Return: DWORD on top of stack is object handle
  1104. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  1105.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  1106.       window)
  1107. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  1108. --------Q-1512--BH01-------------------------
  1109. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  1110.     AH = 12h
  1111.     BH = 01h
  1112.     BL = object type to create
  1113.         00h (DV 2.0x only) handle is DWORD on top of stack
  1114.         01h (DV 2.0x only) use task's window handle
  1115.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  1116.         03h (DV 2.0x only) current task's mailbox
  1117.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  1118.         05h (DV 2.0x only) current task's keyboard object
  1119.         08h WINDOW class
  1120.         09h MAILBOX class
  1121.         0Ah KEYBOARD class
  1122.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  1123.         0Fh POINTER object
  1124.         10h PANEL object
  1125.     STACK: (if window object or WINDOW class)
  1126.            DWORD address to jump to (no new task if high word == 0)
  1127.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  1128.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  1129.            DWORD bytes system memory for input buffer for READ/READN
  1130.             (0 == none, -1 == default--same as logical window size)
  1131.            DWORD window size, columns
  1132.            DWORD window size, rows
  1133.            DWORD length of window title
  1134.            DWORD address of window title
  1135. Return: DWORD on top of stack is new object handle
  1136. Notes:    if a new task is created, it is started with
  1137.       AX = BX = SI = DI = BP = 0
  1138.       DX:CX = handle of parent task
  1139.       DS = ES = SS = segment of private stack (and new task's handle)
  1140.     new windows are orphans, inherit the colors/hidden status of the
  1141.       creating task's window, and are placed in the upper left hand corner
  1142.       of the screen but not automatically redrawn
  1143.     new keyboards are closed, and have all object bits cleared except for
  1144.       the hardware cursor bit
  1145. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  1146. --------Q-1512--BH02-------------------------
  1147. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  1148.     AH = 12h
  1149.     BH = 02h
  1150.     BL = object
  1151.         00h handle in DWORD on top of stack
  1152.         window: close window and free
  1153.         timer: free timer
  1154.         panel: free panel object
  1155.         pointer: free pointer
  1156.         01h task's window handle - kills task, never returns
  1157.         02h given task's mailbox (task's handle on top of stack)
  1158.         03h current task's mailbox
  1159.         04h given task's keyboard (task's handle on top of stack)
  1160.         05h current task's keyboard object
  1161. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  1162.       task windows also free any mailbox, objectq, and panel objects held
  1163.       by the task and any child tasks
  1164.     if the keyboard being freed is the default keyboard for a task, this
  1165.       call is equivalent to CLOSE
  1166.     panel and pointer objects are automatically closed if open
  1167. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  1168. --------Q-1512--BH03-------------------------
  1169. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  1170.     AH = 12h
  1171.     BH = 03h
  1172.     BL = object
  1173.         00h mailbox handle in DWORD on top of stack
  1174.         02h sender of last msg read from mailbox (task's handle on stack)
  1175.         03h sender of last msg read from current task's mailbox
  1176. Return: DWORD on stack is task handle of message sender
  1177. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  1178. --------Q-1512--BH03-------------------------
  1179. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  1180.     AH = 12h
  1181.     BH = 03h
  1182.     BL = window to be connected
  1183.         00h handle of window to be attached in DWORD on top of stack
  1184.         01h attach current task's main window
  1185.     STACK: DWORD handle of window to attach to or 00000000h to detach
  1186. Return: STACK popped
  1187. Notes:    when two windows are connected, both will move if the user moves either
  1188.     multiple windows may be attached to a single window, but each window
  1189.       may only be attached to one window at a time
  1190. SeeAlso: AH=12h/BH=83h
  1191. --------Q-1512--BX0300-----------------------
  1192. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  1193.     AH = 12h
  1194.     BX = 0300h
  1195.     STACK: DWORD handle of panel object (see #0300)
  1196. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  1197.            DWORD address of directory
  1198. Note:    a null string is returned if the object is not open
  1199. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  1200.  
  1201. Format of TopView panel file:
  1202. Offset    Size    Description    (Table 0300)
  1203.  00h  2 BYTEs    C0h C3h
  1204.  02h    BYTE    number of panels in file
  1205.  03h    for each panel in file:
  1206.         8 BYTEs  blank-padded panel name
  1207.           DWORD  panel offset in file
  1208.           WORD   panel length
  1209.     data for panels (each consists of one or more window/query/manager
  1210.       streams); first byte of each panel must be 1Bh, fifth byte must be
  1211.       E5h
  1212. --------Q-1512--BH04-------------------------
  1213. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1214.     AH = 12h
  1215.     BH = 04h
  1216.     BL = window to read from
  1217.         00h handle is DWORD on top of stack
  1218.         01h use calling task's default window
  1219.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1220.         0Dh (DV 2.26+) default window of parent task of current task
  1221. Return: STACK:    DWORD number of bytes read
  1222.         DWORD address of buffer
  1223. Notes:    reading starts at the current logical cursor position; the cursor is
  1224.       updated to point at the character following the last one read
  1225.     any translucent blanks (FFh) which are visible on screen are changed
  1226.       to the character which is seen through them
  1227.     the string produced by the read is placed in an input buffer which may
  1228.       be reused by the next READ or READN of a window
  1229.     window stream opcodes D8h and D9h determine whether the read returns
  1230.       characters or attributes
  1231. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  1232. --------Q-1512--BH04-------------------------
  1233. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1234.     AH = 12h
  1235.     BH = 04h
  1236.     BL = object
  1237.         00h handle is DWORD on top of stack
  1238.         mailbox: wait for and get next message
  1239.         keyboard: wait for and get pointer to next input buffer
  1240.         pointer: wait for and get next message
  1241.         02h get next message from mailbox (task's handle on top of stack)
  1242.         03h get next message from current task's mailbox
  1243.         04h get the next input from keyboard (handle on top of stack)
  1244.         05h get the next input from task's default keyboard
  1245.         06h wait for input from any object in OBJECTQ (handle on stack)
  1246.         07h wait for input from any object in task's default OBJECTQ
  1247. Return: STACK: (if objectq) DWORD handle of object with input
  1248.            (otherwise)  DWORD number of bytes
  1249.                 DWORD address of pointer message (see #0301)
  1250. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1251.       containing the character code as returned by the BIOS; the BIOS scan
  1252.       code is available via the STATUS call if the character is zero
  1253.     for a keyboard in field mode, the input buffer format is determined
  1254.       by the field table header for the window the keyboard is attached to
  1255.     keyboard input buffers and mailbox message buffers may be invalidated
  1256.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1257. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  1258.  
  1259. Format of DESQview pointer message:
  1260. Offset    Size    Description    (Table 0301)
  1261.  00h    WORD    row
  1262.  02h    WORD    column
  1263.  04h    BYTE    status (see #0302)
  1264.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1265.  
  1266. Bitfields for DESQview pointer status:
  1267. Bit(s)    Description    (Table 0302)
  1268.  7-2    number of clicks-1 if multiple-click mode active
  1269.  7    set when press/release mode active and button pressed
  1270.  6    set when press/release mode active and button released
  1271.  1-0    button pressed (00=none,01=button1,10=button2)
  1272. --------Q-1512--BX0400-----------------------
  1273. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1274.     AH = 12h
  1275.     BX = 0400h
  1276.     STACK: DWORD timer's handle
  1277. Return: after timer expires
  1278.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1279. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  1280. --------Q-1512--BX0400-----------------------
  1281. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1282.     AH = 12h
  1283.     BX = 0400h
  1284.     STACK: DWORD handle of panel object
  1285.            DWORD window's handle (or 0 for current task's window)
  1286.            DWORD length of panel name
  1287.            DWORD pointer to panel name
  1288. Return: STACK: DWORD handle of window which was used
  1289.            DWORD handle of keyboard or 0
  1290. Notes:    status of APPLY may be checked with STATUS message
  1291.     panel MUST have the following format
  1292.       first byte must be 1Bh (i.e. must start with a stream)
  1293.       first opcode in stream must be E5h
  1294.         single byte arg of opcode is interpreted thus:
  1295.           bits 7,6    11 means create new window
  1296.             10 means create new field table for existing window
  1297.             01 means use existing window and field table
  1298.           bit 5 if set, panel contains a field table
  1299.             (creates a new keyboard and puts it in field mode)
  1300.           bit 4 if set, panel contains input fields
  1301.           bit 3 if set, panel contains select fields but no input fields
  1302.     if the panel contains input or select fields, a keyboard handle is
  1303.       returned; either the window's current open keyboard or a
  1304.       newly-created keyboard object.  The caller should read that keyboard
  1305.       to obtain input from the panel.
  1306. SeeAlso: AH=12h/BH=84h
  1307. --------Q-1512--BH05------------------------
  1308. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1309.     AH = 12h
  1310.     BH = 05h
  1311.     BL = object
  1312.         00h handle is DWORD on top of stack
  1313.         timer: start timer to end at a specified time
  1314.         keyboard: add input buffer to queue
  1315.         pointer: move pointer icon to specified position
  1316.         02h send message by value/status=0 to mbox (task's handle on stack)
  1317.         03h send message by value/status=0 to current task's mailbox
  1318.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1319.         05h add input buffer to task's default KEYBOARD queue
  1320.         06h add an object to OBJECTQ (handle on top of stack)
  1321.         07h add an object to task's default OBJECTQ
  1322.     STACK: (if mailbox)  DWORD length
  1323.                  DWORD address
  1324.            (if keyboard) DWORD status (scan code in keystroke mode)
  1325.                  DWORD length (should be 1 in keystroke mode)
  1326.                  DWORD address
  1327.            (if objectq)  DWORD handle of object to add
  1328.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1329.                    only accurate to 1/18 sec)
  1330.            (if pointer)  DWORD column relative to origin of window
  1331.                  DWORD row relative to origin of window
  1332. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1333.     the data and status written to a keyboard object must match the format
  1334.       returned by the keyboard object in the current mode
  1335.     the pointer position is scaled according to the current scaling factors
  1336. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1337. --------Q-1512--BH05-------------------------
  1338. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1339.     AH = 12h
  1340.     BH = 05h
  1341.     BL = window to write to
  1342.         00h DWORD on top of stack is window handle
  1343.         01h write string to task's default window
  1344.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1345.         0Dh (DV 2.26+) default window of parent of current task
  1346.     STACK: DWORD object handle if handle passed on stack
  1347.            DWORD total length of string (high word == 0)
  1348.            DWORD address of string to display (see #0303)
  1349. Return: indicated actions performed
  1350.     a. non-control characters are displayed (opcodes DEh and DFh control
  1351.        whether the attributes are left or changed to the current attrib)
  1352.     b. CR/LF/BS/Tab cause the usual cursor movement
  1353.     c. ESC starts a data structure with additional commands if following
  1354.        byte is less than 20h; otherwise, it is written to the window
  1355.     STACK:    DWORD handle of new window if window stream opcode E6h
  1356.         else nothing
  1357. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1358.  
  1359. Format of stream data structure:
  1360. Offset    Size    Description    (Table 0303)
  1361.  00h    BYTE    1Bh magic value identifying start of stream
  1362.  01h    BYTE    stream type (00h, 01h, 10h, 14h-1Fh legal)
  1363.         (see #0304,#0310,#0311,#0312)
  1364.  02h    WORD    length of remainder of stream in bytes
  1365.     var-length fields follow, each an OPCODE followed by
  1366.          zero or more args
  1367.  
  1368. (Table 0304)
  1369. Values for MODE 00h (set or display values) "WINDOW STREAM" opcodes:
  1370. Opcodes:args
  1371.  00h  display 20h blanks with the default attribute
  1372.  01h-1Fh display OPCODE blanks with the default attribute
  1373.  20h  display char with default attribute 20h times
  1374.     BYTE char to repeat
  1375.  21h-3Fh display char with default attribute OPCODE-20h times
  1376.     BYTE char to repeat
  1377.  40h  display 20h blanks with specified attribute
  1378.     BYTE attribute of blanks
  1379.  41h-5Fh display OPCODE-40h blanks with specified attribute
  1380.     BYTE attribute of blanks
  1381.  60h  display next 20h characters
  1382.     20h BYTEs characters to display
  1383.  61h-7Fh display next OPCODE-60h characters
  1384.     N BYTEs characters to display
  1385.  80h-87h display N blanks with default attribute
  1386.     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1387.           [000h means 800h]
  1388.  88h-8Fh display N copies of the character
  1389.     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1390.           [000h means 800h]
  1391.     BYTE character to repeat
  1392.  90h-97h display N blanks with specified attribute
  1393.     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1394.           [000h means 800h]
  1395.     BYTE attribute
  1396.  98h-9Fh display string at logical cursor pos
  1397.     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1398.           [000h means 800h]
  1399.     N BYTEs string to display
  1400.  A0h  set logical cursor row
  1401.     BYTE row number (0 is top)
  1402.  A1h  set logical cursor column
  1403.     BYTE column number (0 is leftmost)
  1404.  A2h  set top edge of scrolling region
  1405.     BYTE row
  1406.  A3h  set left edge of scrolling region
  1407.     BYTE column
  1408.  A4h  set row of physical window position
  1409.     BYTE line
  1410.  A5h  set column of physical window position
  1411.     BYTE column
  1412.  A6h  set height of physical window
  1413.     BYTE number of rows
  1414.  A7h  set width of physical window
  1415.     BYTE number of columns
  1416.  A8h  set viewport row
  1417.     BYTE row
  1418.  A9h  set viewport column
  1419.     BYTE column
  1420.  AAh  set virtual screen height [contents of window unpredictable after]
  1421.     BYTE rows
  1422.  ABh  set virtual screen width [contents of window unpredictable after]
  1423.     BYTE columns
  1424.  ACh-AEh unused
  1425.  AFh  set compatible/preferred video modes
  1426.     BYTE compatibility/preference mask
  1427.         bit 7    compatible with monochrome
  1428.         bit 6    compatible with color text, EGA/VGA graphics
  1429.         bit 5    compatible with medium-resolution CGA graphics
  1430.         bit 4    compatible with high-resolution CGA graphics
  1431.         bit 3    prefer monochrome
  1432.         bit 2    prefer color text, EGA/VGA graphics
  1433.         bit 1    prefer medium-resolution CGA graphics
  1434.         bit 0    prefer high-resolution CGA graphics
  1435.  B0h  move logical cursor down
  1436.     BYTE number of rows (signed, negative values move up)
  1437.         [if rows=0 and hardware cursor owner, update hardware cursor]
  1438.  B1h  move logical cursor right
  1439.     BYTE number of columns (signed, negative values move left)
  1440.         [if cols=0 and hardware cursor owner, update hardware cursor]
  1441.  B2h  shift top edge of scrolling region
  1442.     BYTE number of rows (signed)
  1443.  B3h  shift left edge of scrolling region
  1444.     BYTE number of columns (signed)
  1445.  B4h  shift physical window down
  1446.     BYTE number of lines (signed)
  1447.  B5h  shift physical window right
  1448.     BYTE number of columns (signed)
  1449.  B6h  expand physical window vertically
  1450.     BYTE number of lines (signed)
  1451.  B7h  expand physical window horizontally
  1452.     BYTE number of columns (signed)
  1453.  B8h  adjust viewport row
  1454.     BYTE number of rows (signed)
  1455.  B9h  adjust viewport column
  1456.     BYTE number of columns (signed)
  1457.  BAh  adjust virtual screen height [contents of window unpredict after]
  1458.     BYTE number of rows to increase (signed)
  1459.  BBh  adjust virtual screen width [contents of window unpredictbl after]
  1460.     BYTE number of columns to increase (signed)
  1461.  BCh-BFh reserved (currently unused)
  1462.  C0h  set logical cursor position
  1463.     BYTE row number (0 is top border)
  1464.     BYTE column number (0 is left border)
  1465.  C1h  set top left corner of scrolling region
  1466.     BYTE row
  1467.     BYTE column
  1468.  C2h  set physical window pos
  1469.     BYTE upper left row (no top border if 0)
  1470.     BYTE upper left column (no left border if 0)
  1471.  C3h  set current window size
  1472.     BYTE number of rows
  1473.     BYTE number of columns
  1474.  C4h  set upper left corner of viewport (portion of virtual screen displayed
  1475.       in window)
  1476.     BYTE row
  1477.     BYTE column
  1478.  C5h  set size of virtual screen [contents unpredictable afterwards]
  1479.     BYTE number of rows
  1480.     BYTE number of columns
  1481.  C6h  unused
  1482.  C7h  unused
  1483.  C8h  set logical cursor relative to current position
  1484.     BYTE number of rows to move down (signed)
  1485.     BYTE number of columns to move right (signed)
  1486.         [if rows=cols=0 and hardware cursor owner, update hardw cursor]
  1487.  C9h  shift top left corner of scrolling region
  1488.     BYTE number of rows (signed)
  1489.     BYTE number of columns (signed)
  1490.  CAh  set window pos relative to current position
  1491.     BYTE number of rows to shift down (signed)
  1492.     BYTE number of columns to shift right (signed)
  1493.  CBh  set window size relative to current size
  1494.     BYTE number of rows to expand (signed)
  1495.     BYTE number of cols to expand (signed)
  1496.  CCh  shift viewport relative to current position
  1497.     BYTE rows to shift (signed)
  1498.     BYTE cols to shift (signed)
  1499.  CDh  resize virtual screen
  1500.     BYTE number of rows to expand (signed)
  1501.     BYTE number of columns to expand (signed)
  1502.  CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1503.  CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1504.  D0h  allow window frame to extend beyond screen
  1505.  D1h  always display a complete frame, even if window extends beyond edge of
  1506.       screen
  1507.  D2h  allow DV to change logical colors on video mode switch (default)
  1508.  D3h  application changes logical attributes
  1509.  D4h  window is visible [must redraw to actually make visible]
  1510.  D5h  window is hidden [must redraw to actually remove]
  1511.  D6h  window has frame (default)
  1512.  D7h  window unframed [must redraw to actually remove frame]
  1513.  D8h  READ/READN will read characters from window (default)
  1514.  D9h  READ/READN will read attributes from window
  1515.  DAh  use logical attributes, which may be remapped (see #0305)
  1516.  DBh  use physical attributes for characters
  1517.  DCh  enable special actions for control characters (default)
  1518.  DDh  disable special control char handling, all chars displayable by BIOS TTY
  1519.       call
  1520.  DEh  write both character and attribute (default)
  1521.  DFh  write character only, leave attribute untouched
  1522.  E0h  repeat following commands through E1h opcode
  1523.     BYTE number of times to repeat (00h means 256 times)
  1524.  E1h  end of commands to repeat, start repeating them
  1525.  E2h  set current output color
  1526.     BYTE color
  1527.  E3h  clear virtual screen from scroll origin to end using current color
  1528.  E4h  redraw window
  1529.  E5h  select menu style
  1530.     BYTE style (normally 18h)
  1531.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1532.           this stream
  1533.  E5h  (panel file only)
  1534.     BYTE modifier
  1535.         bits 7,6 = 11 panel stream creates new window
  1536.              = 10 panel defines new field table for existing window
  1537.              = 01 panel stream uses existing window & field table
  1538.         bit 5 = 1 stream contains a field table (create kyboard object)
  1539.         bit 4 = 1 stream defines input fields (create keyboard object)
  1540.         bit 3 = 1 stream defines select fields but not input fields
  1541.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1542.         bit 1 reserved
  1543.         bit 0 reserved
  1544.  E6h  create new window and perform rest of manipulations in new window
  1545.     BYTE number of rows
  1546.     BYTE number of columns
  1547.     Return: DWORD object handle of new window returned on stack at end
  1548.     Note:    the window is created with a physical size of 0x0 at the
  1549.           same position as the window to which this stream was sent
  1550.  E7h  no operation
  1551.  E8h  scroll area up (top left corner defined by opcode C1h)
  1552.     BYTE height
  1553.     BYTE width
  1554.  E9h  scroll area down (top left corner defined by opcode C1h)
  1555.     BYTE height
  1556.     BYTE width
  1557.  EAh  scroll area left (top left corner defined by opcode C1h)
  1558.     BYTE height
  1559.     BYTE width
  1560.  EBh  scroll area right (top left corner defined by opcode C1h)
  1561.     BYTE height
  1562.     BYTE width
  1563.  ECh  set logical attributes for window contents
  1564.     BYTE video modes command applies to
  1565.         bit 7    monochrome
  1566.         bit 6    color text, EGA/VGA graphics
  1567.         bit 5    medium-resolution CGA graphics
  1568.         bit 4    high-resolution CGA graphics
  1569.     BYTE which attributes to set
  1570.         bit 7    if set, copy single following byte to indicated attribs
  1571.         bits 4-6  number of first attribute to change - 1
  1572.         bits 0-3  number of consecutive attributes to change
  1573.     N BYTEs new attributes
  1574.  EDh  set logical attributes for window frame
  1575.     BYTE video modes command applies to (see opcode ECh)
  1576.     BYTE which attributes to set
  1577.         bit 7    if set, copy single following byte to indicated attrs
  1578.         bits 4-6  number of first attribute to change - 1
  1579.         bits 0-3  number of consecutive attributes to change
  1580.     N BYTEs new attributes
  1581.           attributes
  1582.                1 = top left corner
  1583.                2 = top right corner
  1584.                3 = bottom left corner
  1585.                4 = bottom right corner
  1586.                5 = top edge
  1587.                6 = bottom edge
  1588.                7 = left edge
  1589.                8 = right edge
  1590.  EEh  set characters for window frame
  1591.     BYTE video modes command applies to (see opcode ECh)
  1592.     BYTE which characters to set
  1593.         bit 7    if set, copy single following byte to indicated chars
  1594.         bits 4-6  number of first character to change - 1
  1595.         bits 0-3  number of consecutive characters to change
  1596.     N BYTEs new chars (same relative position as attributes above)
  1597.  EFh  set window name
  1598.     BYTE length of name (should be in range 0 to logical screen width)
  1599.     N BYTEs name
  1600.  F0h  clear input field to blanks
  1601.     BYTE field number
  1602.  F1h  fill input field with character
  1603.     BYTE field number
  1604.     BYTE char
  1605.  F2h  set color of input field
  1606.     BYTE field number (1-N)
  1607.     BYTE attribute
  1608.  F3h  set initial contents of input field
  1609.     BYTE field number (1-N)
  1610.     N BYTEs enough chars to exactly fill field as defined by op FFh
  1611.  F4h  position cursor to start of specific input field
  1612.     BYTE field number (1-N)
  1613.  F5h  change field table entry
  1614.     BYTE field number
  1615.     7-8 BYTEs field table entry (see opcode FFh below)
  1616.  F6h  set field type
  1617.     BYTE field number
  1618.     BYTE type
  1619.         00h inactive
  1620.         40h output field
  1621.         80h input field
  1622.         C0h deselected field
  1623.         C2h selected field
  1624.  F7h  "broadcast write"    write data to fields with program output bit set in
  1625.       the field table entry, in field number order
  1626.     N BYTEs (total length of all program output fields)
  1627.  F8h  scroll field up a line
  1628.     BYTE field number
  1629.  F9h  scroll field down a line
  1630.     BYTE field number
  1631.  FAh  scroll field left
  1632.     BYTE field number
  1633.  FBh  scroll field right
  1634.     BYTE field number
  1635.  FCh  set field table header
  1636.     6 BYTEs    field table header (see #0306)
  1637.  FDh  reset modified bit for all fields
  1638.  FEh  reset selected and modified bits for all fields
  1639.  FFh  set up input fields
  1640.     6 BYTEs    table header (see #0306)
  1641.     7/8N BYTEs the field table entries, one for each field (see #0308)
  1642.     Note:    DESQview uses and updates the actual copy of the information
  1643.           which is contained in the stream.  Thus this info must remain
  1644.           intact until after the data entry is complete.
  1645.  
  1646. (Table 0305)
  1647. Values for TopView logical attributes:
  1648.  01h    normal text
  1649.  02h    highlighted normal text
  1650.  03h    help text
  1651.  04h    highlighted help text
  1652.  05h    error message
  1653.  06h    highlighted error message
  1654.  07h    emphasized text
  1655.  08h    marked text
  1656.  9-16    reverse video versions of 1-8
  1657.  
  1658. Format of TopView field table header:
  1659. Offset    Size    Description    (Table 0306)
  1660.  00h    BYTE    number of fields (must be <= existing number of fields)
  1661.  01h    BYTE    screen behavior bits (see #0307)
  1662.  02h    BYTE    current input field (updated by DESQview)
  1663.  03h    BYTE    current select field (updated by DESQview)
  1664.  04h    BYTE    attribute for select fields when they are pointed at
  1665.  05h    BYTE    attribute for select fields which have been selected
  1666.  
  1667. Bitfields for TopView screen behavior bits:
  1668. Bit(s)    Description    (Table 0307)
  1669.  7    reserved
  1670.  6    menu items may be selected via keyboard
  1671.  5    left mouse button in "status" mode (press anywhere in window
  1672.       immediately returns control to application)
  1673.  4    right mouse button in "status" mode
  1674.  3    select fields return contents or blanks rather than 'Y' or 'N'
  1675.  2    modified bits reset on return to application
  1676.  1-0    type of data returned
  1677.     00 no data returned on read of keyboard
  1678.     01 data returned as array of characters containing all fields packed
  1679.           together, with no field numbers
  1680.     10 data returned as numbered variable-length records for all fields
  1681.     11 data returned as numbered variable-length records for the fields
  1682.           which were modified
  1683.  
  1684. Format of TopView field table entry:
  1685. Offset    Size    Description    (Table 0308)
  1686.  00h    BYTE    start row      \
  1687.  01h    BYTE    start column  \ if menu selection and start is to
  1688.  02h    BYTE    end row       / right or below end, select from kbd only
  1689.  03h    BYTE    end column   /
  1690.  04h    BYTE    field type (see #0309)
  1691.  05h    BYTE    modifier
  1692.         if type is fill-in, then bit flags to determine behavior
  1693.           bit 7     automatically enter CR when field full
  1694.           bit 6     move to next field when current field is full
  1695.           bit 5     enter text from right end (for numbers)
  1696.           bit 4     force input to uppercase
  1697.           bit 3     clear old contents on first keystroke
  1698.           bit 2     input returned when cursor moves out of
  1699.               modified field ("validate", API level 2.02+)
  1700.           bit 1     reserved
  1701.           bit 0     reserved
  1702.         if select field, first key to press to activate
  1703.           00h if have to point-&-click or is an extended-ASCII
  1704.               keystroke (only if two-key menus enabled)
  1705.  06h    BYTE    (select field only) normal color of field
  1706.  07h    BYTE    second key for select field.  This byte is present iff
  1707.           two-letter menu entries selected with opcode E5h, and in that
  1708.           case is present regardless of field type
  1709.  
  1710. Bitfields for TopView field type:
  1711. Bit(s)    Description    (Table 0309)
  1712.  7,6    field class
  1713.     00 inactive (non-entry) field
  1714.     01 echos keystrokes input to make menu selection
  1715.     10 fill-in field
  1716.     11 select field
  1717.  5    field can be filled by broadcast write (F7h opcode)
  1718.  4    reserved
  1719.  3    reserved
  1720.  2    reserved
  1721.  1    set if field selected
  1722.  0    set if field modified
  1723.  
  1724. (Table 0310)
  1725. Values for MODE 01h "QUERY STREAM" opcodes:
  1726. (valid only for those opcodes listed here)
  1727.  A0h return logical cursor row in next byte
  1728.  A1h return logical cursor column in next byte
  1729.  A2h return top row of scrolling region in next byte
  1730.  A3h return left column of scrolling region in next byte
  1731.  A4h return row of physical window origin in next byte
  1732.  A5h return column of physical window origin in next byte
  1733.  A6h return height of physcial window in next byte
  1734.  A7h return width of physical window in next byte
  1735.  A8h return row of viewport origin in next byte
  1736.  A9h return column of viewport origin in next byte
  1737.  AAh return height of virtual screen in next byte
  1738.  ABh return width of virtual screen in next byte
  1739.  AFh return current video mode in next byte
  1740.  C0h return current logical cursor position in next two bytes
  1741.  C1h return top left corner of scrolling region in next two bytes
  1742.  C2h return current window position in next two bytes
  1743.  C3h return current window size in next two bytes
  1744.  C4h return current viewport origin in next two bytes
  1745.  C5h return current virtual screen size in next two bytes
  1746.  D0h \ overwritten with D0h if frames may fall off screen edge
  1747.  D1h /               D1h if frames always displayed entirely
  1748.  D2h \ overwritten with D2h if DESQview controls color palette
  1749.  D3h /               D3h if application changes color palette
  1750.  D4h \ overwritten with D4h if window visible
  1751.  D5h /               D5h if window hidden
  1752.  D6h \ overwritten with D6h if window has frame
  1753.  D7h /               D7h if window unframed
  1754.  D8h \ overwritten with D8h if reading characters from window
  1755.  D9h /               D9h if reading attributes from window
  1756.  DAh \ overwritten with DAh if using logical attributes
  1757.  DBh /               DBh if using physical attributes
  1758.  DCh \ overwritten with DCh if TTY control char interpretation on
  1759.  DDh /               DDh if TTY control char interpretation off
  1760.  DEh \ overwritten with DEh if writing both characters and attributes
  1761.  DFh /               DFh if leaving attributes untouched
  1762.  E2h return current color in next byte
  1763.  ECh get logical attributes for window contents
  1764.     BYTE execute call if currently in specified video mode
  1765.         bit 7    monochrome
  1766.         bit 6    color text, EGA/VGA graphics
  1767.         bit 5    medium-resolution CGA graphics
  1768.         bit 4    high-resolution CGA graphics
  1769.     BYTE which attributes to get
  1770.         bit 7    unused???
  1771.         bits 4-6 first attribute to get - 1
  1772.         bits 0-3 number of consecutive attributes
  1773.     N BYTEs buffer to hold attributes
  1774.  EDh get logical attributes for window frame
  1775.     BYTE execute call if currently in video mode (see opcode ECh)
  1776.     BYTE which attributes to get
  1777.         bit 7    unused???
  1778.         bits 4-6 first attribute to get - 1
  1779.         bits 0-3 number of consecutive attributes
  1780.     N BYTEs buffer to hold attributes
  1781.  EEh get characters for window frame
  1782.     BYTE execute call if currently in video mode (see opcode ECh)
  1783.     BYTE which attributes to get
  1784.         bit 7    unused???
  1785.         bits 4-6 first char to get - 1
  1786.         bits 0-3 number of consecutive chars
  1787.     N BYTEs buffer to hold chars
  1788.  EFh return first N characters of current window name
  1789.     BYTE    max length of returned name
  1790.     N BYTEs buffer to hold window name
  1791.  F3h return contents of specified field
  1792.     BYTE field number
  1793.     N BYTEs buffer to hold field contents (size equal to field size)
  1794.  F5h get field table entry
  1795.     BYTE field number
  1796.     7-8 BYTEs buffer to hold field table entry (see #0308)
  1797.     Notes:    DV < 2.26 always returns 7 bytes
  1798.         DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field table
  1799.           is using 8-byte entries and eighth byte after    F5h is E7h
  1800.           (NOP); otherwise, 7 bytes are returned
  1801.         DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes depending
  1802.           on the field table entry size
  1803.  F6h get type of a field
  1804.     BYTE field number
  1805.     BYTE type
  1806.  FCh get field table header
  1807.     6 BYTEs buffer to store field table header (see #0306)
  1808.  
  1809. (Table 0311)
  1810. Values for MODE 10h "MANAGER STREAM" opcodes (valid only for those listed):
  1811.  00h allow window to be moved horizontally
  1812.  01h allow window to be moved vertically
  1813.  02h allow window to change width
  1814.  03h allow window to change height
  1815.  04h allow window to be scrolled horizontally
  1816.  05h allow window to be scrolled vertically
  1817.  06h allow "Close Window" menu selection for application
  1818.  07h allow "Hide Window" menu selection for application
  1819.  08h allow application to be suspended ("Rearrange/Freeze")
  1820.  0Eh allow "Scissors" menu
  1821.  10h allow DESQview main menu to be popped up
  1822.  11h allow "Switch Windows" menu
  1823.  12h allow "Open Window" menu
  1824.  13h allow "Quit" menu selection
  1825.  20h-33h opposite of 00h-13h, disallow specified action
  1826.  40h notify if horizontal position of window changes
  1827.  41h notify if vertical position of window changes
  1828.  42h notify if width of window changes
  1829.  43h notify if height of window changes
  1830.  44h notify if window scrolled horizontally
  1831.  45h notify if window scrolled vertically
  1832.  46h notify if window is closed--program has to clean up and exit itself
  1833.  47h notify if window is hidden
  1834.  48h notify if "?" on main menu selected
  1835.  49h notify if pointer message sent to window
  1836.  4Ah notify if window is placed in foreground
  1837.  4Bh notify if window is placed in background
  1838.  4Ch notify if video mode changes
  1839.  4Dh notify if "Scissors" menu "Cut" option selected
  1840.  4Eh notify if "Scissors" menu "Copy" option selected
  1841.  4Fh notify if "Scissors" menu "Paste" option selected
  1842.  50h notify if DESQview main menu about to pop up
  1843.  51h notify if DESQview main menu popped down
  1844.  60h-71h     opposite of 40h-51h: don't notify on specified event
  1845.  84h attach window to parent task's window (both move together)
  1846.  85h detach window from parent task's window (may move independently)
  1847.  86h disable background operation for application
  1848.  87h enable running in background
  1849.  88h set minimum size of physical window
  1850.     BYTE rows
  1851.     BYTE columns
  1852.  89h set maximum size of physical window
  1853.     BYTE rows
  1854.     BYTE cols
  1855.  8Ah set primary asynchronous notification routine (see #0313)
  1856.     DWORD address of routine, 0000h:0000h means none (see also below)
  1857.  8Bh set async notification parameter
  1858.     DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1859.  ACh (DV2.2+) perform regular select field attribute processing
  1860.  ADh (DV2.2+) protect attributes in selected field from being lost
  1861.  AEh make window default notify window for owning app (API level 2.00+)
  1862.  AFh set selected field marker character
  1863.     BYTE character to display at left edge of selected fields
  1864.  BCh set standard field processing mode
  1865.  BDh set alternate field processing mode (enables cursor pad for menus)
  1866.  BEh disables changing reverse logical attributes with ECh opcode
  1867.  BFh enables changing reverse logical attributes with ECh opcode
  1868.  C0h make current window topmost in system
  1869.  C1h force current process into foreground
  1870.  C2h make current window topmost in process
  1871.  C3h position mouse pointer relative to origin of current field
  1872.     BYTE rows below upper left corner of field
  1873.     BYTE columns to right of upper left corner of field
  1874.  C4h position mouse pointer relative to origin of given field
  1875.     BYTE field number
  1876.     BYTE rows below upper left corner of field
  1877.     BYTE columns to right of upper left corner of field
  1878.  C5h orphan current window (also hides it)
  1879.     Note: must be last in stream; all subsequent commands ignored
  1880.  C6h show all windows for this process
  1881.  C7h hide all windows for this process
  1882.  C8h suspend process and hide all its windows
  1883.  C9h force current process into background
  1884.  CAh make current window bottom-most in process
  1885.  CBh cancel current window manager operation, remove DV menu, give control
  1886.       to topmost application
  1887.  CCh orphan window and give it to the system for use as paste data
  1888.  CEh reorder windows
  1889.     DWORD pointer to null-terminated list of words; each word is segment
  1890.           of object handle for a window
  1891.  FFh no operation
  1892.  
  1893. (Table 0312)
  1894. Values for MODES 14h to 1Fh "USER STREAMS":
  1895.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1896.     routines, one for each mode number
  1897.       on entry to handler,
  1898.         DS:SI -> first byte of actual stream (not header)
  1899.         CX = number of bytes in stream
  1900.         ES:DI = window's handle
  1901.  
  1902. (Table 0313)
  1903. Values asynchronous notification routine defined by man.stream 8Ah called with:
  1904.     ES:DI = handle of window
  1905.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1906.        mailbox contains message indicating event
  1907.           Opcode
  1908.            40h  horizontal movement
  1909.            DWORD object handle of window
  1910.            BYTE     new row
  1911.            BYTE     new col
  1912.            41h  vertical movement
  1913.            DWORD object handle of window
  1914.            BYTE     new row
  1915.            BYTE     new col
  1916.            42h  horizontal size change
  1917.            DWORD object handle of window
  1918.            BYTE     new rows
  1919.            BYTE     new cols
  1920.            43h  vertical size change
  1921.            DWORD object handle of window
  1922.            BYTE     new rows
  1923.            BYTE     new cols
  1924.            44h  scrolled horizontally
  1925.            DWORD object handle of window
  1926.            BYTE     mouse row within window
  1927.            BYTE     mouse column within window
  1928.            BYTE     field mouse is on, 0 if none
  1929.            BYTE     amount moved: >0 right, <0 left, 0 done
  1930.            45h  scrolled vertically
  1931.            DWORD object hande of window
  1932.            BYTE     mouse row within window
  1933.            BYTE     mouse column within window
  1934.            BYTE     field mouse is on, 0 if none
  1935.            BYTE     amount moved: >0 down, <0 up, 0 done
  1936.            46h  window close request
  1937.            DWORD object handle of window
  1938.            BYTE     mouse pointer row
  1939.            BYTE     mouse pointer column
  1940.            BYTE     field mouse is on, 0 if none
  1941.            47h  application's windows hidden
  1942.            48h  Help for Program selected
  1943.            DWORD object handle of window
  1944.            BYTE     mouse pointer row
  1945.            BYTE     mouse pointer column
  1946.            BYTE     field mouse is on, 0 if none
  1947.            49h  pointer message sent to window
  1948.            DWORD pointer handle which received message
  1949.            4Ah  switched to window from another ("raise")
  1950.            4Bh  switched away from the window ("lower")
  1951.            4Ch  video mode changed
  1952.            BYTE new BIOS video mode
  1953.            4Dh  Scissors/cUt selected
  1954.            DWORD object handle of window
  1955.            BYTE     row of upper left corner
  1956.            BYTE     column of upper left corner
  1957.            BYTE     field number ul corner is in, 0=none
  1958.            DWORD handle of orphaned window created with
  1959.              copy of data from specified region
  1960.            BYTE     height of region
  1961.            BYTE     width of region
  1962.            4Eh  Scissors/Copy selected
  1963.            DWORD object handle of window
  1964.            BYTE     row of upper left corner
  1965.            BYTE     column of upper left corner
  1966.            BYTE     field number ul corner is in, 0=none
  1967.            DWORD handle of orphaned window created with
  1968.              copy of data from specified region
  1969.            BYTE     height of region
  1970.            BYTE     width of region
  1971.            4Fh  Scissors/Paste selected
  1972.            DWORD object handle of window
  1973.            BYTE     row of upper left corner
  1974.            BYTE     column of upper left corner
  1975.            BYTE     field number ul corner is in, 0=none
  1976.            DWORD handle of orphaned window with data
  1977.            BYTE     height of region
  1978.            BYTE     width of region
  1979.             Note: orphaned data window should be adopted or freed
  1980.                 when done
  1981.            50h  main menu about to pop up
  1982.            51h  main menu popped down
  1983. Return: all registers unchanged
  1984. --------Q-1512--BH06-------------------------
  1985. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1986.     AH = 12h
  1987.     BH = 06h
  1988.     BL = object
  1989.         00h object handle in DWORD on top of stack
  1990.         mailbox, keyboard, pointer, or timer
  1991.         (DV 2.50+) window
  1992.         01h (DV 2.50+) current task's window
  1993.         04h given task's keyboard (task's handle on top of stack)
  1994.         05h current task's default keyboard
  1995.     STACK: DWORD new priority of object in task's OBJECTQ
  1996.             (new priority of task if window handle)
  1997. Notes:    initially all objects have the same default value.  Should only make
  1998.       relative adjustments to this default value.
  1999.     when changing priorities, all objects already on the objectq are
  2000.       reordered
  2001.     for window handles, only the non-blocked task(s) with the highest
  2002.       priority receive CPU time under DESQview 2.50-2.52; the default
  2003.       priority is 0Ah
  2004. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  2005. --------Q-1512--BH07-------------------------
  2006. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  2007.     AH = 12h
  2008.     BH = 07h
  2009.     BL = object
  2010.         00h object handle in DWORD on top of stack
  2011.         mailbox, keyboard, pointer, or timer
  2012.         (DV 2.50+) window
  2013.         01h (DV 2.50+) current task's window
  2014.         04h given task's keyboard (task's handle on top of stack)
  2015.         05h current task's default keyboard
  2016. Return: STACK: DWORD object priority
  2017. Note:    initially all objects have the same default value.  Should only make
  2018.       relative adjustments to this default value.
  2019. SeeAlso: AH=12h/BH=06h
  2020. --------Q-1512--BH08-------------------------
  2021. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  2022.     AH = 12h
  2023.     BH = 08h
  2024.     BL = object
  2025.         00h handle in DWORD on top of stack
  2026.         window: total character positions in window
  2027.         timer: elapsed time since timer started
  2028.         pointer: number of messages queued to pointer object
  2029.         panel: number of panels in panel file
  2030.         keyboard: number of input buffers queued
  2031.         01h total chars in current task's default window
  2032.         02h number of messages in task's mailbox (task's handle on stack)
  2033.         03h number of messages in current task's mailbox
  2034.         04h number of input buffers queued in task's kbd (handle on stack)
  2035.         05h number of input buffers queued for current task's default kbd
  2036.         06h number of objects queued in OBJECTQ (task's handle on stack)
  2037.         07h number of objects queued in current task's OBJECTQ
  2038.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  2039.         0Dh (DV 2.26+) total chars in parent task's window
  2040. Return: DWORD on top of stack is result
  2041. Note:    for panel objects, a count of zero is returned if no panel file is open
  2042.       for the object
  2043. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  2044. --------Q-1512--BH09-------------------------
  2045. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  2046.     AH = 12h
  2047.     BH = 09h
  2048.     BL = object
  2049.         00h handle in DWORD on top of stack
  2050.         window: get chars/line
  2051.         timer: get 1/100 seconds remaining before timer expires
  2052.         mailbox: (DV/X) get number of bytes queued to mailbox
  2053.         01h get number of chars/line in current task's default window
  2054.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  2055.         0Dh (DV 2.26+) get chars/line in parent task's window
  2056. Return: DWORD on top of stack is length
  2057. SeeAlso: AH=12h/BH=08h
  2058. --------Q-1512--BH0A-------------------------
  2059. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  2060.     AH = 12h
  2061.     BH = 0Ah
  2062.     BL = window to write to
  2063.         00h window handle is DWORD on top of stack
  2064.         01h current task's default window
  2065.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2066.         0Dh (DV 2.26+) default window of parent of current task
  2067.     STACK:    DWORD count of attributes
  2068.         DWORD address of attribute string
  2069.         DWORD count of characters
  2070.         DWORD address of character string
  2071. Notes:    if one string is longer than the other, the shorter one will be reused
  2072.       until the longer one is exhausted
  2073.     the cursor is left just after the last character written
  2074. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  2075. --------Q-1512--BH0A-------------------------
  2076. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  2077.     AH = 12h
  2078.     BH = 0Ah
  2079.     BL = mailbox to write to
  2080.         00h handle is DWORD on top of stack
  2081.         02h default mailbox of task whose handle is on top of stack
  2082.         03h current task's default mailbox
  2083.     STACK:    DWORD    status (low byte)
  2084.         DWORD    length of message
  2085.         DWORD    address of message
  2086. Notes:    the message is copied into either system or common memory
  2087.     insufficient memory normally causes the process to be aborted; under
  2088.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  2089. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  2090. --------Q-1512--BH0A-------------------------
  2091. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  2092.     AH = 12h
  2093.     BH = 0Ah
  2094.     BL = object
  2095.         00h handle is DWORD on top of stack
  2096.         timer: start timer for specified interval
  2097.         pointer: set control flags (see #0315)
  2098.         keyboard: set control flags (see #0314)
  2099.         04h set control flags on KEYBOARD object (handle on top of stack)
  2100.         05h set control flags on task's default KEYBOARD object
  2101.     STACK: (if timer)   DWORD duration in 1/100 seconds
  2102.            (otherwise)  DWORD bits to set
  2103. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  2104.  
  2105. Bitfields for DESQview keyboard object bits:
  2106. Bit(s)    Description    (Table 0314)
  2107.  15    reserved, can't be set
  2108.  14    unused
  2109.  13    reserved, can't be set
  2110.  12-6    unused
  2111.  5    (DV 2.2+) exclusive input
  2112.  4    filter all keys (used with handler established by SETESC)
  2113.     if 0, only keys that would normally be displayed are filtered
  2114.  3    program continues executing while input in progress
  2115.  2    insert mode active for field mode
  2116.  1    hardware cursor displayed when task is hardware cursor owner
  2117.     must be set if keyboard in field mode and field table includes input
  2118.       fields
  2119.  0    keyboard is in field mode rather than keystroke mode
  2120.  
  2121. Bitfields for DESQview pointer object bits:
  2122. Bit(s)    Description    (Table 0315)
  2123.  15    reserved, can't be set
  2124.  14-8    unused
  2125.  7    mouse pointer is hidden while in window
  2126.  6    get messages even if window not topmost
  2127.  5    get messages even if window not foreground
  2128.  4    multiple clicks separated by less than 1/3 second are counted and
  2129.       returned in a single message
  2130.  3    pointer position is relative to screen origin, not window origin
  2131.  2    send message on button release as well as button press
  2132.  1    (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever the
  2133.       pointer leaves the window
  2134.  0    send message only on button activity, not movement
  2135.     DV-specific, and INT 15/AX=DE0Fh must have been called first
  2136. --------Q-1512--BH0B-------------------------
  2137. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  2138.     AH = 12h
  2139.     BH = 0Bh
  2140.     BL = window to write attributes to
  2141.         00h handle is DWORD on top of stack
  2142.         01h current task's default window
  2143.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2144.         0Dh (DV 2.26+) default window of parent of current task
  2145.     STACK:    DWORD number of attributes to write
  2146.         DWORD address of attributes
  2147. Note:    the attributes are written starting at the current cursor position; the
  2148.       cursor is left just after the last position written
  2149. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  2150. --------Q-1512--BH0B-------------------------
  2151. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  2152.     AH = 12h
  2153.     BH = 0Bh
  2154.     BL = mailbox to write to
  2155.         00h handle is DWORD on top of stack
  2156.         02h default mailbox of task whose handle is on top of stack
  2157.         03h current task's default mailbox
  2158.     STACK:    DWORD    status (low byte)
  2159.         DWORD    length of message
  2160.         DWORD    address of message
  2161. Notes:    only a pointer to the message is stored, but the write may still fail
  2162.       due to insufficient memory
  2163.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  2164. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  2165. --------Q-1512--BH0B-------------------------
  2166. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  2167.     AH = 12h
  2168.     BH = 0Bh
  2169.     BL = OBJECTQ from which to remove all copies of a particular object
  2170.         06h OBJECTQ of task whose handle is on top of stack
  2171.         07h task's default OBJECTQ
  2172.     STACK:    DWORD    handle of object to remove
  2173. Note:    should be sent whenever an object is erased or closed
  2174. --------Q-1512--BH0B-------------------------
  2175. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  2176.     AH = 12h
  2177.     BH = 0Bh
  2178.     BL = object
  2179.         00h handle is DWORD on top of stack
  2180.         pointer: reset control flags
  2181.         keyboard: reset control flags
  2182.         04h clear control flags on KEYBOARD object (handle on top of stack)
  2183.         05h clear control flags on task's default KEYBOARD object
  2184.     STACK:    DWORD    which bits to clear (see #0314,#0315)
  2185. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  2186. --------Q-1512--BH0C-------------------------
  2187. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  2188.     AH = 12h
  2189.     BH = 0Ch
  2190.     BL = object
  2191.         00h handle is DWORD on top of stack
  2192.         window:      fill with given character from scroll origin to end
  2193.         keyboard: attach to a window
  2194.         timer:      open
  2195.         pointer:  start taking input for window
  2196.         panel:      associate with a panel file
  2197.         01h fill task's default window with given char from scrl org to end
  2198.         02h open given task's mailbox for input (task's handle on stack)
  2199.         03h open current task's mailbox
  2200.         04h attach a KEYBOARD to a window (handle on top of stack)
  2201.         05h attach task's default KEYBOARD to a window
  2202.         06h open a task's OBJECTQ (task's handle on top of stack)
  2203.         07h open current task's OBJECTQ
  2204.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  2205.         0Dh (DV 2.26+) fill default window of parent of current task
  2206.      STACK: (if window)   DWORD character to fill with
  2207.         (if keyboard) DWORD handle of window to attach to
  2208.         (if pointer)  DWORD handle of window to attach to
  2209.         (if panel)    DWORD length of filename or resident panel
  2210.                   DWORD address of filename or resident panel
  2211.         (otherwise)   nothing
  2212. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  2213.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  2214.       the panel file
  2215.     result code of open may be retrieved with STATUS message
  2216.     logical cursor is left at scroll origin after filling window
  2217.     the task opening a mailbox becomes its owner, and the only task allowed
  2218.       to read the mailbox
  2219.     messages are only sent to a pointer object when the mouse is positioned
  2220.       in the window to which the pointer has been attached
  2221.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  2222.       messages automatically open the timer
  2223. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  2224. --------Q-1512--BH0D-------------------------
  2225. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  2226.     AH = 12h
  2227.     BH = 0Dh
  2228.     BL = object
  2229.         00h handle is DWORD on top of stack
  2230.         timer:      close
  2231.         keyboard: detach from window and discard queued input
  2232.         pointer:  stop taking input
  2233.         panel:      close
  2234.         mailbox:  close, unlock, and discard any pending messages
  2235.         02h close given task's mailbox (task's handle on top of stack)
  2236.         03h close task's default mailbox
  2237.         04h close KEYBOARD object (handle on top of stack)
  2238.         05h close task's default KEYBOARD
  2239.         06h close given task's OBJECTQ (task's handle on top of stack)
  2240.         07h close current task's OBJECTQ
  2241. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2242.       ERASE message (AH=12h/BH=0Eh)
  2243.     when a panel object is closed, the panel file and any panels currently
  2244.       in use are freed; window and keyboard objects created by APPLY are
  2245.       not affected, but field mode input ceases
  2246.     open but idle timer objects consume a small amount of CPU time
  2247. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2248. --------Q-1512--BH0E-------------------------
  2249. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2250.     AH = 12h
  2251.     BH = 0Eh
  2252.     BL = object
  2253.         00h handle is DWORD on top of stack
  2254.         window:      clear from scroll origin to end of window
  2255.         keyboard: discard input
  2256.         timer:      cancel current interval
  2257.         pointer:  discard all pending messages
  2258.         mailbox:  discard all pending messages
  2259.         01h clear task's default window from scroll origin to end
  2260.         02h discard all queued messages in mailbox (handle on top of stack)
  2261.         03h discard all queued messages in current task's default mailbox
  2262.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2263.         05h discard all input queued to task's default KEYBOARD
  2264.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2265.         07h remove all objects from current task's OBJECTQ
  2266.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2267.         0Dh (DV 2.26+) clear default window of parent of current task
  2268. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2269. SeeAlso: AH=12h/BH=02h
  2270. --------Q-1512--BH0F-------------------------
  2271. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2272.     AH = 12h
  2273.     BH = 0Fh
  2274.     BL = object
  2275.         00h handle is DWORD on top of stack
  2276.         timer:     is it running?
  2277.         pointer: return status of last message
  2278.         panel:     verify success of last OPEN or APPLY
  2279.         02h return status of last msg READ from mailbox (handle on stack)
  2280.         03h return status of last msg READ from task's default mailbox
  2281.         04h get stat of last msg from task's KEYBOARD (task handle on stk)
  2282.         05h get status of last msg from task's default KEYBOARD
  2283.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2284.         07h return whether task's default OBJECTQ is open or not
  2285. Return: DWORD on top of stack is status
  2286. Notes:    if object is a panel object, the status indicates the error code:
  2287.       00h successful
  2288.       14h panel name not in panel directory
  2289.       15h not enough memory to apply panel
  2290.       16h invalid panel format
  2291.       17h panel file already open
  2292.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2293.       95h not enough memory to open panel file     > that the panel was
  2294.       98h null panel file name            /  not opened
  2295.     if object is a timer, the status is:
  2296.       00000000h open but not running
  2297.       40000000h open and running
  2298.       80000000h closed
  2299.     if object is an OBJECTQ, the status is:
  2300.       00000000h open
  2301.       80000000h closed
  2302.     if object is a keyboard in keystroke mode, the status is the extended
  2303.       character code (scan code) of the last keystroke
  2304.     if object is a keyboard in field mode, the status indicates the reason
  2305.       for the last return from the field manager
  2306.       00h Enter key pressed
  2307.       01h Button 1 or keystroke selection
  2308.       02h Button 2
  2309.       03h validation
  2310.       04h auto Enter on field
  2311.       1Bh Escape pressed
  2312.       46h ^Break pressed
  2313.       other: extended code for key terminating input
  2314.     the status of mailbox messages sent by the window manager is always 80h
  2315.     the status of a pointer message is the same as the status field in the
  2316.       message
  2317. SeeAlso: AH=12h/BH=04h"READ"
  2318. --------Q-1512--BH10-------------------------
  2319. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2320.     AH = 12h
  2321.     BH = 10h
  2322.     BL = object
  2323.         00h handle is DWORD on top of stack
  2324.         window: return TRUE if logical cursor past end of window
  2325.         mailbox: ???
  2326.         01h returns TRUE if logical cursor past end of task's def window
  2327.         02h return ??? for task's mailbox (task's handle on top of stack)
  2328.         03h return ??? for current task's mailbox
  2329.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2330.         0Dh (DV 2.26+) check log cursor of window of parent task
  2331. Return: DWORD on top of stack is status
  2332. --------Q-1512--BH11-------------------------
  2333. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2334.     AH = 12h
  2335.     BH = 11h
  2336.     BL = window for which to move cursor
  2337.         00h window's handle is DWORD on top of stack
  2338.         01h task's default window
  2339.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2340.         0Dh (DV 2.26+) default window of parent of current task
  2341.     STACK: DWORD column
  2342.            DWORD row
  2343. --------Q-1512--BH11-------------------------
  2344. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2345.     AH = 12h
  2346.     BH = 11h
  2347.     BL = mailbox to name
  2348.         00h DWORD on top of stack is mailbox handle
  2349.         02h use given task's mailbox (task's handle on top of stack)
  2350.         03h use current task's default mailbox
  2351.     STACK: DWORD length of name
  2352.            DWORD address of name
  2353. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  2354. --------Q-1512--BX1100-----------------------
  2355. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2356.     AH = 12h
  2357.     BX = 1100h
  2358.     STACK: DWORD object handle for pointer object
  2359.            DWORD number of colums to scale pointer position to
  2360.            DWORD number of rows to scale pointer position to
  2361. SeeAlso: AH=12h/BX=1200h
  2362. --------Q-1512--BH12-------------------------
  2363. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2364.     AH = 12h
  2365.     BH = 12h
  2366.     BL = window to read from
  2367.         00h handle is DWORD on top of stack
  2368.         01h read next N chars or attributes on task's default window
  2369.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2370.         0Dh (DV 2.26+) read default window of parent of current task
  2371.     STACK: DWORD count
  2372. Return: STACK: DWORD number of bytes actually read
  2373.            DWORD address of buffer containing data
  2374. Notes:    reading starts at the current logical cursor position; the cursor is
  2375.       updated to point at the character following the last one read
  2376.     any translucent blanks (FFh) which are visible on screen are changed
  2377.       to the character which is seen through them
  2378.     the string produced by the read is placed in an input buffer which may
  2379.       be reused by the next READ or READN of a window
  2380.     window stream opcodes D8h and D9h determine whether the read returns
  2381.       characters or attributes
  2382. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2383. --------Q-1512--BH12-------------------------
  2384. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  2385.     AH = 12h
  2386.     BH = 12h
  2387.     BL = mailbox for which to retrieve name
  2388.         00h DWORD on top of stack is mailbox handle
  2389.         02h use given task's mailbox (task's handle on top of stack)
  2390.         03h use current task's default mailbox
  2391.     STACK: DWORD length of buffer for name
  2392.            DWORD pointer to buffer
  2393. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  2394. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2395. Note:    the returned name is not NUL-terminated
  2396. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  2397. --------Q-1512--BX1200-----------------------
  2398. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2399.     AH = 12h
  2400.     BX = 1200h
  2401.     STACK: DWORD object handle for pointer
  2402. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2403.            DWORD pointer pos scaled as if window were this many rows high
  2404. SeeAlso: AH=12h/BX=1100h
  2405. --------Q-1512--BH13-------------------------
  2406. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2407.     AH = 12h
  2408.     BH = 13h
  2409.     BL = window object
  2410.         00h DWORD on top of stack is handle for window to redraw
  2411.         01h redraw task's default window
  2412.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2413.         0Dh (DV 2.26+) redraw default window of parent of current task
  2414. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2415. --------Q-1512--BH13-------------------------
  2416. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  2417.     AH = 12h
  2418.     BH = 13h
  2419.     BL = mailbox from which to read
  2420.         00h DWORD on top of stack is mailbox handle
  2421.         02h use given task's mailbox (task's handle on top of stack)
  2422.         03h use current task's default mailbox
  2423.     STACK: DWORD size of buffer in bytes
  2424.            DWORD pointer to buffer
  2425. Return: STACK: DWORD number of bytes read
  2426. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2427. Notes:    this call blocks if no input is available, but will return less than
  2428.       the requested number of bytes if some (but insufficient) data is
  2429.       available
  2430.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  2431.       4 or 5 set, as common memory may be exhausted by that call when
  2432.       attempting to read the next message
  2433. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  2434. --------Q-1512--BX1300-----------------------
  2435. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2436.     AH = 12h
  2437.     BX = 1300h
  2438.     STACK: DWORD object handle for pointer
  2439.            DWORD character to use for pointer
  2440. Return: STACK popped
  2441. --------Q-1512--BH14-------------------------
  2442. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2443.     AH = 12h
  2444.     BH = 14h
  2445.     BL = message modifier
  2446.         00h handle is DWORD on top of stack
  2447.         01h define user stream
  2448.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  2449.         05h intercept keystrokes from task's default KEYBOARD to a window
  2450.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2451.                  DWORD address of FAR user stream handler
  2452.            (if keyboard) DWORD address of FAR filter function (see #0316)
  2453. Return: STACK popped
  2454.  
  2455. (Table 0316)
  2456. Values keyboard filter function is called with when keyboard is in field mode:
  2457.     AL = character
  2458.     AH = 00h or extended ASCII code if AL = 00h
  2459.     BL = field number
  2460.     CH = cursor column
  2461.     CL = cursor row
  2462.     DL = field type modifier (sixth item in field table entry)
  2463.     DH = seventh item in field table entry
  2464.     ES:SI = window's handle
  2465.     DS:DI -> field table entry for field containing the cursor
  2466. Return:    AH = action to take
  2467.         00h use keystroke
  2468.         01h ignore keystroke
  2469.         FFh beep and ignore keystroke
  2470. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2471. --------Q-1512--BH14-------------------------
  2472. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2473.     AH = 12h
  2474.     BH = 14h
  2475.     BL = object
  2476.         00h mailbox handle is DWORD on top of stack
  2477.         02h use given task's mailbox (task's handle on top of stack)
  2478.         03h use current task's default mailbox
  2479. Return: STACK popped if BL=00h
  2480. Note:    release exclusive access by sending CLOSE message to mailbox
  2481.     access may be requested multiple times, and requires multiple CLOSEs
  2482. SeeAlso: AH=12h/BH=0Dh
  2483. --------Q-1512--BH15-------------------------
  2484. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2485.     AH = 12h
  2486.     BH = 15h
  2487.     BL = object
  2488.         00h DWORD on top of stack
  2489.         mailbox, keyboard, or pointer only
  2490.         02h mailbox for task whose handle is on top of stack
  2491.         03h mailbox for current task
  2492.         04h keyboard for task whose handle is on top of stack
  2493.         05h keyboard for current task
  2494.     STACK: DWORD flags (see #0317,#0318)
  2495. Return: STACK popped
  2496. Notes:    only available if the API level has been set to at least 2.20
  2497.     equivalent to performing SUBFROM and ADDTO calls on the object
  2498.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2499.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  2500. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2501.  
  2502. Bitfields for DESQview mailbox object flags:
  2503. Bit(s)    Description    (Table 0317)
  2504.  0    all mail messages in common memory
  2505.  1    allow write even if closed
  2506.  2    don't erase messages when mailbox closed
  2507.  4    (DV/X) append messages with like status and sender (stream-oriented 
  2508.       mail)
  2509.  5    (DV/X) store mail in expanded memory (pool grows as needed)
  2510.  6    (DV/X) make mailbox into non-owned mailbox
  2511.  
  2512. Bitfields for DESQview keyboard object flags:
  2513. Bit(s)    Description    (Table 0318)
  2514.  5    exclusive input when keyboard in use for input
  2515. --------Q-1512--BH16-------------------------
  2516. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2517.     AH = 12h
  2518.     BH = 16h
  2519.     BL = object
  2520.         00h DWORD on top of stack
  2521.         mailbox, keyboard, or pointer only
  2522.         02h mailbox for task whose handle is on top of stack
  2523.         03h mailbox for current task
  2524.         04h keyboard for task whose handle is on top of stack
  2525.         05h keyboard for current task
  2526. Return: STACK: DWORD current control flags (see #0317,#0318)
  2527. Notes:    only available if the API level has been set to at least 2.20
  2528.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2529.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2530. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  2531. --------Q-1512--BH17-------------------------
  2532. INT 15 - DESQview v2.42-2.52 - BUG
  2533.     AH = 12h
  2534.     BH = 17h
  2535.     BL = object
  2536.         00h DWORD on top of stack
  2537.         mailbox, keyboard, or pointer only
  2538.         02h mailbox for task whose handle is on top of stack
  2539.         03h mailbox for current task
  2540.         04h keyboard for task whose handle is on top of stack
  2541.         05h keyboard for current task
  2542. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  2543.       keyboards, and pointers, but causes a random branch
  2544.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  2545. --------Q-1512--BH80-------------------------
  2546. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  2547.     AH = 12h
  2548.     BH = 80h
  2549. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  2550.       not pop up a "Programming Error" window, instead returning an error
  2551.       code in AL (see #0319)
  2552. SeeAlso: AH=12h/BH=00h
  2553.  
  2554. (Table 0319)
  2555. Values for DESQview error code:
  2556.  00h    no error
  2557.  01h    invalid values
  2558.  02h    alias invalid
  2559.  03h    handle valid but wrong type
  2560.  04h    invalid handle
  2561. --------Q-1512--BH81-------------------------
  2562. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  2563.     AH = 12h
  2564.     BH = 81h
  2565. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  2566.       not pop up a "Programming Error" window, instead returning an error
  2567.       code in AL (see #0319)
  2568. SeeAlso: AH=12h/BH=01h
  2569. --------Q-1512--BH82-------------------------
  2570. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  2571.     AH = 12h
  2572.     BH = 82h
  2573. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  2574.       not pop up a "Programming Error" window, instead returning an error
  2575.       code in AL (see #0319)
  2576. SeeAlso: AH=12h/BH=02h
  2577. --------Q-1512--BH83-------------------------
  2578. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  2579.     AH = 12h
  2580.     BH = 83h
  2581. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  2582.       not pop up a "Programming Error" window, instead returning an error
  2583.       code in AL (see #0319)
  2584. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  2585. --------Q-1512--BH84-------------------------
  2586. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  2587.     AH = 12h
  2588.     BH = 84h
  2589. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  2590.       not pop up a "Programming Error" window, instead returning an error
  2591.       code in AL (see #0319)
  2592. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  2593. --------Q-1512--BH85-------------------------
  2594. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  2595.     AH = 12h
  2596.     BH = 85h
  2597. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  2598.       not pop up a "Programming Error" window, instead returning an error
  2599.       code in AL (see #0319)
  2600. SeeAlso: AH=12h/BH=05h
  2601. --------Q-1512--BH86-------------------------
  2602. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  2603.     AH = 12h
  2604.     BH = 86h
  2605. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  2606.       not pop up a "Programming Error" window, instead returning an error
  2607.       code in AL (see #0319)
  2608. SeeAlso: AH=12h/BH=06h
  2609. --------Q-1512--BH87-------------------------
  2610. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  2611.     AH = 12h
  2612.     BH = 87h
  2613. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  2614.       not pop up a "Programming Error" window, instead returning an error
  2615.       code in AL (see #0319)
  2616. SeeAlso: AH=12h/BH=07h
  2617. --------Q-1512--BH88-------------------------
  2618. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  2619.     AH = 12h
  2620.     BH = 88h
  2621. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  2622.       not pop up a "Programming Error" window, instead returning an error
  2623.       code in AL (see #0319)
  2624. SeeAlso: AH=12h/BH=08h
  2625. --------Q-1512--BH89-------------------------
  2626. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  2627.     AH = 12h
  2628.     BH = 89h
  2629. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  2630.       not pop up a "Programming Error" window, instead returning an error
  2631.       code in AL (see #0319)
  2632. SeeAlso: AH=12h/BH=09h
  2633. --------Q-1512--BH8A-------------------------
  2634. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  2635.     AH = 12h
  2636.     BH = 8Ah
  2637. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  2638.       not pop up a "Programming Error" window, instead returning an error
  2639.       code in AL (see #0319)
  2640. SeeAlso: AH=12h/BH=0Ah
  2641. --------Q-1512--BH8B-------------------------
  2642. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  2643.     AH = 12h
  2644.     BH = 8Bh
  2645. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  2646.       not pop up a "Programming Error" window, instead returning an error
  2647.       code in AL (see #0319)
  2648. SeeAlso: AH=12h/BH=0Bh
  2649. --------Q-1512--BH8C-------------------------
  2650. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  2651.     AH = 12h
  2652.     BH = 8Ch
  2653. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  2654.       not pop up a "Programming Error" window, instead returning an error
  2655.       code in AL (see #0319)
  2656. SeeAlso: AH=12h/BH=0Ch
  2657. --------Q-1512--BH8D-------------------------
  2658. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  2659.     AH = 12h
  2660.     BH = 8Dh
  2661. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  2662.       not pop up a "Programming Error" window, instead returning an error
  2663.       code in AL (see #0319)
  2664. SeeAlso: AH=12h/BH=0Dh
  2665. --------Q-1512--BH8E-------------------------
  2666. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  2667.     AH = 12h
  2668.     BH = 8Eh
  2669. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  2670.       not pop up a "Programming Error" window, instead returning an error
  2671.       code in AL (see #0319)
  2672. SeeAlso: AH=12h/BH=0Eh
  2673. --------Q-1512--BH8F-------------------------
  2674. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  2675.     AH = 12h
  2676.     BH = 8Fh
  2677. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  2678.       not pop up a "Programming Error" window, instead returning an error
  2679.       code in AL (see #0319)
  2680. SeeAlso: AH=12h/BH=0Fh
  2681. --------Q-1512--BH90-------------------------
  2682. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  2683.     AH = 12h
  2684.     BH = 90h
  2685. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  2686.       not pop up a "Programming Error" window, instead returning an error
  2687.       code in AL (see #0319)
  2688. SeeAlso: AH=12h/BH=10h
  2689. --------Q-1512--BH91-------------------------
  2690. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  2691.     AH = 12h
  2692.     BH = 91h
  2693. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  2694.       not pop up a "Programming Error" window, instead returning an error
  2695.       code in AL (see #0319)
  2696. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  2697. --------Q-1512--BH92-------------------------
  2698. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  2699.     AH = 12h
  2700.     BH = 92h
  2701. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  2702.       not pop up a "Programming Error" window, instead returning an error
  2703.       code in AL (see #0319)
  2704. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  2705. --------Q-1512--BH93-------------------------
  2706. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  2707.     AH = 12h
  2708.     BH = 93h
  2709. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  2710.       not pop up a "Programming Error" window, instead returning an error
  2711.       code in AL (see #0319)
  2712. SeeAlso: AH=12h/BH=13h
  2713. --------Q-1512--BH94-------------------------
  2714. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  2715.     AH = 12h
  2716.     BH = 94h
  2717. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  2718.       not pop up a "Programming Error" window, instead returning an error
  2719.       code in AL (see #0319)
  2720. SeeAlso: AH=12h/BH=14h
  2721. --------Q-1512--BH95-------------------------
  2722. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  2723.     AH = 12h
  2724.     BH = 95h
  2725. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  2726.       not pop up a "Programming Error" window, instead returning an error
  2727.       code in AL (see #0319)
  2728. SeeAlso: AH=12h/BH=15h
  2729. --------Q-1512--BH96-------------------------
  2730. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  2731.     AH = 12h
  2732.     BH = 96h
  2733. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  2734.       not pop up a "Programming Error" window, instead returning an error
  2735.       code in AL (see #0319)
  2736. SeeAlso: AH=12h/BH=16h
  2737. --------E-15BF00-----------------------------
  2738. INT 15 - Rational Systems DOS/16M - ???
  2739.     AX = BF00h
  2740.     ???
  2741. Return: ???
  2742. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  2743. SeeAlso: AX=BF02h
  2744. --------E-15BF01-----------------------------
  2745. INT 15 - Rational Systems DOS/16M - ???
  2746.     AX = BF01h
  2747.     ???
  2748. Return: ???
  2749. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  2750.     called by DOS/4GW
  2751. SeeAlso: AX=BF00h,AX=BF02h
  2752. --------E-15BF02DX0000-----------------------
  2753. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  2754.     AX = BF02h
  2755.     DX = 0000h
  2756. Return: DX = nonzero if installed
  2757.         DX:SI -> XBRK structure (see #0352)
  2758. Note:    this function is also supported by DOS/4G
  2759. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  2760. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  2761.  
  2762. Format of DOS/16M XBRK structure:
  2763. Offset    Size    Description    (Table 0352)
  2764.  00h    DWORD    linear address of first available byte
  2765.  04h    DWORD    linear address of last available byte + 1 ???
  2766.  08h    DWORD    real-mode address of XBRK structure???
  2767.  0Ch    DWORD    ???
  2768.  10h  2 BYTEs    ???
  2769.  12h    WORD    segment of ???
  2770.  14h  8 BYTEs    ???
  2771.  1Ch 512 BYTEs    protected-mode IDT
  2772. 21Ch  N BYTEs    protected-mode GDT
  2773. --------E-15BFDEBX0000-----------------------
  2774. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  2775.     AX = BFDEh
  2776.     BX = 0000h
  2777. Return: AX = ??? (0003h)
  2778.     BX = FFFFh
  2779. SeeAlso: AX=BF02h
  2780. --------E-15BFDEBX0001-----------------------
  2781. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  2782.     AX = BFDEh
  2783.     BX = 0001h
  2784. Return: BX = 0000h (success)
  2785.     CX:DX -> name of process manager executable
  2786. SeeAlso: AX=BFDEh/BX=0000h
  2787. --------E-15BFDEBX0002-----------------------
  2788. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  2789.     AX = BFDEh
  2790.     BX = 0002h
  2791.     CX:DX -> ???
  2792. Return: BX = 0000h (success)
  2793. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  2794. --------E-15BFDEBX0003-----------------------
  2795. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2796.     AX = BFDEh
  2797.     BX = 0003h
  2798. Return: BX = 0000h (success)
  2799.     CX:DX -> ???
  2800. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  2801. --------E-15BFDEBX0004-----------------------
  2802. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2803.     AX = BFDEh
  2804.     BX = 0004h
  2805.     CL = ???
  2806. Return: BX = 0000h (success)
  2807.     CX:DX -> XBRK structure (see #0352)
  2808. SeeAlso: AX=BFDEh/BX=0000h
  2809. --------E-15BFDEBX0005-----------------------
  2810. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2811.     AX = BFDEh
  2812.     BX = 0005h
  2813.     CX = new value for ???
  2814. Return: BX = 0000h (success)
  2815.     AX = old value of ???
  2816.     DS:SI -> ??? (if AX nonzero on return)
  2817.     ES:DI -> ??? (if AX zero on return)
  2818. Note:    called by DOS4GW.EXE
  2819. SeeAlso: AX=BFDEh/BX=0000h
  2820. --------E-15BFDEBX0006-----------------------
  2821. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2822.     AX = BFDEh
  2823.     BX = 0006h
  2824. Return: BX = 0000h (success)
  2825.     AH = interrupt number??? (BEh)
  2826.     CX:DX = ???
  2827. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  2828. --------E-15BFDEBX0007-----------------------
  2829. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  2830.     AX = BFDEh
  2831.     BX = 0007h
  2832.     CX:DX = ???
  2833. Return: BX = 0000h (success)
  2834. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  2835. --------E-15BFDEBX0008-----------------------
  2836. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2837.     AX = BFDEh
  2838.     BX = 0008h
  2839.     CX = segment of ???
  2840.     DS = ???
  2841. Return: BX = status
  2842.         0000h successful
  2843.         AL = ??? (80h or C0h)
  2844.         DX = ??? (0603h) if AL=C0h
  2845.         0001h failed
  2846.         AX = 0000h
  2847. Note:    called by DOS4GW.EXE
  2848. SeeAlso: AX=BFDEh/BX=0000h
  2849. --------E-15BFDEBX0009-----------------------
  2850. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  2851.     AX = BFDEh
  2852.     BX = 0009h
  2853. Return: BX = 0000h (success)
  2854.     CX:DX -> full pathname to LOAD32.EXP
  2855. SeeAlso: AX=BFDEh/BX=0000h
  2856. --------E-15BFDEBX000A-----------------------
  2857. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  2858.     AX = BFDEh
  2859.     BX = 000Ah
  2860. Return: BX = 0000h (success)
  2861.     AX = new value of ??? counter
  2862. Notes:    also resets a variety of values if the counter goes negative
  2863.     called by DOS4GW.EXE
  2864. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  2865. --------E-15BFDEBX000B-----------------------
  2866. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  2867.     AX = BFDEh
  2868.     BX = 000Bh
  2869. Return: AX = new value of ??? counter
  2870. Note:    called by DOS4GW.EXE
  2871. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  2872. --------E-15BFDEBX000C-----------------------
  2873. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2874.     AX = BFDEh
  2875.     BX = 000Ch
  2876.     CL = ???
  2877.         00h
  2878.         nonzero
  2879. Return: ???
  2880. SeeAlso: AX=BFDEh/BX=0000h
  2881. --------E-15BFDEBX000D-----------------------
  2882. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2883.     AX = BFDEh
  2884.     BX = 000Dh
  2885.     ???
  2886. Return: ???
  2887. SeeAlso: AX=BFDEh/BX=0000h
  2888. --------E-15BFDEBX000E-----------------------
  2889. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2890.     AX = BFDEh
  2891.     BX = 000Eh
  2892.     DX:CX -> ???
  2893. Return: AX = segment of handle for calling task
  2894.     BX = ??? (probably destroyed)
  2895.     DX:CX -> ???
  2896. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  2897. --------E-15BFDEBX000F-----------------------
  2898. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  2899.     AX = BFDEh
  2900.     BX = 000Fh
  2901. Return: AX = segment of handle for calling task
  2902.     BX = ??? (probably destroyed)
  2903.     DX:CX -> ???
  2904. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  2905. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  2906. --------E-15BFDEBX0010-----------------------
  2907. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  2908.     AX = BFDEh
  2909.     BX = 0010h
  2910. Return: AX = segment of caller's task handle
  2911.     BX destroyed
  2912. SeeAlso: AX=BFDEh/BX=000Fh
  2913. --------E-15BFDEBX0011-----------------------
  2914. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2915.     AX = BFDEh
  2916.     BX = 0011h
  2917. Return: CX = code segment of DVDOS4GX.DVR
  2918.     BX = ??? (0004h)
  2919. SeeAlso: AX=BFDEh/BX=0000h
  2920. --------E-15BFDEBX0012-----------------------
  2921. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2922.     AX = BFDEh
  2923.     BX = 0012h
  2924. Return: DX = code segment of DVDOS4GX.DVR
  2925.     BX = ??? (012Ch)
  2926.     CX = ??? (0006h)
  2927. SeeAlso: AX=BFDEh/BX=0000h
  2928. --------E-15BFDEBX0013-----------------------
  2929. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2930.     AX = BFDEh
  2931.     BX = 0013h
  2932. Return: DX:CX -> ???
  2933. SeeAlso: AX=BFDEh/BX=000Eh
  2934. --------E-15BFDEBX0014-----------------------
  2935. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  2936.     AX = BFDEh
  2937.     BX = 0014h
  2938.     CX = index of ??? mailbox
  2939.         (0000h-0004h valid, but no range checking done)
  2940. Return: AX,BX destroyed
  2941. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  2942. --------E-15BFDEBX0015-----------------------
  2943. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  2944.     AX = BFDEh
  2945.     BX = 0015h
  2946.     CX = index of ??? mailbox
  2947.         (0000h-0004h valid, but no range checking done)
  2948. Return: AX,BX destroyed
  2949. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  2950. --------E-15BFDEBX0016-----------------------
  2951. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  2952.     AX = BFDEh
  2953.     BX = 0016h
  2954.     CX = index of ??? mailbox
  2955.         (0000h-0004h valid, but no range checking done)
  2956. Return: AX = status
  2957.         0000h no one owns mailbox
  2958.         0001h mailbox has an owner
  2959.     BX destroyed
  2960. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  2961. --------E-15BFDEBX0017-----------------------
  2962. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  2963.     AX = BFDEh
  2964.     BX = 0017h
  2965.     CX = index of ??? mailbox
  2966.         (0000h-0004h valid, but no range checking done)
  2967. Return: AX = segment of mailbox owner's handle
  2968.     BX = segment of caller's task handle
  2969. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  2970. --------E-15BFDEBXFFFD-----------------------
  2971. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  2972.     AX = BFDEh
  2973.     BX = FFFDh
  2974. Return: CX:DX = ???
  2975. SeeAlso: AX=BFDEh/BX=FFFEh
  2976. --------E-15BFDEBXFFFE-----------------------
  2977. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  2978.     AX = BFDEh
  2979.     BX = FFFEh
  2980.     CX:DX = ???
  2981. SeeAlso: AX=BFDEh/BX=FFFDh
  2982. --------E-15BFDEBXFFFF-----------------------
  2983. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  2984.     AX = BFDEh
  2985.     BX = FFFFh
  2986. SeeAlso: AX=BFDEh/BX=0000h
  2987. --------Q-15DE00-----------------------------
  2988. INT 15 - DESQview - GET PROGRAM NAME
  2989.     AX = DE00h
  2990. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  2991.         the "Switch Windows" menu (see #0381)
  2992. Note:    always returns AX=0000h under DESQview/X
  2993. SeeAlso: AX=DE07h
  2994.  
  2995. Format of program entry in DESQVIEW.DVO:
  2996. Offset    Size    Description    (Table 0381)
  2997.  00h    BYTE    length of name (FFh if end of file)
  2998.  01h  N BYTEs    name
  2999.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  3000.     BYTE    program type
  3001.         00h normal program
  3002.         04h divider
  3003.         80h Delete a Program
  3004.         81h Change a Program
  3005.     WORD    ??? apparently always 0000h
  3006. --------Q-15DE01-----------------------------
  3007. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  3008.     AX = DE01h
  3009. Return: nothing
  3010. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  3011.     NOP for DESQview/X
  3012. --------Q-15DE02-----------------------------
  3013. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  3014.     AX = DE02h
  3015. Return: nothing
  3016. Note:    this call is a NOP in DV 2.x
  3017. SeeAlso: AX=DE03h
  3018. --------Q-15DE03-----------------------------
  3019. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  3020.     AX = DE03h
  3021. Return: AX = ??? for current window
  3022.     BX = ??? for current window
  3023. Note:    this call is a NOP in DV 2.x
  3024. SeeAlso: AX=DE02h
  3025. --------Q-15DE04-----------------------------
  3026. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  3027.     AX = DE04h
  3028. Return: BX = bytes of common memory available
  3029.     CX = largest block available
  3030.     DX = total common memory in bytes
  3031. SeeAlso: AX=DE05h,AX=DE06h
  3032. --------Q-15DE05-----------------------------
  3033. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  3034.     AX = DE05h
  3035. Return: BX = KB of memory available
  3036.     CX = largest block available
  3037.     DX = total conventional memory in KB
  3038. SeeAlso: AX=DE04h,AX=DE06h
  3039. --------Q-15DE06-----------------------------
  3040. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  3041.     AX = DE06h
  3042. Return: BX = KB of expanded memory available
  3043.     CX = largest block available
  3044.     DX = total expanded memory in KB
  3045. SeeAlso: AX=DE04h,AX=DE05h
  3046. --------Q-15DE07-----------------------------
  3047. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  3048.     AX = DE07h
  3049. Return: AX = number of program as it appears on the "Switch Windows" menu
  3050. Note:    this API call may be made from a hardware interrupt handler
  3051. SeeAlso: AX=DE00h
  3052. --------Q-15DE08-----------------------------
  3053. INT 15 - DESQview - GET ???
  3054.     AX = DE08h
  3055. Return: AX = 0000h if ??? is not set to the current task
  3056.          0001h if ??? is set to the current task
  3057. --------Q-15DE09-----------------------------
  3058. INT 15 - DESQview - UNIMPLEMENTED
  3059.     AX = DE09h
  3060. Return: nothing (NOP in DV 1.x and 2.x)
  3061. --------Q-15DE0A-----------------------------
  3062. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  3063.     AX = DE0Ah
  3064.     BL = character
  3065. Return: character displayed, next call will display in next position (which
  3066.     wraps back to the start of the line if off the right edge of screen)
  3067. Notes:    displays character on bottom line of *physical* screen, regardless
  3068.       of current size of window (even entirely hidden)
  3069.     does not know about graphics display modes, just pokes the characters
  3070.       into display memory
  3071.     this API call may be made from a hardware interrupt handler
  3072. SeeAlso: AX=1003h
  3073. --------Q-15DE0B-----------------------------
  3074. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  3075.     AX = DE0Bh
  3076.     BL = API level minor version number
  3077.     BH = API level major version number
  3078. Return: AX = maximum API level (AH = major, AL = minor)
  3079. Notes:    if the requested API level is greater than the version of DESQview, a
  3080.       "You need a newer version" error window is popped up
  3081.     the API level defaults to 1.00, and is inherited by child tasks
  3082. --------Q-15DE0C-----------------------------
  3083. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  3084.     AX = DE0Ch
  3085.     BX = number of bytes
  3086. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  3087. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  3088.       system memory
  3089. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  3090. --------Q-15DE0D-----------------------------
  3091. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  3092.     AX = DE0Dh
  3093.     ES:DI -> previously allocated block
  3094. Return: nothing
  3095. SeeAlso: AX=1002h,AX=DE0Ch
  3096. --------Q-15DE0E-----------------------------
  3097. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  3098.     AX = DE0Eh
  3099.     ES:DI -> name to find (see #0382)
  3100.     CX = length of name
  3101. Return: BX = 0000h not found
  3102.          0001h found
  3103.         DS:SI = object handle
  3104. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  3105.  
  3106. (Table 0382)
  3107. Values for special DESQview mailbox names:
  3108.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  3109.  "DESQview/X Help Engine"
  3110.  "DESQview/X Network Server"  Network Manager
  3111.  "DESQview X Server0"    X-Windows server
  3112.  "DESQview X Server7"    X-Windows printing service
  3113.  "INBOX"        DESQview/X LPD requests
  3114.  "OUTBOX"        DESQview/X LPD responses
  3115.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  3116.  "_DVNM_"        DV/X v1.10 network manager
  3117. --------Q-15DE0F-----------------------------
  3118. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  3119.     AX = DE0Fh
  3120. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  3121. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  3122.     enables an additional mouse mode
  3123. --------Q-15DE10-----------------------------
  3124. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  3125.     AX = DE10h
  3126.     BH = scan code
  3127.     BL = character
  3128. Return: nothing
  3129. Notes:    a later read will get the keystroke as if it had been typed by the user
  3130.     multiple pushes are read last-in first-out
  3131.     if a script exists for the pushed key in the current application, the
  3132.       script will be executed
  3133.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  3134. SeeAlso: INT 16/AH=05h
  3135. --------Q-15DE11BL00-------------------------
  3136. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  3137.     AX = DE11h
  3138.     BL = 00h      viewport will not move automatically
  3139.          nonzero  viewport will move to keep cursor visible (default)
  3140. Return: nothing
  3141. --------Q-15DE12BX0000-----------------------
  3142. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  3143.     AX = DE12h
  3144.     BX = 0000h    select normal style (linefeed only moves down)
  3145.          nonzero  select C style (linefeed moves to start of next line)
  3146. Return: nothing
  3147. Note:    set on a per-task basis, and inherited from the parent task
  3148. --------Q-15DE13-----------------------------
  3149. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  3150.     AX = DE13h
  3151. Return: BX = number of calls to BEGINC or ENTERC
  3152.           (see INT 15/AX=101Bh,INT 15/AX=DE1Ch) without matching ENDC
  3153.           (see INT 15/AX=101Ch)
  3154. Note:    this API call may be made from within a hardware interrupt handler
  3155. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  3156. --------Q-15DE14-----------------------------
  3157. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  3158.     AX = DE14h
  3159.     ES:DI -> object
  3160. Return: BL = 00h not an object
  3161.          08h window or task
  3162.          09h mailbox
  3163.          0Ah keyboard
  3164.          0Bh timer
  3165.          0Ch objectq
  3166.          0Fh pointer
  3167.          10h panel
  3168. SeeAlso: AX=1016h
  3169. --------Q-15DE15-----------------------------
  3170. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  3171.     AX = DE15h
  3172.     BL = error handling mode
  3173.         00h post system error on all error conditions
  3174.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  3175.         messages sent to mailboxes which fail due to lack of system
  3176.         or common memory
  3177.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  3178.         calls which fail due to lack of system memory
  3179. Return: nothing
  3180. SeeAlso: AX=DE0Ch,AX=DE16h
  3181. --------Q-15DE16-----------------------------
  3182. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  3183.     AX = DE16h
  3184. Return: BL = current mode
  3185.         00h always post system error
  3186.         01h return carry flag set on failed mailbox writes
  3187.         02h return CF set on failed mailbox writes and NULL on failed
  3188.         GETMEM calls
  3189. SeeAlso: AX=DE15h
  3190. --------Q-15DE17-----------------------------
  3191. INT 15 - DESQview v2.20-2.25 - reserved
  3192.     AX = DE17h
  3193. Return: pops up "Programming error" window
  3194. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  3195. SeeAlso: AX=1117h
  3196. --------Q-15DE17-----------------------------
  3197. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3198.     AX = DE17h
  3199.     BX = function
  3200.         0000h   get current mapping context without setting
  3201.         nonzero set new mapping context to BX
  3202. Return: BX = mapping context in effect before call
  3203. Notes:    mapping contexts determine conventional-memory addressability; setting
  3204.       a mapping context ensures that the associated program and data areas
  3205.       are in memory for access.  Usable by drivers, TSRs and shared
  3206.       programs.
  3207.     caller need not be running under DESQview
  3208.     this API call may be made from a hardware interrupt handler
  3209. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  3210. --------Q-15DE18-----------------------------
  3211. INT 15 - DESQview v2.20+ - internal - ???
  3212.     AX = DE18h
  3213.     BP = function number
  3214.         high byte must be 10h
  3215.         low byte is function
  3216.         00h set ???
  3217.             BL = ???  (00h-10h, video mode???)
  3218.             BH = value to store
  3219.         03h set ???
  3220.             BL = ??? (stored in driver)
  3221.         0Ah get ???
  3222.             ES:DI -> 18-byte buffer to hold ???
  3223. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  3224. --------Q-15DE19-----------------------------
  3225. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  3226.     AX = DE19h
  3227.     BX = number of bytes to allocate
  3228. Return: AX = 0000h successful
  3229.         ES:DI -> allocated block
  3230.          nonzero insufficient memory
  3231. Note:    this API call may be made from within a hardware interrupt handler
  3232. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  3233. --------Q-15DE1A-----------------------------
  3234. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  3235.     AX = DE1Ah
  3236.     ES:DI -> previously allocated block
  3237. Return:    AX = 0000h (successful)
  3238. Note:    this function may be called from within a hardware interrupt handler
  3239. SeeAlso: AX=DE0Dh,AX=DE19h
  3240. --------Q-15DE1B-----------------------------
  3241. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  3242.     AX = DE1Bh
  3243. Return: nothing
  3244. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  3245. --------Q-15DE1C-----------------------------
  3246. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  3247.     AX = DE1Ch
  3248. Return: nothing
  3249. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  3250.       that DOS is free
  3251.     the official documentation states that this call should be paired with
  3252.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  3253.     this API call may be made from within a hardware interrupt handler
  3254. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  3255. --------Q-15DE1D-----------------------------
  3256. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  3257.     AX = DE1Dh
  3258.     DX = segment of handle for task to receive keystroke
  3259.     BL = character
  3260.     BH = scan code
  3261. Return: AX = 0000h if successful
  3262.        nonzero if receiver's keyboard buffer was full
  3263. Notes:    the key is treated as though the user had pressed it, ignoring any
  3264.       script which may be bound to the key, and using the current field
  3265.       table if the keyboard object is in field processing mode
  3266.     multiple PUTKEYs are seen in the order in which they are executed
  3267. SeeAlso: AX=DE10h
  3268. --------Q-15DE1E-----------------------------
  3269. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  3270.     AX = DE1Eh
  3271. Return: CL = actual number of rows on screen
  3272.     CH = actual number of columns on screen
  3273.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  3274. Note:    this API call may be made from a hardware interrupt handler
  3275. SeeAlso: INT 10/AH=0Fh
  3276. --------Q-15DE1F-----------------------------
  3277. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  3278.     AX = DE1Fh
  3279. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  3280. Note:    this API call may be made from within a hardware interrupt handler
  3281. SeeAlso: AX=DE13h,INT 21/AH=34h
  3282. --------Q-15DE20-----------------------------
  3283. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  3284.     AX = DE20h
  3285.     BX = segment of handle of task to interupt
  3286.     DX:CX -> FAR interrupt routine
  3287.     BP,SI,DI,DS,ES as required by interrupt routine
  3288. Return: nothing
  3289. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  3290.       making the DISPATCHINT call
  3291.     multiple "DISPATCHINT" calls are processed in the order in which they
  3292.       were executed
  3293.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  3294.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  3295.       needs to be preserved
  3296.     this API call may be made from within a hardware interrupt handler
  3297. SeeAlso: AX=1021h,AX=DE2Ah
  3298. --------Q-15DE21-----------------------------
  3299. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  3300.     AX = DE21h
  3301.     BX = new state
  3302.         0000h turn off
  3303.         nonzero turn on
  3304. Return: BX = old state of virtualization
  3305. Notes:    this API call may be made from within a hardware interrupt handler
  3306.     under DV 2.40 and 2.42, this call appears to have no effect and always
  3307.       returns a nonzero value in BX which appears to be the offset within
  3308.       the DV common memory segment of the caller's task object; it may
  3309.       only have an effect within a hardware interrupt handler
  3310. SeeAlso: AX=1117h,AX=DE17h
  3311. --------Q-15DE22-----------------------------
  3312. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  3313.     AX = DE22h
  3314.     DX = segment of task handle
  3315. Return: DX = total amount of memory in paragraphs
  3316.     BX = amount of system memory in paragraphs
  3317.     CX = largest block of system memory available in paragraphs
  3318.     AX = memory flags (see #0383)
  3319. Notes:    if the task handle is a child task, the returned values will be for the
  3320.       process containing the task, rather than the task itself
  3321.     if the process's system memory is swapped out, BX,CX,DX remain
  3322.       unchanged, because the memory usage cannot be determined
  3323. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  3324.  
  3325. Bitfields for DESQview process memory flags:
  3326. Bit(s)    Description    (Table 0383)
  3327.  0    system memory resides in shared memory
  3328.  1    process's memory is swapped out
  3329.  2    process's system memory is swapped out
  3330. --------Q-15DE23-----------------------------
  3331. INT 15 U - DESQview v2.31+ - ???
  3332.     AX = DE23h
  3333.     BX = ??? IRQ number on first PIC?
  3334.     CX = ??? IRQ number on second PIC?
  3335. Return: ???
  3336. Note:    called by QEMM 6.00+
  3337. --------Q-15DE24-----------------------------
  3338. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  3339.     AX = DE24h
  3340.     BX = length of .DVP data
  3341.     CX = length of ??? string
  3342.     DS:SI -> ??? string
  3343.     ES:DI -> .DVP data (see #0295 at AX=102Ch)
  3344. Return: BX = segment of task handle??? or 0000h on error
  3345. Note:    this call is similar to AX=102Ch except that it can interpret the
  3346.       extended DVP data
  3347. SeeAlso: AX=102Ch
  3348. --------Q-15DE25-----------------------------
  3349. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  3350.     AX = DE25h
  3351.     ES:DI -> 67-byte buffer for ASCIZ directory name
  3352. Return: ES:DI buffer filled with directory from which DESQview was started
  3353. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  3354.       name, so if the buffer is not cleared to zeros before the call,
  3355.       there is no way to tell where the directory name ends.  This bug
  3356.       has been fixed in DV 2.52 (DV/X 1.02)
  3357. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  3358. --------Q-15DE26-----------------------------
  3359. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  3360.     AX = DE26h
  3361. Return: BX = segment of handle for task with keyboard focus
  3362. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  3363.       "direct" window is active
  3364. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  3365. --------Q-15DE27-----------------------------
  3366. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  3367.     AX = DE27h
  3368.     BX = type
  3369.         0000h process
  3370.         0001h task
  3371.     ES:DI -> list of Instance Item Structures (see #0384)
  3372. Return: CF clear if successful
  3373.         AX = ???
  3374.         BX = ???
  3375.     CF set on error
  3376.         AX = error code???
  3377.         0004h invalid BX value
  3378. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3379. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  3380.  
  3381. Format of DESQview Instance Item Structure [one element of list]:
  3382. Offset    Size    Description    (Table 0384)
  3383.  00h    WORD    length of data area DESQview should save and restore on context
  3384.           switches (0000h = end of list)
  3385.  02h    DWORD    pointer to area to be saved/restored
  3386. --------Q-15DE28-----------------------------
  3387. INT 15 U - DESQview v2.50+ - ???
  3388.     AX = DE28h
  3389.     BX = segment of ??? or 0000h for default
  3390.     ???
  3391. Return: ???
  3392. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3393. SeeAlso: AX=DE2Ah
  3394. --------Q-15DE29BX0000-----------------------
  3395. INT 15 U - DESQview/X - ???
  3396.     AX = DE29h
  3397.     BX = 0000h
  3398.     ???
  3399. Return: CF clear if successful
  3400.         ???
  3401.     CF set on error
  3402. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3403.     under DESQview 2.60, this function and all other subfunctions of
  3404.       AX=DE29h always return CF set, as they are unique to DESQview/X
  3405. --------Q-15DE29BX0001-----------------------
  3406. INT 15 U - DESQview/X - ???
  3407.     AX = DE29h
  3408.     BX = 0001h
  3409.     DX = segment of window handle
  3410. Return: CF clear if successful
  3411.         AX = ???
  3412.         DX = ???
  3413.     CF set on error
  3414. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3415. --------Q-15DE29BX0002-----------------------
  3416. INT 15 U - DESQview/X - ???
  3417.     AX = DE29h
  3418.     BX = 0002h
  3419.     DX = segment of window handle
  3420. Return: CF clear if successful
  3421.         AX = ???
  3422.         DX = ???
  3423.     CF set on error
  3424. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3425. --------Q-15DE29BX0003-----------------------
  3426. INT 15 U - DESQview/X - ???
  3427.     AX = DE29h
  3428.     BX = 0003h
  3429.     DX = segment of window handle
  3430. Return: CF clear if successful
  3431.         ???
  3432.     CF set on error
  3433. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3434. --------Q-15DE29BX0004-----------------------
  3435. INT 15 U - DESQview/X - GET DISPLAY NAME
  3436.     AX = DE29h
  3437.     BX = 0004h
  3438.     CX = size of buffer in bytes
  3439.     DX = segment of window handle
  3440.     ES:DI -> buffer for display name
  3441. Return: CF clear if successful
  3442.         buffer filled with ASCIZ display name (truncated if necessary) or
  3443.           null string if no display
  3444.     CF set on error
  3445. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3446.     the name ":0" refers to the local display
  3447. --------Q-15DE29BX0005-----------------------
  3448. INT 15 U - DESQview/X - ???
  3449.     AX = DE29h
  3450.     BX = 0005h
  3451.     ???
  3452. Return: CF clear if successful
  3453.         ???
  3454.     CF set on error
  3455. Note:    under DESQview 2.60, this function and all other subfunctions of
  3456.       AX=DE29h always return CF set, as they are unique to DESQview/X
  3457. --------Q-15DE2A-----------------------------
  3458. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  3459.     AX = DE2Ah
  3460.     BX = segment of handle for task to interrupt or 0000h for caller
  3461.     DX:CX -> interrupt routine
  3462.     BP,SI,DI,DS,ES as required by interrupt routine
  3463. Return: nothing
  3464. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3465.     this call is the same as AX=DE20h except that it will delay
  3466.       interrupting the specified task until after it has exited DOS
  3467. SeeAlso: AX=1021h,AX=DE20h
  3468. --------Q-15DE2B-----------------------------
  3469. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  3470.     AX = DE2Bh
  3471.     ES:DI -> starting object
  3472.         0000h:0000h for first object in list???
  3473. Return: AX = status
  3474.         0000h successful
  3475.         ES:DI -> next object of same type (window/non-window)
  3476.         0001h failed (ES:DI was not a valid handle)
  3477. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3478.     there are two separate lists, one for window/task objects and one
  3479.       for all other objects
  3480. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  3481. --------Q-15DE2C-----------------------------
  3482. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  3483.     AX = DE2Ch
  3484.     DX = window information format version (0100h for DESQview 2.5x)
  3485.     BX = segment of window handle or 0000h for default
  3486.     ES:DI -> buffer for window information (see #0385)
  3487. Return: AX = status
  3488.         0000h successful
  3489. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3490. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  3491.  
  3492. Format of DESQview window information:
  3493. Offset    Size    Description    (Table 0385)
  3494.  00h    BYTE    task flag: 00h window, 01h task
  3495.  01h    BYTE    process number if owner task
  3496.         00h if non-owner task
  3497.  02h    WORD    segment of owner's handle, 0000h if orphaned
  3498.  04h    WORD    mapping context (see #0284 at AX=1016h)
  3499.  06h    BYTE    task status (see #0386)
  3500.  07h    BYTE    unused
  3501.  08h    WORD    status bits (see #0387)
  3502.  0Ah    BYTE    01h if foreground-only window
  3503.  
  3504. (Table 0386)
  3505. Values for DESQview task status:
  3506.  00h    "Waiting" waiting for input
  3507.  01h    "Idle" keyboard poll limit reached
  3508.  03h    same as 01h
  3509.  04h    "Pausing" INT 15/AX=1000h pause called
  3510.  04h    DV/X direct: user did something to allow task switch
  3511.  05h    "ModeChg" video mode about to be changed
  3512.  06h    "ModeNtf" notify that video mode changed
  3513.  07h    "MoniCh" requested change to other monitor
  3514.  08h    "StartPgm" control relinquished to start new process
  3515.  09h    "MgrCan" made window manager CANCEL command
  3516.  0Ah    "Slicing" time slice expired
  3517.  0Bh    "Exit DOS" notify on DOS calls
  3518.  0Ch    "Enter DOS" process is re-entering DOS
  3519.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  3520.  0Eh    "BrkNxt" Control-Break pressed
  3521.  0Fh    "MgrCol" keyboard focus taken away
  3522.  10h    "PgmInt" interrupted by API call from another task
  3523.  11h    "BldOpen" call to INT 15/AX=DE01h
  3524.  
  3525. Bitfields for DESQview task status bits:
  3526. Bit(s)    Description    (Table 0387)
  3527.  6    task is freeing another task
  3528.  5    process is being created
  3529.  4    user suspended process
  3530.  3    process suspended itself
  3531.  2    process is resized direct window (suspended)
  3532.  1    process swapped out
  3533.  0    DESQview process
  3534. --------Q-15DE2D-----------------------------
  3535. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  3536.     AX = DE2Dh
  3537.     CX = direction
  3538.         FFFFh set socket handler
  3539.         DX:BX -> FAR function for socket interface
  3540.             must be of the format described under INT 63"DESQview"
  3541.         other get socket handler
  3542.         Return: DX:BX -> socket handler
  3543. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3544.     the "set" subfunction is normally called only by SOCKET.DVR
  3545. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  3546. --------Q-15DE2E-----------------------------
  3547. INT 15 U - DESQview v2.50+ - SOCKET API
  3548.     AX = DE2Eh
  3549.     DX:BX -> socket record (see #0389)
  3550.         0000h:0000h to create a new socket record
  3551. Return: CX = size of socket record in bytes
  3552.     DX:BX -> socket record which was used
  3553. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  3554.     socket records are allocated from common memory
  3555.     for Unix compatibility, each socket and connection on a socket is
  3556.       allocated a DOS file handle (referencing an SFT for NUL) which is
  3557.       used on various calls to specify which of possibly multiple
  3558.       connections is to be operated upon
  3559. SeeAlso: AX=DE2Dh,INT 61/AX=0001h/SF=0001h"VINES",INT 63"DESQview"
  3560.  
  3561. (Table 0388)
  3562. Values for DESQview/X socket API function number:
  3563.  0000h    initialize socket???
  3564.  0001h    "gethostname"
  3565.  0002h    "ioctl" check for input
  3566.  0003h    "sleep" delay for specified period
  3567.  0004h    "htons" convert word to network (big-endian) byte order
  3568.  0005h    "select"
  3569.  0006h    "bsd_close"/"so_close" close socket
  3570.  0007h    NOP
  3571.  0008h    "connect" initiate connection on socket
  3572.  0009h    "recv"/"recvfrom" read from socket
  3573.  000Ah    "socket"
  3574.  000Bh    ???
  3575.  000Ch    "gethostbyname"
  3576.  000Dh    "send"/"sendto" write to socket
  3577.  000Eh    ??? (does something to all connections for process)
  3578.  000Fh    "getpid" get process identifier
  3579.  0010h    "gettimeofday"
  3580.  0011h    "bind" assign name to socket
  3581.  0012h    "listen" listen for connections on socket
  3582.  0013h    "accept" accept connection on socket
  3583.  0014h    connect to X server
  3584.  0015h    "gethostbyaddr" get host information for an address
  3585.  0016h    "getprotobyname"
  3586.  0017h    "getprotobynumber"
  3587.  0018h    "getservbyname"
  3588.  0019h    "getservbyport"
  3589.  001Ah    "getsockname" determine name bound to socket
  3590.  001Bh    "getpeername" get name of connected peer
  3591.  001Ch    "getsockopt"/"setsockopt"
  3592.  001Dh    "so_exit"     close all sockets for calling process
  3593.  001Eh    "issock" determine whether file handle references socket
  3594.  001Fh    "so_attach" reattach previously detached socket
  3595.  0020h    "so_detach" temporarily detach socket
  3596.  0021h    get DESQview directory
  3597.  0022h    "NewProc" start new application (see AX=102Ch)
  3598.  0023h    "so_linkup"
  3599.  0024h    canonicalize filename
  3600.  0025h    indirect INT 15h call
  3601.  0026h    Network Manager interface
  3602.  0027h    "so_unlink"    close connection from "so_linkup"
  3603.  0028h    "raisepriority"
  3604.  0029h    "lowerpriority"
  3605.  002Ah    ???
  3606.  FFFFh    "NetExit" (appears to be a NOP)
  3607.  
  3608. Format of DESQview/X socket record:
  3609. Offset    Size    Description    (Table 0389)
  3610.  00h    WORD    signature F0ADh
  3611.  02h    WORD    function number (see #0388)
  3612.  04h    WORD    returned error code (see #0406)
  3613.  06h    WORD    maximum message size??? (usually 0400h)
  3614.  08h    WORD    PSP segment to use or 0000h if socket not valid
  3615.  0Ah    WORD    scratch space (JFT size)
  3616.  0Ch    DWORD    scratch space (JFT address)
  3617.  10h    DWORD    mailbox handle (initialized by function 0000h)
  3618.  14h    DWORD    timer object handle (initialized by function 0000h)
  3619. ---function 0000h---
  3620.  18h    WORD    (return) ???
  3621. ---function 0001h---
  3622.  18h    WORD    (return) status???
  3623.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  3624.  9Ah    WORD    maximum length of hostname to return
  3625. ---function 0002h---
  3626.  18h    WORD    (return) status
  3627.  1Ah    WORD    socket's file handle
  3628.  1Ch    WORD    IOCTL function
  3629.         05h "FIONREAD" determine available input
  3630.         06h "FIONBIO" set blocking state of socket
  3631.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  3632.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  3633. ---function 0003h---
  3634.  18h  2 BYTEs    unused
  3635.  1Ah    WORD    delay time in seconds
  3636. ---function 0004h---
  3637.  18h    WORD    (return) result in network (big-endian) byte order
  3638.  1Ah    WORD    value to convert to network byte order
  3639. ---function 0005h---
  3640.  18h    WORD    (return) number of handles meeting the specified conditions???
  3641.  1Ah    WORD    number of file handles in each bitset???
  3642.  1Ch    DWORD    bitset of socket handles to check for readability???
  3643.  20h    DWORD    bitset of socket handles to check for writability???
  3644.  24h    DWORD    bitset of socket handles to check for errors???
  3645.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  3646.  2Ah    DWORD    ???
  3647.  2Eh    DWORD    ???
  3648. ---function 0006h---
  3649.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3650.  1Ah    WORD    socket's file handle
  3651. ---function 0008h---
  3652.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3653.  1Ah    WORD    socket's file handle
  3654.  1Ch    WORD    0001h if socket name specified, 0000h if not
  3655.  1Eh    WORD    length of socket name
  3656.  20h  N BYTEs    name of socket to which to connect
  3657. ---function 0009h---
  3658.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  3659.             closed, or FFFFh on error
  3660.  1Ah    WORD    socket's file handle
  3661.  1Ch    WORD    number of bytes to read
  3662.  1Eh    WORD    flags
  3663.  20h    WORD    0000h if no source address desired
  3664.         0001h if source address is to be stored (datagram sockets)
  3665.  22h    WORD    length of source address
  3666.  24h 110 BYTEs    source address
  3667.  92h 1K BYTEs    buffer for data to be read
  3668. ---function 000Ah---
  3669.  18h    WORD    (return) socket's file handle or FFFFh on error
  3670.  1Ah    WORD    address family (0001h,0002h)
  3671.  1Ch    WORD    socket type
  3672.  1Eh    WORD    protocol
  3673. ---function 000Bh---
  3674.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  3675.  1Ah    WORD    socket's file handle
  3676.  1Eh    WORD    (call) ???
  3677. ---function 000Ch---
  3678.  18h 128 BYTEs    buffer containing ASCIZ hostname
  3679.         special case if empty string or "unix"
  3680.  98h    ???    'struct hostent' ???
  3681.  A2h    ???    (return) ???
  3682. ---function 000Dh---
  3683.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  3684.  1Ah    WORD    socket's file handle
  3685.  1Ch    WORD    number of bytes to write
  3686.  1Eh    WORD    number of bytes to follow in subsequent writes???
  3687.  20h    WORD    flags
  3688.  22h    WORD    0000h if no destination specified, 0001h if destination present
  3689.  24h    WORD    ???
  3690.  26h    WORD    length of destination address
  3691.  28h 110 BYTEs    destination address
  3692.  96h 1K BYTEs    buffer containing data to be written
  3693. ---function 000Eh---
  3694.  no additional fields
  3695. ---function 000Fh---
  3696.  18h    DWORD    (return) DESQview task handle of calling process
  3697. ---function 0010h---
  3698.  18h    DWORD    (return) current time
  3699.  1Ch    DWORD    (return) ???
  3700. ---function 0011h---
  3701.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3702.  1Ah    WORD    socket's file handle
  3703.  1Ch    WORD    length of name
  3704.  1Eh  N BYTEs    buffer for socket name
  3705. ---function 0012h---
  3706.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3707.  1Ah    WORD    socket's file handle
  3708.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  3709. ---function 0013h---
  3710.  18h    WORD    (return) file handle for new connection or FFFFh on error
  3711.  1Ah    WORD    listen()ing socket's file handle
  3712.  1Ch    WORD    (call) length of buffer for connecting entity's address
  3713.         (return) actual length of address
  3714.  1Eh  N BYTEs    buffer for connecting entity's address
  3715. ---function 0014h---
  3716.  18h    WORD    (return) socket's file handle or FFFFh on error
  3717.  1Ah  4 BYTEs    (return) ???
  3718.  1Eh    WORD    (return) ???
  3719.  20h    WORD    (return) ???
  3720.  22h 256 BYTEs    ASCIZ X display name
  3721. 122h    ???
  3722. ---function 0015h---
  3723.  18h    WORD    (call) type of address??? (test for 0001h seen)
  3724.  1Ah    WORD    (call) length of buffer for host address
  3725.  1Ch 110 BYTEs    buffer containing host address
  3726.  8Ah    WORD    (return) offset of official host name???
  3727.  8Ch    WORD    (return) offset of alias list???
  3728.  8Eh    WORD    (return) address type???
  3729.  90h    WORD    (return) length of an address in bytes???
  3730.  92h    WORD    (return) offset of address???
  3731.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  3732. ---function 0016h---
  3733.  18h    ???    buffer for protocol name???
  3734.  98h    ???
  3735. ---function 0017h---
  3736.  18h    WORD    (call) protocol number???
  3737.  1Ah    WORD    (return) ??? or 0001h
  3738. ---function 0018h---
  3739.  18h 128 BYTEs    buffer containing ???
  3740.  98h 128 BYTEs    buffer containing ???
  3741. 118h    WORD    (return) ???
  3742. ---function 0019h---
  3743.  18h    WORD    length of name???
  3744.  1Ah 128 BYTEs    buffer for name???
  3745.  9Ah    WORD    (return) ???
  3746. ---function 001Ah---
  3747.  18h    WORD    (return) 0000h if successful, FFFFh on error
  3748.  1Ah    WORD    socket's file handle
  3749.  1Ch    WORD    (call) length of buffer for socket name
  3750.         (return) actual length of socket name
  3751.  1Eh  N BYTEs    buffer for socket name
  3752. ---function 001Bh---
  3753.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3754.  1Ah    WORD    socket's file handle
  3755.  1Ch    WORD    (call) size of buffer for name
  3756.         (return) actual size of name
  3757.  1Eh  N BYTEs    buffer for peer's name
  3758. ---function 001Ch---
  3759.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3760.  1Ah    WORD    direction: 0000h to get, 0001h to set
  3761.  1Ch    WORD    socket's file handle
  3762.  1Eh    WORD    option level
  3763.  20h    WORD    option name
  3764.  22h    WORD    (call) length of buffer for option value
  3765.         (return) actual length of option value
  3766.  24h  N BYTEs    buffer for option value
  3767. ---function 001Dh---
  3768.  no additional fields
  3769. ---function 001Eh---
  3770.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  3771.  1Ah    WORD    file handle which may or may not be a socket
  3772. ---function 001Fh---
  3773.  18h    WORD    (return) file handle or FFFFh on error
  3774.  1Ah    DWORD    (call) pointer to Socket Context Record (see #0407) of a
  3775.             previously detached socket
  3776. ---function 0020h---
  3777.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  3778.  1Ah    WORD    socket's file handle
  3779.  1Ch    DWORD    (return) pointer to Socket Context Record (see #0407) for
  3780.             the file handle
  3781. ---function 0021h---
  3782.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  3783. ---function 0022h---
  3784.  18h    DWORD    (return) task handle of new application
  3785.  1Ch    WORD    size of .DVP data
  3786.  1Eh 129 BYTEs    ASCIZ ???
  3787.  9Fh  N BYTEs    .DVP data (see #0295 at AX=102Ch)
  3788. ---function 0023h---
  3789.  18h    WORD    (return) ??? or FFFFh on error
  3790.  1Ah    WORD    socket's file handle???
  3791. ---function 0024h---
  3792.  18h    WORD    (return) DOS error code (see #0811 at INT 21/AH=59h)
  3793.             0000h if successful
  3794.  1Ah 129 BYTEs    ASCIZ filename/pathname
  3795. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  3796. ---function 0025h---
  3797.  18h    WORD    value of AX
  3798.  1Ah    WORD    value of BX
  3799.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  3800.         (call) number of stack parameters if AH value is 12h
  3801.         (return) returned CX for calls other than INT 15/AH=12h
  3802.  1Eh    WORD    value of DX
  3803.  20h    WORD    value of DI
  3804.  22h    WORD    value of SI
  3805.  24h    WORD    value of DS
  3806.  26h    WORD    value of ES
  3807.  28h    WORD    (return) value of FLAGS after call
  3808.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  3809.         (return) stack results from INT 15/AH=12h call
  3810. ---function 0026h---
  3811.  18h    WORD    (call) Network Manager subfunction (see #0390)
  3812.         (return) status???
  3813.  1Ah    WORD    (call) size of parameter data
  3814.         (return) size of returned data
  3815.  1Ch  N BYTEs    (call) parameter data required by call (see #0391,#0392,#0393)
  3816.         (return) result data (see #0401,#0402,#0405)
  3817. ---function 0027h---
  3818.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  3819.  1Ah    WORD    socket's file handle
  3820. ---functions 0028h,0029h---
  3821.  18h    WORD    (call) file handle for which to set priority low/high
  3822.             FFFFh to change calling task's priority
  3823. ---function 002Ah---
  3824.  no additional fields
  3825.  
  3826. (Table 0390)
  3827. Values for DESQview/X Network Manager subfunction:
  3828.  0004h    "so_exit"???
  3829.  0005h    "gethostbyname"
  3830.  0006h    "gethostname"
  3831.  0009h    "socket"
  3832.  000Dh    "gethostbyaddr"
  3833.  000Fh    "getprotobyname"
  3834.  0010h    get protocol name for protocol number
  3835.  0011h    "getservbyname"
  3836.  0012h    "getservbyport" (see #0394)
  3837.  0013h    "getsockname"??? (see #0395)
  3838.  0016h    ??? (see #0396)
  3839.  0017h    kill Network Manager
  3840.  0018h    "getpeername"??? (see #0397)
  3841.  0019h    ??? (called by socket function 0000h) (see #0398)
  3842.  001Ah    ??? (see #0399)
  3843.  001Bh    "so_linkup" (see #0400)
  3844.  001Dh    get network services (see #0401)
  3845.  001Fh    "getpwuid"
  3846.  0020h    "getpwnam"
  3847.  0021h    "getpwvar"
  3848.  0022h    "crypt"
  3849.  0023h    "so_unlink"
  3850.  0024h    "getlogin" (see #0402)
  3851.  0028h    "sethostent"
  3852.  0029h    "gethostent"
  3853.  002Ah    "soaddhost"
  3854.  002Bh    "soupdatehost"
  3855.  002Ch    "sodeletehost"
  3856.  002Dh    "setservent"
  3857.  002Eh    "getservent"
  3858.  002Fh    "setpwent"
  3859.  0030h    "getpwent" (see #0403)
  3860.  0031h    ???
  3861.  0032h    ???
  3862.  0033h    ???
  3863.  0034h    get IP network number (see #0404)
  3864.  0035h    ??? (pops up Network Manager window)
  3865.  0037h    ???
  3866.  0038h    get machine name and IP address (see #0405)
  3867.  0039h    ???
  3868.  
  3869. Format of Function 0026h/Subfunction 000Fh data:
  3870. Offset    Size    Description    (Table 0391)
  3871.  00h  8 BYTEs    (return) ???
  3872.  
  3873. Format of Function 0026h/Subfunction 0010h data:
  3874. Offset    Size    Description    (Table 0392)
  3875.  00h  2 BYTEs    (return) ???
  3876.  02h    WORD    (return) protocol number
  3877.  04h    WORD    (call) protocol number for which to get name
  3878.  06h    WORD    (return) ???
  3879.  08h    var    (return) ASCIZ protocol name
  3880.  N    var    (return) ASCIZ protocol name
  3881.  
  3882. Format of Function 0026h/Subfunction 0011h data:
  3883. Offset    Size    Description    (Table 0393)
  3884.  00h  8 BYTEs    ???
  3885.  08h    var    (return) ASCIZ protocol name
  3886.     var    (return) ASCIZ ??? name
  3887.     var    (return) ASCIZ ??? name
  3888.  
  3889. Format of Function 0026h/Subfunction 0012h data:
  3890. Offset    Size    Description    (Table 0394)
  3891.  00h  8 BYTEs    (return) ???
  3892.  
  3893. Format of Function 0026h/Subfunction 0013h data:
  3894. Offset    Size    Description    (Table 0395)
  3895.  00h 116 BYTEs    (return) ???
  3896.  
  3897. Format of Function 0026h/Subfunction 0016h data:
  3898. Offset    Size    Description    (Table 0396)
  3899.  00h  4 BYTEs    (return) ???
  3900.  
  3901. Format of Function 0026h/Subfunction 0018h data:
  3902. Offset    Size    Description    (Table 0397)
  3903.  00h 116 BYTEs    (return) ???
  3904.  
  3905. Format of Function 0026h/Subfunction 0019h data:
  3906. Offset    Size    Description    (Table 0398)
  3907.  00h  4 BYTEs    (return) ???
  3908.  04h    DWORD    (return) task handle of ???
  3909.  
  3910. Format of Function 0026h/Subfunction 001Ah data:
  3911. Offset    Size    Description    (Table 0399)
  3912.  00h 38 BYTEs    (return) ???
  3913.  
  3914. Format of Function 0026h/Subfunction 001Bh data:
  3915. Offset    Size    Description    (Table 0400)
  3916.  00h 10 BYTEs    (return) ???
  3917.  
  3918. Format of Function 0026h/Subfunction 001Dh return data [array]:
  3919. Offset    Size    Description    (Table 0401)
  3920.  00h    WORD    ??? or FFFFh if end of array
  3921.  02h  7 BYTEs    ???
  3922.  09h 27 BYTEs    ASCIZ name of service
  3923.  
  3924. Format of Function 0026h/Subfunction 0024h return data:
  3925. Offset    Size    Description    (Table 0402)
  3926.  00h    var    ASCIZ username
  3927.  
  3928. Format of Function 0026h/Subfunction 0030h data:
  3929. Offset    Size    Description    (Table 0403)
  3930.  00h    WORD    (call) UID or 0000h for current user
  3931.         (return) ???
  3932.  02h    WORD    (return) UID
  3933.  04h  6 BYTEs    (return) ???
  3934.  0Ah    var    (return) ASCIZ username
  3935.     var    (return) ASCIZ encrypted password
  3936.     var    (return) ASCIZ initial ("home") directory
  3937.  
  3938. Format of Function 0026h/Subfunction 0034h data:
  3939. Offset    Size    Description    (Table 0404)
  3940.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  3941.  
  3942. Format of Function 0026h/Subfunction 0038h return data:
  3943. Offset    Size    Description    (Table 0405)
  3944.  00h    BYTE    ???
  3945.  01h  4 BYTEs    IP address
  3946.  05h    var    ASCIZ machine name
  3947.     ???
  3948.  
  3949. (Table 0406)
  3950. Values for DESQview/X socket error code:
  3951.  0000h    successful
  3952.  0009h    "BADF" bad file handle
  3953.  000Ch    "ENOMEM" out of memory
  3954.  000Eh    "EFAULT" bad address
  3955.  0016h    "EINVAL" invalid argument
  3956.  0018h    "EMFILE" too many open files
  3957.  0020h    "EPIPE" ??? broken pipe
  3958.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  3959.  0024h    "EINPROGRESS" operation now in progress
  3960.  0026h    "ENOTSOCK" socket invalid
  3961.  0028h    "EMSGSIZE" message too long to send atomically
  3962.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  3963.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  3964.  0031h    "EDOM" argument too large
  3965.  0038h    "EISCONN" socket is already connected
  3966.  0039h    "ENOTCONN" socket is not connected
  3967.  
  3968. Format of DESQview/X Socket Context Record:
  3969. Offset    Size    Description    (Table 0407)
  3970.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  3971.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  3972.  06h    WORD    PSP segment of owner or 0000h
  3973.  08h    WORD    mapping context of owning window (see #0284 at AX=1016h)
  3974.  0Ah  2 BYTEs    ???
  3975.  0Ch    WORD    address family
  3976.  0Eh    WORD    socket type
  3977.  10h    WORD    protocol
  3978.  12h    WORD    socket state
  3979.         0001h created
  3980.         0002h bound
  3981.         0003h listening???
  3982.         0005h connected
  3983.  14h    DWORD    timer object handle
  3984.  18h    DWORD    object handle (mailbox???)
  3985.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  3986.  20h    DWORD    pointer to ??? or 0000h
  3987.  24h  6 BYTEs    ???
  3988.  2Ah    WORD    file handle for socket or FFFFh
  3989.  2Ch  2 BYTEs    ???
  3990.  2Eh    WORD    nonzero if socket nonblocking
  3991. ---network connections only---
  3992.  30h  2 BYTEs    ???
  3993.  32h    WORD    ???
  3994.  34h  4 BYTEs    (big-endian) IP address of remote
  3995.  38h  6 BYTEs    ???
  3996. --------Q-15DE2F-----------------------------
  3997. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  3998.     AX = DE2Fh
  3999. Return: BX = status
  4000.         0001h keyboard focus has been given to a direct window since the
  4001.         last call
  4002.         0000h if not
  4003. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  4004.     Quarterdeck stated that this call would not be available under future
  4005.       versions of DESQview Classic, but it is still present in v2.60
  4006. --------Q-15DE30-----------------------------
  4007. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  4008.     AX = DE30h
  4009. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  4010. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  4011.     you must first check the DESQview version to verify that it is 2.50 or
  4012.       greater
  4013. SeeAlso: INT 21/AH=2Bh/CX=4445h
  4014. --------Q-15DE31-----------------------------
  4015. INT 15 - DESQview/X v1.10 - ???
  4016.     AX = DE31h
  4017.     CX = ???
  4018.         0000h ???
  4019.         nonzero ???
  4020.     ???
  4021. Return: ???
  4022. --------B-1605-------------------------------
  4023. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  4024.     AH = 05h
  4025.     CH = scan code
  4026.     CL = ASCII character
  4027. Return: AL = 00h if successful
  4028.          01h if keyboard buffer full
  4029. Note:    under DESQview, a number of "keystrokes" invoke specific
  4030.       DESQview-related actions when they are read from the keyboard
  4031.       buffer (see #0409)
  4032. SeeAlso: AH=00h,AH=25h"K3",AH=71h,AH=FFh,INT 15/AX=DE10h
  4033.  
  4034. (Table 0409)
  4035. Values for pseudo-keystrokes for DESQview:
  4036.  38FBh or FB00h    switch to next window (only if main menu already popped up)
  4037.  38FCh or FC00h    pop up DESQview main menu
  4038.  38FEh or FE00h    close the current window
  4039.  38FFh or FF00h    pop up DESQview learn menu
  4040. --------Q-212B--CX4445-----------------------
  4041. INT 21 - DESQview - INSTALLATION CHECK
  4042.     AH = 2Bh
  4043.     CX = 4445h ('DE')
  4044.     DX = 5351h ('SQ')
  4045.     AL = subfunction (DV v2.00+)
  4046.         01h get version
  4047.         Return: BX = version (BH = major, BL = minor)
  4048.         Note: early copies of v2.00 return 0002h
  4049.         02h get shadow buffer info, and start shadowing
  4050.         Return: BH = rows in shadow buffer
  4051.             BL = columns in shadow buffer
  4052.             DX = segment of shadow buffer
  4053.         04h get shadow buffer info
  4054.         Return: BH = rows in shadow buffer
  4055.             BL = columns in shadow buffer
  4056.             DX = segment of shadow buffer
  4057.         05h stop shadowing
  4058. Return: AL = FFh if DESQview not installed
  4059. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  4060.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  4061.       01h for all subfunction requests 0Ch and higher and appears to ignore
  4062.       all lower-numbered functions not listed here.
  4063.     DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
  4064.       is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
  4065.       v2.00.
  4066. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  4067. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  4068. --------m-212B01CX444D-----------------------
  4069. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  4070.     AX = 2B01h
  4071.     CX = 444Dh ('DM')
  4072.     DX = 4158h ('AX')
  4073. Return: AX = 0000h if installed
  4074.         BX = version??? (0002h)
  4075.         CX = 4845h ('HE')
  4076.         DX = 5245h ('RE')
  4077.         ES = DOS-UP driver segment
  4078. ----------2130FFCX4445-----------------------
  4079. INT 21 - DESQ??? - INSTALLATION CHECK
  4080.     AX = 30FFh
  4081.     CX = 4445h ("DE")
  4082.     DX = 5351h ("SQ")
  4083. Return: BH = 05h if installed
  4084.     ???
  4085. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  4086.       DESQview, so it may be for DESQview's precursor DESQ.
  4087. SeeAlso: AX=4404h"DUBLDISK"
  4088. --------m-214402-----------------------------
  4089. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  4090.     AX = 4402h
  4091.     BX = file handle for device "QEMM386$"
  4092.     CX = 0004h
  4093.     DS:DX -> DWORD buffer for API entry point
  4094. Return: CF clear if successful
  4095.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  4096.     CF set on error
  4097.         AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
  4098. Note:    Quarterdeck recently (June 1993) documented this function, but the
  4099.       documentation incorrectly states that it is only available for
  4100.       QEMM 6+
  4101. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  4102. --------Q-214402-----------------------------
  4103. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  4104.     AX = 4402h
  4105.     BX = file handle for device "HOOKROM$"
  4106.     CX = 0004h
  4107.     DS:DX -> DWORD buffer for address of hooked vector table (see #0604)
  4108. Return: CF clear if successful
  4109.         DS:DX buffer filled
  4110.     CF set on error
  4111.         AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
  4112. SeeAlso: AX=4402h/SF=01h
  4113.  
  4114. Format of HOOKROM.SYS hooked vector table entry:
  4115. Offset    Size    Description    (Table 0604)
  4116.  00h  5 BYTEs    FAR jump to actual interrupt handler
  4117.         (end of table if first byte is not EAh)
  4118.  05h    BYTE    interrupt vector number
  4119. --------m-214402SF01-------------------------
  4120. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  4121.     AX = 4402h subfn 01h
  4122.     BX = file handle for device "EMMXXXX0"
  4123.     CX = 0006h (size of buffer in bytes)
  4124.     DS:DX -> buffer for EMM import structure record (see #0661)
  4125.         first byte must be 01h on entry
  4126. Return: CF clear if successful
  4127.         buffer filled (see also #2044 at INT 67/AH=3Fh)
  4128.     CF set on error
  4129.         AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h)
  4130. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  4131.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  4132.       as it starts up
  4133.     for QEMM-386, this call always returns an error if Windows3 support
  4134.       has been disabled with the NW3 switch
  4135. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  4136. SeeAlso: INT 67/AH=3Fh
  4137.  
  4138. Format of EMM import structure record:
  4139. Offset    Size    Description    (Table 0661)
  4140.  00h    DWORD    physical address of EMM import structure (see #0662)
  4141.  04h    BYTE    EMM import structure major version
  4142.  05h    BYTE    EMM import structure minor version
  4143. Note:    version 1.00 contains only EMS information (Windows 3.0+)
  4144.     version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
  4145.     version 1.11 is version 1.10 plus memory manager maker/product name
  4146. SeeAlso: #2084
  4147.  
  4148. Format of Global EMM Import record:
  4149. Offset    Size    Description    (Table 0662)
  4150.  00h    BYTE    bit flags
  4151.         bit 2: ???
  4152.         bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
  4153.         bit 4: no UMB???
  4154.  01h    BYTE    reserved (0)
  4155.  02h    WORD    size of structure in bytes
  4156.  04h    WORD    structure version
  4157.  06h    DWORD    reserved
  4158.  0Ah 384 BYTEs    64 EMS frame status records (see #0663), one per 16K of
  4159.           real-mode 1M address space
  4160. 18Ah    BYTE    ??? (must be at least 3*number_of_EMS_frames+4)
  4161. 18Bh    BYTE    number of UMB frame descriptors following
  4162. 18Ch 4N DWORDs    UMB frame descriptors
  4163.         each is 4 DWORDs giving physical page numbers for the four
  4164.           4K pages of a 16K EMS frame (00000000h if non-UMB page)
  4165. var    BYTE    number of EMS handle info records following
  4166.     16N BYTEs    EMS handle info records (see #0665)
  4167. ---version 1.10+ ---
  4168.     DWORD    realmode INT 67 vector (used by Windows to set breakpoints)
  4169.     DWORD    physical address of HMA page table values
  4170.     BYTE    number of free page entries following
  4171.      2N DWORDs    free page entries
  4172.         each is:
  4173.             DWORD    physical page number
  4174.             DWORD    number of consecutive physical pages
  4175.     BYTE    number of XMS handle info records following
  4176.         00h if memory manager does not emulate XMS or has real mode
  4177.           XMS code which can execute in the Windows environment
  4178.     12N BYTEs    XMS handle info records (see #0666)
  4179.     BYTE    number of free UMB info records following
  4180.      2N WORDs    free UMB info records
  4181.         each is:
  4182.             WORD    real mode start segment
  4183.             WORD    size in paragraphs
  4184. ---version 1.11---    
  4185.      20 BYTEs    blank-padded maker name
  4186.      20 BYTEs    blank-padded product name
  4187.  
  4188. Format of EMS frame status record:
  4189. Offset    Size    Description    (Table 0663)
  4190.  00h    BYTE    frame type (see #0664)
  4191.  01h    BYTE    owner handle (00h/FFh = none) from frame including UMB
  4192.         index to UMB frame descriptors
  4193.  02h    WORD    logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
  4194.  04h    BYTE    EMS physical page number (FFh for non-EMS = don't care???)
  4195.  05h    BYTE    flags for non-EMS frames (00h for EMS frame)
  4196.         bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
  4197.           10: direct mapping (linear address = physical address)
  4198.           01: UMB mapping
  4199.  
  4200. Bitfields for EMS frame type:
  4201. Bit(s)    Description    (Table 0664)
  4202.  0    EMS frame
  4203.  1    (if EMS frame) in standard 64K page frame
  4204.  2    first 4K of frame is UMB
  4205.  3    second 4K of frame is UMB
  4206.  4    third 4K of frame is UMB
  4207.  5    last 4K of frame is UMB
  4208.  
  4209. Format of EMS handle info record:
  4210. Offset    Size    Description    (Table 0665)
  4211.  00h    BYTE    handle number (00h = system handle)
  4212.  01h    BYTE    flags
  4213.         bit 0: normal handle rather than system handle
  4214.         bit 2: ??? (set by some EMS managers)
  4215.  02h  8 BYTEs    EMS handle's name
  4216.  0Ah    WORD    number of 16K pages for handle
  4217.  0Ch    DWORD    physical address of page table entries forming page map
  4218. Note:    all values should be zero for the system handle if no large frame
  4219.       support is present
  4220.  
  4221. Format of XMS handle info record:
  4222. Offset    Size    Description    (Table 0666)
  4223.  00h    WORD    handle
  4224.  02h    WORD    flags
  4225.         bit 0: handle usable by Windows
  4226.             (already in use when Windows started if clear)
  4227.         bit 1: reserved (0)
  4228.  04h    DWORD    size in KB (may be zero, used only if flags bit 0 set)
  4229.  08h    DWORD    physical address (only if flags bit 0 set)
  4230. --------D-2152-------------------------------
  4231. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  4232.     AH = 52h
  4233. Return: ES:BX -> DOS list of lists (see #0765)
  4234. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  4235.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  4236.       pointer is FFFFh:FFFFh).
  4237.     partially supported by the Windows NT DOS box; contains only a
  4238.       rudimentary Current Directory Structure (see #0782)
  4239.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  4240.     Quarterdeck's suggested check for the use of its DOSDATA.SYS or
  4241.       DOS-UP.SYS is to test whether the list-of-lists segment is greater
  4242.       than the segment of the first memory block; a better check for
  4243.       DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
  4244. SeeAlso: INT 2F/AX=1203h
  4245. --------D-29---------------------------------
  4246. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  4247.     AL = character to display
  4248. Return: nothing
  4249. Notes:    automatically called when writing to a device with bit 4 of its device
  4250.       driver header set (see also INT 21/AH=52h)
  4251.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  4252.       vector and assume that ANSI.SYS is installed if the segment is larger
  4253.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  4254.     the default handler under DESQview 2.2 understands the <Esc>[2J
  4255.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  4256. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  4257. --------N-2A2001-----------------------------
  4258. INT 2A - MS Networks or NETBIOS - ???
  4259.     AX = 2001h
  4260.     ???
  4261. Return: ???
  4262. Note:    intercepted by DESQview 2.x
  4263. --------V-2F1A00BX4156-----------------------
  4264. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4265.     AX = 1A00h
  4266.     BX = 4156h ('AV')
  4267.     CX = 4154h ('AT')
  4268.     DX = 4152h ('AR')
  4269. Return: AL = FFh if installed
  4270.         CF clear
  4271.         BX = AVATAR protocol level supported
  4272.         CX = driver type
  4273.         0000h AVATAR.SYS
  4274.         4456h DVAVATAR.COM inside DESQview window
  4275.         DX = 0016h
  4276. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4277.       interprets AVATAR command codes in the same way that ANSI interprets
  4278.       ANSI command codes
  4279. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4280.       the magic values
  4281. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  4282. --------m-2F4310-----------------------------
  4283. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  4284.     AX = 4310h
  4285. Return: ES:BX -> driver entry point (see #1369,#1370,#1380,#1398)
  4286. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  4287.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  4288.       the driver entry point
  4289. SeeAlso: AX=4300h,AX=4310h"Cloaking"
  4290.  
  4291. Format of XMS driver entry point:
  4292. Offset    Size    Description    (Table 1369)
  4293.  00h  5 BYTEs    jump to actual handler
  4294.         either short jump (EBh XXh) followed by three NOPs or
  4295.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  4296.           into the XMS driver chain
  4297. Note:    to hook into the XMS driver chain, a program should follow the chain of
  4298.       far jumps until it reaches the short jump of the driver at the end
  4299.       of the chain; this short jump is to be replaced with a far jump to
  4300.       the new handler's entry point, which should contain a short jump
  4301.       followed by three NOPs.  The new handler must return to the address
  4302.       pointed at by the short jump which was overwritten.  Using this
  4303.       method, the new handler becomes the first to see every XMS request.
  4304.  
  4305. (Table 1389)
  4306. Call the QEMM v5.11 "???" function with:
  4307.     AH = 34h  (QEMM 5.11 only, undocumented)
  4308.     ???
  4309. Return: ???
  4310.  
  4311. (Table 1390)
  4312. Call the QEMM v5.11 "???" function with:
  4313.     AH = 44h  (QEMM 5.11 only, undocumented)
  4314.     ???
  4315. Return: ???
  4316. --------Q-2FD200BX5144-----------------------
  4317. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  4318.     AX = D200h
  4319.     BX = 5144h ("QD")
  4320.     CX = 4D45h ("ME")
  4321.     DX = 4D30h ("M0")
  4322. Return: AL = FFh installed
  4323.     if BX,CX,DX registers were as specified on entry:
  4324.         BX = 4D45h ("ME")
  4325.         CX = 4D44h ("MD")
  4326.         DX = 5652h ("VR")
  4327. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4328. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  4329.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  4330.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  4331.       Quarterdeck product, it just chains to the previous INT 2F handler
  4332. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  4333. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  4334. --------m-2FD201BX4849-----------------------
  4335. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  4336.     AX = D201h
  4337.     BX = 4849h ("HI")
  4338.     CX = 4D45h ("ME")
  4339.     DX = 4D51h ("MQ")
  4340. Return: BX = 4F4Bh ("OK")
  4341.     ES:DI -> HIMEM entry point
  4342. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4343. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  4344. --------m-2FD201BX4849-----------------------
  4345. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  4346.     AX = D201h
  4347.     BX = 4849h ("HI")
  4348.     CX = 5241h ("RA")
  4349.     DX = 4D30h ("M0")
  4350. Return: BX = 4F4Bh ("OK")
  4351.     CX = segment of start of HIRAM chain
  4352.     DX = reserved block owner (QEMM/QRAM code segment)
  4353. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4354. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  4355.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  4356.       have the block header program name field set to "UMB"; blocks whose
  4357.       "owner" field is set to the reserved segment returned in DX are
  4358.       locked-out regions such as video memory and ROMs.
  4359. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  4360. --------G-2FD201BX4D41-----------------------
  4361. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  4362.     AX = D201h
  4363.     BX = 4D41h ("MA")
  4364.     CX = 4E49h ("NI")
  4365.     DX = 4645h ("FE")
  4366. Return: BX = 5354h ("ST") if installed
  4367. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4368. SeeAlso: AX=D200h
  4369. --------E-2FD201BX4D45-----------------------
  4370. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  4371.     AX = D201h
  4372.     BX = 4D45h ("ME")
  4373.     CX = 5155h ("QU")
  4374.     DX = 5044h ("PD")
  4375. Return: AL = FFh
  4376.     BX = 4F4Bh ("OK")
  4377. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4378. Note:    this function is called by QEMM 6.03
  4379.     performs a variety of actions before setting return registers
  4380. SeeAlso: AX=D200h
  4381. --------m-2FD201BX5145-----------------------
  4382. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  4383.     AX = D201h
  4384.     BX = 5145h ("QE")
  4385.     CX = 4D4Dh ("MM")
  4386.     DX = 3432h ("42")
  4387. Return: BX = 4F4Bh ("OK")
  4388.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  4389. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4390. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  4391.       has been disabled with the NW3 switch to QEMM386.SYS
  4392. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  4393. --------V-2FD201BX5649-----------------------
  4394. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  4395.     AX = D201h
  4396.     BX = 5649h ("VI")
  4397.     CX = 4452h ("DR")
  4398.     DX = 414Dh ("AM")
  4399. Return: BX = 4F4Bh ("OK")
  4400.     ES:DI -> VIDRAM entry point
  4401. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  4402. SeeAlso: AX=D200h
  4403.  
  4404. (Table 1621)
  4405. Call VIDRAM entry point with:
  4406.     AH = 00h get status
  4407.         Return: AL = VIDRAM state (see #1622)
  4408.             BL = extra RAM status
  4409.                 00h VIDRAM does not use extra RAM
  4410.                 01h VIDRAM uses EMS as extra RAM
  4411.                 02h VIDRAM uses EGA as extra RAM
  4412.             BH = feature flags (see #1623)
  4413.             CL = current monitor (01h = mono, 80h = color)
  4414.             SI = current top of memory (paragraph)
  4415.             DI = segment of start of HiRAM chain
  4416.     AH = 01h setup
  4417.         AL = VIDRAM state (see #1622)
  4418.         BL = extra RAM status (see above)
  4419.         BH = feature flags (see #1623)
  4420.         CL = monitor (01h = monochrome, 80h = color)
  4421.         SI = new top of memory (paragraph)
  4422.         DI = segment of start of HiRAM chain
  4423.     AH = 02h get end address of VIDRAM code
  4424.         Return: ES:DI -> VIDRAM partial map context (see #1624,#1625)
  4425. Return: CF set on error
  4426.     CF clear if successful
  4427.  
  4428. (Table 1622)
  4429. Values for VIDRAM state:
  4430.  00h    off
  4431.  01h    no EGA graphics
  4432.  02h    no graphics at all
  4433.  
  4434. Bitfields for VIDRAM feature flags:
  4435. Bit(s)    Description    (Table 1623)
  4436.  0    override enabled
  4437.  1    mapped memory detected in A000h-B000h range
  4438.  2    top of memory not at 640K
  4439.  3    MDA detected
  4440.  4    high RAM exists in video area
  4441.  5    mapped memory detected in video area
  4442.  6-7    reserved???
  4443.  
  4444. Format of VIDRAM partial map context (EMS 3.2):
  4445. Offset    Size    Description    (Table 1624)
  4446.  00h    BYTE    EMS version ID (32h)
  4447.  01h    WORD    EMM handle for this entry
  4448.  03h    BYTE    number of frames
  4449.  04h    BYTE    first page frame
  4450.  05h    WORD    offset from ES to previously saved map
  4451.  
  4452. Format of VIDRAM partial map context (EMS 4.0):
  4453. Offset    Size    Description    (Table 1625)
  4454.  00h    BYTE    EMS version ID (40h)
  4455.  01h    WORD    mappable segment count
  4456.  03h  N WORD    mappable segments
  4457.     WORD    offset to previously saved map???
  4458. --------Q-2FDE00BX4456-----------------------
  4459. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  4460.     AX = DE00h
  4461.     BX = 4456h ("DV")
  4462.     CX = 5844h ("XD")
  4463.     DX = 4931h ("I1")
  4464. Return: AL = FFh if installed (even if other registers do not match)
  4465.     if BX,CX, and DX were as specified on entry,
  4466.         BX = 4845h ("HE")
  4467.         CX = 5245h ("RE")
  4468.         DX = 4456h ("DV")
  4469. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  4470. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  4471.       issue DESQview API calls other than those allowed from hardware ints
  4472. SeeAlso: AX=DE02h,INT 15/AX=5400h
  4473. --------Q-2FDE01-----------------------------
  4474. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  4475.     AX = DE01h
  4476.     BX = driver ID
  4477.     other registers as needed by driver
  4478. Notes:    XDI drivers should pass this call through to previous handler if ID
  4479.       does not match
  4480.     DESQview never calls this function
  4481. --------Q-2FDE01BX4450-----------------------
  4482. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  4483.     AX = DE01h
  4484.     BX = 4450h ("DP")
  4485.     CX = 4D49h ("MI")
  4486.     DX = 3039h ("09")
  4487. Return: AL = FFh if installed
  4488.         BX = 4D42h ("MB")
  4489.         CX = 4921h ("I!")
  4490.         DX = 8F4Fh
  4491.         ES:DI -> filename of DPMI host overlay
  4492. Note:    the installation check consists of testing for the existence of the
  4493.       character device QDPMI$$$
  4494. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  4495. Index:    installation check;QDPMI
  4496. --------U-2FDE01BX5242-----------------------
  4497. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  4498.     AX = DE01h
  4499.     BX = 5242h ("RB")
  4500.     CX:DX = program identifier
  4501.         656F7000h ("eop",0) for DVeop
  4502. Return: AX = 5242h ("RB") if installed
  4503.         ES:BX -> data or entry point
  4504.         CX = version number (CH = major, CL = minor)
  4505.  
  4506. (Table 1639)
  4507. Call DVeop entry point with:
  4508.     ES:DI -> callback address or 0000h:0000h to remove callback
  4509. Return: AX = status
  4510.         0000h failed (callback table full or attempted to remove non-
  4511.           existent callback)
  4512.         0001h successful
  4513.         ES:DI -> chaining address
  4514.     BX,CX,DX destroyed
  4515. Notes:    the callback function is called with a simulated interrupt when the
  4516.       DESQview window containing it is closed; it should perform all
  4517.       necessary cleanup and then perform a FAR jump to the chaining address
  4518.       or an IRET if the chaining address is 0000h:0000h
  4519.     if the program wishes to remove itself before the window is closed, it
  4520.       should call the DVeop entry point with the previously returned
  4521.       chaining address and ignore the returned chaining address.
  4522. --------U-2FDE01BX7474-----------------------
  4523. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  4524.     AX = DE01h
  4525.     BX = 7474h
  4526.     CL = function
  4527.         00h installation check
  4528.         Return: AL = FFh
  4529.         01h get process handle
  4530.         DX = keys on Open Window menu (DL = first, DH = second)
  4531.         Return: AX = process handle or 0000h if not running
  4532.         02h (v1.3+) set TMAN handle
  4533.         DX = TMAN process handle
  4534.         03h (v1.3+) set open keys to ignore on next CL=01h call
  4535.         DX = keys on Open Window menu (DL = first, DH = second)
  4536. Return: BX = 4F4Bh ("OK")
  4537.     DL destroyed
  4538. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  4539.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  4540. Index:    installation check;DVTXDI
  4541. --------U-2FDE01BX7575-----------------------
  4542. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  4543.     AX = DE01h
  4544.     BX = 7575h
  4545.     CX = function
  4546.         0000h installation check
  4547.         Return: AX = 00FFh if installed
  4548.         0001h turn on notification (currently unused)
  4549.         Return: AX = 0001h
  4550.         0002h turn off notification (currently unused)
  4551.         Return: AX = 0001h
  4552.         0003h get process information
  4553.         Return: AX = status
  4554.                 0000h failed
  4555.                 0001h successful
  4556.                 BX = last instantaneous time slice
  4557.                     in 1/100s (v1.10)
  4558.                     in 1/18s (v1.11+)
  4559.                 CX = number of processes
  4560.                 DX = number of "(starting)" records (v2.00+)
  4561.                 SI = number of records in process info array
  4562.                       (v2.00+) (always 15 for v1.x)
  4563.                 ES:DI -> process info array (see #1640,#1641)
  4564.         0004h get version
  4565.         Return: AH = major version
  4566.             AL = minor version
  4567.         0005h (v1.10+) get time since DESQview started
  4568.         Return: DX:AX = 1/100s since DV start (v1.10)
  4569.             DX:AX = 1/18s since DV start (v1.11+)
  4570.         0006h (v1.10+) get number of task switches
  4571.         Return: DX:AX = total task switches
  4572.             CX = task switches in last instantaneous interval
  4573. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  4574.       Daniel J. Bodoh
  4575.     for v1.00, function 0003h allocates common memory, which the caller
  4576.       must deallocate after reading the process information; only the
  4577.       currently used records are placed in the buffer
  4578.     for v1.10+, function 0003h merely returns a pointer to the internal
  4579.       array of process information; the caller should make a copy of the
  4580.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  4581.       those records with bit 7 of the first byte set are valid.
  4582. Index:    installation check;DVSIXDI
  4583.  
  4584. Format of DVSIXDI v1.00 information for one process:
  4585. Offset    Size    Description    (Table 1640)
  4586.  00h    BYTE    flags
  4587.         bit 7: process slot is valid
  4588.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  4589.           Open Windows menu, else undefined
  4590.  03h    WORD    Switch Windows window number
  4591.  05h    WORD    segment of process handle
  4592.  07h    WORD    number of tasks owned by process
  4593.  09h    WORD    mapping context of process (see INT 15/AX=1016h)
  4594.  0Bh    DWORD    hook for other programs
  4595.  
  4596. Format of DVSIXDI v1.10-v2.00 information for one process:
  4597. Offset    Size    Description    (Table 1641)
  4598.  00h    BYTE    process flags (see #1642)
  4599.  01h    WORD    Open Window keys
  4600.  03h    WORD    Switch Windows number
  4601.  05h    WORD    segment of process handle
  4602.  07h    WORD    number of tasks for process
  4603.  09h    WORD    process mapping context
  4604.  0Bh    DWORD    time process started (relative to start of DESQview)
  4605.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  4606.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  4607.  17h    DWORD    total CPU time since process started
  4608.  1Bh    DWORD    CPU time at start of current instantaneous interval
  4609.  1Fh    DWORD    CPU time in current instantaneous interval
  4610.  23h    DWORD    hook for other programs
  4611. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  4612.  
  4613. Bitfields for DVSIXDI process flags:
  4614. Bit(s)    Description    (Table 1642)
  4615.  7    valid record
  4616.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  4617.       and only offsets 01h and 09h are valid
  4618.  5    (v2.00+) this app currently owns the CPU
  4619.  4    reserved (0)
  4620.  3    DESQview system task
  4621.  2    reserved (0)
  4622.  1    task has keyboard (currently unused)
  4623.  0    task swapped out (currently unused)
  4624. --------Q-2FDE01BXFFFE-----------------------
  4625. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  4626.     AX = DE01h
  4627.     BX = FFFEh
  4628.     CX = 4D47h ("MG")
  4629.     DX = 0052h (0,"R")
  4630. Return: AL = FFh
  4631.     DX = 584Dh
  4632. --------Q-2FDE02-----------------------------
  4633. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  4634.     AX = DE02h
  4635.     BX = mapping context of DESQview
  4636.     DX = handle of DESQview system task
  4637. Note:    driver should pass this call to previous handler after doing its work
  4638. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  4639. --------Q-2FDE03-----------------------------
  4640. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  4641.     AX = DE03h
  4642.     BX = mapping context of DESQview
  4643.     DX = handle of DESQview system task
  4644. Notes:    driver should pass this call to previous handler before doing its work
  4645.     DESQview makes this call when it is exiting, but before unhooking any
  4646.       interrupt vectors
  4647. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  4648. --------Q-2FDE04-----------------------------
  4649. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  4650.     AX = DE04h
  4651.     BX = mapping context of new process (see INT 15/AX=1016h)
  4652.     DX = handle of process
  4653. Return: nothing
  4654. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  4655.       (see #1643) from "common" memory to control access to XMS memory
  4656.     all DOS, BIOS, and DV API calls are valid in handler
  4657.     driver should pass this call to previous handler after processing it
  4658. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  4659.  
  4660. Format of XMS XDI structure:
  4661. Offset    Size    Description    (Table 1643)
  4662.  00h    DWORD    pointer to 10-byte record???
  4663.  04h    DWORD    pointer to next XMS XDI structure
  4664.  08h    WORD    mapping context
  4665.  0Ah    BYTE    ???
  4666.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  4667.         (FAR jump to next field)
  4668.  10h  6 BYTEs    FAR handler for XMS driver entry point
  4669.         (consists of a FAR CALL followed by RETF)
  4670. --------Q-2FDE05-----------------------------
  4671. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  4672.     AX = DE05h
  4673.     BX = mapping context of process (see INT 15/AX=1016h)
  4674.     DX = handle of last task in process
  4675. Return: nothing
  4676. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  4677.     driver should pass this call to previous handler before processing it
  4678.     all DOS, BIOS, and DV API calls except those generating a task switch
  4679.       are valid in handler
  4680. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  4681. --------Q-2FDE06-----------------------------
  4682. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  4683.     AX = DE06h
  4684.     BX = mapping context of process containing task
  4685.     DX = handle of new task
  4686. Notes:    driver should pass this call to previous handler after processing it
  4687.     all DOS, BIOS, and DV API calls are valid in handler
  4688. --------Q-2FDE07-----------------------------
  4689. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  4690.     AX = DE07h
  4691.     BX = mapping context of process containing task
  4692.     DX = handle of task
  4693. Notes:    driver should pass this call to previous handler before processing it
  4694.     all DOS, BIOS, and DV API calls except those generating a task switch
  4695.       are valid in handler
  4696. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  4697. --------Q-2FDE08-----------------------------
  4698. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  4699.     AX = DE08h
  4700.     BX = mapping context of task being switched from (see INT 15/AX=1016h)
  4701.     DX = handle of task being switched from
  4702. Notes:    invoked prior to task swap, interrupts, etc
  4703.     driver should pass this call to previous handler after processing it
  4704. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  4705. --------Q-2FDE09-----------------------------
  4706. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  4707.     AX = DE09h
  4708.     BX = mapping context of task being switched to (see INT 15/AX=1016h)
  4709.     DX = handle of task being switched to
  4710. Notes:    state is restored except for interrupts
  4711.     driver should pass this call to previous handler before processing it
  4712. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  4713. --------Q-2FDE0A-----------------------------
  4714. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  4715.     AX = DE0Ah
  4716.     BX = mapping context of task receiving focus
  4717.     DX = handle of running task
  4718. Notes:    driver should pass this call to previous handler before processing it
  4719.     this call often occurs inside a keyboard interrupt
  4720.     DV 2.42 does not provide this call to XDI handlers running inside a
  4721.       window; instead, it directly calls the INT 2F handler which was
  4722.       active at the time DV started
  4723. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  4724. --------Q-2FDE0B-----------------------------
  4725. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  4726.     AX = DE0Bh
  4727.     BX = mapping context of DESQview system task
  4728.     CX = number of system memory paragraphs required for the use of all
  4729.           XDI drivers (DV will add this to system memory in DVP buffer)
  4730.     DX = handle of DESQview system task
  4731.     SI = mapping context of new process if it starts
  4732.     ES:DI -> DVP buffer
  4733. Return: CX incremented as needed
  4734. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  4735.     driver should pass this call to previous handler before processing it
  4736. --------Q-2FDE0C-----------------------------
  4737. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  4738.     AX = DE0Ch
  4739.     BX = mapping context of task being swapped out (see INT 15/AX=1016h)
  4740.     DX = handle of DESQview system task
  4741. Note:    driver should pass this call to previous handler after processing it
  4742. --------Q-2FDE0D-----------------------------
  4743. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  4744.     AX = DE0Dh
  4745.     BX = mapping context of process just swapped in (see INT 15/AX=1016h)
  4746.     DX = handle of DESQview system task
  4747. Note:    driver should pass this call to previous handler before processing it
  4748. --------Q-2FDE0E-----------------------------
  4749. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  4750.     AX = DE0Eh
  4751.     BX = mapping context of DESQview system task
  4752.     DX = handle of DESQview system task
  4753.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  4754. Note:    driver should pass this call to previous handler after processing it
  4755. --------Q-2FDE0F-----------------------------
  4756. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  4757.     AX = DE0Fh
  4758. Note:    DESQview 2.50+ calls this function just before it completes its
  4759.       initialization.  At the time of the call, DESQview has not yet
  4760.       changed any interrupt vectors
  4761. SeeAlso: AX=DE02h
  4762. --------Q-2FDE10-----------------------------
  4763. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  4764.     AX = DE10h
  4765.     BX = mapping context of process (see INT 15/AX=1016h)
  4766.     DX = task handle of process
  4767. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  4768.       similar to AX=DE07h but allows the XDI handler to make calls which
  4769.       cause context switches
  4770. SeeAlso: AX=DE06h,AX=DE07h
  4771. ----------2FDF00BX5445-----------------------
  4772. INT 2F U - TELTSR.COM - INSTALLATION CHECK
  4773.     AX = DF00h
  4774.     BX = 5445h ('TE')
  4775.     CX = 4C54h ('LT')
  4776.     DX = 5352h ('SR')
  4777. Return: BX = 5454h ('TT') if installed
  4778.     CX = 494Eh ('IN') if installed
  4779.     DX = 5454h ('ST') if installed
  4780. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  4781. Range:    AH=???h to ???h, selected automatically
  4782. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR"
  4783. ----------2FDF02-----------------------------
  4784. INT 2F U - TELTSR.COM - ???
  4785.     AX = DF02h
  4786.     ???
  4787. Return: ???
  4788. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  4789. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  4790. --------V-427503-----------------------------
  4791. INT 42 - Toshiba laptops - GET DISPLAY STATUS
  4792.     AX = 7503h
  4793. Return: AX = 7575h if supported
  4794.     CX = 0001h if supported
  4795.     BH = display type (00h color, 03h monochrome)
  4796.     BL = display state
  4797.         01h internal LCD display is active
  4798.         02h external VGA display is active
  4799.         03h both displays active / DeskStation display mode enabled
  4800.         (not possible on all machines)
  4801. Note:    used by VCHAD.EXE and supported by all Toshiba VGA laptops
  4802.       (string "TOSHIBA " at F000:E010h should be checked before call)
  4803.     INT 42 normally points to F000:F065h but may be redirected by QEMM386
  4804. SeeAlso: AX=7500h,AX=7504h,INT 15/AH=C0h
  4805. --------d-4B8102DX0000-----------------------
  4806. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  4807.     AX = 8102h
  4808.     DX = 0000h
  4809. Return: CF clear if successful
  4810.         AH = major version number
  4811.         AL = minor version number
  4812.         BX = product number (see #1739)
  4813.         CX = product revision number
  4814.         always 0000h for QMAPS and HPMM.SYS
  4815.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  4816.         DX = flags (see #1741)
  4817.         SI:DI = maximum DMA buffer size
  4818.     CF set on error
  4819.         AL = error code (see #1740)
  4820. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  4821.       apparently not always the case
  4822. SeeAlso: INT 2C/AX=002Bh,INT 31
  4823. Index:    installation check;Virtual DMA Spec
  4824.  
  4825. (Table 1739)
  4826. Values for VDS product number:
  4827.  0000h    for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  4828.  0001h    for Microsoft's EMM386.EXE
  4829.  0003h    for Windows 3.x WIN386.EXE
  4830.  0EDCh    for DR-DOS 6.0 EMM386.SYS
  4831.  4560h    ("E`") for Qualitas' 386MAX
  4832.  4D43h    ("MC") for V Communications' Memory Commander
  4833.  5145h    ("QE") for Quarterdeck's QEMM-386
  4834.  524Dh    ("RM") for Helix's Netroom RM386
  4835.  
  4836. (Table 1740)
  4837. Values for VDS error code:
  4838.  01h    region not in contiguous memory
  4839.  02h    region crossed a physical alignment boundary
  4840.  03h    unable to lock pages
  4841.  04h    no buffer available
  4842.  05h    region too large for buffer
  4843.  06h    buffer currently in use
  4844.  07h    invalid memory region
  4845.  08h    region was not locked
  4846.  09h    number of physical pages greater than table length
  4847.  0Ah    invalid buffer ID
  4848.  0Bh    copy out of buffer range
  4849.  0Ch    invalid DMA channel number
  4850.  0Dh    disable count overflow
  4851.  0Eh    disable count underflow
  4852.  0Fh    function not supported
  4853.  10h    reserved flag bits set in DX
  4854.  
  4855. Bitfields for VDS flags:
  4856. Bit(s)    Description    (Table 1741)
  4857.  0    PC/XT bus (DMA in first megabyte only)
  4858.  1    physical buffer/remap region in first megabyte
  4859.  2    automatic remap enabled
  4860.  3    all memory is physically contiguous
  4861.  4-15    reserved (zero)
  4862. --------Q-4B810D-----------------------------
  4863. INT 4B - QEMM-386 - BUG
  4864.     AX = 810Dh
  4865. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  4866.       call
  4867. --------H-50---------------------------------
  4868. INT 50 - IRQ0 relocated by DESQview
  4869. Range:    INT 50 to INT F8, selected automatically
  4870. Notes:    this is the default location for older versions; DESQview v2.26+
  4871.       searches for unused ranges of interrupts and uses the lowest
  4872.       available range in its list for relocating these IRQs and the next
  4873.       lowest for relocating IRQ8-IRQ15
  4874.     a range of eight interrupts starting at a multiple of 8 is considered
  4875.       available if all vectors are identical and it has not been excluded
  4876.       with an /XB:nn commandline switch
  4877.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if < two of these
  4878.       are available, F8h and then 50h are used anyway)
  4879.     the list of ranges for v2.31+ is 68h,78h,88h-B8h,F8h (if < two of these
  4880.       are available, F8h and then F0h are used anyway)
  4881. SeeAlso: INT 08"IRQ0",INT 51"DESQview",INT 54"DESQview",INT 58"DESQview"
  4882. SeeAlso: INT D8"Screen Thief"
  4883. --------H-51---------------------------------
  4884. INT 51 - IRQ1 relocated by DESQview
  4885. Range:    INT 51 to INT F9, selected automatically
  4886. Note:    this is the default location for older versions; see INT 50"DESQview"
  4887.       for details of interrupt relocation
  4888. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4889. --------H-52---------------------------------
  4890. INT 52 - IRQ2 relocated by DESQview
  4891. Range:    INT 52 to INT FA, selected automatically
  4892. Note:    this is the default location for older versions; see INT 50"DESQview"
  4893.       for details of interrupt relocation
  4894. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4895. --------H-53---------------------------------
  4896. INT 53 - IRQ3 relocated by DESQview
  4897. Range:    INT 53 to INT FB, selected automatically
  4898. Note:    this is the default location for older versions; see INT 50"DESQview"
  4899.       for details of interrupt relocation
  4900. SeeAlso: INT 50"DESQview",INT 54"DESQview",INT 58"DESQview"
  4901. --------H-54---------------------------------
  4902. INT 54 - IRQ4 relocated by DESQview
  4903. Range:    INT 54 to INT FC, selected automatically
  4904. Note:    this is the default location for older versions; see INT 50"DESQview"
  4905.       for details of interrupt relocation
  4906. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4907. --------H-55---------------------------------
  4908. INT 55 - IRQ5 relocated by DESQview
  4909. Range:    INT 55 to INT FD, selected automatically
  4910. Note:    this is the default location for older versions; see INT 50"DESQview"
  4911.       for details of interrupt relocation
  4912. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4913. --------H-56---------------------------------
  4914. INT 56 - IRQ6 relocated by DESQview
  4915. Range:    INT 56 to INT FE, selected automatically
  4916. Note:    this is the default location for older versions; see INT 50"DESQview"
  4917.       for details of interrupt relocation
  4918. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4919. --------H-57---------------------------------
  4920. INT 57 - IRQ7 relocated by DESQview
  4921. Range:    INT 57 to INT FF, selected automatically
  4922. Note:    this is the default location for older versions; see INT 50"DESQview"
  4923.       for details of interrupt relocation
  4924. SeeAlso: INT 50"DESQview",INT 58"DESQview"
  4925. --------H-58---------------------------------
  4926. INT 58 - IRQ8 relocated by DESQview 2.26+
  4927. Range:    INT 58 to INT F8, selected automatically
  4928. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4929. SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 70
  4930. --------H-59---------------------------------
  4931. INT 59 - IRQ9 relocated by DESQview 2.26+
  4932. Range:    INT 59 to INT F9, selected automatically
  4933. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4934. SeeAlso: INT 50"DESQview",INT 58"DESQview",INT 5A"DESQview",INT 71
  4935. --------H-5A---------------------------------
  4936. INT 5A - IRQ10 relocated by DESQview 2.26+
  4937. Range:    INT 5A to INT FA, selected automatically
  4938. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4939. SeeAlso: INT 50"DESQview",INT 59"DESQview",INT 5B"DESQview",INT 72
  4940. --------H-5B---------------------------------
  4941. INT 5B - IRQ11 relocated by DESQview 2.26+
  4942. Range:    INT 5B to INT FB, selected automatically
  4943. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4944. SeeAlso: INT 50"DESQview",INT 5A"DESQview",INT 5C"DESQview",INT 73
  4945. --------H-5C---------------------------------
  4946. INT 5C - IRQ12 relocated by DESQview 2.26+
  4947. Range:    INT 5C to INT FC, selected automatically
  4948. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4949. SeeAlso: INT 50"DESQview",INT 5B"DESQview",INT 5D"DESQview",INT 74
  4950. --------H-5D---------------------------------
  4951. INT 5D - IRQ13 relocated by DESQview 2.26+
  4952. Range:    INT 5D to INT FD, selected automatically
  4953. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4954. SeeAlso: INT 50"DESQview",INT 5C"DESQview",INT 5E"DESQview",INT 75
  4955. --------H-5E---------------------------------
  4956. INT 5E - IRQ14 relocated by DESQview 2.26+
  4957. Range:    INT 5E to INT FE, selected automatically
  4958. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4959. SeeAlso: INT 50"DESQview",INT 5D"DESQview",INT 5F"DESQview",INT 76
  4960. --------H-5F---------------------------------
  4961. INT 5F - IRQ15 relocated by DESQview 2.26+
  4962. Range:    INT 5F to INT FF, selected automatically
  4963. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  4964. SeeAlso: INT 50"DESQview",INT 5E"DESQview",INT 77
  4965. --------Q-63---------------------------------
  4966. INT 63 - DESQview/X - SOCKET API
  4967. Notes:    parameters are passed by patching!! data field immediately following
  4968.       the entry point, as detailed below; the preferred method for calling
  4969.       the socket API is via INT 15/AX=DE2Eh
  4970.     the installation check consists of testing for the string "dvxunix"
  4971.       (yes, lowercase) at offset 9 from the interrupt handler start
  4972. SeeAlso: INT 15/AX=DE2Eh,INT BE"DESQview"
  4973. Index:    installation check;DESQview/X socket interface
  4974.  
  4975. Format of DESQview/X socket interrupt handler entry:
  4976. Offset    Size    Description    (Table 1959)
  4977.  00h  3 BYTEs    near jump or short jump + NOP to actual interrupt handler
  4978.  03h    WORD    offset from following pointer for initial top of local stack
  4979.  05h    DWORD    pointer to argument/stack block (see INT 15/AX=DE2Eh)
  4980.  09h  7 BYTEs    signature "dvxunix"
  4981. --------m-673F--CX5145-----------------------
  4982. INT 67 U - QEMM-386 v4.23+ - INSTALLATION CHECK
  4983.     AH = 3Fh
  4984.     CX = 5145h ("QE")
  4985.     DX = 4D4Dh ("MM")
  4986. Return: AH = 00h if installed
  4987.         ES:DI -> QEMM API entry point
  4988. Notes:    if no other program has hooked INT 67, an alternate installation
  4989.       check is to test for the string
  4990.       "QUARTERDECK EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  4991.       handler's segment; the word at offset 12h contains the offset in
  4992.       the handler's segment of the API entry point
  4993.     although this function is still undocumented, Quarterdeck has recently
  4994.       documented two alternate methods for determining the QEMM API entry
  4995.       point, as well as several of the API functions
  4996.     MICEMM (Micronics Expanded Memory Manager) versions 2.0C and 4D support
  4997.       the alternate QEMM installation check and entry point functions 00h,
  4998.       02h, and 03h; version 4D only provides the signature string if the
  4999.       commandline argument "DV" is provided
  5000.     386MAX v6.01 responds to this call, but DESQview 2.42 does not
  5001.       recognize the returned entry point as providing QEMM's capabilities
  5002.       because a) only functions 0Ch (different from QEMM 0Ch) and
  5003.             1000h-1009h are supported,
  5004.           b) status is returned as for EMS functions, not QEMM funcs
  5005.           c) the protected-mode entry point returned by function 1000h
  5006.             only supports functions 0Ch, 1004h, 1005h, and 100Ah
  5007.     the string check mentioned above is not supported by 386MAX
  5008. SeeAlso: AX=5BF0h,AH=DDh,AX=FFA5h,INT 15/AX=11DEh,INT 21/AX=4402h/SF=01h
  5009. SeeAlso: INT 21/AX=4402h"QEMM",INT 21/AX=4402h"386MAX",INT 2F/AX=D201h/BX=5145h
  5010.  
  5011. (Table 1967)
  5012. Values for calling QEMM "QPI_GetStatus" function:
  5013.     AH = 00h get QEMM state
  5014. Return: CF clear
  5015.     AL = QEMM state
  5016.         bit 0 set if QEMM turned OFF
  5017.         bit 1 set if in "Auto" mode
  5018. Note:    this function is officially documented
  5019.  
  5020. (Table 1968)
  5021. Values for calling QEMM "QPI_SetStatus" function:
  5022.     AH = 01h set QEMM state
  5023.     AL = new state
  5024.         bit 0 set: place QEMM in OFF state
  5025. Return: CF clear if successful
  5026.     CF set on error
  5027. Note:    this function is officially documented
  5028.  
  5029. (Table 1969)
  5030. Values for calling QEMM QPI function 02h:
  5031.     AH = 02h get ???
  5032. Return: CF clear
  5033.     AX = segment of ??? data structure
  5034.     Data Structure
  5035.     Offset    Size    Description
  5036.      00h    DWORD    page table entry for ???
  5037.         ???
  5038.  
  5039. (Table 1970)
  5040. Values for calling QEMM "QPI_GetVersion" function:
  5041.     AH = 03h get QEMM version
  5042. Return: CF clear
  5043.     AX = BX = version in BCD
  5044. Notes:    this function is officially documented.     The most recent official docs
  5045.       state that the version is returned in both AX and BX; older
  5046.       documentation only mentions BX
  5047.     MICEMM returns AX=0001h, BX unchanged
  5048.  
  5049. (Table 1971)
  5050. Values for calling QEMM QPI function 04h:
  5051.     AH = 04h allocate 4K page and set AUTO/ON mode
  5052. Return: CF clear if successful
  5053.         DX = page number of a 4K page
  5054.     CF set if unable to allocate page
  5055. Note:    QEMM mode unchanged if not AUTO/OFF
  5056.  
  5057. (Table 1972)
  5058. Values for calling QEMM QPI function 05h:
  5059.     AH = 05h free 4K page and turn QEMM off
  5060.     DX = page number returned by function 04h
  5061. Return: CF clear
  5062. Note:    QEMM mode unchanged if not AUTO/ON
  5063.  
  5064. (Table 1973)
  5065. Values for calling QEMM QPI function 06h:
  5066.     AH = 06h make new mapping context???
  5067.     DX = page number of 4K page to hold page table
  5068. Return: CF clear
  5069. Note:    copies page table into given page and then sets ??? page table entry
  5070.       to point at copy
  5071.  
  5072. (Table 1974)
  5073. Values for calling QEMM QPI function 07h:
  5074.     AH = 07h get mapping context
  5075. Return: CF clear
  5076.     DX = page number of page table for current mapping context
  5077.  
  5078. (Table 1975)
  5079. Values for calling QEMM QPI function 08h:
  5080.     AH = 08h set mapping context???
  5081.     DX = linear page number of page table
  5082. Return: CF clear
  5083.  
  5084. (Table 1976)
  5085. Values for calling QEMM QPI function 09h:
  5086.     AH = 09h get linear page number for page table entry
  5087.     CX = page table index
  5088. Return: CF clear
  5089.     DX = linear page number
  5090.  
  5091. (Table 1977)
  5092. Values for calling QEMM QPI function 0Ah:
  5093.     AH = 0Ah set linear page number for page table entry
  5094.     CX = page table index
  5095.     DX = linear page number
  5096. Return: CF clear
  5097.  
  5098. (Table 1978)
  5099. Values for calling QEMM QPI function 0Bh:
  5100.     AH = 0Bh map 4K pages
  5101.     BX = number of pages
  5102.     CX = first page number (must be 0100h to allocate HMA)
  5103.     DX = EMS handle (memory belonging to EMS handle will be mapped
  5104.           into the address space beginning with the first page
  5105.           allocated to the handle)
  5106. Return: AH = 00h
  5107.  
  5108. (Table 1979)
  5109. Values for calling QEMM QPI function 0Ch:
  5110.     AH = 0Ch get available memory
  5111. Return: CF clear
  5112.     BX = 0001h
  5113.     CX = total 4K pages???
  5114.     DX = number of 4K pages free
  5115.  
  5116. (Table 1980)
  5117. Values for calling QEMM QPI function 0Dh:
  5118.     AH = 0Dh CRT controller I/O port trapping
  5119.     AL = mode
  5120.         00h only trap on I/O ports 03C0h-03C5h, 03C7h, 03CAh-03CFh
  5121.         01h trap on ports 03B4h, 03B5h, 03B8h, 03C6h, 03C8h, 03C9h,
  5122.           03D4h, and 03D5h
  5123.         02h only trap on I/O ports 03C6h, 03C8h, and 03C9h
  5124. Return: CF clear
  5125.  
  5126. (Table 1981)
  5127. Values for calling QEMM QPI function 0Eh:
  5128.     AH = 0Eh set cursor virtualization callbacks
  5129.     DS:BX -> FAR routine for getting hardware cursor address
  5130.     ES:DX -> FAR routine for setting hardware cursor address
  5131. Return: CF clear
  5132. Note:    both callbacks are invoked with CL indicating which
  5133.       CRT controller register to access (0Eh for high
  5134.       byte of cursor address, 0Fh for low byte)
  5135.     the DS:BX callback should return BX=cursor address;
  5136.       ES:DX is called with BL or BH (depending on CL)
  5137.       set to the appropriate half of the cursor's address
  5138.  
  5139. (Table 1982)
  5140. Values for calling QEMM QPI function 0Fh:
  5141.     AH = 0Fh unmap 4K pages
  5142.     CX = first page number
  5143.     DX = number of pages
  5144. Return: CF clear
  5145.     AL = 00h/01h if ???
  5146. Note:    if CX=0100h and DX=0010h, the HMA is remapped to
  5147.       simulate a disabled A20
  5148.  
  5149. (Table 1983)
  5150. Values for calling QEMM QPI function 1000h:
  5151.     AX = 1000h get protected-mode interface
  5152.     DS:SI -> 16-byte buffer for two GDT entries
  5153.     ES:DI -> buffer for 4K page table
  5154. Return: CF clear
  5155.     EAX = offset of protected-mode API entry point
  5156.     DS:SI buffer filled with two GDT descriptors
  5157.         first is QEMM code segment, second is data???
  5158.     ES:DI buffer filled with 4K page table
  5159.     DI points to first unused page table entry
  5160. SeeAlso: INT 67/AX=DE01h
  5161.  
  5162. (Table 1984)
  5163. Values for calling QEMM QPI function 1001h:
  5164.     AX = 1001h get CPU debug registers
  5165.     ES:DI -> buffer for debug registers (8 DWORDs)
  5166. Return: CF clear
  5167.     BL = INT01 handling (see function 1002h)
  5168.     ES:DI buffer filled
  5169.  
  5170. (Table 1985)
  5171. Values for calling QEMM QPI function 1002h:
  5172.     AX = 1002h set CPU debug registers
  5173.     BL = INT01 handling
  5174.         00h     reflect all debugging exceptions as V86-mode INT 01's
  5175.         else convert debugging exceptions other than single-step
  5176.           into V86-mode INT 03's, single-step to INT 01's
  5177.     ES:DI -> buffer containing debug registers (8 DWORDs)
  5178. Return: CF clear
  5179. Notes:    identical to INT 67/AX=DE09h if BL=01h
  5180.     the INT01 handling flag is set to 01h by the general-protection
  5181.       violation handler for certain privileged instructions
  5182.  
  5183. (Table 1986)
  5184. Values for calling QEMM QPI function 1003h:
  5185.     AX = 1003h get machine status word CR0
  5186. Return: CF clear
  5187.     EAX = contents of CR0
  5188. SeeAlso: INT 67/AX=DE07h
  5189.  
  5190. (Table 1987)
  5191. Values for calling QEMM QPI function 1004h:
  5192.     AX = 1004h allocate a 4K page
  5193. Return: CF clear if successful
  5194.         EDX = linear address of allocated page
  5195.     CF set on error
  5196. SeeAlso: INT 67/AX=DE04h
  5197.  
  5198. (Table 1988)
  5199. Values for calling QEMM QPI function 1005h:
  5200.     AX = 1005h free 4K page
  5201.     EDX = linear address of page to free
  5202. Return: CF clear
  5203. SeeAlso: INT 67/AX=DE05h
  5204.  
  5205. (Table 1989)
  5206. Values for calling QEMM QPI function 1006h:
  5207.     AX = 1006h NOP
  5208. Return: CF set
  5209.  
  5210. (Table 1990)
  5211. Values for calling QEMM QPI function 1007h:
  5212.     AX = 1007h get maximum physical memory address
  5213. Return: CF clear
  5214.     EDX = physical address of highest 4K memory page
  5215. SeeAlso: INT 67/AX=DE02h
  5216.  
  5217. (Table 1991)
  5218. Values for calling QEMM QPI function 1008h:
  5219.     AX = 1008h get physical address of page in first megabyte
  5220.     CX = page number (linear address shifted right 12 bits)
  5221. Return: CF clear
  5222.     EDX = linear address of page
  5223. SeeAlso: function 1F00h
  5224.  
  5225. (Table 1992)
  5226. Values for calling QEMM QPI function 1009h:
  5227.     AX = 1009h switch to protected mode
  5228.     ESI = linear address in first megabyte of system reg values
  5229.           (see INT 67/AX=DE0Ch)
  5230.     interrupts disabled
  5231. Return: interrupts disabled
  5232.     GDTR, IDTR, LDTR, TR loaded
  5233.     SS:ESP must have at least 16 bytes space, and the
  5234.           entry point is required to set up a new stack
  5235.           before enabling interrupts
  5236.     EAX, ESI, DS, ES, FS, GS destroyed
  5237.  
  5238. (Table 1993)
  5239. Values for calling QEMM QPI function 100Ah:
  5240.     AX = 100Ah switch back to virtual-86 mode
  5241.     DS = selector for data segment from function 1000h
  5242.     SS:ESP in first megabyte of linear memory
  5243.     interrupts disabled
  5244.     STACK:    QWORD  return address from FAR call to 32-bit segment
  5245.         DWORD  EIP
  5246.         DWORD  CS
  5247.         DWORD  reserved for EFLAGS
  5248.         DWORD  ESP
  5249.         DWORD  SS
  5250.         DWORD  ES
  5251.         DWORD  DS
  5252.         DWORD  FS
  5253.         DWORD  GS
  5254.     will switch to virtual86 mode with interrupts disabled, all
  5255.       segment registers loaded, and EAX destroyed.
  5256.  
  5257. (Table 1994)
  5258. Values for calling QEMM QPI function 11h:
  5259.     AH = 11h get memory type map
  5260.     AL = zero/nonzero ??? (set by QEMM.COM but apparently ignored
  5261.           by QEMM 6.00)
  5262.     ES:DI -> 256-byte buffer for memory types
  5263. Return: CF clear
  5264.     BL = ???
  5265.     ES:DI buffer filled
  5266. Note:    each byte of the buffer corresponds to a 4K page, and
  5267.       contains the type of that page: 00h = mappable,
  5268.       02h = mapped ROM, 03h = high RAM, 04h = excluded,
  5269.       05h = video, 06h = ROM, 07h = adapter ROM,
  5270.       08h = split ROM, 09h = page frame, 0Ah = RAMmable,
  5271.       0Bh = conventional, 83h = high RAM under MS Windows
  5272.  
  5273. (Table 1995)
  5274. Values for calling QEMM QPI function 12h:
  5275.     AH = 12h get HIRAM chain
  5276. Return: CF clear
  5277.     BX = segment of first MCB in high memory
  5278.         0000h if no high memory
  5279.  
  5280. (Table 1996)
  5281. Values for calling QEMM QPI function 1300h:
  5282.     AX = 1300h VIDRAMEGA???
  5283.     BL = 00h copy ???
  5284.          nonzero copy ??? (reverse)
  5285. Return: CF clear
  5286.     AL = status
  5287.         00h if all pages clean
  5288.         01h if any page dirty
  5289.  
  5290. (Table 1997)
  5291. Values for calling QEMM QPI function 1301h:
  5292.     AX = 1301h check if pages modified
  5293.     DX:DI = start address of range to check
  5294.     CX = length of range in paragraphs
  5295. Return: CF clear
  5296.     CX = status
  5297.         0000h none of the indicated pages is dirty
  5298.         DI destroyed
  5299.         1000h one or more pages is dirty
  5300.         DI = low word of first dirty page's linear addr
  5301.  
  5302. (Table 1998)
  5303. Values for calling QEMM QPI function 1302h:
  5304.     AX = 1302h ???
  5305.     BL = ???
  5306.     BH = ???
  5307.     CX = ???
  5308.     SI = offset of ???
  5309.     DI = offset of ???
  5310.     ???
  5311. Return: CF clear
  5312.     ???
  5313. Note:    disables certain interrupts at the two 8259 PICs during
  5314.       execution; also modifies CRT controller during
  5315.       execution under certain circumstances
  5316.  
  5317. (Table 1999)
  5318. Values for calling QEMM QPI function 1303h:
  5319.     AX = 1303h initialize EGA graphics virtualization
  5320.     BX = number of pages (less 1) of EMS to allocate
  5321. Return: CF clear if successful
  5322.         DX = EMS handle
  5323.     CF set on error
  5324.  
  5325. (Table 2000)
  5326. Values for calling QEMM QPI function 1304h:
  5327.     AX = 1304h shutdown EGA graphics virtualization
  5328.     DX = EMS handle being used for virtualization
  5329. Return: CF clear
  5330.  
  5331. (Table 2001)
  5332. Values for calling QEMM QPI function 1305h:
  5333.     AX = 1305h select portion of EGA graphics to virtualize???
  5334.     (related to graphics virtualization, changes memory mappings)
  5335.     CX = start offset within A000h segment of virtualized mem???
  5336. Return: CF clear
  5337. Note:    disables certain interrupts at the two 8259 PICs during
  5338.       execution (see func 130Ch) and runs inside a QEMM
  5339.       critical section
  5340.  
  5341. (Table 2002)
  5342. Values for calling QEMM QPI function 1306h:
  5343.     AX = 1306h set DESQview critical section counter address
  5344.     ES:BX -> WORD DESQview critical section counter or 0000h:0000h
  5345. Return: CF clear
  5346. Note:    also sets a pointer in the low-memory part of QEMM to
  5347.       the current value of INT 15 if ES:BX not 0000h:0000h
  5348.  
  5349. (Table 2003)
  5350. Values for calling QEMM QPI function 1307h:
  5351.     AX = 1307h ??? (changes memory mappings for entire A000h segment)
  5352. Return: CF clear
  5353. Note:    disables certain interrupts at the two 8259 PICs during
  5354.       execution (see func 130Ch) and runs inside a QEMM
  5355.       critical section
  5356.  
  5357. (Table 2004)
  5358. Values for calling QEMM QPI function 1308h:
  5359.     AX = 1308h start/reset CRT controller I/O trapping
  5360.     BL = subfunction
  5361.         00h restore CRTC I/O port trapping to previous state
  5362.         else start trapping all accesses to I/O ports 03B0-03DF
  5363. Return: CF clear
  5364. Note:    if called more than once in a row with BL nonzero, the
  5365.       original state of the I/O port trapping will be lost
  5366.  
  5367. (Table 2005)
  5368. Values for calling QEMM QPI function 1309h:
  5369.     AX = 1309h Hercules mode-change support
  5370.     ES:BX -> new address for Hercules mode-change callback
  5371. Return: CF clear
  5372. Note:    the callback function is called whenever the CRTC mode
  5373.       register is written, with AL set to the value written
  5374.  
  5375. (Table 2006)
  5376. Values for calling QEMM QPI function 130Ah:
  5377.     AX = 130Ah virtualize EGA/VGA DAC registers (I/O ports 03C8h/03C9h)
  5378.     CX:DX -> DAC register virtualization buffer (see #2088)
  5379.         or 0000h:0000h to disable
  5380. Return: CF clear
  5381.  
  5382. (Table 2007)
  5383. Values for calling QEMM QPI function 130Bh:
  5384.     AX = 130Bh ???
  5385.     BL = ??? (??? or 00h)
  5386. Return: CF clear
  5387.     ???
  5388. Note:    calls AX=130Eh in some cases
  5389.  
  5390. (Table 2008)
  5391. Values for calling QEMM QPI function 130Ch:
  5392.     AX = 130Ch set interrupts to mask
  5393.     BX = interrupts to mask out during AX=1302h,AX=1307h,AX=1308h,
  5394.           AX=130Dh,AX=1310h (BL = master PIC, BH = slave PIC)
  5395. Return: CF clear
  5396.  
  5397. (Table 2009)
  5398. Values for calling QEMM QPI function 130Dh:
  5399.     AX = 130Dh map EGA memory at A0000h
  5400.     ???
  5401. Return: CF clear
  5402. Note:    disables certain interrupts at the two 8259 PICs during execution
  5403.       (see #2008) and runs inside a QEMM critical section
  5404.     calls AX=1307h (see #2003)
  5405.  
  5406. (Table 2010)
  5407. Values for calling QEMM QPI function 130Eh:
  5408.     AX = 130Eh ??? (modifies CRT controller setup)
  5409.     ???
  5410. Return: CF clear
  5411.  
  5412. (Table 2011)
  5413. Values for calling QEMM QPI function 130Fh:
  5414.     AX = 130Fh reset ???
  5415. Return: CF clear
  5416.  
  5417. (Table 2012)
  5418. Values for calling QEMM QPI function 1310h:
  5419.     AX = 1310h copy modified pages to physical video RAM???
  5420.     ???
  5421. Return: CF clear
  5422. Note:    disables certain interrupts at the two 8259 PICs during execution
  5423.       (see #2008) and runs inside a QEMM critical section
  5424.     also calls AX=130Dh (see #2009)
  5425.  
  5426. (Table 2013)
  5427. Values for calling QEMM QPI function 1311h:
  5428.     AX = 1311h set ???
  5429.     BL = zero/nonzero???
  5430. Return: CF clear
  5431. Note:    certain operations will be performed with interrupts
  5432.       (as set by AX=130Ch) enabled rather than disabled if
  5433.       called with BL nonzero
  5434.  
  5435. (Table 2014)
  5436. Values for calling QEMM QPI function 1312h:
  5437.     AX = 1312h (v6.02) NOP???
  5438. Note:    called by DV 2.42, but appears to be a NOP in QEMM 6.02
  5439.  
  5440. (Table 2015)
  5441. Values for calling QEMM QPI function 1400h:
  5442.     AX = 1400h initialize DESQview "protection level" support
  5443.     ES:DI -> protection level configuration (at least 24 bytes)
  5444.         (see #2082)
  5445.     BL = highest ??? to return (one less than number of words)
  5446. Return: CF clear
  5447.     AX = ??? (4204h for v6.00)
  5448. Note:    QEMM also sets the protected mode INT 02 and INT 06
  5449.       vectors to alternate handlers in certain cases
  5450.  
  5451. (Table 2016)
  5452. Values for calling QEMM QPI function 1401h:
  5453.     AX = 1401h turn off DESQview protection level support
  5454.         Return: CF clear
  5455.             ???
  5456.         Notes:    clears the DV critical-section flag address set with
  5457.               function 1306h
  5458.             QEMM also sets the protected mode INT 02 and INT 06
  5459.               vectors to the default handlers if they had been
  5460.               revectored by function 1400h
  5461.  
  5462. (Table 2017)
  5463. Values for calling QEMM QPI function 1402h:
  5464.     AX = 1402h set protection level???
  5465.         BL = protection level???
  5466.             00h NOP
  5467.             01h ???
  5468.             02h ???
  5469.             other (03h) ???
  5470.         ES:DI -> ???
  5471.         Return: CF clear
  5472.             ???
  5473.         Format of Data structure:
  5474.         Offset    Size    Description
  5475.          00h    WORD    segment of ??? (X, word at X:0136h set to X)
  5476.          02h    WORD    segment of ??? (word at X:0124h set to this)
  5477.          04h    WORD    number of paragraphs of ???
  5478.          06h  3 WORDs    ??? (copied to X:0000h)
  5479.          0Ch    WORD    ???
  5480.  
  5481. (Table 2018)
  5482. Values for calling QEMM QPI function 1403h:
  5483.     AX = 1403h add ??? to end of list and ??? (execute func 1406h)
  5484.         ES:DI -> ??? structure added to end of ??? list
  5485.             (at least 31 bytes, DWORD at offset 06h used for
  5486.              storing pointer to next struc, WORD at offset 00h
  5487.              seems to be a key or index)
  5488.         Return: CF clear
  5489.  
  5490. (Table 2019)
  5491. Values for calling QEMM QPI function 1404h:
  5492.     AX = 1404h NOP
  5493.         Return: CF clear
  5494.  
  5495. (Table 2020)
  5496. Values for calling QEMM QPI function 1405h:
  5497.     AX = 1405h remove ??? from ??? list
  5498.         BX = key???
  5499.         Return: CF clear
  5500.  
  5501. (Table 2021)
  5502. Values for calling QEMM QPI function 1406h:
  5503.     AX = 1406h ???
  5504.         ???
  5505.         Return: CF clear
  5506.             ???
  5507.         Notes:    this function is a NOP unless protection level 2 or 3
  5508.               is active
  5509.             when not a NOP, one of the actions is to write-protect
  5510.               certain memory pages
  5511.  
  5512. (Table 2022)
  5513. Values for calling QEMM QPI function 1407h:
  5514.     AX = 1407h ???
  5515.         ???
  5516.         Return: CF clear
  5517.             ???
  5518.         Note:    same as function 1406h, but only does anything if
  5519.               protection level 2 is active
  5520.  
  5521. (Table 2023)
  5522. Values for calling QEMM QPI function 1408h:
  5523.     AX = 1408h unprotect???
  5524.         ???
  5525.         Return: CF clear
  5526.             ???
  5527.  
  5528. (Table 2024)
  5529. Values for calling QEMM QPI function 1409h:
  5530.     AX = 1409h abort program causing protection violation???
  5531.         ???
  5532.         Return: CF clear
  5533.             ???
  5534.  
  5535. (Table 2025)
  5536. Values for calling QEMM QPI function 140Ah:
  5537.     AX = 140Ah set ???
  5538.         BX = index of ???
  5539.         Return: CF clear
  5540.             ???
  5541.         Notes:    no range checking is performed on BX
  5542.             this function is a NOP unless protection level 3 active
  5543.  
  5544. (Table 2026)
  5545. Values for calling QEMM QPI function 140Bh:
  5546.     AX = 140Bh get ???
  5547.         BX = index of ???
  5548.         SI = 0000h
  5549.         Return: CF clear
  5550.             SI = segment of 256-byte buffer??? or 0000h
  5551.         Notes:    no range checking is performed on BX
  5552.             this function is a NOP unless protection level 3 active
  5553.  
  5554. (Table 2027)
  5555. Values for calling QEMM QPI function 15h:
  5556.     AH = 15h set timer channel 0 virtualization buffer
  5557.         ES:BX -> WORD buffer for timer channel 0 divisor
  5558.             0000h:0000h to disable virtualization
  5559.         Return: CF clear
  5560.  
  5561. (Table 2028)
  5562. Values for calling QEMM v5.00+ QPI function 1600h:
  5563.     AX = 1600h get memory access status
  5564.         ES:DI -> 256-byte buffer
  5565.         Return: ES:DI buffer filled
  5566.         Note:    each byte of the buffer indicates the status of a 4K
  5567.               page (bit 0 set if read, bit 1 set if written)
  5568.  
  5569. (Table 2029)
  5570. Values for calling QEMM v5.00+ QPI function 1601h:
  5571.     AX = 1601h set memory access status
  5572.         ES:DI -> 256-byte buffer containing access statuses (see above)
  5573.  
  5574. (Table 2030)
  5575. Values for calling QEMM v5.00+ QPI function 17h:
  5576.     AH = 17h get memory usage statistics
  5577.         ES:DI -> 81-byte buffer for memory statistics (see #2086)
  5578.         Return: CF clear
  5579.  
  5580. (Table 2031)
  5581. Values for calling QEMM v5.11+ QPI function 18h:
  5582.     AH = 18h check whether conventional memory mapped into address range
  5583.         ES:BX = starting address
  5584.         CX = number of 4K pages
  5585.         Return: CF clear
  5586.             AL = 00h one or more pages is remapped
  5587.                  01h all pages in range are conventional memory
  5588.                 (physical address == virtual address)
  5589.  
  5590. (Table 2032)
  5591. Values for calling QEMM v5.11+ QPI function 19h:
  5592.     AH = 19h NOP
  5593.         Return: CF set
  5594.  
  5595. (Table 2033)
  5596. Values for calling QEMM v5.11+ "QPI_UntrappedIORead" function:
  5597.     AX = 1A00h get byte from I/O port
  5598.     DX = port number
  5599. Return: CF clear
  5600.     BL = port value
  5601. Note:    this function was officially documented with the release of QEMM 7.50
  5602.  
  5603. (Table 2034)
  5604. Values for calling QEMM v5.11+ "QPI_UntrappedIOWrite" function:
  5605.     AX = 1A01h send byte to I/O port
  5606.     BL = value to send
  5607.     DX = port number
  5608. Return: CF clear
  5609. Note:    this function was officially documented with the release of QEMM 7.50
  5610.  
  5611. (Table 2035)
  5612. Values for calling QEMM v5.11+ "QPI_UntrappedIOReadIndexed" function:
  5613.     AX = 1A02h
  5614.     BH = index value to send
  5615.     DX = base port number
  5616. Return: CF clear
  5617.     BL = value read from I/O port (DX+1)
  5618. Note:    this function was officially documented with the release of QEMM 7.50
  5619.  
  5620. (Table 2036)
  5621. Values for calling QEMM v5.11+ "QPI_UntrappedIOWriteIndexed" function:
  5622.     AX = 1A03h send bytes to two consecutive I/O ports
  5623.     BH = value for first I/O port (DX)
  5624.     BL = value for second I/O port (DX+1)
  5625.     DX = base port number
  5626. Return: CF clear
  5627. Note:    this function was officially documented with the release of QEMM 7.50
  5628.  
  5629. (Table 2037)
  5630. Values for calling QEMM v7.03+ "QPI_UntrappedIO" function:
  5631.     AX = 1A04h
  5632.     BX = value to write to port
  5633.     CX = direction and size
  5634.         bit 2: output instead of input
  5635.         bit 3: word instead of byte
  5636.     DX = I/O port to be accessed
  5637. Return: CF clear
  5638.     BX = value read (if CX indicates read)
  5639. Note:    this function was officially documented with the release of QEMM 7.50
  5640.  
  5641. (Table 2038)
  5642. Values for calling QEMM v7.03+ function 1A05h
  5643.     AX = 1A05h
  5644.     ???
  5645. Return: ???
  5646.  
  5647. (Table 2039)
  5648. Values for calling QEMM v7.03+ "QPI_GetIOCallback" function:
  5649.     AX = 1A06h
  5650. Return: CF clear
  5651.     ES:DI -> current I/O callback function
  5652. Note:    this function was officially documented with the release of QEMM 7.50
  5653.  
  5654. (Table 2040)
  5655. Values for calling QEMM v7.03+ "QPI_SetIOCallback" function:
  5656.     AX = 1A07h
  5657.     ES:DI -> new I/O callback function
  5658. Return: CF clear
  5659. Note:    this function was officially documented with the release of QEMM 7.50
  5660.  
  5661. (Table 2041)
  5662. Values for calling QEMM v7.03+ "QPI_GetPortTrap" function:
  5663.     AX = 1A08h
  5664.     DX = I/O port number
  5665. Return: CF clear
  5666.     BL = trapping state (00h not being trapped, 01h trap installed)
  5667. Note:    this function was officially documented with the release of QEMM 7.50
  5668.  
  5669. (Table 2042)
  5670. Values for calling QEMM v7.03+ "QPI_SetPortTrap" function:
  5671.     AX = 1A09h
  5672.     DX = I/O port number
  5673. Return: CF clear
  5674. Note:    this function was officially documented with the release of QEMM 7.50
  5675.  
  5676. (Table 2043)
  5677. Values for calling QEMM v7.03+ "QPI_ClearPortTrap" function:
  5678.     AX = 1A0Ah
  5679.     DX = I/O port number
  5680. Return: CF clear
  5681. Note:    this function was officially documented with the release of QEMM 7.50
  5682.  
  5683. (Table 2044)
  5684. Values for calling QEMM v5.11+ QPI function 1B00h:
  5685.     AX = 1B00h get EMM Import Structure address
  5686.     ES:DI -> buffer for EMM import data structure (see #2084)
  5687. Return: CF set on error
  5688.     CF clear if successful
  5689. SeeAlso: INT 21/AX=4402h/SF=01h
  5690.  
  5691. (Table 2045)
  5692. Values for calling QEMM v5.11+ QPI function 1B01h:
  5693.     AX = 1B01h disable V86 mode
  5694. Return: CF set on error
  5695.         (i.e. no Global EMM Import rec. allocated)
  5696.     CF clear if successful
  5697. Note:    shuts down EMS and initializes Global EMM Import record; this function
  5698.       is invoked from the callback supplied by INT 2F/AX=1605h
  5699.  
  5700. (Table 2046)
  5701. Values for calling QEMM v5.11+ QPI function 1B02h:
  5702.     AX = 1B02h enable V86 mode
  5703. Return: CF set on error
  5704.     CF clear if successful
  5705. Note:    restarts EMS and frees Global EMM Import record; this function is
  5706.       invoked from the callback supplied by INT 2F/AX=1605h
  5707.  
  5708. (Table 2047)
  5709. Values for calling QEMM v5.11+ QPI function 1B03h:
  5710.     AX = 1B03h MS Windows initializing
  5711.     CX = segment from which Windows init broadcast made???
  5712.     DX = Windows startup flags
  5713.     DI = Windows version number (major in upper byte)
  5714. Return: CF clear if successful
  5715.         DS:SI -> V86 mode enable/disable callback (see INT 2F/AX=1605h)
  5716.         ES:BX -> startup info structure (see INT 2F/AX=1605h)
  5717.     CF set on error (unable to start Windows)
  5718. SeeAlso: INT 2F/AX=1605h
  5719.  
  5720. (Table 2048)
  5721. Values for calling QEMM v5.11+ QPI function 1B04h:
  5722.     AX = 1B04h MS Windows terminating
  5723. Return: CF clear
  5724.  
  5725. (Table 2049)
  5726. Values for calling QEMM v5.11+ QPI function 1B05h:
  5727.     AX = 1B05h determine whether program is driver
  5728.     DS:DX -> ASCIZ filename
  5729. Return: CF clear
  5730.     AL = status
  5731.         01h if string ends in ".DRV"
  5732.         FFh if string ends in "GDI.EXE"
  5733.         00h otherwise
  5734. Note:    when MS Windows 3.0 standard mode starts, QEMM patches all drivers
  5735.       until GDI.EXE is loaded
  5736.  
  5737. (Table 2050)
  5738. Values for calling QEMM v5.11+ QPI function 1B06h:
  5739.     AX = 1B06h patch protected-mode check in Windows driver
  5740.     CX = length of data pointed at by DS:DX
  5741.     DS:DX -> buffer containing Windows driver code
  5742. Return: CF clear
  5743. Note:    patches all SMSW x/TEST x,1 instruction sequences into MOV x,CS/VERW x
  5744.       sequences, which has the effect that the protected-mode check will
  5745.       only indicate protected mode in native protected mode and not in V86
  5746.       mode
  5747.  
  5748. (Table 2051)
  5749. Values for calling QEMM v5.11+ QPI function 1B07h:
  5750.     AX = 1B07h
  5751. BUG: QEMM 6.00-7.01 accept this and branch randomly
  5752.  
  5753. (Table 2052)
  5754. Values for calling QEMM v5.11+ QPI function 1Bxxh:
  5755.     AX = 1B08h to 1BFFh
  5756. Return: CF set
  5757.  
  5758. (Table 2053)
  5759. Values for calling QEMM v5.11+ QPI function 1C00h:
  5760.     AX = 1C00h disable IRQ0-7 calldowns
  5761. Return: CF clear
  5762.  
  5763. (Table 2054)
  5764. Values for calling QEMM v5.11+ QPI function 1C01h:
  5765.     AX = 1C01h set V86-mode IRQ0-7 handlers
  5766.     ES:DI -> 8 DWORDs containing V86-mode handler addresses
  5767. Return: CF clear
  5768.  
  5769. (Table 2055)
  5770. Values for calling QEMM v5.11+ QPI function 1C02h:
  5771.     AX = 1C02h disable IRQ8-15 handlers
  5772. Return: CF clear
  5773.  
  5774. (Table 2056)
  5775. Values for calling QEMM v5.11+ QPI function 1C03h:
  5776.     AX = 1C03h set V86-mode IRQ8-15 handlers
  5777.     ES:DI -> 8 DWORDs containing V86-mode handler addresses
  5778. BUG:    although the jump table only contains four entries, QEMM 6.00 will
  5779.       attempt to use it for any value of AL between 00h and 2Ah, thus
  5780.       branching unpredictably for AL=04h-2Ah; QEMM v7.01 behaves
  5781.       similarly for AL=04h-1Bh
  5782. Note:    when enabled, the appropriate IRQs are reflected back to the specified
  5783.       handlers in virtual-86 mode after the CPU automatically invokes the
  5784.       protected-mode handler inside QEMM
  5785.  
  5786. (Table 2057)
  5787. Values for calling QEMM v7.03+ "QPI_SimulateHWInt" function:
  5788.     AX = 1C04h
  5789.     BX = number of interrupt to simulate
  5790. Return: ???
  5791. Notes:    this function will allow proper simulation of a hardware interrupt
  5792.       under DESQview and DESQview/X, where the correct interrupt handler
  5793.       may be in a different process with a completely different address
  5794.       space
  5795.     this function was officially documented with the release of QEMM v7.50
  5796.  
  5797. (Table 2058)
  5798. Values for calling QEMM v6.00+ QPI function 1D00h:
  5799.     AX = 1D00h switch to pre-Stealth interrupt vector table
  5800. Return: CF clear if supported (QEMM v6.x)
  5801.     CF set if not supported (QEMM v7+)
  5802. Notes:    also switches VGA Save table pointer
  5803.       (0040h:00A8h) and overwrites the vectors
  5804.       currently assigned for use by the two
  5805.       interrupt controllers (see INT 67/AX=DE0Ah)
  5806.       with the vectors for INT 08-0F and 70-77 (to
  5807.       avoid crashing the system).
  5808.     functions 1Dxxh are not supported by QEMM v7.01, and always return CF
  5809.       set
  5810.  
  5811. (Table 2059)
  5812. Values for calling QEMM v6.00+ QPI function 1D01h:
  5813.     AX = 1D01h restore user interrupt vector table
  5814. Return: CF clear if supported (QEMM v6.x)
  5815.     CF set if not supported (QEMM v7+)
  5816. Notes:    interrupts should be disabled around the
  5817.       AX=1D00h and AX=1D01h calls because QEMM does
  5818.       not modify the memory maps to map in ROM, so
  5819.       an interrupt could be disastrous
  5820.     clears any pending IRQ7 at end of function
  5821.     functions 1Dxxh are not supported by QEMM v7.01, and always return CF
  5822.       set
  5823.  
  5824. (Table 2060)
  5825. Values for calling QEMM v6.00+ QPI function 1Dxxh:
  5826.     AX = 1D02h to 1DFFh
  5827. Return: CF set
  5828.  
  5829. (Table 2061)
  5830. Values for calling QEMM v6.00+ "QEMM_GET_INFO"/"QPI_GetInfo" function:
  5831.     AX = 1E00h get Stealth configuration
  5832. Return:    CF clear
  5833.     BL = memory configuration flags (documented as "reserved") (see #2085)
  5834.     BH = (v7.00+) disk buffer flags
  5835.         bit 0: DISKBUFFRAME buffer instead of DISKBUF buffer
  5836.         bit 1: buffer has already been used
  5837.     CL = stealth type (00h none, 46h Frame, 4Dh Map, 50h Protect)
  5838.     CH = suspend/resume interrupt (00h none)
  5839.     DL = (v7.00+) size of QEMM disk buffer in KB (00h none)
  5840.     DH = reserved (always 00h for v6.00)
  5841.     SI = reserved (always 0000h for v6.00)
  5842.     DI = reserved (always 0000h for v6.00)
  5843. Note:    this function is officially documented
  5844.  
  5845. (Table 2062)
  5846. Values for calling QEMM v6.00+ "QPI_GetStealthCount" function:
  5847.     AX = 1E01h get number of Stealth'ed ROMs
  5848. Return: CF clear
  5849.     BX = number of Stealth'ed ROMs
  5850. Note:    this function is officially documented
  5851.  
  5852. (Table 2063)
  5853. Values for calling QEMM v6.00+ "QPI_GetStealthList" function:
  5854.     AX = 1E02h
  5855.     ES:DI -> buffer for Stealth ROM info (see #2087)
  5856. Return: CF clear
  5857.     BX = number of Stealth'ed ROMs
  5858.     ES:DI buffer filled
  5859. Note:    this function is officially documented
  5860.  
  5861. (Table 2064)
  5862. Values for unimplemented Stealth information functions:
  5863.     AX = 1E03h to 1EFFh
  5864. Return: CF set
  5865.  
  5866.  
  5867. (Table 2065)
  5868. Values for calling QEMM v6.00+ "QEMM_GET_PTE"/"QPI_GetPTE" function:
  5869.     AX = 1F00h get page table entry
  5870.     CX = page number (0000h-010Fh)
  5871. Return:    CF clear
  5872.     EDX = page table entry
  5873. Note:    this function is officially documented
  5874.  
  5875. (Table 2066)
  5876. Values for calling QEMM v6.00+ "QEMM_SET_PTE"/"QPI_SetPTE" function:
  5877.     AX = 1F01h set page table entry
  5878.     CX = page number (0000h-010Fh)
  5879.     EDX = new page table entry
  5880. Return: CF clear
  5881. Note:    this function is officially documented
  5882. SeeAlso: function 1008h
  5883.  
  5884. (Table 2067)
  5885. Values for calling QEMM v6.00+ QPI function 1Fxxh:
  5886.     AX = 1F02h to 1FFFh
  5887. Return: CF set
  5888.  
  5889. (Table 2068)
  5890. Values for calling QEMM v6.00+ "QEMM_GET_VHI_INFO"/"QPI_GetVHIInfo" function:
  5891.     AX = 2000h "QEMM_GET_VHI_INFO" get VirtualHDIRQ information
  5892. Return: CF clear
  5893.     BL = flags
  5894.         bit 7: VirtualHDIRQ setting respected
  5895.           (set if Stealth active)
  5896.         bits 6-1 reserved
  5897.         bit 0: VirtualHDIRQ currently enabled
  5898.         (INT 15/AH=90h suppressed when enabled)
  5899. Note:    this function is officially documented
  5900. SeeAlso: #2069
  5901.  
  5902. (Table 2069)
  5903. Values for calling QEMM v6.00+ "QEMM_SET_VHI_INFO"/"QPI_SetVHIInfo" function:
  5904.     AX = 2001h set VirtualHDIRQ state
  5905.     BL bit 0 = new VirtualHDIRQ state
  5906. Return: CF clear
  5907.     BL = old VHI setting (bits 0 and 7, see #2068)
  5908. Note:    this function is officially documented
  5909. SeeAlso: #2068
  5910.  
  5911. (Table 2070)
  5912. Values for calling QEMM v6.00+ QPI function 20xxh:
  5913.     AX = 2002h to 20FFh
  5914. Return: CF set
  5915.  
  5916. (Table 2071)
  5917. Values for calling QEMM v6.00+ "QEMM_COPY_STEALTH_ROMS"/"QPI_CopyStealthRoms":
  5918.     AX = 2100h copy data from Stealthed address space
  5919.     DS:SI -> start address of hidden memory to copy
  5920.     ES:DI -> buffer for copied data
  5921.     ECX = number of bytes to copy
  5922. Return: CF clear if successful
  5923.     CF set on error (no Stealth or DS:SI < C000h:0000h or DS:SI + ECX > 1M)
  5924. Note:    this function was officially documented with the release of QEMM 7.50
  5925.  
  5926. (Table 2072)
  5927. Values for calling QEMM v6.00+ QPI function 21xxh:
  5928.     AX = 2101h to 21FFh
  5929. Return: CF set
  5930.  
  5931. (Table 2073)
  5932. Values for calling QEMM v6.03+ QPI function 2200h:
  5933.     AX = 2200h DESQview/X support -- get ???
  5934. Return: CF clear
  5935.     ES:DI -> ???
  5936.  
  5937. (Table 2074)
  5938. Values for calling QEMM v6.03+ QPI function 2201h:
  5939.     AX = 2201h DESQview/X support -- set ???
  5940.     ES:DI -> ??? or 0000h:0000h
  5941. Return: CF clear if successful
  5942.     CF set on error
  5943.  
  5944. (Table 2075)
  5945. Values for calling QEMM v6.04+ QPI function 2300h:
  5946.     AX = 2300h get ???
  5947.     BX = which ??? to get (must be 0000h for v6.04)
  5948. Return: CF clear if successful
  5949.         ES:DI -> ???
  5950.     CF set on error
  5951.  
  5952. (Table 2076)
  5953. Values for calling QEMM v6.04+ QPI function 2301h:
  5954.     AX = 2301h set ???
  5955.     BX = which ??? to set (must be 0000h for v6.04)
  5956.     ES:DI -> ???
  5957. Return: CF clear if successful
  5958.     CF set on error
  5959.  
  5960. (Table 2077)
  5961. Values for calling QEMM v6.04+ QPI function 2302h:
  5962.     AX = 2302h clear specified ???
  5963.     BX = which ??? to clear (must be 0000h for v6.04)
  5964. Return: CF clear if successful
  5965.     CF set on error
  5966.  
  5967. (Table 2078)
  5968. Values for calling QEMM v6.04+ QPI function 23FFh:
  5969.     AX = 23FFh clear all ???
  5970. Return: CF clear if successful
  5971.     CF set on error
  5972.  
  5973. (Table 2079)
  5974. Values for calling QEMM v6.04+ QPI function 23xxh:
  5975.     AX = 2303h to 23FEh
  5976. Return: CF set
  5977.  
  5978. (Table 2080)
  5979. Values for calling QEMM v7.01+ QPI function 24h:
  5980.     AH = 24h ST-DBL support
  5981.     AL = subfunction
  5982.         00h set ???
  5983.         EDX -> information table (EDX = segment SHL 16 + offset)
  5984.         01h ???
  5985. Return: CF clear if successful
  5986.     CF set on error
  5987.  
  5988. (Table 2081)
  5989. Values for calling QEMM unimplemented QPI functions:
  5990.     AH = 25h to FFh
  5991. Return: CF set
  5992.  
  5993. Format of QEMM protection level configuration:
  5994. Offset    Size    Description    (Table 2082)
  5995.  00h    WORD    segment of 128 breakpoint (INT 3) instructions for use in
  5996.           DESQview protection level 3 interrupt vector checking, or
  5997.           0000h to disable; in pl3, INTs 00-7F are pointed at these
  5998.           breakpoints
  5999.  02h    DWORD    -> array of actual interrupt handler addresses for INT 00-7F
  6000.           when interrupt vectors are pointed at protection level 3
  6001.           breakpoints
  6002.  06h    DWORD    far pointer to ??? region list (see #2083)
  6003.  0Ah    DWORD    far pointer to buffer for returned ???
  6004.  0Eh    DWORD    seg:ofs of function to call on protection violation???
  6005.  12h    WORD    segment of ???
  6006.  14h    DWORD    far pointer to DWORD containing number of paragraphs of
  6007.           ??? for segment at offset 12h
  6008.     ???
  6009.  
  6010. Format of protection level Region List:
  6011. Offset    Size    Description    (Table 2083)
  6012.  00h    WORD    number of PAIRS of pointers to follow
  6013.  02h 2N DWORDs    start/end seg:ofs addresses of ??? regions
  6014. Note:    QEMM converts the segmented addresses into linear addresses in place
  6015.  
  6016. Format of EMM Import structure:
  6017. Offset    Size    Description    (Table 2084)
  6018.  00h    DWORD    physical address of EMM import struct
  6019.  04h    BYTE    major version (v6.00 sets to 01h)
  6020.  05h    BYTE    minor version (v6.00 sets to 00h/0Bh)
  6021. SeeAlso: INT 21/AX=4402h/SF=01h
  6022.  
  6023. Bitfields for memory configuration flags:
  6024. Bit(s)    Description    (Table 2085)
  6025.  0    conventional memory sorted
  6026.  1    conventional memory filled
  6027.  2    ???
  6028.  3    ???
  6029.  4    expanded memory is in use
  6030.  5    ???
  6031.  
  6032. Format of QEMM 6.0 memory statistics:
  6033. Offset    Size    Description    (Table 2086)
  6034.  00h    BYTE    01h if Shadow RAM found, 00h otherwise
  6035.  01h    DWORD    initial conventional memory in bytes
  6036.  05h    DWORD    initial extended memory in bytes
  6037.  09h    DWORD    initial expanded memory in bytes
  6038.  0Dh    DWORD    initial "top" or "shadow" memory in bytes
  6039.  11h    DWORD    Unavailable conventional memory in bytes
  6040.  15h    DWORD    Unavailable extended memory in bytes
  6041.  19h    DWORD    Unavailable expanded memory in bytes
  6042.  1Dh    DWORD    Unavailable "top" or "shadow" memory in bytes
  6043.         Add to offset 49h for Total unavailable top/shadow.
  6044.  21h    DWORD    QEMM code size in bytes
  6045.  25h    DWORD    QEMM data size in bytes
  6046.  29h    DWORD    bytes used for TASKS=
  6047.  2Dh    DWORD    DMA buffer size
  6048.  31h    DWORD    bytes used for MAPS=
  6049.  35h    DWORD    bytes of high RAM
  6050.  39h    DWORD    bytes used by mapped ROMs
  6051.  3Dh    DWORD    bytes of conventional memory provided by QEMM
  6052.  41h    DWORD    bytes of extended memory NOT converted by QEMM (EXT=xxx)
  6053.  45h    DWORD    bytes of EMS/XMS pool memory provided by QEMM
  6054.  49h    DWORD    Unavailable "top" or "shadow" memory in bytes
  6055.         Add to offset 1Dh for Total unavailable top/shadow.
  6056.  4Dh    DWORD    conventional memory overhead in bytes
  6057.         (set to 0 by QEMM.COM prior to call)
  6058.  
  6059. Format of Stealth ROM info [array]:
  6060. Offset    Size    Description    (Table 2087)
  6061.  00h    WORD    starting segment of ROM
  6062.  02h    WORD    length of ROM in paragraphs
  6063.  
  6064. Format of QEMM EGA/VGA DAC register virtualization buffer:
  6065. Offset    Size    Description    (Table 2088)
  6066.  00h    BYTE    (temp) current color register number
  6067.  01h    BYTE    (temp) number of bytes written so far for current color reg
  6068.  02h 768 BYTEs    three bytes per color register
  6069. --------m-6744-------------------------------
  6070. INT 67 - LIM EMS - MAP MEMORY
  6071.     AH = 44h
  6072.     AL = physical page number (0-3)
  6073.     BX = logical page number
  6074.         or FFFFh to unmap (QEMM)
  6075.     DX = handle
  6076. Return: AH = status (00h,80h,81h,83h,84h,8Ah,8Bh) (see #2089)
  6077. SeeAlso: AH=69h
  6078. --------m-676B-------------------------------
  6079. INT 67 - DESQview 2.42-2.53 - BUG
  6080.     AH = 6Bh
  6081. Note:    the EMM.DVR portion of DESQview branches to a random location on this
  6082.       function due to a fencepost error
  6083. --------E-67DE01-----------------------------
  6084. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  6085.     AX = DE01h
  6086.     ES:DI -> 4K page table buffer
  6087.     DS:SI -> three descriptor table entries in GDT
  6088.         first becomes code segment descriptor, other two for use by
  6089.           main control program
  6090. Return: AH = 00h successful
  6091.         DI -> first unused page table entry in buffer
  6092.         EBX -> protected mode entry point in code segment
  6093.     AH = nonzero  failed
  6094. Note:    protected mode entry point may be called with AX=DE00h-DE05h and
  6095.       AX=DE0Ch (in each case, all other registers as appropriate for
  6096.       the function)
  6097. SeeAlso: INT 2F/AX=1687h,INT 67/AH=3Fh
  6098.  
  6099. (Table 2105)
  6100. Call QEMM v6.03 protected mode entry point additionally with:
  6101.     AX = DF00h ???
  6102.         ???
  6103.         Return: ???
  6104.     AX = DF01h ???
  6105.         ???
  6106.         Return: ???
  6107. --------H-71---------------------------------
  6108. INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
  6109. Notes:    may be masked by setting bit 1 on I/O port A1h
  6110.     the default BIOS handler invokes INT 0A for compatibility, since the
  6111.       pin for IRQ2 on the PC expansion bus became the pin for IRQ9 on the
  6112.       AT expansion bus.
  6113.     under DESQview, only the INT 15h vector and BASIC segment address (the
  6114.       word at 0000h:0510h) may be assumed to be valid for the handler's
  6115.       process
  6116. SeeAlso: INT 0A,INT 59
  6117. --------H-74---------------------------------
  6118. INT 74 - IRQ12 - POINTING DEVICE (PS)
  6119. Notes:    may be masked by setting bit 4 on I/O port A1h
  6120.     under DESQview, only the INT 15h vector and BASIC segment address (the
  6121.       word at 0000h:0510h) may be assumed to be valid for the handler's
  6122.       process
  6123. SeeAlso: INT 33,INT 5C
  6124. --------H-75---------------------------------
  6125. INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
  6126. Desc:    redirected to INT 02 by the BIOS, for compatibility with the PC
  6127. Notes:    may be masked by setting bit 5 on I/O port A1h
  6128.     not all clones wire the coprocessor to generate this IRQ; some systems
  6129.       generate an NMI (see INT 02) or assert the -ERROR pin on the CPU
  6130.       (see INT 10"COPROCESSOR")
  6131.     under DESQview, only the INT 15h vector and BASIC segment address (the
  6132.       word at 0000h:0510h) may be assumed to be valid for the handler's
  6133.       process
  6134. SeeAlso: INT 10"COPROCESSOR",INT 5D
  6135. --------Q-BE---------------------------------
  6136. INT BE - DESQview/X - ???
  6137. Note:    points at an IRET
  6138. SeeAlso: INT 15/AX=BFDEh/BX=0006h,INT 63"DESQview"
  6139. --------Q-FF---------------------------------
  6140. INT FF U - QEMM-386.SYS v6.0+ - internal
  6141. Notes:    requires that a byte in the conventional-memory stub be set to the
  6142.       desired function number (00h through 0Ch)
  6143.  
  6144. (Table 2431)
  6145. Values for QEMM internal functions:
  6146.  00h    reflect back to Virtual86-mode interrupt handler (default)
  6147.  01h    ???
  6148.  02h    access DR7???
  6149.  03h    QPI upcall (see INT 67/AH=3Fh)
  6150.  04h    ???
  6151.  05h    ???
  6152.  06h    INT 15/AH=87h
  6153.  07h    EMS services (see INT 67/AH=40h,INT 67/AH=5Dh)
  6154.  08h    ???
  6155.  09h    QEMM exception handler
  6156.  0Ah    XMS services (see INT 2F/AX=4310h)
  6157.  0Bh    Virtual DMA Services (see INT 4B/AX=8102h)
  6158.  0Ch    ???
  6159. --------!---CONTACT_INFO---------------------
  6160. Internet: ralf@telerama.lm.com
  6161. UUCP: {uunet,harvard}!telerama.lm.com!ralf
  6162. FIDO: Ralf Brown 1:129/26.1
  6163.     or post a message to me in the DR_DEBUG echo (I probably won't see it
  6164.     unless you address it to me)
  6165. CIS:  >INTERNET:ralf@telerama.lm.com
  6166.