BAS(I) 1/15/73 BAS(I)
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.
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.
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
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
numbered statment. If executed from immediate mode,
the internal statements are compiled first.
if expression statement
The statement is executed if the expression evaluates
to non-zero.
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.)
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.
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
internal statement.
Expressions have the following syntax:
name
A name is used to specify a variable. Names are
composed 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
number 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
exponent.
( expression )
Parentheses are used to alter normal order of
evaluation.
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
evaluates 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.
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
arguments are zero. It has result one if both its
arguments 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
arguments 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
current level of function call.
exp(x)
is the exponential function of x.
log(x)
is the natural logarithm of x.
sin(x)
is the sine of x (radians).
cos(x)
is the cosine of x (radians).
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
resultant value is returned.
int(x)
returns x truncated to an integer.
FILES
/tmp/btm? temporary
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. Needs a way to list a
program onto a file.