home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / RGD04_05.ZIP / RIPSCRIP.DOC < prev   
Encoding:
Text File  |  1993-03-01  |  160.9 KB  |  3,819 lines

  1.  
  2.  
  3.                    ------------------------------------------
  4.                     RIPscrip Graphics Protocol Specification
  5.  
  6.                            "Remote Imaging Protocol"
  7.  
  8.                      Written by Jeff Reeder and Mark Hayton
  9.                    Copyright (c) 1992-1993, TeleGrafix Corporation
  10.                               All Rights Reserved
  11.  
  12.                                 Revision 1.50.02
  13.  
  14.                                  March 1st, 1993
  15.                    ------------------------------------------
  16.                        with editing by Bob Stein, 10/10/92
  17.  
  18.  
  19.  
  20.  
  21.      =====================================================================
  22.      ==                           INTRODUCTION                          ==
  23.      =====================================================================
  24.  
  25.      As system operators of many bulletin board systems, we've often
  26.      wished for some form of Graphical User Interface for our boards. Like
  27.      most Sysops, we've come across many solutions.  But they all seemed
  28.      to fall short in one way or another:  inadequate for THIS system,
  29.      incomplete, difficult to implement, too complex, or lacking in
  30.      graphics development tools.  In short, we became frustrated.
  31.  
  32.      So, we decided to write our own Graphical Script Language.
  33.  
  34.      RIPscrip stands for "Remote Imaging Protocol Script" language.  This
  35.      graphical language is our answer to the graphics needs of the BBS
  36.      community and has serious tools for implementation and practical use.
  37.  
  38.      For more information on RIPaint, RIPterm or RIPscrip development
  39.      tools, contact:
  40.  
  41.           TeleGrafix Corporation
  42.           16458 Bolsa Chica, #15
  43.           Huntington Beach, CA 92649
  44.  
  45.           VOICE: (714) 846-4179
  46.           FAX  : (714) 846-4189
  47.           DATA : (714) 840-3520 (ArenaBBS: The Major BBS...32 lines)
  48.  
  49.  
  50.  
  51.           ResNova Software
  52.           16458 Bolsa Chica, #193
  53.           Huntington Beach, CA 92649
  54.  
  55.           VOICE: (714) 840-6082
  56.           FAX  : (714) 840-0488
  57.           DATA : (714) 840-8641 (Nova Central: Nova Link Pro...4 lines)
  58.  
  59.  
  60.  
  61.           RIP Demo Midwest
  62.  
  63.           VOICE: (708) 820-8875
  64.           DATA : (708) 978-2777 (RIP Demo Midwest BBS: TBBS...2 lines)
  65.           FAX  : (708) 898-4994
  66.  
  67.  
  68.  
  69.      =====================================================================
  70.      ==                            DEFINITION                           ==
  71.      =====================================================================
  72.  
  73.      RIPscrip is a text based Script language for displaying online
  74.      graphics.  The script language conforms to 7-bit ASCII, avoiding the
  75.      use of Extended ASCII characters.  This allows transmission over X.25
  76.      networks and other carriers that do not support full 8-bit binary
  77.      transfers easily.  RIPscrip allows RIPscrip graphical statements to
  78.      be mixed with printable ASCII text and [de facto standard]
  79.      ANSI/VT-100 directives.  RIPscrip can dynamically determine what is
  80.      graphics and what is text and display them appropriately in separate
  81.      windows (a graphics window and a text window).  And if you must have
  82.      your own proprietary commands, RIPscrip has room for that too.
  83.  
  84.  
  85.  
  86.  
  87.  
  88.      =====================================================================
  89.      ==                     HOW DOES RIPscrip WORK?                     ==
  90.      =====================================================================
  91.  
  92.      RIPscrip uses a flexible, and very efficient script language for its
  93.      graphical statements.  Its efficiency stems from its compactness and
  94.      developmental planning.  It is entirely Object Oriented instead of
  95.      Raster Oriented for efficient transmission of data and powerful
  96.      editing capabilities (using RIPaint for example).  The language is
  97.      open ended enough so that literally trillions of different graphics
  98.      commands can be implemented as needed.  RIPscrip is not a proprietary
  99.      protocol standard and is open to suggestion from the rest of the
  100.      world.
  101.  
  102.      Earlier Graphical Script Languages (Avatar and Skypix among others),
  103.      utilize special command characters to indicate which graphics command
  104.      is to be executed.  This precludes their use on systems that are
  105.      limited to ASCII printable text.  Traditional script languages use
  106.      English words to accomplish things (eg, "BOX 0,0 100,50").  This kind
  107.      of thing is incredibly bulky, especially when you consider that
  108.      pictures are usually not simple things, but comprised of hundreds or
  109.      thousands of individual graphical operations (eg, line, circles,
  110.      fills, text, etc.).  With this in mind, a human-readable script
  111.      language was completely inappropriate for the relatively limited
  112.      bandwidth of conventional modems.
  113.  
  114.      So, one of our main strategies for this language was to make it as
  115.      efficient as possible without going completely binary.  This allows
  116.      the immediate installation of the protocol onto any ASCII text-based
  117.      host system -- because the language consists entirely of ASCII
  118.      printable characters.  We justify the unreadability of the language
  119.      by pointing out the limitations of today's modems and phone lines --
  120.      the language must be compact.
  121.  
  122.  
  123.  
  124.  
  125.      =====================================================================
  126.      ==              RIPscrip PROTOCOL - GENERAL STRUCTURE              ==
  127.      =====================================================================
  128.  
  129.      This document describes RIPscrip commands and functions supported
  130.      with RIPterm v1.02.
  131.  
  132.      RIPscrip is organized into 10 levels of graphical commands (low
  133.      Level-0 to high Level-9).  Level-0 commands are the building blocks
  134.      of RIPscrip.  The basic graphics primitives of the system are all
  135.      Level-0, including the commands LINE, RECTANGLE, CIRCLE, COLOR, FONT,
  136.      etc.  Each level of RIPscrip gets progressively higher-level in
  137.      concept.  For example, Level-1 commands use Mouse Regions, Icons, and
  138.      Formatted Text Regions.
  139.  
  140.      The basic Syntax Rules are as follows:
  141.  
  142.           1.  A RIPscrip command line starts at the beginning of a
  143.               line of text.  A RIPscrip command line moved to the
  144.               middle of a line of text is treated as literal text.
  145.               This prevents people inserting mischievous things in
  146.               teleconference messages, or similar pranks.  The only
  147.               exception to this rule is stated below under item 6,
  148.               "continuation of long lines".
  149.  
  150.           2.  A RIPscrip command line begins with an exclamation
  151.               mark (!)
  152.  
  153.           3.  Every RIPscrip command is preceded by the universal
  154.               RIPscrip delimiter, vertical-bar (|)
  155.  
  156.           4.  Individual RIPscrip commands may be combined on the
  157.               same line providing they are separated by the
  158.               vertical bar delimiter.
  159.  
  160.           5.  RIPscrip commands or command lines may be split across
  161.               multiple lines with a backslash (\) just before each
  162.               split.  This helps RIPscrip commands conform to right
  163.               margins and escape word wrapping.  An example:
  164.  
  165.                    !|c02|L02030405|P0901020102010201020102\
  166.                    0102010201020102
  167.  
  168.           6.  RIPscrip must allow for normal text to be inter-mixed
  169.               with RIPscrip commands.  If unrecognized text appears
  170.               after a RIPscrip command, on the same line, the text
  171.               is ignored (the command is not ignored).  A line that
  172.               does not begin with "!|" is considered raw text and is
  173.               routed to the TTY text window (see "8" below).
  174.  
  175.           7.  RIPscrip makes provisions for a GRAPHICAL WINDOW and a
  176.               TEXT WINDOW.  The Graphical Window is where all
  177.               RIPscrip graphics appear.  the TEXT WINDOW is where
  178.               raw text appears.  Raw Text includes ANSI color and
  179.               cursor movement codes (a subset of VT-100 terminal
  180.               emulation).
  181.  
  182.           8.  The vertical bar (|) of a RIPscrip command can be
  183.               followed by an level number.  If the 1st character
  184.               after (|) is a numeric digit (1-9), then that's the
  185.               RIPscrip Command Level.  If the very 1st character is
  186.               NOT a digit 1-9, then it is the command type character
  187.               and the command is a Level-0 command.  If the 1st
  188.               character is a digit 1-9, and the second character is
  189.               also a digit, then that defines a sub-level of a
  190.               RIPscrip level.  For example:
  191.  
  192.                  !|L ..... RIPscrip Level-0 Command "L"
  193.                  !|1L .... RIPscrip Level-1 Command "L"
  194.                  !|15L ... RIPscrip Level-1, sub-level 5 Command "L"
  195.  
  196.               Each of the above examples are unique commands not to
  197.               be confused with each other.  You may continue the
  198.               sub-levels up to a maximum level of 10 (eg,
  199.               !|1234567890<cmd>").
  200.  
  201.           9.  Every RIPscrip command includes a command type
  202.               character.  In Level-0 commands, this character
  203.               immediately follows the vertical bar.  At all other
  204.               levels, it follows the level digits.  The command type
  205.               character may be any printable non-decimal-digit
  206.               character.
  207.  
  208.          10.  Following the command type character are 0 or more
  209.               parameters.  If the command requires a text-string, it
  210.               is always the LAST parameter.  Numeric parameters DO
  211.               NOT have any delimiters (commas, dashes, spaces,
  212.               etc).  A variable width numeric parameter may be used
  213.               as the last parameter.  This allows for maximum
  214.               efficiency.  Numbers are represented in base-36.  This
  215.               compacts numbers down to roughly 3/5 of their decimal
  216.               form.  This numbering system, technically called
  217.               "Hexa-Tri-Decimal", has affectionately been dubbed
  218.               "MegaNums".  Unlike Hexadecimal which uses 0-9, A-F,
  219.               MegaNums take advantage of the entire alphabet, using
  220.               characters 0-9 and A-Z.
  221.  
  222.          11.  An exclamation mark (!) or vertical bar (|) character
  223.               can appear in a RIPscrip text parameter by preceding
  224.               it with a backslash(\).  A literal backslash is
  225.               represented with a double-backslash (\\).
  226.  
  227.          12.  A RIPscrip sequence CAN begin in a column other than
  228.               column #0, if the exclamation mark introducer is
  229.               replaced with a CTRL-A (Start of Header SOH) character,
  230.               or CTRL-B (STX character).  Since 99.9% of all BBS'es do
  231.               not allow Users to enter most control characters, users
  232.               will be unable to begin RIPscrip sequences in the middle
  233.               of a command line.  Only the Host should be able to do
  234.               this.  This prevents people from cluttering 
  235.               teleconference, or other areas of a Host with spurious
  236.               RIPscrip sequences.
  237.  
  238.  
  239.  
  240.  
  241.  
  242.      =====================================================================
  243.      ==                         ANSI SEQUENCES                          ==
  244.      =====================================================================
  245.  
  246.  
  247.      RIPscrip predominantly uses non-ANSI command sequences.  In a couple
  248.      of situations though, an ANSI sequence is allowed to perform a
  249.      specific function.  There are currently three separate ANSI sequences
  250.      defined in the RIPscrip protocol to perform various actions.  They
  251.      are as follows:
  252.  
  253.  
  254.  
  255.           ESC [ ! ...... Query RIPscrip version number.  RIPterm will
  256.                          respond with RIPSCRIPxxyyzz where xx is equal
  257.                          to the major version number (zero padded), yy
  258.                          is equal to the minor version number (zero
  259.                          padded), and zz equals the revision code (also
  260.                          zero padded).  For v1.50.00, the returned
  261.                          sequence would be RIPSCRIP015000.  Another
  262.                          example, v1.23.45 would return RIPSCRIP012345.
  263.  
  264.           ESC [ 0 ! .... Same as ESC [ ! (see above)
  265.  
  266.           ESC [ 1 ! .... Disables all RIPscrip processing.  Any RIPscrip
  267.                          sequences are interpretted as raw text.
  268.  
  269.           ESC [ 2 ! .... Enabled RIPscrip processing.  Any RIPscrip
  270.                          sequences will be parsed and processed.
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.      =====================================================================
  278.      ==                    RIPscrip COMMAND REFERENCE                   ==
  279.      =====================================================================
  280.  
  281.      The remainder of this document details the RIPscrip command set.
  282.      Each command has these aspects:
  283.  
  284.          SYMBOL - the symbolic constant that is referenced in the
  285.                   RIPscrip API Library code.  This is  the universal
  286.                   name for the command.
  287.  
  288.           LEVEL - The Command Level.  Sub-levels are represented
  289.                   with decimal points (eg, 1.3.5 for Level-1,
  290.                   Sub-level 3, Sub-Sub-level 5).  This is for
  291.                   discussion purposes only.  The decimal points
  292.                   are never part of the actual command.
  293.  
  294.         COMMAND - The command type character identifying the
  295.                   command
  296.  
  297.       ARGUMENTS - The arguments or parameters for the command.
  298.                   Commands that do not require any arguments
  299.                   after the command type character are shown
  300.                   here as "<none>".  Each argument is shown in
  301.                   the order it appears in the command, and is
  302.                   represented by a name.  If an argument is
  303.                   numeric, it is followed by a width specifier
  304.                   indicating how many MegaNum digits the
  305.                   argument consists of.  (eg, ":2" means a
  306.                   2-digit MegaNum, or a value between 0 and
  307.                   1295).  If an argument does not have a width
  308.                   specifier, it is by default a text argument,
  309.                   and should be the last argument on the line.
  310.                   If a command is variable length (see POLYGON),
  311.                   then it will appear with ellipses (...)
  312.  
  313.          FORMAT - This represents the format of the command, with
  314.                   the starting "!|", the level digits, the
  315.                   command type character, and the argument list,
  316.                   with the argument names in angle brackets.
  317.                   (These arguments are spaced apart, but these
  318.                   spaces never appear in the physical commands.)
  319.  
  320.         EXAMPLE - An actual example of the RIPscrip command.
  321.  
  322.      DRAW COLOR - If YES, then this command uses or affects the
  323.                   current Drawing Color.
  324.  
  325.      LINE PATRN - If YES, then this command uses or affects the
  326.                   current Line Style Pattern.
  327.  
  328.      LINE THICK - If YES, then this command uses or affects the
  329.                   current Line Style Thickness
  330.  
  331.      FILL COLOR - If YES, then this command uses or affects the
  332.                   current Fill Color.
  333.  
  334.      FILL PATRN - If YES, then this command uses or affects the
  335.                   current Fill Pattern.
  336.  
  337.      WRITE MODE - If YES, then this command will take advantage
  338.                   of the current Write Mode (eg, COPY, or XOR).
  339.  
  340.      FONT SIZES - If YES, then this command uses or affects the
  341.                   current Font Size.
  342.  
  343.  
  344.  
  345.  
  346.  
  347.      ---------------------------------------------------------------------
  348.      Define the size and location of the TTY Text Window
  349.      ---------------------------------------------------------------------
  350.                Symbol: RIP_TEXT_WINDOW
  351.                 Level: 0
  352.               Command: w
  353.             Arguments: x0:2, y0:2, x1:2, y1:2, wrap:1, size:1
  354.                Format: !|w <x0> <y0> <x1> <y1> <wrap> <size>
  355.               Example: !|w00001B0M10
  356.       Uses Draw Color: NO
  357.       Uses Line Patrn: NO
  358.       Uses Line Thick: NO
  359.       Uses Fill Color: NO
  360.       Uses Fill Patrn: NO
  361.       Uses Write Mode: NO
  362.       Uses Font Sizes: NO
  363.  
  364.      This command specifies the dimensions of the virtual TTY window that
  365.      will display all ASCII/ANSI (non-RIPscrip) data coming across the
  366.      connection.  (x0,y0) defines the upper-left corner of the window in
  367.      text-based character-cell coordinates.  (x1,y1) defines the
  368.      lower-right corner of the window (inclusive).  There may be two
  369.      simultaneous windows on the screen, one for TTY text, and one for the
  370.      display of RIPscrip graphics (a viewport), and they may overlap.
  371.  
  372.      Bytes received over the modem are first checked for RIPscrip
  373.      commands.  All bytes that don't conform to the RIPscrip syntax are
  374.      treated as ANSI/ASCII and displayed in the TTY window (if defined).
  375.      User keystrokes that are echoed by the BBS would also appear in the
  376.      text window by this scheme.
  377.  
  378.      The text window may be made invisible, ignoring all non-RIPscrip
  379.      bytes, by setting all RIP_TEXT_WINDOW parameters to zero (0).  The X
  380.      and Y parameters ranges vary depending on the setting of the <size>
  381.      parameter which governs the font size used for the output text. Valid
  382.      settings for the <size> parameter and the ranges for X/Y values are
  383.      as follows:
  384.  
  385.           size   Font Size    X Range   Y Range
  386.           ---------------------------------------
  387.            0       8x8         0-79      0-42
  388.            1       7x7         0-91      0-49
  389.            2       8x14        0-79      0-24
  390.            3       7x14        0-91      0-24
  391.            4       16x14       0-39      0-24
  392.  
  393.      The <wrap> parameter applies to both the horizontal and vertical
  394.      dimensions.  If <wrap> is set to 1, then any text that extends beyond
  395.      the right margin of the window will wrap to the next line of the
  396.      window, scrolling the window up if necessary.  If <wrap> is 0, then
  397.      any text going beyond the right margin is truncated and no scrolling
  398.      is performed; the cursor remains at the right margin.
  399.  
  400.  
  401.  
  402.  
  403.  
  404.      ---------------------------------------------------------------------
  405.      Define the size and location of the Graphics Window
  406.      ---------------------------------------------------------------------
  407.                Symbol: RIP_VIEWPORT
  408.                 Level: 0
  409.               Command: v
  410.             Arguments: x0:2, y0:2, x1:2, y1:2
  411.                Format: !|v <x0> <y0> <x1> <y1>
  412.               Example: !|v00002E1M
  413.       Uses Draw Color: NO
  414.       Uses Line Patrn: NO
  415.       Uses Line Thick: NO
  416.       Uses Fill Color: NO
  417.       Uses Fill Patrn: NO
  418.       Uses Write Mode: NO
  419.       Uses Font Sizes: NO
  420.  
  421.      This command defines the (X,Y) pixel boundaries of the RIPscrip
  422.      graphics window, which will contain all RIPscrip graphics output.
  423.      ASCII/ANSI text will be displayed in the virtual TTY window defined
  424.      by the RIP_TEXT_WINDOW command above.  (x0,y0) defines the upper-left
  425.      corner of the graphics viewport, and (x1,y1) defines the lower-right
  426.      corner (inclusive).  The viewport may be disabled, so RIPscrip
  427.      graphics commands are ignored, by setting all parameters to zero (0).
  428.  
  429.      Graphics displayed in the viewport is "truncated" at this rectangular
  430.      border, meaning if a circle would normally extend outside one of the
  431.      borders, it will be chopped, only displaying the portion of the
  432.      circle that is contained inside the viewport boundaries.
  433.  
  434.      Coordinates are specified based on a 640x350 pixel resolution, meaning
  435.      X can be anywhere from 0 - 639, and Y can be anywhere from 0 - 349.
  436.      x0 must be less than x1 and y0 must be less than y1 unless all
  437.      parameters are set to zero, indicating that the graphics window is
  438.      disabled.
  439.  
  440.  
  441.  
  442.  
  443.  
  444.      ---------------------------------------------------------------------
  445.      Reset & Clear Graphics and Text Windows to full screen
  446.      ---------------------------------------------------------------------
  447.                Symbol: RIP_RESET_WINDOWS
  448.                 Level: 0
  449.               Command: *
  450.             Arguments: <none>
  451.                Format: !|*
  452.               Example: !|*
  453.       Uses Draw Color: NO
  454.       Uses Line Patrn: NO
  455.       Uses Line Thick: NO
  456.       Uses Fill Color: NO
  457.       Uses Fill Patrn: NO
  458.       Uses Write Mode: NO
  459.       Uses Font Sizes: NO
  460.  
  461.      This command will set the Text Window to a full 80x43 EGA hi-res text
  462.      mode, place the cursor in the upper left corner, clear the screen,
  463.      and zoom the Graphics Window to full 640x350 EGA screen.  Both
  464.      windows are filled with the current graphics background color.  Also,
  465.      all Mouse Regions are deleted and the Clipboard is erased.  A system
  466.      might use this function before entering a text only mode that does
  467.      not support RIP commands.  This command will also restore the default
  468.      16-color RIP palette (see RIP_SET_PALETTE below).
  469.  
  470.  
  471.  
  472.  
  473.  
  474.      ---------------------------------------------------------------------
  475.      Clears the Text Window to the current background color
  476.      ---------------------------------------------------------------------
  477.                Symbol: RIP_ERASE_WINDOW
  478.                 Level: 0
  479.               Command: e
  480.             Arguments: <none>
  481.                Format: !|e
  482.               Example: !|e
  483.       Uses Draw Color: NO
  484.       Uses Line Patrn: NO
  485.       Uses Line Thick: NO
  486.       Uses Fill Color: NO
  487.       Uses Fill Patrn: NO
  488.       Uses Write Mode: NO
  489.       Uses Font Sizes: NO
  490.  
  491.      This clears the TTY text window to the current graphics background
  492.      color and positions the cursor in the upper-left corner of the
  493.      window.  If the text window is inactive, then this command is
  494.      ignored.  If the text and graphics windows overlap, then this command
  495.      will clear the overlapping portion also.
  496.  
  497.  
  498.  
  499.  
  500.  
  501.      ---------------------------------------------------------------------
  502.      Clears the Graphics Window to the current background color
  503.      ---------------------------------------------------------------------
  504.                Symbol: RIP_ERASE_VIEW
  505.                 Level: 0
  506.               Command: E
  507.             Arguments: <none>
  508.                Format: !|E
  509.               Example: !|E
  510.       Uses Draw Color: NO
  511.       Uses Line Patrn: NO
  512.       Uses Line Thick: NO
  513.       Uses Fill Color: NO
  514.       Uses Fill Patrn: NO
  515.       Uses Write Mode: NO
  516.       Uses Font Sizes: NO
  517.  
  518.      This command clears the Graphics Viewport to the current graphics
  519.      background color.  If the graphics viewport is not active (if the
  520.      boundaries are 0,0,0,0), then this command is ignored.  If the text
  521.      and graphics windows overlap, then this command will clear the
  522.      overlapping portion also.
  523.  
  524.  
  525.  
  526.  
  527.  
  528.      ---------------------------------------------------------------------
  529.      Move the Text (TTY) cursor to given row & column in the text window
  530.      ---------------------------------------------------------------------
  531.                Symbol: RIP_GOTOXY
  532.                 Level: 0
  533.               Command: g
  534.             Arguments: x:2, y:2
  535.                Format: !|g <x> <y>
  536.               Example: !|g0509
  537.       Uses Draw Color: NO
  538.       Uses Line Patrn: NO
  539.       Uses Line Thick: NO
  540.       Uses Fill Color: NO
  541.       Uses Fill Patrn: NO
  542.       Uses Write Mode: NO
  543.       Uses Font Sizes: NO
  544.  
  545.      This command sets the position of the text cursor in the TTY Text
  546.      window, if it is active.  If inactive (if the dimensions are
  547.      0,0,0,0), then this command is ignored.  This command is equivalent
  548.      to the ANSI/VT-100 command goto x/y, <Esc>[x;yH, except that the
  549.      coordinates of that ANSI command are 1-based and the coordinates of
  550.      this RIPscrip command are 0-based.
  551.  
  552.  
  553.  
  554.  
  555.  
  556.      ---------------------------------------------------------------------
  557.      Move the cursor to the Upper-Left corner of the Text Window
  558.      ---------------------------------------------------------------------
  559.                Symbol: RIP_HOME
  560.                 Level: 0
  561.               Command: H
  562.             Arguments: <none>
  563.                Format: !|H
  564.               Example: !|H
  565.       Uses Draw Color: NO
  566.       Uses Line Patrn: NO
  567.       Uses Line Thick: NO
  568.       Uses Fill Color: NO
  569.       Uses Fill Patrn: NO
  570.       Uses Write Mode: NO
  571.       Uses Font Sizes: NO
  572.  
  573.      This command positions the text cursor to the upper-left corner in
  574.      the TTY Text Window, if it is active.
  575.  
  576.  
  577.  
  578.  
  579.  
  580.      ---------------------------------------------------------------------
  581.      Erase the current text line from the cursor to the end of line
  582.      ---------------------------------------------------------------------
  583.                Symbol: RIP_ERASE_EOL
  584.                 Level: 0
  585.               Command: >
  586.             Arguments: <none>
  587.                Format: !|>
  588.               Example: !|>
  589.       Uses Draw Color: NO
  590.       Uses Line Patrn: NO
  591.       Uses Line Thick: NO
  592.       Uses Fill Color: NO
  593.       Uses Fill Patrn: NO
  594.       Uses Write Mode: NO
  595.       Uses Font Sizes: NO
  596.  
  597.      This command will erase the current text line in the TTY text window
  598.      from the current cursor location (inclusive) to the end of the line.
  599.      The erased region is filled with the current graphics background
  600.      color.  This differs from the ANSI command ESC[K which clears the
  601.      area with the current ANSI background color.
  602.  
  603.  
  604.  
  605.  
  606.  
  607.      ---------------------------------------------------------------------
  608.      Set the current drawing color for graphics primitives
  609.      ---------------------------------------------------------------------
  610.                Symbol: RIP_COLOR
  611.                 Level: 0
  612.               Command: c
  613.             Arguments: color:2
  614.                Format: !|c <color>
  615.               Example: !|cA
  616.       Uses Draw Color: YES
  617.       Uses Line Patrn: NO
  618.       Uses Line Thick: NO
  619.       Uses Fill Color: NO
  620.       Uses Fill Patrn: NO
  621.       Uses Write Mode: NO
  622.       Uses Font Sizes: NO
  623.  
  624.      This command sets the color for drawing lines, circles, arcs,
  625.      rectangles, and other graphics primitives, as well as the color for
  626.      drawing grahics-text from the RIP_TEXT class of commands (not from
  627.      ASCII/ANSI text).  This command does not affect Fill colors or Fill
  628.      Patterns (see below).  It does affect the borders of graphic objects,
  629.      for example the border of an ellipse drawn with the RIP_FILLED_OVAL
  630.      command.  (The interior of the ellipse would be drawn according to
  631.      the most recent RIP_FILL_STYLE command.)
  632.  
  633.      This command chooses one of the colors of the 16-color RIP palette
  634.      defined by the RIP_SET_PALETTE command.  Here is the default 16-color
  635.      RIP palette:
  636.  
  637.           VALUE ... COLOR
  638.           -------------------------------------
  639.             00  ... Black (00 is always the background color)
  640.             01  ... Blue
  641.             02  ... Green
  642.             03  ... Cyan
  643.             04  ... Red
  644.             05  ... Magenta
  645.             06  ... Brown
  646.             07  ... Light Gray
  647.             08  ... Dark Gray
  648.             09  ... Light Blue
  649.             0A  ... Light Green
  650.             0B  ... Light Cyan
  651.             0C  ... Light Red
  652.             0D  ... Light Magenta
  653.             0E  ... Yellow
  654.             0F  ... White
  655.  
  656.  
  657.  
  658.  
  659.  
  660.      ---------------------------------------------------------------------
  661.      Set the 16-color RIP palette from the master 64-color EGA palette
  662.      ---------------------------------------------------------------------
  663.                Symbol: RIP_SET_PALETTE
  664.                 Level: 0
  665.               Command: Q
  666.             Arguments: c1:2, c2:2, ... c16:2
  667.                Format: !|Q <c1> <c2> ... <c16>
  668.               Example: !|Q000102030405060708090A0B0C0D0E0F
  669.       Uses Draw Color: YES
  670.       Uses Line Patrn: NO
  671.       Uses Line Thick: NO
  672.       Uses Fill Color: NO
  673.       Uses Fill Patrn: NO
  674.       Uses Write Mode: NO
  675.       Uses Font Sizes: NO
  676.  
  677.      This command modifies the 16-color RIP palette by choosing from the
  678.      64 colors in the master EGA palette.  This allows you to alter the
  679.      colors in your RIPscrip graphics scenes.  Once a Set Palette command
  680.      is processed, any colors on the screen that had their corresponding
  681.      palette entries changed will instantly switch to the new color set.
  682.      You may obtain color "cycling" effects by using this command.  The
  683.      default 16-color RIP palette is always restored when a
  684.      RIP_RESET_WINDOWS command is encountered.  The default 16-color RIP
  685.      palette is as follows:
  686.  
  687.                            MASTER
  688.           16-COLOR         64-COLOR
  689.           RIP PALETTE      EGA PALETTE
  690.           COLOR-CODE       COLOR-CODE    COLOR
  691.           -------------------------------------------------------
  692.               00            0  (00)      Black
  693.               01            1  (01)      Blue
  694.               02            2  (02)      Green
  695.               03            3  (03)      Cyan
  696.               04            4  (04)      Red
  697.               05            5  (05)      Magenta
  698.               06            7  (06)      Brown
  699.               07            20 (0K)      Light Gray
  700.               08            56 (1K)      Dark Gray
  701.               09            57 (1L)      Light Blue
  702.               0A            58 (1M)      Light Green
  703.               0B            59 (1N)      Light Cyan
  704.               0C            60 (1O)      Light Red
  705.               0D            61 (1P)      Light Magenta
  706.               0E            62 (1Q)      Yellow
  707.               0F            63 (1R)      White
  708.  
  709.      Color 00 of the 16-color RIP palette is always the background color
  710.      (which is typically Black, or color 00 of the 64-color EGA palette).
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.      ---------------------------------------------------------------------
  718.      Set one color of the 16-color RIP palette from the Master Palette
  719.      ---------------------------------------------------------------------
  720.                Symbol: RIP_ONE_PALETTE
  721.                 Level: 0
  722.               Command: a
  723.             Arguments: color:2 value:2
  724.                Format: !|a <color> <value>
  725.               Example: !|a051B
  726.       Uses Draw Color: YES
  727.       Uses Line Patrn: NO
  728.       Uses Line Thick: NO
  729.       Uses Fill Color: NO
  730.       Uses Fill Patrn: NO
  731.       Uses Write Mode: NO
  732.       Uses Font Sizes: NO
  733.  
  734.      This command modifies one color in the 16-color RIP palette.  The
  735.      Color number is sent along with the a color value from the Master
  736.      Color Palette to set the new color to.  The color <value> must be
  737.      in the range of 0-63 to allow access to the 64 colors in the master
  738.      EGA palette.  This allows you to alter the colors in your RIPscrip
  739.      graphics scenes.  Once a Set One Palette command is processed, any
  740.      colors on the screen that correspond to the <color> number will be
  741.      changed instantly to the new color value.  You may obtain color
  742.      "cycling" effects by using this command.  The default 16-color RIP
  743.      palette is always restored when a RIP_RESET_WINDOWS command is
  744.      encountered.  The default 16-color RIP palette is as follows:
  745.  
  746.                            MASTER
  747.           16-COLOR         64-COLOR
  748.           RIP PALETTE      EGA PALETTE
  749.           COLOR-CODE       COLOR-CODE    COLOR
  750.           -------------------------------------------------------
  751.               00            0  (00)      Black
  752.               01            1  (01)      Blue
  753.               02            2  (02)      Green
  754.               03            3  (03)      Cyan
  755.               04            4  (04)      Red
  756.               05            5  (05)      Magenta
  757.               06            7  (06)      Brown
  758.               07            20 (0K)      Light Gray
  759.               08            56 (1K)      Dark Gray
  760.               09            57 (1L)      Light Blue
  761.               0A            58 (1M)      Light Green
  762.               0B            59 (1N)      Light Cyan
  763.               0C            60 (1O)      Light Red
  764.               0D            61 (1P)      Light Magenta
  765.               0E            62 (1Q)      Yellow
  766.               0F            63 (1R)      White
  767.  
  768.      Color 00 of the 16-color RIP palette is always the background color
  769.      (which is typically Black, or color 00 of the 64-color EGA palette).
  770.  
  771.  
  772.  
  773.  
  774.  
  775.      ---------------------------------------------------------------------
  776.      Set Drawing Mode for graphics primitives
  777.      ---------------------------------------------------------------------
  778.                Symbol: RIP_WRITE_MODE
  779.                 Level: 0
  780.               Command: W
  781.             Arguments: mode:2
  782.                Format: !|W <mode>
  783.               Example: !|W00
  784.       Uses Draw Color: NO
  785.       Uses Line Patrn: NO
  786.       Uses Line Thick: NO
  787.       Uses Fill Color: NO
  788.       Uses Fill Patrn: NO
  789.       Uses Write Mode: YES
  790.       Uses Font Sizes: NO
  791.  
  792.      This command sets the current drawing mode for most of the graphics
  793.      primitives:
  794.  
  795.           mode = 00 ... Normal drawing mode (overwrite)
  796.                = 01 ... XOR (complimentary) mode
  797.  
  798.      In normal mode, things are drawn in the current drawing color over
  799.      top of whatever is in the graphics viewport.  This is the typical
  800.      mode of operation in a GUI environment.
  801.  
  802.      In the XOR mode, instead of changing each pixel to the current
  803.      drawing color, the pixel is inverted (black changes to white, red to
  804.      green, etc.).  Drawing the same item a second time erases it
  805.      completely.  This mode is useful for drawing something temporarily,
  806.      or for animation.  The Rubber Band mode of most paint programs uses a
  807.      mode like this.
  808.  
  809.  
  810.  
  811.  
  812.  
  813.      ---------------------------------------------------------------------
  814.      Move the current drawing position to (X,Y)
  815.      ---------------------------------------------------------------------
  816.                Symbol: RIP_MOVE
  817.                 Level: 0
  818.               Command: m
  819.             Arguments: x:2, y:2
  820.                Format: !|m <x> <y>
  821.               Example: !|m0509
  822.       Uses Draw Color: NO
  823.       Uses Line Patrn: NO
  824.       Uses Line Thick: NO
  825.       Uses Fill Color: NO
  826.       Uses Fill Patrn: NO
  827.       Uses Write Mode: NO
  828.       Uses Font Sizes: NO
  829.  
  830.      This command moves the current graphics drawing cursor to (x,y).  You
  831.      could use this to draw text at a certain point, but you'd probably
  832.      use RIP_TEXT_XY instead.  This command is primarily provided for
  833.      future development which will make use of its ability to relocate the
  834.      current drawing position without physically drawing anything.
  835.  
  836.  
  837.  
  838.  
  839.  
  840.      ---------------------------------------------------------------------
  841.      Draw Text in current Font/Size/Color at current location
  842.      ---------------------------------------------------------------------
  843.                Symbol: RIP_TEXT
  844.                 Level: 0
  845.               Command: T
  846.             Arguments: text-string
  847.                Format: !|T <text-string>
  848.               Example: !|Thello world
  849.       Uses Draw Color: YES
  850.       Uses Line Patrn: NO
  851.       Uses Line Thick: NO
  852.       Uses Fill Color: NO
  853.       Uses Fill Patrn: NO
  854.       Uses Write Mode: YES
  855.       Uses Font Sizes: YES
  856.  
  857.      This command displays text at the current location in the graphics
  858.      window, as set with the RIP_MOVE command.  The text is also affected
  859.      by the most recent settings of these commands:
  860.  
  861.           RIP_FONT_STYLE - font style (character set, direction, size)
  862.           RIP_WRITE_MODE - drawing mode (normal or XOR)
  863.           RIP_COLOR      - drawing color (from the 16-color RIP palette)
  864.  
  865.      The drawing position is placed at the end of the last character
  866.      drawn.
  867.  
  868.      The current drawing position is set immediately to the right of the
  869.      drawn text.  Subsequent Line, Circle or other such commands will not
  870.      affect this position.  This provides a means so that you can quickly
  871.      do another RIP_TEXT command (presumably in another color) at a later
  872.      time and have the text show up immediately after the previous text.
  873.  
  874.  
  875.  
  876.  
  877.  
  878.      ---------------------------------------------------------------------
  879.      Draw Text in current Font/Size/Color at specific location
  880.      ---------------------------------------------------------------------
  881.                Symbol: RIP_TEXT_XY
  882.                 Level: 0
  883.               Command: @
  884.             Arguments: x:2, y:2 and text-string
  885.                Format: !|@ <x> <y> <text-string>
  886.               Example: !|@0011hello world
  887.       Uses Draw Color: YES
  888.       Uses Line Patrn: NO
  889.       Uses Line Thick: NO
  890.       Uses Fill Color: NO
  891.       Uses Fill Patrn: NO
  892.       Uses Write Mode: YES
  893.       Uses Font Sizes: YES
  894.  
  895.      This command is an efficient combination of RIP_MOVE and RIP_TEXT.
  896.      The text is drawn at the specified location according to the same
  897.      settings as apply to RIP_TEXT (see above).
  898.  
  899.      The current drawing position is set immediately to the right of the
  900.      drawn text.  Subsequent Line, Circle or other such commands will not
  901.      affect this position.  This provides a means so that you can quickly
  902.      do another RIP_TEXT command (presumably in another color) at a later
  903.      time and have the text show up immediately after the previous text.
  904.  
  905.  
  906.  
  907.  
  908.  
  909.      ---------------------------------------------------------------------
  910.      Select the current Font Style, Orientation and Size
  911.      ---------------------------------------------------------------------
  912.                Symbol: RIP_FONT_STYLE
  913.                 Level: 0
  914.               Command: Y
  915.             Arguments: font:2, direction:2, size:2, res:2
  916.                Format: !|Y <font> <direction> <size> <res>
  917.               Example: !|Y01000400
  918.       Uses Draw Color: NO
  919.       Uses Line Patrn: NO
  920.       Uses Line Thick: NO
  921.       Uses Fill Color: NO
  922.       Uses Fill Patrn: NO
  923.       Uses Write Mode: NO
  924.       Uses Font Sizes: YES
  925.  
  926.      This command sets the current font, direction and size for subsequent
  927.      RIP_TEXT commands.
  928.  
  929.           FONT
  930.           ---------------------------------------------------------
  931.           00 ... Default 8x8 font (bit-mapped)
  932.           01 ... Triplex Font (scalable)
  933.           02 ... Small Font (scalable)
  934.           03 ... Sans Serif Font (scalable)
  935.           04 ... Gothic [old English] Font (scalable)
  936.  
  937.           DIRECTION
  938.           ---------------------------------------------------------
  939.           00 ... Horizontal direction
  940.           01 ... Vertical direction
  941.  
  942.           SIZE
  943.           ---------------------------------------------------------
  944.           01 ... Normal, default size
  945.           02 ... Magnification factor  2 ( x2)
  946.           03 ... Magnification factor  3 ( x3)
  947.           04 ... Magnification factor  4 ( x4)
  948.           05 ... Magnification factor  5 ( x5)
  949.           06 ... Magnification factor  6 ( x6)
  950.           07 ... Magnification factor  7 ( x7)
  951.           08 ... Magnification factor  8 ( x8)
  952.           09 ... Magnification factor  9 ( x9)
  953.           0A ... Magnification factor 10 (x10)
  954.  
  955.      NOTE:  The Default 8x8 font is bit-mapped and appears best when drawn
  956.      with size=1.  If you use a size greater than one, the individual
  957.      pixels making up the font are magnified, giving a jagged look.  This
  958.      may or may not be a desirable effect.  The Scalable Fonts (1-4) are
  959.      smooth scalable "vector" fonts.  The two byte <res> parameter is a
  960.      RESERVED parameter that is intended for future development.
  961.  
  962.  
  963.  
  964.  
  965.  
  966.      ---------------------------------------------------------------------
  967.      Draws a single pixel on the screen using current drawing color
  968.      ---------------------------------------------------------------------
  969.                Symbol: RIP_PIXEL
  970.                 Level: 0
  971.               Command: X
  972.             Arguments: x:2, y:2
  973.                Format: !|X <x> <y>
  974.               Example: !|X1122
  975.       Uses Draw Color: YES
  976.       Uses Line Patrn: NO
  977.       Uses Line Thick: NO
  978.       Uses Fill Color: NO
  979.       Uses Fill Patrn: NO
  980.       Uses Write Mode: NO
  981.       Uses Font Sizes: NO
  982.  
  983.      This command will draw a single pixel in the current drawing color at
  984.      the given (x,y) graphics position.  This command is included for
  985.      completeness, but in practice it would be extremely inefficient to
  986.      make much use of it.
  987.  
  988.  
  989.  
  990.  
  991.  
  992.      ---------------------------------------------------------------------
  993.      Draw a line in the current color and line style/thickness
  994.      ---------------------------------------------------------------------
  995.                Symbol: RIP_LINE
  996.                 Level: 0
  997.               Command: L
  998.             Arguments: x0:2, y0:2, x1:2, y1:2
  999.                Format: !|L <x0> <y0> <x1> <y1>
  1000.               Example: !|L00010A0E
  1001.       Uses Draw Color: YES
  1002.       Uses Line Patrn: YES
  1003.       Uses Line Thick: YES
  1004.       Uses Fill Color: NO
  1005.       Uses Fill Patrn: NO
  1006.       Uses Write Mode: YES
  1007.       Uses Font Sizes: NO
  1008.  
  1009.      This command will draw a line in the current drawing color, using the
  1010.      current line style, pattern and thickness.  The line is drawn from
  1011.      (x0,y0) to (x1,y1) in the graphics viewport.
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.      ---------------------------------------------------------------------
  1018.      Draw a rectangle in the current color and line style/thickness
  1019.      ---------------------------------------------------------------------
  1020.                Symbol: RIP_RECTANGLE
  1021.                 Level: 0
  1022.               Command: R
  1023.             Arguments: x0:2, y0:2, x1:2, y1:2
  1024.                Format: !|R <x0> <y0> <x1> <y1>
  1025.               Example: !|R00010A0E
  1026.       Uses Draw Color: YES
  1027.       Uses Line Patrn: YES
  1028.       Uses Line Thick: YES
  1029.       Uses Fill Color: NO
  1030.       Uses Fill Patrn: NO
  1031.       Uses Write Mode: YES
  1032.       Uses Font Sizes: NO
  1033.  
  1034.      This command draws a rectangle in the current drawing color, using
  1035.      the current line style, pattern and thickness.  (x0,y0) and (x1,y1)
  1036.      are any two opposing corners of the rectangle.  If x0=x1 or y0=y1
  1037.      then the command will draw a single vertical or horizontal line.  The
  1038.      rectangle interior is not filled by RIP_RECTANGLE.
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.      ---------------------------------------------------------------------
  1045.      Draws a solid, filled rectangle using current fill color and pattern
  1046.      ---------------------------------------------------------------------
  1047.                Symbol: RIP_BAR
  1048.                 Level: 0
  1049.               Command: B
  1050.             Arguments: x0:2, y0:2, x1:2, y1:2
  1051.                Format: !|B <x0> <y0> <x1> <y1>
  1052.               Example: !|B00010A0E
  1053.       Uses Draw Color: NO
  1054.       Uses Line Patrn: NO
  1055.       Uses Line Thick: NO
  1056.       Uses Fill Color: YES
  1057.       Uses Fill Patrn: YES
  1058.       Uses Write Mode: NO
  1059.       Uses Font Sizes: NO
  1060.  
  1061.      This command fills a rectangular region with the current fill color
  1062.      and pattern.  No border is drawn.
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.      ---------------------------------------------------------------------
  1069.      Draw a circle in the current color and line thickness (no style)
  1070.      ---------------------------------------------------------------------
  1071.                Symbol: RIP_CIRCLE
  1072.                 Level: 0
  1073.               Command: C
  1074.             Arguments: x_center:2, y_center:2, radius:2
  1075.                Format: !|C <x_center> <y_center> <radius>
  1076.               Example: !|C1E180M
  1077.       Uses Draw Color: YES
  1078.       Uses Line Patrn: NO
  1079.       Uses Line Thick: YES
  1080.       Uses Fill Color: NO
  1081.       Uses Fill Patrn: NO
  1082.       Uses Write Mode: NO
  1083.       Uses Font Sizes: NO
  1084.  
  1085.      This command draws a circle in the current drawing color and line
  1086.      thickness.  The <radius> is in pixel units.  This command understands
  1087.      aspect ratios and will draw a truly circular circle instead of an
  1088.      oblong circle (ellipse) like on other graphics systems.  The aspect
  1089.      ratio is currently based on the EGA 640x350 resolution and is
  1090.      understood by both the GUI designer and the Terminal Program.  This
  1091.      command does not take advantage of line patterns, but does use the
  1092.      line thickness setting.  In other words, you can draw a circle with a
  1093.      thick or a thin border, but not a dashed or dotted border.
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.      ---------------------------------------------------------------------
  1100.      Draw an elliptical arc in the current color and line thickness
  1101.      ---------------------------------------------------------------------
  1102.                Symbol: RIP_OVAL
  1103.                 Level: 0
  1104.               Command: O
  1105.             Arguments: x:2, y:2, st_ang:2, end_ang:2, x_rad:2, y_rad:2
  1106.                Format: !|O <x> <y> <st_ang> <end_ang> <x_rad> <y_rad>
  1107.               Example: 1E1A18003G150Z
  1108.       Uses Draw Color: YES
  1109.       Uses Line Patrn: NO
  1110.       Uses Line Thick: YES
  1111.       Uses Fill Color: NO
  1112.       Uses Fill Patrn: NO
  1113.       Uses Write Mode: NO
  1114.       Uses Font Sizes: NO
  1115.  
  1116.      This command draws an elliptical arc similar to the circular RIP_ARC
  1117.      command.  The center of the ellipse is (x,y) and the arc is
  1118.      drawn starting from <st_ang> and proceeding counterclockwise to
  1119.      <end_ang> (see RIP_ARC above for details).
  1120.  
  1121.      The X radius is half the full width of the ellipse, the Y radius is
  1122.      half the full height.  The ellipse is drawn according to the current
  1123.      line thickness, but the current line pattern has no effect.
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.      ---------------------------------------------------------------------
  1130.      Draws a filled ellipse using the current fill and drawing color
  1131.      ---------------------------------------------------------------------
  1132.                Symbol: RIP_FILLED_OVAL
  1133.                 Level: 0
  1134.               Command: o
  1135.             Arguments: x_center:2, y_center:2, x_rad:2, y_rad:2
  1136.                Format: !|o <x_center> <y_center> <x_rad> <y_rad>
  1137.               Example: !|o1G2B0M0G
  1138.       Uses Draw Color: YES
  1139.       Uses Line Patrn: NO
  1140.       Uses Line Thick: YES
  1141.       Uses Fill Color: YES
  1142.       Uses Fill Patrn: YES
  1143.       Uses Write Mode: NO
  1144.       Uses Font Sizes: NO
  1145.  
  1146.      This command draws a complete filled ellipse on the screen.  The
  1147.      interior of the ellipse is drawn using the current fill pattern and
  1148.      fill color.  The outline of the ellipse is drawn using the current
  1149.      drawing color and line thickness.
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.      ---------------------------------------------------------------------
  1156.      Draw a circular arc in the current color and line thickness
  1157.      ---------------------------------------------------------------------
  1158.                Symbol: RIP_ARC
  1159.                 Level: 0
  1160.               Command: A
  1161.             Arguments: x:2, y:2, start_ang:2, end_ang:2, radius:2
  1162.                Format: !|A <x> <y> <start_ang> <end_ang> <radius>
  1163.               Example: !|A1E18003G15
  1164.       Uses Draw Color: YES
  1165.       Uses Line Patrn: NO
  1166.       Uses Line Thick: YES
  1167.       Uses Fill Color: NO
  1168.       Uses Fill Patrn: NO
  1169.       Uses Write Mode: NO
  1170.       Uses Font Sizes: NO
  1171.  
  1172.      This command draws a circular arc, or a segment of a circle.  Drawing
  1173.      begins at <start_ang> and terminates at <end_ang>.  The angles are
  1174.      represented starting at zero for the 3 o'clock position and
  1175.      increasing counterclockwise through a full circle to 360:
  1176.  
  1177.                                90
  1178.                                 |
  1179.                           180---|--- 0
  1180.                                 |
  1181.                                270
  1182.  
  1183.      The arc drawing begins at the <start_angle> and continues counter-
  1184.      clockwise to the <end_angle>.  A full circle will be displayed if
  1185.      <start_ang>=0 and <end_ang>=360.  This command recognizes aspect
  1186.      ratios like the circle command does.  It does not take advantage of
  1187.      line patterns but does comply with line thickness.
  1188.  
  1189.      If both angles are equal, nothing is drawn.
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.      ---------------------------------------------------------------------
  1196.      Draw an Elliptical Arc
  1197.      ---------------------------------------------------------------------
  1198.                Symbol: RIP_OVAL_ARC
  1199.                 Level: 0
  1200.               Command: V
  1201.             Arguments: x:2, y:2, st_ang:2, e_ang:2, radx:2 rady:2
  1202.                Format: !|A <x> <y> <st_ang> <e_ang> <radx> <rady>
  1203.               Example: !|A1E18003G151Q
  1204.       Uses Draw Color: YES
  1205.       Uses Line Patrn: NO
  1206.       Uses Line Thick: YES
  1207.       Uses Fill Color: NO
  1208.       Uses Fill Patrn: NO
  1209.       Uses Write Mode: NO
  1210.       Uses Font Sizes: NO
  1211.  
  1212.      This command draws an elliptical arc, or a segment of an ellipse.
  1213.      Drawing begins at <st_ang> and terminates at <e_ang>.  The angles are
  1214.      represented starting at zero for 3 o'clock position and increasing
  1215.      counterclockwise through a full ellipse at 360 degrees:
  1216.  
  1217.                                90
  1218.                                 |
  1219.                           180---|--- 0
  1220.                                 |
  1221.                                270
  1222.  
  1223.      The arc drawing begins at the <st_ang> and continues counterclockwise
  1224.      to the <e_ang>.  A complete ellipsewill be displayed if <st_ang>=0
  1225.      and <e_ang>=360.  This command does not utilize "aspect ratios"
  1226.      because of the nature of an Ellipse.  It does not take advantage of
  1227.      line patterns but does comply with line thickness.
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.      ---------------------------------------------------------------------
  1234.      Draw a circular Pie Slice
  1235.      ---------------------------------------------------------------------
  1236.                Symbol: RIP_PIE_SLICE
  1237.                 Level: 0
  1238.               Command: I
  1239.             Arguments: x:2, y:2, start_ang:2, end_ang:2, radius:2
  1240.                Format: !|A <x> <y> <start_ang> <end_ang> <radius>
  1241.               Example: !|A1E18003G15
  1242.       Uses Draw Color: YES
  1243.       Uses Line Patrn: NO
  1244.       Uses Line Thick: YES
  1245.       Uses Fill Color: YES
  1246.       Uses Fill Patrn: YES
  1247.       Uses Write Mode: NO
  1248.       Uses Font Sizes: NO
  1249.  
  1250.      This command draws a "pie slice".  The slice is circular.  It obeys
  1251.      all of the same commands as the Arc command described above.  The
  1252.      ends of the arc are connected to the Center-Point of the Arc with two
  1253.      straight lines.  These two lines converge at the Center-Point.  The
  1254.      interior of the Slice is filled with the current Fill Color and
  1255.      Pattern.  The exterior (outline) of the Slice is drawn using the
  1256.      current drawing color and line thickness.  The Line Pattern feature
  1257.      does not apply to this command.
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.      ---------------------------------------------------------------------
  1264.      Draw an Elliptical Pie Slice
  1265.      ---------------------------------------------------------------------
  1266.                Symbol: RIP_OVAL_PIE_SLICE
  1267.                 Level: 0
  1268.               Command: i
  1269.             Arguments: x:2, y:2, st_ang:2, e_ang:2, radx:2 rady:2
  1270.                Format: !|A <x> <y> <st_ang> <e_ang> <radx> <rady>
  1271.               Example: !|A1E18003G151Q
  1272.       Uses Draw Color: YES
  1273.       Uses Line Patrn: NO
  1274.       Uses Line Thick: YES
  1275.       Uses Fill Color: YES
  1276.       Uses Fill Patrn: YES
  1277.       Uses Write Mode: NO
  1278.       Uses Font Sizes: NO
  1279.  
  1280.      This command draws an  "elliptical pie slice".  It obeys all of the
  1281.      same commands as the Elliptical Arc command described above.  The
  1282.      ends of the arc are connected to the Center-Point of the Arc with two
  1283.      straight lines.  These two lines converge at the Center-Point.  The
  1284.      interior of the Slice is filled with the current Fill Color and
  1285.      Pattern.  The exterior (outline) of the Slice is drawn using the
  1286.      current drawing color and line thickness.  The Line Pattern feature
  1287.      does not apply to this command.
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.      ---------------------------------------------------------------------
  1294.      Draw a custom "Bezier" curve
  1295.      ---------------------------------------------------------------------
  1296.                Symbol: RIP_BEZIER
  1297.                 Level: 0
  1298.               Command: Z
  1299.             Arguments: x1:2 y1:2  x2:2 y2:2  x3:2 y3:2  x4:2 y4:2  cnt:2
  1300.                Format: !|Z <x1> <y1> <x2> <y2> <x3> <y3> <x4> <y4> <cnt>
  1301.               Example: !|Z0A0B0C0D0E0F0G0H1G
  1302.       Uses Draw Color: YES
  1303.       Uses Line Patrn: YES
  1304.       Uses Line Thick: YES
  1305.       Uses Fill Color: NO
  1306.       Uses Fill Patrn: NO
  1307.       Uses Write Mode: YES
  1308.       Uses Font Sizes: NO
  1309.  
  1310.      This command provides customizable Curves.  Four "control points" are
  1311.      used to create the shape of the curve.  The curves beginning point is
  1312.      at point (x1,y1) and it ends at (x4,y4).  Points (x2,y2) and (x3,y3)
  1313.      are not necessarily "on" the curve, but are used to "pull" the curve
  1314.      in their direction.  The diagram below indicates how points 2 and 3
  1315.      can be utilized to form the desired curve.  Note that points 2 and 3
  1316.      are not actually "on" the curve, but points 1 and 4 are.
  1317.  
  1318.                           X2
  1319.  
  1320.                          *****
  1321.                        **     ****
  1322.                       *           **            X4
  1323.                      *              **          *
  1324.                    X1                 *       **
  1325.                                        *    **
  1326.                                         ****
  1327.  
  1328.                                          X3
  1329.  
  1330.      NOTE: That points 2 and 3 are not actually "on" the curve, but points
  1331.            1 and 4 are.
  1332.  
  1333.      The last parameter of this command is the <cnt> parameter.  This
  1334.      determines how many "segments" the curve should be drawn in.  Each
  1335.      segment is in fact, a straight line.  The more segments you allow,
  1336.      the smoother the curve may be.  If a curve does not have a
  1337.      significant amount of "curviness" then a low "count" can improve
  1338.      performance of the curve drawing.  Bezier Curves use "floating point"
  1339.      math internally for its processing.  All paramters specified for this
  1340.      command are simple integers however.
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.      ---------------------------------------------------------------------
  1347.      Draws a polygon using the current color and line style/thickness
  1348.      ---------------------------------------------------------------------
  1349.                Symbol: RIP_POLYGON
  1350.                 Level: 0
  1351.               Command: P
  1352.             Arguments: npoints:2, x1:2, y1:2, ... xn:2, yn:2
  1353.                Format: !|P <npoints> <x1> <y1> ... <xn> <yn>
  1354.               Example: !|P03010105090905
  1355.       Uses Draw Color: YES
  1356.       Uses Line Patrn: YES
  1357.       Uses Line Thick: YES
  1358.       Uses Fill Color: NO
  1359.       Uses Fill Patrn: NO
  1360.       Uses Write Mode: YES
  1361.       Uses Font Sizes: NO
  1362.  
  1363.      This command will draw a multi-sided closed polygon.  The polygon is
  1364.      drawn using the current drawing color, line pattern and thickness.
  1365.      The <npoints> parameter is between 2 and 512 and indicates how many
  1366.      (x,y) coordinate pairs will follow, which is also the number of sides
  1367.      of the polygon.  The polygon interior is not filled by RIP_POLYGON.
  1368.  
  1369.      The polygon is enclosed by the last vertex between xn,yn and x1,y1.
  1370.      In other words, you do not have to connect the end to the beginning -
  1371.      it is automatically done for you.
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.      ---------------------------------------------------------------------
  1378.      Draws a filled polygon, using drawing color, current fill settings
  1379.      ---------------------------------------------------------------------
  1380.                Symbol: RIP_FILL_POLY
  1381.                 Level: 0
  1382.               Command: p
  1383.             Arguments: npoints:2, x1:2, y1:2, ... xn:2, yn:2
  1384.                Format: !|p <npoints> <x1> <y1> ... <xn> <yn>
  1385.               Example: !|p03010105050909
  1386.       Uses Draw Color: YES
  1387.       Uses Line Patrn: YES
  1388.       Uses Line Thick: YES
  1389.       Uses Fill Color: YES
  1390.       Uses Fill Patrn: YES
  1391.       Uses Write Mode: YES
  1392.       Uses Font Sizes: NO
  1393.  
  1394.      This command is identical to RIP_POLYGON, except that the interior of
  1395.      the polygon is filled with the current fill color and fill pattern.
  1396.      The actual outline of the polygon is drawn using the current drawing
  1397.      color, line pattern and thickness.
  1398.  
  1399.      NOTE:  You will get unusual effects if the lines of the polygon
  1400.      overlap, creating a polygon with internal "gaps".  (The rule is
  1401.      this:  regions that are "inside" the polygon an even number of times
  1402.      due to overlap are NOT filled.)  The interior fill does not utilize
  1403.      Write Mode, but the outline of the polygon does.
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.      ---------------------------------------------------------------------
  1410.      Flood Fills a given area of the screen with the current fill settings
  1411.      ---------------------------------------------------------------------
  1412.                Symbol: RIP_FILL
  1413.                 Level: 0
  1414.               Command: F
  1415.             Arguments: x:2, y:2, border:2
  1416.                Format: !|F <x> <y> <border>
  1417.               Example: !|F25090F
  1418.       Uses Draw Color: NO
  1419.       Uses Line Patrn: NO
  1420.       Uses Line Thick: NO
  1421.       Uses Fill Color: YES
  1422.       Uses Fill Patrn: YES
  1423.       Uses Write Mode: NO
  1424.       Uses Font Sizes: NO
  1425.  
  1426.      This command performs a "flood fill" emanating from the given <x,y>
  1427.      point.  The fill "oozes" in all directions up to <border> color, but
  1428.      the border itself is not changed.  Whatever is inside the border
  1429.      that's not the border color gets changed to the current fill color
  1430.      and fill pattern.  If the border color does not completely enclose
  1431.      the <x,y> point, the fill will continue to the edges of the viewport.
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.      ---------------------------------------------------------------------
  1438.      Defines a line style and thickness
  1439.      ---------------------------------------------------------------------
  1440.                Symbol: RIP_LINE_STYLE
  1441.                 Level: 0
  1442.               Command: =
  1443.             Arguments: style:2, user_pat:4, thick:2
  1444.                Format: !|= <style> <user_pat> <thick>
  1445.               Example: !|=01000001
  1446.       Uses Draw Color: NO
  1447.       Uses Line Patrn: YES
  1448.       Uses Line Thick: YES
  1449.       Uses Fill Color: NO
  1450.       Uses Fill Patrn: NO
  1451.       Uses Write Mode: NO
  1452.       Uses Font Sizes: NO
  1453.  
  1454.      This command establishes the current line pattern and thickness for
  1455.      many subsequent graphics primitive commands.  There are four built-in
  1456.      line styles plus provisions for custom line patterns.
  1457.  
  1458.  
  1459.           STYLE
  1460.           =================================================
  1461.             00 ... Normal, Solid Line
  1462.             01 ... Dotted Line
  1463.             02 ... Centered Line
  1464.             03 ... Dashed Line
  1465.             04 ... Custom Defined line (see about <user_pat> below)
  1466.  
  1467.           THICK (these are the only available settings)
  1468.           =================================================
  1469.             01 ... Lines are 1 pixel wide
  1470.             03 ... Lines are 3 pixels wide
  1471.  
  1472.      If the <style> is set to a value of 4 (custom pattern), then the
  1473.      <user_pat> parameter is used as a 16-bit representation of the pixels
  1474.      in the line pattern.  For example:
  1475.  
  1476.  
  1477.               repeating                                            Mega-
  1478.            <---pattern---->   Binary coding       Hex    Decimal   num
  1479.  
  1480.            - - - - - - - -    1010101010101010    AAAA   43690     0XPM
  1481.  
  1482.            ----    ----       1111000011110000    F0F0   61680     1BLC
  1483.  
  1484.  
  1485.      So, the most-significant-bit of <user_pat> is toward the starting
  1486.      point of the line or border that uses this fill pattern.  If the
  1487.      <style> parameter is not 4, then the <user_pat> parameter is ignored.
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.      ---------------------------------------------------------------------
  1494.      Sets the current fill style (predefined patterns), and fill color
  1495.      ---------------------------------------------------------------------
  1496.                Symbol: RIP_FILL_STYLE
  1497.                 Level: 0
  1498.               Command: S
  1499.             Arguments: pattern:2, color:2
  1500.                Format: !|S <pattern> <color>
  1501.               Example: !|S050F
  1502.       Uses Draw Color: NO
  1503.       Uses Line Patrn: NO
  1504.       Uses Line Thick: NO
  1505.       Uses Fill Color: YES
  1506.       Uses Fill Patrn: YES
  1507.       Uses Write Mode: NO
  1508.       Uses Font Sizes: NO
  1509.  
  1510.      This command defines the current fill pattern and fill color for use
  1511.      in subsequent graphics fill operations.  There are twelve (12)
  1512.      predefined fill patterns.  They are:
  1513.  
  1514.           PATTERN DESCRIPTION
  1515.           ==============================================================
  1516.             00    Fill with background color (color #0)
  1517.             01    Solid Fill (fill color)
  1518.             02    Line Fill ................. ----------- (thick lines)
  1519.             03    Light Slash Fill .......... /  /  /  /  (thin lines)
  1520.             04    Normal Slash Fill ......... // // // // (thick lines)
  1521.             05    Normal Backslash Fill ..... \\ \\ \\ \\ (thick lines)
  1522.             06    Light Backslash Fill ...... \  \  \  \  (thin lines)
  1523.             07    Light Hatch Fill .......... ########### (thin lines)
  1524.             08    Heavy Cross Hatch Fill .... XXXXXXXXXXX (thin lines)
  1525.             09    Interleaving Line Fill .... +-+-+-+-+-+ (thin lines)
  1526.             0A    Widely spaced dot fill .... . : . : . : (pixels only)
  1527.             0B    Closely spaced dot fill ... ::::::::::: (pixels only)
  1528.  
  1529.      The <color> parameter is the fill color for subsequent fill commands.
  1530.      The "active" pixels of the pattern become this color.  The "inactive"
  1531.      pixels become the current background color (color 00, typically
  1532.      black).  Fill pattern 00 will set the entire fill area to the
  1533.      background color.  (In this special case, the fill color doesn't
  1534.      matter.)
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.      ---------------------------------------------------------------------
  1541.      Sets a user-definable fill pattern (custom) and fill color
  1542.      ---------------------------------------------------------------------
  1543.                Symbol: RIP_FILL_PATTERN
  1544.                 Level: 0
  1545.               Command: s
  1546.             Arguments: c1:2 c2:2 c3:2 c4:2 c5:2 c6:2 c7:2 c8:2 color:2
  1547.                Format: !|s <c1> <c2> <c3> <c4> <c5> <c6> <c7> <c8> <color>
  1548.               Example: !|s11223344556677880F
  1549.       Uses Draw Color: NO
  1550.       Uses Line Patrn: NO
  1551.       Uses Line Thick: NO
  1552.       Uses Fill Color: YES
  1553.       Uses Fill Patrn: YES
  1554.       Uses Write Mode: NO
  1555.       Uses Font Sizes: NO
  1556.  
  1557.      This command allows you to specify a user-defined, custom Fill
  1558.      Pattern.  This pattern supersedes the predefined patterns of
  1559.      RIP_FILL_STYLE.  A custom fill pattern is an 8x8 pixel array defining
  1560.      which pixels should be drawn in the current fill color (as set by the
  1561.      <color> parameter here).  The other pixels in the fill area are set
  1562.      to the current background color (color 00, typically black).
  1563.  
  1564.      Each of the eight parameters of this command, <c1> through <c8>
  1565.      represent bit-patterns for a line of the 8x8 pixel array.  Each line
  1566.      is comprised of 8 pixels.  The value of each parameter is the binary
  1567.      representation of these 8 pixels as follows:
  1568.  
  1569.           bit   7   6   5   4   3   2   1   0
  1570.               +-------------------------------+
  1571.           c1  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1572.               +-------------------------------+
  1573.           c2  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1574.               +-------------------------------+
  1575.           c3  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1576.               +-------------------------------+
  1577.           c4  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1578.               +-------------------------------+
  1579.           c5  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1580.               +-------------------------------+
  1581.           c6  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1582.               +-------------------------------+
  1583.           c7  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1584.               +-------------------------------+
  1585.           c8  |128| 64| 32| 16| 8 | 4 | 2 | 1 |
  1586.               +-------------------------------+
  1587.  
  1588.      So, c1 is the top, and the most-significant bit is to the left.
  1589.  
  1590.      NOTE: The RIP_FILL_STYLE (predefined fill patterns) and this
  1591.      RIP_FILL_PATTERN (custom fill patterns) completely override one
  1592.      another's effects.
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  
  1598.      ---------------------------------------------------------------------
  1599.      Defines a rectangular "hot" Mouse Region on screen
  1600.      ---------------------------------------------------------------------
  1601.                Symbol: RIP_MOUSE
  1602.                 Level: 1
  1603.               Command: M
  1604.             Arguments: num:2  x0:2 y0:2  x1:2 y1:2  clk:1 clr:1 res:5 text
  1605.                Format: !|1M <num> <x0><y0> <x1><y1> <clk><clr><res> <text>
  1606.               Example: !|1M00001122331100000host command^M
  1607.       Uses Draw Color: NO
  1608.       Uses Line Patrn: NO
  1609.       Uses Line Thick: NO
  1610.       Uses Fill Color: NO
  1611.       Uses Fill Patrn: NO
  1612.       Uses Write Mode: NO
  1613.       Uses Font Sizes: NO
  1614.  
  1615.      This command ties together three things:
  1616.  
  1617.           A region on the screen
  1618.           A mouse-click event
  1619.           A string of text to be transmitted by the terminal.
  1620.  
  1621.      This command defines a rectangular region on the screen that functions
  1622.      as a "hot" mouse area.  If the user clicks the [left] mouse button
  1623.      while pointing inside the region, then the terminal must transmit the
  1624.      <text> string to the Host.  The (x0,y0) parameter MUST be the
  1625.      upper-left corner, and (x1,y1) MUST be the lower-right corner of the
  1626.      region.
  1627.  
  1628.      The <clk> parameter, if 1, indicates that the region should be
  1629.      visibly inverted while the mouse button is down.  This offers visual
  1630.      feedback.  If <clk> is 0, the region will not be inverted while
  1631.      clicked.
  1632.  
  1633.      The <clr> parameter, if 1, will physically zoom the text window to
  1634.      full screen size and clear the screen.  This is useful if the <text>
  1635.      parameter instructs the host to enter an area of the System that
  1636.      doesn't support RIPscrip graphics.
  1637.  
  1638.      The <text> parameter is a Host command that gets sent when the field
  1639.      is clicked.  You may use a caret (^) to represent control characters,
  1640.      (eg, ^M for carriage return, ^G, ^C, etc).
  1641.  
  1642.      NOTE: You are limited to a maximum of 128 Mouse Regions.  In addition,
  1643.            the 5-byte <res> parameter is RESERVED FOR FUTURE USE, and
  1644.            should be set to zeros (00000).
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.      ---------------------------------------------------------------------
  1651.      Destroys all previously defined "hot" Mouse Regions
  1652.      ---------------------------------------------------------------------
  1653.                Symbol: RIP_KILL_MOUSE_FIELDS
  1654.                 Level: 1
  1655.               Command: K
  1656.             Arguments: <none>
  1657.                Format: !|1K
  1658.               Example: !|1K
  1659.       Uses Draw Color: NO
  1660.       Uses Line Patrn: NO
  1661.       Uses Line Thick: NO
  1662.       Uses Fill Color: NO
  1663.       Uses Fill Patrn: NO
  1664.       Uses Write Mode: NO
  1665.       Uses Font Sizes: NO
  1666.  
  1667.      This command will "forget" all Mouse Regions.  Use it at the beginning
  1668.      of each Scene, so that one scene's Mouse Regions don't get used in
  1669.      another.
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.      ---------------------------------------------------------------------
  1676.      Define a rectangular Text Region
  1677.      ---------------------------------------------------------------------
  1678.                Symbol: RIP_BEGIN_TEXT
  1679.                 Level: 1
  1680.               Command: T
  1681.             Arguments: x1:2, y1:2, x2:2, y2:2, res:2
  1682.                Format: !|1T <x1> <y1> <x2> <y2> <res>
  1683.               Example: !|1T00110011
  1684.       Uses Draw Color: NO
  1685.       Uses Line Patrn: NO
  1686.       Uses Line Thick: NO
  1687.       Uses Fill Color: NO
  1688.       Uses Fill Patrn: NO
  1689.       Uses Write Mode: NO
  1690.       Uses Font Sizes: NO
  1691.  
  1692.      This command defines a rectangular portion of the graphics viewport
  1693.      that is to display text, usually a long stream of text.  Following
  1694.      this command should be a number of RIP_REGION_TEXT commands with the
  1695.      text to be displayed.  The RIP_END_TEXT terminates this stream of
  1696.      text, something like this:
  1697.  
  1698.           RIP_BEGIN_TEXT
  1699.              RIP_REGION_TEXT
  1700.              RIP_REGION_TEXT
  1701.              RIP_REGION_TEXT
  1702.              :
  1703.              RIP_REGION_TEXT
  1704.           RIP_END_TEXT
  1705.  
  1706.      There must be at least one RIP_REGION_TEXT command in between the
  1707.      header and the footer.  There may be as many as needed.
  1708.  
  1709.      These commands ignore the current font "direction"; all text is
  1710.      always displayed horizontally.
  1711.  
  1712.      NOTE:  The "res" parameter is two bytes wide and is RESERVED for
  1713.             future use.
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.      ---------------------------------------------------------------------
  1720.      Display a line of text in the rectangular Text Region
  1721.      ---------------------------------------------------------------------
  1722.                Symbol: RIP_REGION_TEXT
  1723.                 Level: 1
  1724.               Command: t
  1725.             Arguments: justify:1 and text-string
  1726.                Format: !|1t <justify> <text-string>
  1727.               Example: !|1t1This is a text line to be justified
  1728.       Uses Draw Color: YES
  1729.       Uses Line Patrn: NO
  1730.       Uses Line Thick: NO
  1731.       Uses Fill Color: NO
  1732.       Uses Fill Patrn: NO
  1733.       Uses Write Mode: YES
  1734.       Uses Font Sizes: YES
  1735.  
  1736.      A number of these commands may come sandwiched between the
  1737.      RIP_BEGIN_TEXT and RIP_END_TEXT commands.  The <text-string> is
  1738.      already word-wrapped in such a way that it will fit inside the
  1739.      rectangular region based on the current font, font size, and drawing
  1740.      color.
  1741.  
  1742.      There are two possible settings for the <justify> parameter:
  1743.  
  1744.           0 ... Don't right/left justify.  Left-justify only
  1745.  
  1746.           1 ... Perform right/left margin justification of this line
  1747.                 of text except for the last line of a paragraph and
  1748.                 sets of indented lines.
  1749.  
  1750.      If a text line falls off the bottom of the region, it is discarded --
  1751.      the rectangular Text Region does not scroll.
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.      ---------------------------------------------------------------------
  1758.      End a rectangular Text Region
  1759.      ---------------------------------------------------------------------
  1760.                Symbol: RIP_END_TEXT
  1761.                 Level: 1
  1762.               Command: E
  1763.             Arguments: <none>
  1764.                Format: !|1E
  1765.               Example: !|1E
  1766.       Uses Draw Color: NO
  1767.       Uses Line Patrn: NO
  1768.       Uses Line Thick: NO
  1769.       Uses Fill Color: NO
  1770.       Uses Fill Patrn: NO
  1771.       Uses Write Mode: NO
  1772.       Uses Font Sizes: NO
  1773.  
  1774.      This command indicates the end of a formatted text block.  Only one
  1775.      of these "end" commands is necessary for each block.
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.      ---------------------------------------------------------------------
  1782.      Copies a rectangular screen image onto the Clipboard (as an Icon)
  1783.      ---------------------------------------------------------------------
  1784.                Symbol: RIP_GET_IMAGE
  1785.                 Level: 1
  1786.               Command: C
  1787.             Arguments: x0:2, y0:2, x1:2, y1:2, res:1
  1788.                Format: !|1C <x0> <y0> <x1> <y1> <res>
  1789.               Example: !|1C001122330
  1790.       Uses Draw Color: NO
  1791.       Uses Line Patrn: NO
  1792.       Uses Line Thick: NO
  1793.       Uses Fill Color: NO
  1794.       Uses Fill Patrn: NO
  1795.       Uses Write Mode: NO
  1796.       Uses Font Sizes: NO
  1797.  
  1798.      This command instructs the terminal program to copy the rectangular
  1799.      region defined by (x0,y0) to (x1,y1) onto an internal Clipboard for
  1800.      future use.  This combined with the Paste Clipboard command can
  1801.      provide an extremely powerful and efficient mechanism to avoid
  1802.      baud-rate bandwidth limitations.  The (x0,y0) parameter MUST specify
  1803.      the upper-left corner of the region and the (x1,y1) parameter MUST
  1804.      specify the lower-right corner.  If the indicated coordinates are in
  1805.      anyway invalid, the command is ignored.  The Clipboard is completely
  1806.      overwritten by this command (the previous contents are lost).
  1807.  
  1808.      NOTE: The <res> parameter is RESERVED FOR FUTURE USE and should be
  1809.            set to zero.
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.      ---------------------------------------------------------------------
  1816.      Pastes the clipboard (Icon) contents onto the screen
  1817.      ---------------------------------------------------------------------
  1818.                Symbol: RIP_PUT_IMAGE
  1819.                 Level: 1
  1820.               Command: P
  1821.             Arguments: x:2, y:2, mode:2, res:1
  1822.                Format: !|1P <x> <y> <mode> <res>
  1823.               Example: !|1P0011010
  1824.       Uses Draw Color: NO
  1825.       Uses Line Patrn: NO
  1826.       Uses Line Thick: NO
  1827.       Uses Fill Color: NO
  1828.       Uses Fill Patrn: NO
  1829.       Uses Write Mode: NO
  1830.       Uses Font Sizes: NO
  1831.  
  1832.      This command takes the contents of the Clipboard (if any) and pastes
  1833.      the image onto the screen starting at the upper-left corner of the
  1834.      image of (x,y).  If the right edge of the image would go off-screen,
  1835.      the paste command is ignored.  The Height and Width of the clipboard
  1836.      image is recorded on the Clipboard, so this command doesn't need to
  1837.      supply it.
  1838.  
  1839.      The <mode> parameter defines "how" the image will be pasted on the
  1840.      screen:
  1841.  
  1842.          MODE DESCRIPTION
  1843.          ==============================================================
  1844.            00 Paste the image on-screen normally                 (COPY)
  1845.            01 Exclusive-OR  image with the one already on screen (XOR)
  1846.            02 Logically OR  image with the one already on screen (OR)
  1847.            03 Logically AND image with the one already on screen (AND)
  1848.            04 Paste the inverse of the image on the screen       (NOT)
  1849.  
  1850.      NOTE: The 1-byte <res> parameter is RESERVED FOR FUTURE USE and
  1851.            should be set to zero.
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.      ---------------------------------------------------------------------
  1858.      Writes the contents of the Clipboard (Icon) to disk
  1859.      ---------------------------------------------------------------------
  1860.                Symbol: RIP_WRITE_ICON
  1861.                 Level: 1
  1862.               Command: W
  1863.             Arguments: res:1, filename
  1864.                Format: !|1W <res> <filename>
  1865.               Example: !|1W0filename.icn
  1866.       Uses Draw Color: NO
  1867.       Uses Line Patrn: NO
  1868.       Uses Line Thick: NO
  1869.       Uses Fill Color: NO
  1870.       Uses Fill Patrn: NO
  1871.       Uses Write Mode: NO
  1872.       Uses Font Sizes: NO
  1873.  
  1874.      This command takes the contents of the Clipboard and writes it to a
  1875.      disk file.  This Icon file can be loaded later with a RIP_LOAD_ICON
  1876.      command and stamped on the screen.
  1877.  
  1878.      The command instructs the terminal to store an Icon on the terminal's
  1879.      disk drive, or on some appropriate storage media.  Path or
  1880.      subdirectory information is not allowed in the filename portion of
  1881.      the command.  If the clipboard is nonexistent (ie, at the beginning
  1882.      of a scene), this command is ignored.  If an Icon by the same name
  1883.      already exists on disk, it is overwritten.
  1884.  
  1885.      NOTE: The <res> parameter is RESERVED FOR FUTURE USE and should be
  1886.            set to zero.
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.      ---------------------------------------------------------------------
  1893.      Loads and displays a disk-based Icon to the screen
  1894.      ---------------------------------------------------------------------
  1895.                Symbol: RIP_LOAD_ICON
  1896.                 Level: 1
  1897.               Command: I
  1898.             Arguments: x:2, y:2, mode:2, clipboard:1, res:2, filename
  1899.                Format: !|1I <x> <y> <mode> <clipboard> <res> <filename>
  1900.               Example: !|1I001101010button.icn
  1901.       Uses Draw Color: NO
  1902.       Uses Line Patrn: NO
  1903.       Uses Line Thick: NO
  1904.       Uses Fill Color: NO
  1905.       Uses Fill Patrn: NO
  1906.       Uses Write Mode: NO
  1907.       Uses Font Sizes: NO
  1908.  
  1909.      This command instructs the terminal to read an Icon from disk and
  1910.      display it at the given upper-left (x,y) location.  If the width or
  1911.      height of the Icon would make it go off the right or left edge of the
  1912.      screen, the Icon will not be displayed.  The <mode> parameter defines
  1913.      the modes in which the Icon will be displayed on the screen.  The
  1914.      modes are identical to the RIP_PUT_IMAGE command, and are as follows:
  1915.  
  1916.      The .ICN file extension does not need to be included as part of the
  1917.      filename.  If omitted, it will automatically be appended to the
  1918.      filename.  If an extension is provided, it will be used verbatim.
  1919.  
  1920.          Mode Description
  1921.          ==============================================================
  1922.            00 Paste the image on-screen normally                 (COPY)
  1923.            01 Exclusive-OR  image with the one already on screen (XOR)
  1924.            02 Logically OR  image with the one already on screen (OR)
  1925.            03 Logically AND image with the one already on screen (AND)
  1926.            04 Paste the inverse of the image on the screen       (NOT)
  1927.  
  1928.      If the <clipboard> parameter is 1, then not only is the image pasted
  1929.      on screen, but it is also copied into the Clipboard.  If 0, it's
  1930.      simply pasted on the screen.
  1931.  
  1932.      The <filename> parameter must not contain any subdirectory or path
  1933.      information and must specify a valid Icon file name.  If the Icon
  1934.      cannot be located or an error occurs on the disk, then a box should
  1935.      be displayed on screen indicating that the given Icon File could not
  1936.      be loaded.  This visual prompt indicates that something is amiss to
  1937.      the end-user.
  1938.  
  1939.      NOTE: The 2-byte <res> parameter is RESERVED FOR THE FUTURE and
  1940.            unlike many other previously mentioned reserved parameters,
  1941.            should be set to "10".
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.      ---------------------------------------------------------------------
  1948.      Button Style Definition
  1949.      ---------------------------------------------------------------------
  1950.                Symbol: RIP_BUTTON_STYLE
  1951.                 Level: 1
  1952.               Command: B
  1953.             Arguments: wid:2 hgt:2 orient:2 flags:4 size:2 dfore:2 
  1954.                        dback:2 bright:2 dark:2 surface:2 grp_no:2 flags2:2
  1955.                        uline_col:2 corner_col:2 res:6
  1956.                Format: !|1B <wid> <hgt> <orient> <flags> <bevsize> <dfore>
  1957.                        <dback> <bright> <dark> <surface> <grp_no> <flags2>
  1958.                        <uline_col> <corner_col> <res>
  1959.               Example: !|1B0A0A010274030F080F080700010E07000000
  1960.       Uses Draw Color: NO
  1961.       Uses Line Patrn: NO
  1962.       Uses Line Thick: NO
  1963.       Uses Fill Color: NO
  1964.       Uses Fill Patrn: NO
  1965.       Uses Write Mode: NO
  1966.       Uses Font Sizes: NO
  1967.  
  1968.      This RIPscrip command is probably one of the most complex in the
  1969.      entire protocol.  It defines how subsequent RIP_BUTTON commands will
  1970.      be interpretted.  The purpose of this command is to define what a 
  1971.      Button is and how they operate.  Buttons can have many different
  1972.      configurations, flags, and styles.  With the diversity of modes that
  1973.      the Button can take on, complexity is a necessary evil.
  1974.  
  1975.      This command does not actually do anything visibly on the screen. 
  1976.      Simply put, this creates an internal definition for the Button mode
  1977.      which will be used with RIP_BUTTON commands after the definition is 
  1978.      created.
  1979.  
  1980.      Every Button can have an optional text label.  It can appear in
  1981.      several different locations compared to the Button itself.  This is
  1982.      specified in the <orient> parameter.  The actual text of the label is
  1983.      not specified with this command, it is specified when you actually
  1984.      create a Button (see RIP_BUTTON below).  The value that <orient> can
  1985.      be is as follows:
  1986.  
  1987.           Value     Description of Orientation
  1988.           ===================================================
  1989.           00        Display Label above of Button
  1990.           01        Display Label to the Left of Button
  1991.           02        Display Label in the center of the Button
  1992.           03        Display Label to the Right of Button
  1993.           04        Display Label beneath the Button
  1994.  
  1995.  
  1996.      The <hgt> and <wid> parameters represent the fixed height and width of
  1997.      the Button (applies only to Plain Buttons).  If both values are
  1998.      greater than zero, then this will represent the actual size of the
  1999.      Button (its dimensions are not specified by the RIP_BUTTON command). 
  2000.      If both of these are set to zero, then the actual RIP_BUTTON command
  2001.      will specify the size of the particular Button (dynamic sizing).
  2002.  
  2003.      The <bevsize> parameter is only used if the Bevel flag is specified. 
  2004.      When active, this parameter will determine how many pixels thick the
  2005.      bevel should be.  This may be any value greater or equal to zero.
  2006.  
  2007.      There are a large number of flag values that can be combined to
  2008.      achieve a great many effects.  There are two flag parameters for the
  2009.      RIP_BUTTON_STYLE command, <flags> and <flags2>.  They are detailed in
  2010.      the two tables that follow in this Section.  You may combine any of
  2011.      the flags in the first table together simply by adding the "Value" of
  2012.      each one together and representing that number as a MegaNum.  See the
  2013.      Section in this manual for a "Table of MegaNums".
  2014.  
  2015.      The <dfore> and <dback> parameters are used with the text label.  The
  2016.      <dfore> parameter is the foreground color for the text.  It is always
  2017.      used to determine the color of the text label.  The <dback> color is
  2018.      the color of the dropshadow (if any).  This parameter is only used
  2019.      when you have specified the "Dropshadow" flag in the <flags>
  2020.      parameter (see below).
  2021.  
  2022.      The <bright>, <dark> and <surface> parameters are used with Plain
  2023.      Buttons and with the Special Effects styles (see <flags> below). 
  2024.      These colors represent the hilighted color, the shadowed color, and
  2025.      the regular surface color that is used in Special Effects.  Typical
  2026.      color combinations for these colors might be White, Dark-Gray and
  2027.      Light-Gray respectively for a "chiseled steel" appearance.  Each of
  2028.      these values can contain a two-digit value representing any valid
  2029.      color code that may be used in the RIP_COLOR command.
  2030.  
  2031.      In addition to the special effects colors, are two additional colors
  2032.      that can be used, <uline_color> which is used for the color of the
  2033.      underline (in the text label), and <corner_color> which is used to 
  2034.      display the colors of corners for things like the Bevel, Recess, etc.
  2035.  
  2036.      The <grp_no> parameter determines which Button Group subsequent
  2037.      RIP_BUTTON commands will be associated with.  Button Groups are used
  2038.      to maintain groups of Buttons for things like Radio Buttons and/or 
  2039.      Checkbox Buttons.  See the section entitled THE BUTTON COMMAND for
  2040.      more information on these modes, and what Button Groups can offer. 
  2041.      This value can range anywhere from 0-Z (i.e., 0-35).  You should not
  2042.      mix Checkbox and Radio buttons in the same group. -- unpredictable
  2043.      things may happen if you do.
  2044.  
  2045.      Some <flags> are mutually exclusive.  For example, you can only have
  2046.      one of the "Plain", "Icon", or "Clipboard" flags chosen at once.  To
  2047.      better assist you in determining which values can be combined with 
  2048.      each other, the right-most five columns in the next two tables explain
  2049.      if the specific flag can be used under a specific condition.  For
  2050.      example, you cannot choose the "Hot Icon" flag if you are dealing with
  2051.      a Clipboard Button.  Another example is that you cannot underline the
  2052.      hotkey character in the label if it is not a Mouse Button.
  2053.  
  2054.      The following table contains the possible flag values for the <flags>
  2055.      parameter.  Each of these values may be combined to achieve a
  2056.      "composite" group of flags.  See the preceding paragraphs for a more
  2057.      detailed explanation of this method.
  2058.  
  2059.      VALUE  DESCRIPTION OF FLAGS FIELD #1    ICON CLIP PLAIN MOUSE NO-MOUSE
  2060.      ======================================================================
  2061.      1      Button is a "Clipboard Button"     N    Y    N     Y      Y
  2062.      2      Button is "invertable"             Y    Y    Y     Y      N
  2063.      4      Reset screen after button click    Y    Y    Y     Y      N
  2064.      8      Display Chisel special effect      Y    Y    Y     Y      Y
  2065.      16     Display Recessed special effect    Y    Y    Y     Y      Y
  2066.      32     Dropshadow the label (if any)      Y    Y    Y     Y      Y
  2067.      64     Auto-stamp image onto Clipboard    Y    Y    Y     Y      Y
  2068.      128    Button is an "Icon Button"         Y    N    N     Y      Y
  2069.      256    Button is a "Plain Button"         N    N    Y     Y      Y
  2070.      512    Display Bevel special effect       Y    Y    Y     Y      Y
  2071.      1024   Button is a Mouse Button           Y    Y    Y     Y      N
  2072.      2048   Underline hot-key in label         Y    Y    Y     Y      N
  2073.      4096   Make Icon Button use Hot Icons     Y    N    N     Y      N
  2074.      8192   Adjust vert. centering of label    Y    Y    Y     Y      Y
  2075.      16384  Button belongs to a Radio Group    Y    Y    Y     Y      N
  2076.      32768  Display Sunken special effect      Y    Y    Y     Y      Y
  2077.  
  2078.  
  2079.  
  2080.  
  2081.      The following table describes the possible flag settings for the
  2082.      <flags2> parameter:
  2083.  
  2084.      VALUE  DESCRIPTION OF FLAGS FIELD #2    ICON CLIP PLAIN MOUSE NO-MOUSE
  2085.      ======================================================================
  2086.      1      Button is in a Checkbox Group      Y    Y    Y     Y      N
  2087.      2      Hilight Hotkey character           Y    Y    Y     Y      N
  2088.      4      Explode (Zoom Out when clicked)    Y    Y    Y     Y      N
  2089.      8      Left Justify Label (top/cent/bot)  Y    Y    Y     Y      Y
  2090.      16     Right Justify Label (" / "  / ")   Y    Y    Y     Y      Y
  2091.  
  2092.  
  2093.  
  2094.  
  2095.      ---------------------------------------------------------------------
  2096.      Define a Mouse Button
  2097.      ---------------------------------------------------------------------
  2098.                Symbol: RIP_BUTTON
  2099.                 Level: 1
  2100.               Command: U
  2101.             Arguments: x0:2 y0:2 x1:2 y1:2 hotkey:2 flags:1 res:1 ...text
  2102.                Format: !|1U <x0> <y0> <x1> <y1> <hotkey> <flags> <res> <text>
  2103.               Example: !|1U010100003200iconfile.icn<>Label<>Host Cmd^m
  2104.       Uses Draw Color: NO
  2105.       Uses Line Patrn: NO
  2106.       Uses Line Thick: NO
  2107.       Uses Fill Color: NO
  2108.       Uses Fill Patrn: NO
  2109.       Uses Write Mode: NO
  2110.       Uses Font Sizes: YES
  2111.  
  2112.      This command physically creates a new Button using the previously
  2113.      described RIP_BUTTON_STYLE command.  You may have at most 128
  2114.      different Mouse Buttons (you may have any number of non-Mouse 
  2115.      Buttons).
  2116.  
  2117.      The <x0> and <y0> parameters for this command designate the upper-left
  2118.      corner of the Button.  This (X,Y) location may not be the actual
  2119.      "absolute" corner position of the Button, as it may be adjusted via
  2120.      the Special Effects functions that are part of the RIP_BUTTON_STYLE
  2121.      command (see above).
  2122.  
  2123.      The <x1> and <y1> parameters are only used for Plain Buttons when you
  2124.      have not specified a specific Height and Width in the
  2125.      RIP_BUTTON_STYLE command.  These parameters are used in Dynamically
  2126.      Sized Buttons.  If the Height and Width in the RIP_BUTTON_STYLE are
  2127.      non-zero, then these two parameters are set to zero.
  2128.  
  2129.      The (x0,y0) and (x1,y1) will be modified by the following values for
  2130.      the different special effects:
  2131.  
  2132.      EFFECT TYPE    X0 ADJ         Y0 ADJ         X1 ADJ         Y1 ADJ
  2133.      =======================================================================
  2134.      Bevel          -bevel size    -bevel size    +bevel size    +bevel size
  2135.      Recess         -2             -2             +2             +2
  2136.      Sunken         0              0              0              0
  2137.      Chisel         0              0              0              0
  2138.  
  2139.  
  2140.      The <hotkey> parameter is only used with Mouse Buttons.  It is the
  2141.      ASCII code for the keystroke that will activate this Button.  It is
  2142.      represented as a two-digit MegaNum.  If this character exists in the
  2143.      text label, and the Underline flag is enabled in the
  2144.      RIP_BUTTON_STYLE, then the character will be underlined in the label.
  2145.  
  2146.      The <flags> parameter provides several different functions for each
  2147.      button.  The possible "combinatorial" flags for this parameter are
  2148.      listed in the following table.  Note that these values may be
  2149.      combined together (by adding their values) to arrive at the final
  2150.      flag parameter's value.
  2151.  
  2152.      Value    Description
  2153.      ====================================================================
  2154.        1      Draw button as already selected
  2155.        2      Button is "default" when <ENTER> is tapped
  2156.  
  2157.      Using a flag of 1 means that the Button is already "selected".  By 
  2158.      selected, we mean that it is already clicked and should be initially
  2159.      drawn as clicked.  This is typically used for Radio Buttons and/or
  2160.      Check Boxes.  This only affects the image.  The Host Command WILL
  2161.      NOT be automatically sent to the host when a selected Button is
  2162.      drawn.  If this parameter is set to 0, then the Button will be
  2163.      drawn in normal, unselected mode.
  2164.  
  2165.      The <text> parameter for this command is somewhat different than those
  2166.      found in previously described RIPscrip commands.  All other RIPscrip
  2167.      commands only have one text parameter.  This command requires 
  2168.      anywhere from 0-3 text parameters.  The way RIPscrip accomplishes this
  2169.      is by separating each block in the <text> parameter with the
  2170.      delimiter "<>".  This text parameter delimiter is not needed before
  2171.      the first text block, but is necessary between the 1st and 2nd
  2172.      blocks, and the 2nd and 3rd blocks.  Here is an example of a typical
  2173.      text parameter for this command:
  2174.  
  2175.                  ICONFILE.ICN<>TEXT LABEL<>HOST COMMAND
  2176.  
  2177.      The actual syntax of this text parameter is as follows:
  2178.  
  2179.               [icon-file][[<>text-label][<>host-command]]
  2180.  
  2181.      The block described as ICONFILE.ICN is actually the Icon Filename that
  2182.      will be used for the Button if it is an Icon Button.  If it is not an
  2183.      Icon Button, then this block will read "<>" all by itself (a "null"
  2184.      block).
  2185.  
  2186.      The .ICN file extension does not need to be included as part of the
  2187.      filename.  If omitted, it will automatically be appended to the
  2188.      filename.  If an extension is provided, it will be used verbatim.
  2189.  
  2190.      The "TEXT LABEL" block is actually the text that will be used to
  2191.      descriptively label the Button.  You may also specify a "null" block
  2192.      for no label (i.e., "<>").
  2193.  
  2194.      The final block of the <text> parameter is the Host Command.  This
  2195.      block contains any text that should be sent to the Host after this
  2196.      Button is clicked.  This may contain any Control Characters, Pick-List
  2197.      definitions, Text Variables or Template Definitions.  This block
  2198.      might be "segmented" into multiple Host Command segments.  See the
  2199.      section entitled HOST COMMANDS in this Manual for additional
  2200.      information on these Host Command features.
  2201.  
  2202.      Not all of the blocks in the <text> parameter need to be specified. 
  2203.      Here are examples of the valid combinations of text blocks:
  2204.  
  2205.      PARAMETER EXAMPLE        DESCRIPTION OF THE TEXT PARAMETER
  2206.      ===================================================================
  2207.      icon<>label<>host_cmd    Specify all three blocks
  2208.      <>label<>host_cmd        2 blocks specified; no icon
  2209.      icon<>label<>            2 blocks specified; no host cmd
  2210.      icon<>label              2 blocks specified; no host cmd
  2211.      <><>host_cmd             1 block specified; no icon or label
  2212.      <>label<>                1 block specified; no icon or host cmd
  2213.      <>label                  1 bloc specified; no icon or host cmd
  2214.      icon<><>                 1 block specified; no label or host cmd
  2215.      icon<>                   1 block specified; no label or host cmd
  2216.      icon                     1 block specified; no label or host cmd
  2217.      <><><>                   A blank text parameter; all blocks omitted
  2218.      <><>                     A blank text parameter; all blocks omitted
  2219.      <>                       A blank text parameter; all blocks omitted
  2220.  
  2221.  
  2222.      NOTE:  The <res> parameter is reserved for future use by TeleGrafix
  2223.             Communications, Inc..  It should be set to 0 for compatibility
  2224.             with future releases.
  2225.  
  2226.  
  2227.  
  2228.  
  2229.      ---------------------------------------------------------------------
  2230.      Define a Text Variable
  2231.      ---------------------------------------------------------------------
  2232.                Symbol: RIP_DEFINE
  2233.                 Level: 1
  2234.               Command: D
  2235.             Arguments: flags:3 res:2 ...text
  2236.                Format: !|1D <flags> <res> <text>
  2237.               Example: !|1D00700text_var,60:?question?default data
  2238.       Uses Draw Color: NO
  2239.       Uses Line Patrn: NO
  2240.       Uses Line Thick: NO
  2241.       Uses Fill Color: NO
  2242.       Uses Fill Patrn: NO
  2243.       Uses Write Mode: NO
  2244.       Uses Font Sizes: NO
  2245.  
  2246.      This command is used to create a text variable on the Client system
  2247.      (i.e., the Terminal system).  A text variable is more fully covered
  2248.      in the section entitled HOST COMMANDS.  Simply put, a text variable is
  2249.      a piece of information assigned to a 1-12 character identifier that
  2250.      can either be saved to a local database file (static variables), or
  2251.      to memory (dynamic variables).  Variable Identifiers can be 1-12
  2252.      characters in length.  You may use any alphanumeric character and
  2253.      underscores (_) in the identifier.  An underscore cannot be the first
  2254.      character, nor can the first character of an identifier be a number.
  2255.  
  2256.      The <flags> parameter of this command combines three separate values
  2257.      into one MegaNum flag that determines how the variable definition
  2258.      will operate.  Here are the possible flag values:
  2259.  
  2260.                   VALUE     DESCRIPTION OF FLAG
  2261.                   =========================================
  2262.                   001       Save Variable to database
  2263.                   002       Cannot specify a blank response
  2264.                   004       Non-interactive query
  2265.  
  2266.  
  2267.      When a variable is flagged as "Save to Database", it becomes a part of
  2268.      the Client system's actual configuration.  The value is saved
  2269.      indefinitely until either changed, or manually erased.  You may choose
  2270.      not to allow the user to enter a blank response.  This basically
  2271.      requires them to enter some piece of information for the variable.
  2272.  
  2273.      The last flag determines whether the definition is interactive or not.
  2274.      An interactive definition will attempt to define the variable.  If it
  2275.      does exist, it pops the value up on the screen asking the user to
  2276.      confirm if the value is correct.  If it does not exist, a similar
  2277.      pop-up box will appear asking the user to enter some data for the
  2278.      given variable.
  2279.  
  2280.      In a non-interactive situation, the Client system will check to see if
  2281.      the variable exists.  If it does, then nothing happens (unless a
  2282.      default response is specified in this command, whereby the Client's
  2283.      variable is updated with the new information).  If the value is not
  2284.      defined, then this definition becomes interactive by default, since
  2285.      the user actually has to enter something anyway.
  2286.  
  2287.      The <text> parameter for this command is also segmented in nature,
  2288.      much like the RIP_BUTTON command is.  An example of a segmented
  2289.      <text> parameter for the RIP_DEFINE command might be as follows:
  2290.  
  2291.  
  2292.                FULL_NAME,30:?What is your full name?John Doe
  2293.  
  2294.  
  2295.      The actual syntax of the Variable Define text parameter is as follows:
  2296.  
  2297.  
  2298.        variable-identifier[,field-width]:[?question-text?][default-value]
  2299.  
  2300.  
  2301.      There are several different segments in this parameter as you can see.
  2302.      The first section is the variable- identifier.  Immediately after it
  2303.      is an optional field-width.  If the field width is omitted, it will
  2304.      default to a value of  60.  You should limit the values of this width
  2305.      from 1-60.
  2306.  
  2307.      Immediately following the identifier field-width parameter is a colon
  2308.      (:).  The colon indicates that the variable identifier field is
  2309.      completed and that the remainder of the text parameter is to contain
  2310.      the question and/or the default response (if any).  If no question or
  2311.      default response is provided, the text parameter would read 
  2312.      "TEXT_VAR,width:" with no additional data.
  2313.  
  2314.      The question-text is specified by a question mark (?) followed by the
  2315.      actual text of the question, followed by a trailing question mark. 
  2316.      The basic format of the question segment is as follows:
  2317.  
  2318.  
  2319.                              ?this is a question?
  2320.  
  2321.  
  2322.      The remainder of the text parameter consists of a default-value for
  2323.      the variable's contents.  It may be omitted if you wish, to make it
  2324.      so that the user must enter his/her own value instead of some "canned
  2325.      response".
  2326.  
  2327.  
  2328.      NOTE:  The <res> parameter is reserved for future use by TeleGrafix
  2329.             Communications, Inc..  It should be set to 00 for compatibility
  2330.             with future releases.
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336.      ---------------------------------------------------------------------
  2337.      Query the contents of a Text Variable
  2338.      ---------------------------------------------------------------------
  2339.                Symbol: RIP_QUERY
  2340.                 Level: 1
  2341.               Command: <escape>
  2342.             Arguments: res:4 ...text
  2343.                Format: !|1<escape> <res> <text>
  2344.               Example: !|1<escape>0000this is a query $COMMAND$^m
  2345.       Uses Draw Color: NO
  2346.       Uses Line Patrn: NO
  2347.       Uses Line Thick: NO
  2348.       Uses Fill Color: NO
  2349.       Uses Fill Patrn: NO
  2350.       Uses Write Mode: NO
  2351.       Uses Font Sizes: NO
  2352.  
  2353.      The Query Text Variable RIPscrip command instructs the Client system
  2354.      to immediately respond with some piece of information, whether
  2355.      statically stored (i.e., in a database), stored internally in RAM
  2356.      (dynamic information), or pre-defined Text Variables.
  2357.  
  2358.      This command is unique in RIPscrip in the fact that the command
  2359.      character that is used is NOT a printable character.  We use the
  2360.      Escape character (ascii 27) to introduce this command as a measure
  2361.      of Security.  Since the Query command can query the terminal for
  2362.      some critical (potentially private) information, you would not
  2363.      want a End-User to be able to Query another User's terminal for
  2364.      something like his Address Information, or something that he
  2365.      wouldn't want to otherwise divulge to unauthorized people.  Since
  2366.      most BBS'es do not allow the User to enter an Escape character,
  2367.      this character is ideal for this purpose.  Using an Escape, allows
  2368.      only the Host under most circumstances to be in control of any
  2369.      Queries.
  2370.  
  2371.      This command is very flexible in that you can specify Control
  2372.      Characters, Pick-List definitions, Text Variable insertion, and even
  2373.      Host Command Template definitions.  See the section of this Manual
  2374.      entitled HOST COMMANDS for a more detailed explanation of Host
  2375.      Commands and these specific features.
  2376.  
  2377.      Basically put, a Query command will be immediately acted upon by the
  2378.      Terminal program when received.  The Query command's <text> parameter
  2379.      can contain any number of Host Command "segments", which can instruct
  2380.      the terminal "how to" send data to the host, and more specifically,
  2381.      what data to send to the host.
  2382.  
  2383.      Some examples of query statements might be any of the following:
  2384.  
  2385.         ^m  ......................... Send a carriage return to the BBS
  2386.                                       right now
  2387.         My name is $FULL_NAME$^m  ... Send the text "My name is 
  2388.                                       <insert-name-here>" followed by a 
  2389.                                       carriage return to the BBS.  The
  2390.                                       <insert-name-here> will be replaced
  2391.                                       with whatever the the variable
  2392.                                       $FULL_NAME$ contains.
  2393.  
  2394.      See the section entitled HOST COMMANDS for a detailed explanation of
  2395.      Host Commands, and what you can do with the Query command.
  2396.  
  2397.      NOTE:  The <res> parameter is reserved for future use by TeleGrafix
  2398.             Communications, Inc..  It should be set to 0000 for
  2399.             compatibility with future releases.
  2400.  
  2401.  
  2402.  
  2403.  
  2404.      ---------------------------------------------------------------------
  2405.      Copy screen region up/down 
  2406.      ---------------------------------------------------------------------
  2407.                Symbol: RIP_COPY_REGION
  2408.                 Level: 1
  2409.               Command: G
  2410.             Arguments: x0:2 y0:2 x1:2 y1:2 res:2 dest_line:2
  2411.                Format: !|1G <x0> <y0> <x1> <y1> <res> <dest_line>
  2412.               Example: !|1G080G140M0005
  2413.       Uses Draw Color: NO
  2414.       Uses Line Patrn: NO
  2415.       Uses Line Thick: NO
  2416.       Uses Fill Color: NO
  2417.       Uses Fill Patrn: NO
  2418.       Uses Write Mode: NO
  2419.       Uses Font Sizes: NO
  2420.  
  2421.      This command physically "copies" a rectangular region of the
  2422.      graphics screen up or down.  The <dest_line> parameter is the Y
  2423.      position that is the destination scan line to receive the region.
  2424.      The Destination of the copy can overlap the original region, but
  2425.      cannot be on the same line.  You cannot move the image area left or
  2426.      right at all.  This command is designated for vertical scrolling of
  2427.      graphical data either up or down.
  2428.  
  2429.      Due to hardware restrictions, the X0 and X1 parameters must be evenly
  2430.      divisible by eight (8) (e.g., 0, 8, 16, etc).  If the X0 and X1
  2431.      parameters are NOT evenly divisible by eight, then the X0 parameter
  2432.      will be reduced to the next most eight-pixel boundary, and the X1
  2433.      parameter will be increased to the next eight-pixel boundary.  For
  2434.      example, if X0=14, and X1=38, then X0 would be adjusted DOWN to 8,
  2435.      and X1 would be adjusted UP to 40.  This is to ensure that the
  2436.      desired graphical region is scrolled.
  2437.  
  2438.      The original image area is left on the screen (is not cleared).  So
  2439.      if you wish to perform some kind of scrolling effect, you will have
  2440.      to clear the original area yourself.  
  2441.  
  2442.      If the destination region would place the image partially off-screen,
  2443.      then the entire command is ignored!
  2444.  
  2445.  
  2446.      NOTE:  The <res> parameter is reserved for future development by
  2447.             TeleGrafix.
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.      ---------------------------------------------------------------------
  2454.      Playback local .RIP scene file
  2455.      ---------------------------------------------------------------------
  2456.                Symbol: RIP_READ_SCENE
  2457.                 Level: 1
  2458.               Command: R
  2459.             Arguments: res:8 filename...
  2460.                Format: !|1R <res> <filename>
  2461.               Example: !|1R00000000testfile.rip
  2462.       Uses Draw Color: YES
  2463.       Uses Line Patrn: YES
  2464.       Uses Line Thick: YES
  2465.       Uses Fill Color: YES
  2466.       Uses Fill Patrn: YES
  2467.       Uses Write Mode: YES
  2468.       Uses Font Sizes: YES
  2469.  
  2470.      This command instructs the remote terminal to playback a local .RIP
  2471.      file.  The current execution of RIPscrip commands will be temporarily
  2472.      suspended and the contents of the designated RIP file will begin
  2473.      executing.  Regardless of whether or not the current RIPscrip code
  2474.      coming across the modem is in the middle of a line or not, the RIP
  2475.      playback file will be assumed to start at the beginning of a line.
  2476.      Therefore, if a RIP_READ_SCENE command is located in a .RIP file,
  2477.      it must be the very last command on the line, followed by a carriage
  2478.      return instead of a command delimiter (|).  This ensures that the
  2479.      loaded .RIP file will begin executing properly with the correct
  2480.      delimiters found in the correct places.
  2481.  
  2482.      The RIP playback file can alter colors, fonts, or whatever.  Once
  2483.      the playback of the file is complete, the remaining RIPscrip code
  2484.      that was temporarily suspended will be resume execution.  Any changes
  2485.      that appeared in the loaded playback file will remain in effect when
  2486.      the resumed code is processed.  In other words, if you change a color
  2487.      or a font in the playback file and leave them changed, they will
  2488.      remain in effect during the resumed execution.
  2489.  
  2490.         NOTE:  The <res> parameter is reserved for future development
  2491.                by TeleGrafix.  It should be set to "00000000" for
  2492.                compatibility with future releases.
  2493.  
  2494.  
  2495.  
  2496.  
  2497.      ---------------------------------------------------------------------
  2498.      Query existing information on a particular file
  2499.      ---------------------------------------------------------------------
  2500.                Symbol: RIP_FILE_QUERY
  2501.                 Level: 1
  2502.               Command: F
  2503.             Arguments: mode:2 res:4 filename...
  2504.                Format: !|1F <mode> <res> <filename>
  2505.               Example: !|1F010000testfile.icn
  2506.       Uses Draw Color: NO
  2507.       Uses Line Patrn: NO
  2508.       Uses Line Thick: NO
  2509.       Uses Fill Color: NO
  2510.       Uses Fill Patrn: NO
  2511.       Uses Write Mode: NO
  2512.       Uses Font Sizes: NO
  2513.  
  2514.      This command queries the existance of a particular file, regardless
  2515.      of file type.  It is intended for use by Host systems to determine
  2516.      if a particular Icon or RIP file exists on the remote terminal's
  2517.      hard disk.
  2518.  
  2519.      There are a variety of ways you can query for filenames.  The <mode>
  2520.      parameter determines the method that this command will respond to
  2521.      the Host.  Note that this command instructs the terminal to send
  2522.      a response to the Host immediately upon execution of this command.
  2523.  
  2524.      The following table is a listing of the possible values for <mode>:
  2525.  
  2526.           VALUE     DESCRIPTION
  2527.           ==============================================================
  2528.            00       Simply query the existance of the file.  If it
  2529.                     exists, a "1" is returned.  Otherwise a "0" is
  2530.                     returned to the Host (without a carriage return).
  2531.            01       Same as 0 above, except a carriage return is
  2532.                     added after the response.
  2533.            02       Queries the existance of a file.  If it does not
  2534.                     exist, a "0" is returned to the Host followed by a
  2535.                     carriage return.  If it does exist, the returned
  2536.                     text is a "1." followed by the file size (in
  2537.                     decimal).  The return sequence is terminated by a
  2538.                     carriage return.  An example of the returned text
  2539.                     could be "1.20345".
  2540.            03       Queries extended return information.  If the file
  2541.                     does not exist, a "0" is returned follwed by a
  2542.                     carriage return.  If it does exist, the text
  2543.                     returned to the Host is in the format: 
  2544.                     1.size.date.time <cr>.  An example of a return
  2545.                     statement could be "1.20345.01/02/93.03:04:30 <cr>"
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.      ---------------------------------------------------------------------
  2552.      End of RIPscrip Scene
  2553.      ---------------------------------------------------------------------
  2554.                Symbol: RIP_NO_MORE
  2555.                 Level: 0
  2556.               Command: #
  2557.             Arguments: <none>
  2558.                Format: !|#
  2559.               Example: !|#
  2560.       Uses Draw Color: NO
  2561.       Uses Line Patrn: NO
  2562.       Uses Line Thick: NO
  2563.       Uses Fill Color: NO
  2564.       Uses Fill Patrn: NO
  2565.       Uses Write Mode: NO
  2566.       Uses Font Sizes: NO
  2567.  
  2568.      This command indicates that RIPscrip commands are complete.  This
  2569.      allows the terminal program to activate Mouse Regions, or respond to
  2570.      queued up Mouse Clicks without disturbing the natural flow of the
  2571.      script transmission.
  2572.  
  2573.      For noise-immunity, the Host should transmit three or more
  2574.      RIP_NO_MORE command consecutively to make sure the message gets to
  2575.      the terminal.  The terminal should also time-out if no data is
  2576.      received for a while, and assume RIP_NO_MORE.
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582.      ---------------------------------------------------------------------
  2583.      Enter "block transfer" mode with Host
  2584.      ---------------------------------------------------------------------
  2585.                Symbol: RIP_ENTER_BLOCK_MODE
  2586.                 Level: 10 (system command)
  2587.               Command: <escape>
  2588.             Arguments: proto:2 file_type:2 res:4 [filename:2] <>
  2589.                Format: !|0<escape> <proto> <file_type> <res> [filename] <>
  2590.               Example: !|0<escape>0001iconfile.icn<>
  2591.       Uses Draw Color: NO
  2592.       Uses Line Patrn: NO
  2593.       Uses Line Thick: NO
  2594.       Uses Fill Color: NO
  2595.       Uses Fill Patrn: NO
  2596.       Uses Write Mode: NO
  2597.       Uses Font Sizes: NO
  2598.  
  2599.       This command is used to auto-initiate any desired File Transfer
  2600.       Protocol.  The <filename> parameter is optional, and if omitted
  2601.       must be replaced with a "<>" parameter (end of string).  
  2602.  
  2603.       The <proto> parameter is the file transfer protocol specifier.
  2604.       Possible values, and the protocols they refer to are:
  2605.  
  2606.  
  2607.           VALUE     PROTOCOL            FILENAME REQUIRED?
  2608.           ================================================
  2609.             0       Xmodem (checksum)          Yes
  2610.             1       Xmodem (CRC)               Yes
  2611.             2       Xmodem-1K                  Yes
  2612.             3       Xmodem-1K (G)              Yes
  2613.             4       Kermit                     Yes
  2614.             5       Ymodem (batch)             No
  2615.             6       Ymodem-G                   No
  2616.             7       Zmodem (crash recovery)    No
  2617.  
  2618.      The <file_type> parameter determines what types of files are to be
  2619.      received during the block transfer.  The following values apply
  2620.      to the <file_type> parameter:
  2621.  
  2622.           VALUE     DESCRIPTION OF BLOCK TRANSFER CONTENTS
  2623.           ================================================================
  2624.             0       .RIP file sequence (display it)
  2625.             1       .RIP file sequence (store them)
  2626.             2       .ICN file sequence (store them in proper directories)
  2627.             3       .HLP file sequence (store it, and auto-load if needed)
  2628.             4       COMPOSITE DYNAMIC file sequence (batch protcols only)
  2629.             5       ACTIVE DYNAMIC file sequence (batch protcols only)
  2630.  
  2631.      Whether the <filename> is specified or not, this command must have
  2632.      a "<>" sequence after the filename (even if omitted).  Here are
  2633.      examples of how it would look with and without a filename:
  2634.  
  2635.  
  2636.           !|0B0101filename.icn<> ... With filename field (Xmodem-CRC)
  2637.           !|0B0604<> ............... w/o  filename field (Zmodem)
  2638.  
  2639.      The special <file_type> of 4 & 5 (COMPOSITE DYANAMIC file sequences)
  2640.      is somewhat different than the non-batch transfer methods.  This allows
  2641.      each file uploaded to be individually processed based on their
  2642.      file extensions.  If you use extensions other than .RIP or .ICN, then
  2643.      this mode is not available to you as the necessary files will not be
  2644.      able to be processed.  Any files that are "downloaded" from the Host
  2645.      in DYNAMIC mode are placed into the appropriate sub-directories and
  2646.      no further processing is performed.  .RIP files that are received
  2647.      are "stored" and are not played back in COMPOSITE DYNAMIC mode.  In
  2648.      ACTIVE DYNAMIC mode, they are stored and played back simultaneously.
  2649.  
  2650.      NOTE: This command must be terminated with a carriage return.  A 
  2651.            vertical bar (|) command delimiter cannot be used to separate
  2652.            this command from a subsequent one on the same line.  In other
  2653.            words, this command must be the last command on a line of text.
  2654.            The Protocol must begin on the very next line.
  2655.  
  2656.  
  2657.  
  2658.  
  2659.  
  2660.  
  2661.      =====================================================================
  2662.      ==          HOST COMMANDS - A TUTORIAL & REFERENCE SECTION         ==
  2663.      =====================================================================
  2664.  
  2665.      With Mouse regions, Buttons and Text Variable Query ability, you can
  2666.      control the Terminal/Paint programs and how they react with the BBS
  2667.      in many ways.  To accomplish this, there are several features of
  2668.      RIPscrip that permit you to do special actions based on different
  2669.      circumstances.  In effect, an "action language" of sorts.  The
  2670.      following sections go into the available "action language" features
  2671.      in more detail.
  2672.  
  2673.      Among the various abilities are:
  2674.  
  2675.           1. Control-Character specification
  2676.           2. Pre-defined Text Variables & User-defined text variables
  2677.           3. Pop-up pick-lists
  2678.           4. A Host Command "Template" system for added intelligence.
  2679.           5. Query text variable contents (pre-defined & user variables)
  2680.  
  2681.  
  2682.  
  2683.  
  2684.      =====================================================================
  2685.      ==                        CONTROL CHARACTERS                       ==
  2686.      =====================================================================
  2687.  
  2688.      Not all BBS'es will allow you to use control characters on their
  2689.      Service.  Regardless of that, the capability to send any Control
  2690.      Character exists in your Keystroke Macro editor.  The most
  2691.      commonly used Control Characters are:
  2692.  
  2693.         INDIVIDUAL CONTROL CHARACTERS         SPECIAL KEYSTROKES
  2694.         ===========================================================
  2695.         ^G ... Beep                           ^[[A ... Up Arrow
  2696.         ^L ... Clear Screen (Top of Form)     ^[[B ... Down Arrow
  2697.         ^M ... Carriage Return                ^[[C ... Right Arrow
  2698.         ^C ... Break (sometimes)              ^[[D ... Left Arrow
  2699.         ^H ... Backspace                      ^[[H ... Home Key
  2700.         ^[ ... Escape character               ^[[K ... End Key
  2701.         ^S ... Pause data transmission        ^[[L ... Control Home
  2702.         ^Q ... Resume data transmission
  2703.  
  2704.  
  2705.  
  2706.  
  2707.      =====================================================================
  2708.      ==                          TEXT VARIABLES                         ==
  2709.      =====================================================================
  2710.  
  2711.      A special feature of RIPaint allows it to understand what a Text
  2712.      Variable is.  A text variable is a piece of text that both RIPaint
  2713.      and RIPterm know something about.  For example, the Text Variable
  2714.      $DATE$ is known to represent the current Date on your PC.  The BBS
  2715.      may ask your PC what the values of one or more of these variables
  2716.      is, and if your Terminal knows that particular Text Variable, it
  2717.      will tell the BBS.
  2718.  
  2719.      There are two types of Text Variables.  There are built-in Text
  2720.      Variables that RIP products will ALWAYS know about.  Then there are
  2721.      also User Text Variables that can contain a variety of information
  2722.      depending on what the User entered at the time the Variable was
  2723.      created.  For example, the BBS might ask you what the contents of
  2724.      the $FULL_NAME$ variable is, and if RIPterm doesn't know, it could
  2725.      pop-up a field on the screen and ask you about it.  From then on,
  2726.      RIPterm will remember that piece of information for the next time it
  2727.      is needed by a BBS.
  2728.  
  2729.      You may use either the pre-defined Text Variables, or the User Text
  2730.      Variables at any place that allows Text Variables.
  2731.  
  2732.  
  2733.      The following is a Listing of the Pre-Defined Text Variables:
  2734.      =============================================================
  2735.  
  2736.  
  2737.      $DATE$ ... Date in short format (eg, 12/19/92)
  2738.      ----------------------------------------------
  2739.      This Text Variable will be transformed into the current Date.
  2740.      It will be displayed in the format MM/DD/YY.
  2741.  
  2742.           Example:  $DATE$ = 12/19/92
  2743.  
  2744.  
  2745.      $MONTH$ ... Month Name
  2746.      ----------------------
  2747.      This Text Variable will be transformed into the name of the
  2748.      Current Month.  It will be not abbreviated (eg, "November"
  2749.      instead of "Nov")
  2750.  
  2751.           Example:  $MONTH$ = December
  2752.  
  2753.  
  2754.      $MONTHNUM$ ... Month (in format 1-12)
  2755.      ------------------------------------
  2756.      This Text Variable is transformed into a Number representing
  2757.      the Current Month.  January=01 and December=12.  Therefore,
  2758.      the possible values for $MONTHNUM$ can range from 01-12.
  2759.  
  2760.           Example:  $MONTHNUM$ = 12
  2761.  
  2762.  
  2763.      $DAY$ ... Day in numeric form (eg, 31)
  2764.      -------------------------------------
  2765.      This Text Variable is transformed into a Number representing
  2766.      the Current Day of the month.  Possible values for this
  2767.      Variable are from 01-31.
  2768.  
  2769.           Example:  $DAY$ = 05
  2770.  
  2771.  
  2772.      $DOY$ ... Day of year (001-366)
  2773.      ------------------------------
  2774.      This Text Variable will be transformed into a Number representing
  2775.      the Day of the current Year.  Since a year contains 365 days (unless
  2776.      it is a Leap-Year where it contains 366), then the possible values
  2777.      that $DOY$ can be are 001-366.
  2778.  
  2779.           Example: $DOY$ = 214
  2780.  
  2781.  
  2782.      $YEAR$ ... 2 digit year (without century) (00-99)
  2783.      ------------------------------------------------
  2784.      This Text Variable will be transformed into a two-digit number
  2785.      representing the Current Year.
  2786.  
  2787.           Example: $YEAR$ = 92
  2788.  
  2789.  
  2790.      $FYEAR$ ... 4 digit year (with century) (0000-9999)
  2791.      --------------------------------------------------
  2792.      This Text Variable will be transformed into a four-digit number
  2793.      that represents the Current Year.
  2794.  
  2795.           Example:  $FYEAR$ = 1992
  2796.  
  2797.  
  2798.      $TIME$ ... Time in standard format (eg, 12:03:14)
  2799.      ------------------------------------------------
  2800.      This Text Variable will be transformed into the Current Time.
  2801.      The time will be in military format (hours from 00-23).
  2802.  
  2803.           Example:  $TIME$ = 18:09:33
  2804.  
  2805.  
  2806.      $HOUR$ .... Hour (format HH) - normal style
  2807.      ------------------------------------------
  2808.      This Text Variable will be transformed into a two-digit number
  2809.      representing the Current Hour.  This variable may be anywhere
  2810.      from 01-12.  This does not use Military format.
  2811.  
  2812.           Example:  $HOUR$ = 11
  2813.  
  2814.  
  2815.      $MHOUR$ ... Hour (format HH) - Military style
  2816.      --------------------------------------------
  2817.      This Text Variable will be transformed into a two-digit number
  2818.      representing the Current Hour in military format.  This variable
  2819.      may range anywhere from 00-23.
  2820.  
  2821.           Example: $MHOUR$ = 17
  2822.  
  2823.  
  2824.      $MIN$ ... Minutes (00-59)
  2825.      ------------------------
  2826.      This Text Variable will be transformed into a two-digit number
  2827.      representing the Current Minutes in the Hour.  Possible values
  2828.      for this Variable are 00-59.
  2829.  
  2830.           Example:  $MIN$ = 45
  2831.  
  2832.  
  2833.      $SEC$ ... Seconds (00-59)
  2834.      ------------------------
  2835.      This Text Variable will be transformed into a two-digit number
  2836.      representing the Current Seconds of the Minute.  Possible values
  2837.      for this Variable are 00-59.
  2838.  
  2839.           Example: $SEC$ = 59
  2840.  
  2841.  
  2842.      $AMPM$ ... Returns either AM or PM depending on time
  2843.      ---------------------------------------------------
  2844.      This Text Variable will be transformed into a two-character
  2845.      value of either "AM" or "PM" depending on what time it is.
  2846.  
  2847.           Example: $AMPM$ = PM
  2848.  
  2849.  
  2850.      $DATETIME$ ... Date & Time (eg, Sat Dec 19 14:38:50 1992)
  2851.      --------------------------------------------------------
  2852.      This Text Variable will be transformed into a combination Date
  2853.      and Time.  The format is somewhat different than standard
  2854.      Time/date notation.  The format used is:
  2855.  
  2856.        DAY-OF-WEEK   MONTH   DAY-OF-MONTH  HH:MM:SS  YEAR
  2857.  
  2858.           Example:  $DATETIME$ = Sat Dec 19 14:38:50 1992
  2859.  
  2860.  
  2861.      $TIMEZONE$ ... Time Zone or "NONE" if unknown (eg, Pacific)
  2862.      ----------------------------------------------------------
  2863.      This Text Variable will be transformed into a a word/phrase that
  2864.      describes the Current Time-Zone you are in.  This may be returned
  2865.      as anything like "PST" for Pacific Standard Time, "EST" for Eastern
  2866.      Standard Time, etc.  If the Time-Zone is not set on your PC, this
  2867.      Variable will respond with "NONE".
  2868.  
  2869.           Example: $TIMEZONE$ = PST
  2870.  
  2871.  
  2872.      $DOW$ ... Day of week fully spelled out (eg, Friday)
  2873.      ---------------------------------------------------
  2874.      This Text Variable will be transformed into the Current Day
  2875.      of the Week.  The name will be fully spelled out.  This
  2876.      Variable can be any of the values: Sunday, Monday, Tuesday,
  2877.      Wednesday, Thursday, Friday and Saturday.
  2878.  
  2879.           Example:  $DOW$ = Saturday
  2880.  
  2881.  
  2882.      $ADOW$ ... Abbreviated Day of Week (eg, Mon, Tue, etc)
  2883.      -----------------------------------------------------
  2884.      This Text Variable will be transformed into the Current Day
  2885.      of the week, in abbreviated form.  This variable may be any
  2886.      of the following values: Sun, Mon, Tue, Wed, Thu, Fri and Sat.
  2887.  
  2888.           Example:  $ADOW$ = Mon
  2889.  
  2890.  
  2891.      $WDAY$ ... Weekday where 0 is Sunday (0-6)
  2892.      -----------------------------------------
  2893.      This Text Variable will be transformed into a one-digit number
  2894.      representing the Number of the Day of the Week.  Possible values
  2895.      for this Variable are 0-6, where 0=Sunday (the first day in the
  2896.      week).
  2897.  
  2898.           Example: $WDAY$ = 2
  2899.  
  2900.  
  2901.      $WOY$ ... Week of current year 00-53; Sunday=1st Day of Week
  2902.      -----------------------------------------------------------
  2903.      This Text Variable will be transformed into a number from 00-53,
  2904.      representing the Week Number in the current year.  Even though
  2905.      there are 52 weeks in a year, a week might not begin exactly on
  2906.      the first day of the year, so a maximum value for this variable
  2907.      can be 53 under these circumstances.  For this Variable, SUNDAY
  2908.      is considered to be the first day of the week.
  2909.  
  2910.           Example:  $WOY$ = 32
  2911.  
  2912.  
  2913.      $WOYM$ ... Week of current year 00-53; Monday=1st Day of Week
  2914.      ------------------------------------------------------------
  2915.      This Text Variable will be transformed into a number from 00-53,
  2916.      representing the Week Number in the current year.  Even though
  2917.      there are 52 weeks in a year, a week might not begin exactly on
  2918.      the first day of the year, so a maximum value for this variable
  2919.      can be 53 under these circumstances.  For this Variable, MONDAY
  2920.      is considered to be the first day of the week.
  2921.  
  2922.           Example:  $WOYM$ = 32
  2923.  
  2924.  
  2925.      $RIPVER$ ... RIPterm version (eg, "RIPSCRIP014500")
  2926.      --------------------------------------------------
  2927.      This Text Variable will be transformed into a key-phrase which
  2928.      will identify a RIPterm software package.  It is designed to
  2929.      be used by a Host BBS to detect what version of RIPscrip
  2930.      graphics your Terminal can support.  When this Text Variable
  2931.      is used, it will respond back with "RIPSCRIP" followed by
  2932.      the full Version Number (eg, 01.45.00), without the periods.
  2933.  
  2934.           Example: $RIPVER$ = RIPSCRIP014500
  2935.  
  2936.  
  2937.      $STATBAR$ ... If Status Bar is on, returns YES, otherwise NO
  2938.      -----------------------------------------------------------
  2939.      This Text Variable will be transformed into a "YES" if the Status
  2940.      Bar is currently On on the Terminal.  If the Status Bar is not
  2941.      visible, then this Variable will be "NO".
  2942.  
  2943.           Example:  $STATBAR$ = YES
  2944.  
  2945.  
  2946.      $X$ ... X Mouse location   (format: XXXX)
  2947.      ----------------------------------------
  2948.      This Text Variable is for reporting the current X location of
  2949.      the Mouse to the BBS.  This could be used interactively by the
  2950.      BBS (or a game on the BBS) to deterimine the location of the
  2951.      mouse cursor.  Only the X value of the Mouse (X,Y) location is
  2952.      returned to the BBS.  The value will be 0000-9999 depending on
  2953.      what the current position is.
  2954.  
  2955.           Example:  $X$ = 0523
  2956.  
  2957.  
  2958.      $Y$ ... Y Mouse location   (format: YYYY)
  2959.      ----------------------------------------
  2960.      This Text Variable is for reporting the current Y location of
  2961.      the Mouse to the BBS.  This could be used interactively by the
  2962.      BBS (or a game on the BBS) to deterimine the location of the
  2963.      mouse cursor.  Only the Y value of the Mouse (X,Y) location is
  2964.      returned to the BBS.  The value will be 0000-9999 depending on
  2965.      what the current position is.
  2966.  
  2967.           Example:  $Y$ = 0244
  2968.  
  2969.  
  2970.      $XY$ ... X/Y Mouse Location (format: XXXX:YYYY)
  2971.      ----------------------------------------------
  2972.      This Text Variable will be transformed into a combination of
  2973.      both the X and Y locations of the Mouse Cursor.  A colon (:) is
  2974.      used to separate the two values.  Either the X or Y values may
  2975.      range from 0000-9999 depending on the current location.  The
  2976.      format that this value takes on is:  XXXX:YYYY
  2977.  
  2978.           Example:  $XY$ = 0297:0321
  2979.  
  2980.  
  2981.      $XYM$ ... X, Y & button status (format: XXXX:YYYY:LMR)
  2982.      -----------------------------------------------------
  2983.      This Text Variable will be transformed into a combination of
  2984.      the X and Y Mouse Cursor location, and a status of which
  2985.      Mouse Buttons are pressed (if any).  The format of the returned
  2986.      text is XXXX:YYYY:LMR where XXXX is the X cursor location in the
  2987.      range 0000-9999.  YYYY is the Y cursor location in the range
  2988.      0000-9999.  Finally, LMR stands for Left/Middle/Right.  If either
  2989.      of these buttons are depressed (clicked), then the corresponding
  2990.      position will contain a 1.  If a button is NOT depressed, then it
  2991.      will contain a 0.
  2992.  
  2993.           Example:  $XYM$ = 0123:0297:110
  2994.  
  2995.      This means that the (X,Y) location of the cursor is (0123,0297),
  2996.      and that the Left and Middle buttons are depressed, but that the
  2997.      Right Mouse Button is not depressed.
  2998.  
  2999.  
  3000.      $M$ ... Mouse Button Status: LMR (eg, 101)
  3001.      -----------------------------------------
  3002.      This Text Variable will be transformed into a 3-character code
  3003.      representing what the Status of each Mouse Button is.  This
  3004.      variable can work with either 2-button Mice, or 3-button Mice.
  3005.      In either event, the format of the code is LMR where L=Left,
  3006.      M=Middle (if any), and R=Right.  If any of these buttons are
  3007.      depressed (ie, clicked), then the code for that button would be
  3008.      a "1".  If the button is not depressed, it is a "0".  So, a value
  3009.      of "100" would mean that the Left Mouse Button is depressed, but
  3010.      none of the others are.
  3011.  
  3012.           Example:  $M$ = 001
  3013.  
  3014.  
  3015.      $MSTAT$ ... Mouse Status (format: XXXX:YYYY:LMR)
  3016.      ------------------------------------------------
  3017.      This Text Variable will be transformed into a "YES" if there is
  3018.      a Mouse installed on the RIPterm computer.  If no Mouse is
  3019.      installed, this variable will contain "NO".
  3020.  
  3021.           Example:  $MSTAT$ = YES
  3022.  
  3023.  
  3024.      $SBARON$ ... Turn ON the Status Line
  3025.      ------------------------------------
  3026.      This Text Variable is somewhat different than the other Text
  3027.      Variables described above.  Rather than send something back
  3028.      to the Host, it performs a specific operation - it turns ON
  3029.      the Status Line.  In this respect, it is considered an ACTIVE
  3030.      TEXT VARIABLE.  It evaluates to a null string (nothing).  Its
  3031.      sole purpose in life is to enable the Status Line.
  3032.  
  3033.           Example:  $SBARON$ = <nil>
  3034.  
  3035.  
  3036.      $SBAROFF$ ... Turn OFF the Status Line
  3037.      --------------------------------------
  3038.      This Text Variable is somewhat different than the other Text
  3039.      Variables described above.  Rather than send something back
  3040.      to the Host, it performs a specific operation - it turns OFF
  3041.      the Status Line.  In this respect, it is considered an ACTIVE
  3042.      TEXT VARIABLE.  It evaluates to a null string (nothing).  Its
  3043.      sole purpose in life is to disable the Status Line.
  3044.  
  3045.           Example:  $SBAROFF$ = <nil>
  3046.  
  3047.  
  3048.      $ETW$ ... Erase Text Window
  3049.      ---------------------------
  3050.      This Text Variable is somewhat different than the other Text
  3051.      Variables described above.  Rather than send something back
  3052.      to the Host, it performs a specific operation - it Erases the
  3053.      current Text Window (much like a Clear Screen code does).  This
  3054.      command is particularly useful in Host Commands when you click
  3055.      on a Mouse area, and after it is finished clicking, it could
  3056.      erase the text window THEN transmit the remainder of the host
  3057.      command (if any) to the BBS.
  3058.  
  3059.           Example:  $ETW$ = <nil>
  3060.  
  3061.  
  3062.      $EGW$ ... Erase Graphics Window
  3063.      -------------------------------
  3064.      This Text Variable is somewhat different than the other Text
  3065.      Variables described above.  Rather than send something back
  3066.      to the Host, it performs a specific operation - it Erases the
  3067.      current Graphics Window (much like a Reset Windows command does).
  3068.      This command is particularly useful in Host Commands when you
  3069.      click on a Mouse area, and after it is finished clicking, it
  3070.      could erase the graphics window THEN transmit the remainder of
  3071.      the host command (if any) to the BBS.
  3072.  
  3073.           Example:  $EGW$ = <nil>
  3074.  
  3075.  
  3076.      $MKILL$ ... Kill all Mouse Fields currently defined
  3077.      ---------------------------------------------------
  3078.      This Text Variable is also an "Active Text Variable" in the
  3079.      sense that it doesn't transmit anything per se to the Host.
  3080.      What it does do, is upon execution, it deletes all currently
  3081.      defined Mouse Fields exactly like the RIP_KILL_MOUSE_FIELDS
  3082.      does.  The net benefit of this is that when the user clicks
  3083.      on a Mouse Button, the Mouse Fields are removed, but the
  3084.      graphics remain on the screen so that the fields could be
  3085.      subsequently re-defined quickly and easily without having to
  3086.      re-transmit an identical menu over again.
  3087.  
  3088.           Example:  $MKILL$ = <nil>
  3089.  
  3090.  
  3091.      $BEEP$ ... Beeps the terminal (like a CTRL-G does)
  3092.      --------------------------------------------------
  3093.      This command is an Active Text Variable.  It's sole purpose
  3094.      in life is to issue a Beep to the Terminal, thus producing
  3095.      a CTRL-G sound.
  3096.  
  3097.           Example:  $BEEP$ = <nil>
  3098.  
  3099.  
  3100.      $BLIP$ ... Makes a short "blipping" sound (like a Barrier)
  3101.      ----------------------------------------------------------
  3102.      This Active Text Variable is much like the BEEP variable,
  3103.      except that the sound produced is different.  It produces
  3104.      a sound more akin to a "barrier" sound; something that 
  3105.      sounds like you're running into a wall or something to that
  3106.      effect.
  3107.  
  3108.           Example:  $BLIP$ = <nil>
  3109.  
  3110.  
  3111.      $MUSIC$ ... Makes a musical (cheerful) sound
  3112.      --------------------------------------------
  3113.      This Active Text Variable also produces an Audio result.  The
  3114.      sound that is generated is a cheerful sound, representing 
  3115.      some kind of success.  The sound is exactly the same as the
  3116.      Sound you would hear when you receive a successful download,
  3117.      or when you achieve a connection when dialing the modem in
  3118.      RIPterm.
  3119.  
  3120.      $DTW$ ... Disable Text Window
  3121.      -----------------------------
  3122.      This Text Variable is somewhat different than the other Text
  3123.      Variables described above.  Rather than send something back
  3124.      to the Host, it performs a specific operation - it Disables the
  3125.      current Text Window (preventing any received text from showing
  3126.      up on screen).  This command is particularly useful in Host
  3127.      Commands when you click on a Mouse area, and after it is
  3128.      finished clicking, it could erase the text window THEN transmit
  3129.      the remainder of the host command (if any) to the BBS.
  3130.  
  3131.           Example:  $DTW$ = <nil>
  3132.  
  3133.  
  3134.      $PCB$ ... Paste Clip Board at last location
  3135.      -------------------------------------------
  3136.      This command will physically paste the contents of the clipboard
  3137.      at the last location that the clipboard was "clipped" from.
  3138.      This even works with Icons that are loaded.  The last location
  3139.      taken in this situation, is the location the Icon was stamped
  3140.      when it was originally loaded.  This text variable is very
  3141.      useful in situations where you want to "pop-up" a dialog box
  3142.      on the screen (saving the previous area behind the dialog onto
  3143.      the clipboard), and when the user clicks on the "OK" button,
  3144.      restoring the screen contents (by adding a $PCB$ in the host
  3145.      command string).
  3146.  
  3147.           Example:  $PCB$ = <nil>
  3148.  
  3149.  
  3150.      $SMF$ ... Save Mouse Fields
  3151.      ---------------------------
  3152.      This text variable will physically save all currently defined
  3153.      Mouse Fields and Mouse Buttons to a temporary file for later
  3154.      retrieval.  This is designed especially for the graphical
  3155.      designer who wishes to pop-up a dialog box on the screen with
  3156.      one or more mouse fields, and when finished, to restore the
  3157.      screen and original mouse fields (if any) so that the user is
  3158.      not left "floating".  This command is intended to be used with
  3159.      the Restore Mouse Fields text variable $RMF$.
  3160.  
  3161.           Example:  $SMF$ = <nil>
  3162.  
  3163.  
  3164.      $RMF$ ... Restore Mouse Fields
  3165.      ------------------------------
  3166.      This text variable physically restores any previously saved
  3167.      Mouse Fields saved with the $SMF$ text variable.  You may
  3168.      have only one set of mouse fields saved at any one time.  If
  3169.      there were no mouse fields saved, or if the number of mouse
  3170.      fields that were saved was 0, then no mouse fields will be
  3171.      active.  Any fields that were defined at the time of this
  3172.      command's execution will be erased.  Due to technical details,
  3173.      this should be the last piece of text or the last text variable
  3174.      in any Mouse Host Command (or Button Host Command).  Having
  3175.      subsequent text variables or host command text after this
  3176.      variable (in a mouse field) can lead to unpredictable and
  3177.      potentially disasterous results.
  3178.  
  3179.      NOTE: You may restore Mouse Fields more than once if you wish.
  3180.            In other words, if you perform a "Save Mouse Fields"
  3181.            command, you may execute Restore Mouse Fields one or
  3182.            more times after that point.
  3183.  
  3184.           Example:  $RMF$ = <nil>
  3185.  
  3186.  
  3187.       $COFF$ ... Disable the text cursor
  3188.       ----------------------------------
  3189.       This command will physically shut off the ASCII text cursor that 
  3190.       is normally seen in the text window.  This is automatically reset
  3191.       whenever a $CON$ command (Cursor ON) or a Reset Windows command
  3192.       is received.
  3193.  
  3194.           Example:  $COFF$ = <nil>
  3195.     
  3196.     
  3197.       $CON$ ... Re-displays the text cursor
  3198.       -------------------------------------
  3199.       This command will physically turn ON the ASCII text cursor.  This
  3200.       is the exact opposite of the $COFF$ command which disables the
  3201.       text cursor.
  3202.  
  3203.           Example:  $CON$ = <nil>
  3204.     
  3205.     
  3206.       $STW$ ... Save text window information
  3207.       --------------------------------------
  3208.       This command will physically store all of the text window 
  3209.       settings.  The window's X/Y dimensions are preserved, as is the
  3210.       current cursor location, ANSI attributes, cursor ON/OFF status
  3211.       and the vertical scrolling margins.  Even the current System Font
  3212.       will be saved (if necessary).
  3213.     
  3214.           Example:  $STW$ = <nil>
  3215.  
  3216.     
  3217.       $RTW$ ... Restore text window information
  3218.       -----------------------------------------
  3219.       This command will restore the text window to whatever settings
  3220.       were active when the $STW$ (save text window) command was issued.
  3221.       The cursor, ANSI attributes and any other piece of text window
  3222.       information will be restored (including the System Font setting).
  3223.     
  3224.           Example:  $RTW$ = <nil>
  3225.     
  3226.     
  3227.     
  3228.     
  3229.     
  3230.      =====================================================================
  3231.      ==                           POP-UP LISTS                          ==
  3232.      =====================================================================
  3233.  
  3234.      Any place that you can use a Text Variable, you can take advantage
  3235.      of a unique feature of RIPscrip - Popup Pick-Lists.  A Popup Pick-
  3236.      List is simply a list that pops up allowing you to choose from one
  3237.      of several available values.  Whichever entry in the list you choose
  3238.      will be inserted into your Keystroke Macro in place of the List
  3239.      Definition.
  3240.  
  3241.      In order to use Popup Pick-Lists, you must define the List in the
  3242.      text of your Host Command.
  3243.  
  3244.      A List is created by putting the special List instructions inside of
  3245.      two parenthesis (( and )).  The list instructions consist of an
  3246.      optional Question, followed by one or more entries to put in the
  3247.      List.  For example, ((Send Email to?::Sysop,Cosysop,Joe)) says to
  3248.      Pop-Up a list asking you "Send Email to?", giving you the choices of
  3249.      "Sysop", "Cosysop", and "Joe".
  3250.  
  3251.      By default, if you hit <ESCAPE> instead of picking an entry in the
  3252.      list, then nothing will be inserted into the text of your Command.
  3253.      You can indicate that the user MUST pick an entry by puttin an
  3254.      asterisk (*) at the beginning of the question.  For example, 
  3255.      ((*Send Mail to?::Sysop,Joe)).  This would make it so that the User
  3256.      MUST choose either SYSOP or JOE.
  3257.  
  3258.      In the previous examples, SYSOP, COSYSOP and JOE are the actual text
  3259.      responses that are inserted into your Macros.  These commands are
  3260.      also the same things that are displayed in the Listing.  If you want
  3261.      to use something else instead of the actual "return text", you can.
  3262.      When you enter the List Entry, add a @description to the end of it.
  3263.  
  3264.  
  3265.         For example, ((Send Mail To?::Sysop@Head Honcho,Cosysop,Joe))
  3266.  
  3267.  
  3268.      One final feature of Popup Pick-Lists allow you to specify a hotkey
  3269.      for each entry in the List.  For example, if you wanted the first
  3270.      character of each entry to be hilighted (thus allowing you to select
  3271.      that character to activate the entry), simply put a tilda (~) or an
  3272.      underline (_) before and after the keystroke.  For example "_S_ysop"
  3273.      would hilight the "S" in "Sysop".  You can hilight more than one
  3274.      character, but only the first one will be the active hotkey.  If you
  3275.      omit the second tilda or underline, then the remainder of the
  3276.      description will be hilighted.
  3277.  
  3278.         NOTE: If you use a Tilda or an Underline in the actual Text
  3279.               Response command (not the description), then those
  3280.               characters will be automatically inserted into your
  3281.               Macro when it gets transmitted to the BBS.  This is
  3282.               probably not what you would want to do.  Bottom line,
  3283.               only use Hotkey features on List Entries where you
  3284.               specify a Description!
  3285.    
  3286.               If you do not specify a Question, then the List will
  3287.               ask you: 
  3288.           
  3289.        
  3290.                   "Choose one of the following:"
  3291.    
  3292.    
  3293.               You may specify up to twenty List Entries for any
  3294.               one list.
  3295.  
  3296.  
  3297.      Examples:
  3298.  
  3299.        ((Send E-Mail to?::Sysop,Joe,Mike))
  3300.        ((*Send EMail to?::Sysop@The Head Honcho,Joe,Mike@My Brother))
  3301.        ((::Sysop@_T_he Head Honcho,Joe,Mike@My _B_rother))
  3302.        ((Sysop,Joe,Mike,George))
  3303.  
  3304.  
  3305.  
  3306.  
  3307.  
  3308.      =====================================================================
  3309.      ==                     HOST COMMAND "TEMPLATES"                    ==
  3310.      =====================================================================
  3311.  
  3312.      This feature is somewhat complex in nature, but ultimately powerful
  3313.      in the long run when creating interactive mouse-driven GUI systems.
  3314.  
  3315.      Often times you might want a Button on your screen to do one thing
  3316.      in one situation, but to do something completely different in
  3317.      another situation.  In the past, this required having a separate
  3318.      menu file for each different function that this Button needs.  This
  3319.      cumbersome method is "history" with Command Templates.
  3320.  
  3321.      Command Templates are probably best described with a brief example.
  3322.      Let's say that you have a menu screen for reading and writing 
  3323.      messages in your public message forums.  On this menu, you can have
  3324.      buttons for each forum on your system, and at the same time have
  3325.      buttons for READ, WRITE, ERASE, MODIFY, etc.  Now, how can you make
  3326.      the READ/WRITE/etc buttons work differently for each Forum?
  3327.  
  3328.  
  3329.                                    Templates!
  3330.  
  3331.  
  3332.      To further refine our example, let's say that if you click on the
  3333.      button for Forum #1, it should send the command "S FORUM1" to the
  3334.      host to select that forum.  After that, simply clicking on the
  3335.      READ or WRITE buttons will read through the current section.  But,
  3336.      what if you want to interactively move about on the menu quickly?
  3337.      Make each of the Forum selection buttons define a template.  Each
  3338.      template will instruct RIPscrip how to process the other Buttons.
  3339.  
  3340.      In the above example, the Forum #1 button would define a template
  3341.      like this:
  3342.  
  3343.  
  3344.                                  S FORUM1 $?$^m
  3345.  
  3346.  
  3347.      This Template will return "S FORUM1" followed by the Host Command
  3348.      for whichever button is clicked, followed by a carriage return.
  3349.      The special text variable $?$ is only used in Command Templates,
  3350.      and is used to indicate "insert the text into the template here".
  3351.      It references the text of some other button that was clicked that
  3352.      is stuffing it's data INTO this template.
  3353.  
  3354.  
  3355.      CHARACTERISTICS OF TEMPLATES
  3356.      ----------------------------
  3357.         Before you can actually go about defining templates, you
  3358.         need to know how they work, interact and how other functions
  3359.         interact with templates.
  3360.  
  3361.         You are allowed up to 36 different templates, each of which
  3362.         can be different and can all be active at the same time.  Each
  3363.         of the 36 templates correspond to a Button Group (see the 
  3364.         Button Command).  Templates can be defined and/or activated
  3365.         in any order.  In other words, you can have a template #1, 5
  3366.         13 and 32, but none of the others defined.  Templates remain
  3367.         defined until re-defined by another template.
  3368.  
  3369.  
  3370.      DEFINING A TEMPLATE
  3371.      -------------------
  3372.         To create a template, when asked for a Host Command, simply
  3373.         type in the Template similar to the following:
  3374.  
  3375.  
  3376.                [5:]S FORUM1 $?$^m
  3377.  
  3378.  
  3379.         The [5:] at the beginning of the command indicates that you
  3380.         wish to create template #5 with the following text as the
  3381.         template.  Remember, a $?$ is considered a "macro" that will
  3382.         insert some text into this template from some other source.
  3383.         Valid template numbers are 0-9, A-Z.  So, with this in mind,
  3384.         all of the template definitions are valid:
  3385.  
  3386.           
  3387.                [0:]S FORUM1 $?$^m
  3388.                [9:]S FORUM2 $?$^m
  3389.                [G:]S FORUM3 $?$^m
  3390.  
  3391.  
  3392.      USING TEMPLATES
  3393.      ---------------
  3394.         When you want to make a button "feed its command" into a
  3395.         template, you do so in a format similar to defining a
  3396.         Template, but with a subtle difference.  Don't include
  3397.         the colon (:) in the template reference.  An example of
  3398.         this would be the following:
  3399.  
  3400.  
  3401.                [0]HELLO
  3402.  
  3403.  
  3404.         This says, take the text "HELLO" and feed it into template
  3405.         number 0, and send the final result to the BBS.  Note how
  3406.         simple it is to create and reference templates by either
  3407.         using a colon or omitting it.
  3408.  
  3409.         If you do not specify a Template reference in the format
  3410.         [#] at the beginning of your Host Command, it will be
  3411.         considered to be a "normal Host Command" that does not
  3412.         get stuffed into any templates.  For completeness, you
  3413.         may specify []HELLO to send the word "HELLO" to the BBS
  3414.         without going through any templates (a "null" template).
  3415.         So in other words, using a [] or using nothing at all is
  3416.         the same thing, don't use any templates for this Host
  3417.         command.
  3418.  
  3419.  
  3420.      CHAINING ONE TEMPLATE RESPONSE INTO ANOTHER (TEMPLATE CHAINING)
  3421.      ---------------------------------------------------------------
  3422.         In the preceding examples we showed how you can feed the
  3423.         Host Command of one button through a single Template
  3424.         definition.  This is the "simplest case" of template
  3425.         processing.  As part of the "big picture" of templates,
  3426.         you can actually "chain" the input of one template into
  3427.         another template, into another, so on and so forth and
  3428.         then transmit the result of all composite template stuffing
  3429.         to the Host as one big command.  After all is said and done
  3430.         with template processing, the text buffer sent to the host
  3431.         can be anywhere from 0-4095 bytes in length.
  3432.  
  3433.         To chain one template into another, follow a format similar
  3434.         to the following:
  3435.  
  3436.          
  3437.                [0372]HELLO
  3438.  
  3439.  
  3440.         This will feed the word "HELLO" into template #0, then the
  3441.         result into template #3, then that result into template #7,
  3442.         then finally the result will be stuffed into Template #2.
  3443.         The final result will be then transmitted to the BBS.
  3444.  
  3445.         You may specify from 0-36 different templates in any one
  3446.         chaining operations.  You MAY use the same template more
  3447.         than once in the same chain, like the following:
  3448.  
  3449.  
  3450.                [0370]HELLO
  3451.  
  3452.  
  3453.         Note, that template #0 is used twice, both at the beginning
  3454.         and the end of the processing.  This feature, potentially
  3455.         dangerous, is provided for completeness and flexibility.
  3456.  
  3457.  
  3458.      EMBEDDED TEMPLATES
  3459.      ------------------
  3460.         You can embed the contents of one Template into another
  3461.         template (or into a Host Command) by using the special
  3462.         Text Variable $?x$ where "x" is the Template number to
  3463.         insert.  This command functions much like the insert-text
  3464.         variable $?$ does, but gives you a great deal more power
  3465.         and flexibility.
  3466.  
  3467.         If you specify to embed one template inside another, the
  3468.         embedded template can contain text variables, pick-lists
  3469.         and other such things.  It can even have another embedded
  3470.         template in it as well, but that sub-embedded template
  3471.         cannot have ANY text variables, or any special commands,
  3472.         not even control characters!
  3473.  
  3474.         To sum it up, an embedded template can have anything you
  3475.         want in it, including other embedded templates.  All
  3476.         text variables in an embedded template are expanded, as
  3477.         are pick lists, control characters and the like.  If you
  3478.         have an embedded template INSIDE an embedded template,
  3479.         the deepest embedded template will have NO text variable
  3480.         processing done on it - ie, the text is sent to the
  3481.         host verbatim, exactly as it appears in the template.
  3482.  
  3483.         If a template that is referenced is not yet defined, the
  3484.         template embed command will be skipped (ie, blank) providing
  3485.         that the embedded template doesn't refer to a Radio Group.
  3486.         Radio Groups are "dependencies" in this manner.  Anything
  3487.         that tries to embed a Template from a Radio Group will
  3488.         not be processed if a template in that area hasn't been
  3489.         defined yet.  Embedded templates from Checkbox Groups can
  3490.         be skipped if none of the check-boxes are active.
  3491.  
  3492.  
  3493.      TEXT VARIABLES, PICK-LISTS AND CONTROL CHARACTERS IN TEMPLATES
  3494.      --------------------------------------------------------------
  3495.         You may use Text Variables, Pick-Lists and Control Characters
  3496.         anywhere in any template definition, or reference.  You are
  3497.         limited such that, a text variable is translated to its
  3498.         real value when the template is being processed, not after
  3499.         all templates are processed.  The net result of this is,
  3500.         you cannot use one template to construct another template's
  3501.         pick-list, text variables, or the such.
  3502.  
  3503.         In other words, you cannot "nest" text variable definitions,
  3504.         pick lists, or control characters.  You can have these
  3505.         commands in any or all templates used in a given template
  3506.         chain, but they are independent of each other.
  3507.  
  3508.  
  3509.      EXAMPLES OF SOME TEMPLATE-CHAINS
  3510.      --------------------------------
  3511.         Below are several examples of different template setups.
  3512.         These are intended to give you ideas on how templates
  3513.         may be used:
  3514.  
  3515.           Example #1:
  3516.  
  3517.             [0:]D $?$ Z^m       ... Used to download a file with Zmodem
  3518.             [1:]D $?$ X^m       ... Used to download a file with Xmodem
  3519.  
  3520.             [0]FILENAME.ZIP     ... Use this with #0 to download Zmodem
  3521.             [1]FILENAME.ZIP     ... Use this with #1 to download Xmodem
  3522.  
  3523.             In this example, template #0 is used for downloading with
  3524.             Zmodem.  Template #1 is for downloading with Xmodem.
  3525.             Depending on which FILENAME.ZIP button you click on, you
  3526.             might download it with one protocol or with another.  It
  3527.             all lies on which template you reference.  The text
  3528.             transmitted to the BBS if you clicked on the buttons could
  3529.             be either:
  3530.  
  3531.                     D FILENAME.ZIP Z^m
  3532.               or,   D FILENAME.ZIP X^m
  3533.  
  3534.  
  3535.           Example #2:
  3536.  
  3537.             [0:]D $?$           ... Make this the "DOWNLOAD NOW" button
  3538.  
  3539.             [1:]$?$ X^m         ... Radio Button #1   (X-Modem)
  3540.             [1:]$?$ Y^m         ... Radio Button #2   (Y-Modem)
  3541.             [1:]$?$ B^m         ... Radio Button #3   (Y-Modem Batch)
  3542.             [1:]$?$ Z^m         ... Radio Button #4   (Z-Modem)
  3543.  
  3544.             [01]FILENUM1.ZIP    ... Button to download file #1
  3545.             [01]FILENUM2.ZIP    ... Button to download file #2
  3546.             [01]FILENUM3.ZIP    ... Button to download file #3
  3547.  
  3548.             This example is a bit more involved.  It brings the concept
  3549.             of "radio buttons" into the picture.  This is something
  3550.             that is part of the Button command.  A Radio button is
  3551.             like having a list of options on your screen, only one
  3552.             of which can be active at any one time.  When using
  3553.             templates with Radio buttons, you can quickly and elegantly
  3554.             define a menu that can do one thing in one mode, or
  3555.             something totally different in another mode.  An example
  3556.             of the above menu might be as follows:
  3557.  
  3558.  
  3559.                  Protocols:                Download which file?     
  3560.                     __                        __
  3561.                    |\/|                      |  |
  3562.                    |/\| X-Modem              |  | File #1
  3563.                     --                        --
  3564.                     __                        __
  3565.                    |  |                      |\/|
  3566.                    |  | Y-Modem              |/\| File #2
  3567.                     --                        -- 
  3568.                     __                        __
  3569.                    |  |                      |  |
  3570.                    |  | Y-Modem (batch)      |  | File #3
  3571.                     --                        --  
  3572.                     __
  3573.                    |  |
  3574.                    |  | Z-Modem         _______________________
  3575.                     --                 |                       |
  3576.                                        |  BEGIN DOWNLOAD NOW!  |
  3577.                                        |_______________________|
  3578.  
  3579.  
  3580.      MORE ABOUT TEMPLATES
  3581.      --------------------
  3582.         When you use the $?$ text variable inside a template definition,
  3583.         you are not limited to using it only once.  In fact, you can use
  3584.         it as many times in your template definition as you wish.  This
  3585.         can be useful under many circumstances where the user might have
  3586.         to enter the same thing twice.
  3587.  
  3588.         In the preceding example #2, a group of Radio Buttons was used
  3589.         on the right side of the screen to determine which file should
  3590.         be downloaded.  In that example, there was no ability to specify
  3591.         an arbitrary filename to download.  You were only allowed to 
  3592.         download one of three given files.  What would be perfect, would
  3593.         be to have the ability to pop-up a question to the user asking
  3594.         what filename they wanted.  The solution is easy, insert a
  3595.         text-variable that hasn't been defined yet!  To illustrate, the
  3596.         above example could be modified to accomodate this as follows:
  3597.  
  3598.             [0:]D $?$           ... Make this the "DOWNLOAD NOW" button
  3599.  
  3600.             [1:]$?$ X           ... Radio Button #1   (X-Modem)
  3601.             [1:]$?$ Y           ... Radio Button #2   (Y-Modem)
  3602.             [1:]$?$ B           ... Radio Button #3   (Y-Modem Batch)
  3603.             [1:]$?$ Z           ... Radio Button #4   (Z-Modem)
  3604.  
  3605.             [01]FILENUM1.ZIP    ... Button to download file #1
  3606.             [01]FILENUM2.ZIP    ... Button to download file #2
  3607.             [01]FILENUM3.ZIP    ... Button to download file #3
  3608.             [01]$FILENAME$      ... Button to download ANY file
  3609.  
  3610.         The screen might appear something like this:
  3611.  
  3612.                  Protocols:                Download which file?     
  3613.                     __                        __
  3614.                    |\/|                      |  |
  3615.                    |/\| X-Modem              |  | File #1
  3616.                     --                        --
  3617.                     __                        __
  3618.                    |  |                      |\/|
  3619.                    |  | Y-Modem              |/\| File #2
  3620.                     --                        -- 
  3621.                     __                        __
  3622.                    |  |                      |  |
  3623.                    |  | Y-Modem (batch)      |  | File #3
  3624.                     --                        --  
  3625.                     __                        __
  3626.                    |  |                      |  |
  3627.                    |  | Z-Modem              |  | Enter Filename
  3628.                     --                        -- 
  3629.                                        
  3630.                                _______________________         
  3631.                               |                       |
  3632.                               |  BEGIN DOWNLOAD NOW!  |
  3633.                               |_______________________|
  3634.         
  3635.  
  3636.         Note the addition of the "Enter Filename" button.  If the user
  3637.         clicked on that button, it would first try to replace $FILENAME$
  3638.         with a text variable.  It will find that such a variable does
  3639.         not exist, and will then pop-up the following question on the
  3640.         screen:
  3641.  
  3642.                        _____________________________ 
  3643.                       |                             |
  3644.                       |       Enter "FILENAME"      |
  3645.                       |   _______________________   |
  3646.                       |  |                       |  |
  3647.                       |  |_______________________|  |
  3648.                       |                             |
  3649.                       |_____________________________|
  3650.  
  3651.  
  3652.         If the user typed in "DEMOFILE.TXT", then that filename is
  3653.         inserted where $FILENAME$ was located, then it is piped through
  3654.         template #0, resulting in:
  3655.         
  3656.         
  3657.                     D DEMOFILE.TXT
  3658.                    
  3659.                 
  3660.         The result of that is then stuffed through Template #1 which
  3661.         gives the following return string sent to the BBS:
  3662.  
  3663.  
  3664.                     D DEMOFILE.TXT Z^m
  3665.  
  3666.  
  3667.         This is only an example, your mileage may vary.
  3668.  
  3669.  
  3670.  
  3671.  
  3672.      =====================================================================
  3673.      ==                TEXT VARIABLE CREATION, AND QUERY                ==
  3674.      =====================================================================
  3675.  
  3676.      As mentioned in preceding sections, Text Variables were described
  3677.      as either "pre-defined" variables, or as "User Variables".  Pre-
  3678.      defined variables are variables that RIPscrip products know things
  3679.      about "out of the box".  They will always know what the variables
  3680.      mean, from the day you install them.  User Variables on the other
  3681.      hand, are variables that you, the user of RIPscrip products define,
  3682.      and teach the system information.
  3683.  
  3684.  
  3685.      WHAT ARE USER VARIABLES?
  3686.      ------------------------
  3687.         A User Variable is a Text Variable that RIPscrip doesn't
  3688.         already know exists.  They are custom-defined text variables
  3689.         that contain information that the RIPterm user will fill-in.
  3690.         If a variable already contains information, a BBS will be auto-
  3691.         matically told [IF TOLD TO DO SO] what that variable contains
  3692.         without the user having to intervene (ie, transparent informa-
  3693.         tion exchange).
  3694.  
  3695.            Examples of Text Variables might be:
  3696.  
  3697.                $FULL_NAME$    ... What is your full name?
  3698.                $COMPANY_NAME$ ... What company do you work for?
  3699.                $AGE?          ... How old are you?
  3700.                $DATEOFBIRTH$  ... What is your Date of Birth?
  3701.                $PHONENUMBER$  ... What is your Day-time phone number?
  3702.  
  3703.         User Variables will "keep track" of these responses for you,
  3704.         on the Terminal program end.  You can tell the Terminal to
  3705.         store these values "permanently" in a disk-file, or they may
  3706.         be active only during the current online session, or they
  3707.         may be defined as "temporary" where they are not stored for
  3708.         more than a brief moment.  
  3709.  
  3710.         Note, this ability is configurable so that information exchange
  3711.         can be either interactive, or automatic.  Automatic transfer
  3712.         of information does NOT prompt the user with the information
  3713.         unless the variable has not yet been defined.  If it has not
  3714.         been defined, a pop-up question will appear asking the user
  3715.         a particular question, thus defining the text variable.  
  3716.         
  3717.         If the exchange is "interactive", the data is displayed in a
  3718.         pop-up editor box, asking you if the information is correct.
  3719.         If it is, simply tap <ENTER> and the retrieved information is
  3720.         sent to the BBS for you.  If it is not correct, or it has not
  3721.         been created yet, just type it in and tap <ENTER> and it will 
  3722.         be saved automatically, and sent to the BBS all at once.
  3723.  
  3724.  
  3725.      HOW CAN USER VARIABLES BE IMPORTANT?
  3726.      ------------------------------------
  3727.         Let's take an example.  Let's say you are a System Operator
  3728.         of a large RIPscrip BBS.  As you have read, RIPscrip can take
  3729.         advantage of "database like" ability on the terminal-end of
  3730.         the communication.  If you can alter your BBS to ask questions
  3731.         with RIPscrip "text variables" built in, you can have the
  3732.         terminal calling your system automatically fill-in questionaires
  3733.         on your system.  Imagine if a user could "sign-up" on your BBS
  3734.         without having to type more than a single keystroke (ie, "YES,
  3735.         this information is correct").  With User Text Variables, you
  3736.         can do this very thing.
  3737.  
  3738.  
  3739.      CREATING USER VARIABLES
  3740.      -----------------------
  3741.         There are two ways of defining User Text Variables in RIPaint.
  3742.         You can use either "Define Text Variable" commands, or you
  3743.         can use Text Variable Queries, as described in the next
  3744.         section.
  3745.  
  3746.  
  3747.      DEFINING TEXT VARIABLES
  3748.      -----------------------
  3749.         The RIPscrip command "Define Text Variable" is by definition,
  3750.         an interactive command with the User.  The RIPscrip command
  3751.         will attempt to define a "User Variable".  This Variable is
  3752.         some piece of information that the System Operator deems 
  3753.         important.  You may specify a question, a default response,
  3754.         and how many characters long the response may be.
  3755.  
  3756.         Once the "define command" has been sent to the Terminal, it
  3757.         [the terminal] pops up an appropriate question box on the
  3758.         User's screen asking him the desired question that should be
  3759.         saved to a particular Text Variable.  If you did not specify
  3760.         a question, a suitable "default" question will be displayed.
  3761.  
  3762.         Once the User has entered his response, it is recorded and
  3763.         saved.  How long it is saved depends on how the BBS told
  3764.         the terminal.  The BBS can tell the terminal "save this
  3765.         on your hard disk forever".  The BBS may also tell the
  3766.         terminal, "don't save this to disk, but remember this value
  3767.         until your connection with our BBS is lost".  You also have
  3768.         the option of saying, "don't remember this value at all,
  3769.         just simply pop-up a question on-screen, and send the value
  3770.         to me NOW - ie, don't save it at all - just enter it and send
  3771.         it to the BBS).
  3772.  
  3773.  
  3774.      QUERYING TEXT VARIABLES
  3775.      -----------------------
  3776.         Now that you know how to define information on the terminal,
  3777.         you need to know the last method of asking the terminal
  3778.         about text variables.  This feature is called "data query".
  3779.         
  3780.         Data Query is a generic "query" command that can ask the
  3781.         terminal one or more questions, and tell it how to transmit
  3782.         the information back to the host.  This command is for use
  3783.         in non-button situations where you do not want to wait until
  3784.         the user clicks on a button to get your data back.
  3785.  
  3786.         A Data Query is actually a special RIPscrip command that can
  3787.         be used to ask the contents of one or more Text Variables.
  3788.  
  3789.  
  3790.      EXAMPLES OF TEXT VARIABLE QUERY
  3791.      -------------------------------
  3792.        Let's take a simple example.  Let's say that you wanted to ask
  3793.        the Terminal program some address information.  You could do
  3794.        so with the following query (remember, the query also tells
  3795.        the terminal HOW to send the data back to the BBS):
  3796.  
  3797.           
  3798.           $FULL_NAME$^m$COMPANY$^m$STREET_ADDR$^m$CITY$, $STATE$ $ZIP^m
  3799.  
  3800.  
  3801.        This would query the terminal the contents of 6 text variables,
  3802.        and format them in a manner similar to any normal address on
  3803.        an envelope.  The results of this query might send the following
  3804.        back to the host (again, your mileage may vary):
  3805.  
  3806.  
  3807.           Jeff Reeder
  3808.           TeleGrafix Communications, Inc.
  3809.           16458 Bolsa Chica #15
  3810.           Huntington Beach, CA 92649
  3811.  
  3812.  
  3813.        If a text variable is queried, and it has not been defined yet,
  3814.        a pop-up question will appear asking the user to fill-in the
  3815.        information.
  3816.  
  3817.  
  3818. 
  3819.