1 RIM
 RIM is a relational data base management system.  RIM commands allow
 you to define, load, query and modify a data base.  You should do the
 following in order to use RIM:
 
    $ ASSIGN LIB_USER:HELPDB1.DAT HELPDB1       ! place in LOGIN.COM
    $ ASSIGN LIB_USER:HELPDB2.DAT HELPDB2       ! place in LOGIN.COM
    $ ASSIGN LIB_USER:HELPDB3.DAT HELPDB3       ! place in LOGIN.COM
    $ RIM :== $LIB_USER:RIM                     ! place in LOGIN.COM

    $ RIM                                       ! issue to start RIM

 DISCLAIMER:  This is the IPAD RIM program, a highly powerful and
    general relational DBMS.  It was written on a NASA contract and is
    accordingly public domain within the United States and is made
    available to aid those who cannot afford commercial DBMS packages. 

    We do NOT know any more about the package than you do.  If it works
    for you great!  If it doesn't, you will have to figure out how to
    fix it, or live without it.  In other words, there is NO SUPPORT for
    this package. 

        +------------------------------------------------------------+
        | RESTRICTION:  until January 1, 1986, this software may not |
        |    be published or distributed outside the United States.  |
        +------------------------------------------------------------+
2 Manual
 A copy of the user's manual for this package may be obtained by 
 printing the file:

        $ PRINT/FORM=6DOCUMENT LIB_USER:RIM.MEM

 This library file also contains some useful information and it to may 
 be printed out:

        $ HELP/OUTPUT=RIM.HLP @USERLIB RIM...
        $ PRINT/FORM=6DOCUMENT RIM.HLP
2 Program_interface
 There is also a program interface for this package.  For details on how 
 to call the RIM subroutines, printout the user's manual as specified in
 "HELP @USERLIB RIM Manual"

 To link the RIM subroutines into your program you should include the 
 RIM object library in your program's LINK phase.  For example:

        $ LINK  your_program, LIB_USER:RIM/LIBRARY

 The RIM object library is stored in

        LIB_USER:RIM.OLB
2 UPPERCASE
 It appears that all RIM commands and keywords must be in uppercase.
2 CONCEPTS
 RELATIONAL DATA BASE CONCEPTS
 ---------- ---- ---- --------
  A RIM relational data base contains a SCHEMA and DATA.  The DATA is
  organized as RELATIONS.  A data base may contain several RELATIONS.
  Each RELATION consists of ATTRIBUTES. You can select, format and
  display data from a RELATION with one of the QUARY commands.  You can
  select data from RELATIONs and combine it into new RELATIONs using the
  RELATIONAL ALGEBRA commands. 
3 SCHEMA
  The SCHEMA is a definition of everything in the data base.  It 
  contains the details of all the ATTRIBUTES and RELATIONS as well as 
  rules for entering data, passwords, and so on.
3 RELATION
  A RELATION is a table of data.  It is made up of ATTRIBUTES or columns
  and ROWS.  Each ROW represents the information for one item or entry
  in that RELATION. 
3 ATTRIBUTE
  An ATTRIBUTE is a column in a table (RELATION).  It has a name which 
  is used as a heading for the column when the ATTRIBUTE is displayed.  
  It also defines the type of data that goes in the column (integer, 
  text, etc).
2 OVERVIEW
 RIM
 ---
  RIM is a relational data base management system. RIM commands allow
  you to define, load, query and modify a data base. RIM supports the
  following commands: 
 
     BLANK       BUILD KEY   CHANGE      CLOSE       COMPUTE
     DATE        DEFINE      DELETE KEY  DELETE      ECHO
     EXHIBIT     EXIT        INPUT       INTERSECT   JOIN
     LISTREL     LOAD        NEWPAGE     NOECHO      OPEN
     OUTPUT      PRINT       PROJECT     QUIT        RELOAD
     REMOVE      RENAME      SELECT      SUBTRACT    TALLY
     TITLE       USER
 
  The DEFINE command and the LOAD command are used to enter submodules
  where commands known only to those submodules are processed. 
 
  The DEFINE submodule supports the following commands:
 
           DEFINE
           ELEMENTS
           RELATIONS
           PASSWORDS
           RPW (READ PASSWORD)
           MPW (MODIFY PASSWORD)
           RULES
           END
 
  The LOAD submodule supports the following commands:
 
           LOAD
           CHECK
           NOCHECK
           END
 
  For a description of the general command syntax used by RIM enter
  SYNTAX. For a summary of the syntax for the current RIM command enter
  SUMMARY. For a description of the RIM WHERE clauses enter WHERE.
2 COMMANDS
 RIM COMMANDS
 --- --------
3 DEFINE
 DEFINE Command
 ------ -------
  The define submodule commands are used for defining the structure of
  the data base.  The definition of the data base is called the schema
  and the schema name is the name of the data base and forms the
  essential part of the names of the local files used for the data base.
  Attributes, relations, passwords, and constraints (rules) are defined
  using this submodule.  To access this submodule you enter: 

               DEFINE dbname

  You must identify the name of the data base whose definition you are
  going to create or expand by specifying the schema name.  This name is
  used to form the name of the local files used to store the data base
  tables and must when augmented with a single number be a legal local
  filename.  For an example, see help for DEFINE EXAMPLE.
4 EXAMPLE
 DEFINE EXAMPLE
 ------ -------
  Example of define submodule commands:

                DEFINE RIMDB
                OWNER ME
                 ATTRIBUTES
                  MODEL TEXT KEY
                  WEIGHT REAL
                  NUMPASS INT
                  CARRIER TEXT 16
                  FLIGHTNO INT
                  NAME TEXT KEY
                  AGE INT
                 RELATIONS
                  AIRPLANE WITH MODEL WEIGHT NUMPASS
                  FLIGHTS WITH CARRIER FLIGHTNO MODEL
                  PEOPLE WITH NAME AGE
                 PASSWORDS
                  MPW FOR AIRLINES IS AGENT
                    RPW FOR PEOPLE IS BLUE
                   RULES
                    MODEL IN FLIGHTS EQA MODEL IN AIRPLANE
                    AGE GT 21 AND AGE LT 65
                    NUMPASS IN AIRPLANE LE 350
                  END
4 OWNER
 OWNER Command
 ----- -------
  The OWNER command specifies the owner of the data base.  The OWNER has
  permision to read or modify all data and the schema. 

               OWNER password

  If the data base already exists and you want to define additional
  attributes or relations, password is checked against the existing
  owner password. 
4 ATTRIBUTES
 ATTRIBUTES Command
 ---------- -------

        ATTRIBUTES
        attname type1 [{length}] [KEY]
                         VAR
        attname type2 [{row, col}] [KEY]
                        row, VAR
                        VAR, VAR
           .
           .
           .

  The attribute definitions are ended when you specify one of the
  keywords RELATIONS, PASSWORDS or RULES which start the other sections
  in the DEFINE submodule. 

 Type1 attributes:

  RIM supports seven data types of type1: floating point (real),
  integer, text, double precision, real vectors, integer vectors and
  double precision vectors.  You must enter REAL, INT, TEXT, DOUB, RVEC,
  IVEC or DVEC for type1.  The default length is one value except for
  TEXT for which it is 8 characters.  The length is specified in number
  of values and characters respectively.  VAR indicates variable length.
  The optional KEY specification causes an index file to be built for
  the attribute which is used by RIM to find qualifying rows for
  retrievals and updates.  Under certain conditions, such an index file
  will make retrievals and updates considerably faster than if no index
  file is used. See WHERE clause definitions for a specific discussion.
  The default is that such an index file is not built (non-key
  attribute).  You should consider the cost of building and storing
  index file data versus the benefits you will obtain from quicker
  retrievals when deciding if a KEY declaration should be used or not.
  No specific rules can be given here, experience should be used to
  judge.  An attribute can be changed from KEY to non-key or vice-versa
  later using the BUILD KEY and DELETE KEY commands. 

  For larger data bases (more than 1, 000 rows), experience has shown
  that it is most efficient not to specify a KEY in the define submodule
  but rather to load the data without keys and to later cause index
  files to be built using the BUILD KEY command. The greater the number
  of keys the more efficient this method is. 

 Type2 attributes:

  RIM supports three data types of type2: real matrices, integer
  matrices or double precision matrices.  You must enter RMAT, IMAT or
  DMAT for type2.  The matrices can be of fixed size, have variable
  column dimension or variable row and column dimensions. You enter the
  row dimension first, followed by the column dimension.  Default
  dimension is 1, 1.  The key-word KEY has the same meaning as for type1
  attributes. 
4 RELATIONS
 RELATIONS Command
 --------- -------

 To define relations enter:

               RELATIONS
               relname WITH attname1 [attname2 ...]
                  .
                  .
                  .

  The relation definitions are ended by specifying one of the keywords
  ATTRIBUTES, PASSWORDS, RULES, or END which start the other sections of
  the DEFINE submodule or finishes the schema definition.  The
  attributes must be listed in the order in which they are to appear in
  the relation.  No attributes can be used which have not been
  previously defined, either in the current DEFINE submodule execution
  or in previous definition of this data base.  Attributes which are
  defined but not included in a relation will not become part of the RIM
  schema. A RIM data base must have attributes and relations defined.
  Passwords and constraint rules are optional. 
4 PASSWORDS
 PASSWORDS Command
 --------- -------
  If read or modify passwords are desired, you enter:
               PASSWORDS
               {READ PASSWORD} FOR relname IS password
                RPW
               {MODIFY PASSWORD} FOR relname IS password
                MPW
                  .
                  .
  The password definitions are ended by specifying one of the keywords
  ATTRIBUTES, RELATIONS, RULES, or END which start the other sections of
  the DEFINE submodule or finishes the data base definition.  Passwords
  can be any string of characters up to 8 characters long.  When you are
  doing queries, loads, or modifications, the current password is
  specified by the USER command.  If this password does not match one of
  the read, modify or owner passwords for a relation you cannot query
  that relation.  If this password does not match one of the modify or
  owner passwords, you cannot load or modify the given relation. 
4 RULES
 RULES Command
 ----- -------
  Constraint rules are another optional section of the DEFINE submodule.
  If rules are specified, they are used during the loading process or
  during CHANGE commands to screen out rows which do not meet the
  constraint rules.  Rules are specified by relation. At most 10 rules
  may be specified for a single relation.  There are several options
  available in the rule definition section.  To define constraint rules
  you enter: 

        RULES
        attname [IN relname] {EQ} value [{AND} attname ... ]
                              NE          OR
                              GT
                              GE
                              LT
                              LE

  or:

        attname1 IN relname {EQA} attname2 IN relname [{AND} ... ]
                             NEA                        OR
                             GTA
                             GEA
                             LTA
                             LEA

  where:        EQ  = Equals
                NE  = Not equal to
                GT  = Greater than
                GE  = Greater than or equal to
                LT  = Less than
                LE  = Less than or equal to
                EQA = Equals attribute
                NEA = Not equal to attribute
                GTA = Greater than attribute
                LTA = Less than attribute
                LEA = Less than or equal to attribute

  The rule definitions are ended by specifying one of the keywords
  ATTRIBUTES, RELATIONS, PASSWORDS, or END which start the other
  sections of the DEFINE submodule or finishes the schema definition. 
  Attributes referenced in the rule definitions must have been
  previously defined.  By specifying rules, you can restrict an
  attribute to a range of values or require that the value of an
  attribute in one relation have a specified relationship to the values
  of an attribute in the same or a different relation. The compare
  operators ending in A (EQA etc.) are used when the comparison is to
  existing attribute values rather than to a specified constant.  A rule
  expression may contain no more than 10 compare operators (9 Boolean
  operators). 

  The method used for constraint checking is that the first attribute
  mentioned in the rule is taken from the input (LOAD or CHANGE command)
  data and checked against the remainder of the rule expression using
  existing values in the database. 
4 END
 END Command
 --- -------
  To finish the schema definition you enter the following keyword and
  leave the DEFINE submodule: 

               END

  The END command also terminates the LOAD process.
3 LOAD
 LOAD Command
 ---- -------
  The load submodule commands are used to add data to a newly defined
  relation or to add data to a relation which already contains data.  To
  access this submodule enter: 

               LOAD relname

  You may now load data in the relation, one row per command, by
  entering data values in a one to one correspondence with the
  attributes: 

               value1 value2 ... valuen

  Valuei takes the form described in the following table:

     Attribute
  Type       Length or           Valuei                 Remark
             Dimension
  REAL, INT    n n.gt.1     (val1 ... valn)         Parentheses optional
  DOUB, RVEC
  IVEC, DVEC
  REAL, INT     VAR         (val1 val2 ...)         Parentheses required
  DOUB, RVEC
  IVEC, DVEC
  TEXT         any          "text string"          In special cases
                                                    "  " is optional
                                                   (see INPUT FORMAT)
  RMAT, IMAT     m, n    ((r1c1...rmc1)(r1c2...) +   Columnwise
  DMAT                   ...rmcn))                 Parentheses optional
  RMAT, IMAT    m, VAR   ((r1c1...)(r1c2...)...))    Columnwise
  DMAT          or                                 Parentheses required
              VAR, VAR

  To finish data loading you enter:

               END

  Multiple relations may be loaded from within the load submodule by
  re-entering the LOAD command instead of the END command.  For an
  example of data loading, see LOAD EXAMPLE.
4 EXAMPLE
 LOAD EXAMPLE
 ---- -------
  Example of load submodule commands:

                LOAD AIRPLANE
                DC9 87000. 110
                747SP 200000. 350
                LOAD PEOPLE
                BOB 30
                JOE 32
                ALICE 29
                END

  If the value for an attribute is missing, you enter the characters
  -0- for the missing value or use two successive commas.

        L1011 -0- 250
        L1011, , 250

  These two records have identical meaning.
3 QUERY
 COMMANDS FOR QUERYING A RELATION
 -------- --- -------- - --------
4 TALLY
 TALLY Command
 ----- -------
  The TALLY command prints a tally for an attribute giving each unique
  value and the number of times it occurs in a relation.  The tally is
  ordered ascending or descending per user input.  Default is ascending.
  The WHERE clause is optional.  For a description of the WHERE clause
  see HELP WHERE. 

        TALLY attname [{=A}] FROM relname [ WHERE ... ]
                         D

  For examples of SELECT and TALLY, see SELECT EXAMPLES.
4 SELECT
 SELECT Command
 ------ -------
  The SELECT command is used for displaying or printing data from one
  relation.  It has many options.  To print all data from a relation: 

               SELECT ALL FROM relname

  To print selected attribute values from all rows in a relation:

               SELECT attname1 [ attname2 ... attnamen ] FROM relname

  The above form will print up to 20 attributes in any order. However
  the number of attributes is limited by space available in the line. As
  a rule of thumb, 7 attributes may be selected when running at an
  interactive terminal and 11 when running in batch mode or at an 132
  character terminal. 

  For variable length attributes or for attributes of fixed length that
  would otherwise not fit on a line alone or together with other
  attributes, you may format the output using the optional field width
  control: 

        SELECT attname1 [ =fw1 ] [ attname2 [ =fw2 ] ... ] +
        FROM relname

  fwi is the output field width for attnamei.  For a text type
  attribute, fwi is the width of the output paragraph in number of
  characters, for other attribute types it is the number of values. When
  the field width option is used, RIM will use for each row as many
  output lines as required by the most critical attribute. Defaults are
  rather complex.  For a fixed length attribute, no paragraphing is
  attempted.  The system will use the field width required to display
  the value(s) of the attribute.  For a variable length attribute of
  type TEXT, the default is display of a maximum of 40 characters with
  truncation of remaining text, if any.  For variable length attributes
  of types REAL, INT, DOUB, the default is 4 values with truncation. 
  For variable length vector type attributes, the default is 4 values
  with paragraphing (no truncation).  For variable length matrix
  attributes the default is 4 values with paragraphing (no truncation). 
  A row starts on a new line. 

  Whether field width is specified or not, the system will display the
  dimension of variable length vectors and matrices using one of the
  output value positions.  However, should the user specify a width of
  only one value for such an attribute, the row and column dimensions
  will not be displayed. 

  Further information about line width, no of lines per page, defaults
  and user specification is given under the WIDTH and LINES commands. 

  When paragraphing TEXT type attributes, RIM will identify consequtive
  substrings of text separated by blanks and place such a substring on
  the line, if there is space available, or if the current current line
  contains less than four characters in which case the number of
  characters that fit on the line are removed from (the front of) the
  substring and put on the line (without hyphen).  If there is not room
  on a line filled with more than four characters, the (first part of
  the) substring will be placed on the next line. 

  Examples of SELECT command:

  SELECT ivecvar FROM rel1
     DIM      IVECVAR
     ----------------------------
      7          1       2      3
                 4       5      6
                 7
      1         10


  SELECT imatvv FROM rel1
    ROW  COL   IMATVV
    -----------------------------
    2     5     11      12     13
                14      15
                21      22     23
                24      25
    1     1     11


  SELECT textv=9 FROM rel1
  TEXTV
  ---------
  THIS IS
  AN EXAMPL
  E OF
  WRAPAROUN
  D OF TEXT
  THIS IS
  ANOTHER
  EXAMPLE
  OF TEXT

  The attribute name (attnamei) may be replaced by an attribute number
  (attnumi).  It may also be a specific element of a vector or a mtrix. 
  Thus the general form of the unconditional SELECT command is: 

        SELECT {attname1 [ =fw1 ] } [attname2 [=fw2] ... ] FROM  relname
                attnum1 [ =fw1 ]
                attname1(i)
                attname1(i, j)
                ALL

  To print all attributes from a relation where certain conditions are
  met: 

      SELECT ALL FROM relname WHERE condition1 [{AND} condition2 ... ]
                                                 OR

  For help for the where clause, see the WHERE entry.
  For help for the sorted by clause, see the SORT entry.
  For examples, see SELECT EXAMPLES.
4 EXAMPLES
 SELECT EXAMPLES
 ------ --------
  Examples of SELECT and TALLY commands:

        SELECT ALL FROM AIRPLANE
        SELECT MODEL FROM AIRPLANE
        SELECT ALL FROM AIRPLANE WHERE WEIGHT GT 100000.
        *8 AND NUMPASS LT 200
        SELECT AGE FROM PEOPLE WHERE NAME EQ BOB
        SELECT ALL FROM AIRPLANE SORTED BY MODEL=D
        TALLY MODEL FROM FLIGHTS
        TALLY MODEL FROM FLIGHTS WHERE CARRIER EQ UNITED
        SELECT ALL FROM DIMENS WHERE HEIGHT GTA WIDTH
        SELECT FILE TITLE=4 OWNER FROM PFDATA
4 WHERE_CLAUSE
 WHERE Clause
 ----- ------
  Up to ten conditions may be combined using the Boolean operators of
  AND and OR.  The conditions are combined from left to right. Each
  condition may be one of the following forms: 

        attname EXISTS
        attname FAILS
        attname EQ MAX
        attname EQ MIN
        attname EQ value
        attname EQS value
        attname NE value
        attname GT value
        attname GE value
        attname LT value
        attname LE value
        attname EQ list
        attname NE list
        attname1 EQA attname2
        attname1 NEA attname2
        attname1 GTA attname2
        attname1 GEA attname2
        attname1 LTA attname2
        attname1 LEA attname2

        ROWS EQ rownumber
        ROWS NE rownumber
        ROWS LT rownumber
        ROWS LE rownumber
        ROWS GE rownumber
        ROWS GT rownumber
        ROWS EQ list
        ROWS NE list
        LIMIT EQ number

where:          EQ  = Equals
                EQS = Contains the text string
                NE  = Not equals
                GT  = Greater than
                GE  = Greater than or equal to
                LT  = Less than
                LE  = Less than or equal to

                EQA = Equals attribute
                NEA = Not equals attribute
                GTA = Greater than attribute
                GEA = Greater than or equal to attribute
                LTA = Less than attribute
                LEA = Less than or equal to attribute
                MAX = Maximum value
                MIN = Minimum value

  Attname, attname1, attname2 may refer to an element of a vector or a
  matrix. 

  When an attribute has been assigned a value, then EXISTS will qualify
  those attributes.  If an attribute has not been assigned a value, but
  was loaded with -0-, then FAILS will qualify those attributes. 

  MAX and MIN comparison can only be made for integer, real and double
  precision attributes of fixed length equal to 1. Value in comparison
  statement must follow the rules of the LOAD command for vectors and
  matrices, i.e. if the attribute is of variable length or dimension,
  parentheses must be used to input a vector or a matrix value or a list
  of vector and matrix values. EQS applies to text strings only.   In
  such a comparison, value is a text string and the comparison is true
  if value is found as a substring anywhere within the attribute for
  which comparison is requested. 

  NE comparison when applied to matrices or vectors is true if the
  length or dimension is different from the length or dimension of the
  user specified comparison vector or matrix or if any vector or matrix
  elements differs. 

  GT and LT comparisons for vector and matrix attributes are
  lexicographical, i.e. a comparison is made element by element
  (columnwise for matrices) and continued until a true or false
  condition is detected.  If no such condition is detected after the
  last element is checked, a false condition is assumed.  Comparison is
  made only for vectors and matrices of the same size as comparison
  data. 

  GE and LE comparisons for vector and matrix attributes are similar to
  GT and LT comparisons except it continues if an equal condition is
  detected and if no condition is detected after the last element is
  checked, a true condition is assumed. 

  Comparison rules for vector attributes apply also to real, integer and
  double precision attributes of fixed or variable length. A list is a
  simple list a1, a2, a3, ..., an of values where a value may be a
  vector or matrix. 

  The comparison key words ending in A are used when comparing the value
  of one attribute to the value of another attribute in the same row of
  the relation. 

  ROWS refer to row numbers in a relation.  Note that a relation is
  loaded in input row order but that subsequent operations (changes) to
  the data base may cause the order of the rows to change. When the
  LIMIT clause is used, only the first LIMIT number of the rows that
  otherwise would qualify will actually qualify. Processing the WHERE
  condition can be speeded up greatly if index processing is used. 
  Index processing involves using the indices created for KEY attributes
  rather than looking at each row of a relation to find the rows
  qualified by the WHERE conditions. Index processing will be used when
  the following are all true: 

        1) The last condition uses an attribute which is KEY
        2) The last condition uses EQ
        3) The last condition is not combined by OR with the other
           conditions.
4 SORT_BY_CLAUSE
 SORTED BY
 ------ --
  The output can be sorted by specifying sorting attributes.  The
  sorting order is user specified with default low to high. 

        SELECT ... FROM relname                             +
        SORTED BY attname1 [{=A} ] [ attname2 [={A} ] ... ] +
                              D                  D
        [ WHERE ... ]

  A and D stands for ascending and descending order respectively. If a
  sort on more than one attribute is requested, the output will first be
  ordered according to the first mentioned attribute.  In case there are
  duplicates for the first sort attribute, these will be ordered by the
  second sort attribute, duplicates within this by the third and so on.
  A maximum of 5 sort attributes may be specified. When multiple
  attributes are used, ascending and descending order may be used in any
  combination.  A maximum of five sort attributes may be specified. 
  Variable length attributes may not be used as sort attributes.  When
  fixed length attributes are used as sort attributes, only the first 20
  characters and the first value is used for sort. 
3 COMPUTE
 COMPUTE Command
 ------- -------
  The COMPUTE command is used to compute simple functional values for an
  attribute.  A WHERE clause is optional and uses the same syntax as is
  used in the SELECT command. 

        COMPUTE {COUNT} attname FROM relname [WHERE ... ]
                 MIN
                 MAX
                 AVE
                 SUM

  There are some restrictions as to the type and word length of the
  attribute when using these computed functions.  All of these functions
  exclude any -0- values when making their computations. 

  The following table describes the attribute type and length
  restrictions for each function: 

     FUNCTION   ATTRIBUTE TYPE     ATTRIBUTE LENGTH
     --------   --------------     ----------------
     COUNT      any                any
     MIN        any                1 (20 chars for text)
     MAX        any                1 (20 chars for text)
     AVE        any except TEXT    1
     SUM        any except TEXT    1
 
  Examples of COMPUTE command:

        COMPUTE AVE NUMPASS FROM FLIGHTS
        COMPUTE MAX WEIGHT FROM FLIGHTS WHERE NUMPASS LT 100
        COMPUTE COUNT NAME FROM PEOPLE WHERE AGE GT 30
3 MODIFICATION
 MODIFICATION COMMANDS
 ------------ --------
4 CHANGE
 CHANGE Command
 ------ -------
  The CHANGE command is used to change the value of an attribute in a
  relation where certain conditions are met. 

        CHANGE {attname1}    TO attname2 [IN relname] WHERE ...
                attname(i)
                attname(i, j)

  Value has the same form as descried in the LOAD command.  The WHERE
  clause is required and and is described in the WHERE entry. If the
  relation name is not specified, the attribute is changed in all
  relations where the attribute is found and the conditions are met. For
  relations in which the change attribute is is present but in which one
  or more of the attributes used in the where clause are missing, an
  error message will be issued.
5 OWNER
 CHANGE OWNER Command
 ------ ----- -------
  The CHANGE OWNER command is used to change the name of the data base
  owner password. Only a person whose password matches the curent owner
  password may use this command. priviledge. 

        CHANGE OWNER TO newowner
5 PASSWORD
 CHANGE PASSWORD Command
 ------ -------- -------
  If you are the data base owner, you may change the read or modify
  passwords by the following command

        CHANGE {RPW} TO newpass FOR relname
                MPW
4 DELETE
 DELETE Command
 ------ -------
  The delete command removes data from the data base.  For a more
  precise description see: 

         DELETE DUPLICATES
         DELETE ROW
         DELETE KEY
5 ROW
 DELETE ROW Command
 ------ --- -------
  The DELETE ROW command is used to delete selected rows in a relation. 

        DELETE ROW FROM relname WHERE ...

  The name of the relation must be specified as well as a WHERE clause. 
  The syntax for the WHERE clause is described in the WHERE entry. 
5 DUPLICATES
 DELETE DUPLICATES Command
 ------ ---------- -------
  This command is used to remove any duplicate rows from a relation. It
  is useful to use on new relations which have been created by any of
  the relational algebra commands (JOIN, INTERSECT, SUBTRACT, or
  PROJECT).  The syntax for this command is: 

        DELETE DUPLICATES [attname1, attname2, ...] from relname

  Duplicates are checked only for the specified (combination of)
  attribute(s).  Default is to check for complete row (all attributes). 
4 REMOVE
 REMOVE Command
 ------ -------
  The REMOVE command is used to remove a relation definition and its
  data from the data base. 

        REMOVE relname

4 RENAME
 RENAME Command
 ------ -------
  For detailed information on the RENAME command see:

      RENAME ATTRIBUTE
      RENAME RELATIONS
5 ATTRIBUTE
 RENAME ATTRIBUTE Command
 ------ --------- -------
  The RENAME attribute command is used to change the name of an
  attribute in the definition (schema) of the data base. 

        RENAME [ATTRIBUTE] attname1 TO attname2 [ IN relname ]

  The old name is attname1 and the new name is attname2.  If the name of
  the relation is not specified, the name change takes place in every
  relation that contains the old name.  If relname is specified and
  attname1 is duplicate (or more), the first occurance will be changed. 

  RULES and KEY defined for attname1 will automatically be redefined to
  apply for attname2. 

  Examples of RENAME command:

        RENAME MODEL TO VERSION IN AIRPLANES
        RENAME NUMPASS TO CAPACITY
5 RELATION
 RENAME RELATION Command
 ------ -------- -------
  You may change the name of a relation by the following command

           RENAME RELATION relname TO newname

  Note:  RULES and KEYs applying to relname will aumatically apply to
  newname. 
3 RELATIONAL_ALGEBRA
 RELATIONAL ALGEBRA COMMANDS
 ---------- ------- --------
4 INTERSECT
 INTERSECT Command
 --------- -------
  The INTERSECT command allows you to combine the rows of two relations
  into a third relation based on equality of values within a common set
  of attributes identified from a set of specified attributes. The
  syntax of the INTERSECT command is: 

        INTERSECT relname1 WITH relname2 FORMING relname3 +
        [USING attname1 [attname2 ... attnamen]]

  The USING clause identifies which attributes that are included in the
  resulting relation. Common attributes used in the intersect process
  are identified within these. As an example, assume that you have the
  following two relations defined: 

                REL-1                    REL-2
         NAME     DEPT      JOB       DEPT    JOB      PAY
         ----------------------       --------------------
          BOB      A       ENGR         A    ENGR      800
          JIM      C       SUPR         B    ENGR      450
          BOB      B       ENGR         C    ENGR      750
          RAY      C       ENGR

  You may INTERSECT two relations restricted to specific sets of
  attributes (the USING clause) or use all attributes of both relations.
  In either case RIM will identify the common attributes. 

  In the first case, suppose you wish to INTERSECT the two relations
  using attributes DEPT, NAME and JOB.  The command for this would be: 

      INTERSECT REL-1 WITH REL-2 FORMING REL-3 USING DEPT NAME JOB

  The result would be the new relation REL-3 shown below:

                               REL-3
                       DEPT    NAME     JOB
                     -----------------------
                       A       BOB      ENGR
                       B       BOB      ENGR
                       C       RAY      ENGR

  In this example there are no duplicate rows in REL-3. It is possible
  that the INTERSECT command will create duplicate rows. In general
  duplicate rows are not desired in a relation.  Duplicates are not
  removed by the INTERSECT command but can be removed with the DELETE
  DUPLICATES command.  Note also that by specifying which attributes the
  INTERSECT is using, you restrict the number of attributes in the
  resulting relation to only those specified in the USING clause. 

  In another case, you may want RIM to use all the attributes in the two
  relations.  In this instance, you would enter: 

        INTERSECT REL-1 WITH REL-2 FORMING REL-4

  The result would be REL-4 consisting of the attributes NAME, DEPT,
  JOB, and PAY, shown below with the resulting rows: 

                     REL-4
        NAME      DEPT      JOB      PAY
        ----------------------------------
        BOB        A       ENGR      800
        BOB        B       ENGR      450
        RAY        C       ENGR      750
4 JOIN
 JOIN Command
 ---- -------
  The JOIN command is a function operating on two relations to form a
  third relation.  The purpose of the JOIN is to juxtapose two relations
  based on a specified attribute from each. The result is a third
  relation containing all the attributes from both relations.  Rows are
  generated into the new relation based upon a specified comparison
  between the two JOIN attributes.  In general a row from the first
  relation may generate zero, one or more rows depending upon how many
  rows in the second relation have the desired match.  The syntax of the
  JOIN command is: 

        JOIN relname1 USING attname1 WITH relname2 USING attname2 +
        FORMING relname3 [WHERE {EQ}]
                                 NE
                                 GT
                                 GE
                                 LT
                                 LE

  The conditional clause is different from the WHERE clause of select. 
  In JOIN it applies only to the comparison of the two attributes upon
  which JOIN is based.  If the WHERE clause is omitted (default), EQ is
  used.  The comparisons involving order (GT etc.) refer to attname1 GT
  attname2 etc..  The comparison of the two single attributes follow the
  (lexicographical) rules of the where clause of select. 

  As an example, consider the relations REL1 and REL2:

            REL1                              REL2
     A       B         C             D          E
  -----------------------------   ------------------------
     1       2         3             3          1
     4       5         6             6          2
     7       8         9

  The following JOIN command:

        JOIN REL1 USING B WITH REL2 USING D +
        FORMING REL3 WHERE B LT D

  would produce:
                          REL3
    A          B           C       D            E
  --------------------------------------------------------
    1          2           3       3            1
    1          2           3       6            2
    4          5           6       6            2

  The JOIN will function correctly on any comparison providing that you
  compare attributes of the same data type.  All attribute names in the
  resultant relation must be unique for you to obtain accurate results
  when using SELECT or CHANGE commands on the relation.  Any duplicate
  attribute names should be changed using the RENAME command before
  doing queries or updates to the new relation.  In the case of
  duplicate attribute names, RENAME when applied to a specific relation
  will change the first attribute name. 

  Note that if the constituient relations have no duplicate rows, the
  relation formed with JOIN will also have no duplicate rows. 
4 PROJECT
 PROJECT Command
 ------- -------
  The function of a PROJECT command is to create a new relation as a
  subset of an existing relation.  You may want to create the new
  relation from the old one by removing attributes, removing rows, or
  both.  The syntax for the PROJECT command is: 

        PROJECT relname1 FROM relname2 USING {attname1 ... attnamen} +
                                              ALL
        [WHERE ...]

  The WHERE clause is optional but if specified it has the same syntax
  as specified in the WHERE entry. You are required to specify which
  attributes are to be retained in the new relation.  The old relation
  is relname2 and the new relation is relname1. 

  As an example consider the following relation:

                            PEOPLE
         EMPNUM    EMPNAME    BOSS      POSITION    GROUP
        --------------------------------------------------
         2181      JONES      SMITH     MANAGER     AADE
         3964      ERICKSON   BUSS      APPL-MGR    ACC
         6543      GRAY       PARKER    ASST-MGR    PHOTO
         2233      SCHMITZ    BUSS      APPL-MGR    ACC
        --------------------------------------------------

  To create a new relation with EMPNAME and GROUP as the only attributes
  where no rows contains PARKER as BOSS enter the command: 

        PROJECT TEMP1 FROM PEOPLE USING EMPNAME GROUP +
        WHERE BOSS NE PARKER

                          TEMP1
                     EMPNAME    GROUP
                    -------------------
                     JONES      AADE
                     ERICKSON   ACC
                     SCHMITZ    ACC

  The PROJECT command is useful to reduce the size of a relation when
  only a subset of the data is needed.  RIM will not eliminate any
  duplicate rows formed in the new relation.  You must do that yourself
  with the DELETE DUPLICATES command. 
4 SUBTRACT
 SUBTRACT Command
 -------- -------
  The SUBTRACT command is similar to the PROJECT command in that a new
  relation is formed from an existing relation, but rows are selected
  based upon the data of two relations rather than a WHERE clause within
  a single relation.  Where the INTERSECT command looked for rows of two
  relations which matched up, the SUBTRACT does just the opposite.  It
  looks for rows on in relation which do not match with any rows in the
  other relation.  The syntax for the SUBTRACT command is: 

        SUBTRACT relname1 FROM relname2 FORMING relname3 +
        [USING attname1 [attname2 ... attnamen]]

  All rows in the new relation will come from relname2.  If the USING
  clause is not specified, then all attributes of relname2 will be
  attributes of relname3.  relname1 is the relation that rows of
  relname2 are checked against for matches. 

  As an example consider these two example relations:

             EMPDATA                         BOSSDATA
   EMPNUM    EMPNAME    BOSS        BOSS      POSITION    GROUP
  ------------------------------   -----------------------------
   2181      JONES      SMITH       SMITH     MANGER      AADE
   3964      ERICKSON   BUSS        PARKER    ASST-MGR    PHOTO
   6543      GRAY       PARKER      BUSS      APPL-MGR    ACC
   8461      BROWN      WHITE
   2233      SCHMITZ    BUSS

  The following command will produce a new relation from EMPDATA:

        SUBTRACT BOSSDATA FROM EMPDATA FORMING TEMP USING EMPNAME BOSS

  The resulting relation TEMP would contain only one row:

                           TEMP
                    EMPNAME     BOSS
                   --------------------
                    BROWN       WHITE
3 REPORT
 REPORT COMMANDS
 ------ --------
4 NEWPAGE
 NEWPAGE Command
 ------- -------
  This command causes a new page to be issued.  It applies to batch
  output only.  The command is: 

        NEWPAGE
4 BLANK
 BLANK Command
 ----- -------
  Blank lines can be output by using the command:

        BLANK n

  where n is the number of blank lines written.
4 TITLE
 TITLE Command
 ----- -------
  The command:

        TITLE "titlestring"

  causes the text "titlestring" to be printed, centered on the line. If
  the length of "titlestring" is longer than current lines width, it
  will be truncated and a warning issued. 
4 DATE
 DATE Command
 ---- -------
  The command:

        DATE

  will cause the current date to be printed, centered on the line.
4 LINES
 LINES Command
 ----- -------
  This command controls the number of lines per page (exclusive of
  title).  The command: 

        LINES n

  will establish page size to  n lines.  Default is 56.
4 WIDTH
 WIDTH Command
 ----- -------
  This command controls the width of a printed line.  The command:

        WIDTH n

  will establish a line width of n characters.  Default is 78 if output
  is to a terminal, 132 if output is to a batch printer.
3 KEY
 KEY COMMANDS
 --- --------
4 BUILD_KEY
 BUILD KEY Command
 ----- --- -------
  This command is used to change an attribute from non-key to KEY.  An
  index is built from existing data values by making a pass through
  current rows of the specified relation.  This index is then used and
  maintained just as if the attribute had been declared to be KEY in the
  original data base definition. 

        BUILD KEY FOR attname IN relname
4 DELETE_KEY
 DELETE KEY Command
 ------ --- -------
  This command is used to change an attribute from KEY to non-key. The
  index file for that attribute is inactivated and no longer maintained
  or used once the attribute has been changed to non-key with this
  command. 

        DELETE KEY FOR attname IN relname
3 UNLOAD
 UNLOAD Command
 ------ -------
  The UNLOAD command permits you to off-load a portion or all of your
  data base onto a previously designated file (see OUTPUT command). The
  file will contain 80 character text records and will be readable by
  RIM on the same or on a different computer using the INPUT command.
  Default file name is OUTPUT. The syntax of this command is: 
 
    UNLOAD [ dbname = newname ] (ALL   ) +
                                 SCHEMA
                                 DATA
           [ relname1 [ = mpw1 ] relname2 [ = mpw2 ] ...]
 
  The mandatory part offers a choice between ALL, DATA and SCHEMA.
  Specifying SCHEMA will off-load the schema of your data base, DATA
  will off-load the data of your data base and ALL will off-load both
  schema and data. 

  Optionally you may rename your data base by entering dbname = newname
  where dbname is the name of the currently open data base.  By
  specifying relation names, you will only off-load data and/or schemas
  for the specific relations. The password associated with a relation
  name must be specified if your current user password does not allow
  you modify access to the relation. 

  There are implicit password restrictions to the unload command as
  follows: 

  If you are the data base owner, you may off-load any data and/or
  schema. If you are not the owner, you may off-load data and or schema
  for the relations for which you have modify access permission. Your
  password becomes the owner of the off-loaded data base. Rules, if any,
  will only be off-loaded if you are the owner of the data base and you
  have used the option ALL. 
3 MISCELLANEOUS
4 OPEN
 OPEN Command
 ---- -------
  The OPEN command is required whenever an existing data base is to be
  used.  You specify the name of the data base.  RIM uses the name of
  the data base to form the names of the three local files which contain
  the data base. 

            OPEN dbname

  Only one RIM data base may be open at one time (if you don't CLOSE the
  present data base before opening a new one, RIM will automatically
  close the present data base).  The OPEN command must be issued before
  any commands that require data from the data base can be processed. 
4 CLOSE
 CLOSE Command
 ----- -------
  The CLOSE command permits you to close a RIM data base without leaving
  RIM.  The reason for doing this is to close one data base, then open
  or define a different one all within one RIM session. This command is
  not needed if only one RIM data base is accessed during a RIM session.
  This command results in data needed by the data base being copied from
  its incore working areas to the local data base files. 

               CLOSE

  Note:  the current data base will be closed for you when you leave RIM
  by issuing an EXIT command 
4 INPUT
 INPUT Command
 ----- -------
  This command causes RIM to read subsequent commands and/or data from a
  specified file. When RIM detects an end-of-file mark on the indicated
  file, RIM will return to the terminal or batch input file, as
  apppropriate, and continue to read input and/or data. The use of this
  command allows the user to define command procedures on file and then
  have RIM execute a set of commands without user interaction. 

               INPUT filename

  A more explicit way to control return of input to your terminal or
  batch input file is to use INPUT INPUT as the last command which
  returns input, as appropriate, to the batch input file or user
  terminal. As an alternative, INPUT TERMINAL may be used. 

  A more general use of this command is possible by causing a second
  alternate input file to be used from the first alternate file by use
  of the INPUT command. This nesting of alternate input files can be
  done to any depth. It should be noted that you must provide explicit
  returns on these alternate files using the INPUT command since the
  default is to return to your input file (terminal if applicable). 
4 OUTPUT
 OUTPUT Command
 ------ -------
  This command is used to specify the name of the output file.
  Specifying a file other than OUTPUT will result in the output from the
  RIM commands to be placed on a local file with the specified file
  name.  The output file name may be changed as often as desired.  The
  use of this command allows the user to get offline hardcopy output
  from RIM. 

               OUTPUT filename

  OUTPUT TERMINAL will return the output to the user's terminal.
4 HELP
 HELP Command
 ---- -------
  The HELP command provides the capability to obtain a description of
  the available RIM commands, a discussion of the general command
  syntax, a summary of all available commands, and general news about
  the RIM system.  HELP is available at any time during execution except
  when in the interactive dialog (menu) mode. To receive help when in
  the command mode enter: 

        HELP [{command name}]
                  RIM
                  WHERE
                  SORT
                  SYNTAX
                  INPUT FORMAT
                  SUMMARY
                  NEWS

  You will then enter the HELP submodule and receive explanation of the
  selected option as: 

      OPTION                 EXPLANATION
      ------                 -----------
      HELP                   previous command and syntax or, if first
                             command identical to HELP RIM
      HELP command name      indicated command and syntax
      HELP RIM               list of commands for which help is
                             available
      HELP SYNTAX            description of the RIM command input
                             format, basic syntax and data
                             genration facilities
      HELP INPUT FORMAT      an in-depth description of free-field
                             input format and data generation
                             facilities available in RIM
      HELP WHERE             the RIM where clauses
      HELP SORT              the RIM sort clause
      HELP SUMMARY           summary of all available RIM commands
      HELP NEWS              general news about the RIM system

  You will remain in the HELP submodule until you enter an END command
  which will return you to the command mode.  The commands available
  inside the HELP submodule are identical to the HELP commands except
  that the keyword HELP is omitted.  The HELP submodule displays
  information one screen at a time.  After each screen you will have the
  option to continue displaying the text or to return to the HELP
  submodule by entering QUIT.
4 USER
 USER Command
 ---- -------
  This command is used to identify your password to RIM.  Your password
  is used to check against read and modify passwords specified for the
  relations.  Each time this command is issued, the new password
  replaces the current password.  The default password is the word NONE.

               USER password
4 ECHO
 ECHO Command
 ---- -------
  This command is used to control printing of your input commands on the
  output file.  The default is for echo to be off in interactive
  execution and on in batch.  To activate echo print you enter: 

               ECHO
4 NOECHO
 NOECHO Command
 ------ -------
  The NOECHO command turns off the echo printing.

               NOECHO
4 TOLERANCE
 TOLERANCE Command
 --------- -------
  For real and double precision attributes and for real and double
  precision vectors and matrices as well as for individual elements of
  such vectors and matrices, you may want to use a tolerance in
  qualifying equality, non equality and order.  The tolerance applies to
  any real or double precision number you use in a WHERE clause.  If A
  is an attribute with value a and r is a user specified number used in
  a WHERE clause and t a tolerance (positive, zero or negative), the
  following are true conditions: 

               A EQ r if and only if r-t le a le r+t
               A NE r if and only if a lt r-t or a gt r+t
               A GT r if and only if a gt r-t
               A GE r if and only if a ge r-t
               A LT r if and only if a lt r+t
               A LE r if and only if a le r+t

  For real and double precision attributes of length greater than 1 and
  for real and double precision vectors and matrices, the above formulas
  are applied to the comparison of each element. If t is a percentage
  tolerance, t is to be replaced with t x r/100 in the above expressions
  to define true conditions for percentage tolerances. 

        TOLERANCE tol [PERCENT]

  where tol is the tolerance and the presence or absence of the keyword
  PERCENT indicates whether tol is a percentage tolerance or or not. 
  The TOLERANCE command can be used as many times as desired to reset
  the tolerance.  A tolerance stays in effect for a session until a new
  tolerance is specified.  The default value for tolerance is 0. 
4 NOCHECK
 NOCHECK Command
 ------- -------
  Rule checking applies to the CHANGE command and LOAD command to load
  or modify data.  The default is that rules, if defined, are enforced. 
  The NOCHECK command suppresses the rule checking. 

              NOCHECK [RULES]
4 CHECK
 CHECK Command
 ----- -------
  The CHECK command turns on rule checking.  The CHECK and NOCHECK
  commands may be issued as many times as required anywhere in the input
  stream while in command mode. 

        CHECK [RULES]
4 EXIT
 EXIT Command
 ---- -------
  To leave the RIM system you issue the command:

              {EXIT}
               QUIT

  This command closes your current data base. Data needed by your data
  bases are copied from the incore working areas to the files whose
  names were determined by the OPEN command or by the schema name
  designated in the DEFINE submodule. 
4 QUIT
 QUIT Command
 ---- -------
  To leave the RIM system you issue the command:

              {QUIT}
               EXIT

  This command closes your current data base. Data needed by your data
  bases are copied from the incore working areas to the files whose
  names were determined by the OPEN command or by the schema name
  designated in the DEFINE submodule. 
4 RELOAD
 RELOAD Command
 ------ -------
  The RELOAD command is used whenever you want to rebuild the data files
  of your data base to recover unused space created by row deletions,
  certain attribute changes and relation removals. When a row is
  deleted, one of its variable length attributes changed so that it
  length increases, or when a relation is removed, the vacated space is
  not reused until you issue this command.  If your data base has any
  KEY attributes, then the access pointer files maintainted for those
  attributes are also rebuilt.  The syntax for this command is: 

               RELOAD
3 SCHEMA
 QUERYING THE SCHEMA
 -------- --- ------
4 LISTREL
 LISTREL Command
 ------- -------
  The purpose of LISTREL is to provide you with information about the
  relations in your data base. 

  There are three formats for the LISTREL command.  The first consists
  of simply entering: 

        LISTREL

  Using LISTREL in this fashion provides you with a list of all
  relations currently defined in your data base. If you wish to display
  the definition of a specific relation, then the syntax is: 

        LISTREL relname

  The use of LISTREL in this manner also provides a count of the number
  of defined rows for the specified relation. 

        LISTREL ALL

  This command will display the definitions of all relations in the data
  base, including counts of number of defined rows in each relation. 
4 EXHIBIT
 EXHIBIT Command
 ------- -------
  The purpose of the EXHIBIT command is to allow you to query the RIM
  dictionary to obtain the names of all relations having a specific set
  of attributes.  For example, if you want to know which relations
  contain the attribute attname you would enter: 

        EXHIBIT attname

  You would then obtain either a list of the relations having this
  attribute, or a message indicating that this attribute was not found
  in any relations in the data base. 

  In other cases, you may wish to know which relations contain a list of
  attributes.  This request is handled in a similar manner. Suppose that
  you wanted to know which relations contain both attname1 and attname2.
  The command would than be: 

        EXHIBIT attname1 attname2

  In general, the syntax of this command is:

        EXHIBIT attname1 [attname2 ... attnamen]
4 PRINT_RULES
 PRINT RULES Command
 ----- ----- -------
  This command can be used by the person whose current password matches
  the owner of the data base definition to obtain a complete list of all
  constraint rules. 

        PRINT RULES
2 SYNTAX
 Input Format, Data Generation and Syntax
 ----- ------  ---- ---------- --- ------
  RIM is used by entering commands in response to input prompts. The
  input prompts vary with RIM submodule used. The commands always begin
  with a RIM keyword and may contain adiitional keywords and other text
  and numerical items. Keywords are described using capital letters.
  Three of the commands (DEFINE, HELP and LOAD) are used to enter
  submodules which have their own set of commands and prompts for
  defining a data base, for providing on-line help to the interactive
  user and for loading a data base. In describing commands, the
  following conventions are used: 
 
      relname
       or                       name of a relation(s)
      relname1, relname2, ...
   
      attname
       or                       name of an attribute(s)
      attname1, attname2, ...
   
      value                     actual value(s)
       or                       (value may be a text string,
      value1, value2, ...         scalar, vector or matrix)
 
  All relation and attribute names must contain at least 1 and no more
  than 8 alphanumeric characters. 

  Many of the RIM commands have optional parts.  These optional parts
  are enclosed in square brackets. 

       [THIS IS OPTIONAL]

  Sometimes, a keyword is selected from a list of acceptable keywords. 
  In this case the acceptable keywords are listed vertically with the
  first choice enclosed in brackets. 

       {CHOOSE}
        ONE
        OF
        THESE

  RIM command keywords may be abbreviated.  At least the first 3
  characters in a keyword are required. 

  The following 3 set of keywords are equivalent:

     1)  SELECT, FROM, WHERE DELETE DUPLICATES
     2)  SELEC FRO WHER DELET DUPL
     3)  SEL, FRO WHE, DEL DUP

  Commands in RIM are entered in a free-field format with blanks and
  commas as separators.  RIM also provides powerful data repetition and
  data generation facilities. The following provides a short and non
  complete description of RIM conventions and data generation
  facilities.  A more extensive description, intended for the more
  experienced RIM user, is contained in section INPUT FORMAT. 
 
  Keywords and data values are separated by blanks and commas. If a
  command is too long for one 80 character line, it may be continued on
  succeeding line(s) by entering "+" as the last character on the
  line(s).  RIM remembers the previous command. This enables you to
  re-use all or part of the previous command. This is done by using an
  asterisk to indicate which items of the previous command are to be
  re-used.  A single asterisk means re-use thee corrosponding single
  item of th previous record.  An asterisk followed by a number n means
  re-use the next n corresponding items.  Two asterisks mean re-use all
  remaining corresponding items. 

  The following are all equivalent:
 
    1)   THIS IS A COMMOND
 
    2)   THIS +
         IS+
         A +
         COMMAND
 
    3)   * IS, A COMMAND
 
    4)   THIS *2 COMMAND
 
    5)   THIS **
 
  Multiple commands may be entered on one line separated by a semicolon
  or a dollar sign . 
 
    THIS IS FIRST ; THIS IS SECOND $  THIS IS THIRD
 
  Comments may be placed anywhere within a command by enclosing the
  comment between the characters *( and ). 
 
    *(THIS IS A COMMENT)  THIS IS NOT
 
  When numeric data is to be interpreted as text (alphanumeric) data,
  the numerals must be enclosed by quotation marks. 

    "1234"
 
  When entering text strings which contain embedded blanks or commas,
  the entire string must be enclosed by quotation marks. 

     "THIS IS A TEXT STRING"

  A text string may require continuation on additional line(s). The +
  sign convention can then be used within the quotation marks. 

     "THIS IS+
      A TEXT +
     STRING"

  It recommended as good practice not to use leading blanks in text
  strings. (The precise number of leading blanks in a string must be
  used when it is referenced) 

    "THIS IS GOOD PRACTICE"           "   THIS IS NOT"

  Integer data are input as a string of digits without a decimal point. 
  A sign may precede the digits 
 
      123 , -63, +56, 0
 
  Real (floating point) numbers must include a decimal point or E for
  exponent.  If a decimal point is not precent the E must be preceded by
  an integer. 

     1.3, .005,  0., 6.E-1, 6E-1, 0.60, -23.45
 
  The absolute value of real number is limited to the range 1.0E-38 to
  1.0e+38 
2 SUMMARY
 SUMMARY
 -------
  DEFINING A DATABASE SCHEMA:
 
            DEFINE dbname
            OWNER password
            ATTRIBUTES
            attname {REAL} [{length}] [KEY]
                     INT    VAR
                     TEXT
                     DOUB
                     RVEC
                     IVEC
                     DVEC
 
            attname {RMAT} {row, col}  [KEY]
                     IMAT   row, VAR
                     DMAT   VAR, VAR
            RELATIONS
            relname WITH attname1 [attname2 ... attnameN]
            PASSWORDS
            {READ PASSWORD} FOR {relname} IS PASSWORD
             RPW                 ALL
            {MODIFY PASSWORD} FOR {relname} IS PASSWORD
             MPW                   ALL
            RULES
            attname [IN relname] {EQ} value [{AND} ...]
                                  NE          OR
                                  GT
                                  GE
                                  LT
                                  LE
            attname IN relname {EQA} attname IN relname [{AND} ...
                                NEA                       OR
                                GTA
                                GEA
                                LTA
                                LEA
            END


  LOADING A RELATION:
 
           LOAD relname
           value1 value2 ... valueN
           END
           value :  SCALARS  val1
                    TEXT  "text string"
                    VECTOR (val1, val2, ...)
                    MATRIX ((r1c1, r2c1, ...), (r1c2, r2c2, ...), ...)

  QUERYING A RELATION:
 
       SELECT {attname1 [=fld1], attname2 [=fld2], ...} FROM relname +
               attnum1 [=fld1], ...
               attname1(i), ...
               attname1(i, j), ...
               ALL
              [SORTED BY attname1 [={A}], [attname2 [={A}], ...]] +
                                     D                 D
              [WHERE ...]
       TALLY attname [={A}] FROM relname [WHERE ...]
                        D
 
            WHERE CLAUSE :
 
            WHERE  attname  {EXISTS}               [{AND} ...]
                             FAILS                   OR
                             EQ        {value}
                             EQS        MAX
                             NE         MIN
                             GT
                             LT
                             LE
 
            WHERE  attname  {EQA}       attname    [{AND} ...]
                             NEA                     OR
                             GTA
                             GEA
                             LTA
                             LEA
 
            WHERE  ROWS     {EQ}       rownumber   [{AND} ...]
                             NE                      OR
                             LT
                             LE
                             GE
                             GT
 
            WHERE {attname} {EQ}       list        [{AND} ...]
                   ROWS      NE                      OR
 
            WHERE  LIMIT     EQ        number      [{AND} ...]
 
  COMPUTATION COMMANDS:
 
            COMPUTE {COUNT} attname FROM relname [WHERE ...]
                     MIN
                     MAX
                     AVE
                     SUM
 
  MODIFICATION COMMANDS:
 
            CHANGE {attname} TO value [IN relname] WHERE ...
                    attname(i)
                    attname(i, j)
            CHANGE {RPW} TO newpass FOR relname
                    MPW
            CHANGE OWNER TO newowner
            DELETE ROWS FROM relname WHERE ...
            DELETE DUPLICATES [attname1, attname2, ...] FROM relname
            DELETE RULE rulenumber
            RENAME ATTRIBUTE attname TO newname [IN relname]
            RENAME RELATION relname TO newname
            REMOVE relname

  RELATIONAL ALGEBRA COMMANDS:
 
            INTERSECT relname1 WITH relname2 FORMING relname3 +
                      [USING attname1 [attname2, ...]]
 
            JOIN relname1 USING attname1 WITH relname2 USING attname2 +
                 FORMING relname3 [WHERE {EQ}]
                                          NE
                                          GT
                                          GE
                                          LT
                                          LE
 
            SUBTRACT relname1 FROM relname2 FORMING relname3 +
                     [USING attname1 [attname2, ...]]
 
            PROJECT relname1 FROM relname2 USING +
                    {attname1, [attname2, ...]} [WHERE ...]
                     ALL
 
  QUERYING THE SCHEMA:
 
            LISTREL [relname]
                     ALL
            EXHIBIT attname [attname ...]
            PRINT RULES
 
  REPORT COMMANDS:
 
            NEWPAGE
            BLANK n
            TITLE "title"
            DATE
            LINES n
            WIDTH n
 
  KEY COMMANDS:
 
            BUILD KEY FOR attname IN relname
            DELETE KEY FOR attname IN relname
 
  RIM-TO-RIM COMMANDS:
 
            UNLOAD [dbname [=newdbname]] {SCHEMA} [relname1 [=mpw] +
                                           DATA
                                           ALL
                 [relname2 [=mpw], ...]
 
  MISCELLANEOUS COMMANDS:
 
            OPEN dbname
            CLOSE
            INPUT {filename}
                   TERMINAL
            OUTPUT {filename}
                    TERMINAL
            EXIT
            QUIT
            MENU
            HELP [command name]
            USER password
            ECHO
            NOECHO
            CHECK
            NOCHECK
            TOLERANCE xx.xx [PERCENT]
            RELOAD
2 MENU
 MENU Command
 ---- -------
  The MENU command places the user in menu mode.  It may be entered at
  any point when in command mode except when in the DEFINE or LOAD
  modules.  Menu mode is particulary useful for schema definition and
  data loading. 
2 INPUT_FORMAT
 INPUT FORMAT
 ----- ------
  Entering input through LXLREC
  -------- ----- ------- ------
  LXLREC is a free-field input routine which separates
  user input into items which are grouped into records.
 
  Terminology
  -----------
  line   - one line of information with a maximum of 80
           characters.  A line corresponds to a card (for
           those old enough to remember card input).
  
  item   - one piece of information.  An item may be a real
           number, an integer or text.  Items are delimited
           by blanks or commas.  Multiple blanks count as a
           single blank.  Multiple commas generate null items (see
           section on multiple commas).
  
  record - a collection or list of up to 100 items which is
           in response to a single request for data by the
           calling program.
  
  integer- all characters must be numeric except the first one
           which may be + or -.  For example: -1   23   +10000
  
  real   - an item of the form i1.i2ei3 where i1 and i3 may be
           signed integers and i2 is an unsigned integer.  The
           entire form is not necessary but at least one digit
           and either the  .  Or the e must be present.
           for example: 1.  E-3 -2.7E+4   .0
  
  text   - any single item which is not an integer or real.  If
           a text item looks like an integer or real or if it
           contains blanks or commas, it must be enclosed in
           quotes (").
  
  Composing records
  --------- -------
  Ordinarily records consist of one line.  However, multiple
  records may be put on one line by separating them with
  dollars or semi-colons.  Alternatively, a record may span
  several lines by ending all but the last line with a plus.
  In general items must be wholly contained on one line with the
  exception of quoted text items and comments.
  
  Special items - =, (, )
  ------- -----   -------
  Equals and left and right parentheses are treated as single
  items unless enclosed in quoted text items.  Thus a=3.  Is
  3 items (two text and one real) rather than one item.
  "a=3." is one text item.  This allows more convenient parsing
  of many commands.
  
  Multiple commas
  -------- ------
  If more than one comma separates two items, each additional comma
  will generate a text item with Three characters "-0-".  Thus,
  , , abc, , 2.5  is equivalent to  -0-, abc, -0-, 2.5.
  
  Rules for text items
  ----- --- ---- -----
  A quoted text item is terminated by a record separator (dollar
  or semi-colon).  Quoted text items may be continued on multiple
  lines.  If the trailing quote is omitted on the last item in a
  record, the quoted item is terminated at either the record
  separator, if any, or the last non-blank character on the line.
  Quotes may be included in quoted text items by doubling
  the quotes (e.g.  "a, ""b" yields a, "b as a text string).
  The total number of characters for all text items in a
  record is limited to 2000.
  
  Some examples
  ---- --------
 
        1, 2.  ABC "2."
  This record has four items - integer, real and two text
  
        1 $ 2
  This line is two records - each one integer
  
        1 +
        2
  This is one record on two lines with two integers
  
  Comments
  --------
  Comments may be included anywhere in the input stream by
  enclosing them between *( and ).  For example *( this is a comment).
  comments are completely ignored by LXLREC.  Empty lines between
  records are also ignored and may be used to paragraph input.
  An alternative form of comment is */..../ where slashes replace
  the parentheses.  This may be used if parentheses are needed in
  the comment.
  
  Short cuts - data generation
  ----- ----   ---- ----------
  Activities such as entering large volumes of data, repeating
  similiar records and reentering mis-typed records can be eased
  by using the LXLREC data generation facilities.
  
  Repeating items on previous record - *n, **, *
  --------- ----- -- -------- ------   -------
  A data item of the form *n where n is an unsigned integer
  indicates that the next n items in that record are identical
  to the corresponding n items in the preceeding record.  An
  isolated * is treated as *1.  Double asterisks (**) indicate
  that the remaining items in the previous record are to be
  copied into the current record.
  
  Repeating an item in the current record - *=n *=n+step
  --------- -- ---- -- --- ------- ------   --- --------
  An item of the form *=n, where n is an unsigned integer,
  indicates that the next n items are identical to the
  immediately preceding item.  An item of the form *=n+step
  or *=n-step where step is an unsigned real or integer,
  indicates that the next n items are to be generated by
  consecutively incrementing the immediately preceding item.
  
  Generating multiple records - *+n
  ---------- -------- -------   ---
  A record beginning with *+n where n is an unsigned integer
  indicates that the next n records are to be generated from
  the preceding record.  Each item of the generated record
  is formed by adding an item of the *+n record to the
  corresponding item of the immediately preceding input or
  generated record.  A zero (integer) item should be inserted
  in an *+n record for text items in the preceding record.
  The number of items after the *+n must match the number
  in the preceding record.
  
  Note on generating items
  ---- -- ---------- -----
  When increments are specified, either on the *+n record or
  as step on an *=n+step item they must match the item they
  are incrementing in type.  It should be noted that the *+n
  record generation option is based on the expanded
  representation of the previous record.  The generation does
  not operate on the card image of the preceding record if it
  contains data generation items.  Therefore, it is not possible
  to repeat or increment an asterisk-type item.
  
  Examples
  --------
  Consider the following seven input records to illustrate the
  data generation features.
 
        1 2 3 4 5 6 7 8 9 10 11 12
        2 1 *2 4 *=2 1 *=2+2 **
        *+1 0 *=3 0 *=5 **
        *+1 0 *=11
        *+1 *12
        *+1 **
        **
  
  Twelve data items are defined by each of these records.  Each
  of the last six records is translated into the same internal
  record which is:  2 1 3 4 4 4 4 1 3 5 11 12
  
  Note - the last five records could be replaced by the single
  record: *+5 **
  
  Changing special characters
  -------- ------- ----------
  It is possible to change the special characters LXLREC uses to
  break apart records.  These special characters may either be
  changed to another character or set to null so that they are
  ignored.  This is useful for reading specially formatted files
  or to allow special characters to be input as text items.
  to change special characters enter the following special
  comment as the only entry on a line between records.
  
       *(set keyword=newvalue)
  
  where keyword can be DOLLAR
                       SEMI
                       QUOTES
                       BLANK
                       PLUS
                       COMMA
  
  and newvalue is either the word null or the new special character.
  For example, if one wanted to use dollars to delimit items
  rather than records and to not have commas delimit items,
  the following two lines could be entered.
  
       *(SET DOLLAR=NULL)
       *(SET COMMA=$)
  
  Note that commas could now be used in unquoted text strings
  and dollars could now be included in quoted text strings.
  Also, note that it is really the function that is being
  altered, not the character.  Changing plus only changes the
  line continuation character, not the representation of real
  numbers.  To restore the original condition after the above
  example, the following could be entered.
  
       *(SET DOLLAR=$)
       *(SET COMMA=, )
  
  Warning - using the same character for multiple functions
  will produce undefined results...(undefined means even the
  author wouldn't want to guess what will happen).
  
  Echo
  ----
  LXLREC will echo the input line as the default.  Either the
  user or the calling program can switch echo on or off.  The
  user accomplishes this by entering
 
       *(SET ECHO=ON) or
       *(SET ECHO=OFF)
 
  in the same manner as setting special characters.
