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