home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / turbopas / qwik55.arc / QWIKREF.DOC < prev    next >
Encoding:
Text File  |  1989-08-24  |  75.1 KB  |  1,687 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.                               QWIK SCREEN UTILITIES
  22.                                  REFERENCE GUIDE
  23.  
  24.                                    Version 5.5
  25.                                   March 4, 1989
  26.  
  27.  
  28.                Copyright (C) 1988-1989 Eagle Performance Software
  29.                               All Rights Reserved.
  30.  
  31.  
  32.  
  33.                                _______
  34.                           ____|__     |               (tm)
  35.                        --|       |    |-------------------
  36.                          |   ____|__  |  Association of
  37.                          |  |       |_|  Shareware
  38.                          |__|   o   |    Professionals
  39.                        -----|   |   |---------------------
  40.                             |___|___|    MEMBER
  41.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  42.  
  43.  
  44.  
  45.                        T A B L E   O F   C O N T E N T S
  46.  
  47.         1. INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . 4
  48.              Purpose . . . . . . . . . . . . . . . . . . . . . . . 4
  49.              Common Parameters . . . . . . . . . . . . . . . . . . 4
  50.              Attributes  . . . . . . . . . . . . . . . . . . . . . 5
  51.  
  52.         2. PROCEDURES AND FUNCTIONS  . . . . . . . . . . . . . . . 7
  53.              EosC  . . . . . . . . . . . . . . . . . . . . . . . . 7
  54.              EosLn . . . . . . . . . . . . . . . . . . . . . . . . 7
  55.              EosR  . . . . . . . . . . . . . . . . . . . . . . . . 7
  56.              EosToCursor . . . . . . . . . . . . . . . . . . . . . 7
  57.              EosToRC . . . . . . . . . . . . . . . . . . . . . . . 7
  58.              EosToRCrel  . . . . . . . . . . . . . . . . . . . . . 8
  59.              GetCursor . . . . . . . . . . . . . . . . . . . . . . 8
  60.              GetSubModelID . . . . . . . . . . . . . . . . . . . . 8
  61.              GotoEos . . . . . . . . . . . . . . . . . . . . . . . 8
  62.              GotoRC. . . . . . . . . . . . . . . . . . . . . . . . 9
  63.              ModCursor . . . . . . . . . . . . . . . . . . . . . . 9
  64.              Qattr . . . . . . . . . . . . . . . . . . . . . . . . 9
  65.              QattrC  . . . . . . . . . . . . . . . . . . . . . . . 10
  66.              QattrEos  . . . . . . . . . . . . . . . . . . . . . . 10
  67.              QEosLn  . . . . . . . . . . . . . . . . . . . . . . . 10
  68.              Qfill . . . . . . . . . . . . . . . . . . . . . . . . 11
  69.              QfillC  . . . . . . . . . . . . . . . . . . . . . . . 11
  70.              QfillEos  . . . . . . . . . . . . . . . . . . . . . . 11
  71.              Qinit . . . . . . . . . . . . . . . . . . . . . . . . 12
  72.              QreadAttr . . . . . . . . . . . . . . . . . . . . . . 12
  73.              QreadChar . . . . . . . . . . . . . . . . . . . . . . 12
  74.              QreadStr  . . . . . . . . . . . . . . . . . . . . . . 12
  75.              QscrollDown . . . . . . . . . . . . . . . . . . . . . 13
  76.              QscrollUp . . . . . . . . . . . . . . . . . . . . . . 13
  77.              QScrToVscr  . . . . . . . . . . . . . . . . . . . . . 13
  78.              QstoreToMem . . . . . . . . . . . . . . . . . . . . . 14
  79.              QstoreToScr . . . . . . . . . . . . . . . . . . . . . 15
  80.              QviewPage . . . . . . . . . . . . . . . . . . . . . . 16
  81.              QVscrToScr  . . . . . . . . . . . . . . . . . . . . . 16
  82.              Qwrite  . . . . . . . . . . . . . . . . . . . . . . . 17
  83.              QwriteA . . . . . . . . . . . . . . . . . . . . . . . 17
  84.              QwriteC . . . . . . . . . . . . . . . . . . . . . . . 18
  85.              QwriteEos . . . . . . . . . . . . . . . . . . . . . . 18
  86.              QwriteEosA  . . . . . . . . . . . . . . . . . . . . . 19
  87.              QwritePage  . . . . . . . . . . . . . . . . . . . . . 19
  88.              SetCursor . . . . . . . . . . . . . . . . . . . . . . 19
  89.              SetMultiTask  . . . . . . . . . . . . . . . . . . . . 20
  90.              StrL  . . . . . . . . . . . . . . . . . . . . . . . . 21
  91.              StrLF . . . . . . . . . . . . . . . . . . . . . . . . 21
  92.              StrR  . . . . . . . . . . . . . . . . . . . . . . . . 21
  93.              StrRF . . . . . . . . . . . . . . . . . . . . . . . . 21
  94.              StrRFD  . . . . . . . . . . . . . . . . . . . . . . . 22
  95.              WhereC  . . . . . . . . . . . . . . . . . . . . . . . 22
  96.              WhereR  . . . . . . . . . . . . . . . . . . . . . . . 22
  97.  
  98.  
  99.  
  100.  
  101.                                        2
  102.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  103.  
  104.  
  105.         3. VARIABLES . . . . . . . . . . . . . . . . . . . . . . . 23
  106.              System Hardware . . . . . . . . . . . . . . . . . . . 23
  107.              Video Hardware  . . . . . . . . . . . . . . . . . . . 24
  108.              Video Software  . . . . . . . . . . . . . . . . . . . 26
  109.              Video Cursor  . . . . . . . . . . . . . . . . . . . . 28
  110.  
  111.  
  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.  
  162.                                        3
  163.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  164.  
  165.  
  166.    1.  I N T R O D U C T I O N
  167.  
  168.  
  169.    PURPOSE
  170.  
  171.    This document is a QWIK technical reference manual describing each routine
  172.    and variable in detail in a format similar to the TP manual.  The routines
  173.    are described in alphabetical order.  Since this manual is on disk, you can
  174.    find your interest easily with a search utility.
  175.  
  176.    Application - All QWIK procedures will perform in the following
  177.    applications:
  178.  
  179.      . All video text modes - 0, 1, 2, 3 and 7.
  180.      . Any column mode - 40, 80, or variable.
  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 WNDW55.ARC.
  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.  
  223.    Chapter 1, Introduction                                             Page 4
  224.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  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.    aStr - One of the nice improvements since TP 4.0 is that the address of the
  233.    string, aStr, is always passed onto to the stack no matter if it's a string
  234.    value or a variable.  So, internally, QWIK does not need to copy strings to
  235.    the stack and thereby increasing speed.  The Qwrite* procedures use this
  236.    address even if hard-coded strings are passed as a parameter.
  237.  
  238.  
  239.    ATTRIBUTES
  240.  
  241.    Attr - Use the convenient attribute constants for the foreground  and
  242.    background colors supplied in the unit rather than having to use TP
  243.    functions or procedures to get a desired color, for example:
  244.  
  245.      Qwrite ( 1, 1,White+BlueBG,'My String');
  246.  
  247.    will write the text with white on blue attributes.  Of course, you can
  248.    still use Turbo's TextColor and TextBackground procedures, and then use
  249.    TextAttr as a parameter.  The foreground constants are duplicates of those
  250.    in TP4:
  251.  
  252.      Black        = $00;       DarkGray     = $08;
  253.      Blue         = $01;       LightBlue    = $09;
  254.      Green        = $02;       LightGreen   = $0A;
  255.      Cyan         = $03;       LightCyan    = $0B;
  256.      Red          = $04;       LightRed     = $0C;
  257.      Magenta      = $05;       LightMagenta = $0D;
  258.      Brown        = $06;       Yellow       = $0E;
  259.      LightGray    = $07;       White        = $0F;
  260.      Blink        = $80;
  261.  
  262.    For convenience, background color constants were included to take advantage
  263.    of constant folding.
  264.  
  265.      BlackBG      = $00;
  266.      BlueBG       = $10;
  267.      GreenBG      = $20;
  268.      CyanBG       = $30;
  269.      RedBG        = $40;
  270.      MagentaBG    = $50;
  271.      BrownBG      = $60;
  272.      LightGrayBG  = $70;
  273.      SameAttr     =  -1;
  274.  
  275.    SameAttr - A powerful and unique feature of all QWIK routines is the use of
  276.    the constant SameAttr.  If SameAttr, or a negative value, is used as an
  277.    attribute, the routine will suppress any changes to the attributes and use
  278.    what is currently on the screen.
  279.  
  280.    3270 PC Attributes - Be aware that the 3270 PC ignores the foreground
  281.    intensity bit, so there are only 8 colors.  In addition, 4 colors have
  282.  
  283.  
  284.    Chapter 1, Introduction                                             Page 5
  285.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  286.  
  287.  
  288.    different tints:
  289.  
  290.      PC Color     3270 PC Color
  291.      ------------ -------------
  292.      Cyan         Turquoise
  293.      Magenta      Pink
  294.      Brown        Yellow
  295.      Light Gray   White
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  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.  
  345.    Chapter 1, Introduction                                             Page 6
  346.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  347.  
  348.  
  349.    2.  P R O C E D U R E S   A N D   F U N C T I O N S
  350.  
  351.    In this section, a detailed description is provided for each procedure and
  352.    function.
  353.  
  354.  
  355.    ---------------------------------------------------------------------------
  356.    EosC function                                                          Qwik
  357.    ---------------------------------------------------------------------------
  358.    Function       Returns the absolute column of the EOS marker.
  359.    Declaration    EosC
  360.    Result type    byte
  361.    Screens        All video pages and virtual screens.
  362.    Remarks        Operates on the currently written screen.  The upper left
  363.                   corner of the screen (1,1).
  364.    See also       EosR, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  365.  
  366.    ---------------------------------------------------------------------------
  367.    EosLn procedure                                                        Qwik
  368.    ---------------------------------------------------------------------------
  369.    Function       Moves the EOS marker to column 1 of the next row.
  370.    Declaration    EosLn
  371.    Screens        All video pages and virtual screens.
  372.    Remarks        Operates on the currently written screen.
  373.    EOS            Updated.
  374.    Restrictions   EosLn can increment past the last row of a screen, but does
  375.                   not scroll up the screen.
  376.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos,
  377.                   QEosLn
  378.  
  379.    ---------------------------------------------------------------------------
  380.    EosR function                                                          Qwik
  381.    ---------------------------------------------------------------------------
  382.    Function       Returns the absolute row of the EOS marker.
  383.    Declaration    EosR
  384.    Result type    byte
  385.    Screens        All video pages and virtual screens.
  386.    Remarks        Operates on the currently written screen.
  387.    See also       EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoEos
  388.  
  389.    ---------------------------------------------------------------------------
  390.    EosToCursor procedure                                                  Qwik
  391.    ---------------------------------------------------------------------------
  392.    Function       Positions the EOS marker to where the cursor is.
  393.    Declaration    EosToCursor
  394.    Screens        All video pages only.
  395.    Remarks        The EOS marker is simply moved to match the position of the
  396.                   cursor of the currently written video page.
  397.    EOS            Updated.
  398.    See also       EosR, EosC, EosToRC, EosToRCrel, EosLn, GotoEos
  399.  
  400.    ---------------------------------------------------------------------------
  401.    EosToRC procedure                                                      Qwik
  402.    ---------------------------------------------------------------------------
  403.    Function       Positions the EOS marker.
  404.  
  405.  
  406.    Chapter 2, Procedures and Functions                                 Page 7
  407.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  408.  
  409.  
  410.    Declaration    EosToRC (Row, Col: byte)
  411.    Screens        All video pages and virtual screens.
  412.    Remarks        Use this procedure to manually locate the EOS marker.  The
  413.                   Q*Eos procedures will write where this marker is located on
  414.                   the currently written screen.
  415.    EOS            Updated.
  416.    Restrictions   Stay within the screen limits.
  417.    See also       EosR, EosC, EosToRCrel, EosToCursor, EosLn, GotoEos
  418.  
  419.    ---------------------------------------------------------------------------
  420.    EosToRCrel procedure                                                   Qwik
  421.    ---------------------------------------------------------------------------
  422.    Function       Positions the EOS marker relative to its current position.
  423.    Declaration    EosToRCrel (Row, Col: integer)
  424.    Screens        All video pages and virtual screens.
  425.    Remarks        The relative values can be positive or negative.  The Q*Eos
  426.                   procedures will write where the EOS marker is located on the
  427.                   currently written screen.
  428.    EOS            Updated.
  429.    Restrictions   Stay within the screen limits.
  430.    See also       EosR, EosC, EosToRC, EosToCursor, EosLn, GotoEos
  431.  
  432.    ---------------------------------------------------------------------------
  433.    GetCursor function                                                     Qwik
  434.    ---------------------------------------------------------------------------
  435.    Function       Returns the cursor mode for the CRT.
  436.    Declaration    GetCursor
  437.    Result type    word
  438.    Screens        All video pages only.
  439.    Remarks        There is only one cursor mode variable that applies to what
  440.                   is currently viewed on the CRT and it is retrieved from low
  441.                   memory at $0040:$0060.
  442.    See also       SetCursor, ModCursor
  443.  
  444.    ---------------------------------------------------------------------------
  445.    GetSubModelID procedure                                                Qwik
  446.    ---------------------------------------------------------------------------
  447.    Function       Gets the SubModelID on IBM computers.
  448.    Declaration    GetSubModelID
  449.    Remarks        The SystemID and SubModelID variables are updated if a
  450.                   SubModelID exists.  It will only execute on recent models of
  451.                   XT, AT, and PS/2 models which have this ID.  Otherwise the
  452.                   variables will remain unaltered as set by Qinit.
  453.    Restrictions   PC or XT clones must recognize IBM's SystemID.
  454.    See also       QWIK55.DOC
  455.  
  456.    ---------------------------------------------------------------------------
  457.    GotoEos procedure                                                      Qwik
  458.    ---------------------------------------------------------------------------
  459.    Function       Positions the cursor where the EOS marker is.
  460.    Declaration    GotoEos
  461.    Screens        All video pages only.
  462.    Remarks        The cursor is simply moved to match the position of the EOS
  463.                   marker of the currently written video page.
  464.    EOS            Unaltered.
  465.  
  466.  
  467.    Chapter 2, Procedures and Functions                                 Page 8
  468.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  469.  
  470.  
  471.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, EosLn, GotoRC
  472.    Example        Center a string on the screen and place the cursor at the
  473.                   end of the string:
  474.  
  475.                     QwriteC (1,1,CRTcols,SameAttr,'My message ');
  476.                     GotoEos;
  477.  
  478.    ---------------------------------------------------------------------------
  479.    GotoRC procedure                                                       Qwik
  480.    ---------------------------------------------------------------------------
  481.    Function       Positions the cursor.
  482.    Declaration    GotoRC (Row, Col: byte)
  483.    Screens        All video pages only.
  484.    Remarks        The cursor is moved to the position absolute to the
  485.                   currently written video page.
  486.    EOS            Unaltered.
  487.    Restrictions   Stay within the screen limits.
  488.    See also       GotoEos, WhereR, WhereC
  489.  
  490.    ---------------------------------------------------------------------------
  491.    ModCursor procedure                                                    Qwik
  492.    ---------------------------------------------------------------------------
  493.    Function       Modifies the current cursor mode to turn on, off, or blink
  494.                   erratically.
  495.    Declaration    ModCursor (Bits13_14: word)
  496.    Screens        Any video page as viewed.
  497.    Remarks        Using the modification constants CursorOn, CursorOff, or
  498.                   CursorBlink for Bits13_14, the currently viewed cursor mode
  499.                   on the CRT will be modified accordingly.  The procedure only
  500.                   looks at bits 13 and 14 of Bits13_14 for the modification.
  501.                   The scan lines remain unaltered.
  502.    See also       GetCursor, SetCursor
  503.    Example        To turn the current cursor mode off:
  504.  
  505.                     ModCursor (CursorOff);
  506.  
  507.    ---------------------------------------------------------------------------
  508.    Qattr procedure                                                        Qwik
  509.    ---------------------------------------------------------------------------
  510.    Function       Changes just the attribute in a rows-by-columns block on the
  511.                   screen.
  512.    Declaration    Qattr (Row,Col,Rows,Cols: byte; Attr: integer)
  513.    Screens        All video pages and virtual screens.
  514.    Remarks        The upper left corner of the block starts at (Row,Col) and
  515.                   the block size is Rows by Cols.  Note that you can even
  516.                   change 1 row and/or 1 column.  If SameAttr is used for Attr
  517.                   or if Rows or Cols is zero, then nothing is written.
  518.    EOS            Updated.
  519.    Restrictions   Stay within the screen limits.
  520.    See also       QattrC, QattrEos
  521.    Example        To create inverse video on any screen:
  522.  
  523.                     Qattr (1,1,CRTrows,CRTcols,Black+LightGrayBG);
  524.  
  525.  
  526.  
  527.  
  528.    Chapter 2, Procedures and Functions                                 Page 9
  529.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  530.  
  531.  
  532.    ---------------------------------------------------------------------------
  533.    QattrC procedure                                                       Qwik
  534.    ---------------------------------------------------------------------------
  535.    Function       Changes just the attribute in a rows-by-columns block on the
  536.                   screen and centers it between two columns.
  537.    Declaration    QattrC (Row,ColL,ColR,Rows,Cols: byte; Attr: integer)
  538.    Screens        All video pages and virtual screens.
  539.    Remarks        The upper left corner of the block starts at
  540.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by
  541.                   Cols and centering it between the two columns ColL and ColR.
  542.                   Odd counts are shifted left.  If SameAttr is used for Attr
  543.                   or if Rows or Cols is zero, then nothing is written.
  544.    EOS            Updated.
  545.    Restrictions   Stay within the screen limits.
  546.    See also       Qattr, QattrEos
  547.    Example        A 30 character message centered on the screen in row 15,
  548.                   needs to be white on green:
  549.  
  550.                     QattrC (15,1,CRTcols,1,30,White+GreenBG);
  551.  
  552.                   The attribute will start to be changed in column 26 on an 80
  553.                   column screen.
  554.  
  555.    ---------------------------------------------------------------------------
  556.    QattrEos procedure                                                     Qwik
  557.    ---------------------------------------------------------------------------
  558.    Function       Changes just the attribute in a rows-by-columns block on the
  559.                   current screen starting at the EOS marker.
  560.    Declaration    QattrEos (Rows,Cols: byte; Attr: integer)
  561.    Screens        All video pages and virtual screens.
  562.    Remarks        The upper left corner of the block starts at the previously
  563.                   set EOS marker and the block size is Rows by Cols.  If
  564.                   SameAttr is used for Attr or if Rows or Cols is zero, then
  565.                   nothing is written.
  566.    Restrictions   Stay within the screen limits.
  567.    EOS            Updated.
  568.    See also       Qattr, QattrC
  569.    Example        To highlight a 20 column data entry field at the EOS marker
  570.                   with yellow on magenta:
  571.  
  572.                     QattrEos (1,20,Yellow+MagentaBG);
  573.  
  574.    ---------------------------------------------------------------------------
  575.    QEosLn procedure                                                       Qwik
  576.    ---------------------------------------------------------------------------
  577.    Function       Moves the EOS marker to column 1 of the next row with a
  578.                   possible scroll up.
  579.    Declaration    QEosLn
  580.    Screens        All video pages and virtual screens.
  581.    Remarks        Operates on the currently written screen.  If EosR becomes
  582.                   greater than CRTrows, then the screen will scroll up.  The
  583.                   new blank row will have the attribute set by ScrollAttr
  584.                   which must be manually set before hand.
  585.    EOS            Updated to first cleared column of the cleared row.
  586.    See also       EosR, EosC, EosToRC, EosToRCrel, EosToCursor, GotoEos, EosLn
  587.  
  588.  
  589.    Chapter 2, Procedures and Functions                                 Page 10
  590.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  591.  
  592.  
  593.  
  594.    ---------------------------------------------------------------------------
  595.    Qfill procedure                                                        Qwik
  596.    ---------------------------------------------------------------------------
  597.    Function       Fills the screen with a character with an optional attribute
  598.                   change in a rows-by-columns block on the current screen.
  599.    Declaration    Qfill (Row,Col,Rows,Cols: byte; Attr: integer; Ch: char)
  600.    Screens        All video pages and virtual screens.
  601.    Remarks        The upper left corner of the block starts at (Row,Col) and
  602.                   the block size is Rows by Cols.  If SameAttr is used for
  603.                   Attr, then the attribute will remain the same on the screen.
  604.                   If Rows or Cols is zero, then nothing is written.
  605.    EOS            Updated.
  606.    Restrictions   Stay within the screen limits.
  607.    See also       QfillC, QfillEos
  608.    Example        To clear the screen with black on brown attribute:
  609.  
  610.                     Qfill (1,1,CRTrows,CRTcols,Black+BrownBG,' ');
  611.  
  612.    ---------------------------------------------------------------------------
  613.    QfillC procedure                                                       Qwik
  614.    ---------------------------------------------------------------------------
  615.    Function       Fills the screen with a character and an optional attribute
  616.                   change in a rows-by-columns block on the current screen and
  617.                   centers it between two columns.
  618.    Declaration    QfillC (Row,ColL,ColR,Rows,Cols: byte;
  619.                           Attr: integer; Ch: char)
  620.    Screens        All video pages and virtual screens.
  621.    Remarks        The upper left corner of the block starts at
  622.                   (Row,(ColL+ColR-Cols+1) shr 1) with a block size of Rows by
  623.                   Cols and centered between the two columns ColL and ColR.
  624.                   Odd counts are shifted left.  If SameAttr is used for Attr,
  625.                   then the attribute will remain the same on the screen.  If
  626.                   Rows or Cols is zero, then nothing is written.
  627.    EOS            Updated.
  628.    Restrictions   Stay within the screen limits.
  629.    See also       Qfill, QfillEos
  630.    Example        Center 20 dashes on the screen in rows 1 to 5 with black on
  631.                   brown attributes:
  632.  
  633.                     QfillC (1,1,CRTcols,5,20,Black+BrownBG,'-');
  634.  
  635.    ---------------------------------------------------------------------------
  636.    QfillEos procedure                                                     Qwik
  637.    ---------------------------------------------------------------------------
  638.    Function       Fills the screen with a character with an optional attribute
  639.                   change in a rows-by-columns block on the current screen
  640.                   starting at the Eos marker.
  641.    Declaration    QfillEos (Rows,Cols: byte; Attr: integer; Ch: char)
  642.    Screens        All video pages and virtual screens.
  643.    Remarks        The upper left corner of the block starts at the previously
  644.                   set EOS marker and the block size is Rows by Cols.  If
  645.                   SameAttr is used for Attr, then the attribute will remain
  646.                   the same on the screen.  If Rows or Cols is zero, then
  647.                   nothing is written.
  648.  
  649.  
  650.    Chapter 2, Procedures and Functions                                 Page 11
  651.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  652.  
  653.  
  654.    EOS            Updated.
  655.    Restrictions   Stay within the screen limits.
  656.    See also       Qfill, QfillC
  657.    Example        To clear a 20 column data entry field at the EOS marker with
  658.                   yellow on magenta:
  659.  
  660.                     QfillEos (1,20,Yellow+MagentaBG,' ');
  661.  
  662.    ---------------------------------------------------------------------------
  663.    Qinit procedure                                                        Qwik
  664.    ---------------------------------------------------------------------------
  665.    Function       Detects system, display, and video card(s).  Initializes
  666.                   global data for QWIK routines.
  667.    Declaration    Qinit
  668.    Remarks        Qinit is executed at startup.  Qinit only needs to be run
  669.                   again if there is a text mode change.
  670.    EOS            Set to (1,1).
  671.    See also       QWIK55.DOC, QINITEST.PAS, VARIABLES section below.
  672.  
  673.    ---------------------------------------------------------------------------
  674.    QreadAttr function                                                     Qwik
  675.    ---------------------------------------------------------------------------
  676.    Function       Reads an attribute from the current screen.
  677.    Declaration    QreadAttr (Row, Col: byte)
  678.    Result type    byte
  679.    Screens        All video pages and virtual screens.
  680.    Remarks        Reads an attribute from the screen at just one location.
  681.    EOS            Unaltered.
  682.    See also       QreadChar, QreadStr
  683.  
  684.    ---------------------------------------------------------------------------
  685.    QreadChar function                                                     Qwik
  686.    ---------------------------------------------------------------------------
  687.    Function       Reads a character from the current screen.
  688.    Declaration    QreadChar (Row, Col: byte)
  689.    Result type    byte
  690.    Screens        All video pages and virtual screens.
  691.    Remarks        Reads a character from the screen at just one location.
  692.    EOS            Unaltered.
  693.    See also       QreadAttr, QreadStr
  694.  
  695.    ---------------------------------------------------------------------------
  696.    QreadStr function                                                      Qwik
  697.    ---------------------------------------------------------------------------
  698.    Function       Reads a text string from the current screen.
  699.    Declaration    QreadStr (Row,Col,Cols: byte)
  700.    Result type    string
  701.    Screens        All video pages and virtual screens.
  702.    Remarks        Reads a string of characters from the screen.
  703.    EOS            Unaltered.
  704.    See also       QreadAttr, QreadChar
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.    Chapter 2, Procedures and Functions                                 Page 12
  712.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  713.  
  714.  
  715.    ---------------------------------------------------------------------------
  716.    QscrollDown procedure                                                  Qwik
  717.    ---------------------------------------------------------------------------
  718.    Function       Scrolls a rows-by-columns block down on the current screen
  719.                   and clears the top row of the block.
  720.    Declaration    QscrollDown (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  721.    Screens        All video pages and virtual screens.
  722.    Remarks        To keep it simple, the block encompasses all affected rows
  723.                   including the row to be cleared.  The upper left corner of
  724.                   the block starts at (Row,Col) and the block size is Rows by
  725.                   Cols.  The bottom row will be scrolled out and lost while
  726.                   the top row will be cleared with the attribute of BlankAttr
  727.                   (SameAttr is permitted).  Note that you can even change 1
  728.                   row and/or 1 column.  The cursor is not moved, but is ready
  729.                   to be moved with GotoEos.  The CpuID lets the routine choose
  730.                   the best speed.
  731.    EOS            Updated to first cleared column of the cleared row.
  732.    Restrictions   Stay within the screen limits.
  733.    See also       QscrollUp, GotoEos
  734.    Example        To scroll down the entire screen and clear the top row with
  735.                   light cyan on blue:
  736.  
  737.                     QscrollDown (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  738.  
  739.  
  740.    ---------------------------------------------------------------------------
  741.    QscrollUp procedure                                                    Qwik
  742.    ---------------------------------------------------------------------------
  743.    Function       Scrolls a rows-by-columns block up on the current screen and
  744.                   clears the bottom row of the block.
  745.    Declaration    QscrollUp (Row,Col,Rows,Cols: byte; BlankAttr: integer)
  746.    Screens        All video pages and virtual screens.
  747.    Remarks        To keep it simple, the block encompasses all affected rows
  748.                   including the row to be cleared.  The upper left corner of
  749.                   the block starts at (Row,Col) and the block size is Rows by
  750.                   Cols.  The first row will be scrolled out and lost while the
  751.                   last row will be cleared with the attribute of BlankAttr
  752.                   (SameAttr is permitted).  Note that you can even change 1
  753.                   row and/or 1 column.  The cursor is not moved, but is ready
  754.                   to be moved with GotoEos.  The CpuID lets the routine choose
  755.                   the best speed.
  756.    EOS            Updated to first cleared column of the cleared row.
  757.    Restrictions   Stay within the screen limits.
  758.    See also       QscrollDown, GotoEos
  759.    Example        To scroll up the entire screen and clear the last row with
  760.                   light cyan on blue:
  761.  
  762.                     QscrollUp (1,1,CRTrows,CRTcols,LightCyan+BlueBG);
  763.  
  764.    ---------------------------------------------------------------------------
  765.    QScrToVscr procedure                                                   Qwik
  766.    ---------------------------------------------------------------------------
  767.    Function       Copies a rows-by-columns block on the current screen to
  768.                   another location on a virtual screen.
  769.    Declaration    QScrToVscr (Row,Col,Rows,Cols,
  770.  
  771.  
  772.    Chapter 2, Procedures and Functions                                 Page 13
  773.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  774.  
  775.  
  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.                   to Dest, the destination, as one long array.  By changing
  831.  
  832.  
  833.    Chapter 2, Procedures and Functions                                 Page 14
  834.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  835.  
  836.  
  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.      BlockPtr: ^BlockArray;
  892.  
  893.  
  894.    Chapter 2, Procedures and Functions                                 Page 15
  895.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  896.  
  897.  
  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, QWIK55.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.      { Storage size required is: Rows * Cols shl 1 }
  953.  
  954.  
  955.    Chapter 2, Procedures and Functions                                 Page 16
  956.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  957.  
  958.  
  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, QwriteA, QwriteEos, QwriteEosA
  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.    QwriteA procedure                                                      Qwik
  1002.    ---------------------------------------------------------------------------
  1003.    Function       Writes an array (or string) with a specified length to the
  1004.                   current screen with an optional attribute change.
  1005.    Declaration    QwriteA (Row,Col: byte; Attr: integer;
  1006.                            ArrayLength: word; VAR aStr)
  1007.    Screens        All video pages and virtual screens.
  1008.    Remarks        This routine writes the array aStr at (Row,Col) with the
  1009.                   attribute Attr for the number of columns specified by
  1010.                   ArrayLength.  This enables you to write substrings when
  1011.                   specifying a starting index (aStr[i]).  (Other routines like
  1012.                   Qwrite assume the length is the value at aStr[0] and the
  1013.                   starting index is aStr[1].)  Of course, aStr doesn't have to
  1014.  
  1015.  
  1016.    Chapter 2, Procedures and Functions                                 Page 17
  1017.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1018.  
  1019.  
  1020.                   be a string - it can be any type variable or address in
  1021.                   memory.  If SameAttr is used for Attr, then the attribute
  1022.                   will remain the same on the screen.
  1023.    EOS            Updated.
  1024.    Restrictions   Stay within the screen limits.
  1025.    See also       Qwrite, QwriteC, QwriteEos, QwriteEosA
  1026.    Example        The following will write "Testing out this line."  with the
  1027.                   existing screen attributes:
  1028.  
  1029.                      MyString:='Step B: Testing out this line.';
  1030.                      QwriteA (1,1,SameAttr,22,MyString[9]);
  1031.  
  1032.    ---------------------------------------------------------------------------
  1033.    QwriteC procedure                                                      Qwik
  1034.    ---------------------------------------------------------------------------
  1035.    Function       Writes a string to the current screen with an optional
  1036.                   attribute change and centered between two columns.
  1037.    Declaration    QwriteC (Row,ColL,ColR: byte; Attr: integer;
  1038.                            aStr: string)
  1039.    Screens        All video pages and virtual screens.
  1040.    Remarks        This routine writes the string aStr at (Row,(ColL+ColR-
  1041.                   aStr[0]+1) shr 1) which centers it between the two columns
  1042.                   ColL and ColR and has the attribute Attr.  If SameAttr is
  1043.                   used for Attr, then the attribute will remain the same on
  1044.                   the screen.
  1045.    EOS            Updated.
  1046.    Restrictions   Stay within the screen limits.
  1047.    See also       Qwrite, QwriteA, QwriteEos, QwriteEosA
  1048.    Example        Write a message centered on the screen in row 15 with black
  1049.                   on green attributes:
  1050.  
  1051.                     QwriteC (15,1,CRTcols,White+GreenBG,'My message');
  1052.  
  1053.                   The message will be written in column 36 on an 80 column
  1054.                   screen.
  1055.  
  1056.    ---------------------------------------------------------------------------
  1057.    QwriteEos procedure                                                    Qwik
  1058.    ---------------------------------------------------------------------------
  1059.    Function       Writes a string to the current screen with an optional
  1060.                   attribute change starting at the EOS marker.
  1061.    Declaration    QwriteEos (Attr: integer; aStr: string)
  1062.    Screens        All video pages and virtual screens.
  1063.    Remarks        This routine writes the string aStr at the EOS marker with
  1064.                   the attribute Attr.  If SameAttr is used for Attr, then the
  1065.                   attribute will remain the same on the screen.
  1066.    EOS            Updated.
  1067.    Restrictions   Stay within the screen limits.
  1068.    See also       Qwrite, QwriteA, QwriteC, QwriteEosA
  1069.    Example        Highlight the number in the following message:
  1070.  
  1071.                     Qwrite    ( 1, 1,White+BlueBG ,'There are');
  1072.                     QwriteEos (      Yellow+BlueBG,' 5 ');
  1073.                     QwriteEos (      White+BlueBG ,'minutes left.');
  1074.  
  1075.  
  1076.  
  1077.    Chapter 2, Procedures and Functions                                 Page 18
  1078.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1079.  
  1080.  
  1081.                   which will write "There are 5 minutes left." as white on
  1082.                   blue except "5" will be yellow on blue.
  1083.  
  1084.    ---------------------------------------------------------------------------
  1085.    QwriteEosA procedure                                                   Qwik
  1086.    ---------------------------------------------------------------------------
  1087.    Function       Writes an array (or string) with a specified length to the
  1088.                   current screen with an optional attribute change starting at
  1089.                   the EOS marker.
  1090.    Declaration    QwriteEosA (Attr: integer; ArrayLength: word; VAR aStr)
  1091.    Screens        All video pages and virtual screens.
  1092.    Remarks        This routine writes the array aStr at the previously set EOS
  1093.                   marker with the attribute Attr for the number of columns
  1094.                   specified by ArrayLength.  This enables you to write
  1095.                   substrings when specifying a starting index (aStr[i]).
  1096.                   (Other routines like QwriteEos assume the length is the
  1097.                   value at aStr[0] and the starting index is aStr[1].)  Of
  1098.                   course, aStr doesn't have to be a string - it can be any
  1099.                   type variable or address in memory.  If SameAttr is used for
  1100.                   Attr, then the attribute will remain the same on the screen.
  1101.    EOS            Updated.
  1102.    Restrictions   Stay within the screen limits.
  1103.    See also       QwriteA, QwriteC, QwriteEos, QwriteEos
  1104.    Example        The following will write "Testing Step B"  with the existing
  1105.                   screen attributes:
  1106.  
  1107.                     MyString:='Step B: Testing out this line.';
  1108.                     QwriteA (1,5,SameAttr, 8,MyString[9]);
  1109.                     QwriteEosA ( SameAttr, 6,MyString[1]);
  1110.  
  1111.    ---------------------------------------------------------------------------
  1112.    QwritePage procedure                                                   Qwik
  1113.    ---------------------------------------------------------------------------
  1114.    Function       Changes the video page on which the QWIK routines write.
  1115.    Declaration    QwritePage (PageNum: byte)
  1116.    Screens        All video pages.
  1117.    Remarks        Standard TP routines are dedicated to only video page 0.
  1118.                   However, most video cards, except MDA and some 3270 PC, have
  1119.                   more than one video page.  This procedure enables QWIK
  1120.                   routines to write to those pages by altering QScrOfs and
  1121.                   QvideoPage which is the current page on which QWIK is
  1122.                   writing. The number of video pages available is detected by
  1123.                   Qinit and saved in MaxPage.  The routine will only change
  1124.                   pages when PageNum<=MaxPage.
  1125.    EOS            Unaltered.
  1126.    See also       QviewPage, QWIK55.DOC, QINITEST.PAS
  1127.  
  1128.    ---------------------------------------------------------------------------
  1129.    SetCursor procedure                                                    Qwik
  1130.    ---------------------------------------------------------------------------
  1131.    Function       Sets a new cursor mode for the CRT.
  1132.    Declaration    SetCursor (Cursor: word)
  1133.    Screens        Any video page as viewed.
  1134.    Remarks        Using the default cursor variables set by Qinit and/or the
  1135.                   cursor constants, a new cursor mode can be set by with any
  1136.  
  1137.  
  1138.    Chapter 2, Procedures and Functions                                 Page 19
  1139.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1140.  
  1141.  
  1142.                   combination of:
  1143.  
  1144.                     CursorInitial       - detected by Qinit at startup
  1145.                     CursorUnderline     - set by Qinit
  1146.                     CursorHalfBlock     - set by Qinit
  1147.                     CursorBlock         - set by Qinit
  1148.                     CursorOff   ($2000) - turns cursor off
  1149.                     CursorBlink ($6000) - erratic blinking (MDA/CGA)
  1150.  
  1151.                   You can simply add them together (logically is best to
  1152.                   prevent carry errors, but arithmetic is fine).  Although a
  1153.                   separate cursor location is kept for each video page, there
  1154.                   is only one cursor mode for the CRT screen.
  1155.    See also       GetCursor, ModCursor
  1156.    Example 1      Set a half-block cursor with erratic blink:
  1157.  
  1158.                     SetCursor (CursorHalfBlock+CursorBlink);
  1159.  
  1160.    Example 2      Set the scan lines for a block cursor, but leave it turned
  1161.                   off:
  1162.  
  1163.                     SetCursor (CursorBlock+CursorOff);
  1164.  
  1165.    Example 3      Restore the cursor mode at start up and be sure it's turned
  1166.                   on:
  1167.  
  1168.                     SetCursor (CursorInitial);
  1169.                     ModCursor (CursorOn);
  1170.  
  1171.                   or, for those comfortable with bit operations:
  1172.  
  1173.                     SetCursor (CursorInitial and not CursorBlink);
  1174.  
  1175.  
  1176.    ---------------------------------------------------------------------------
  1177.    SetMultiTask procedure                                                 Qwik
  1178.    ---------------------------------------------------------------------------
  1179.    Function       Set QWIK variables to write direct to multi-tasking video
  1180.                   buffers (MTVB).
  1181.    Declaration    SetMultiTask
  1182.    Remarks        This procedure alters the following variables if the program
  1183.                   is running under a multi-tasking environment and the user
  1184.                   has chosen to use the faster MTVB.  If there is no multi-
  1185.                   tasking environment or the MTVB is not used (normal direct
  1186.                   screen video), then these variables are unaltered.  If you
  1187.                   use the CRT unit, be sure to set DirectVideo to false when
  1188.                   using the MTVB.
  1189.  
  1190.                     QScrPtr     - the segment is altered, but the offset is
  1191.                                   usually 0.
  1192.                     Page0Seg    - set to match QSegPtr to indicate page 0.
  1193.                     Qsnow       - set to false.
  1194.                     InMultiTask - True if using MTVB, else false.
  1195.  
  1196.    See also       InMultiTask in VARIABLES section below.
  1197.  
  1198.  
  1199.    Chapter 2, Procedures and Functions                                 Page 20
  1200.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1201.  
  1202.  
  1203.    Example        Search for locations in the *.PAS demonstration files.
  1204.  
  1205.    ---------------------------------------------------------------------------
  1206.    StrL function                                                          Strs
  1207.    ---------------------------------------------------------------------------
  1208.    Function       Returns a LongInt converted into a string.
  1209.    Declaration    StrL (L: LongInt)
  1210.    Result type    string
  1211.    Remarks        Uses the standard Str procedure to get result.
  1212.    See also       StrLF, StrR, StrRF, StrRFD
  1213.    Example        The following writes "-12345" on the screen:
  1214.  
  1215.                      { var MyNum: integer; }
  1216.                      MyNum := -12345;
  1217.                      Qwrite ( 1, 1,SameAttr,StrL(MyNum));
  1218.  
  1219.    ---------------------------------------------------------------------------
  1220.    StrLF function                                                         Strs
  1221.    ---------------------------------------------------------------------------
  1222.    Function       Returns a LongInt converted into a string and formatted to
  1223.                   be right justified in a fixed field.
  1224.    Declaration    StrLF (L: LongInt; Field: integer)
  1225.    Result type    string
  1226.    Remarks        Uses the standard Str procedure to get result.
  1227.    See also       StrL, StrR, StrRF, StrRFD
  1228.    Example        The following writes "  -12345" on the screen:
  1229.  
  1230.                      { var MyNum: integer; }
  1231.                      MyNum := -12345;
  1232.                      Qwrite ( 1, 1,SameAttr,StrLF(MyNum,8));
  1233.  
  1234.    ---------------------------------------------------------------------------
  1235.    StrR function                                                          Strs
  1236.    ---------------------------------------------------------------------------
  1237.    Function       Returns a Real converted into a string.
  1238.    Declaration    StrR (R: Real)
  1239.    Result type    string
  1240.    Remarks        Uses the standard Str procedure to get result.
  1241.    See also       StrL, StrLF, StrRF, StrRFD
  1242.    Example        The following writes "-1.2345560000E+04" on the screen:
  1243.  
  1244.                      { var MyNum: real; }
  1245.                      MyNum := -12345.56
  1246.                      Qwrite ( 1, 1,SameAttr,StrR(MyNum));
  1247.  
  1248.    ---------------------------------------------------------------------------
  1249.    StrRF function                                                         Strs
  1250.    ---------------------------------------------------------------------------
  1251.    Function       Returns a Real converted into a string and formatted to
  1252.                   be right justified in a fixed field.
  1253.    Declaration    StrRF (R: Real; Field: integer)
  1254.    Result type    string
  1255.    Remarks        Uses the standard Str procedure to get result.
  1256.    See also       StrL, StrLF, StrR, StrRFD
  1257.    Example        The following writes "-1.2346E+04" on the screen:
  1258.  
  1259.  
  1260.    Chapter 2, Procedures and Functions                                 Page 21
  1261.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1262.  
  1263.  
  1264.  
  1265.                      { var MyNum: real; }
  1266.                      MyNum := -12345.56
  1267.                      Qwrite ( 1, 1,SameAttr,StrRF(MyNum,11));
  1268.  
  1269.    ---------------------------------------------------------------------------
  1270.    StrRFD function                                                        Strs
  1271.    ---------------------------------------------------------------------------
  1272.    Function       Returns a Real converted into a string and formatted to
  1273.                   be right justified in a fixed field with a fixed number of
  1274.                   numbers to the right of the decimal.
  1275.    Declaration    StrRFD (R: Real; Field,Decimal: integer)
  1276.    Result type    string
  1277.    Remarks        Uses the standard Str procedure to get result.
  1278.    See also       StrL, StrLF, StrR, StrRF
  1279.    Example        The following writes "  -12345.6" on the screen:
  1280.  
  1281.                      { var MyNum: real; }
  1282.                      MyNum := -12345.56
  1283.                      Qwrite ( 1, 1,SameAttr,StrRFD(MyNum,10,1));
  1284.  
  1285.    ---------------------------------------------------------------------------
  1286.    WhereC function                                                        Qwik
  1287.    ---------------------------------------------------------------------------
  1288.    Function       Returns the absolute column of the cursor on the currently
  1289.                   written video page.
  1290.    Declaration    WhereC
  1291.    Result type    byte
  1292.    Screens        All video pages only.
  1293.    Remarks        Operates on the currently written video page.  The upper
  1294.                   left corner of the screen (1,1).
  1295.    See also       GotoRC, WhereR
  1296.  
  1297.    ---------------------------------------------------------------------------
  1298.    WhereR function                                                        Qwik
  1299.    ---------------------------------------------------------------------------
  1300.    Function       Returns the absolute row of the cursor on the currently
  1301.                   written video page.
  1302.    Declaration    WhereR
  1303.    Result type    byte
  1304.    Screens        All video pages only.
  1305.    Remarks        Operates on the currently written video page.  The upper
  1306.                   left corner of the screen (1,1).
  1307.    See also       GotoRC, WhereC
  1308.    ---------------------------------------------------------------------------
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.    Chapter 2, Procedures and Functions                                 Page 22
  1322.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1323.  
  1324.  
  1325.    3.  V A R I A B L E S
  1326.  
  1327.    The variables in QWIK.TPU are initialized according to the the kind of
  1328.    system, display(s), and video adapter(s) that Qinit detects.  QWIK uses
  1329.    them for reference and they may also be used in your own programming to
  1330.    help make decisions.
  1331.  
  1332.  
  1333.    SYSTEM HARDWARE
  1334.  
  1335.    System Hardware Variables - These variables indicate the kind of computer
  1336.    that Qinit detected:
  1337.  
  1338.      Variable      Description
  1339.      ------------  -----------------------------------------------------------
  1340.      CpuID         (Type: Byte) Intel CPU identification code.  CpuID can be
  1341.                    any one of the following four constants:
  1342.  
  1343.                      Cpu8086  - Intel 8086/8088
  1344.                      Cpu80186 - Intel 80186/80188
  1345.                      Cpu80286 - Intel 80286
  1346.                      Cpu80386 - Intel 80386
  1347.  
  1348.      SystemID      (Type: Byte) Code for the IBM computer in use and is set by
  1349.                    Qinit.  See SubModelID for values.
  1350.  
  1351.      SubModelID    (Type: Byte) Code for the sub-model of the IBM computer in
  1352.                    use.  This value defaults to 0 the first time Qinit is run.
  1353.                    To get a value, execute GetSubModelID.
  1354.  
  1355.                      SysID Sub-Model SYSTEM
  1356.                      ----- --------- ------------------------------
  1357.                      $FF     n/a     IBM PC
  1358.                      $FE     n/a     IBM PC XT
  1359.                      $FD     n/a     IBM PCjr
  1360.                      $FC     n/a     IBM PC AT (6 MHz, 01/10/84)
  1361.                              $00     IBM PC AT (6 MHz, 06/10/85)
  1362.                              $01     IBM PC AT (8 MHz, 11/15/85)
  1363.                              $02     IBM PC XT (286)
  1364.                              $04     IBM PS/2 model 50
  1365.                              $05     IBM PS/2 model 60
  1366.                      $FB     $00     IBM PC XT (256/640)
  1367.                      $FA     $00     IBM PS/2 model 30
  1368.                              $01     IBM PS/2 model 25
  1369.                      $F9     $00     IBM PC Convertible
  1370.                      $F8     $00     IBM PS/2 model 80 (16 MHz)
  1371.                              $04     IBM PS/2 model 80 (20 MHz)
  1372.                              $09     IBM PS/2 model 70 (16 MHz)
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.    Chapter 3, Variables                                                Page 23
  1383.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1384.  
  1385.  
  1386.    VIDEO HARDWARE
  1387.  
  1388.    Video Hardware Variables - These variables indicate the kind of video
  1389.    card(s) and display(s) that Qinit detected:
  1390.  
  1391.      Variable      Description
  1392.      ------------- ----------------------------------------------------------
  1393.      ActiveDispDev (Type: Byte) Code for the Active Display Device.  Using
  1394.                    IBM's Display Combination Code (DCC), Qinit detects the
  1395.                    video adapter combined with the video display.  The codes
  1396.                    have been set to the following constants.  Note that
  1397.                    monochrome is odd and color is even:
  1398.  
  1399.                      Constant    Code  Description
  1400.                      ----------- ----- --------------------------------
  1401.                      NoDisplay   $00   No display
  1402.                      MdaMono     $01   MDA with 5151 monochrome display
  1403.                      CgaColor    $02   CGA with 5153/4 color display
  1404.                      DCC3        $03   reserved
  1405.                      EgaColor    $04   EGA with 5153/4 color
  1406.                      EgaMono     $05   EGA with 5151 monochrome
  1407.                      PgcColor    $06   PGC with 5175 color
  1408.                      VgaMono     $07   VGA with analog monochrome
  1409.                      VgaColor    $08   VGA with analog color
  1410.                      DCC9        $09   reserved
  1411.                      DCC10       $0A   reserved
  1412.                      McgaMono    $0B   MCGA with analog monochrome
  1413.                      McgaColor   $0C   MCGA with analog color
  1414.                      n/a         $0D to $FE - reserved
  1415.                      Unknown     $FF   unknown device
  1416.  
  1417.      ActiveDispDev3270 (Type: Byte) Code for the Active Display Device on the
  1418.                    3270 PC.  Only the $FF code corresponds to the constant
  1419.                    "Unknown".
  1420.  
  1421.                      Code  Monitor       Adapter
  1422.                      ----  ------------  ---------------------
  1423.                      $00   5151 or 5272  for 5151 or 5272
  1424.                      $01   3295          for 3295
  1425.                      $02   5151 or 5272  for 5151 or 5272 plus
  1426.                                           XGA graphics
  1427.                      $03   5279          3270 PC G
  1428.                      $04   5379 C01      3270 PC GX
  1429.                      $05   5379 M01      3270 PC GX
  1430.                      $06   reserved
  1431.                      $07   reserved
  1432.                      $FF   Unknown, not a 3270 PC
  1433.  
  1434.      AltDispDev    (Type: Byte) Code for the Alternate Display Device.  This
  1435.                    code is detected by Qinit for a second, but inactive
  1436.                    adapter and display, just in case there are dual monitors.
  1437.                    It uses the same constants as ActiveDispDev listed above.
  1438.  
  1439.      AltDispDevPCC (Type: Word) Code for the Alternate Display adapter on the
  1440.                    PC Convertible.  In hex, it corresponds to the model number
  1441.  
  1442.  
  1443.    Chapter 3, Variables                                                Page 24
  1444.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1445.  
  1446.  
  1447.                    of the attached device:
  1448.  
  1449.                      Model  Description
  1450.                      -----  --------------------
  1451.                      $   0  No alternate adapter
  1452.                      $5140  LCD
  1453.                      $5153  CGA type
  1454.                      $5151  Monochrome type
  1455.  
  1456.      CardSeg       (Type: Word) Video segment address of the video "card" as
  1457.                    detected by Qinit.
  1458.  
  1459.      CardSnow      (Type: Boolean) Set to true for wait-for-retrace for the
  1460.                    video "card" as detected by Qinit.
  1461.  
  1462.      EgaInfo       (Type: Byte) Absolute variable at $0040:$0087 has the
  1463.                    following information when the EGA (or VGA) is present:
  1464.  
  1465.                      Bits  Description
  1466.                      ----  -------------------------------------------
  1467.                      7     (0) Clear, (1) Keep video data after
  1468.                            video mode set
  1469.                      6,5   (00) 64k, (01), 128k, (10) 192k, (11) 256k,
  1470.                            memory on the card.
  1471.                      4     Reserved
  1472.                      3     (0) EGA active, (1) EGA not active
  1473.                      2     (0) Disable,    (1) Enable wait-for-display
  1474.                      1     (0) CD/ECD      (1) MD attached
  1475.                      0     (0) Active,     (1) Inactive CD emulation
  1476.  
  1477.      EgaSwitches   (Type: Byte) By checking the value of this byte, you can
  1478.                    determine the monitor connected to the EGA, the alternate
  1479.                    video system, and the start up default.  The byte is a copy
  1480.                    of how the dip switches are set on the card where on=0 and
  1481.                    off=1.  The primary is the default.  When the ECD is set
  1482.                    for 640x200, it is emulating the CD including the cursor
  1483.                    mode.  Qinit directly tests for the alternate device rather
  1484.                    than assuming it.
  1485.  
  1486.                      Switch    Primary             Secondary
  1487.                      --------  ------------------- -------------------
  1488.                      0000 = 0  MDA + MD            EGA + CD - 40x25
  1489.                      0001 = 1  MDA + MD            EGA + CD - 80x25
  1490.                      0010 = 2  MDA + MD            EGA + ECD (640x200)
  1491.                      0011 = 3  MDA + MD            EGA + ECD (640x350)
  1492.                      0100 = 4  CGA + CD - 40x25    EGA + MD
  1493.                      0101 = 5  CGA + CD - 80x25    EGA + MD
  1494.                      0110 = 6  EGA + CD - 40x25    MDA + MD
  1495.                      0111 = 7  EGA + CD - 80x25    MDA + MD
  1496.                      1000 = 8  EGA + ECD (640x200) MDA + MD
  1497.                      1001 = 9  EGA + ECD (640x350) MDA + MD
  1498.                      1010 =10  EGA + MD            CGA + CD - 40x25
  1499.                      1011 =11  EGA + MD            CGA + CD - 80x25
  1500.  
  1501.      Have3270      (Type: Boolean) If Qinit detects 3270 PC equipment or
  1502.  
  1503.  
  1504.    Chapter 3, Variables                                                Page 25
  1505.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1506.  
  1507.  
  1508.                    software, this variable is set to true.  In addition, the
  1509.                    ActiveDispDev is either MdaMono or CgaColor.  Note that
  1510.                    there may or may not be graphics capability in either case;
  1511.                    Qinit is not meant to detect graphics.  See
  1512.                    ActiveDispDev3270 for codes.
  1513.  
  1514.      HavePS2       (Type: Boolean) Qinit sets HavePS2 to true if the DCC is
  1515.                    supported.  This means that the program has detected a PS/2
  1516.                    video card whether it is integrated on a model 30, a PS/2
  1517.                    Display Adapter installed on an IBM XT, or the like.  It
  1518.                    also means that either MCGA or VGA is present, but not
  1519.                    necessarily active.  To know which, just check the DCC.
  1520.  
  1521.      HercModel     (Type: Byte) Model of the attached Hercules video card.  If
  1522.                    no card is detected, then HercModel=NoHerc.
  1523.  
  1524.                      Constant    Code  Description
  1525.                      ----------  ----  ---------------------
  1526.                      NoHerc       0    No Hercules card
  1527.                      HgcMono      1    HGC
  1528.                      HgcPlus      2    HGC Plus
  1529.                      HercInColor  3    Hercules InColor Card
  1530.  
  1531.      MaxPage       (Type: Byte) Maximum possible 0-based video page number.
  1532.                    See TABLE 1 in QWIK55.DOC for ranges.
  1533.  
  1534.  
  1535.    VIDEO SOFTWARE
  1536.  
  1537.    Video Software Variables - These variables indicate the current video mode
  1538.    and screen characteristics to which QWIK is writing and what is being
  1539.    viewed on the CRT.  There are several absolute variables listed that
  1540.    duplicate some of the global variables like CRTcolumns and CRTcols.  It is
  1541.    preferable to use the global ones, where the absolute ones are only needed
  1542.    for handling exceptions.
  1543.  
  1544.      Variable      Description
  1545.      ------------  -----------------------------------------------------------
  1546.      CRTcols       (Type: Byte) Global variable equal to CRTcolumns.
  1547.  
  1548.      CRTcolumns    (Type: Word) Absolute variable directly accesses the 1-
  1549.                    based currently viewed number of CRT columns for any card
  1550.                    or video mode.
  1551.  
  1552.      CRTrows       (Type: Byte) 1-based number of CRT rows for any card or
  1553.                    video mode.
  1554.  
  1555.      EgaFontSize   (Type: Word) Absolute variable directly accesses the 1-
  1556.                    based number of horizontal scan lines per character for
  1557.                    EGA/MCGA/VGA.
  1558.  
  1559.      EgaRows       (Type: Byte) Absolute variable directly accesses the 0-
  1560.                    based number of rows on the current screen for EGA, MCGA,
  1561.                    and VGA.  This number is used to make CRTrows which is
  1562.                    handled by Qinit.
  1563.  
  1564.  
  1565.    Chapter 3, Variables                                                Page 26
  1566.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1567.  
  1568.  
  1569.  
  1570.      InMultiTask   (Type: Boolean)  This flag indicates if MTVB is being used
  1571.                    for the screen in lieu of the normal screen.  It defaults
  1572.                    to false and is possibly altered with SetMultiTask if the
  1573.                    multitasking software has be instructed to expect writing
  1574.                    direct to the MTVB (not direct screen).
  1575.  
  1576.      Page0seg      (Type: Word) Segment for the base page, page 0.  In multi-
  1577.                    tasking environments, change this value to its video
  1578.                    display buffer.  QScrSeg and QScrOfs should also be set.
  1579.  
  1580.      QEosOfs       (Type: Word) 0-base offset where a Q*Eos procedure will
  1581.                    write.
  1582.  
  1583.      QScrSeg       (Type: Word) Segment for QWIK writing which is altered when
  1584.                    changing pages.  QScrSeg=Page0seg on page 0.
  1585.  
  1586.      QScrOfs       (Type: Word) Offset for QWIK writing needed for virtual
  1587.                    screens.  The usual value is 0 for the video pages.
  1588.  
  1589.      QScrPtr       (Type: Pointer) Combines QScrSeg and QScrOfs
  1590.  
  1591.      QScrRec       (Type: VScrRecType) Record of essential variables for QWIK
  1592.                    screen writing.  This variable occupies the same space and
  1593.                    in the same order of:
  1594.  
  1595.                      Global    QScrRec
  1596.                      -------   -------
  1597.                      CRTrows   Vrows
  1598.                      CRTcols   Vcols
  1599.                      CRTsize   Vsize
  1600.                      Qsnow     Vsnow
  1601.                      QEosOfs   VEosOfs
  1602.                      QScrPtr   VScrPtr
  1603.  
  1604.                    These variables are also described in this section.  As a
  1605.                    record, the variables can be swapped easily when writing to
  1606.                    virtual screens.  See the example in QVscrToScr procedure.
  1607.  
  1608.      Qsnow         (Type: Boolean) Set to true for wait-for-retrace (snow)
  1609.                    while QWIK is writing.
  1610.  
  1611.      QvideoPage    (Type: Byte) Video page to which QWIK is writing which is
  1612.                    set by QwritePage.  It is initially 0.
  1613.  
  1614.      QvideoMode    (Type: Byte) Video mode detected by Qinit.
  1615.  
  1616.      ScrollAttr    (Type: Integer) The attribute used to clear the blank row
  1617.                    when QEosLn is used.
  1618.  
  1619.      VideoMode     (Type: Byte) Absolute variable directly accesses the
  1620.                    current video mode in low memory.
  1621.  
  1622.      VideoPage     (Type: Byte) Absolute variable directly accesses the
  1623.                    currently viewed video page in low memory.
  1624.  
  1625.  
  1626.    Chapter 3, Variables                                                Page 27
  1627.    QWIK Screen Utilities                        Reference Guide, Version 5.5
  1628.  
  1629.  
  1630.  
  1631.      VScrRecType   The type for the record of essential variables for QWIK
  1632.                    screen writing to virtual screens.  This enables an easy
  1633.                    exchange of data between the CRT and virtual screens.
  1634.  
  1635.  
  1636.    VIDEO CURSOR
  1637.  
  1638.    Video Cursor Variables and Constants - These variables and constants give
  1639.    you easy tools to combine with bit operations to display your choice of
  1640.    cursor modes.  The variables default with the cursor on and no skew which
  1641.    are detected and set by Qinit at startup:
  1642.  
  1643.      Variable          Description
  1644.      ----------------- --------------------------------------------------------
  1645.      CursorBlock       (Type: Word) Cursor mode value for the full cell.
  1646.  
  1647.      CursorHalfblock   (Type: Word) Cursor mode value for a half block usually
  1648.                        used for insert editing.
  1649.  
  1650.      CursorInitial     (Type: Word) Cursor mode value detected at startup.
  1651.  
  1652.      CursorUnderline   (Type: Word) Cursor mode value for the normal
  1653.                        underline.
  1654.  
  1655.  
  1656.      Constant     Value  Description
  1657.      -----------  -----  -----------------------------------------------------
  1658.      CursorBlink  $6000  Used to alter bits 13/14 to create erratic blinking
  1659.                          on MDA/CGA cards.  (EGA/VGA cards turn the cursor
  1660.                          off.)
  1661.  
  1662.      CursorOff    $2000  Used to alter bits 13/14 or can be used by itself to
  1663.                          turn the cursor off.
  1664.  
  1665.      CursorOn     $0000  Used to alter bits 13/14 in ModeCursor to turn the
  1666.                          cursor back on.
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.    Chapter 3, Variables                                                Page 28
  1688.  
  1689.