BAS(I)                       5/15/74                       BAS(I)

     bas - basic

     bas [ file ]

     Bas  is a dialect of Basic.  If a file argument is provided,
     the file is used for input before the console is read.   Bas
     accepts lines of the form:

        integer statement

     Integer  numbered  statements (known as internal statements)
     are stored for later execution.  They are stored  in  sorted
     ascending  order.   Non-numbered  statements are immediately
     executed.  The result of an immediate  expression  statement
     (that does not have `=' as its highest operator) is printed.

     Statements have the following syntax:

          The expression is executed for its  side  effects  (as-
          signment or function call) or for printing as described

     comment ...
          This statement is ignored.  It  is  used  to  interject
          commentary in a program.

          Return to system level.

     draw expression expression expression
          A line is drawn on the Tektronix 611 display `/dev/vt0'
          from the current display position to  the  XY  co-ordi-
          nates  specified  by  the  first  two expressions.  The
          scale is zero to one in both X and  Y  directions.   If
          the  third  expression  is zero, the line is invisible.
          The current display position is set to the end point.

     display list
          The list of expressions and strings is concatenated and
          displayed  (i.e.  printed)  on  the 611 starting at the
          current display position.  The current display position
          is not changed.

          The  name and current value of every variable is print-

          The UNIX editor, ed, is invoked with the file argument.
          After the editor exits, this file is recompiled.

                              - 1 -

BAS(I)                       5/15/74                       BAS(I)

          The 611 screen is erased.

     for name = expression expression statement
     for name = expression expression
          The  for  statement  repetitively  executes a statement
          (first form) or a group of statements (second form) un-
          der control of a named variable.  The variable takes on
          the value of the first expression, then is  incremented
          by  one  on  each  loop, not to exceed the value of the
          second expression.

     goto expression
          The expression is evaluated, truncated  to  an  integer
          and  execution  goes  to the corresponding integer num-
          bered statment.  If executed from immediate  mode,  the
          internal statements are compiled first.

     if expression statement
     if expression
     [ else
          ... ]
          The statement (first form) or group of statements (sec-
          ond form) is executed if the  expression  evaluates  to
          non-zero.   In the second form, an optional else allows
          for a group of statements to be executed when the first
          group is not.

     list [expression [expression]]
          is  used  to  print out the stored internal statements.
          If no arguments are given, all internal statements  are
          printed.   If one argument is given, only that internal
          statement is listed.  If two arguments are  given,  all
          internal  statements  inclusively between the arguments
          are printed.

     print list
          The list of expressions and  strings  are  concatenated
          and  printed.  (A string is delimited by " characters.)

     prompt list
          Prompt is the same as  print  except  that  no  newline
          character is printed.

     return [expression]
          The  expression  is  evaluated and the result is passed
          back as the value of a function call.  If no expression
          is given, zero is returned.

          The internal statements are compiled.  The symbol table
          is re-initialized.  The random number generator is  re-

                              - 2 -

BAS(I)                       5/15/74                       BAS(I)

          set.  Control is passed to the lowest numbered internal

     save [expression [expression]]
          Save is like list except that the output is written  on
          the file argument.  If no argument is given on the com-
          mand, b.out is used.

     Expressions have the following syntax:

          A name is used to specify a variable.  Names  are  com-
          posed  of a letter followed by letters and digits.  The
          first four characters of a name are significant.

          A number is used to represent a constant value.  A num-
          ber  is  written in Fortran style, and contains digits,
          an optional decimal point, and possibly a scale  factor
          consisting  of an e followed by a possibly signed expo-

     ( expression )
          Parentheses are used to alter normal order  of  evalua-

     _ expression
          The result is the negation of the expression.

     expression operator expression
          Common  functions  of  two arguments are abbreviated by
          the two arguments separated by an operator denoting the
          function.  A complete list of operators is given below.

     expression ( [expression [ , expression] ... ] )
          Functions of an arbitrary number of  arguments  can  be
          called  by  an  expression followed by the arguments in
          parentheses separated by commas.  The expression evalu-
          ates to the line number of the entry of the function in
          the internally stored statements.  This causes the  in-
          ternal  statements  to  be compiled.  If the expression
          evaluates negative, a builtin function is called.   The
          list of builtin functions appears below.

     name [ expression [ , expression ] ...  ]
          Each  expression is truncated to an integer and used as
          a specifier for the name.  The result is  syntactically
          identical  to  a  name.  a[1,2] is the same as a[1][2].
          The truncated expressions are restricted to values  be-
          tween 0 and 32767.

     The following is the list of operators:

          = is the assignment operator.  The left operand must be
          a name or an array element.  The result  is  the  right

                              - 3 -

BAS(I)                       5/15/74                       BAS(I)

          operand.  Assignment binds right to left, all other op-
          erators bind left to right.

     &  |
          & (logical and) has result zero if either of its  argu-
          ments  are  zero.   It has result one if both its argu-
          ments are non-zero.  | (logical or) has result zero  if
          both  of  its arguments are zero.  It has result one if
          either of its arguments are non-zero.

     <  <=  >  >=  ==  <>
          The relational operators (< less than, <= less than  or
          equal,  >  greater  than,  >= greater than or equal, ==
          equal to, <> not equal to) return one  if  their  argu-
          ments  are in the specified relation.  They return zero
          otherwise.  Relational operators at the same level  ex-
          tend as follows: a>b>c is the same as a>b&b>c.

     + -
          Add and subtract.

     * /
          Multiply and divide.


     The following is a list of builtin functions:

          is  the value of the i -th actual parameter on the cur-
          rent level of function call.

          is the exponential function of x.

          is the natural logarithm of x.

          is the square root of x.

          is the sine of x (radians).

          is the cosine of x (radians).

          is the arctangent of x.  Its value is between  -/2  and

     rnd( )
          is  a  uniformly distributed random number between zero
          and one.

                              - 4 -

BAS(I)                       5/15/74                       BAS(I)

     expr( )
          is the only form of program input.  A line is read from
          the  input  and evaluated as an expression.  The resul-
          tant value is returned.

          is the absolute value of x.

          returns x truncated (towards 0) to an integer.

     /tmp/btm?       temporary
     b.out           save file

     Syntax errors cause the incorrect line to be typed  with  an
     underscore  where  the  parse failed.  All other diagnostics
     are self explanatory.

     Has been known to give core images.

                              - 5 -