From: Ken Thompson Date: Wed, 7 Nov 1973 00:32:19 +0000 (-0500) Subject: Research V4 development X-Git-Tag: Research-V4~77 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/d1e69bf2b35cefe2aeddb39492419e119fc2d5b8 Research V4 development Work on file man/man1/bas.1 Synthesized-from: v4 --- diff --git a/man/man1/bas.1 b/man/man1/bas.1 new file mode 100644 index 0000000000..74f80d3add --- /dev/null +++ b/man/man1/bas.1 @@ -0,0 +1,348 @@ +.th BAS I 1/15/73 +.sh NAME +bas \*- basic +.sh SYNOPSIS +.bd bas +[ file ] +.sh DESCRIPTION +.it Bas +is a dialect of Basic. +If a file argument is provided, +the file is used for input before the console +is read. +.it Bas +accepts lines of the form: +.s3 + statement + integer statement +.s3 +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. +.s3 +Statements have the following syntax: +.s3 +.lp +5 5 +expression +.br +The expression is executed for its side +effects (assignment or function call) +or for printing as described above. +.s3 +.lp +5 5 +.bd done +.br +Return to system level. +.s3 +.lp +5 5 +.bd draw +expression expression expression +.br +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. +.s3 +.lp +5 5 +.bd display +list +.br +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. +.s3 +.lp +5 5 +.bd erase +.br +The 611 screen is erased. +.s3 +.lp +5 5 +.bd for +name +.bd = +expression expression statement +.br +.lp +5 5 +.bd for +name +.bd = +expression expression +.br +.li +... +.lp +5 5 +.bd next +.br +The +.it 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. +.s3 +.lp +5 5 +.bd goto +expression +.br +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. +.s3 +.lp +5 5 +.bd if +expression statement +.br +The statement is executed if the expression evaluates +to non-zero. +.s3 +.lp +5 5 +.bd list +[expression [expression]] +.br +.br 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. +.s3 +.lp +5 5 +.bd print +list +.br +The list of expressions and strings are concatenated and +printed. +(A string is delimited by " characters.) +.s3 +.lp +5 5 +.bd return +[expression] +.br +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. +.s3 +.lp +5 5 +.bd run +.br +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. +.s3 +.i0 +Expressions have the following syntax: +.s3 +.lp +5 5 +name +.br +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. +.s3 +.lp +5 5 +number +.br +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 \fBe\fR followed by a possibly signed exponent. +.s3 +.lp +5 5 +.bd ( +expression +.bd ) +.br +Parentheses are used to alter normal order of evaluation. +.s3 +.lp +5 5 +expression operator expression +.br +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. +.s3 +.lp +5 5 +expression +.bd ( +[expression [ +.bd , +expression] ... ] +.bd ) +.br +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. +.s3 +.lp +5 5 +name +.bd [ +expression +[ +.bd , +expression +] ... +.bd ] +.br +Each expression is truncated to an integer +and used as a specifier for the name. +The result is syntactically identical to a name. +.bd a[1,2] +is the same as +.bd a[1][2]. +The truncated expressions are restricted to +values between 0 and 32767. +.s3 +.i0 +The following is the list of operators: +.s3 +.lp +5 5 += +.br += +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. +.s3 +.lp +5 5 +& \*v +.br +& +(logical and) +has result zero if either of its arguments are zero. +It has result one if both its arguments are non-zero. +\*v +(logical or) +has result zero if both of its arguments are zero. +It has result one if either of its arguments are non-zero. +.s3 +.lp +5 5 +< <= > >= == <> +.br +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. +.s3 +.lp +5 5 ++ \*- +.br +Add and subtract. +.s3 +.lp +5 5 +* / +.br +Multiply and divide. +.s3 +.lp +5 5 +^ +.br +Exponentiation. +.s3 +.i0 +The following is a list of builtin functions: +.s3 +.lp +5 5 +.bd arg(i) +.br +is the value of the +\fIi\fR|-th +actual parameter on the current level +of function call. +.s3 +.lp +5 5 +.bd exp(x) +.br +is the exponential function of \fIx\fR. +.s3 +.lp +5 5 +.bd log(x) +.br +is the natural logarithm of \fIx\fR. +.s3 +.lp +5 5 +.bd sin(x) +.br +is the sine of \fIx\fR (radians). +.s3 +.lp +5 5 +.bd cos(x) +.br +is the cosine of \fIx\fR (radians). +.s3 +.lp +5 5 +.bd atn(x) +.br +is the arctangent of \fIx\fR . its value +is between \*-\(*p/2 and \(*p/2. +.s3 +.lp +5 5 +.bd "rnd( )" +.br +is a uniformly distributed random +number between zero and one. +.s3 +.lp +5 5 +.bd "expr( )" +.br +is the only form of program input. +A line is read from the input and +evaluated as an expression. +The resultant value is returned. +.s3 +.lp +5 5 +.bd int(x) +.br +returns \fIx\fR truncated to an integer. +.i0 +.sh FILES +.dt +/tmp/btm? temporary +.sh DIAGNOSTICS +Syntax +errors cause the incorrect line to be typed +with an underscore where the parse failed. +All other diagnostics are self explanatory. +.sh BUGS +Has been known to give core images. +Needs a way to +.it list +a program onto a file.