11/3/71 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: (expr is short for expression) expr The expression is executed for its side effects (assignment or function call) or for printing as described above. done Return to system level. draw expr expr expr draw is used to draw on a 611--type storage scope through a TSP--i plotter interface. The coordinates of the scope face are zero to one in both the x and y directions. (Zero,zero being the lower left corner.) The expressions are evaluated and design at-- ed X, Y, and Z. A line is drawn from the previous X, Y to the new X, Y * If Z is non--zero, the line is visible, otherwise the line is invisible. for name = expr expr statement for name = expr expr .. . next The for statement repetatively 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. 11/3/71 BAS (I) goto expr The expression is evaluated, truncated to an integer and execution goes to the corresponding integer numbered statement. If executed from immediate mode, the internal statements are compiled first. if expr statement The statement is executed if the expression evaluates to non--zero. list [ expr [expr]] list 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 expr The expression is evaluated and printed. return expr The expression is evaluated and the result is passed back as the value of a function call. run The internal statements are compiled. The symbol table is re--initialized. The random number generator is re-- set. 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 (`a' -- `z') 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 composed of digits, at most one decimal point ('.') and possibly a scale factor of the form e digits or e-- digits. ( expr ) Parentheses are used to alter normal order of evaluation. expr op expr Common functions of two arguments are 11/3/71 BAS (I) abbreviated by the two arguments separated by an operator denoting the function. A complete list of operators is given below. expr ( [expr [ , expr ]] 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, an builtin function is called. The list of builtin functions appears below. name [ expr [ , expr ...] ] Arrays are not yet implemented. 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. ^ Exponeniation. 11/3/71 BAS (I) -The following is a list of builtin functions: arg Arg(i) is the value of the ith actual parameter on the current level of function call. exp Exp(x) is the exponential function of x. log Log(x) is the logarithm base of x. sin Sin(x) is the sine of x (radians). co s Cos(x) is the cosine of x (radians). atn Atn(x) is the arctangent of x. (Not implemented.) md Rnd() is a uniformly distributed random number between zero and one. expr 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 Int(x) returns x truncated to an integer. FILES /tmp/btma, btmb *.. temporary SEE ALSO DIAGNOSTICS Syntax errors cause the incorrect line to be typed with an underscore where the parse failed. All other diagnostics are self explanatory. BUGS Arrays [] are not yet implemented. In general, program sizes, recursion, etc are not checked, and cause trouble. OWNER ken