INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW AH = 12h BH = 05h BL = window to write to 00h DWORD on top of stack is window handle 01h write string to task's default window 0Ch (DV 2.26+) default window of task owning handle on top of stack 0Dh (DV 2.26+) default window of parent of current task STACK: DWORD object handle if handle passed on stack DWORD total length of string (high word == 0) DWORD address of string to display Return: indicated actions performed a. non-control characters are displayed (opcodes DEh and DFh control whether the attributes are left or changed to the current attrib) b. CR/LF/BS/Tab cause the usual cursor movement c. ESC starts a data structure with additional commands if following byte is less than 20h; otherwise, it is written to the window STACK: DWORD handle of new window if window stream opcode E6h else nothing SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h Data Structure: MAGIC DB 1Bh MODE DB ? ; 00h, 01h, 10h, 14h-1Fh legal LENGTH DW ? ; length of remainder in bytes var-length fields follow, each an OPCODE followed by zero or more args MODE 00h (set or display values) "WINDOW STREAM" Opcodes:args 00h display 20h blanks with the default attribute 01h-1Fh display OPCODE blanks with the default attribute 20h display char with default attribute 20h times BYTE char to repeat 21h-3Fh display char with default attribute OPCODE-20h times BYTE char to repeat 40h display 20h blanks with specified attribute BYTE attribute of blanks 41h-5Fh display OPCODE-40h blanks with specified attribute BYTE attribute of blanks 60h display next 20h characters 20h BYTEs characters to display 61h-7Fh display next OPCODE-60h characters N BYTEs characters to display 80h-87h display N blanks with default attribute BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE) [000h means 800h] 88h-8Fh display N copies of the character BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE) [000h means 800h] BYTE character to repeat 90h-97h display N blanks with specified attribute BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE) [000h means 800h] BYTE attribute 98h-9FH display string at logical cursor pos BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE) [000h means 800h] N BYTEs string to display A0h set logical cursor row BYTE row number (0 is top) A1h set logical cursor column BYTE column number (0 is leftmost) A2h set top edge of scrolling region BYTE row A3h set left edge of scrolling region BYTE column A4h set row of physical window position BYTE line A5h set column of physical window position BYTE column A6h set height of physical window BYTE #rows A7h set width of physical window BYTE #columns A8h set viewport row BYTE row A9h set viewport column BYTE column AAh set virtual screen height [contents of window unpredictable after] BYTE rows ABh set virtual screen width [contents of window unpredictable after] BYTE columns ACh-AEh unused AFh set compatible/preferred video modes BYTE compatibility/preference mask bit 7 compatible with monochrome bit 6 compatible with color text, EGA/VGA graphics bit 5 compatible with medium-resolution CGA graphics bit 4 compatible with high-resolution CGA graphics bit 3 prefer monochrome bit 2 prefer color text, EGA/VGA graphics bit 1 prefer medium-resolution CGA graphics bit 0 prefer high-resolution CGA graphics B0h move logical cursor down BYTE #rows (signed, negative values move up) [if #rows=0 and hardware cursor owner, update hw crsr] B1h move logical cursor right BYTE #cols (signed, negative values move left) [if #cols=0 and hardware cursor owner, update hw crsr] B2h shift top edge of scrolling region BYTE #rows (signed) B3h shift left edge of scrolling region BYTE #cols (signed) B4h shift physical window down BYTE #lines (signed) B5h shift physical window right BYTE #columns (signed) B6h expand physical window vertically BYTE #lines (signed) B7h expand physical window horizontally BYTE #columns (signed) B8h adjust viewport row BYTE #rows (signed) B9h adjust viewport column BYTE #columns (signed) BAh adjust virtual screen height [contents of window unpredict after] BYTE #rows to increase (signed) BBh adjust virtual screen width [contents of window unpredictbl after] BYTE #cols to increase (signed) BCh-BFh reserved (currently unused) C0h set logical cursor position BYTE row number (0 is top border) BYTE column number (0 is left border) C1h set top left corner of scrolling region BYTE row BYTE column C2h set physical window pos BYTE upper left row (no top border if 0) BYTE upper left column (no left border if 0) C3h set current window size BYTE #rows BYTE #cols C4h set upper left corner of viewport (portion of virtual screen displayed in window) BYTE row BYTE column C5h set size of virtual screen [contents unpredictable afterwards] BYTE #rows BYTE #cols C6h unused C7h unused C8h set logical cursor relative to current position BYTE number of rows to move down (signed) BYTE number of columns to move right (signed) [if #rows=#cols=0 and hardware cursor owner, update hw cursr] C9h shift top left corner of scrolling region BYTE #rows (signed) BYTE #cols (signed) CAh set window pos relative to current position BYTE number of rows to shift down (signed) BYTE number of columns to shift right (signed) CBh set window size relative to current size BYTE number of rows to expand (signed) BYTE number of cols to expand (signed) CCh shift viewport relative to current position BYTE rows to shift (signed) BYTE cols to shift (signed) CDh resize virtual screen BYTE #rows to expand (signed) BYTE #cols to expand (signed) CEh scroll text when using E8h-EBh/F8h-FBh opcodes (default) CFh scroll attributes when using E8h-EBh/F8h-FBh opcodes D0h allow window frame to extend beyond screen D1h always display a complete frame, even if window extends beyond edge of screen D2h allow DV to change logical colors on video mode switch (default) D3h application changes logical attributes D4h window is visible [must redraw to actually make visible] D5h window is hidden [must redraw to actually remove] D6h window has frame (default) D7h window unframed [must redraw to actually remove frame] D8h READ/READN will read characters from window (default) D9h READ/READN will read attributes from window DAh use logical attributes, which may be remapped attributes 1 normal text 2 highlighted normal text 3 help text 4 highlighted help text 5 error message 6 highlighted error message 7 emphasized text 8 marked text 9-16 are reverse video versions of 1-8 DBh use physical attributes for characters DCh enable special actions for control characters (default) DDh disable special control char handling, all chars displayable by BIOS TTY call DEh write both character and attribute (default) DFh write character only, leave attribute untouched E0h repeat following commands through E1h opcode BYTE number of times to repeat (00h means 256 times) E1h end of commands to repeat, start repeating them E2h set current output color BYTE color E3h clear virtual screen from scroll origin to end using current color E4h redraw window E5h select menu style BYTE style (normally 18h) bits 5,4 = 01 use two-letter menu entries for remainder of this stream E5h (panel file only) BYTE modifier bits 7,6 = 11 panel stream creates new window = 10 panel defines new field table for existing window = 01 panel stream uses existing window & field table bit 5 = 1 stream contains a field table (create kyboard object) bit 4 = 1 stream defines input fields (create keyboard object) bit 3 = 1 stream defines select fields but not input fields bit 2 = 1 stream defines exclusive input window (DV 2.2) bit 1 reserved bit 0 reserved E6h create new window and perform rest of manipulations in new window BYTE number of rows BYTE number of columns Return: DWORD object handle of new window returned on stack at end Note: the window is created with a physical size of 0x0 at the same position as the window to which this stream was sent E7h no operation E8h scroll area up (top left corner defined by opcode C1h) BYTE height BYTE width E9h scroll area down (top left corner defined by opcode C1h) BYTE height BYTE width EAh scroll area left (top left corner defined by opcode C1h) BYTE height BYTE width EBh scroll area right (top left corner defined by opcode C1h) BYTE height BYTE width ECh set logical attributes for window contents BYTE video modes command applies to bit 7 monochrome bit 6 color text, EGA/VGA graphics bit 5 medium-resolution CGA graphics bit 4 high-resolution CGA graphics BYTE which attributes to set bit 7 if set, copy single following byte to indicated attribs bits 4-6 # of first attribute to change - 1 bits 0-3 # of consecutive attributes to change N BYTEs new attributes EDh set logical attributes for window frame BYTE video modes command applies to (see opcode ECh) BYTE which attributes to set bit 7 if set, copy single following byte to indicated attrs bits 4-6 # of first attribute to change - 1 bits 0-3 # of consecutive attributes to change N BYTEs new attributes attributes 1 = top left corner 2 = top right corner 3 = bottom left corner 4 = bottom right corner 5 = top edge 6 = bottom edge 7 = left edge 8 = right edge EEh set characters for window frame BYTE video modes command applies to (see opcode ECh) BYTE which characters to set bit 7 if set, copy single following byte to indicated chars bits 4-6 # of first char to change - 1 bits 0-3 # of consecutive chars to change N BYTEs new chars (same relative position as attributes above) EFh set window name BYTE length of name (should be in range 0 to logical screen width) N BYTEs name F0h clear input field to blanks BYTE field number F1h fill input field with character BYTE field number BYTE char F2h set color of input field BYTE field number (1-N) BYTE attribute F3h set initial contents of input field BYTE field number (1-N) N BYTEs enough chars to exactly fill field as defined by op FFh F4h position cursor to start of specific input field BYTE field number (1-N) F5h change field table entry BYTE field number 7-8 BYTEs field table entry (see opcode FFh below) F6h set field type BYTE field number BYTE type 00h inactive 40h output field 80h input field C0h deselected field C2h selected field F7h "broadcast write" write data to fields with program output bit set in field table entry, in field number order N BYTEs (total length of all program output fields) F8h scroll field up a line BYTE field number F9h scroll field down a line BYTE field number FAh scroll field left BYTE field number FBh scroll field right BYTE field number FCh set field table header BYTE number of fields (must be <= existing number of fields) BYTE screen behavior bits bit 7 reserved bit 6 set if menu items may be selected via keyboard bit 5 set if left mouse button in "status" mode (press anywhere in window immediately returns control to app) bit 4 set if right mouse button in "status" mode bit 3 if set, select fields return contents or blanks rather than 'Y' or 'N' bit 2 if set, modified bits reset on return to application bits 0,1 = 00 no data returned on read of keyboard 01 data returned as array of chars containing all fields packed together, with no field numbers 10 data returned as numbered variable-length records for all fields 11 data returned as numbered variable-length records for the fields which were modified BYTE current input field (updated by DESQview) BYTE current select field (updated by DESQview) BYTE attribute for select fields when they are pointed at BYTE attribute for select fields which have been selected FDh reset modified bit for all fields FEh reset selected and modified bits for all fields FFh set up input fields 6 BYTEs table header (see opcode FCh above) the field table entries, one for each field BYTE start row \ BYTE start column \ if menu selection and start is to BYTE end row / right or below end, select from kbd only BYTE end column / BYTE field type bits 7,6 = 00 inactive (non-entry) field 01 echos keystrokes input to make menu selection 10 fill-in field 11 select field bit 5 field can be filled by broadcast write (F7h opcode) bit 4 reserved bit 3 reserved bit 2 reserved bit 1 set if field selected bit 0 set if field modified BYTE modifier if type is fill-in, then bit flags to determine behavior bit 7 if set, automatically enter CR when field full bit 6 move to next field when current field is full bit 5 if set, enter text from right end (for numbers) bit 4 if set, force input to uppercase bit 3 if set, clear old contents on first keystroke bit 2 if set, input returned when cursor moves out of modified field ("validate",API level 2.02+) bit 1 reserved bit 0 reserved if select field, first key to press to activate 00h if have to point-&-click or is an extended-ASCII keystroke (only if two-key menus enabled) BYTE (select field only) normal color of field BYTE second key for select field. This byte is present iff two-letter menu entries selected with opcode E5h, and in that case is present regardless of field type Note: DESQview uses and updates the actual copy of the information which is contained in the stream. Thus this info must remain intact until after the data entry is complete. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here) A0h return logical cursor row in next byte A1h return logical cursor column in next byte A2h return top row of scrolling region in next byte A3h return left column of scrolling region in next byte A4h return row of physical window origin in next byte A5h return column of physical window origin in next byte A6h return height of physcial window in next byte A7h return width of physical window in next byte A8h return row of viewport origin in next byte A9h return column of viewport origin in next byte AAh return height of virtual screen in next byte ABh return width of virtual screen in next byte AFh return current video mode in next byte C0h return current logical cursor position in next two bytes C1h return top left corner of scrolling region in next two bytes C2h return current window position in next two bytes C3h return current window size in next two bytes C4h return current viewport origin in next two bytes C5h return current virtual screen size in next two bytes D0h \ overwritten with D0h if frames may fall off screen edge D1h / D1h if frames always displayed entirely D2h \ overwritten with D2h if DESQview controls color palette D3h / D3h if application changes color palette D4h \ overwritten with D4h if window visible D5h / D5h if window hidden D6h \ overwritten with D6h if window has frame D7h / D7h if window unframed D8h \ overwritten with D8h if reading characters from window D9h / D9h if reading attributes from window DAh \ overwritten with DAh if using logical attributes DBh / DBh if using physical attributes DCh \ overwritten with DCh if TTY control char interpretation on DDh / DDh if TTY control char interpretation off DEh \ overwritten with DEh if writing both characters and attributes DFh / DFh if leaving attributes untouched E2h return current color in next byte ECh get logical attributes for window contents BYTE execute call if currently in specified video mode bit 7 monochrome bit 6 color text, EGA/VGA graphics bit 5 medium-resolution CGA graphics bit 4 high-resolution CGA graphics BYTE which attributes to get bit 7 unused??? bits 4-6 first attribute to get - 1 bits 0-3 # consecutive attributes N BYTEs buffer to hold attributes EDh get logical attributes for window frame BYTE execute call if currently in video mode (see opcode ECh) BYTE which attributes to get bit 7 unused??? bits 4-6 first attribute to get - 1 bits 0-3 # consecutive attributes N BYTEs buffer to hold attributes EEh get characters for window frame BYTE execute call if currently in video mode (see opcode ECh) BYTE which attributes to get bit 7 unused??? bits 4-6 first char to get - 1 bits 0-3 # consecutive chars N BYTEs buffer to hold chars EFh return first N characters of current window name BYTE max length of returned name N BYTEs buffer to hold window name F3h return contents of specified field BYTE field number N BYTEs buffer to hold field contents (size exactly equal to field size) F5h get field table entry BYTE field number 7-8 BYTEs buffer to hold field table entry Notes: DV < 2.26 always returns 7 bytes DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field table is using 8-byte entries and eighth byte after F5h is E7h (NOP); otherwise, 7 bytes are returned DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes depending on the field table entry size F6h get type of a field BYTE field number BYTE type FCh get field table header 6 BYTEs buffer to store header MODE 10h "MANAGER STREAM" (valid only for opcodes listed here) 00h allow window to be moved horizontally 01h allow window to be moved vertically 02h allow window to change width 03h allow window to change height 04h allow window to be scrolled horizontally 05h allow window to be scrolled vertically 06h allow "Close Window" menu selection for application 07h allow "Hide Window" menu selection for application 08h allow application to be suspended ("Rearrange/Freeze") 0Eh allow "Scissors" menu 10h allow DESQview main menu to be popped up 11h allow "Switch Windows" menu 12h allow "Open Window" menu 13h allow "Quit" menu selection 20h-33h opposite of 00h-13h, disallow specified action 40h notify if horizontal position of window changes 41h notify if vertical position of window changes 42h notify if width of window changes 43h notify if height of window changes 44h notify if window scrolled horizontally 45h notify if window scrolled vertically 46h notify if window is closed--program has to clean up and exit itself 47h notify if window is hidden 48h notify if "?" on main menu selected 49h notify if pointer message sent to window 4Ah notify if window is placed in foreground 4Bh notify if window is placed in background 4Ch notify if video mode changes 4Dh notify if "Scissors" menu "Cut" option selected 4Eh notify if "Scissors" menu "Copy" option selected 4Fh notify if "Scissors" menu "Paste" option selected 50h notify if DESQview main menu about to pop up 51h notify if DESQview main menu popped down 60h-71h opposite of 40h-51h: don't notify on specified event 84h attach window to parent task's window (both move together) 85h detach window from parent task's window (may move independently) 86h disable background operation for application 87h enable running in background 88h set minimum size of physical window BYTE rows BYTE columns 89h set maximum size of physical window BYTE rows BYTE cols 8Ah set primary asynchronous notification routine DWORD address of routine, 0000h:0000h means none (see also below) 8Bh set async notification parameter DWORD 32-bit value passed to 8Ah async routine in DS:SI ACh (DV2.2+) perform regular select field attribute processing ADh (DV2.2+) protect attributes in selected field from being lost AEh make window default notify window for owning app (API level 2.00+) AFh set selected field marker character BYTE character to display at left edge of selected fields BCh set standard field processing mode BDh set alternate field processing mode (enables cursor pad for menus) BEh disables changing reverse logical attributes with ECh opcode BFh enables changing reverse logical attributes with ECh opcode C0h make current window topmost in system C1h force current process into foreground C2h make current window topmost in process C3h position mouse pointer relative to origin of current field BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C4h position mouse pointer relative to origin of given field BYTE field number BYTE rows below upper left corner of field BYTE columns to right of upper left corner of field C5h orphan current window (also hides it) Note: must be last in stream; all subsequent commands ignored C6h show all windows for this process C7h hide all windows for this process C8h suspend process and hide all its windows C9h force current process into background CAh make current window bottom-most in process CBh cancel current window manager operation, remove DV menu, give control to topmost application CCh orphan window and give it to the system for use as paste data CEh reorder windows DWORD pointer to null-terminated list of words each word is segment of object handle for a window FFh no operation MODES 14h to 1Fh "USER STREAMS" normally NOPs, but may be defined by SETESC message to invoke FAR routines, one for each mode number on entry to handler, DS:SI -> first byte of actual stream (not header) CX = #bytes in stream ES:DI = window's handle Asynchronous notification routine defined by manager stream 8Ah called with: ES:DI = handle of window DS:SI is 32-bit value set by 8Bh manager stream opcode mailbox contains message indicating event Opcode 40h horizontal movement DWORD object handle of window BYTE new row BYTE new col 41h vertical movement DWORD object handle of window BYTE new row BYTE new col 42h horizontal size change DWORD object handle of window BYTE new rows BYTE new cols 43h vertical size change DWORD object handle of window BYTE new rows BYTE new cols 44h scrolled horizontally DWORD object handle of window BYTE mouse row within window BYTE mouse column within window BYTE field mouse is on, 0 if none BYTE amount moved: >0 right, <0 left, 0 done 45h scrolled vertically DWORD object hande of window BYTE mouse row within window BYTE mouse column within window BYTE field mouse is on, 0 if none BYTE amount moved: >0 down, <0 up, 0 done 46h window close request DWORD object handle of window BYTE mouse pointer row BYTE mouse pointer column BYTE field mouse is on, 0 if none 47h application's windows hidden 48h Help for Program selected DWORD object handle of window BYTE mouse pointer row BYTE mouse pointer column BYTE field mouse is on, 0 if none 49h pointer message sent to window DWORD pointer handle which received message 4Ah switched to window from another ("raise") 4Bh switched away from the window ("lower") 4Ch video mode changed BYTE new BIOS video mode 4Dh Scissors/cUt selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window created with copy of data from specified region BYTE height of region BYTE width of region 4Eh Scissors/Copy selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window created with copy of data from specified region BYTE height of region BYTE width of region 4Fh Scissors/Paste selected DWORD object handle of window BYTE row of upper left corner BYTE column of upper left corner BYTE field number ul corner is in, 0=none DWORD handle of orphaned window with data BYTE height of region BYTE width of region Note: orphaned data window should be adopted or freed when done 50h main menu about to pop up 51h main menu popped down Return: all registers unchanged .