home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR2 / CPX220.ZIP / CPX.DOC next >
Text File  |  1993-10-27  |  48KB  |  996 lines

  1.         ╒═══════════════════════════════════════════╕
  2.         │                    CPx                    │
  3.         │              Revision 2.20.0              │
  4.         │                                           │
  5.         │ Copyright (C) 1989-1993 FM de Monasterio  │
  6.         │            All Rights Reserved            │
  7.         │             Licensed Material             │
  8.         ╘═══════════════════════════════════════════╛
  9.  
  10.    CONTENTS
  11.             1.  SUMMARY
  12.             2.  REGISTRATION
  13.             3.  GENERAL INFORMATION
  14.             4.  INSTALLATION & USAGE
  15.             5.  INSTALLATION IN UPPER MEMORY
  16.             6.  TECHNICAL INFORMATION
  17.             7.  OPERATION REQUIREMENTS & CONFLICTS
  18.             8.  COPYRIGHT & LICENSE INFORMATION
  19.             9.  DISTRIBUTION & WARRANTY
  20.  
  21.    1.  SUMMARY
  22.  
  23.    The blinking cursor displayed in text modes is directly controlled by the
  24.    video hardware, and there is no provision to allow software to modify the
  25.    blinking rate.
  26.  
  27.    CPx is a memory-resident program for controlling the shape of the cursor,
  28.    including the display of a non-blinking cursor. The user can specify: (i)
  29.    the shape of the blinking cursor, from thin underline to full block, (ii)
  30.    whether such cursor is to be displayed, and (iii) whether a non-blinking,
  31.    full-block, see-through cursor is to be displayed.  The blinking and non-
  32.    blinking cursors can be displayed independently or simultaneously.
  33.  
  34.    The resident can be turned on and off with a user-specifiable hotkey, and
  35.    changed on the fly by executing the program with new switches simply from
  36.    the DOS prompt (or a batch file) or via the DOS enviroment.  The resident
  37.    becomes inactive in BIOS or VESA graphics modes; it also becomes inactive
  38.    if WINDOWS 3 (Standard or 386-Enhanced mode) were started and then active
  39.    again once DOS operations are resumed.
  40.  
  41.    The operation of CPx can be made quiescent via switch QU, i.e. it remains
  42.    resident but not active, until its reactivation by a subsequent execution
  43.    of the program or removed from memory.
  44.  
  45.    The resident occupies about 0.5 KB of memory. The program can load itself
  46.    directly in the upper memory (UMB), either via an extended memory manager
  47.    supporting XMS 2+ services or via MS-DOS 5+ (if UMB-linked); the user can
  48.    specify a minimum UMB address to select or avoid a given UMB region.  CPx
  49.    program needs MS-DOS version 2 or later (or compatible operating system),
  50.    and an IBM-compatible SVGA/VGA, EGA, MCGA/CGA, or MDA adapter or HERCULES
  51.    cards.
  52.  
  53.    For a description of what is new with the current version, see CPX.NEW.
  54.  
  55.  
  56.  
  57.    2.  REGISTRATION
  58.  
  59.    This software is user-supported; the present release, although lacking the
  60.    options marked by asterisks, is a fully usable program.  You may test this
  61.    release for (in)compatibilities with your system, but after the testing is
  62.    completed you are requested to order a registered copy of the full release
  63.    of the software from the address at the end of this documentation.
  64.  
  65.    If you would rather use this unregistered copy, consider making a donation
  66.    to the Children's Hospital of Washington DC, for indigent children in need
  67.    of medical care.  Every year in the USA, infant mortality claims the lives
  68.    of tens of thousands of children before their first year of life, and most
  69.    of them come from families below poverty level...  Please send to the same
  70.    address a check payable to the "PATIENT CARE FUND, CHILDREN'S HOSPITAL" on
  71.    the obverse, and marked "For Deposit Only" on the reverse.  Donations will
  72.    be sent to Children's Hospital.  Please identify the program for which you
  73.    are making the donation.
  74.  
  75.     ------------------------------------------------------------------
  76.     CPX.REG contains a form needed to register or upgrade the Software
  77.     ------------------------------------------------------------------
  78.  
  79.    See the final part of this documentation for information on the Licensing,
  80.    Distribution, and Limited Warranty of this software.
  81.  
  82.  
  83.  
  84.    3.  GENERAL INFORMATION
  85.  
  86.    A terminate-and-stay resident is a program that, after it execution ends,
  87.    remains in memory until the machine is rebooted or it removes itself from
  88.    memory (if the program has such capability).
  89.  
  90.    CPx is a resident that permits control of the shape and visibility of the
  91.    blinking cursor displayed during text modes, and even its substitution by
  92.    a non-blinking, see-through, full-block cursor.  The cursor customization
  93.    is maintained in all (BIOS and standard VESA) text video modes and can be
  94.    toggled on or off by pressing a hotkey combination.
  95.  
  96.    The resident becomes inactive in graphics modes; it also becomes inactive
  97.    if WINDOWS (Standard or 386-Enhanced mode) were started, and active again
  98.    once DOS operations are resumed.
  99.  
  100.    This program can be executed repeatedly to modify its parameters, without
  101.    resulting in multiple copies to memory; its resident uses about 0.5 KB of
  102.    memory. The program command switches can be selected from the DOS command
  103.    line or with the DOS environment variable 'CPX=' (see below).
  104.  
  105.  
  106.    SHAPE/VISIBILITY MODULATION (HARDWARE CURSOR)
  107.  
  108.    The CRT controller (CRTC) is a programmable hardware component of the IBM
  109.    PC and PS/2 video systems.  The Motorola 6845 chip is present in MDA, CGA,
  110.    and HGC cards, and a 6845-compatible CRTC is a custom LSI chip in the EGA,
  111.    part of the Memory Controller Gate Array on the MCGA, or part of the Video
  112.    Graphics Array on the VGA.  One CRTC function is to implement the type and
  113.    position of the hardware cursor in text (i.e., alphanumeric) video modes.
  114.  
  115.    Cursor shape can be set either via the ROM BIOS, through interrupt 10h, or
  116.    via direct commands to the CRTC.  The later approach, which is much faster
  117.    than the former, is used by CPx due to speed requirements since the cursor
  118.    shape has to be enforced between the system timer ticks, which occur every
  119.    55 milliseconds.  Direct CRTC access requires full hardware compatibility.
  120.    Program execution is aborted if a test for (Motorola 6845-compatible) CRTC
  121.    compatibility fails or if the video adapter cannot be identified.
  122.  
  123.    The type of the hardware cursor is specified by loading two CRTC registers
  124.    with values corresponding to the top and bottom lines of the cursor within
  125.    the current character matrix (which hereafter are referred to as 'top' and
  126.    'end' line),  Due to video hardware differences, the rules that govern the
  127.    the resulting shape vary with the adapter card.  In the following examples
  128.    these variations are illustrated for different top and end lines, assuming
  129.    for simplicity an 8-line height (8x8) character matrix from a to h:
  130.  
  131.  
  132.               CGA     EGA     VGA                  CGA     EGA     VGA
  133.      T=g   ┌───────┬───────┬───────┐       T=f   ┌───────┬───────┬───────┐
  134.      E=g  a│·······│·······│·······│       E=d  a│·······│▒▒▒▒▒▒▒│·······│
  135.           b│·······│·······│·······│            b│·······│▒▒▒▒▒▒▒│·······│
  136.           c│·······│·······│·······│            c│·······│▒▒▒▒▒▒▒│·······│
  137.           d│·······│·······│·······│            d│▒▒▒▒▒▒▒│·······│·······│
  138.           e│·······│·······│·······│            e│▒▒▒▒▒▒▒│·······│·······│
  139.           f│·······│·······│·······│            f│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│·······│
  140.           g│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│            g│·······│▒▒▒▒▒▒▒│·······│
  141.           h│·······│·······│·······│            h│·······│▒▒▒▒▒▒▒│·······│
  142.            └───────┴───────┴───────┘             └───────┴───────┴───────┘
  143.  
  144.  
  145.               CGA     EGA     VGA                  CGA     EGA     VGA
  146.      T=e   ┌───────┬───────┬───────┐       T=d   ┌───────┬───────┬───────┐
  147.      E=h  a│·······│·······│·······│       E=i  a│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│·······│
  148.           b│·······│·······│·······│            b│·······│▒▒▒▒▒▒▒│·······│
  149.           c│·······│·······│·······│            c│·······│▒▒▒▒▒▒▒│·······│
  150.           d│·······│·······│·······│            d│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│
  151.           e│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│            e│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│
  152.           f│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│            f│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│
  153.           g│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│            g│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│
  154.           h│▒▒▒▒▒▒▒│·······│▒▒▒▒▒▒▒│            h│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│▒▒▒▒▒▒▒│
  155.            └───────┴───────┴───────┘             └───────┴───────┴───────┘
  156.  
  157.  
  158.    Because of these differences, and as it is done in other cursor utilities,
  159.    the cursor top and end line can be read (and set) from a coordinate matrix
  160.    display in the Syntax/Status panel brought by switch /? (see below).
  161.  
  162.    By selecting specific top and end line values, it is also possible to make
  163.    the cursor invisible in most video adapters. Although cursor visibility is
  164.    only a special case of shape modulation, it is controlled independently of
  165.    other modulated shapes.
  166.  
  167.  
  168.    NON-BLINKING, FULL-BLOCK, SEE-THROUGH CURSOR (PSEUDOCURSOR)
  169.  
  170.    The blinking of the cursor cannot be eliminated by video BIOS calls nor by
  171.    direct CRTC commands. CPx provides a non-blinking, full-block pseudocursor
  172.    to replace the hardware cursor (switch BL). This steady pseudocursor works
  173.    smoothly either at the DOS prompt or within a text-mode application (e.g.,
  174.    word processors) in a manner similar to the standard mouse pointer in text
  175.    modes.
  176.  
  177.    The character under the pseudocursor appears with complementary foreground
  178.    /background attributes.  This allows for its easy visualization especially
  179.    when word-processor codes are color coded, except in those cases when both
  180.    the foreground and the background have the same color (i.e., intense green
  181.    text on a darker green background) or the user suffers from a color vision
  182.    deficit.  In such a case, a very thin blinking cursor can be combined with
  183.    the pseudocursor in a nonobtrusive manner to permit visualization.
  184.  
  185.  
  186.    CPU VERSIONS
  187.  
  188.    The program is written in assembly language; each version consists of four
  189.    processor-type releases (086, 268, 386 and 486) in which the code has been
  190.    optimized for the CPU types of the 80x86 processor family.  This is needed
  191.    since the x86 processors differ markedly in instruction execution time and
  192.    the incorporation of a memory cache in some CPU types affects such time by
  193.    influencing the speed of instruction fetching and of memory access.  A 486
  194.    release should be used with a 586 CPU (Pentium) to minimize degradation of
  195.    performance vis-á-vis code alignment.
  196.  
  197.    In addition to standard (086) assembly language instructions, the 286, 386
  198.    and 486 releases of the program also use 286-, 386- or 486-specific opcode
  199.    instructions in "real" mode (which is the native mode for 086 processors).
  200.    The type and degree of code optimization vary with the CPU type, and yield
  201.    relatively small differences in the resident size, which is less than 1000
  202.    bytes.
  203.  
  204.  
  205.    OPERATION REQUIREMENTS
  206.  
  207.    The program requires MS-DOS version 2 or later (or compatible DOS system)
  208.    and an IBM-compatible SVGA, VGA, EGA, MCGA/CGA, or MDA video adapter or a
  209.    HERCULES video card.  With old CGA adapters, CPx produces a little bit of
  210.    video interference ('snow').
  211.  
  212.  
  213.    SAFETY MEASURES
  214.  
  215.    Each time it is executed, the program verifies its code integrity through
  216.    a number of cyclic redundancy checks (CRCs). Program execution is aborted
  217.    if any check were to fail as such a failure indicates code corruption and
  218.    the program should not be used for your own protection.
  219.  
  220.    The executable program is distributed as a fully encrypted and compressed
  221.    EXE-type file in order to reduce the possibility of code tampering.
  222.  
  223.    NOTE    --------------------------------------------------------------------
  224.     Because both encryption and compression change the code sequences to
  225.     different values, it cannot be excluded that these processess might,
  226.     by chance, yield an encrypted data sequence which triggers a warning
  227.     from antiviral utilities that merely check disk-stored files against
  228.     a list of code 'signatures' or instructions. Though all distribution
  229.     diskettes are scanned with one such utility to avoid the possibility
  230.         of spurious warnings, the changing nature of these 'signature' lists
  231.         makes this exclusion difficult.
  232.  
  233.     If using these utilities, check the registered distribution diskette
  234.     before installing the programs in your hard disk, and please contact
  235.     the vendor (see below) if a spurious warning were triggered.
  236.     --------------------------------------------------------------------
  237.  
  238.  
  239.  
  240.    4.  INSTALLATION & USAGE
  241.  
  242.    In the descriptions below, {} enclose context variables, e.g., the number
  243.    {n}, whereas <> enclose alphanumeric characters or keys, e.g., the letter
  244.    <n>.
  245.  
  246.    The enclosed utility INSTALL.EXE may be used to copy the program files to
  247.    a user-defined drive and directory, and--if so desired--to add statements
  248.    to the file AUTOEXEC.BAT so that the program is loaded automatically upon
  249.    booting and to append the user-defined directory to the PATH statement.
  250.  
  251.  
  252.    MANUAL INSTALLATION
  253.  
  254.    Alternatively, to install the program manually, add the command
  255.  
  256.         {path}CPX [/SWITCH1 ... /SWITCHn] [;comments]
  257.  
  258.    to the AUTOEXEC.BAT file, if you wish to have the program installed after
  259.    booting the system, or simply enter this command from the DOS prompt when
  260.    you want to use the program.  If given, {path} must specify the drive and
  261.    subdirectory for the file CPX.EXE.
  262.  
  263.    Square brackets enclose optional command arguments; [/SWITCH1.../SWITCHn]
  264.    are program command switches, whereas [;comments] are comments that might
  265.    be useful to clarify batch file usage.
  266.  
  267.    If executed with a null argument (i.e., switches were not specified), the
  268.    program searches the DOS environment block for a variable with the format
  269.    CPX=/SWITCH1 ... /SWITCHn, to use these switches as program commands (see
  270.    switch /EV below).
  271.  
  272.    If the execution command has null arguments, an environment variable does
  273.    not exist, and the resident is not yet installed, then the default (i.e.,
  274.    preselected) configuration is used for the installation.  If the resident
  275.    is already installed, and an environment variable does not exist, a null-
  276.    argument command has no other effects than updating the resident in terms
  277.    of the video system.  The default cases of the various switches are given
  278.    below.
  279.  
  280.    Once installed, the resident can be modified at any time by executing the
  281.    program with new parameters.  If other memory-resident programs were also
  282.    used, make sure all residents installed are 'well behaved' and pass along
  283.    the necessary interrupt data (see 'OPERATION REQUIREMENTS & CONFLICTS').
  284.  
  285.  
  286.    COMMAND SWITCHES
  287.  
  288.    These switches allow for the modification of the default (preselected) or
  289.    of an already selected resident configuration, or the execution of one of
  290.    the non-resident services provided by the program (e.g. display of a Help
  291.    panel, adjustment of display brightness, etc).
  292.  
  293.    The switches can be specified in any order, and they must be separated by
  294.    a space, tab, comma, or slash; a dash preceded by space may also be used.
  295.    They are not case sensitive, e.g., /EV = /Ev = /eV = /ev.  Invalid switch
  296.    specifications may result in an error message or in program cancellation.
  297.    Some switches have preset ('default') values which are used if new values
  298.    were not specified.
  299.  
  300.    The following command switches are recognized:
  301.  
  302.  
  303.    SWITCH ?
  304.    ~~~~~~~~
  305.    This switch displays the Status/Usage/Help panels, which are described in
  306.    more detail in the section below.  If a VGA or EGA is the active adapter,
  307.    the program saves the contents of the palette registers prior to changing
  308.    the attributes for its displays. (See 'STATUS/USAGE/HELP PANELS' below.)
  309.  
  310.    EGA users:  The default MS-DOS palette attributes are restored if the EGA
  311.            BIOS fails to store data in the Parameter Save Area. Old EGAs
  312.            may store invalid data in this area, resulting in an improper
  313.            restoration of the video attributes (use the DOS command MODE
  314.            CO80 to restore the default attributes).
  315.  
  316.  
  317.    SWITCH /?H
  318.    ~~~~~~~~~~
  319.    The modulation of cursor shape and visibility is implemented using direct
  320.    CRTC commands. Depending on the degree of register-level compatibility of
  321.    the video adapter, commands may be sent as a 16-bit (i.e., single double-
  322.    byte) value, or as two sequential 8-bit (single byte) values.  The 16-bit
  323.    commands, also used by other programs, Microsoft WINDOWS), are faster but
  324.    may not work properly with some old clone systems.
  325.  
  326.    This switch verifies if 16-bit (double-byte) size commands can be sent to
  327.    the video hardware to position the cursor; if so, the cursor is displayed
  328.    at the center of the screen.  Otherwise, a special revision of CPx (using
  329.    8-bit size commands) is required.  Most video adapters are able to handle
  330.    16-bit size commands.
  331.  
  332.  
  333.    SWITCH /AC
  334.    ~~~~~~~~~~
  335.    Video acceleration compensation.  Specify AC when installing if a memory-
  336.    resident speeding DOS video output (StdOut) were also in use, to avoid an
  337.    occasionally orphaned pseudocursor block.  This switch increases the size
  338.    of the resident by only 100 bytes, and typically needs to be used only if
  339.    StdOut-mediated screen scrolling were faster than 3 milliseconds per (80-
  340.    character) line. It is ignored after the resident has been installed.
  341.  
  342.    Default: /A = /AC.
  343.  
  344.  
  345.    SWITCH BL[±]
  346.    ~~~~~~~~~~~~
  347.    This switch toggles the display of the non-blinking cursor.
  348.  
  349.     /BL+    Disables the pseudocursor display.  The status of modulation
  350.         of shape and visibility are unchanged.  (This is the default
  351.         condition if a BL switch argument were not specified.)
  352.  
  353.     /BL-    Displays the non-blinking, see-through, full-block cursor at
  354.         the same screen position of the hardware cursor. The pseudo-
  355.         cursor overlays the normal cursor without changing it; to do
  356.         so, you must also specify switch SX, to change cursor shape,
  357.         or switch VU-, to make invisible.
  358.  
  359.    Defaults: /B = /BL = /BL+; no switch on installation: /BL+.
  360.  
  361.  
  362.    SWITCH EV
  363.    ~~~~~~~~~
  364.    When the *initial* copy of COMMAND.COM is loaded at boot time, it creates
  365.    a block of memory that will contain the master or global DOS environment.
  366.    The environment of DOS consists of a number of text-based variables, each
  367.    variable consisting of a name and an associated string having the format:
  368.  
  369.               VARIABLE=string of characters
  370.  
  371.    in which the end of the string is marked by a zero byte.  The environment
  372.    contains a series of such variables, and the end of the environment block
  373.    itself is indicated by an additional zero byte.  These variables are used
  374.    to pass information to and from COMMAND.COM (or a DOS shell replacement),
  375.    batch files, and application programs, such as the PATH= and the COMSPEC=
  376.    variables.
  377.  
  378.    Switch EV creates or, if it already exists, updates the environment block
  379.    variable:
  380.             CPX=/SWITCH1/SWITCH2 ... /SWITCHn
  381.  
  382.    where /SWITCH1.../SWITCHn are the command switches to be implemented when
  383.    the program is executed from the DOS command line or a batch file without
  384.    any argument.  Although the switch itself is incorporated in the variable
  385.    as well, it is ignored when such variable is used to provide input to the
  386.    program.  (See 'ENVIRONMENT VARIABLE CPX' for more details.)
  387.  
  388.    Default: /E = /EV.
  389.  
  390.  
  391.    SWITCH HK[±?xn]
  392.    ~~~~~~~~~~~~~~~
  393.    The program uses a hotkey to toggle its resident on and off. The default
  394.    hotkey combination is <Ctrl-Alt><C>, but it can be changed via switch HK
  395.    in the case of a key-assignment conflict.  The hotkey is erased from the
  396.    keyboard buffer so it is not displayed (however, programs executed after
  397.    the resident is loaded could save the hotkey).
  398.  
  399.     /HK+    Enables hotkey operation (this is the default condition
  400.         if an HK switch argument is not specified).
  401.  
  402.     /HK-    Disables hotkey operation; can be re-enabled with /HK+.
  403.  
  404.     /HK?    Displays the current hotkey, permitting the interactive
  405.         selection of a new hotkey including an alphanumeric key
  406.         and one or more of the shift keys <Ctrl>, <Alt>, <left-
  407.         Shift>, and <right-Shift>.
  408.  
  409.     /HKxn   Selects {xn} as the hotkey combination, in which {x} is
  410.         a alphanumeric character (0-9 and A-Z) only, and {n} is
  411.         a digit between 4 and 15 only. Such a digit corresponds
  412.         to one of the following shifting keys or their sum:
  413.  
  414.             1 = <right-Shift>   --------------------------
  415.             2 = <left-Shift>     Values higher than 15 or
  416.             4 = <Ctrl>           lower than 4 are invalid
  417.             8 = <Alt>           --------------------------
  418.  
  419.    For obvious reasons, <Ctrl> or <Alt>, or both, must be part of a new hot-
  420.    key combination either in switch /K? or /Kxn.  If a hotkey other than the
  421.    default combination is needed routinely, it may be useful to store in the
  422.    DOS environment the variable 'CPX=/HKxn' (see below).
  423.  
  424.    Defaults:  /H = /HK = /HK+; no switch on installation = /HK+ /HKC8.
  425.  
  426.  
  427.    SWITCH LH[n]
  428.    ~~~~~~~~~~~~
  429.    Loads the resident in the Upper Memory Area (UMA), between addresses 640
  430.    KB and 1,024 KB of memory; this is the region below the 1-MB boundary of
  431.    the memory accessible by DOS, but above the 640-KB IBM hardware barrier.
  432.    Switch LH requires an available upper memory block (UMB) of about 0.5 KB
  433.    which is allocated by the program itself either via a direct XMS request
  434.    or, if MS-DOS controls the UMB allocation (i.e. DOS 5+ linked to the UMA
  435.    through the command <dos=umb> in the CONFIG.SYS file), via calls to DOS.
  436.    The UMB selfloading has advantages over XMM- or DOS-mediated UMB loading
  437.    (see 'INSTALLATION IN UPPER MEMORY' below).
  438.  
  439.    UMBs allocation requires the presence of an XMS manager (XMM) supporting
  440.    the UMB services 10h-11h of XMS 2+, and (if the XMM lacks the capability
  441.    of remapping memory) the presence of a 386-specific (V86) UMB provider.
  442.  
  443.    A lower upper-memory limit for the UMB loading can also be requested via
  444.    switch LHn, in which {n} is a four-digit hexadecimal number between A000
  445.    (640 KB) and FF00 (1,020 KB), in order to avoid or select specific areas
  446.    of upper memory.
  447.  
  448.    Defaults:  Low-memory installation if any error is found during the UMB
  449.    loading; high-memory installation below lower-address limit if UMBs are
  450.    not available above such limit; /L = /LH.
  451.  
  452.  
  453.    SWITCH /SX[±te]
  454.    ~~~~~~~~~~~~~~~
  455.    Cursor special effects.  This switch controls the modulation of the shape
  456.    of the cursor (except its visibility).
  457.  
  458.     /SX+    Enables shape modulation control.  (This is the default
  459.         condition if an SX switch argument were not specified.)
  460.  
  461.     /SX-    Disables shape modulation; can be re-enabled with /SX+.
  462.  
  463.     /SXte   Selects the top {t} and end {e} line of the cursor (see
  464.         above).  The lines can be selected automatically in the
  465.         Usage panel.  Each line is specified as a letter in the
  466.         range <a-p> (VGA) through <a-i> (CGA).
  467.  
  468.    Defaults: /S = /SX = /SX+; no switch on installation = /SX+.
  469.  
  470.  
  471.    SWITCH /QU
  472.    ~~~~~~~~~~
  473.    If loaded, the resident becomes quiescent until the next execution of the
  474.    program, except if switch /QU, /?H, or /? were specified at such time.
  475.  
  476.    Default: /Q = /QU.
  477.  
  478.  
  479.    SWITCH /UL
  480.    ~~~~~~~~~~
  481.    Uninstalls the resident code from memory.  This request is disregarded if
  482.    the address of any of the interrupts intercepted by the resident has been
  483.    modified since the program was installed, since the revectoring indicates
  484.    another resident has subsequently hooked the same interrupt(s). Thus, the
  485.    program cannot be uninstalled, because this would leave such interrupt(s)
  486.    pointing to empty memory, and the system would then crash.
  487.  
  488.    The program should be uninstalled only if it is the last resident to have
  489.    been installed. In practice, however, it can also be uninstalled when any
  490.    subsequently installed resident intercepts different interrupts; although
  491.    this increases fragmentation of memory, the resulting "hole" is innocuous
  492.    and can be used by DOS for other purposes (e.g., an environment block).
  493.  
  494.    Default: /U = /UL.
  495.  
  496.  
  497.    SWITCH VU[±]
  498.    ~~~~~~~~~~~~
  499.    This switch toggles the display of the blinking cursor without disturbing
  500.    the status of cursor-shape modulation.
  501.  
  502.     /VU+    Enables display of the blinking cursor. (This is the default
  503.         condition if a VU switch argument were not specified.)
  504.  
  505.     /VU-    Disables the display of the blinking cursor (it may not work
  506.         with some old EGA adapters); can be re-enabled with VU+.
  507.  
  508.     Defaults: /V = /VU = /VU+; no switch on installation: /VU+.
  509.  
  510.  
  511.  
  512.    COMMENTS
  513.  
  514.    The comments may be added in the command line after the desired switches
  515.    and must be preceded by a semicolon.  Such comments, which may be useful
  516.    in clarifying batch files, are ignored by the program.
  517.  
  518.    Do not use the redirection and pipe characters in the comments since DOS
  519.    will attempt to implement the implied redirection or pipe request.
  520.  
  521.  
  522.  
  523.    STATUS/USAGE/HELP PANELS
  524.  
  525.    Executing the program with switch /? selected allows access to the Status/
  526.    Usage and Help panels. (If a Mouse pointing device driver, compatible with
  527.    the Microsoft Mouse driver version 6.0 or higher is loaded and active, all
  528.    of the services provided by these panels can also be activated by pointing
  529.    the mouse to specific areas of the screen and clicking either button.  The
  530.    mouse driver state is saved prior to the display, to be restored later, if
  531.    sufficient memory is available for the panel display.)
  532.  
  533.    The STATUS/USAGE panel, which is shown first, describes status information
  534.    for the resident. The status of switches /BL, /SX, and /VU is shown in the
  535.    respective, small screen buttons with the same first letter; pressing keys
  536.    <B>, <S>, or <V>, or clicking these screen buttons with mouse, toggles the
  537.    on/off status of these switches.  Pressing the keypad cursor keys (<Home>,
  538.    <End>, <PgUp>, <PgDn>, <Up>, <Dn>, or keypad center <5>), or clicking-and-
  539.    dragging with the mouse over the cursor matrix subpanel, changes the scan
  540.    lines of the cursor.  An asterisk is displayed before the current top/end
  541.    line selection if the current video font (e.g., screen rows displayed) is
  542.    different from that stored in the resident.
  543.  
  544.    Press key <F7>, or <X>, or click the mouse upon the screen button labelled
  545.    <Exit> to return to the DOS-prompt command line.
  546.  
  547.    The HELP panel provides a summary description of the program and commands,
  548.    and is displayed if key <F1> or <H> is pressed from the Status/Usage panel
  549.    (or if the mouse is clicked upon the screen button labelled <Help>). Press
  550.    the keypad cursor keys (Home/End, PgUp/PgDn, arrows) to scroll the display
  551.    down or up or the key <S> to scroll in a closed loop; alternatively, click
  552.    the mouse upon the Up/Down arrows at the top right corner of the screen to
  553.    scroll.  Press key <F1> to skip the brief program summary and position the
  554.    text on the Usage section directly.
  555.  
  556.    The scrolling rate can be modified by positioning the mouse over a beating
  557.    icon that becomes visible on the top line of the HELP panel when the mouse
  558.    driver is installed, and clicking the left (+) or right (-) mouse buttons.
  559.    (The beating icon is also displayed in the STATUS/USAGE panel.)
  560.  
  561.    Press key <Esc> or <F2>, or click the mouse upon the rightmost icon at the
  562.    top left corner of the screen, to return to the Status/Usage panel.  Press
  563.    key <F7> or <X>, or click the mouse upon the leftmost icon, to exit to the
  564.    DOS-prompt command line.
  565.  
  566.    The <NumLock> key is clamped off during keyboard input to avoid conflicts.
  567.    Pressing <Esc> quits the display and returns to DOS, without modifying the
  568.    status of the program, whereas pressing <Enter> loads the resident (if not
  569.    installed) or updates it with the selected values and switch conditions.
  570.  
  571.  
  572.  
  573.    THE ENVIRONMENT VARIABLE CPX
  574.  
  575.    When the program is executed from the command line of DOS or a batch file
  576.    without an argument, it searches the DOS environment block for a variable
  577.    named 'CPX' having the format:
  578.  
  579.             CPX=/SWITCH1/SWITCH2 .... /SWITCHn
  580.  
  581.    Up to 128 characters are allowed after the equal sign. This string can be
  582.    incorporated to the environment block via the 'SET' command of DOS or via
  583.    switch /EV of this program (see above).
  584.  
  585.    The variable can be used to specify a default configuration, which can be
  586.    restored by executing the program with null arguments after any temporary
  587.    change of parameters.
  588.  
  589.    While the SET command modifies the current DOS environment block, whether
  590.    it is the global or a local one, switch /E only modifies the global block
  591.    (even when the program is executed via a secondary COMMAND.COM, as in the
  592.    case of shelling out to DOS from an application).   Notice that the local
  593.    environment block is only a copy of the global block and lacks sufficient
  594.    room to increase significantly the length of a variable, and that changes
  595.    made to a local environment are not inherited by the global one.
  596.  
  597.    When searching for the environment variable, the program uses the current
  598.    DOS environment block, whether it is the global or a local one.
  599.  
  600.  
  601.  
  602.    5.  INSTALLATION IN UPPER MEMORY
  603.  
  604.    This section describes in more detail aspects of the active (i.e., self-
  605.    loading) or passive (e.g. via DOS LOADHIGH) installation of the resident
  606.    in the upper memory region.
  607.  
  608.  
  609.    DIRECT UPPER-MEMORY AREA LOADING
  610.  
  611.    The utility can self-install the resident in the upper memory area (UMA),
  612.    that is, RAM addresses between 640 KB and 1,024 KB, via switch LH (or its
  613.    subfunction LHn).
  614.  
  615.    The allocation of UMA blocks (UMBs) is arbitrated by an XMS manager (XMM)
  616.    version 2.0 or higher; the XMM must be installed prior to the UMB-loading
  617.    of the resident.  Allocation also requires the remapping of UMA addresses
  618.    by a UMB provider, when such a task is not implemented by the XMM itself.
  619.  
  620.    The XMM HIMEM.SYS and the UMB-provider EMM386.EXE are distributed with MS
  621.    DOS 5+.  The allocation of UMBs is controlled by DOS when these 2 drivers
  622.    are installed, and the command <dos=umb> is added to the CONFIG.SYS file.
  623.    With DR-DOS 6+, UMB remapping and XMS support are provided by EMM386.SYS.
  624.    Other 386-specific memory managers, of course, also provide UMB remapping
  625.    and XMS support.  All XMMs require MS-DOS version 3 or later.
  626.  
  627.    Switch LHn, where A000 ≤ n ≤ FFFF (hexadecimal), allows the specification
  628.    of a minimum upper-memory limit for the UMB to avoid UMA regions having a
  629.    very slow access time (or to preserve regions with a fast access time for
  630.    other utilities that require faster times, such as a disk cache or screen
  631.    accelerator), or to avoid fragmentation of the UMA when UMB allocation is
  632.    not controlled by MS-DOS 5+, but by the XMM itself. The fragmentation may
  633.    occur when the XMM allocates blocks on a first-fit basis, i.e., the first
  634.    available UMB having the lowest UMA address is allocated, irrespective of
  635.    whether or not a (smaller) block matching the requested size is available
  636.    at a higher UMA address.  Unless the size of the available UMBs increases
  637.    with increasing memory address, first-fit allocation of a small UMB leads
  638.    to the breaking of large UMA blocks into smaller ones, thus hampering the
  639.    UMB installation of larger residents.
  640.  
  641.    If MS-DOS 5+ controls UMB allocation, the program enforces the allocation
  642.    of the resident block on a best-fit basis when {n} is not specified, that
  643.    is, all available blocks are searched (by DOS), and the one matching most
  644.    closely the size requested is allocated.
  645.  
  646.    When DOS controls UMB allocation and {n} is specified, UMBs are allocated
  647.    on a first-fit basis.  While this may contribute to UMA fragmentation, it
  648.    allows for the checking of a minimum memory limit in those cases in which
  649.    the selection or avoidance of a specific UMA region is more important.
  650.  
  651.    Hence, compared to the upper-memory loading provided by the LH command of
  652.    MS-DOS 5+, the HILOAD command of DR-DOS 5+, or a similar service provided
  653.    by other memory managers, self-loading into a UMB has several advantages,
  654.    including: (1) it does not require an initial free UMB of the size of the
  655.    entire program (as opposed to the size of its resident only), (2) it does
  656.    allow user control on the selection of the upper-memory block, and (3) it
  657.    can help reduce UMA fragmentation.
  658.  
  659.    NOTE  -------------------------------------------------------------------
  660.      The address and size of available UMBs can be obtained with MEM.EXE
  661.      (when DOS controls UMB allocation) or via the memory manager itself
  662.      (when the allocation is controlled by 386-specific memory managers.
  663.      In either case, such data can also be obtained with UMAX.EXE, a UMA
  664.      mapping utility that is distributed by the author.
  665.      -------------------------------------------------------------------
  666.  
  667.  
  668.    UMA LOADING VIA MEMORY MANAGERS, DR-DOS 5+, or MS-DOS 5+
  669.  
  670.    The resident can also be installed in the UMA via a 386-memory manager or
  671.    DR-DOS 5+/MS-DOS 5+ commands (e.g., HILOAD, LH, etc), provided that there
  672.    is a sufficiently large, free UMB for the actual size of the entire file,
  673.    and any for additional memory that may be required by the loading service
  674.    itself.
  675.  
  676.    Please note that, to minimize disk storage, the program is distributed as
  677.    a compressed EXE file that expands on execution by a factor of 2 or less.
  678.    Thus, the difference between the actual size upon loading and the nominal
  679.    directory size may create conflicts with UMA-loading services that do not
  680.    measure actual size: If the available upper memory were smaller than that
  681.    required by the decompressed file but larger than the nominal (directory)
  682.    size, such service would attempt to load the compressed file.  Of course,
  683.    the subsequent file decompression would overwrite the adjacent memory and
  684.    likely crash the memory manager or DOS!
  685.  
  686.    When attempting to load the resident in a UMB via a memory manager or DOS
  687.    5+, do NOT request in the same command line switches that result in panel
  688.    displays.  These displays require an additional 8,000 bytes of *adjacent*
  689.    free memory, and the free-RAM measuring procedure used by the program can
  690.    be negated by UMA-loading services that do not update the program segment
  691.    prefix (PSP) of the program being loaded.  Such switches are /?, /?H, and
  692.    /HK?.
  693.  
  694.  
  695.    UMA UPDATING
  696.  
  697.    When the program has been installed in upper memory, it does not require
  698.    a high-memory loading utility to update its resident and all updates can
  699.    be made via program executions from the DOS-command line.  This obviates
  700.    the restriction (of some memory systems) of having to maintain a pool of
  701.    of free upper memory simply to load the entire program to update a small
  702.    resident.
  703.  
  704.  
  705.    UMA DEALLOCATION
  706.  
  707.    When resident deallocation is requested (switch UL) from the DOS command
  708.    line (as opposed to via upper-memory loading utilities), the resident is
  709.    removed from memory even when it was loaded in the UMA.
  710.  
  711.    When switch UL is requested via a high-memory utility be aware that some
  712.    of these utilities warn that a "resident installation has failed."  This
  713.    warning is harmless and may be ignored.
  714.  
  715.  
  716.  
  717.    IDENTIFICATION IN MEMORY MAPS
  718.  
  719.    If the resident has been loaded in lower conventional memory, the program
  720.    can be identified by name in usage maps yielded by various memory mapping
  721.    utilities.  Although the program sheds its own copy of the environment at
  722.    installation time (to minimize the resident size), the name
  723.  
  724.                 CPx n.nn.n
  725.  
  726.    will appear in the command line listing for the resident, irrespective of
  727.    the actual content of the DOS command line at the time of loading; n.nn.n
  728.    are the major and minor program version, and the revision number.
  729.  
  730.    However, when UMB loading is mediated by the XMS directly (e.g., extended
  731.    memory manager and DOS versions 2-4, or MS-DOS 5+ not linked to the upper
  732.    memory) and the resident is selfloaded via switch LH, many memory mapping
  733.    programs do not list the allocated block, or lump it with other allocated
  734.    blocks, or fail to reveal the name of the resident.
  735.  
  736.    If the UMB allocation is controlled by MS-DOS 5+, the UMB resident can be
  737.    identified with some mapping utilities (e.g., MEM.EXE of MS-DOS) although
  738.    it is listed as "Data" instead of "Program."
  739.  
  740.  
  741.  
  742.    6.  TECHNICAL INFORMATION
  743.  
  744.    INTERRUPTS
  745.  
  746.    Whenever certain conditions occur, either within a program or the system,
  747.    it becomes necessary for the processor to interrupt its current operation
  748.    and execute one of a group of special routines.  The action that triggers
  749.    the execution of such a routine is referred to as an interrupt; there are
  750.    internal interrupts, in response to a state of the CPU or an instruction,
  751.    and external interrupts, caused by signals sent to the CPU from elsewhere
  752.    in the system.
  753.  
  754.    When the program is waiting for keyboard (or mouse) user input during its
  755.    Status/Usage/Help display, it invokes repeatedly the 'idle' interrupts of
  756.    DOS: INT 28h and, if running under MS-DOS 5+, function 1680h of INT 2Fh,
  757.    if this function indicates that it can process program suspension.
  758.  
  759.    INT 28h permits potential background activation of (some) other residents
  760.    while INT 2Fh/1680h permits MS-DOS 5+ to suspend the program temporarily,
  761.    and transfer control to another program.
  762.  
  763.    The program also intercepts several interrupts,
  764.  
  765.         INT 08h - Timer hardware
  766.         INT 09h - Keyboard hardware
  767.         INT 10h - BIOS video services
  768.         INT 21h - DOS system services
  769.         INT 2Fh - DOS multiplex services
  770.  
  771.    Interrupt 8h (system timer)
  772.  
  773.    Channel 0 of the 8253/8254 timer chip produces a hardware interrupt (IRQ0),
  774.    interrupt 8h, about 18.2 times a second that is used by the system time-of-
  775.    day clock. The interrupt is used to enforce the selected cursor shape when
  776.    the InDOS flag of DOS indicates that the system can be interrupted safely.
  777.  
  778.    Interrupt 9h (keyboard hardware)
  779.  
  780.    This interrupt is generated whenever a key is either depressed or released.
  781.    It is used by the resident to monitor if its hotkey has been pressed (so as
  782.    to toggle all cursor services ON or OFF), and by the pseudocursor option if
  783.    an extended key (i.e., keypad cursor key) is pressed.
  784.  
  785.    Interrupt 10h (BIOS video)
  786.  
  787.    This interrupt is used to invoke a number of ROM BIOS video services and it
  788.    is used by the pseudocursor option when it is necessary to move the pseudo-
  789.    cursor from its present position.
  790.  
  791.    Interrupt 11h (BIOS equipment configuration)
  792.  
  793.    This interrupt is used to provide a 32-bit value with data on the equipment
  794.    configuration.  It is used by the program to determine whether its resident
  795.    is alredy installed.
  796.  
  797.    Interrupt 21h (DOS dispatcher services)
  798.  
  799.    This interrupt is used to mediate the display of DOS output to the console.
  800.    It is used by the program only if switch AC were specified at installation.
  801.  
  802.    Interrupt 28h (DOS idle loop)
  803.  
  804.    This interrupt is generated from a "get keyboard input" routine in DOS when
  805.    it is safe to access some DOS services and to interrupt DOS itself, even if
  806.    the InDOS flag signals a busy status.  This interrupt is used to enforce of
  807.    the selected cursor shape at the DOS prompt level when the InDOS flag gives
  808.    a DOS-busy signal.
  809.  
  810.    Interrupt 2Fh (DOS multiplex services)
  811.  
  812.    This interrupt is used to provide a motley of services for MS-DOS, WINDOWS,
  813.    and third-party applications. CPx monitors this interrupt for the so-called
  814.    initialization and exit broadcasts of WINDOWS 3.x (386-Enhanced or Standard
  815.    mode).
  816.  
  817.  
  818.  
  819.    DOS ERRORLEVELS
  820.  
  821.    Upon completion, the program passes an errorlevel value which can be used
  822.    to check (via ERRORLEVEL commands in a batch file) the outcome of program
  823.    execution.  The following errorlevels may be passed:
  824.  
  825.          Value   Nature of Error
  826.          -----   ------------------------------------
  827.            255   Cyclical redundancy check failure
  828.            255   CPU type cannot execute 286+ version
  829.            255   DOS version 1 encountered
  830.  
  831.                    128   Insufficient memory for display processing
  832.             64   XMM not installed/XMS error in UMB load
  833.             32   Error updating environment variable
  834.             16   Invalid hotkey combination
  835.              8   Unknown video adapter/Bad CRTC
  836.              4   Unable to uninstall resident
  837.              2   Invalid switch request
  838.              1   User <CTRL-BREAK> keypress
  839.              0   Successful execution
  840.  
  841.  
  842.    Some conditions generating errorlevels 1 through 128 may be additive, and
  843.    the resulting error value may represent more than a single error.
  844.  
  845.  
  846.  
  847.    7.  OPERATION REQUIREMENTS & CONFLICTS
  848.  
  849.    The resident will fail to operate properly when access to some interrupts
  850.    (see above) is denied by an ill-behaved foreground application or another
  851.    resident loaded after CPx.
  852.  
  853.    WINDOWS 3.X
  854.  
  855.    To avoid conflicts, CPx becomes inactive under Microsft WINDOWS 3.X (386-
  856.    Enhanced and Standard mode), active when WINDOWS ends.  For other WINDOWS
  857.    modes or versions, use the following batch file:
  858.  
  859.         @Echo Off
  860.         ...
  861.         [path]CPX /Q            ; inactivate resident
  862.         [path]WIN        ; run Windows
  863.         [path]CPX               ; reactivate resident
  864.         ...
  865.  
  866.    PSEUDOCURSOR LIMITATIONS
  867.  
  868.    The psudocursor can be used at the level of the DOS command line (prompt).
  869.    With video accelerators which increase the DOS video output, a few pseudo-
  870.    cursor blocks might remain on the screen when such an acceleration is very
  871.    fast; this is restricted to the 'StdOut' DOS video output, and is not seen
  872.    when only video BIOS acceleration is used.  This problem can be avoided by
  873.    specifying switch AC before installing the resident.
  874.  
  875.    With some (text-mode) text editors, the pseudocursor may fail to appear in
  876.    the top line when scrolling the screen downwards ( or PgDn key) or in the
  877.    bottom line when the screen scrolling upwards ( or PgUp key).  The cursor
  878.    reappears immediately after any alphanumeric or cursor key is pressed.
  879.  
  880.  
  881.  
  882.    8.  COPYRIGHT & LICENSE INFORMATION
  883.  
  884.    This documentation, programs, and other files distributed in this software
  885.    package (the "Software")  are the copyrighted property of FM de Monasterio
  886.    (the "Author"), who provides the Software and licenses its use. All rights
  887.    are reserved.
  888.  
  889.    The Software is not sold.  A license fee is required to use this Software.
  890.    This license does not transfer to you either the ownership of or the title
  891.    to the Software, which remain the property of the Author.  A form required
  892.    to license the Software is provided in the enclosed file CPX.REG.
  893.  
  894.  
  895.    SINGLE USER LICENSE.  Grants you use of this Software in a single computer
  896.    at a time; the Software may be transferred to another computer, as long as
  897.    it is used only in 1 computer at any time; under the license, the Software
  898.    may NOT be installed on a network server.
  899.  
  900.    SITE/15-PCs LICENSE.  Grants you use of this Software in a sigle site or a
  901.    set of sites, as long as the Software is not used in more than 15 machines
  902.    at a time, and that such machines are located exclusively within the site.
  903.    Licenses for more machines are available at discounted prices.
  904.  
  905.    SOFTWARE BUNDLING LICENSE.  Please write to the Author.
  906.  
  907.    REFUNDS POLICY.  If a problem notified within ninety (90) days of shipping
  908.    of the registered copy cannot be solved, the registration fee (but not the
  909.    shipping costs) will be refunded upon receiving a written request with the
  910.    original diskette(s) enclosed.
  911.  
  912.    UPGRADE POLICY.  Program upgrades are limited to licensed users.  Upgrades
  913.    within the same major version (e.g. release 4.00 through 4.99) are free of
  914.    charge when a self-addressed, stamped, 5.25" diskette mailer with a 360-KB
  915.    diskette is included with the request. Other upgrades are charged half the
  916.    (single-user/site) registration fee.  See the enclosed file CPX.UPG.
  917.  
  918.  
  919.    U.S. GOVERNMENT INFORMATION
  920.  
  921.    The Software is Commercial Computer Software under the Federal Acquisition
  922.    Regulations of the U.S. government and the Agency Supplements to them. The
  923.    Software is provided to the Federal Government and its agencies only under
  924.    the Restricted Rights Provisions of the above noted regulations applicable
  925.    to commercial software developed at private expense, and not in the public
  926.    domain. The use, duplication, or disclosure of the Software by the Federal
  927.    Government or its agencies is subject to the restrictions set forth in the
  928.    subdivision (c.1.ii) of the Rights in Technical Data and Computer Software
  929.    clause at DFARS 252.227-7013 (October 1988) and FAR 52.227-19 (June 1987).
  930.  
  931.  
  932.    9.  DISTRIBUTION
  933.  
  934.    You may distribute the Software, but you are specifically prohibited from:
  935.  
  936.     - Charging fees or asking donations in exchange of or payment
  937.       for copies of this Software.
  938.  
  939.     - Distributing this Software with commercial products without
  940.       the written, express permission in advance from the author.
  941.  
  942.     - Distributing this Software via a for-profit organization or
  943.       group, either alone or with other software.
  944.  
  945.     - Changing any of the contents of this Software including the
  946.       copyright notice and license information.
  947.  
  948.    You may not disassemble or otherwise reverse engineer the Software.  Other
  949.    uses of the Software are prohibited without a written authorization signed
  950.    by the Author.
  951.  
  952.    Latest program releases may be found at the Information Exchange BBS (703)
  953.    836-0748, as a compressed archive file.
  954.  
  955.  
  956.    WARRANTY DISCLAIMER FOR UNREGISTERED COPIES
  957.  
  958.    The information contained in the documentation for the Software is subject
  959.    to change without notice.
  960.  
  961.    The Author cannot and does not warrant that any functions contained in the
  962.    Software will meet your requirements, or that its operations will be error
  963.    free.  The entire risk as to the Software performance or quality, or both,
  964.    is solely with the user and not the Author.  You assume responsibility for
  965.    the selection of the Software to achieve your intended results and for the
  966.    installation, use, and results obtained from the Software.
  967.  
  968.    The Author makes no warranty, either implied or expressed, including with-
  969.    out limitation any warranty with respect to this Software documented here,
  970.    its quality, performance, or fitness for a particular purpose. In no event
  971.    shall the Author be liable to you for damages, whether direct or indirect,
  972.    incidental, special, or consequential arising out the use of or any defect
  973.    in the Software, even if the Author has been advised of the possibility of
  974.    such damages, or for any claim by any other party.
  975.  
  976.    All other warranties of any kind, either express or implied, including but
  977.    not limited to the implied warranties of merchantability and fitness for a
  978.    particular purpose, are expressly excluded.
  979.  
  980.    By using the Software, you acknowledge (1) to have read and understood all
  981.    parts of this document and (2) to have agreed with and accepted all of its
  982.    terms and provisions without any reservation.
  983.  
  984.    For information on the terms of the Limited Warranty for licensed Software
  985.    copies or any other information on this program, please write to:
  986.  
  987.                 FM de Monasterio
  988.                 P.O. Box 219
  989.                 Cabin John, MD 20818-0219
  990.                 USA
  991.  
  992.     ┌─────────────────────────────────────────────────────────────┐
  993.     │ Trademarked names are the property of the respective owners │
  994.     └─────────────────────────────────────────────────────────────┘
  995.  [End]
  996.