FreeBSD Manual Pages
BASIC(1) General Commands Manual BASIC(1) basic - `Basic' language interpreter SYNOPSIS basic [ -e -x -n file ] DESCRIPTION Basic is an interpreter for the Basic language. See below for current commands recognised. If a file is given then that file is loaded up into core and run without any interaction. This can be used for games etc. which use a small calling program which is set user-id. All com- mands are only recognised in lower case. A line editor is invoked for all input from the terminal. To get characters less than space into a line use the construct \n \a etc. which will get cntrl-n and cntrl-a into the line. FLAGS -e use the in built editor for line input. Even when default mode is for no editor. -x don't use the editor ever. Use the terminal driver for all editing and input. -n where n is any number between 0 and 9 defines the number of file buffers allocated at start up. COMMANDS Standard Dartmouth Basic Commands:- end This terminates the execution of a program and returns to command level. run { l } This will execute a program, if an optional line number is given then the program is run from that line. All variables are cleared and all files are closed. goto l This command will transfer control to the specified line number let x = EXP This command is used to introduce an assignment. If a command is not found on a line then a implied let is assumed. list the whole file list 1-2 lines 1 to 2 list -1 lines up to 1 list 1 line 1 list 1- line 1 onwards This command will list any number of lines of text onto the ter- minal. The start and last line can be specified as can to a spec- ified line and from a specified line. print or '?' print #f This command will print out all of it's parameters, they have to be separated by commas or semi-colons, if a comma is used then the print head is moved to the next tab position (16 places ). If a file descriptor is given then output is to the given file. rem or `' A comment statement, is ignored totally by the program during ex- ecution. stop Stops the execution of the program and returns to command level. Similar to 'end' but prints a message. A program can also be 'cont'inued after a stop. for x = EXP to EXP { step EXP } Will start execution of a for loop. It will take the two limits and an optional step argument. The loop is always executed once. next { x { , y } } End of the for loop, if the terminal conditions are met then exe- cution continues from the next statement otherwise return to end of the corresponding for statement. The next does not need a pa- rameter if this is the case the most recently activated loop is used. If there are more than one parameter then each one is only checked after the completion of the inner loop. gosub l Transfer command to a line number. Save return address so that the program can resume execution after the gosub command. return Return from a subroutine ( called by gosub ). It will return from the most recently activated subroutine call. read VAR { , VAR } Read data from the data statements contained in the program. An item can be a string or a variable. data OBJECT { , OBJECT } Statements that contain the data used in the read statements. Items are separated by commas. The data statement must be the only one on the line. restore { l } Restore the data pointer to the start of the file. So that the data can be read again. If an optional line number is given then the restore occurs from the start of that line. If no data state- ments are found then the restore is from the start of the pro- gram. if EXP then STATEMENT { else STATEMENT } The if statement if the condition is true then the commands after the 'then' are executed. If this is a line number then a goto is performed. If the condition is false then the statement after the else is dealt with in a similar manner, the else statement is an optinal facility. dim VAR(d,d,d) { , VAR(d) } Dimension a list of arrays ( string or arithmetic ) a maximum of three subscripts can be used. All arrays must be dimensioned be- fore use. exit , bye , quit Terminate the execution of the interpreter, closing all files. Extended Basic Commands delete l - l Delete a specified range of lines. If they are not found then no lines will be deleted. edit l Edit a given line. If the exit from the edit is via a cntrl-c then do not change the line. input { #f, } input "prompt"; Input from a terminal or from a file. If the input is from the terminal then a prompt message can also be added. clear EXP Clear all variables then allocate the amount of string space specified by the second parameter. save STRINGEXP Save the current program to a named file. old STRINGEXP Load a program from the named file. All variables are cleared. new { EXP } Wipe the program from core. All files are closed and the inter- preter is reset to its inital state. If a parameter is given then that is the number of file buffers that are allocated. shell Shell out to Unix. This is the Bourne shell. If the interpreter is made set userid then this is turned off in the shell. resume { l } Return from an error trap. If a parameter is given then the re- turn is made to that line. An error trap is set up by the "on er- ror goto" statement. random Randomise the random number generator. The generator always starts from the same place in its sequence, when a program is started. on EXP goto l { , l} on - gosub on error goto l This command will execute either a goto or a gosub to a specified line number. The linenumber is specified by the value of the statement and the linenumber is taken from the list of line num- bers that is given. If the error format is used, only one linenumber is required. This is the line where a jump is per- formed to if an error occurs. error EXP Execute the given error sequence. Useful for debugging of error trap routines. auto { l { ,l } } Perform auto line numbering so that a program can be typed in without having to bother about linenumbers. An optional start and increment can also be specified. cls Clear the terminals screen. base 0 | 1 Specify the starting index for arrays. This can have a value of either zero or one. poke EXP,EXP Poke a value into a location. Unreasonable addresses are ignored. ( Can cause bus-errors if not using split i and d space. (Not available on Vax systems). open STRINGEXP { for input|output|append|terminal } as EXP Open a file for input/ output. This command can be used to spec- ify whether the file is to be read or writen to. A file cannot be opened for writing if the file is already open. If the mode is terminal then it will believe that it is talking to a terminal. (No buffering. Open for reading and writing.) If the option is 'for output' it may be ommitted. close EXP Close a file. Releases the file descriptor and flushes out all stored data. merge STRINGEXP Merge two files together. If there is a line in the file with the same linenumber as in the program then that line is replaced by the new one. All other lines are inserted into the file. chain STRINGEXP Read in a program, then start to execute it. All simple vari- ables are kept but all arrays and strings are cleared. The size of the string space is kept the same. def fnNAME{ ( VAR {,VAR } ) } = EXP Define a user defineable function. linput Identical to input but ignores seperators. mid$(STRINGVAL, EXP { ,EXP} ) = STRINGEXP Assign STRINGEXP to STRINGVAL starting at EXP1 and finishing at EXP2. cont Continue execution of a program that has been halted by a stop statement or by control-c. while EXP Start of a while loop. The loop is repeated until EXP is false. If EXP is false at the start then do not execute the loop at all. A while loop must be terminated by a wend statement. wend Terminating statement of a while loop. Only one wend is allowed for each while. repeat Start statement for a repeat - until loop. This type of loop will always be executed at least once. until EXP The terminating statement of a repeat - until loop. The loop ter- minates when EXP is true. String functions Available mid$(a$,i,j) Returns the part of a$ between the i'th and j'th positions. If the second parameter is not specified then the string is taken between the start value and the end of the string. right$(a$,j) Returns the right j characters of a$. left$(a$,j) Returns the left j characters of a$. string$(a$,j) Returns a$ repeated j times. ermsg$(j) Returns the j'th error message. chr$(j) Returns the ascii character corresponding to the value of j. str$(j) Returns a string representation corresponding to j. This is simi- lar but not the same as what can printed out. space$(j) Returns a string of j spaces get$(f) Returns one character from file f. If f is zero use the terminal. Returns a zero lenght string on cntl-c date$ returns a string coresponding to the current date. ( Same string as printed out when logging on. ). Maths functions Available:- sgn(x) Returns the sign of a number. It's value is 1 if greater than zero , zero if equal to zero. -1 if negative. len(a$) Returns the length of string a$. abs(x) Returns the absolute value of x. int(x) than x. val(a$) Returns the value of the number specified by the string. asc(a$) Returns the ascii code for the first element of a$. instr(a$,b$,c) Returns the starting position that a$ is in b$, starting from the optional c'th position. eof(f) Returns true if the file specified by f has reached the end of the file. posn(f) Returns the current printing position in the file. If f is zero then it is the printing position of the terminal. sqrt(x) Returns the square root of X. log(x) Returns the natural logarithm of x. exp(x) Returns e^x. e=2.7182818.. eval(a$) Evaluates a$. e.g. eval("12") returns the value 12. rnd Returns a random number between 1 and 32767. rnd(x) If x is zero returns a random number between 0 and 1 otherwise returns a random number between 1 and int(x). peek(x) Returns the value of the byte at address x. If x is unreasonable then returns zero. ( Not available on a VAX ) sin(x) cos(x) atan(x) Trignometric functions. (May not yet be implemented). pi Returns the value of pi. = 3.141592653589... erl Returns the line number of the last error. Zero if error was in immeadiate mode. err Returns the error code of the last error. tim Returns a numeric value for the number of seconds since 1:1:1970 i.e. the value of the Unix clock. Mathematical Operators:- The following mathematical operators are accepted. ^ exponentiation * multiplication / division mod remainder + addition - subtraction bitwise operators:- for real values non-zero is true, and bitwise and or bitwise or xor bitwise exclusive or not bitwise not comparison operators:- <= less than or equal <> not equal to >= greater than or equal = equal > greater than < less than Assignment statements can also have the form a += b a -= b a *= b a /= b Which have similar meanings to C's interpretation EXPRESSION SYNTAX stringexp ::= string | string + stringexp string ::= qstring | stringvar | stringfunc qstrings ::= "any char" | `any char` N.B. strings with nothing after them on the line do not need the terminating quote stringvar ::= numbvar$ | numbvar$[ dim1 { ,dim2 {, dim3 } } ] stringfunc ::= chr$(val) | mid$(stringexp, val {,val} ) | date$ | right$(stringexp, val) | left$(stringexp, val) | ermsg$(val) | str$( val) | space$(val) | string$(stringexp, val) | get$( 0 | fval ) val ::= term | term sep val | not val | - val term ::= numb | valfunc | numbvr | stringexp csep stringexp numb ::= digit | digit digit+ | digit* . digit* | digit* e {+ | -} digit+ | digit* . digit* e {+ | -} digit+ digit ::= 0 1 2 3 4 5 6 7 8 9 numbvr ::= numbvar | subsc numbvar ::= lett | lett alpha+ subsc ::= numbvar( val {, val { ,val } } ) sep ::= + - * / ^ and or xor | csep csep ::= <> > < >= <= = valfunc ::= sgn(val) | len(stringexp) | abs(val) | val(stringexp) | asc(stringexp) | eof(fval) | posn( 0 | fval) | sqrt(val) | instr(stringexp, val { ,val} ) | log(val) | exp(val) | eval(stringexp) | int(val) | peek(val) | rnd | rnd(val) | usrfunc | pi | erl | err | tim usrfunc ::= fn/numbvar { (val { , val { , val } } ) } fval ::= val with value between 1-9 DIAGNOSTICS When the interpreter discovers an error it will call an error trapping routine. The errors can be caught by the user program using the on-er- ror feature. If no error trapping routine has been supplied a message is printed with the corresponding line number. BUGS None yet! AUTHOR Phil Cockcroft BASIC(1)
basic - `Basic' language interpreter | SYNOPSIS | DESCRIPTION | DIAGNOSTICS | BUGS | AUTHOR
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pbasic&sektion=1&manpath=FreeBSD+Ports+15.0>
