|
|
1.1 root 1: .th BAS I 1/15/73
2: .sh NAME
3: bas \*- basic
4: .sh SYNOPSIS
5: .bd bas
6: [ file ]
7: .sh DESCRIPTION
8: .it Bas
9: is a dialect of Basic.
10: If a file argument is provided,
11: the file is used for input before the console
12: is read.
13: .it Bas
14: accepts lines of the form:
15: .s3
16: statement
17: integer statement
18: .s3
19: Integer numbered statements
20: (known as internal statements)
21: are stored for later execution.
22: They are stored in sorted ascending order.
23: Non-numbered statements are immediately executed.
24: The result of an immediate expression statement
25: (that does not have `=' as its highest operator) is printed.
26: .s3
27: Statements have the following syntax:
28: .s3
29: .lp +5 5
30: expression
31: .br
32: The expression is executed for its side
33: effects (assignment or function call)
34: or for printing as described above.
35: .s3
36: .lp +5 5
37: .bd done
38: .br
39: Return to system level.
40: .s3
41: .lp +5 5
42: .bd draw
43: expression expression expression
44: .br
45: A line is drawn on the Tektronix 611 display
46: `/dev/vt0'
47: from
48: the current display position
49: to the XY co-ordinates specified by the
50: first two expressions.
51: The scale is zero to one in both X and Y directions.
52: If the third expression
53: is zero, the line is invisible.
54: The current display position is set to the end point.
55: .s3
56: .lp +5 5
57: .bd display
58: list
59: .br
60: The list of expressions and strings is
61: concatenated and displayed (i.e. printed) on the 611 starting
62: at the current display position.
63: The current display position is not changed.
64: .s3
65: .lp +5 5
66: .bd erase
67: .br
68: The 611 screen is erased.
69: .s3
70: .lp +5 5
71: .bd for
72: name
73: .bd =
74: expression expression statement
75: .br
76: .lp +5 5
77: .bd for
78: name
79: .bd =
80: expression expression
81: .br
82: .li
83: ...
84: .lp +5 5
85: .bd next
86: .br
87: The
88: .it for
89: statement
90: repetitively executes a
91: statement (first form)
92: or a group of statements (second form)
93: under control of a named variable.
94: The variable takes on the value of
95: the first expression,
96: then is incremented by one on each loop,
97: not to exceed the value of
98: the second expression.
99: .s3
100: .lp +5 5
101: .bd goto
102: expression
103: .br
104: The expression is evaluated, truncated to an integer
105: and execution goes to the corresponding integer numbered statment.
106: If executed from immediate mode,
107: the internal statements are compiled first.
108: .s3
109: .lp +5 5
110: .bd if
111: expression statement
112: .br
113: The statement is executed if the expression evaluates
114: to non-zero.
115: .s3
116: .lp +5 5
117: .bd list
118: [expression [expression]]
119: .br
120: .br list
121: is used to print out the stored internal statements.
122: If no arguments are given, all internal statements are printed.
123: If one argument is given, only that
124: internal statement is listed.
125: If two arguments are given, all internal statements
126: inclusively between the arguments are printed.
127: .s3
128: .lp +5 5
129: .bd print
130: list
131: .br
132: The list of expressions and strings are concatenated and
133: printed.
134: (A string is delimited by " characters.)
135: .s3
136: .lp +5 5
137: .bd return
138: [expression]
139: .br
140: The expression is evaluated and the result is passed
141: back as the value of a function call.
142: If no expression is given, zero is returned.
143: .s3
144: .lp +5 5
145: .bd run
146: .br
147: The internal statements are compiled.
148: The symbol table is re-initialized.
149: The random number generator is reset.
150: Control is passed to the lowest numbered internal
151: statement.
152: .s3
153: .i0
154: Expressions have the following syntax:
155: .s3
156: .lp +5 5
157: name
158: .br
159: A name is used to specify a variable.
160: Names are composed of a letter
161: followed by letters and digits.
162: The first four characters of a name are significant.
163: .s3
164: .lp +5 5
165: number
166: .br
167: A number is used to represent a constant value.
168: A number is written in Fortran style,
169: and contains digits, an optional decimal point,
170: and possibly a scale factor consisting
171: of an \fBe\fR followed by a possibly signed exponent.
172: .s3
173: .lp +5 5
174: .bd (
175: expression
176: .bd )
177: .br
178: Parentheses are used to alter normal order of evaluation.
179: .s3
180: .lp +5 5
181: expression operator expression
182: .br
183: Common functions of two arguments are abbreviated
184: by the two arguments separated by an operator denoting the function.
185: A complete list of operators is given below.
186: .s3
187: .lp +5 5
188: expression
189: .bd (
190: [expression [
191: .bd ,
192: expression] ... ]
193: .bd )
194: .br
195: Functions of an arbitrary number of arguments
196: can be called by an expression followed by the arguments
197: in parentheses separated by commas.
198: The expression evaluates to the
199: line number of the entry of the function in the
200: internally stored statements.
201: This causes the internal statements to be compiled.
202: If the expression evaluates negative,
203: a builtin function is called.
204: The list of builtin functions appears below.
205: .s3
206: .lp +5 5
207: name
208: .bd [
209: expression
210: [
211: .bd ,
212: expression
213: ] ...
214: .bd ]
215: .br
216: Each expression is truncated to an integer
217: and used as a specifier for the name.
218: The result is syntactically identical to a name.
219: .bd a[1,2]
220: is the same as
221: .bd a[1][2].
222: The truncated expressions are restricted to
223: values between 0 and 32767.
224: .s3
225: .i0
226: The following is the list of operators:
227: .s3
228: .lp +5 5
229: =
230: .br
231: =
232: is the assignment operator.
233: The left operand must be a name or an array element.
234: The result is the right operand.
235: Assignment binds right to left,
236: all other operators bind left to right.
237: .s3
238: .lp +5 5
239: & \*v
240: .br
241: &
242: (logical and)
243: has result zero if either of its arguments are zero.
244: It has result one if both its arguments are non-zero.
245: \*v
246: (logical or)
247: has result zero if both of its arguments are zero.
248: It has result one if either of its arguments are non-zero.
249: .s3
250: .lp +5 5
251: < <= > >= == <>
252: .br
253: The relational operators
254: (< less than, <= less than or equal,
255: > greater than,
256: >= greater than or equal,
257: == equal to,
258: <> not equal to)
259: return one if their arguments are in the specified
260: relation.
261: They return zero otherwise.
262: Relational operators at the same level extend as follows:
263: a>b>c is the same as a>b&b>c.
264: .s3
265: .lp +5 5
266: + \*-
267: .br
268: Add and subtract.
269: .s3
270: .lp +5 5
271: * /
272: .br
273: Multiply and divide.
274: .s3
275: .lp +5 5
276: ^
277: .br
278: Exponentiation.
279: .s3
280: .i0
281: The following is a list of builtin functions:
282: .s3
283: .lp +5 5
284: .bd arg(i)
285: .br
286: is the value of the
287: \fIi\fR|-th
288: actual parameter on the current level
289: of function call.
290: .s3
291: .lp +5 5
292: .bd exp(x)
293: .br
294: is the exponential function of \fIx\fR.
295: .s3
296: .lp +5 5
297: .bd log(x)
298: .br
299: is the natural logarithm of \fIx\fR.
300: .s3
301: .lp +5 5
302: .bd sin(x)
303: .br
304: is the sine of \fIx\fR (radians).
305: .s3
306: .lp +5 5
307: .bd cos(x)
308: .br
309: is the cosine of \fIx\fR (radians).
310: .s3
311: .lp +5 5
312: .bd atn(x)
313: .br
314: is the arctangent of \fIx\fR . its value
315: is between \*-\(*p/2 and \(*p/2.
316: .s3
317: .lp +5 5
318: .bd "rnd( )"
319: .br
320: is a uniformly distributed random
321: number between zero and one.
322: .s3
323: .lp +5 5
324: .bd "expr( )"
325: .br
326: is the only form of program input.
327: A line is read from the input and
328: evaluated as an expression.
329: The resultant value is returned.
330: .s3
331: .lp +5 5
332: .bd int(x)
333: .br
334: returns \fIx\fR truncated to an integer.
335: .i0
336: .sh FILES
337: .dt
338: /tmp/btm? temporary
339: .sh DIAGNOSTICS
340: Syntax
341: errors cause the incorrect line to be typed
342: with an underscore where the parse failed.
343: All other diagnostics are self explanatory.
344: .sh BUGS
345: Has been known to give core images.
346: Needs a way to
347: .it list
348: a program onto a file.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.