home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR9 / QWIK71A.ZIP / QWIKREF.DOC < prev    next >
Text File  |  1993-09-23  |  85KB  |  1,809 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                               QWIK SCREEN UTILITIES
  19.                                  REFERENCE GUIDE
  20.  
  21.                                    Version 7.1a
  22.                                September 23, 1993
  23.  
  24.  
  25.                Copyright (C) 1988,1993 Eagle Performance Software
  26.                               All Rights Reserved.
  27.  
  28.  
  29.  
  30.                                _______                     
  31.                           ____|__     |               (tm) 
  32.                        --|       |    |------------------- 
  33.                          |   ____|__  |  Association of    
  34.                          |  |       |_|  Shareware         
  35.                          |__|   o   |    Professionals     
  36.                        -----|   |   |--------------------- 
  37.                             |___|___|    MEMBER            
  38.  
  39.  
  40.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  41.  
  42.  
  43.  
  44.                        T A B L E   O F   C O N T E N T S
  45.  
  46.         1. INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . 4
  47.              Purpose . . . . . . . . . . . . . . . . . . . . . . . 4
  48.              Common Parameters . . . . . . . . . . . . . . . . . . 4
  49.              Attributes  . . . . . . . . . . . . . . . . . . . . . 5
  50.  
  51.         2. PROCEDURES AND FUNCTIONS  . . . . . . . . . . . . . . . 7
  52.              EosC  . . . . . . . . . . . . . . . . . . . . . . . . 7
  53.              EosLn . . . . . . . . . . . . . . . . . . . . . . . . 7
  54.              EosR  . . . . . . . . . . . . . . . . . . . . . . . . 7
  55.              EosToCursor . . . . . . . . . . . . . . . . . . . . . 7
  56.              EosToRC . . . . . . . . . . . . . . . . . . . . . . . 7
  57.              EosToRCrel  . . . . . . . . . . . . . . . . . . . . . 8
  58.              GetCursor . . . . . . . . . . . . . . . . . . . . . . 8
  59.              GetSubModelID . . . . . . . . . . . . . . . . . . . . 8
  60.              GotoEos . . . . . . . . . . . . . . . . . . . . . . . 8
  61.              GotoRC. . . . . . . . . . . . . . . . . . . . . . . . 9
  62.              ModCursor . . . . . . . . . . . . . . . . . . . . . . 9
  63.              Qattr . . . . . . . . . . . . . . . . . . . . . . . . 9
  64.              QattrC  . . . . . . . . . . . . . . . . . . . . . . . 10
  65.              QattrEos  . . . . . . . . . . . . . . . . . . . . . . 10
  66.              QEosLn  . . . . . . . . . . . . . . . . . . . . . . . 10
  67.              Qfill . . . . . . . . . . . . . . . . . . . . . . . . 11
  68.              QfillC  . . . . . . . . . . . . . . . . . . . . . . . 11
  69.              QfillEos  . . . . . . . . . . . . . . . . . . . . . . 11
  70.              Qinit . . . . . . . . . . . . . . . . . . . . . . . . 12
  71.              QreadAttr . . . . . . . . . . . . . . . . . . . . . . 12
  72.              QreadChar . . . . . . . . . . . . . . . . . . . . . . 12
  73.              QreadStr  . . . . . . . . . . . . . . . . . . . . . . 12
  74.              QscrollDown . . . . . . . . . . . . . . . . . . . . . 13
  75.              QscrollUp . . . . . . . . . . . . . . . . . . . . . . 13
  76.              QScrToVscr  . . . . . . . . . . . . . . . . . . . . . 13
  77.              QstoreToMem . . . . . . . . . . . . . . . . . . . . . 14
  78.              QstoreToScr . . . . . . . . . . . . . . . . . . . . . 15
  79.              QviewPage . . . . . . . . . . . . . . . . . . . . . . 16
  80.              QVscrToScr  . . . . . . . . . . . . . . . . . . . . . 16
  81.              Qwrite  . . . . . . . . . . . . . . . . . . . . . . . 17
  82.              QwriteC . . . . . . . . . . . . . . . . . . . . . . . 17
  83.              QwriteEos . . . . . . . . . . . . . . . . . . . . . . 18
  84.              QwriteEosSub  . . . . . . . . . . . . . . . . . . . . 18
  85.              QwriteEosV  . . . . . . . . . . . . . . . . . . . . . 19
  86.              QwritePage  . . . . . . . . . . . . . . . . . . . . . 19
  87.              QwriteSub . . . . . . . . . . . . . . . . . . . . . . 19
  88.              QwriteSubC  . . . . . . . . . . . . . . . . . . . . . 20
  89.              QwriteV . . . . . . . . . . . . . . . . . . . . . . . 20
  90.              QwriteVC  . . . . . . . . . . . . . . . . . . . . . . 21
  91.              SetCursor . . . . . . . . . . . . . . . . . . . . . . 21
  92.              SetMultiTask  . . . . . . . . . . . . . . . . . . . . 22
  93.              StrL  . . . . . . . . . . . . . . . . . . . . . . . . 22
  94.              StrLF . . . . . . . . . . . . . . . . . . . . . . . . 23
  95.              StrR  . . . . . . . . . . . . . . . . . . . . . . . . 23
  96.              StrRF . . . . . . . . . . . . . . . . . . . . . . . . 23
  97.              StrRFD  . . . . . . . . . . . . . . . . . . . . . . . 23
  98.  
  99.  
  100.                                        2
  101.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  102.  
  103.  
  104.              WhereC  . . . . . . . . . . . . . . . . . . . . . . . 24
  105.              WhereR  . . . . . . . . . . . . . . . . . . . . . . . 24
  106.  
  107.         3. VARIABLES . . . . . . . . . . . . . . . . . . . . . . . 25
  108.              System Hardware . . . . . . . . . . . . . . . . . . . 25
  109.              Video Hardware  . . . . . . . . . . . . . . . . . . . 26
  110.              Video Software  . . . . . . . . . . . . . . . . . . . 28
  111.              Video Cursor  . . . . . . . . . . . . . . . . . . . . 30
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.                                        3
  162.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  163.  
  164.  
  165.    1.  I N T R O D U C T I O N
  166.  
  167.  
  168.    PURPOSE
  169.  
  170.    This document is a QWIK technical reference manual describing each routine 
  171.    and variable in detail in a format similar to the TP manual.  The routines 
  172.    are described in alphabetical order.  Since this manual is on disk, you can 
  173.    find your interest easily with a search utility.
  174.  
  175.    Application - All QWIK procedures will perform in the following 
  176.    applications:
  177.  
  178.      . All video text modes - 0, 1, 2, 3 and 7.
  179.      . Any column mode - 40, 80, or variable.
  180.      . Works in DOS and DPMI platforms.
  181.      . For IBM PC, XT, AT, PCjr, PC convertible, all PS/2 models, 3270 PC, and 
  182.        compatibles.
  183.      . With MDA, CGA, EGA, MCGA, VGA, 8214/A, all Hercules video cards.
  184.      . Perform routines in absolute coordinates rather than window-relative 
  185.        coordinates.
  186.      . Capitalizes on the use of faster multi-tasking video buffers (MTVB).
  187.  
  188.    For window-relative writing routines, see WNDW70.ARC or later version.
  189.  
  190.  
  191.    COMMON PARAMETERS
  192.  
  193.    Common Parameters - Most procedures use the same parameters.  Rather than 
  194.    repeating them for each routine, detailed descriptions for those parameters 
  195.    are listed below.
  196.  
  197.    Screen Coordinates - QWIK routines work in absolute coordinates to give you 
  198.    full control of the screen.  The routines do not check for bounds on the 
  199.    screen, so be sure to stay in range.  The upper left column on the screen 
  200.    is row 1, column 1, which is also called 1-based.  The routines also wrap 
  201.    to the next line; they do not truncate at EOL.  For example, Row:=1 and 
  202.    Col:=255 is equivalent to Row:=3 and Col:=15 on a screen with 80 columns.  
  203.    But this is not a recommended practice for variable screen widths.
  204.  
  205.    Row/Col - Row and Col were chosen in lieu of the X/Y scheme used in TP.   
  206.    Since QWIK is for only text modes, the screen is treated like a word 
  207.    processor with rows and columns.  It is more intuitive to use the X/Y 
  208.    scheme in graphics and the Row/Col scheme for text.
  209.  
  210.    ColL/ColR - In the self-centering routines, the left and right columns are 
  211.    simply averaged.  To center on the full width of an 80 column display, set 
  212.    ColL:=1 and ColR:=80.  To center on a certain column number, set both 
  213.    values equal to that column number.  Or, to center on any screen, set 
  214.    ColL:=1 and ColR:=CRTcols.
  215.  
  216.    Rows/Cols - Using Rows/Cols is much easier than Row2/Col2 to describe the 
  217.    height and width of a block such as:
  218.  
  219.       QstoreToMem (Row,Col,Rows,Cols,MyPtr^);
  220.  
  221.  
  222.    Chapter 1, Introduction                                             Page 4
  223.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  224.  
  225.  
  226.  
  227.    Should you decide to move a block, only Row and Col need to be changed, and 
  228.    therefore Rows and Cols don't need to be mentally recalculated and altered.  
  229.    Please keep Cols limited to one row.  Zero values will simply exit the 
  230.    routine.
  231.  
  232.    RowT/RowB - Similar to ColL and ColR, these parameters allow a string to be 
  233.    vertically centered on a screen as the routine simple averages them.  To 
  234.    center on any row, set both values equal to that row number.  Or to center 
  235.    on any screen, set RowT:=1 and RowB:=CRTrows.
  236.  
  237.    aStr - One of the nice improvements since TP 4.0 is that the address of the 
  238.    string, aStr, is always passed onto to the stack no matter if it's a string 
  239.    value or a variable.  So, internally, QWIK does not need to copy strings to 
  240.    the stack and thereby increasing speed.  The Qwrite* procedures use this 
  241.    address even if hard-coded strings are passed as a parameter.
  242.  
  243.    Chars - This is an array or substring in memory used in place of a string.
  244.  
  245.  
  246.    ATTRIBUTES
  247.  
  248.    Attr - Use the convenient attribute constants for the foreground  and 
  249.    background colors supplied in the unit rather than having to use TP 
  250.    functions or procedures to get a desired color, for example:
  251.     
  252.      Qwrite ( 1, 1,White+BlueBG,'My String');
  253.  
  254.    will write the text with white on blue attributes.  Of course, you can 
  255.    still use Turbo's TextColor and TextBackground procedures, and then use 
  256.    TextAttr as a parameter.  The foreground constants are duplicates of those 
  257.    in the CRT unit:
  258.  
  259.      Black        = $00;       DarkGray     = $08;
  260.      Blue         = $01;       LightBlue    = $09;
  261.      Green        = $02;       LightGreen   = $0A;
  262.      Cyan         = $03;       LightCyan    = $0B;
  263.      Red          = $04;       LightRed     = $0C;
  264.      Magenta      = $05;       LightMagenta = $0D;
  265.      Brown        = $06;       Yellow       = $0E;
  266.      LightGray    = $07;       White        = $0F;
  267.      Blink        = $80;                          
  268.  
  269.    For convenience, background color constants were included to take advantage 
  270.    of constant folding.
  271.  
  272.      BlackBG      = $00;    
  273.      BlueBG       = $10;    
  274.      GreenBG      = $20;    
  275.      CyanBG       = $30;    
  276.      RedBG        = $40;    
  277.      MagentaBG    = $50;    
  278.      BrownBG      = $60;    
  279.      LightGrayBG  = $70;    
  280.      SameAttr     =  -1;  
  281.  
  282.  
  283.    Chapter 1, Introduction                                             Page 5
  284.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  285.  
  286.  
  287.  
  288.    SameAttr - A powerful and unique feature of all QWIK routines is the use of 
  289.    the constant SameAttr.  If SameAttr, or a negative value, is used as an 
  290.    attribute, the routine will suppress any changes to the attributes and use 
  291.    what is currently on the screen.
  292.  
  293.    3270 PC Attributes - Be aware that the 3270 PC ignores the foreground 
  294.    intensity bit, so there are only 8 colors.  In addition, 4 colors have 
  295.    different tints:
  296.  
  297.      PC Color     3270 PC Color
  298.      ------------ -------------
  299.      Cyan         Turquoise
  300.      Magenta      Pink
  301.      Brown        Yellow
  302.      Light Gray   White
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.    Chapter 1, Introduction                                             Page 6
  345.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  346.  
  347.  
  348.    2.  P R O C E D U R E S   A N D   F U N C T I O N S
  349.  
  350.    In this section, a detailed description is provided for each procedure and 
  351.    function.
  352.  
  353.  
  354.    ---------------------------------------------------------------------------
  355.    EosC function                                                          Qwik
  356.    ---------------------------------------------------------------------------
  357.    Function       Returns the absolute column of the EOS marker.
  358.    Declaration    EosC
  359.    Result type    byte
  360.    Screens        All video pages and virtual screens.
  361.    Remarks        Operates on the currently written screen.  The upper left 
  362.                   corner of the screen (1,1). 
  363.    See also       EosR, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  364.  
  365.    ---------------------------------------------------------------------------
  366.    EosLn procedure                                                        Qwik
  367.    ---------------------------------------------------------------------------
  368.    Function       Moves the EOS marker to column 1 of the next row.
  369.    Declaration    EosLn
  370.    Screens        All video pages and virtual screens.
  371.    Remarks        Operates on the currently written screen.
  372.    EOS            Updated.
  373.    Restrictions   EosLn can increment past the last row of a screen, but does 
  374.                   not scroll up the screen.
  375.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos, 
  376.                   QEosLn
  377.  
  378.    ---------------------------------------------------------------------------
  379.    EosR function                                                          Qwik
  380.    ---------------------------------------------------------------------------
  381.    Function       Returns the absolute row of the EOS marker.
  382.    Declaration    EosR
  383.    Result type    byte
  384.    Screens        All video pages and virtual screens.
  385.    Remarks        Operates on the currently written screen.
  386.    See also       EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  387.  
  388.    ---------------------------------------------------------------------------
  389.    EosToCursor procedure                                                  Qwik
  390.    ---------------------------------------------------------------------------
  391.    Function       Positions the EOS marker to where the cursor is.
  392.    Declaration    EosToCursor
  393.    Screens        All video pages only.
  394.    Remarks        The EOS marker is simply moved to match the position of the 
  395.                   cursor of the currently written video page.
  396.    EOS            Updated.
  397.    See also       EosR, EosC, EosToRC, EosToRCrel, EosLn, GotoEos
  398.  
  399.    ---------------------------------------------------------------------------
  400.    EosToRC procedure                                                      Qwik
  401.    ---------------------------------------------------------------------------
  402.    Function       Positions the EOS marker.
  403.  
  404.  
  405.    Chapter 2, Procedures and Functions                                 Page 7
  406.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  407.  
  408.  
  409.    Declaration    EosToRC (Row, Col: byte)
  410.    Screens        All video pages and virtual screens.
  411.    Remarks        Use this procedure to manually locate the EOS marker.  The                
  412.                   Q*Eos procedures will write where this marker is located on                
  413.                   the currently written screen.
  414.    EOS            Updated.
  415.    Restrictions   Stay within the screen limits.
  416.    See also       EosR, EosC, EosToRCrel, EosToCursor, EosLn, GotoEos
  417.  
  418.    ---------------------------------------------------------------------------
  419.    EosToRCrel procedure                                                   Qwik
  420.    ---------------------------------------------------------------------------
  421.    Function       Positions the EOS marker relative to its current position.
  422.    Declaration    EosToRCrel (Row, Col: integer)
  423.    Screens        All video pages and virtual screens.
  424.    Remarks        The relative values can be positive or negative.  The Q*Eos 
  425.                   procedures will write where the EOS marker is located on the 
  426.                   currently written screen.  
  427.    EOS            Updated.
  428.    Restrictions   Stay within the screen limits.
  429.    See also       EosR, EosC, EosToRC, EosToCursor, EosLn, GotoEos
  430.  
  431.    ---------------------------------------------------------------------------
  432.    GetCursor function                                                     Qwik
  433.    ---------------------------------------------------------------------------
  434.    Function       Returns the cursor mode for the CRT.
  435.    Declaration    GetCursor
  436.    Result type    word
  437.    Screens        All video pages only.
  438.    Remarks        There is only one cursor mode variable that applies to what 
  439.                   is currently viewed on the CRT and it is retrieved from low 
  440.                   memory at Seg0040:$0060.
  441.    See also       SetCursor, ModCursor
  442.  
  443.    ---------------------------------------------------------------------------
  444.    GetSubModelID procedure                                                Qwik
  445.    ---------------------------------------------------------------------------
  446.    Function       Gets the SubModelID on IBM computers.
  447.    Declaration    GetSubModelID
  448.    Remarks        The SystemID and SubModelID variables are updated if a                
  449.                   SubModelID exists.  It will only execute on recent models of   
  450.                   XT, AT, and PS/2 models which have this ID.  Otherwise the 
  451.                   variables will remain unaltered as set by Qinit.  
  452.    Restrictions   PC or XT clones must recognize IBM's SystemID.
  453.    See also       QWIK71A.DOC
  454.  
  455.    ---------------------------------------------------------------------------
  456.    GotoEos procedure                                                      Qwik
  457.    ---------------------------------------------------------------------------
  458.    Function       Positions the cursor where the EOS marker is.
  459.    Declaration    GotoEos
  460.    Screens        All video pages only.
  461.    Remarks        The cursor is simply moved to match the position of the EOS 
  462.                   marker of the currently written video page. 
  463.    EOS            Unaltered.
  464.  
  465.  
  466.    Chapter 2, Procedures and Functions                                 Page 8
  467.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  468.  
  469.  
  470.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoRC
  471.    Example        Center a string on the screen and place the cursor at the 
  472.                   end of the string:
  473.  
  474.                     QwriteC (1,1,CRTcols,SameAttr,'My message ');
  475.                     GotoEos;
  476.  
  477.    ---------------------------------------------------------------------------
  478.    GotoRC procedure                                                       Qwik
  479.    ---------------------------------------------------------------------------
  480.    Function       Positions the cursor.
  481.    Declaration    GotoRC (Row, Col: byte)
  482.    Screens        All video pages only.
  483.    Remarks        The cursor is moved to the position absolute to the 
  484.                   currently written video page.
  485.    EOS            Unaltered.
  486.    Restrictions   Stay within the screen limits.
  487.    See also       GotoEos, WhereR, WhereC 
  488.  
  489.    ---------------------------------------------------------------------------
  490.    ModCursor procedure                                                    Qwik
  491.    ---------------------------------------------------------------------------
  492.    Function       Modifies the current cursor mode to turn on, off, or blink                
  493.                   erratically.
  494.    Declaration    ModCursor (Bits13_14: word)
  495.    Screens        Any video page as viewed.
  496.    Remarks        Using the modification constants CursorOn, CursorOff, or 
  497.                   CursorBlink for Bits13_14, the currently viewed cursor mode 
  498.                   on the CRT will be modified accordingly.  The procedure only  
  499.                   looks at bits 13 and 14 of Bits13_14 for the modification.  
  500.                   The scan lines remain unaltered.
  501.    See also       GetCursor, SetCursor
  502.    Example        To turn the current cursor mode off:
  503.  
  504.                     ModCursor (CursorOff);
  505.  
  506.    ---------------------------------------------------------------------------
  507.    Qattr procedure                                                        Qwik
  508.    ---------------------------------------------------------------------------
  509.    Function       Changes just the attribute in a rows-by-columns block on the 
  510.                   screen.
  511.    Declaration    Qattr (Row,Col,Rows,Cols: byte; Attr: integer)
  512.    Screens        All video pages and virtual screens.
  513.    Remarks        The upper left corner of the block starts at (Row,Col) and 
  514.                   the block size is Rows by Cols.  Note that you can even 
  515.                   change 1 row and/or 1 column.  If SameAttr is used for Attr 
  516.                   or if Rows or Cols is zero, then nothing is written.
  517.    EOS            Updated.
  518.    Restrictions   Stay within the screen limits.
  519.    See also       QattrC, QattrEos
  520.    Example        To create inverse video on any screen:
  521.  
  522.                     Qattr (1,1,CRTrows,CRTcols,Black+LightGrayBG);
  523.  
  524.  
  525.  
  526.  
  527.    Chapter 2, Procedures and Functions                                 Page 9
  528.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  529.  
  530.  
  531.    ---------------------------------------------------------------------------
  532.    QattrC procedure                                                       Qwik
  533.    ---------------------------------------------------------------------------
  534.    Function       Changes just the attribute in a rows-by-columns block on the 
  535.                   screen and centers it between two columns.
  536.    Declaration    QattrC (Row,ColL,ColR,Rows,Cols: byte; Attr: integer)
  537.    Screens        All video pages and virtual screens.
  538.    Remarks        The upper left corner of the block starts at 
  539.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by 
  540.                   Cols and centering it between the two columns ColL and ColR.     
  541.                   Odd counts are shifted left.  If SameAttr is used for Attr 
  542.                   or if Rows or Cols is zero, then nothing is written. 
  543.    EOS            Updated.
  544.    Restrictions   Stay within the screen limits.
  545.    See also       Qattr, QattrEos
  546.    Example        A 30 character message centered on the screen in row 15,                
  547.                   needs to be white on green:
  548.  
  549.                     QattrC (15,1,CRTcols,1,30,White+GreenBG);
  550.  
  551.                   The attribute will start to be changed in column 26 on an 80 
  552.                   column screen.
  553.  
  554.    ---------------------------------------------------------------------------
  555.    QattrEos procedure                                                     Qwik
  556.    ---------------------------------------------------------------------------
  557.    Function       Changes just the attribute in a rows-by-columns block on the 
  558.                   current screen starting at the EOS marker.
  559.    Declaration    QattrEos (Rows,Cols: byte; Attr: integer)
  560.    Screens        All video pages and virtual screens.
  561.    Remarks        The upper left corner of the block starts at the previously  
  562.                   set EOS marker and the block size is Rows by Cols.  If 
  563.                   SameAttr is used for Attr or if Rows or Cols is zero, then  
  564.                   nothing is written. 
  565.    Restrictions   Stay within the screen limits.
  566.    EOS            Updated.
  567.    See also       Qattr, QattrC
  568.    Example        To highlight a 20 column data entry field at the EOS marker 
  569.                   with yellow on magenta:
  570.  
  571.                     QattrEos (1,20,Yellow+MagentaBG);
  572.  
  573.    ---------------------------------------------------------------------------
  574.    QEosLn procedure                                                       Qwik
  575.    ---------------------------------------------------------------------------
  576.    Function       Moves the EOS marker to column 1 of the next row with a 
  577.                   possible scroll up.
  578.    Declaration    QEosLn
  579.    Screens        All video pages and virtual screens.
  580.    Remarks        Operates on the currently written screen.  If EosR becomes 
  581.                   greater than CRTrows, then the screen will scroll up.  The 
  582.                   new blank row will have the attribute set by ScrollAttr 
  583.                   which must be manually set before hand.
  584.    EOS            Updated to first cleared column of the cleared row.
  585.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos, EosLn
  586.  
  587.  
  588.    Chapter 2, Procedures and Functions                                 Page 10
  589.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  590.  
  591.  
  592.  
  593.    ---------------------------------------------------------------------------
  594.    Qfill procedure                                                        Qwik
  595.    ---------------------------------------------------------------------------
  596.    Function       Fills the screen with a character with an optional attribute 
  597.                   change in a rows-by-columns block on the current screen.
  598.    Declaration    Qfill (Row,Col,Rows,Cols: byte; Attr: integer; Ch: char)
  599.    Screens        All video pages and virtual screens.
  600.    Remarks        The upper left corner of the block starts at (Row,Col) and                
  601.                   the block size is Rows by Cols.  If SameAttr is used for                
  602.                   Attr, then the attribute will remain the same on the screen.                 
  603.                   If Rows or Cols is zero, then nothing is written.
  604.    EOS            Updated.
  605.    Restrictions   Stay within the screen limits.
  606.    See also       QfillC, QfillEos
  607.    Example        To clear the screen with black on brown attribute:
  608.  
  609.                     Qfill (1,1,CRTrows,CRTcols,Black+BrownBG,' ');
  610.  
  611.    ---------------------------------------------------------------------------
  612.    QfillC procedure                                                       Qwik
  613.    ---------------------------------------------------------------------------
  614.    Function       Fills the screen with a character and an optional attribute 
  615.                   change in a rows-by-columns block on the current screen and 
  616.                   centers it between two columns.
  617.    Declaration    QfillC (Row,ColL,ColR,Rows,Cols: byte; 
  618.                           Attr: integer; Ch: char)
  619.    Screens        All video pages and virtual screens.
  620.    Remarks        The upper left corner of the block starts at 
  621.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by  
  622.                   Cols and centered between the two columns ColL and ColR.  
  623.                   Odd counts are shifted left.  If SameAttr is used for Attr,  
  624.                   then the attribute will remain the same on the screen.  If 
  625.                   Rows or Cols is zero, then nothing is written.
  626.    EOS            Updated.
  627.    Restrictions   Stay within the screen limits.
  628.    See also       Qfill, QfillEos
  629.    Example        Center 20 dashes on the screen in rows 1 to 5 with black on 
  630.                   brown attributes:
  631.  
  632.                     QfillC (1,1,CRTcols,5,20,Black+BrownBG,'-');
  633.  
  634.    ---------------------------------------------------------------------------
  635.    QfillEos procedure                                                     Qwik
  636.    ---------------------------------------------------------------------------
  637.    Function       Fills the screen with a character with an optional attribute 
  638.                   change in a rows-by-columns block on the current screen 
  639.                   starting at the Eos marker.
  640.    Declaration    QfillEos (Rows,Cols: byte; Attr: integer; Ch: char)
  641.    Screens        All video pages and virtual screens.
  642.    Remarks        The upper left corner of the block starts at the previously 
  643.                   set EOS marker and the block size is Rows by Cols.  If 
  644.                   SameAttr is used for Attr, then the attribute will remain 
  645.                   the same on the screen.  If Rows or Cols is zero, then 
  646.                   nothing is written.
  647.  
  648.  
  649.    Chapter 2, Procedures and Functions                                 Page 11
  650.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  651.  
  652.  
  653.    EOS            Updated.
  654.    Restrictions   Stay within the screen limits.
  655.    See also       Qfill, QfillC
  656.    Example        To clear a 20 column data entry field at the EOS marker with 
  657.                   yellow on magenta:
  658.  
  659.                     QfillEos (1,20,Yellow+MagentaBG,' ');
  660.  
  661.    ---------------------------------------------------------------------------
  662.    Qinit procedure                                                        Qwik
  663.    ---------------------------------------------------------------------------
  664.    Function       Detects system, display, and video card(s).  Initializes                
  665.                   global data for QWIK routines.
  666.    Declaration    Qinit
  667.    Remarks        Qinit is executed at startup.  Qinit only needs to be run                
  668.                   again if there is a text mode change.
  669.    EOS            Set to (1,1).
  670.    See also       QWIK71A.DOC, QINITEST.PAS, VARIABLES section below.
  671.  
  672.    ---------------------------------------------------------------------------
  673.    QreadAttr function                                                     Qwik
  674.    ---------------------------------------------------------------------------
  675.    Function       Reads an attribute from the current screen.
  676.    Declaration    QreadAttr (Row, Col: byte)
  677.    Result type    byte
  678.    Screens        All video pages and virtual screens.
  679.    Remarks        Reads an attribute from the screen at just one location. 
  680.    EOS            Unaltered.
  681.    See also       QreadChar, QreadStr 
  682.  
  683.    ---------------------------------------------------------------------------
  684.    QreadChar function                                                     Qwik
  685.    ---------------------------------------------------------------------------
  686.    Function       Reads a character from the current screen.
  687.    Declaration    QreadChar (Row, Col: byte)
  688.    Result type    byte
  689.    Screens        All video pages and virtual screens.
  690.    Remarks        Reads a character from the screen at just one location. 
  691.    EOS            Unaltered.
  692.    See also       QreadAttr, QreadStr 
  693.  
  694.    ---------------------------------------------------------------------------
  695.    QreadStr function                                                      Qwik
  696.    ---------------------------------------------------------------------------
  697.    Function       Reads a text string from the current screen.
  698.    Declaration    QreadStr (Row,Col,Cols: byte)
  699.    Result type    string
  700.    Screens        All video pages and virtual screens.
  701.    Remarks        Reads a string of characters from the screen.
  702.    EOS            Unaltered.
  703.    See also       QreadAttr, QreadChar
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.    Chapter 2, Procedures and Functions                                 Page 12
  711.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  712.  
  713.  
  714.    ---------------------------------------------------------------------------
  715.    QscrollDown procedure                                                  Qwik
  716.    ---------------------------------------------------------------------------
  717.    Function       Scrolls a rows-by-columns block down on the current screen 
  718.                   and clears the top row of the block.
  719.    Declaration    QscrollDown (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  720.    Screens        All video pages and virtual screens.
  721.    Remarks        To keep it simple, the block encompasses all affected rows 
  722.                   including the row to be cleared.  The upper left corner of 
  723.                   the block starts at (Row,Col) and the block size is Rows by 
  724.                   Cols.  The bottom row will be scrolled out and lost while 
  725.                   the top row will be cleared with the attribute of BlankAttr 
  726.                   (SameAttr is permitted).  Note that you can even change 1 
  727.                   row and/or 1 column.  The cursor is not moved, but is ready 
  728.                   to be moved with GotoEos.  The CpuID lets the routine choose 
  729.                   the best speed.
  730.    EOS            Updated to first cleared column of the cleared row.
  731.    Restrictions   Stay within the screen limits.
  732.    See also       QscrollUp, GotoEos
  733.    Example        To scroll down the entire screen and clear the top row with 
  734.                   light cyan on blue:
  735.  
  736.                     QscrollDown (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  737.  
  738.  
  739.    ---------------------------------------------------------------------------
  740.    QscrollUp procedure                                                    Qwik
  741.    ---------------------------------------------------------------------------
  742.    Function       Scrolls a rows-by-columns block up on the current screen and 
  743.                   clears the bottom row of the block.
  744.    Declaration    QscrollUp (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  745.    Screens        All video pages and virtual screens.
  746.    Remarks        To keep it simple, the block encompasses all affected rows 
  747.                   including the row to be cleared.  The upper left corner of 
  748.                   the block starts at (Row,Col) and the block size is Rows by 
  749.                   Cols.  The first row will be scrolled out and lost while the 
  750.                   last row will be cleared with the attribute of BlankAttr 
  751.                   (SameAttr is permitted).  Note that you can even change 1 
  752.                   row and/or 1 column.  The cursor is not moved, but is ready 
  753.                   to be moved with GotoEos.  The CpuID lets the routine choose 
  754.                   the best speed. 
  755.    EOS            Updated to first cleared column of the cleared row.
  756.    Restrictions   Stay within the screen limits.
  757.    See also       QscrollDown, GotoEos
  758.    Example        To scroll up the entire screen and clear the last row with                
  759.                   light cyan on blue:
  760.  
  761.                     QscrollUp (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  762.  
  763.    ---------------------------------------------------------------------------
  764.    QScrToVscr procedure                                                   Qwik
  765.    ---------------------------------------------------------------------------
  766.    Function       Copies a rows-by-columns block on the current screen to 
  767.                   another location on a virtual screen.
  768.  
  769.  
  770.  
  771.    Chapter 2, Procedures and Functions                                 Page 13
  772.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  773.  
  774.  
  775.    Declaration    QScrToVscr (Row,Col,Rows,Cols,
  776.                               Vrow,Vcol,Vwidth: byte; var VScrPtr);
  777.    Screens        All video pages and virtual screens.
  778.    Remarks        Row, Col, Rows, and Cols locates the block on the current 
  779.                   screen (Scr) as specified by QScrRec.  This block will be 
  780.                   copied to the virtual screen (Vscr) at the location of Vrow 
  781.                   and Vcol.  But since Vscr may have a different column width 
  782.                   than Scr, Vwidth sets the width.  VScrPtr is the base 
  783.                   address of the virtual screen.  By changing QScrRec, you can 
  784.                   even copy blocks from one virtual screen to another!  Only 
  785.                   the Scr side checks for possible snow.
  786.    EOS            Unaltered.
  787.    Restrictions   Stay within the screen limits.  Not intended for copying 
  788.                   between video pages (esp. CGA).
  789.    See also       QVscrToScr
  790.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a 
  791.                   virtual screen at (3,2) and look at the result on the CRT:
  792.  
  793.    uses Qwik;
  794.    const
  795.      VScrRows = 20;     
  796.      VScrCols = 60;
  797.    var
  798.      { Storage size required is: Rows * Cols shl 1 }
  799.      VScr: array[1..VScrRows] of 
  800.            array[1..VScrCols] of word;  { 20 x 60 virtual screen }
  801.      CRTrec,VScrRec: VScrRecType;
  802.    begin
  803.      with VScrRec do             { create specs for virtual screen }
  804.        begin
  805.          Vrows := VScrRows;
  806.          Vcols := VScrCols;
  807.          Vsize := sizeof (VScr);
  808.          Vsnow := false;         { Qwikest when false }
  809.          VEosOfs := 0;
  810.          VScrPtr := @VScr;
  811.        end;
  812.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill  CRT  }
  813.      CRTrec  := QScrRec;                      { Save CRT specs     }
  814.      QScrRec := VScrRec;                      { Set virtual specs  }
  815.      Qfill (1,1,VScrRows,VScrCols,Black+BrownBG,'?'); { Fill  VScr }
  816.      QScrRec := CRTrec;                       { Restore CRT specs  }
  817.      QScrToVscr (5,10,12,40,3,2,VScrCols,VScr);       { Copy Block }
  818.      QstoreToScr (1,1,VScrRows,VScrCols,VScr);       { Take a look }
  819.    end.
  820.  
  821.    ---------------------------------------------------------------------------
  822.    QstoreToMem procedure                                                  Qwik
  823.    ---------------------------------------------------------------------------
  824.    Function       Saves a rows-by-columns block from the current screen to 
  825.                   memory.
  826.    Declaration    QstoreToMem (Row,Col,Rows,Cols: byte; var Dest);
  827.    Screens        All video pages and virtual screens.
  828.    Remarks        Row, Col, Rows, and Cols locates the block on the current 
  829.                   screen as specified by QScrRec.  This block will be copied 
  830.  
  831.  
  832.    Chapter 2, Procedures and Functions                                 Page 14
  833.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  834.  
  835.  
  836.                   to Dest, the destination, as one long array.  By changing 
  837.                   QScrRec, you can even save blocks from virtual screens!  Be 
  838.                   sure to set Qsnow to false for the fastest speed on virtual 
  839.                   screens.
  840.    EOS            Unaltered.
  841.    Restrictions   Stay within the screen limits.  Not intended for copying 
  842.                   between video pages (esp. CGA).
  843.    See also       QstoreToScr
  844.    Example        Save a 12x40 block from the CRT screen at (5,10), clear the 
  845.                   screen, and restore the block:
  846.  
  847.    uses qwik;
  848.    const
  849.      MemRows = 12;     
  850.      MemCols = 40;
  851.    var
  852.      { Storage size required is: Rows * Cols shl 1 }
  853.      SavedBlock: array[1..MemRows] of 
  854.                  array[1..MemCols] of word;   { 12 x 40 block }
  855.    begin
  856.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill CRT    }
  857.      QstoreToMem (5,10,MemRows,MemCols,SavedBlock);   { Save Block  }
  858.      Qfill (1,1,CRTrows,CRTcols,Yellow+BlackBG,' ');  { Clear CRT   }
  859.      QstoreToScr (5,10,MemRows,MemCols,SavedBlock);   { Take a look }
  860.    end.
  861.  
  862.    ---------------------------------------------------------------------------
  863.    QstoreToScr procedure                                                  Qwik
  864.    ---------------------------------------------------------------------------
  865.    Function       Writes a rows-by-columns block to the current screen from 
  866.                   memory.
  867.    Declaration    QstoreToScr (Row,Col,Rows,Cols: byte; var Source);
  868.    Screens        All video pages and virtual screens.
  869.    Remarks        Row and Col locates the upper left corner of the block on 
  870.                   the current screen as specified by QScrRec.  A block will be 
  871.                   written from Source, which is one long array, and placed on 
  872.                   the screen as a Rows-by-Cols block.  By changing QScrRec, 
  873.                   you can even place blocks to virtual screens!  Be sure to 
  874.                   set Qsnow to false for the fastest speed on virtual screens.
  875.    EOS            Unaltered.
  876.    Restrictions   Stay within the screen limits.  Not intended for copying 
  877.                   between video pages (esp. CGA).
  878.    See also       QstoreToMem
  879.    Example        Save a 12x40 block from the CRT screen at (5,10) in the 
  880.                   heap, clear the screen, and restore the block:
  881.  
  882.    uses qwik;
  883.    const
  884.      MemRows = 12;     
  885.      MemCols = 40;
  886.    type 
  887.      { Storage size required is: Rows * Cols shl 1 }
  888.      BlockArray = array[1..MemRows] of 
  889.                   array[1..MemCols] of word;   { 12 x 40 block }
  890.    var
  891.  
  892.  
  893.    Chapter 2, Procedures and Functions                                 Page 15
  894.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  895.  
  896.  
  897.      BlockPtr: ^BlockArray;
  898.    begin
  899.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');   { Fill CRT     }
  900.      GetMem (BlockPtr,sizeof(BlockArray));           { Reserve heap } 
  901.      QstoreToMem (5,10,MemRows,MemCols,BlockPtr^);   { Save Block   }
  902.      Qfill (1,1,CRTrows,CRTcols,Yellow+BlackBG,' '); { Clear CRT    }
  903.      QstoreToScr (5,10,MemRows,MemCols,BlockPtr^);   { Take a look  }
  904.      FreeMem (BlockPtr,sizeof(BlockArray));          { Free heap    }
  905.    end.
  906.  
  907.    ---------------------------------------------------------------------------
  908.    QviewPage procedure                                                    Qwik
  909.    ---------------------------------------------------------------------------
  910.    Function       Changes the video page to be viewed on the CRT.
  911.    Declaration    QviewPage (PageNum: byte)
  912.    Screens        All video pages.
  913.    Remarks        Standard TP routines are dedicated only to video page 0.  
  914.                   However, most video cards, except MDA and some 3270 PC, have 
  915.                   more than one video page.  This procedure enables you to 
  916.                   view those pages.  The number of video pages available is 
  917.                   detected by Qinit and saved in MaxPage.  PageNum is 0-based 
  918.                   and the routine will only view other pages when 
  919.                   PageNum<=MaxPage.  VideoPage is the currently viewed page.
  920.    EOS            Unaltered.
  921.    See also       QwritePage, QWIK71A.DOC, QINITEST.PAS
  922.  
  923.    ---------------------------------------------------------------------------
  924.    QVscrToScr procedure                                                   Qwik
  925.    ---------------------------------------------------------------------------
  926.    Function       Copies a rows-by-columns block from a virtual screen to 
  927.                   another location on the current screen.
  928.    Declaration    QVscrToScr (Row,Col,Rows,Cols,
  929.                               Vrow,Vcol,Vwidth: byte; var VScrPtr);
  930.    Screens        All video pages and virtual screens.
  931.    Remarks        Row, Col, Rows, and Cols locates the destination on the 
  932.                   current screen (Scr) as specified by QScrRec.  A block will 
  933.                   be copied from the virtual screen (Vscr) at the location of 
  934.                   Vrow and Vcol.  But since Vscr may have a different column 
  935.                   width than Scr, Vwidth sets the width.  VScrPtr is the base 
  936.                   address of the virtual screen.  By changing QScrRec, you can 
  937.                   even copy blocks from one virtual screen to another!  Only 
  938.                   the Scr side checks for possible snow.
  939.    EOS            Unaltered.
  940.    Restrictions   Stay within the screen limits.  Not intended for copying 
  941.                   between video pages (esp. CGA).
  942.    See also       QScrToVscr
  943.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a 
  944.                   virtual screen at (3,2) and look at the result on the CRT:
  945.  
  946.  
  947.    uses Qwik;
  948.    const
  949.      VScrRows = 20;     
  950.      VScrCols = 60;
  951.    var
  952.  
  953.  
  954.    Chapter 2, Procedures and Functions                                 Page 16
  955.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  956.  
  957.  
  958.      { Storage size required is: Rows * Cols shl 1 }
  959.      VScr: array[1..VScrRows] of 
  960.            array[1..VScrCols] of word;  { 20 x 60 virtual screen }
  961.      CRTrec,VScrRec: VScrRecType;
  962.    begin
  963.      with VScrRec do             { create specs for virtual screen }
  964.        begin
  965.          Vrows := VScrRows;
  966.          Vcols := VScrCols;
  967.          Vsize := sizeof (Vscr);
  968.          Vsnow := false;         { Qwikest when false }
  969.          VEosOfs := 0;
  970.          VScrPtr := @VScr;
  971.        end;
  972.      Qfill (1,1,CRTrows,CRTcols,White+BlueBG,'*');    { Fill  CRT  }
  973.      CRTrec  := QScrRec;                      { Save CRT specs     }
  974.      QScrRec := VScrRec;                      { Set virtual specs  }
  975.      Qfill (1,1,VScrRows,VScrCols,Black+BrownBG,'?'); { Fill  VScr }
  976.      QScrRec := CRTrec;                       { Restore CRT specs  }
  977.      QScrToVscr (5,10,12,40,3,2,VScrCols,VScr);       { Copy Block }
  978.      QstoreToScr (1,1,VScrRows,VScrCols,VScr);       { Take a look }
  979.    end.
  980.  
  981.    ---------------------------------------------------------------------------
  982.    Qwrite procedure                                                       Qwik
  983.    ---------------------------------------------------------------------------
  984.    Function       Writes a string to the current screen with an optional 
  985.                   attribute change.
  986.    Declaration    Qwrite (Row,Col: byte; Attr: integer; aStr: string)
  987.    Screens        All video pages and virtual screens.
  988.    Remarks        This routine writes the string aStr at (Row,Col) with the   
  989.                   attribute Attr.  If SameAttr is used for Attr, then the 
  990.                   attribute will remain the same on the screen.
  991.    EOS            Updated.
  992.    Restrictions   Stay within the screen limits.
  993.    See also       QwriteC, QwriteEos, QwriteEosSub, QwriteSub
  994.    Example        Write the string "Important" at (2,1) with the attribute of 
  995.                   flashing white on red: 
  996.  
  997.                     Qwrite (2,1,Blink+White+RedBG,'Important');
  998.  
  999.  
  1000.    ---------------------------------------------------------------------------
  1001.    QwriteC procedure                                                      Qwik
  1002.    ---------------------------------------------------------------------------
  1003.    Function       Writes a string to the current screen with an optional 
  1004.                   attribute change and centered between two columns.
  1005.    Declaration    QwriteC (Row,ColL,ColR: byte; Attr: integer;
  1006.                            aStr: string)
  1007.    Screens        All video pages and virtual screens.
  1008.    Remarks        This routine writes the string aStr at (Row,(ColL+ColR-
  1009.                   aStr[0]+1) shr 1) which centers it between the two columns  
  1010.                   ColL and ColR and has the attribute Attr.  If SameAttr is 
  1011.                   used for Attr, then the attribute will remain the same on 
  1012.                   the screen.
  1013.  
  1014.  
  1015.    Chapter 2, Procedures and Functions                                 Page 17
  1016.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1017.  
  1018.  
  1019.    EOS            Updated.
  1020.    Restrictions   Stay within the screen limits.
  1021.    See also       Qwrite, QwriteEos, QwriteEosSub, QwriteSub
  1022.    Example        Write a message centered on the screen in row 15 with black 
  1023.                   on green attributes:
  1024.  
  1025.                     QwriteC (15,1,CRTcols,White+GreenBG,'My message'); 
  1026.  
  1027.                   The message will be written in column 36 on an 80 column                
  1028.                   screen.
  1029.  
  1030.    ---------------------------------------------------------------------------
  1031.    QwriteEos procedure                                                    Qwik
  1032.    ---------------------------------------------------------------------------
  1033.    Function       Writes a string to the current screen with an optional 
  1034.                   attribute change starting at the EOS marker.
  1035.    Declaration    QwriteEos (Attr: integer; aStr: string)
  1036.    Screens        All video pages and virtual screens.
  1037.    Remarks        This routine writes the string aStr at the EOS marker with 
  1038.                   the attribute Attr.  If SameAttr is used for Attr, then the 
  1039.                   attribute will remain the same on the screen.
  1040.    EOS            Updated.
  1041.    Restrictions   Stay within the screen limits.
  1042.    See also       Qwrite, QwriteC, QwriteEosSub, QwriteSub
  1043.    Example        Highlight the number in the following message:
  1044.  
  1045.                     Qwrite    ( 1, 1,White+BlueBG ,'There are');
  1046.                     QwriteEos (      Yellow+BlueBG,' 5 ');
  1047.                     QwriteEos (      White+BlueBG ,'minutes left.');
  1048.  
  1049.                   which will write "There are 5 minutes left." as white on 
  1050.                   blue except "5" will be yellow on blue.  
  1051.  
  1052.    ---------------------------------------------------------------------------
  1053.    QwriteEosSub procedure                                                 Qwik
  1054.    ---------------------------------------------------------------------------
  1055.    Function       Writes an array (or string) with a specified length to the 
  1056.                   current screen with an optional attribute change starting at 
  1057.                   the EOS marker.
  1058.    Declaration    QwriteEosSub (Attr: integer; Count: word; var Chars)
  1059.    Screens        All video pages and virtual screens.
  1060.    Remarks        This routine writes the array aStr at the previously set EOS 
  1061.                   marker with the attribute Attr for the number of columns 
  1062.                   specified by Count.  This enables you to write substrings 
  1063.                   when specifying a starting index (Chars[i]).  (Other 
  1064.                   routines like QwriteEos assume the length is the value at 
  1065.                   aStr[0] and the starting index is aStr[1].)  Of course, aStr 
  1066.                   doesn't have to be a string - it can be any type variable or 
  1067.                   address in memory.  If SameAttr is used for Attr, then the 
  1068.                   attribute will remain the same on the screen.  
  1069.    EOS            Updated.
  1070.    Restrictions   Stay within the screen limits.
  1071.    See also       QwriteC, QwriteEos, QwriteEos, QwriteSub
  1072.    Example        The following will write "Testing Step B"  with the existing 
  1073.                   screen attributes:
  1074.  
  1075.  
  1076.    Chapter 2, Procedures and Functions                                 Page 18
  1077.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1078.  
  1079.  
  1080.  
  1081.                     MyString:='Step B: Testing out this line.';
  1082.                     QwriteSub (1,5,SameAttr, 8,MyString[9]);
  1083.                     QwriteEosSub ( SameAttr, 6,MyString[1]);
  1084.  
  1085.    ---------------------------------------------------------------------------
  1086.    QwriteEosV procedure                                                   Qwik
  1087.    ---------------------------------------------------------------------------
  1088.    Function       Writes a string vertically to the current screen with an 
  1089.                   optional attribute change starting at the EOS marker.
  1090.    Declaration    QwriteEosV (Attr: integer; aStr: string)
  1091.    Screens        All video pages and virtual screens.
  1092.    Remarks        This routine writes the string aStr vertically at the EOS  
  1093.                   marker with the attribute Attr.  If SameAttr is used for 
  1094.                   Attr, then the attribute will remain the same on the screen.
  1095.    EOS            Updated.
  1096.    Restrictions   Stay within the screen limits.
  1097.    Suggestions    Useful for columns and tables.
  1098.    See also       QwriteV, QwriteVC
  1099.    Example        Highlight the "X" in the following message:
  1100.  
  1101.                     QwriteV    ( 5, 1,White+BlueBG,'OUT');
  1102.                     QwriteEosV (     Yellow+BlueBG,' X ');
  1103.  
  1104.                   which will write "OUT" as white on blue vertically down from 
  1105.                   row 5, column 1.  The yellow on blue "X" will appear on row 
  1106.                   9, column 1.  
  1107.  
  1108.    ---------------------------------------------------------------------------
  1109.    QwritePage procedure                                                   Qwik
  1110.    ---------------------------------------------------------------------------
  1111.    Function       Changes the video page on which the QWIK routines write.
  1112.    Declaration    QwritePage (PageNum: byte)
  1113.    Screens        All video pages.
  1114.    Remarks        Standard TP routines are dedicated to only video page 0.  
  1115.                   However, most video cards, except MDA and some 3270 PC, have 
  1116.                   more than one video page.  This procedure enables QWIK 
  1117.                   routines to write to those pages by altering QScrOfs and 
  1118.                   QvideoPage which is the current page on which QWIK is 
  1119.                   writing. The number of video pages available is detected by 
  1120.                   Qinit and saved in MaxPage.  The routine will only change 
  1121.                   pages when PageNum<=MaxPage.
  1122.    EOS            Unaltered.
  1123.    See also       QviewPage, QWIK71A.DOC, QINITEST.PAS
  1124.  
  1125.    ---------------------------------------------------------------------------
  1126.    QwriteSub procedure                                                    Qwik
  1127.    ---------------------------------------------------------------------------
  1128.    Function       Writes an array (or string) with a specified length to the                
  1129.                   current screen with an optional attribute change.
  1130.    Declaration    QwriteSub (Row,Col: byte; Attr: integer; Count: word; 
  1131.                              var Chars)
  1132.    Screens        All video pages and virtual screens.
  1133.    Remarks        This routine writes the array aStr at (Row,Col) with the 
  1134.                   attribute Attr for the number of columns specified by Count.  
  1135.  
  1136.  
  1137.    Chapter 2, Procedures and Functions                                 Page 19
  1138.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1139.  
  1140.  
  1141.                   This enables you to write substrings when specifying a 
  1142.                   starting index (aStr[i]).  (Other routines like Qwrite 
  1143.                   assume the length is the value at aStr[0] and the starting 
  1144.                   index is aStr[1].)  Of course, aStr doesn't have to be a 
  1145.                   string - it can be any type variable or address in memory.  
  1146.                   If SameAttr is used for Attr, then the attribute will remain 
  1147.                   the same on the screen.  
  1148.    EOS            Updated.
  1149.    Restrictions   Stay within the screen limits.
  1150.    See also       Qwrite, QwriteC, QwriteEos, QwriteEosSub
  1151.    Example        The following will write "Testing out this line."  with the 
  1152.                   existing screen attributes:
  1153.  
  1154.                      MyString:='Step B: Testing out this line.';
  1155.                      QwriteSub (1,1,SameAttr,22,MyString[9]);
  1156.  
  1157.    ---------------------------------------------------------------------------
  1158.    QwriteSubC procedure                                                   Qwik
  1159.    ---------------------------------------------------------------------------
  1160.    Function       Writes an array (or string) with a specified length to the  
  1161.                   current screen with an optional attribute change and self- 
  1162.                   centers it.
  1163.    Declaration    QwriteSubC (Row,ColL,ColR: byte; Attr: integer; Count: word;
  1164.                               var Chars)
  1165.    Screens        All video pages and virtual screens.
  1166.    Remarks        This routine writes the array Chars at (Row,(ColL+ColR-
  1167.                   Count+1) shr 1) which centers it between the two columns 
  1168.                   ColL and ColR and has the attribute Attr for the number of 
  1169.                   columns specified by Count.  This enables you to write 
  1170.                   substrings starting at any index in a string.  (Other 
  1171.                   routines like Qwrite assume the length is the value at 
  1172.                   aStr[0] and the starting index is aStr[1].)  Of course, aStr 
  1173.                   doesn't have to be a string - it can be any type variable or 
  1174.                   address in memory.  If SameAttr is used for Attr, then the 
  1175.                   attribute will remain the same on the screen.  
  1176.    EOS            Updated.
  1177.    Restrictions   Stay within the screen limits.
  1178.    See also       Qwrite, QwriteC, QwriteEos, QwriteEosSub, QwriteSub
  1179.    Example        The following will write "Testing out this line."  with the 
  1180.                   existing screen attributes centered horizontally:
  1181.  
  1182.                      MyString:='Step B: Testing out this line.';
  1183.                      QwriteSubC (1,1,CrtCols,SameAttr,22,MyString[9]);
  1184.  
  1185.    ---------------------------------------------------------------------------
  1186.    QwriteV procedure                                                      Qwik
  1187.    ---------------------------------------------------------------------------
  1188.    Function       Writes a string vertically to the current screen with an 
  1189.                   optional attribute change.
  1190.    Declaration    QwriteV (Row,Col: byte; Attr: integer; aStr: string)
  1191.    Screens        All video pages and virtual screens.
  1192.    Remarks        This routine writes the string aStr at (Row,Col) with the   
  1193.                   attribute Attr.  If SameAttr is used for Attr, then the 
  1194.                   attribute will remain the same on the screen.
  1195.    EOS            Updated.
  1196.  
  1197.  
  1198.    Chapter 2, Procedures and Functions                                 Page 20
  1199.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1200.  
  1201.  
  1202.    Restrictions   Stay within the screen limits.
  1203.    Suggestions    Useful for columns and tables.
  1204.    See also       QwriteEosV, QwriteVC
  1205.    Example        Write the string "TABLE" vertically (2,1) with the attribute 
  1206.                   of black on light gray:
  1207.  
  1208.                     QwriteV (2,1,LightGrayBG,'TABLE');
  1209.  
  1210.  
  1211.    ---------------------------------------------------------------------------
  1212.    QwriteVC procedure                                                     Qwik
  1213.    ---------------------------------------------------------------------------
  1214.    Function       Writes a string vertically to the current screen with an 
  1215.                   optional attribute change and centered between two columns.
  1216.    Declaration    QwriteVC (RowT,RowB,Col: byte; Attr: integer;
  1217.                             aStr: string)
  1218.    Screens        All video pages and virtual screens.
  1219.    Remarks        This routine writes the string aStr at ((RowT+RowB-
  1220.                   aStr[0]+1) shr 1, Col) which centers it between the two rows 
  1221.                   RowT and RowB and has the attribute Attr.  If SameAttr is 
  1222.                   used for Attr, then the attribute will remain the same on 
  1223.                   the screen.
  1224.    EOS            Updated.
  1225.    Restrictions   Stay within the screen limits.
  1226.    Suggestions    Useful for columns and tables.
  1227.    See also       QwriteEosV, QwriteV
  1228.    Example        Write the string "TABLE" vertically on centered on column 1                
  1229.                   with the attribute of black on light gray:
  1230.  
  1231.                     QwriteCV (1,CrtRows,1,LightGrayBG,'TABLE');
  1232.  
  1233.                   The message will be written in column 1 on starting at row 
  1234.                   11 on a 25 row screen.
  1235.  
  1236.    ---------------------------------------------------------------------------
  1237.    SetCursor procedure                                                    Qwik
  1238.    ---------------------------------------------------------------------------
  1239.    Function       Sets a new cursor mode for the CRT.
  1240.    Declaration    SetCursor (Cursor: word)
  1241.    Screens        Any video page as viewed.
  1242.    Remarks        Using the default cursor variables set by Qinit and/or the 
  1243.                   cursor constants, a new cursor mode can be set by with any 
  1244.                   combination of:
  1245.  
  1246.                     CursorInitial       - detected by Qinit at startup
  1247.                     CursorUnderline     - set by Qinit
  1248.                     CursorHalfBlock     - set by Qinit
  1249.                     CursorBlock         - set by Qinit
  1250.                     CursorOff   ($2000) - turns cursor off
  1251.                     CursorBlink ($6000) - erratic blinking (MDA/CGA)
  1252.  
  1253.                   You can simply add them together (logically is best to 
  1254.                   prevent carry errors, but arithmetic is fine).  Although a 
  1255.                   separate cursor location is kept for each video page, there 
  1256.                   is only one cursor mode for the CRT screen.
  1257.  
  1258.  
  1259.    Chapter 2, Procedures and Functions                                 Page 21
  1260.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1261.  
  1262.  
  1263.    See also       GetCursor, ModCursor
  1264.    Example 1      Set a half-block cursor with erratic blink:
  1265.  
  1266.                     SetCursor (CursorHalfBlock+CursorBlink);
  1267.  
  1268.    Example 2      Set the scan lines for a block cursor, but leave it turned 
  1269.                   off:
  1270.  
  1271.                     SetCursor (CursorBlock+CursorOff);
  1272.  
  1273.    Example 3      Restore the cursor mode at start up and be sure it's turned 
  1274.                   on:
  1275.  
  1276.                     SetCursor (CursorInitial);
  1277.                     ModCursor (CursorOn);
  1278.  
  1279.                   or, for those comfortable with bit operations:
  1280.  
  1281.                     SetCursor (CursorInitial and not CursorBlink);
  1282.  
  1283.  
  1284.    ---------------------------------------------------------------------------
  1285.    SetMultiTask procedure                                                 Qwik
  1286.    ---------------------------------------------------------------------------
  1287.    Function       Set QWIK variables to write direct to multi-tasking video 
  1288.                   buffers (MTVB).
  1289.    Declaration    SetMultiTask
  1290.    Remarks        This procedure alters the following variables if the program 
  1291.                   is running under a multi-tasking environment and the user 
  1292.                   has chosen to use the faster MTVB.  If there is no multi-
  1293.                   tasking environment or the MTVB is not used (normal direct 
  1294.                   screen video), then these variables are unaltered.  If you 
  1295.                   use the CRT unit, be sure to set DirectVideo to false when 
  1296.                   using the MTVB.
  1297.  
  1298.                     QScrPtr     - the segment is altered, but the offset is 
  1299.                                   usually 0.
  1300.                     Page0Seg    - set to match QSegPtr to indicate page 0.
  1301.                     Qsnow       - set to false.
  1302.                     InMultiTask - True if using MTVB, else false.
  1303.  
  1304.    See also       InMultiTask in VARIABLES section below.
  1305.    Example        Search for locations in the *.PAS demonstration files.
  1306.  
  1307.    ---------------------------------------------------------------------------
  1308.    StrL function                                                          Strs
  1309.    ---------------------------------------------------------------------------
  1310.    Function       Returns a LongInt converted into a string. 
  1311.    Declaration    StrL (L: LongInt)
  1312.    Result type    string
  1313.    Remarks        Uses the standard Str procedure to get result.
  1314.    See also       StrLF, StrR, StrRF, StrRFD
  1315.    Example        The following writes "-12345" on the screen:
  1316.  
  1317.  
  1318.  
  1319.  
  1320.    Chapter 2, Procedures and Functions                                 Page 22
  1321.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1322.  
  1323.  
  1324.                      { var MyNum: integer; }
  1325.                      MyNum := -12345;
  1326.                      Qwrite ( 1, 1,SameAttr,StrL(MyNum));
  1327.  
  1328.    ---------------------------------------------------------------------------
  1329.    StrLF function                                                         Strs
  1330.    ---------------------------------------------------------------------------
  1331.    Function       Returns a LongInt converted into a string and formatted to 
  1332.                   be right justified in a fixed field. 
  1333.    Declaration    StrLF (L: LongInt; Field: integer)
  1334.    Result type    string
  1335.    Remarks        Uses the standard Str procedure to get result.
  1336.    See also       StrL, StrR, StrRF, StrRFD
  1337.    Example        The following writes "  -12345" on the screen:
  1338.  
  1339.                      { var MyNum: integer; }
  1340.                      MyNum := -12345;
  1341.                      Qwrite ( 1, 1,SameAttr,StrLF(MyNum,8));
  1342.  
  1343.    ---------------------------------------------------------------------------
  1344.    StrR function                                                          Strs
  1345.    ---------------------------------------------------------------------------
  1346.    Function       Returns a Real converted into a string. 
  1347.    Declaration    StrR (R: Real)
  1348.    Result type    string
  1349.    Remarks        Uses the standard Str procedure to get result.
  1350.    See also       StrL, StrLF, StrRF, StrRFD
  1351.    Example        The following writes "-1.2345560000E+04" on the screen:
  1352.  
  1353.                      { var MyNum: real; }
  1354.                      MyNum := -12345.56;
  1355.                      Qwrite ( 1, 1,SameAttr,StrR(MyNum));
  1356.  
  1357.    ---------------------------------------------------------------------------
  1358.    StrRF function                                                         Strs
  1359.    ---------------------------------------------------------------------------
  1360.    Function       Returns a Real converted into a string and formatted to 
  1361.                   be right justified in a fixed field. 
  1362.    Declaration    StrRF (R: Real; Field: integer)
  1363.    Result type    string
  1364.    Remarks        Uses the standard Str procedure to get result. 
  1365.    See also       StrL, StrLF, StrR, StrRFD
  1366.    Example        The following writes "-1.2346E+04" on the screen:
  1367.  
  1368.                      { var MyNum: real; }
  1369.                      MyNum := -12345.56;
  1370.                      Qwrite ( 1, 1,SameAttr,StrRF(MyNum,11));
  1371.  
  1372.    ---------------------------------------------------------------------------
  1373.    StrRFD function                                                        Strs
  1374.    ---------------------------------------------------------------------------
  1375.    Function       Returns a Real converted into a string and formatted to 
  1376.                   be right justified in a fixed field with a fixed number of 
  1377.                   numbers to the right of the decimal.
  1378.    Declaration    StrRFD (R: Real; Field,Decimal: integer)
  1379.  
  1380.  
  1381.    Chapter 2, Procedures and Functions                                 Page 23
  1382.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1383.  
  1384.  
  1385.    Result type    string
  1386.    Remarks        Uses the standard Str procedure to get result.
  1387.    See also       StrL, StrLF, StrR, StrRF
  1388.    Example        The following writes "  -12345.6" on the screen:
  1389.  
  1390.                      { var MyNum: real; }
  1391.                      MyNum := -12345.56;
  1392.                      Qwrite ( 1, 1,SameAttr,StrRFD(MyNum,10,1));
  1393.  
  1394.    ---------------------------------------------------------------------------
  1395.    WhereC function                                                        Qwik
  1396.    ---------------------------------------------------------------------------
  1397.    Function       Returns the absolute column of the cursor on the currently 
  1398.                   written video page.
  1399.    Declaration    WhereC
  1400.    Result type    byte
  1401.    Screens        All video pages only.
  1402.    Remarks        Operates on the currently written video page.  The upper                
  1403.                   left corner of the screen (1,1). 
  1404.    See also       GotoRC, WhereR
  1405.  
  1406.    ---------------------------------------------------------------------------
  1407.    WhereR function                                                        Qwik
  1408.    ---------------------------------------------------------------------------
  1409.    Function       Returns the absolute row of the cursor on the currently 
  1410.                   written video page.
  1411.    Declaration    WhereR
  1412.    Result type    byte
  1413.    Screens        All video pages only.
  1414.    Remarks        Operates on the currently written video page.  The upper                
  1415.                   left corner of the screen (1,1). 
  1416.    See also       GotoRC, WhereC
  1417.    ---------------------------------------------------------------------------
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.    Chapter 2, Procedures and Functions                                 Page 24
  1443.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1444.  
  1445.  
  1446.    3.  V A R I A B L E S
  1447.  
  1448.    The variables in QWIK.TPU are initialized according to the the kind of 
  1449.    system, display(s), and video adapter(s) that Qinit detects.  QWIK uses 
  1450.    them for reference and they may also be used in your own programming to 
  1451.    help make decisions.
  1452.  
  1453.  
  1454.    SYSTEM HARDWARE
  1455.  
  1456.    System Hardware Variables - These variables indicate the kind of computer 
  1457.    that Qinit detected:
  1458.  
  1459.      Variable      Description
  1460.      ------------  -----------------------------------------------------------
  1461.      CpuID         (Type: Byte) Intel CPU identification code.  CpuID can be 
  1462.                    any one of the following four constants:
  1463.  
  1464.                      Cpu8086    - Intel 8086/8088     
  1465.                      Cpu80186   - Intel 80186/80188   
  1466.                      Cpu80286   - Intel 80286         
  1467.                      Cpu80386   - Intel 80386         
  1468.                      Cpu80486   - Intel 80486         
  1469.                      CpuPentium - Intel Pentium         
  1470.  
  1471.      SystemID      (Type: Byte) Code for the IBM computer in use and is set by                    
  1472.                    Qinit.  See SubModelID for values.
  1473.  
  1474.      SubModelID    (Type: Byte) Code for the sub-model of the IBM computer in 
  1475.                    use.  This value defaults to 0 the first time Qinit is run.
  1476.                    To get a value, execute GetSubModelID.
  1477.  
  1478.                      SysID Sub-Model SYSTEM
  1479.                      ----- --------- ------------------------------
  1480.                      $FF     n/a     IBM PC
  1481.                      $FE     n/a     IBM PC XT
  1482.                      $FD     n/a     IBM PCjr
  1483.                      $FC     n/a     IBM PC AT (6 MHz, 01/10/84)
  1484.                              $00     IBM PC AT (6 MHz, 06/10/85)
  1485.                              $01     IBM PC AT (8 MHz, 11/15/85)
  1486.                              $02     IBM PC XT (286)
  1487.                              $04     IBM PS/2 model 50
  1488.                              $05     IBM PS/2 model 60
  1489.                      $FB     $00     IBM PC XT (256/640)
  1490.                      $FA     $00     IBM PS/2 model 30
  1491.                              $01     IBM PS/2 model 25
  1492.                      $F9     $00     IBM PC Convertible
  1493.                      $F8     $00     IBM PS/2 model 80 (16 MHz)
  1494.                              $01     IBM PS/2 model 80 (20 MHz)
  1495.                              $04     IBM PS/2 model 70 (16 MHz)
  1496.                              $09     IBM PS/2 model 70 (20 MHz)
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.    Chapter 3, Variables                                                Page 25
  1504.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1505.  
  1506.  
  1507.    VIDEO HARDWARE
  1508.  
  1509.    Video Hardware Variables - These variables indicate the kind of video    
  1510.    card(s) and display(s) that Qinit detected:
  1511.  
  1512.      Variable      Description
  1513.      ------------- ----------------------------------------------------------
  1514.      ActiveDispDev (Type: Byte) Code for the Active Display Device.  Using 
  1515.                    IBM's Display Combination Code (DCC), Qinit detects the 
  1516.                    video adapter combined with the video display.  The codes 
  1517.                    have been set to the following constants.  Note that 
  1518.                    monochrome is odd and color is even:
  1519.  
  1520.                      Constant    Code  Description
  1521.                      ----------- ----- --------------------------------
  1522.                      NoDisplay   $00   No display
  1523.                      MdaMono     $01   MDA with 5151 monochrome display
  1524.                      CgaColor    $02   CGA with 5153/4 color display
  1525.                      DCC3        $03   reserved
  1526.                      EgaColor    $04   EGA with 5153/4 color
  1527.                      EgaMono     $05   EGA with 5151 monochrome
  1528.                      PgcColor    $06   PGC with 5175 color
  1529.                      VgaMono     $07   VGA with analog monochrome
  1530.                      VgaColor    $08   VGA with analog color
  1531.                      DCC9        $09   reserved
  1532.                      DCC10       $0A   reserved
  1533.                      McgaMono    $0B   MCGA with analog monochrome
  1534.                      McgaColor   $0C   MCGA with analog color
  1535.                      n/a         $0D to $FE - reserved
  1536.                      Unknown     $FF   unknown device
  1537.  
  1538.      ActiveDispDev3270 (Type: Byte) Code for the Active Display Device on the 
  1539.                    3270 PC.  Only the $FF code corresponds to the constant 
  1540.                    "Unknown".
  1541.  
  1542.                      Code  Monitor       Adapter
  1543.                      ----  ------------  ---------------------
  1544.                      $00   5151 or 5272  for 5151 or 5272
  1545.                      $01   3295          for 3295
  1546.                      $02   5151 or 5272  for 5151 or 5272 plus
  1547.                                            XGA graphics
  1548.                      $03   5279          3270 PC G
  1549.                      $04   5379 C01      3270 PC GX
  1550.                      $05   5379 M01      3270 PC GX
  1551.                      $06   reserved
  1552.                      $07   reserved
  1553.                      $FF   Unknown, not a 3270 PC
  1554.  
  1555.      AltDispDev    (Type: Byte) Code for the Alternate Display Device.  This 
  1556.                    code is detected by Qinit for a second, but inactive 
  1557.                    adapter and display, just in case there are dual monitors.  
  1558.                    It uses the same constants as ActiveDispDev listed above.
  1559.  
  1560.      AltDispDevPCC (Type: Word) Code for the Alternate Display adapter on the 
  1561.                    PC Convertible.  In hex, it corresponds to the model number 
  1562.  
  1563.  
  1564.    Chapter 3, Variables                                                Page 26
  1565.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1566.  
  1567.  
  1568.                    of the attached device:
  1569.  
  1570.                      Model  Description
  1571.                      -----  --------------------
  1572.                      $   0  No alternate adapter
  1573.                      $5140  LCD
  1574.                      $5153  CGA type
  1575.                      $5151  Monochrome type
  1576.  
  1577.      CardSeg       (Type: Word) Video segment address of the video "card" as 
  1578.                    detected by Qinit.
  1579.      
  1580.      CardSnow      (Type: Boolean) Set to true for wait-for-retrace for the 
  1581.                    video "card" as detected by Qinit.
  1582.  
  1583.      EgaInfo       (Type: Byte) Absolute variable at $0040:$0087 has the 
  1584.                    following information when the EGA (or VGA) is present:
  1585.  
  1586.                      Bits  Description
  1587.                      ----  -------------------------------------------
  1588.                      7     (0) Clear, (1) Keep video data after
  1589.                            video mode set
  1590.                      6,5   (00) 64k, (01), 128k, (10) 192k, (11) 256k,
  1591.                            memory on the card.
  1592.                      4     Reserved
  1593.                      3     (0) EGA active, (1) EGA not active
  1594.                      2     (0) Disable,    (1) Enable wait-for-display
  1595.                      1     (0) CD/ECD      (1) MD attached
  1596.                      0     (0) Active,     (1) Inactive CD emulation
  1597.  
  1598.      EgaSwitches   (Type: Byte) By checking the value of this byte, you can 
  1599.                    determine the monitor connected to the EGA, the alternate 
  1600.                    video system, and the start up default.  The byte is a copy 
  1601.                    of how the dip switches are set on the card where on=0 and 
  1602.                    off=1.  The primary is the default.  When the ECD is set 
  1603.                    for 640x200, it is emulating the CD including the cursor 
  1604.                    mode.  Qinit directly tests for the alternate device rather 
  1605.                    than assuming it.
  1606.  
  1607.                      Switch    Primary             Secondary
  1608.                      --------  ------------------- -------------------
  1609.                      0000 = 0  MDA + MD            EGA + CD - 40x25
  1610.                      0001 = 1  MDA + MD            EGA + CD - 80x25
  1611.                      0010 = 2  MDA + MD            EGA + ECD (640x200)
  1612.                      0011 = 3  MDA + MD            EGA + ECD (640x350)
  1613.                      0100 = 4  CGA + CD - 40x25    EGA + MD
  1614.                      0101 = 5  CGA + CD - 80x25    EGA + MD
  1615.                      0110 = 6  EGA + CD - 40x25    MDA + MD
  1616.                      0111 = 7  EGA + CD - 80x25    MDA + MD
  1617.                      1000 = 8  EGA + ECD (640x200) MDA + MD 
  1618.                      1001 = 9  EGA + ECD (640x350) MDA + MD 
  1619.                      1010 =10  EGA + MD            CGA + CD - 40x25
  1620.                      1011 =11  EGA + MD            CGA + CD - 80x25
  1621.  
  1622.      Have3270      (Type: Boolean) If Qinit detects 3270 PC equipment or 
  1623.  
  1624.  
  1625.    Chapter 3, Variables                                                Page 27
  1626.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1627.  
  1628.  
  1629.                    software, this variable is set to true.  In addition, the 
  1630.                    ActiveDispDev is either MdaMono or CgaColor.  Note that 
  1631.                    there may or may not be graphics capability in either case.  
  1632.                    Qinit is not meant to detect graphics.  See 
  1633.                    ActiveDispDev3270 for codes.
  1634.  
  1635.      HavePS2       (Type: Boolean) Qinit sets HavePS2 to true if the DCC is 
  1636.                    supported.  This means that the program has detected a PS/2 
  1637.                    video card whether it is integrated on a model 30, a PS/2 
  1638.                    Display Adapter installed on an IBM XT, or the like.  It 
  1639.                    also means that either MCGA or VGA is present, but not 
  1640.                    necessarily active.  To know which, just check the DCC.
  1641.  
  1642.      HercModel     (Type: Byte) Model of the attached Hercules video card.  If 
  1643.                    no card is detected, then HercModel=NoHerc.
  1644.  
  1645.                      Constant    Code  Description
  1646.                      ----------  ----  ---------------------
  1647.                      NoHerc       0    No Hercules card
  1648.                      HgcMono      1    HGC
  1649.                      HgcPlus      2    HGC Plus
  1650.                      HercInColor  3    Hercules InColor Card
  1651.  
  1652.      MaxPage       (Type: Byte) Maximum possible 0-based video page number.  
  1653.                    See TABLE 1 in QWIK71A.DOC for ranges.
  1654.  
  1655.  
  1656.    VIDEO SOFTWARE
  1657.  
  1658.    Video Software Variables - These variables indicate the current video mode 
  1659.    and screen characteristics to which QWIK is writing and what is being 
  1660.    viewed on the CRT.  There are several absolute variables listed that 
  1661.    duplicate some of the global variables like CRTcolumns and CRTcols.  It is 
  1662.    preferable to use the global ones, where the absolute ones are only needed 
  1663.    for handling exceptions.
  1664.  
  1665.      Variable      Description
  1666.      ------------  -----------------------------------------------------------
  1667.      CRTcols       (Type: Byte) Global variable equal to CRTcolumns.
  1668.  
  1669.      CRTcolumns    (Type: Word) Absolute variable directly accesses the 1-
  1670.                    based currently viewed number of CRT columns for any card 
  1671.                    or video mode.
  1672.  
  1673.      CRTrows       (Type: Byte) 1-based number of CRT rows for any card or 
  1674.                    video mode.
  1675.  
  1676.      EgaFontSize   (Type: Word) Absolute variable directly accesses the 1-
  1677.                    based number of horizontal scan lines per character for 
  1678.                    EGA/MCGA/VGA.
  1679.  
  1680.      EgaRows       (Type: Byte) Absolute variable directly accesses the 0-
  1681.                    based number of rows on the current screen for EGA, MCGA, 
  1682.                    and VGA.  This number is used to make CRTrows which is 
  1683.                    handled by Qinit.
  1684.  
  1685.  
  1686.    Chapter 3, Variables                                                Page 28
  1687.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1688.  
  1689.  
  1690.  
  1691.      InMultiTask   (Type: Boolean)  This flag indicates if MTVB is being used  
  1692.                    for the screen in lieu of the normal screen.  It defaults 
  1693.                    to false and is possibly altered with SetMultiTask if the 
  1694.                    multitasking software has be instructed to expect writing 
  1695.                    direct to the MTVB (not direct screen).
  1696.  
  1697.      Page0seg      (Type: Word) Segment or selector used for the base page, 
  1698.                    page 0.  In multi- tasking environments, change this value 
  1699.                    to its video display buffer.  QScrSeg and QScrOfs should 
  1700.                    also be set.
  1701.  
  1702.      QEosOfs       (Type: Word) 0-base offset where a Q*Eos procedure will 
  1703.                    write.
  1704.  
  1705.      QScrSeg       (Type: Word) Segment or selector for QWIK writing which is 
  1706.                    altered when changing pages.  QScrSeg=Page0seg on page 0.
  1707.  
  1708.      QScrOfs       (Type: Word) Offset for QWIK writing needed for virtual 
  1709.                    screens.  The usual value is 0 for the video pages.
  1710.  
  1711.      QScrPtr       (Type: Pointer) Combines QScrSeg and QScrOfs
  1712.  
  1713.      QScrRec       (Type: VScrRecType) Record of essential variables for QWIK 
  1714.                    screen writing.  This variable occupies the same space and 
  1715.                    in the same order of:
  1716.  
  1717.                      Global    QScrRec
  1718.                      -------   -------
  1719.                      CRTrows   Vrows
  1720.                      CRTcols   Vcols
  1721.                      CRTsize   Vsize
  1722.                      Qsnow     Vsnow
  1723.                      QEosOfs   VEosOfs
  1724.                      QScrPtr   VScrPtr
  1725.  
  1726.                    These variables are also described in this section.  As a 
  1727.                    record, the variables can be swapped easily when writing to 
  1728.                    virtual screens.  See the example in QVscrToScr procedure.
  1729.  
  1730.      Qsnow         (Type: Boolean) Set to true for wait-for-retrace (snow) 
  1731.                    while QWIK is writing.
  1732.  
  1733.      QvideoPage    (Type: Byte) Video page to which QWIK is writing which is 
  1734.                    set by QwritePage.  It is initially 0.
  1735.  
  1736.      QvideoMode    (Type: Byte) Video mode detected by Qinit.
  1737.  
  1738.      ScrollAttr    (Type: Integer) The attribute used to clear the blank row 
  1739.                    when QEosLn is used.
  1740.  
  1741.      VideoMode     (Type: Byte) Absolute variable directly accesses the 
  1742.                    current video mode in low memory.
  1743.  
  1744.      VideoPage     (Type: Byte) Absolute variable directly accesses the 
  1745.  
  1746.  
  1747.    Chapter 3, Variables                                                Page 29
  1748.    QWIK Screen Utilities                        Reference Guide, Version 7.1a
  1749.  
  1750.  
  1751.                    currently viewed video page in low memory.
  1752.  
  1753.      VScrRecType   The type for the record of essential variables for QWIK 
  1754.                    screen writing to virtual screens.  This enables an easy 
  1755.                    exchange of data between the CRT and virtual screens.
  1756.  
  1757.  
  1758.    VIDEO CURSOR
  1759.  
  1760.    Video Cursor Variables and Constants - These variables and constants give 
  1761.    you easy tools to combine with bit operations to display your choice of 
  1762.    cursor modes.  The variables default with the cursor on and no skew which 
  1763.    are detected and set by Qinit at startup:
  1764.  
  1765.      Variable          Description
  1766.      ----------------- -------------------------------------------------------
  1767.      CursorBlock       (Type: Word) Cursor mode value for the full cell.
  1768.  
  1769.      CursorHalfblock   (Type: Word) Cursor mode value for a half block usually 
  1770.                        used for insert editing.
  1771.  
  1772.      CursorInitial     (Type: Word) Cursor mode value detected at startup.
  1773.  
  1774.      CursorUnderline   (Type: Word) Cursor mode value for the normal 
  1775.                        underline.
  1776.  
  1777.  
  1778.      Constant     Value  Description
  1779.      -----------  -----  -----------------------------------------------------
  1780.      CursorBlink  $6000  Used to alter bits 13/14 to create erratic blinking 
  1781.                          on MDA/CGA cards.  (EGA/VGA cards turn the cursor 
  1782.                          off.)
  1783.  
  1784.      CursorOff    $2000  Used to alter bits 13/14 or can be used by itself to 
  1785.                          turn the cursor off.
  1786.  
  1787.      CursorOn     $0000  Used to alter bits 13/14 in ModeCursor to turn the 
  1788.                          cursor back on.
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  
  1797.  
  1798.  
  1799.  
  1800.  
  1801.  
  1802.  
  1803.  
  1804.  
  1805.  
  1806.  
  1807.  
  1808.    Chapter 3, Variables                                                Page 30
  1809.