man(1) Manual page archive


NAME
     bas - basic

SYNOPSIS
     bas [ file ]

DESCRIPTION
     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:

        statement
        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:

     expression
          The expression is executed for its side effects
          (assignment or function call) or for printing as
          described above.

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

     done
          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-
          ordinates 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.

     dump
          The name and current value of every variable is
          printed.

 1

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

     erase
          The 611 screen is erased.

     for name = expression expression statement
     for name = expression expression
     next
          The for statement repetitively executes a statement
          (first form) or a group of statements (second form)
          under control of a named variable.  The variable takes
          on the value of the first expression, then is incre-
          mented 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
     fi
          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.

 2

     run
          The internal statements are compiled.  The symbol table
          is re-initialized.  The random number generator is
          reset.  Control is passed to the lowest numbered inter-
          nal statement.

     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:

     name
          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.

     number
          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-
          nent.

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

     _ 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
          internal 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
          between 0 and 32767.

 3

     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
          operand.  Assignment binds right to left, all other
          operators 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
          extend as follows: a>b>c is the same as a>b&b>c.

     + -
          Add and subtract.

     * /
          Multiply and divide.

     ^
          Exponentiation.

     The following is a list of builtin functions:

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

     exp(x)
          is the exponential function of x.

     log(x)
          is the natural logarithm of x.

     sqr(x)
          is the square root of x.

     sin(x)
          is the sine of x (radians).

     cos(x)
          is the cosine of x (radians).

 4

     atn(x)
          is the arctangent of x.  Its value is between -π/2 and
          π/2.

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

     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.

     abs(x)
          is the absolute value of x.

     int(x)
          returns x truncated (towards 0) to an integer.

FILES
     /tmp/btm?       temporary
     b.out           save file

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

BUGS
     Has been known to give core images.

 5