home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / screen / quikc21 / qwikref.doc < prev    next >
Encoding:
Text File  |  1989-07-05  |  76.9 KB  |  1,753 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.                              QWIKC SCREEN UTILITIES
  22.                                  REFERENCE GUIDE
  23.  
  24.                                    Version 2.1
  25.                                   June 1, 1989
  26.  
  27.  
  28.                          Conversion to Turbo C / MS C by
  29.                        Jordan Gallagher / Wisdom Research
  30.  
  31.  
  32.                Copyright (C) 1988,1989 Eagle Performance Software
  33.                               All Rights Reserved.
  34.  
  35.  
  36.  
  37.                                _______
  38.                           ____|__     |               (tm)
  39.                        --|       |    |-------------------
  40.                          |   ____|__  |  Association of
  41.                          |  |       |_|  Shareware
  42.                          |__|   o   |    Professionals
  43.                        -----|   |   |---------------------
  44.                             |___|___|    MEMBER
  45.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  46.  
  47.  
  48.  
  49.                        T A B L E   O F   C O N T E N T S
  50.  
  51.         1. INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . 3
  52.              Purpose . . . . . . . . . . . . . . . . . . . . . . . 3
  53.              Common Parameters . . . . . . . . . . . . . . . . . . 3
  54.              Attributes  . . . . . . . . . . . . . . . . . . . . . 4
  55.  
  56.         2. FUNCTIONS . . . . . . . . . . . . . . . . . . . . . . . 6
  57.              eosc  . . . . . . . . . . . . . . . . . . . . . . . . 6
  58.              eosln . . . . . . . . . . . . . . . . . . . . . . . . 6
  59.              eosr  . . . . . . . . . . . . . . . . . . . . . . . . 6
  60.              eostocursor . . . . . . . . . . . . . . . . . . . . . 6
  61.              eostorc . . . . . . . . . . . . . . . . . . . . . . . 7
  62.              eostorcrel  . . . . . . . . . . . . . . . . . . . . . 7
  63.              getcursor . . . . . . . . . . . . . . . . . . . . . . 7
  64.              get_submodel_id . . . . . . . . . . . . . . . . . . . 7
  65.              gotoeos . . . . . . . . . . . . . . . . . . . . . . . 8
  66.              gotorc. . . . . . . . . . . . . . . . . . . . . . . . 8
  67.              modcursor . . . . . . . . . . . . . . . . . . . . . . 8
  68.              qattr . . . . . . . . . . . . . . . . . . . . . . . . 9
  69.              qattrc  . . . . . . . . . . . . . . . . . . . . . . . 9
  70.              qattreos  . . . . . . . . . . . . . . . . . . . . . . 9
  71.              qeosln  . . . . . . . . . . . . . . . . . . . . . . . 10
  72.              qfill . . . . . . . . . . . . . . . . . . . . . . . . 10
  73.              qfillc  . . . . . . . . . . . . . . . . . . . . . . . 10
  74.              qfilleos  . . . . . . . . . . . . . . . . . . . . . . 11
  75.              qinit . . . . . . . . . . . . . . . . . . . . . . . . 11
  76.              qreadattr . . . . . . . . . . . . . . . . . . . . . . 12
  77.              qreadchar . . . . . . . . . . . . . . . . . . . . . . 12
  78.              qreadstr  . . . . . . . . . . . . . . . . . . . . . . 12
  79.              qreinit . . . . . . . . . . . . . . . . . . . . . . . 12
  80.              qscrolldown . . . . . . . . . . . . . . . . . . . . . 13
  81.              qscrollup . . . . . . . . . . . . . . . . . . . . . . 13
  82.              qscrtovscr  . . . . . . . . . . . . . . . . . . . . . 14
  83.              qstoretomem . . . . . . . . . . . . . . . . . . . . . 15
  84.              qstoretoscr . . . . . . . . . . . . . . . . . . . . . 15
  85.              qviewpage . . . . . . . . . . . . . . . . . . . . . . 16
  86.              qvscrtoscr  . . . . . . . . . . . . . . . . . . . . . 17
  87.              qwrite  . . . . . . . . . . . . . . . . . . . . . . . 18
  88.              qwritec . . . . . . . . . . . . . . . . . . . . . . . 18
  89.              qwriteeos . . . . . . . . . . . . . . . . . . . . . . 19
  90.              qwriteeos_sub . . . . . . . . . . . . . . . . . . . . 19
  91.              qwritepage  . . . . . . . . . . . . . . . . . . . . . 19
  92.              qwrite_sub  . . . . . . . . . . . . . . . . . . . . . 20
  93.              setcursor . . . . . . . . . . . . . . . . . . . . . . 20
  94.              setmultitask  . . . . . . . . . . . . . . . . . . . . 21
  95.              wherec  . . . . . . . . . . . . . . . . . . . . . . . 21
  96.              wherer  . . . . . . . . . . . . . . . . . . . . . . . 22
  97.  
  98.         3. VARIABLES . . . . . . . . . . . . . . . . . . . . . . . 23
  99.              System Hardware . . . . . . . . . . . . . . . . . . . 23
  100.              Video Hardware  . . . . . . . . . . . . . . . . . . . 24
  101.              Video Software  . . . . . . . . . . . . . . . . . . . 26
  102.              Video Cursor  . . . . . . . . . . . . . . . . . . . . 28
  103.  
  104.  
  105.                                        2
  106.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  107.  
  108.  
  109.    1.  I N T R O D U C T I O N
  110.  
  111.  
  112.    PURPOSE
  113.  
  114.    This document is a QWIKC technical reference manual describing each routine
  115.    and variable in detail in a format similar to the Turbo C manual.  The
  116.    routines are described in alphabetical order.  Since this manual is on
  117.    disk, you can find your interest easily with a search utility.
  118.  
  119.    Application - All QWIKC functions will perform in the following
  120.    applications:
  121.  
  122.      . All video text modes - 0, 1, 2, 3 and 7.
  123.      . Any column mode - 40, 80, or variable.
  124.      . For IBM PC, XT, AT, PCjr, PC convertible, all PS/2 models, 3270 PC, and
  125.        compatibles.
  126.      . With MDA, CGA, EGA, MCGA, VGA, 8214/A, all Hercules video cards.
  127.      . Perform routines in absolute coordinates rather than window-relative
  128.        coordinates.
  129.      . Capitalizes on the use of faster multi-tasking video buffers (MTVB).
  130.  
  131.    For window-relative writing routines, see WNDWC21.ARC.
  132.  
  133.  
  134.    COMMON PARAMETERS
  135.  
  136.    Common Parameters - Most functions use the same parameter names.  Rather
  137.    than repeating them for each routine, detailed descriptions for those
  138.    parameters are listed below.
  139.  
  140.    Screen Coordinates - QWIKC routines work in absolute coordinates to give
  141.    you full control of the screen.  The routines do not check for bounds on
  142.    the screen, so be sure to stay in range.  The upper left column on the
  143.    screen is row 1, column 1, which is also called 1-based.  The routines also
  144.    wrap to the next line; they do not truncate at end-of-line.  For example,
  145.    row=1 and col=255 is equivalent to row=3 and col=15 on a screen with 80
  146.    columns.  But this is not a recommended practice for variable screen
  147.    widths.
  148.  
  149.    row/col - row and col were chosen in lieu of the X/Y scheme used in most
  150.    routines.  Since QWIKC is for only text modes, the screen is treated like a
  151.    word processor with rows and columns.  It is more intuitive to use the X/Y
  152.    scheme in graphics and the row/col scheme for text.
  153.  
  154.    coll/colr - In the self-centering routines, the left and right columns are
  155.    simply averaged.  To center on the full width of an 80 column display, set
  156.    coll=1 and colr=80.  To center on a certain column number, set both values
  157.    equal to that column number.  Or, to center on any screen, set coll=1 and
  158.    colr=crt_cols.
  159.  
  160.    rows/cols - Using rows/cols is much easier than row2/col2 to describe the
  161.    height and width of a block such as:
  162.  
  163.       qstoretomem( row, col, rows, cols, myptr );
  164.  
  165.  
  166.                                        3
  167.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  168.  
  169.  
  170.  
  171.    Should you decide to move a block, only row and col need to be changed, and
  172.    therefore rows and cols don't need to be mentally recalculated and altered.
  173.    Please keep cols no greater than crt_cols.  Zero values will simply exit
  174.    the routine.
  175.  
  176.    astr - This parameter contains the address of the string.
  177.  
  178.  
  179.    ATTRIBUTES
  180.  
  181.    attr - Use the convenient attribute macros for the foreground and
  182.    background colors supplied in the header file, for example:
  183.  
  184.      qwrite( 1, 1, WHITE+BLUE_BG, "My String" );
  185.  
  186.    will write the text with white on blue attributes.  The foreground macros
  187.    in QWIKC21.H are duplicates of those in Turbo C's conio.h:
  188.  
  189.      BLACK         0x00       DARKGRAY      0x08
  190.      BLUE          0x01       LIGHTBLUE     0x09
  191.      GREEN         0x02       LIGHTGREEN    0x0A
  192.      CYAN          0x03       LIGHTCYAN     0x0B
  193.      RED           0x04       LIGHTRED      0x0C
  194.      MAGENTA       0x05       LIGHTMAGENTA  0x0D
  195.      BROWN         0x06       YELLOW        0x0E
  196.      LIGHTGRAY     0x07       WHITE         0x0F
  197.      BLINK         0x80
  198.  
  199.    For convenience, background color macros were included so that the
  200.    foreground and background macros could be added for the complete attribute.
  201.  
  202.      BLACK_BG     0x00
  203.      BLUE_BG      0x10
  204.      GREEN_BG     0x20
  205.      CYAN_BG      0x30
  206.      RED_BG       0x40
  207.      MAGENTA_BG   0x50
  208.      BROWN_BG     0x60
  209.      LIGHTGRAY_BG 0x70
  210.      SAMEATTR     -1
  211.  
  212.    SAMEATTR - A powerful and unique feature of all QWIKC routines is the use
  213.    of the macro SAMEATTR.  If SAMEATTR, or a negative value, is used as an
  214.    attribute, the routine will suppress any changes to the attributes and use
  215.    what is currently on the screen.
  216.  
  217.    3270 PC Attributes - Be aware that the 3270 PC ignores the foreground
  218.    intensity bit, so there are only 8 colors.  In addition, 4 colors have
  219.    different tints:
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.                                        4
  228.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  229.  
  230.  
  231.  
  232.      PC Color     3270 PC Color
  233.      ------------ -------------
  234.      Cyan         Turquoise
  235.      Magenta      Pink
  236.      Brown        Yellow
  237.      Light Gray   White
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.                                        5
  289.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  290.  
  291.  
  292.    2.  F U N C T I O N S
  293.  
  294.    In this section, a detailed description is provided for each function.
  295.  
  296.  
  297.    ---------------------------------------------------------------------------
  298.    eosc                                                                  QWIKC
  299.    ---------------------------------------------------------------------------
  300.    Function       Returns the absolute column of the EOS marker.
  301.    Syntax         unsigned char eosc(void);
  302.    Remarks        Operates on the currently written screen.  The upper left
  303.                   corner of the screen (1,1).
  304.    Return value   eosc returns the absolute column of the EOS marker.
  305.    Screens        All video pages and virtual screens.
  306.    See also       eosr, eostorc, eostorcrel, eostocursor, eosln, gotoeos
  307.  
  308.    ---------------------------------------------------------------------------
  309.    eosln                                                                 QWIKC
  310.    ---------------------------------------------------------------------------
  311.    Function       Moves the EOS marker to column 1 of the next row.
  312.    Syntax         void eosln(void);
  313.    Remarks        Operates on the currently written screen.
  314.    Return value   None.
  315.    Screens        All video pages and virtual screens.
  316.    EOS            Updated.
  317.    Restrictions   eosln can increment past the last row of a screen, but does
  318.                   not scroll up the screen.
  319.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, gotoeos,
  320.                   qeosln
  321.  
  322.    ---------------------------------------------------------------------------
  323.    eosr                                                                  QWIKC
  324.    ---------------------------------------------------------------------------
  325.    Function       Returns the absolute row of the EOS marker.
  326.    Syntax         unsigned char eosr(void);
  327.    Remarks        Operates on the currently written screen.
  328.    Return value   eosr returns the absolute row of the EOS marker.
  329.    Screens        All video pages and virtual screens.
  330.    See also       eosc, eostorc, eostorcrel, eostocursor, eosln, gotoeos
  331.  
  332.    ---------------------------------------------------------------------------
  333.    eostocursor                                                           QWIKC
  334.    ---------------------------------------------------------------------------
  335.    Function       Positions the EOS marker to where the cursor is.
  336.    Syntax         void eostocursor(void);
  337.    Remarks        The EOS marker is simply moved to match the position of the
  338.                   cursor of the currently written video page.
  339.    Return value   None.
  340.    Screens        All video pages only.
  341.    EOS            Updated.
  342.    See also       eosr, eosc, eostorc, eostorcrel, eosln, gotoeos
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.                                        6
  350.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  351.  
  352.  
  353.    ---------------------------------------------------------------------------
  354.    eostorc                                                               QWIKC
  355.    ---------------------------------------------------------------------------
  356.    Function       Positions the EOS marker.
  357.    Syntax         void eostorc( unsigned char row, unsigned char col );
  358.    Remarks        Use this procedure to manually locate the EOS marker.  The
  359.                   q*eos functions will write where this marker is located on
  360.                   the currently written screen.
  361.    Return value   None.
  362.    Screens        All video pages and virtual screens.
  363.    EOS            Updated.
  364.    Restrictions   Stay within the screen limits.
  365.    See also       eosr, eosc, eostorcrel, eostocursor, eosln, gotoeos
  366.  
  367.    ---------------------------------------------------------------------------
  368.    eostorcrel                                                            QWIKC
  369.    ---------------------------------------------------------------------------
  370.    Function       Positions the EOS marker relative to its current position.
  371.    Syntax         void eostorcrel( unsigned char row, unsigned char col );
  372.    Remarks        The relative values can be positive or negative.  The q*eos
  373.                   functions will write where the EOS marker is located on the
  374.                   currently written screen.
  375.    Return value   None.
  376.    Screens        All video pages and virtual screens.
  377.    EOS            Updated.
  378.    Restrictions   Stay within the screen limits.
  379.    See also       eosr, eosc, eostorc, eostocursor, eosln, gotoeos
  380.  
  381.    ---------------------------------------------------------------------------
  382.    getcursor                                                             QWIKC
  383.    ---------------------------------------------------------------------------
  384.    Function       Returns the cursor mode for the CRT.
  385.    Syntax         int getcursor(void);
  386.    Remarks        There is only one cursor mode variable that applies to what
  387.                   is currently viewed on the CRT and it is retrieved from low
  388.                   memory at 0040h:0060h.
  389.    Return value   getcursor returns the cursor mode for the CRT.
  390.    Screens        All video pages only.
  391.    See also       setcursor, modcursor
  392.  
  393.    ---------------------------------------------------------------------------
  394.    get_submodel_id                                                       QWIKC
  395.    ---------------------------------------------------------------------------
  396.    Function       Gets the submodel_id on IBM computers.
  397.    Syntax         void get_submodel_id(void);
  398.    Remarks        The system_id and submodel_id variables are updated if a
  399.                   submodel ID exists.  It will only execute on recent models
  400.                   of XT, AT, and PS/2 models which have this ID.  Otherwise
  401.                   the variables will remain unaltered as set by qinit().
  402.    Return value   None.  The result of the submodel ID check is stored in
  403.                   submodel_id.
  404.    Restrictions   PC or XT clones must recognize IBM's system ID.
  405.    See also       QWIKC21.DOC
  406.  
  407.  
  408.  
  409.  
  410.                                        7
  411.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  412.  
  413.  
  414.    ---------------------------------------------------------------------------
  415.    gotoeos                                                               QWIKC
  416.    ---------------------------------------------------------------------------
  417.    Function       Positions the cursor where the EOS marker is.
  418.    Syntax         void gotoeos(void);
  419.    Remarks        The cursor is simply moved to match the position of the EOS
  420.                   marker of the currently written video page.
  421.    Return value   None.
  422.    Screens        All video pages only.
  423.    EOS            Unaltered.
  424.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, eosln, gotorc
  425.    Example        Center a string on the screen and place the cursor at the
  426.                   end of the string:
  427.  
  428.                     qwritec( 1, 1, crt_cols, SAMEATTR, "My message " );
  429.                     gotoeos();
  430.  
  431.    ---------------------------------------------------------------------------
  432.    gotorc                                                                QWIKC
  433.    ---------------------------------------------------------------------------
  434.    Function       Positions the cursor.
  435.    Syntax         void gotorc( unsigned char row, unsigned char col );
  436.    Remarks        The cursor is moved to the position absolute to the
  437.                   currently written video page.
  438.    Return value   None.
  439.    Screens        All video pages only.
  440.    EOS            Unaltered.
  441.    Restrictions   Stay within the screen limits.
  442.    See also       gotoeos, wherer, wherec
  443.  
  444.    ---------------------------------------------------------------------------
  445.    modcursor                                                             QWIKC
  446.    ---------------------------------------------------------------------------
  447.    Function       Modifies the current cursor mode to turn on, off, or blink
  448.                   erratically.
  449.    Syntax         void modcursor( int bits13and14 );
  450.    Remarks        Using the modification macros cursor_on, cursor_off, or
  451.                   cursor_blink for bits13and14, the currently viewed cursor
  452.                   mode on the CRT will be modified accordingly.  The function
  453.                   only looks at bits 13 and 14 of bits13and14 for the
  454.                   modification.  The scan lines remain unaltered.
  455.    Return value   None.
  456.    Screens        Any video page as viewed.
  457.    See also       getcursor, setcursor
  458.    Example        To turn the current cursor mode off:
  459.  
  460.                     modcursor( cursor_off );
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.                                        8
  472.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  473.  
  474.  
  475.    ---------------------------------------------------------------------------
  476.    qattr                                                                 QWIKC
  477.    ---------------------------------------------------------------------------
  478.    Function       Changes just the attribute in a rows-by-columns block on the
  479.                   screen.
  480.    Syntax         void qattr( unsigned char row, unsigned char col,
  481.                               unsigned char rows, unsigned char cols,
  482.                               int attr );
  483.    Remarks        The upper left corner of the block starts at (row,col) and
  484.                   the block size is rows by cols.  Note that you can even
  485.                   change 1 row and/or 1 column.  If SAMEATTR is used for attr
  486.                   or if rows or cols is zero, then nothing is written.
  487.    Return value   None.
  488.    Screens        All video pages and virtual screens.
  489.    EOS            Updated.
  490.    Restrictions   Stay within the screen limits.
  491.    See also       qattrc, qattreos
  492.    Example        To create inverse video on any screen:
  493.  
  494.                     qattr( 1, 1, crt_rows, crt_cols, BLACK+LIGHTGRAY_BG );
  495.  
  496.    ---------------------------------------------------------------------------
  497.    qattrc                                                                QWIKC
  498.    ---------------------------------------------------------------------------
  499.    Function       Changes just the attribute in a rows-by-columns block on the
  500.                   screen and centers it between two columns.
  501.    Syntax         void qattrc( unsigned char row, unsigned char coll,
  502.                                unsigned char colr, unsigned char rows,
  503.                                unsigned char cols, int attr );
  504.    Remarks        The upper left corner of the block starts at
  505.                   (row,(coll+colr-cols+1) >> 1) with a block size of rows by
  506.                   cols and centering it between the two columns coll and colr.
  507.                   Odd counts are shifted left.  If SAMEATTR is used for attr
  508.                   or if rows or cols is zero, then nothing is written.
  509.    Return value   None.
  510.    Screens        All video pages and virtual screens.
  511.    EOS            Updated.
  512.    Restrictions   Stay within the screen limits.
  513.    See also       qattr, qattreos
  514.    Example        A 30 character message centered on the screen in row 15,
  515.                   needs to be white on green:
  516.  
  517.                       qattrc( 15, 1, crt_cols, 1, 30, WHITE+GREEN_BG );
  518.  
  519.                   The attribute will start to be changed in column 26 on an 80
  520.                   column screen.
  521.  
  522.    ---------------------------------------------------------------------------
  523.    qattreos                                                              QWIKC
  524.    ---------------------------------------------------------------------------
  525.    Function       Changes just the attribute in a rows-by-columns block on the
  526.                   current screen starting at the EOS marker.
  527.    Syntax         void qattreos( unsigned char rows, unsigned char cols,
  528.                                  int attr );
  529.    Remarks        The upper left corner of the block starts at the previously
  530.  
  531.  
  532.                                        9
  533.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  534.  
  535.  
  536.                   set EOS marker and the block size is rows by cols.  If
  537.                   SAMEATTR is used for attr or if rows or cols is zero, then
  538.                   nothing is written.
  539.    Return value   None.
  540.    Screens        All video pages and virtual screens.
  541.    EOS            Updated.
  542.    Restrictions   Stay within the screen limits.
  543.    See also       qattr, qattrc
  544.    Example        To highlight a 20 column data entry field at the EOS marker
  545.                   with yellow on magenta:
  546.  
  547.                     qattreos( 1, 20, YELLOW+MAGENTA_BG );
  548.  
  549.    ---------------------------------------------------------------------------
  550.    qeosln                                                                QWIKC
  551.    ---------------------------------------------------------------------------
  552.    Function       Moves the EOS marker to column 1 of the next row with a
  553.                   possible scroll up.
  554.    Syntax         void qeosln(void);
  555.    Remarks        Operates on the currently written screen.  If eosr becomes
  556.                   greater than crt_rows, then the screen will scroll up.  The
  557.                   new blank row will have the attribute set by scroll_attr
  558.                   which must be manually set before hand.  scroll_attr is
  559.                   defined in QWIKC21.H.
  560.    Return value   None.
  561.    Screens        All video pages and virtual screens.
  562.    EOS            Updated to first cleared column of the cleared row.
  563.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, gotoeos, eosln
  564.  
  565.    ---------------------------------------------------------------------------
  566.    qfill                                                                 QWIKC
  567.    ---------------------------------------------------------------------------
  568.    Function       Fills the screen with a character with an optional attribute
  569.                   change in a rows-by-columns block on the current screen.
  570.    Syntax         void qfill( unsigned char row, unsigned char col,
  571.                               unsigned char rows, unsigned char cols,
  572.                               int attr, unsigned char ch );
  573.    Remarks        The upper left corner of the block starts at (row,col) and
  574.                   the block size is rows by cols.  If SAMEATTR is used for
  575.                   attr, then the attribute will remain the same on the screen.
  576.                   If rows or cols is zero, then nothing is written.
  577.    Return value   None.
  578.    Screens        All video pages and virtual screens.
  579.    EOS            Updated.
  580.    Restrictions   Stay within the screen limits.
  581.    See also       qfillc, qfilleos
  582.    Example        To clear the screen with black on brown attribute:
  583.  
  584.                     qfill( 1, 1, crt_rows, crt_cols, BLACK+BROWN_BG, ' ' );
  585.  
  586.    ---------------------------------------------------------------------------
  587.    qfillc                                                                QWIKC
  588.    ---------------------------------------------------------------------------
  589.    Function       Fills the screen with a character and an optional attribute
  590.                   change in a rows-by-columns block on the current screen and
  591.  
  592.  
  593.                                        10
  594.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  595.  
  596.  
  597.                   centers it between two columns.
  598.    Syntax         void qfillc( unsigned char row, unsigned char coll,
  599.                                unsigned char colr, unsigned char rows,
  600.                                unsigned char cols, int attr,
  601.                                unsigned char ch );
  602.    Remarks        The upper left corner of the block starts at
  603.                   (row,(coll+colr-cols+1) >> 1) with a block size of rows by
  604.                   cols and centered between the two columns coll and colr.
  605.                   Odd counts are shifted left.  If SAMEATTR is used for attr,
  606.                   then the attribute will remain the same on the screen.  If
  607.                   rows or cols is zero, then nothing is written.
  608.    Return value   None.
  609.    Screens        All video pages and virtual screens.
  610.    EOS            Updated.
  611.    Restrictions   Stay within the screen limits.
  612.    See also       qfill, qfilleos
  613.    Example        Center 20 dashes on the screen in rows 1 to 5 with black on
  614.                   brown attributes:
  615.  
  616.                     qfillc( 1, 1, crt_cols, 5, 20, BLACK+BROWN_BG, '-' );
  617.  
  618.    ---------------------------------------------------------------------------
  619.    qfilleos                                                              QWIKC
  620.    ---------------------------------------------------------------------------
  621.    Function       Fills the screen with a character with an optional attribute
  622.                   change in a rows-by-columns block on the current screen
  623.                   starting at the EOS marker.
  624.    Syntax         void qfilleos( unsigned char rows, unsigned char cols,
  625.                                  int attr, unsigned char ch );
  626.    Remarks        The upper left corner of the block starts at the previously
  627.                   set EOS marker and the block size is rows by cols.  If
  628.                   SAMEATTR is used for attr, then the attribute will remain
  629.                   the same on the screen.  If rows or cols is zero, then
  630.                   nothing is written.
  631.    Return value   None.
  632.    Screens        All video pages and virtual screens.
  633.    EOS            Updated.
  634.    Restrictions   Stay within the screen limits.
  635.    See also       qfill, qfillc
  636.    Example        To clear a 20 column data entry field at the EOS marker with
  637.                   yellow on magenta:
  638.  
  639.                     qfilleos( 1, 20, YELLOW+MAGENTA_BG, ' ' );
  640.  
  641.    ---------------------------------------------------------------------------
  642.    qinit                                                                 QWIKC
  643.    ---------------------------------------------------------------------------
  644.    Function       Detects system, display, and video card(s).  Initializes
  645.                   global data for QWIKC routines.
  646.    Syntax         void qinit(void);
  647.    Remarks        qinit() must be called at the start of your program to
  648.                   initialize QWIKC. qreinit() should be called if there is a
  649.                   text mode change.
  650.    Return value   None.  QWIKC's global variables are set to match the video
  651.                   configuration of your system.
  652.  
  653.  
  654.                                        11
  655.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  656.  
  657.  
  658.    EOS            Set to (1,1).
  659.    See also       qreinit(), QWIKC21.DOC, QINITEST.C, VARIABLES section below.
  660.  
  661.    ---------------------------------------------------------------------------
  662.    qreadattr                                                             QWIKC
  663.    ---------------------------------------------------------------------------
  664.    Function       Reads an attribute from the current screen.
  665.    Syntax         unsigned char qreadattr( unsigned char row,
  666.                                            unsigned char col );
  667.    Remarks        Reads an attribute from the screen at just one location.
  668.    Return value   qreadattr returns the attribute read from the screen.
  669.    Screens        All video pages and virtual screens.
  670.    EOS            Unaltered.
  671.    See also       qreadchar, qreadstr
  672.  
  673.    ---------------------------------------------------------------------------
  674.    qreadchar                                                             QWIKC
  675.    ---------------------------------------------------------------------------
  676.    Function       Reads a character from the current screen.
  677.    Syntax         unsigned char qreadchar( unsigned char row,
  678.                                            unsigned char col );
  679.    Remarks        Reads a character from the screen at just one location.
  680.    Return value   qreadchar returns the character read from the screen.
  681.    Screens        All video pages and virtual screens.
  682.    EOS            Unaltered.
  683.    See also       qreadattr, qreadstr
  684.  
  685.    ---------------------------------------------------------------------------
  686.    qreadstr                                                              QWIKC
  687.    ---------------------------------------------------------------------------
  688.    Function       Reads a text string from the current screen.
  689.    Syntax         void qreadstr( char far *astr, unsigned char row,
  690.                                  unsigned char col, unsigned char cols );
  691.    Remarks        Reads a string of characters from the screen, storing it in
  692.                   the location pointed to by astr.
  693.    Return value   None.
  694.    Screens        All video pages and virtual screens.
  695.    EOS            Unaltered.
  696.    See also       qreadattr, qreadchar
  697.  
  698.    ---------------------------------------------------------------------------
  699.    qreinit                                                               QWIKC
  700.    ---------------------------------------------------------------------------
  701.    Function       Detects system, display, and video card(s).  Reinitializes
  702.                   global data for QWIKC routines.
  703.    Syntax         void qreinit(void);
  704.    Remarks        qreinit() must be called after changing text modes to re-
  705.                   initialize QWIKC. qinit() must be called at the start of
  706.                   your program.
  707.    Return value   None.  QWIKC's global variables are reset to match the new
  708.                   text mode and video configuration of your system.
  709.    EOS            Set to (1,1).
  710.    See also       qinit(), QWIKC21.DOC, QINITEST.C, VARIABLES section below.
  711.  
  712.  
  713.  
  714.  
  715.                                        12
  716.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  717.  
  718.  
  719.    ---------------------------------------------------------------------------
  720.    qscrolldown                                                           QWIKC
  721.    ---------------------------------------------------------------------------
  722.    Function       Scrolls a rows-by-columns block down on the current screen
  723.                   and clears the top row of the block.
  724.    Syntax         void qscrolldown( unsigned char row, unsigned char col,
  725.                                     unsigned char rows, unsigned char cols,
  726.                                     int blankattr );
  727.    Remarks        To keep it simple, the block encompasses all affected rows
  728.                   including the row to be cleared.  The upper left corner of
  729.                   the block starts at (row,col) and the block size is rows by
  730.                   cols.  The bottom row will be scrolled out and lost while
  731.                   the top row will be cleared with the attribute of blankattr
  732.                   (SAMEATTR is permitted).  Note that you can even change 1
  733.                   row and/or 1 column.  The cursor is not moved, but is ready
  734.                   to be moved with gotoeos.  The cpuid lets the routine choose
  735.                   the best speed.
  736.    Return value   None.
  737.    Screens        All video pages and virtual screens.
  738.    EOS            Updated to first cleared column of the cleared row.
  739.    Restrictions   Stay within the screen limits.
  740.    See also       qscrollup, gotoeos
  741.    Example        To scroll down the entire screen and clear the top row with
  742.                   light cyan on blue:
  743.  
  744.                     qscrolldown( 1,1, crt_rows, crt_cols, LIGHTCYAN+BLUE_BG );
  745.  
  746.    ---------------------------------------------------------------------------
  747.    qscrollup                                                             QWIKC
  748.    ---------------------------------------------------------------------------
  749.    Function       Scrolls a rows-by-columns block up on the current screen and
  750.                   clears the bottom row of the block.
  751.    Syntax         void qscrollup( unsigned char row, unsigned char col,
  752.                                   unsigned char rows, unsigned char cols,
  753.                                   int blankattr );
  754.    Remarks        To keep it simple, the block encompasses all affected rows
  755.                   including the row to be cleared.  The upper left corner of
  756.                   the block starts at (row,col) and the block size is rows by
  757.                   cols.  The first row will be scrolled out and lost while the
  758.                   last row will be cleared with the attribute of blankattr
  759.                   (SAMEATTR is permitted).  Note that you can even change 1
  760.                   row and/or 1 column.  The cursor is not moved, but is ready
  761.                   to be moved with gotoeos.  The cpuid lets the routine choose
  762.                   the best speed.
  763.    Return value   None.
  764.    Screens        All video pages and virtual screens.
  765.    EOS            Updated to first cleared column of the cleared row.
  766.    Restrictions   Stay within the screen limits.
  767.    See also       qscrolldown, gotoeos
  768.    Example        To scroll up the entire screen and clear the last row with
  769.                   light cyan on blue:
  770.  
  771.                     qscrollup( 1, 1, crt_rows, crt_cols, LIGHTCYAN+BLUE_BG );
  772.  
  773.  
  774.  
  775.  
  776.                                        13
  777.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  778.  
  779.  
  780.    ---------------------------------------------------------------------------
  781.    qscrtovscr                                                            QWIKC
  782.    ---------------------------------------------------------------------------
  783.    Function       Copies a rows-by-columns block on the current screen to
  784.                   another location on a virtual screen.
  785.    Syntax         void qscrtovscr( unsigned char row, unsigned char col,
  786.                                    unsigned char rows, unsigned char cols,
  787.                                    unsigned char vrow, unsigned char vcol,
  788.                                    unsigned char vwidth, void far *vscrptr );
  789.    Remarks        row, col, rows, and cols locates the block on the current
  790.                   screen (scr) as specified by qscr.  This block will be
  791.                   copied to the virtual screen (vscr) at the location of vrow
  792.                   and vcol.  But since vscr may have a different column width
  793.                   than scr, vwidth sets the width.  vscrptr is the base ad-
  794.                   dress of the virtual screen.  By changing qscr, you can even
  795.                   copy blocks from one virtual screen to another!  Only the
  796.                   scr side checks for possible snow.
  797.    Return value   None.
  798.    Screens        All video pages and virtual screens.
  799.    EOS            Unaltered.
  800.    Restrictions   Stay within the screen limits.  Not intended for copying
  801.                   between video pages (esp. CGA).
  802.    See also       qvscrtoscr
  803.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  804.                   virtual screen at (3,2) and look at the result on the CRT:
  805.  
  806.      #include <stdio.h>
  807.      #include <conio.h>
  808.      #include "qwikc21.h"
  809.  
  810.      #define vscrrows 20
  811.      #define vscrcols 60
  812.  
  813.      /* Storage size in bytes required is: rows * cols << 1 */
  814.      int vscr[vscrrows][vscrcols];     /* 20 x 60 virtual screen */
  815.      vscr_t crt,myvscr;
  816.  
  817.      main() {
  818.          qinit();
  819.  
  820.          /* create specs for virtual screen */
  821.          myvscr.vrows=vscrrows;
  822.          myvscr.vcols=vscrcols;
  823.          myvscr.vsize=sizeof(vscr);
  824.          myvscr.vsnow=0;                /* qwikest when 0 */
  825.          myvscr.veosofs=0;
  826.          myvscr.vscrptr=𝓋
  827.  
  828.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  829.          crt=qscr;                                        /* Save CRT specs */
  830.          qscr=myvscr;                                  /* Set virtual specs */
  831.          qfill(1, 1, vscrrows, vscrcols, BLACK+BROWN_BG, '?'); /* Fill vscr */
  832.          qscr=crt;                                     /* Restore CRT specs */
  833.          qscrtovscr( 5, 10, 12, 40, 3, 2, vscrcols, vscr );   /* Copy block */
  834.          qstoretoscr( 1, 1, vscrrows, vscrcols, vscr );      /* Take a look */
  835.  
  836.  
  837.                                        14
  838.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  839.  
  840.  
  841.          getch();
  842.  
  843.          return;
  844.      }
  845.  
  846.    ---------------------------------------------------------------------------
  847.    qstoretomem                                                           QWIKC
  848.    ---------------------------------------------------------------------------
  849.    Function       Saves a rows-by-columns block from the current screen to
  850.                   memory.
  851.    Syntax         void qstoretomem( unsigned char row, unsigned char col,
  852.                                     unsigned char rows, unsigned char cols,
  853.                                     void far *dest );
  854.    Remarks        row, col, rows, and cols locates the block on the current
  855.                   screen as specified by qscr.  This block will be copied to
  856.                   dest, the destination, as one contiguous array.  By changing
  857.                   qscr, you can even save blocks from virtual screens!  Be
  858.                   sure to set qsnow to false for the fastest speed on virtual
  859.                   screens.
  860.    Return value   None.
  861.    Screens        All video pages and virtual screens.
  862.    EOS            Unaltered.
  863.    Restrictions   Stay within the screen limits.  Not intended for copying
  864.                   between video pages (esp. CGA).
  865.    See also       qstoretoscr
  866.    Example        Save a 12x40 block from the CRT screen at (5,10), clear the
  867.                   screen, and restore the block:
  868.  
  869.      #include <stdio.h>
  870.      #include <conio.h>
  871.      #include "qwikc21.h"
  872.  
  873.      #define memrows 12
  874.      #define memcols 40
  875.  
  876.      /* Storage size in bytes required is: rows * cols >> 1 */
  877.      int block[memrows][memcols];    /* 12 x 40 block */
  878.  
  879.      main() {
  880.          qinit();
  881.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*'); /* Fill CRT */
  882.          qstoretomem( 5, 10, memrows, memcols, block );      /* Save block */
  883.          qfill(1,1, crt_rows, crt_cols, YELLOW+BLACK_BG,' '); /* Clear CRT */
  884.          qstoretoscr( 5, 10, memrows, memcols, block );     /* Take a look */
  885.          getch();
  886.  
  887.          return;
  888.      }
  889.  
  890.    ---------------------------------------------------------------------------
  891.    qstoretoscr                                                           QWIKC
  892.    ---------------------------------------------------------------------------
  893.    Function       Writes a rows-by-columns block to the current screen from
  894.                   memory.
  895.    Syntax         void qstoretoscr( unsigned char row, unsigned char col,
  896.  
  897.  
  898.                                        15
  899.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  900.  
  901.  
  902.                                     unsigned char rows, unsigned char cols,
  903.                                     void far *source );
  904.    Remarks        row and col locates the upper left corner of the block on
  905.                   the current screen as specified by qscr.  A block will be
  906.                   written from source, which is one contiguous array, and
  907.                   placed on the screen as a rows-by-cols block.  By changing
  908.                   qscr, you can even place blocks to virtual screens!  Be sure
  909.                   to set qsnow to 0 for the fastest speed on virtual screens.
  910.    Return value   None.
  911.    Screens        All video pages and virtual screens.
  912.    EOS            Unaltered.
  913.    Restrictions   Stay within the screen limits.  Not intended for copying
  914.                   between video pages (esp. CGA).
  915.    See also       qstoretomem
  916.    Example        Save a 12x40 block from the CRT screen at (5,10) in the
  917.                   heap, clear the screen, and restore the block:
  918.  
  919.      #include <stdio.h>
  920.      #include <conio.h>
  921.      #include <stdlib.h>
  922.      #include "qwikc21.h"
  923.  
  924.      #define memrows 12
  925.      #define memcols 40
  926.  
  927.      /* Storage size in bytes required is: rows * cols << 1 */
  928.      int *block;
  929.  
  930.      main() {
  931.          qinit();
  932.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  933.          block=malloc(memrows * memcols << 1);              /* Reserve heap */
  934.          qstoretomem( 5, 10, memrows, memcols, block );       /* Save Block */
  935.          qfill(1,1, crt_rows, crt_cols, YELLOW+BLACK_BG, ' '); /* Clear CRT */
  936.          qstoretoscr( 5, 10, memrows, memcols, block );      /* Take a look */
  937.          free(block);                                          /* Free heap */
  938.          getch();
  939.          return;
  940.      }
  941.  
  942.    ---------------------------------------------------------------------------
  943.    qviewpage                                                             QWIKC
  944.    ---------------------------------------------------------------------------
  945.    Function       Changes the video page to be viewed on the CRT.
  946.    Syntax         void qviewpage( char pagenum );
  947.    Remarks        Standard C routines are dedicated only to video page 0.
  948.                   However, most video cards, except MDA and some 3270 PC, have
  949.                   more than one video page.  This procedure enables you to
  950.                   view those pages.  The number of video pages available is
  951.                   detected by qinit and saved in maxpage.  pagenum is 0-based
  952.                   and the routine will only view other pages when pagenum <=
  953.                   maxpage.  The macro videopage is used to get/set the
  954.                   currently viewed page.
  955.    Return value   None.
  956.    Screens        All video pages.
  957.  
  958.  
  959.                                        16
  960.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  961.  
  962.  
  963.    EOS            Unaltered.
  964.    See also       qwritepage, QWIKC21D.DOC, QINITEST.C
  965.  
  966.    ---------------------------------------------------------------------------
  967.    qvscrtoscr                                                            QWIKC
  968.    ---------------------------------------------------------------------------
  969.    Function       Copies a rows-by-columns block from a virtual screen to
  970.                   another location on the current screen.
  971.    Syntax         void qvscrtoscr( unsigned char row, unsigned char col,
  972.                                    unsigned char rows, unsigned char cols,
  973.                                    unsigned char vrow, unsigned char vcol,
  974.                                    unsigned char vwidth, void far *vscrptr );
  975.    Remarks        row, col, rows, and cols locates the destination on the
  976.                   current screen (scr) as specified by qscr.  A block will be
  977.                   copied from the virtual screen (vscr) at the location of
  978.                   vrow and vcol.  But since vscr may have a different column
  979.                   width than scr, vwidth sets the width.  vscrptr is the base
  980.                   address of the virtual screen.  By changing qscr, you can
  981.                   even copy blocks from one virtual screen to another!  Only
  982.                   the scr side checks for possible snow.
  983.    Return value   None.
  984.    Screens        All video pages and virtual screens.
  985.    EOS            Unaltered.
  986.    Restrictions   Stay within the screen limits.  Not intended for copying
  987.                   between video pages (esp. CGA).
  988.    See also       qscrtovscr
  989.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  990.                   virtual screen at (3,2) and look at the result on the CRT:
  991.  
  992.      #include <stdio.h>
  993.      #include <conio.h>
  994.      #include "qwikc21.h"
  995.  
  996.      #define vscrrows 20
  997.      #define vscrcols 60
  998.  
  999.      /* Storage size in bytes required is: rows * cols << 1 */
  1000.      int vscr[vscrrows][vscrcols];     /* 20 x 60 virtual screen */
  1001.      vscr_t crt,myvscr;
  1002.  
  1003.      main() {
  1004.          qinit();
  1005.  
  1006.          /* create specs for virtual screen */
  1007.          myvscr.vrows=vscrrows;
  1008.          myvscr.vcols=vscrcols;
  1009.          myvscr.vsize=sizeof(vscr);
  1010.          myvscr.vsnow=0;             /* qwikest when 0 */
  1011.          myvscr.veosofs=0;
  1012.          myvscr.vscrptr=𝓋
  1013.  
  1014.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  1015.          crt=qscr;                                        /* Save CRT specs */
  1016.          qscr=myvscr;                                  /* Set virtual specs */
  1017.          qfill(1, 1, vscrrows, vscrcols, BLACK+BROWN_BG, '?'); /* Fill vscr */
  1018.  
  1019.  
  1020.                                        17
  1021.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1022.  
  1023.  
  1024.          qscr=crt;                                     /* Restore CRT specs */
  1025.          qscrtovscr( 5, 10, 12, 40, 3, 2, vscrcols, vscr );   /* Copy Block */
  1026.          qstoretoscr( 1, 1, vscrrows, vscrcols, vscr );      /* Take a look */
  1027.          getch();
  1028.  
  1029.          return;
  1030.      }
  1031.  
  1032.    ---------------------------------------------------------------------------
  1033.    qwrite                                                                QWIKC
  1034.    ---------------------------------------------------------------------------
  1035.    Function       Writes a string to the current screen with an optional
  1036.                   attribute change.
  1037.    Syntax         void qwrite( unsigned char row, unsigned char col,
  1038.                                int attr, char far *astr );
  1039.    Remarks        This routine writes the string astr at (row,col) with the
  1040.                   attribute attr.  If SAMEATTR is used for attr, then the
  1041.                   attribute will remain the same on the screen.
  1042.    Return value   None.
  1043.    Screens        All video pages and virtual screens.
  1044.    EOS            Updated.
  1045.    Restrictions   Stay within the screen limits.
  1046.    See also       qwritec, qwrite_sub, qwriteeos, qwriteeos_sub
  1047.    Example        Write the string "Important" at (2,1) with the attribute of
  1048.                   flashing white on red:
  1049.  
  1050.                     qwrite( 2, 1, BLINK+WHITE+RED_BG, "Important" );
  1051.  
  1052.    ---------------------------------------------------------------------------
  1053.    qwritec                                                               QWIKC
  1054.    ---------------------------------------------------------------------------
  1055.    Function       Writes a string to the current screen with an optional
  1056.                   attribute change and centered between two columns.
  1057.    Syntax         void qwritec( unsigned char row, unsigned char coll,
  1058.                                 unsigned char colr, int attr,
  1059.                                 char far *astr );
  1060.    Remarks        This routine writes the string astr at (row,(coll+colr-
  1061.                   strlen(astr)+1) >> 1) which centers it between the two
  1062.                   columns coll and colr and has the attribute attr.  If
  1063.                   SAMEATTR is used for attr, then the attribute will remain
  1064.                   the same on the screen.
  1065.    Return value   None.
  1066.    Screens        All video pages and virtual screens.
  1067.    EOS            Updated.
  1068.    Restrictions   Stay within the screen limits.
  1069.    See also       qwrite, qwrite_sub, qwriteeos, qwriteeos_sub
  1070.    Example        Write a message centered on the screen in row 15 with black
  1071.                   on green attributes:
  1072.  
  1073.                     qwritec( 15, 1, crt_cols, WHITE+GREENBG, "My message" );
  1074.  
  1075.                   The message will be written in column 36 on an 80 column
  1076.                   screen.
  1077.  
  1078.  
  1079.  
  1080.  
  1081.                                        18
  1082.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1083.  
  1084.  
  1085.    ---------------------------------------------------------------------------
  1086.    qwriteeos                                                             QWIKC
  1087.    ---------------------------------------------------------------------------
  1088.    Function       Writes a string to the current screen with an optional
  1089.                   attribute change starting at the EOS marker.
  1090.    Syntax         void qwriteeos( int attr, char far *astr );
  1091.    Remarks        This routine writes the string astr at the EOS marker with
  1092.                   the attribute attr.  If SAMEATTR is used for attr, then the
  1093.                   attribute will remain the same on the screen.
  1094.    Return value   None.
  1095.    Screens        All video pages and virtual screens.
  1096.    EOS            Updated.
  1097.    Restrictions   Stay within the screen limits.
  1098.    See also       qwrite, qwrite_sub, qwritec, qwriteeos_sub
  1099.    Example        Highlight the number in the following message:
  1100.  
  1101.                     qwrite( 1, 1, WHITE+BLUE_BG, "There are" );
  1102.                     qwriteeos( YELLOW+BLUE_BG, " 5 " );
  1103.                     qwriteeos( WHITE+BLUE_BG, "minutes left." );
  1104.  
  1105.                   which will write "There are 5 minutes left." as white on
  1106.                   blue except "5" will be yellow on blue.
  1107.  
  1108.    ---------------------------------------------------------------------------
  1109.    qwriteeos_sub                                                         QWIKC
  1110.    ---------------------------------------------------------------------------
  1111.    Function       Writes an array (or string) with a specified length to the
  1112.                   current screen with an optional attribute change starting at
  1113.                   the EOS marker.
  1114.    Syntax         void qwriteeos_sub( int attr, int length, char far *astr );
  1115.    Remarks        This routine writes length characters of the string pointed
  1116.                   to by astr at the previously set EOS marker with the
  1117.                   attribute attr.  This enables you to write substrings when
  1118.                   specifying a starting index (astr[i]).  (Other routines like
  1119.                   qwriteeos stop at the null-terminating character.)  Of
  1120.                   course, astr can be any char array or char pointer.  If
  1121.                   SAMEATTR is used for attr, then the attribute will remain
  1122.                   the same on the screen.
  1123.    Return value   None.
  1124.    Screens        All video pages and virtual screens.
  1125.    EOS            Updated.
  1126.    Restrictions   Stay within the screen limits.
  1127.    See also       qwrite_sub, qwritec, qwriteeos,
  1128.    Example        The following code will write "Testing step B"  with the
  1129.                   existing screen attributes:
  1130.  
  1131.                     strcpy( mystr, "Now for step B: Testing out this line." );
  1132.                     qwrite_sub( 1, 5, SAMEATTR, 8, &mystr[16] );
  1133.                     qwriteeos_sub( SAMEATTR, 6, &mystr[8]);
  1134.  
  1135.    ---------------------------------------------------------------------------
  1136.    qwritepage                                                            QWIKC
  1137.    ---------------------------------------------------------------------------
  1138.    Function       Changes the video page on which the QWIKC routines write.
  1139.    Syntax         void qwritepage( char pagenum );
  1140.  
  1141.  
  1142.                                        19
  1143.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1144.  
  1145.  
  1146.    Remarks        Standard C routines are dedicated to only video page 0.
  1147.                   However, most video cards, except MDA and some 3270 PC, have
  1148.                   more than one video page.  This function enables QWIKC
  1149.                   routines to write to those pages by altering qscrofs and
  1150.                   qvideo_page which is the current page on which QWIKC is
  1151.                   writing. The number of video pages available is detected by
  1152.                   qinit() and saved in maxpage.  The routine will only change
  1153.                   pages when pagenum <= maxpage.
  1154.    Return value   None.
  1155.    Screens        All video pages.
  1156.    EOS            Unaltered.
  1157.    See also       qviewpage, QWIKC21.DOC, QINITEST.C
  1158.  
  1159.    ---------------------------------------------------------------------------
  1160.    qwrite_sub                                                            QWIKC
  1161.    ---------------------------------------------------------------------------
  1162.    Function       Writes an array (or string) with a specified length to the
  1163.                   current screen with an optional attribute change.
  1164.    Syntax         void qwrite_sub( unsigned char row, unsigned char col,
  1165.                                    int attr, int length, char far *astr );
  1166.    Remarks        This routine writes length characters of the string astr at
  1167.                   (row,col) with the attribute attr.  This enables you to
  1168.                   write substrings when specifying a starting index (astr[i]).
  1169.                   (Other routines like qwrite stop at the null-terminating
  1170.                   character.)  Of course, astr can be any char array or char
  1171.                   pointer.  If SAMEATTR is used for attr, then the attribute
  1172.                   will remain the same on the screen.
  1173.    Return value   None.
  1174.    Screens        All video pages and virtual screens.
  1175.    EOS            Updated.
  1176.    Restrictions   Stay within the screen limits.
  1177.    See also       qwrite, qwritec, qwriteeos, qwriteeos_sub
  1178.    Example        The following code will write "Testing out this line." with
  1179.                   the existing screen attributes:
  1180.  
  1181.                      strcpy( mystr, "Step B: Testing out this line." );
  1182.                      qwrite_sub( 1, 1, SAMEATTR, 22, &mystr[9] );
  1183.  
  1184.    ---------------------------------------------------------------------------
  1185.    setcursor                                                             QWIKC
  1186.    ---------------------------------------------------------------------------
  1187.    Function       Sets a new cursor mode for the CRT.
  1188.    Syntax         void setcursor( int cursor );
  1189.    Remarks        Using the default cursor variables set by qinit and/or the
  1190.                   cursor macros, a new cursor mode can be set by with any
  1191.                   combination of:
  1192.  
  1193.                     cursor_initial       - detected by qinit at startup
  1194.                     cursor_underline     - set by qinit
  1195.                     cursor_halfblock     - set by qinit
  1196.                     cursor_block         - set by qinit
  1197.                     cursor_off   ($2000) - turns cursor off
  1198.                     cursor_blink ($6000) - erratic blinking (MDA/CGA)
  1199.  
  1200.                   You can simply add them together (logically ORing is best to
  1201.  
  1202.  
  1203.                                        20
  1204.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1205.  
  1206.  
  1207.                   prevent carry errors, but arithmetic addition is fine).
  1208.                   Although a separate cursor location is kept for each video
  1209.                   page, there is only one cursor mode for the CRT screen.
  1210.    Screens        Any video page as viewed.
  1211.    See also       getcursor, modcursor
  1212.    Example 1      Set a half-block cursor with erratic blink:
  1213.  
  1214.                     setcursor( cursor_halfblock+cursor_blink );
  1215.  
  1216.    Example 2      Set the scan lines for a block cursor, but leave it turned
  1217.                   off:
  1218.  
  1219.                     setcursor( cursor_block+cursor_off );
  1220.  
  1221.    Example 3      Restore the cursor mode at start up and be sure it's turned
  1222.                   on:
  1223.  
  1224.                     setcursor( cursor_initial );
  1225.                     modcursor( cursor_on );
  1226.  
  1227.                   or, for those comfortable with bit operations:
  1228.  
  1229.                     setcursor( cursor_initial & !cursor_blink );
  1230.  
  1231.    ---------------------------------------------------------------------------
  1232.    setmultitask                                                          QWIKC
  1233.    ---------------------------------------------------------------------------
  1234.    Function       Set QWIKC variables to write direct to multi-tasking video
  1235.                   buffers (MTVB).
  1236.    Syntax         void setmultitask(void);
  1237.    Remarks        This function alters the following variables if the program
  1238.                   is running under a multi-tasking environment and the user
  1239.                   has chosen to use the faster MTVB.  If there is no multi-
  1240.                   tasking environment or the MTVB is not used (normal direct
  1241.                   screen video), then these variables are unaltered.  If you
  1242.                   use Turbo C's conio routines, be sure to set directvideo to
  1243.                   0 when using the MTVB.
  1244.  
  1245.                     qscrptr     - the segment is altered, but the offset is
  1246.                                   usually 0.
  1247.                     page0seg    - set to match qscrseg to indicate page 0.
  1248.                     qsnow       - set to 0.
  1249.                     inmultask   - 1 if using MTVB, otherwise set to 0.
  1250.  
  1251.    See also       inmultask in VARIABLES section below.
  1252.  
  1253.    ---------------------------------------------------------------------------
  1254.    wherec                                                                QWIKC
  1255.    ---------------------------------------------------------------------------
  1256.    Function       Returns the absolute column of the cursor on the currently
  1257.                   written video page.
  1258.    Syntax         unsigned char wherec(void);
  1259.    Remarks        Operates on the currently written video page.  The upper
  1260.                   left corner of the screen (1,1).
  1261.    Return value   None.
  1262.  
  1263.  
  1264.                                        21
  1265.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1266.  
  1267.  
  1268.    Screens        All video pages only.
  1269.    See also       gotorc, wherer
  1270.  
  1271.    ---------------------------------------------------------------------------
  1272.    wherer                                                                QWIKC
  1273.    ---------------------------------------------------------------------------
  1274.    Function       Returns the absolute row of the cursor on the currently
  1275.                   written video page.
  1276.    Syntax         unsigned char wherer(void);
  1277.    Remarks        Operates on the currently written video page.  The upper
  1278.                   left corner of the screen (1,1).
  1279.    Return value   None.
  1280.    Screens        All video pages only.
  1281.    See also       gotorc, wherec
  1282.    ---------------------------------------------------------------------------
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.                                        22
  1326.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1327.  
  1328.  
  1329.    3.  V A R I A B L E S
  1330.  
  1331.    The variables in QWIKC are initialized according to the the kind of system,
  1332.    display(s), and video adapter(s) that qinit detects.  QWIKC uses them for
  1333.    reference and they may also be used in your own programming to help make
  1334.    decisions.
  1335.  
  1336.  
  1337.    SYSTEM HARDWARE
  1338.  
  1339.    System Hardware Variables - These variables indicate the kind of computer
  1340.    that qinit detected:
  1341.  
  1342.      Variable      Description
  1343.      ------------  -----------------------------------------------------------
  1344.      cpuid         (Type: char) Intel CPU identification code.  cpuid can be
  1345.                    equal to any one of the following four marcos:
  1346.  
  1347.                      cpu8086  - Intel 8086/8088
  1348.                      cpu80186 - Intel 80186/80188
  1349.                      cpu80286 - Intel 80286
  1350.                      cpu80386 - Intel 80386
  1351.  
  1352.      system_id     (Type: char) Code for the IBM computer in use, set by
  1353.                    qinit.  See submodel_id for values.
  1354.  
  1355.      submodel_id   (Type: char) Code for the sub-model of the IBM computer in
  1356.                    use.  This value defaults to 0 the first time qinit is run.
  1357.                    To get a value, execute get_submodel_id.
  1358.  
  1359.                      SysID Submodel SYSTEM
  1360.                      ----- -------- ------------------------------
  1361.                      0xFF    n/a    IBM PC
  1362.                      0xFE    n/a    IBM PC XT
  1363.                      0xFD    n/a    IBM PCjr
  1364.                      0xFC    n/a    IBM PC AT (6 MHz, 01/10/84)
  1365.                              0x00   IBM PC AT (6 MHz, 06/10/85)
  1366.                              0x01   IBM PC AT (8 MHz, 11/15/85)
  1367.                              0x02   IBM PC XT (286)
  1368.                              0x04   IBM PS/2 model 50
  1369.                              0x05   IBM PS/2 model 60
  1370.                      0xFB    0x00   IBM PC XT (256/640)
  1371.                      0xFA    0x00   IBM PS/2 model 30
  1372.                              0x01   IBM PS/2 model 25
  1373.                      0xF9    0x00   IBM PC Convertible
  1374.                      0xF8    0x00   IBM PS/2 model 80 (16 MHz)
  1375.                              0x04   IBM PS/2 model 80 (20 MHz)
  1376.                              0x09   IBM PS/2 model 70 (16 MHz)
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.                                        23
  1387.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1388.  
  1389.  
  1390.    VIDEO HARDWARE
  1391.  
  1392.    Video Hardware Variables - These variables indicate the kind of video
  1393.    card(s) and display(s) that qinit detected:
  1394.  
  1395.      Variable              Description
  1396.      -------------         ---------------------------------------------------
  1397.      active_disp_dev       (Type: char) Code for the Active Display Device.
  1398.                            Using IBM's Display Combination Code (DCC), qinit
  1399.                            detects the video adapter combined with the video
  1400.                            display.  The codes have been set to the following
  1401.                            macros.  Note that monochrome is odd and color is
  1402.                            even:
  1403.  
  1404.                              Macro      Code  Description
  1405.                              ---------- ----- --------------------------------
  1406.                              no_display 0x00  No display
  1407.                              mda_mono   0x01  MDA with 5151 monochrome display
  1408.                              cga_color  0x02  CGA with 5153/4 color display
  1409.                              dcc3       0x03  reserved
  1410.                              ega_color  0x04  EGA with 5153/4 color
  1411.                              ega_mono   0x05  EGA with 5151 monochrome
  1412.                              pgc_color  0x06  PGC with 5175 color
  1413.                              vga_mono   0x07  VGA with analog monochrome
  1414.                              vga_color  0x08  VGA with analog color
  1415.                              dcc9       0x09  reserved
  1416.                              dcc10      0x0A  reserved
  1417.                              mcga_mono  0x0B  MCGA with analog monochrome
  1418.                              mcga_color 0x0C  MCGA with analog color
  1419.                              n/a        0x0D to 0xFE - reserved
  1420.                              unknown    0xFF  unknown device
  1421.  
  1422.      active_disp_dev_3270  (Type: char) Code for the Active Display Device on
  1423.                            the 3270 PC.  Only the 0xFF code corresponds to the
  1424.                            macro "unknown".
  1425.  
  1426.                              Code  Monitor       Adapter
  1427.                              ----  ------------  ---------------------
  1428.                              0x00  5151 or 5272  for 5151 or 5272
  1429.                              0x01  3295          for 3295
  1430.                              0x02  5151 or 5272  for 5151 or 5272 plus
  1431.                                                  XGA graphics
  1432.                              0x03  5279          3270 PC G
  1433.                              0x04  5379 C01      3270 PC GX
  1434.                              0x05  5379 M01      3270 PC GX
  1435.                              0x06  reserved
  1436.                              0x07  reserved
  1437.                              0xFF  Unknown, not a 3270 PC
  1438.  
  1439.      alt_disp_dev          (Type: char) Code for the Alternate Display Device.
  1440.                            This code is detected by qinit for a second (but
  1441.                            inactive) adapter and display, just in case there
  1442.                            are dual monitors.  It uses the same macros as
  1443.                            active_disp_dev listed above.
  1444.  
  1445.  
  1446.  
  1447.                                        24
  1448.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1449.  
  1450.  
  1451.      alt_disp_dev_pcc      (Type: int) Code for the Alternate Display adapter
  1452.                            on the PC Convertible.  In hex, it corresponds to
  1453.                            the model number of the attached device:
  1454.  
  1455.                              Model   Description
  1456.                              ------  --------------------
  1457.                              0x   0  No alternate adapter
  1458.                              0x5140  LCD
  1459.                              0x5153  CGA type
  1460.                              0x5151  Monochrome type
  1461.  
  1462.      cardseg               (Type: int) Video segment address of the video
  1463.                            "card" as detected by qinit.
  1464.  
  1465.      cardsnow              (Type: char) Set to 1 for wait-for-retrace for the
  1466.                            video "card" as detected by qinit.
  1467.  
  1468.      egainfo               (Type: macro) Returns the value at 0x0040:0x0087
  1469.                            which has the following information when the EGA
  1470.                            (or VGA) is present:
  1471.  
  1472.                              Bits  Description
  1473.                              ----  -------------------------------------------
  1474.                              7     (0) Clear, (1) Keep video data after
  1475.                                    video mode set
  1476.                              6,5   (00) 64k, (01), 128k, (10) 192k, (11) 256k,
  1477.                                    memory on the card.
  1478.                              4     Reserved
  1479.                              3     (0) EGA active, (1) EGA not active
  1480.                              2     (0) Disable,    (1) Enable wait-for-display
  1481.                              1     (0) CD/ECD      (1) MD attached
  1482.                              0     (0) Active,     (1) Inactive CD emulation
  1483.  
  1484.      egaswitches           (Type: macro) Using the value this macro points to,
  1485.                            you can determine the monitor connected to the EGA,
  1486.                            the alternate video system, and the start up
  1487.                            default.  The byte is a copy of how the dip
  1488.                            switches are set on the card where on=0 and off=1.
  1489.                            The primary is the default.  When the ECD is set
  1490.                            for 640x200, it is emulating the CD including the
  1491.                            cursor mode.  qinit directly tests for the
  1492.                            alternate device rather than assuming it.
  1493.  
  1494.                              Switch    Primary             Secondary
  1495.                              --------  ------------------- -------------------
  1496.                              0000 = 0  MDA + MD            EGA + CD - 40x25
  1497.                              0001 = 1  MDA + MD            EGA + CD - 80x25
  1498.                              0010 = 2  MDA + MD            EGA + ECD (640x200)
  1499.                              0011 = 3  MDA + MD            EGA + ECD (640x350)
  1500.                              0100 = 4  CGA + CD - 40x25    EGA + MD
  1501.                              0101 = 5  CGA + CD - 80x25    EGA + MD
  1502.                              0110 = 6  EGA + CD - 40x25    MDA + MD
  1503.                              0111 = 7  EGA + CD - 80x25    MDA + MD
  1504.                              1000 = 8  EGA + ECD (640x200) MDA + MD
  1505.                              1001 = 9  EGA + ECD (640x350) MDA + MD
  1506.  
  1507.  
  1508.                                        25
  1509.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1510.  
  1511.  
  1512.                              1010 =10  EGA + MD            CGA + CD - 40x25
  1513.                              1011 =11  EGA + MD            CGA + CD - 80x25
  1514.  
  1515.      have_3270             (Type: char) If qinit detects 3270 PC equipment or
  1516.                            software, this variable is set to 1.  In addition,
  1517.                            the active_disp_dev is either mda_mono or
  1518.                            cga_color.  Note that there may or may not be
  1519.                            graphics capability in either case; qinit is not
  1520.                            meant to detect graphics.  See active_disp_dev_3270
  1521.                            for codes.
  1522.  
  1523.      have_ps2              (Type: char) qinit sets have_ps2 to true if the DCC
  1524.                            is supported.  This means that the program has
  1525.                            detected a PS/2 video card whether it is integrated
  1526.                            on a model 30, a PS/2 Display Adapter installed on
  1527.                            an IBM XT, or the like.  It also means that either
  1528.                            MCGA or VGA is present, but not necessarily active.
  1529.                            To know which, just check the DCC.
  1530.  
  1531.      herc_model            (Type: char) Model of the attached Hercules video
  1532.                            card.  If no card is detected, then
  1533.                            herc_model=no_herc.
  1534.  
  1535.                              Macro         Code  Description
  1536.                              ------------  ----  ---------------------
  1537.                              no_herc        0    No Hercules card
  1538.                              hgc_mono       1    HGC
  1539.                              hgc_plus       2    HGC Plus
  1540.                              herc_incolor   3    Hercules InColor Card
  1541.  
  1542.      maxpage               (Type: char) Maximum possible 0-based video page
  1543.                            number.  See TABLE 1 in QWIKC21.DOC for ranges.
  1544.  
  1545.  
  1546.    VIDEO SOFTWARE
  1547.  
  1548.    Video Software Variables - These variables indicate the current video mode
  1549.    and screen characteristics to which QWIK is writing and what is being
  1550.    viewed on the CRT.  There are several pointer macros listed that duplicate
  1551.    some of the global variables, i.e., crtcolumns and crt_cols.  It is
  1552.    preferable to use the global ones, where the pointer macros are only needed
  1553.    for handling exceptions.
  1554.  
  1555.      Variable      Description
  1556.      ------------  -----------------------------------------------------------
  1557.      crt_cols      (Type: macro) Defined as qscr.vcols (current virtual/actual
  1558.                    screen columns).  qscr.vcols is initialized by
  1559.                    qinit/qreinit to the currently viewed number of CRT columns
  1560.                    for any card or video mode.
  1561.  
  1562.      crtcolumns    (Type: macro) Defined to directly access the 1-based
  1563.                    currently viewed number of CRT columns for any card or
  1564.                    video mode.  This pseudo-variable may be assigned a value,
  1565.                    as well as evaluated.
  1566.  
  1567.  
  1568.  
  1569.                                        26
  1570.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1571.  
  1572.  
  1573.      crt_rows      (Type: macro) Defined as qscr.vrows (current virtual/actual
  1574.                    screen rows).  qscr.vrows is initialized by qinit/qreinit
  1575.                    to the currently viewed number of CRT rows for any card or
  1576.                    video mode.
  1577.  
  1578.      egafontsize   (Type: macro) Defined to directly access the 1-based number
  1579.                    of horizontal scan lines per character for EGA/MCGA/VGA.
  1580.                    This pseudo-variable may be assigned a value, as well as
  1581.                    evaluated.
  1582.  
  1583.      egarows       (Type: macro) Defined to directly access the 0-based number
  1584.                    of rows on the current screen for EGA, MCGA, and VGA.  This
  1585.                    number is used to set crt_rows, which is done by qinit.
  1586.                    egarows may be assigned a value as well as evaluated.
  1587.  
  1588.      inmultitask   (Type: char)  This flag indicates if MTVB is being used
  1589.                    for the screen in lieu of the normal screen.  It defaults
  1590.                    to 0 and is possibly altered with setmultitask if the
  1591.                    multitasking software has be instructed to expect writing
  1592.                    direct to the MTVB (not direct screen).
  1593.  
  1594.      page0seg      (Type: unsigned int) Segment for the base page, page 0.  In
  1595.                    multitasking environments, change this value to its video
  1596.                    display buffer.  qscrseg and qscrofs should also be set.
  1597.  
  1598.      qeosofs       (Type: macro) Defined as vscr.veosofs, the 0-based offset
  1599.                    where q*eos functions will write.
  1600.  
  1601.      qscrseg       (Type: macro) Acesses the segment of vscr.vscrptr, the
  1602.                    segment for QWIKC writing which is altered when changing
  1603.                    pages.  qscrseg=page0seg on page 0.
  1604.  
  1605.      qscrofs       (Type: unsigned int) Offset for QWIKC writing needed for
  1606.                    virtual screens.  The usual value is 0 for the video pages.
  1607.  
  1608.      qscrptr       Combines qscrseg and qscrofs
  1609.  
  1610.      qscr          (Type: vscr_t) Structure containing essential variables for
  1611.                    QWIKC screen writing.  This structure has several macros
  1612.                    that access its members:
  1613.  
  1614.                      Macro      qscr member
  1615.                      --------   -----------
  1616.                      crt_rows   vrows
  1617.                      crt_cols   vcols
  1618.                      crt_size   vsize
  1619.                      qsnow      vsnow
  1620.                      qeosofs    veosofs
  1621.                      qscrptr    vscrptr
  1622.  
  1623.                    These macros are also described in this section.  Since
  1624.                    they are part of a structure, qscr's members can be swapped
  1625.                    easily when writing to virtual screens.  See the example
  1626.                    under qvscrtoscr.
  1627.  
  1628.  
  1629.  
  1630.                                        27
  1631.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1632.  
  1633.  
  1634.      qsnow         (Type: macro) Set to 1 for wait-for-retrace (snow) while
  1635.                    QWIKC is writing.
  1636.  
  1637.      qvideo_page   (Type: char) Video page to which QWIKC is writing which is
  1638.                    set by qwritepage.  It is initially 0.
  1639.  
  1640.      qvideo_mode   (Type: char) Video mode detected by qinit.
  1641.  
  1642.      scroll_attr   (Type: int) The attribute used to clear the blank row when
  1643.                    qeosln is used.
  1644.  
  1645.      videomode     (Type: macro) Defined to directly access the current video
  1646.                    mode in low memory.  This pseudo-variable may be assigned
  1647.                    a value, as well as evaluated.
  1648.  
  1649.      videopage     (Type: macro) Defined to directly access the currently
  1650.                    viewed video page in low memory.  This pseudo-variable may
  1651.                    be assigned a value, as well as evaluated.
  1652.  
  1653.      vscr_t        The typedef for the structure of essential variables for
  1654.                    QWIKC screen writing to virtual screens.  This enables an
  1655.                    easy exchange of data between the CRT and virtual screens.
  1656.  
  1657.  
  1658.    VIDEO CURSOR
  1659.  
  1660.    Video Cursor Variables and Macros - These variables and constants give you
  1661.    easy tools to combine with bit operations to display your choice of cursor
  1662.    modes.  The variables default with the cursor on and no skew which are
  1663.    detected and set by qinit at startup:
  1664.  
  1665.      Variable           Description
  1666.      -----------------  --------------------------------------------------------
  1667.      cursor_block       (Type: unsigned int) Cursor mode value for the full
  1668.                         cell.
  1669.  
  1670.      cursor_half_block  (Type: unsigned int) Cursor mode value for a half
  1671.                         block usually used for insert editing.
  1672.  
  1673.      cursor_initial     (Type: unsigned int) Cursor mode value detected at
  1674.                         startup.
  1675.  
  1676.      cursor_underline   (Type: unsigned int) Cursor mode value for the normal
  1677.                         underline.
  1678.  
  1679.  
  1680.      Macro         Value   Description
  1681.      ------------  ------  ---------------------------------------------------
  1682.      cursor_blink  0x6000  Used to alter bits 13/14 to create erratic blinking
  1683.                            on MDA/CGA cards.  (EGA/VGA cards turn the cursor
  1684.                            off.)
  1685.  
  1686.      cursor_off    0x2000  Used to alter bits 13/14 or can be used by itself
  1687.                            to turn the cursor off.
  1688.  
  1689.  
  1690.  
  1691.                                        28
  1692.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1693.  
  1694.  
  1695.      cursor_on     0x0000  Used to alter bits 13/14 in modcursor to turn the
  1696.                            cursor back on.
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.                                        29
  1753.  
  1754. 
  1755.