|
Microsoft BASIC Reference
Contents
Introduction to the Microsoft BASIC Interpreter
This HELP File is derived from the "Microsoft BASIC Reference Manual", and covers the
basics of the language. For more detail and instruction, refer to the manual itself.
The Microsoft BASIC Interpreter is booted as follows: On the Altair's front panel, set the leftmost
8 switches all up, and the others all down. Left EXAMINE, then put all the switches down.
Be sure the BASIC disk is in drive 0, and the drive is ready. Then, depress the RUN switch.
BASIC should boot up and ask:
MEMORY SIZE?
To which you should normally respond with the enter key. If you want, you can enter the actual
top of memory (in decimal) if for some reason you want BASIC to only see part of your memory.
To the next questions, the following are safe answers. Refer to the manual for details:
LINEPRINTER? C
HIGHEST DISK DRIVE NUMBER? 0
NUMBER OF FILES? 5
NUMBER OF RANDOM FILES? 3
Altair BASIC will print its OK prompt, letting you know it's ready for your commands.
Special Characters
| ^C | | Interrupts program execution and returns to MBASIC |
| ^G | | Rings bell at terminal |
| DEL | | Deletes last char typed |
| ^I | | Tab (every 8) |
| ^O | | Halts/resumes program output |
| ^R | | Retypes the line currently being typed |
| ^S | | Suspends program execution |
| ^Q | | Resumes execution after ^S |
| ^U,^X | | Deletes line being typed |
| CR | | Ends every line being typed in |
| LF | | Breaks a logical line into physical lines |
| ESC | | Escapes Edit Mode Subcommands |
| . | | Current line for EDIT, RENUM, DELETE, LIST, LLIST commands |
| &O,& | | Prefix for Octal Constant |
| &H | | Prefix for Hex Constant |
| : | | Separates statements typed on the same line |
| ? | | Equivalent to PRINT statement |
Variable Type Declaration Characters
| $ | | String | | 0 to 255 chars |
| % | | Integer | | -32768 to 32767 |
| ! | | Single Precision | | 7.1 digit floating point |
| # | | Double Precision | | 17.8 digit floating point |
Commands
| Command | | Syntax | | Function |
| AUTO | | AUTO [line][,inc] | | Generate line numbers |
| CLEAR | | CLEAR [,[exp1][,exp2]] | | Clear program variables; exp1 sets end of memory and exp2 sets amount of stack space |
| CONT | | CONT | | Continue program execution |
| DELETE | | DELETE [[start][-[end]]] | | Delete program lines |
| EDIT | | EDIT line | | Edit a program line |
| FILES | | FILES [filename] | | Directory |
| LIST | | LIST [line[-[line]]] | | List program line(s) |
| LLIST | | LLIST [line[-[line]]] | | List program line(s) on printer |
| LOAD | | LOAD filename[,R] | | Load program; ,R means RUN |
| MERGE | | MERGE filename | | Merge prog on disk with that in mem |
| NAME | | NAME old AS new | | Change the name of a disk file |
| NEW | | NEW | | Delete current prog and vars |
| NULL | | NULL exp | | Set num of NULLs after each line |
| RENUM | | RENUM [[new][,[old][,inc]]] | | Renumber program lines |
| RUN | | RUN [line number] | | Run a prog (from a particular line) |
| RUN | | filename[,R] | | Run a prog on disk |
| SAVE | | SAVE filename[,A] | | Save prog onto disk; ,A saves prog in ASCII |
| TROFF | | TROFF | | Turn trace off |
| TRON | | TRON | | Turn trace on |
| WIDTH | | WIDTH [LPRINT] exp | | Set term or printer carriage width; default is 80 (term) and 132 (prin) |
Edit Mode Subcommands
| A | | Abort -- restore original line and restart Edit |
| nCc | | Change n characters |
| nD | | Delete n characters |
| E | | End edit and save changes; don't type rest of line |
| Hstr[ESC] | | Delete rest of line and insert string |
| Istr[ESC] | | Insert string at current pos |
| nKc | | Kill all chars up to the nth occurrance of c |
| L | | Print the rest of the line and go to the start of the line |
| Q | | Quit edit and restore original line |
| nSc | | Search for nth occurrance of c |
| Xstr[ESC] | | Goto the end of the line and insert string |
| [DEL] | | Backspace over chars; in insert mode, delete chars |
| [CR] | | End edit and save changes |
Program Statements (except I/O)
| Statement | | Syntax | | Function |
| CALL | | CALL variable [(arg list)] | | Call assembly or FORTRAN routine |
| DEF | | DEF FNx[(arg list)]=exp | | Arith or String Function |
| | DEF USRn=address | | Define adr for nth assembly routine |
| | DEFINT range(s) of letters | | Define default var type INTeger |
| | DEFSNG --"-- | | --"-- Single |
| | DEFDBL --"-- | | --"-- Double |
| | DEFSTR --"-- | | --"-- String |
| DIM | | DIM list of subscripted vars | | Allocate arrays |
| END | | END | | Stop prog and close files |
| ERASE | | ERASE var [,var ... ] | | Release space and var names |
| ERROR | | ERROR code | | Generate error code/message |
| FOR | | FOR var=exp TO exp [STEP exp] | | FOR loop |
| GOSUB | | GOSUB line number | | Call BASIC subroutine |
| GOTO | | GOTO line number | | Branch to specified line |
| IF/GOTO | | IF exp GOTO line [ELSE stmt ... ] IF exp <> 0 then GOTO | | |
| IF/THEN | | IF exp THEN stmt[:stmt] [ELSE stmt ... ] IF exp <> 0 then ... else ... | | |
| LET | | [LET] var=exp | | Assignment |
| MID$ | | MID$(string,n[,m])=string2 | | Replace a portion of string with string2; start at pos n for m chars |
| NEXT | | NEXT var[,var ... ] | | Ends FOR loop |
| ON ERROR | | ON ERROR GOTO line | | Error trap subroutine |
| GOTO | | GOTO line | | Jump to program line |
| ON/GOSUB | | ON exp GOSUB line[,line] | | Computed GOSUB |
| ON/GOTO | | ON exp GOTO line[,line] | | Computed GOTO |
| OUT | | OUT port,byte | | Output byte to port |
| POKE | | POKE address,byte | | Memory put |
| RESTORE | | RESTORE [line] | | Reset DATA pointer |
| RESUME | | RESUME or RESUME 0 | | Return from ON ERROR GOTO |
| | RESUME NEXT | | Return to stmt after error line |
| | RESUME line | | Return to specified line |
| RETURN | | RETURN | | Return from subroutine |
| STOP | | STOP | | Stop prog and print BREAK msg |
| WAIT | | WAIT prot,mask[,select] | | Pause until input port [XOR select] AND mask <> 0 |
PRINT USING Format Field Specifiers
| Specifier | Digits | Chars | | Definition |
| # | 1 | 1 | | Numeric field |
| . | 0 | 1 | | Decimal point |
| + | 0 | 1 | | Print leading or trailing sign |
| - | 0 | 1 | | Trailing sign (- if neg, SP otherwise) |
| ** | 2 | 2 | | Leading asterisk |
| $$ | 1 | 2 | | Floating dollar sign; placed in front of leading digit |
| **$ | 2 | 3 | | Asterisk fill and floating dollar sign |
| , | 1 | 1 | | Use comma every three digits |
| ^^^^ | 0 | 4 | | Exponential format |
| _ | 0 | 1 | | Next character is literal |
String Specifiers
| Specifier | | Definition |
| ! | | Single character |
| /SPACES/ | | Character field; width=2+number of spaces |
| & | | Variable length field |
Input/Output Statements
| Statement | | Syntax | | Function |
| CLOSE | | CLOSE [[#]f[,[#]f ... ]] | | Close disk files; if no arg, close all |
| DATA | | DATA constant list | | List data for READ statement |
| FIELD | | FIELD [#]f,n AS string var [,n AS string var ...] | | Define fields in random file buffer |
| GET | | GET [#]f[,record number] | | Read a record from a random disk file |
| INPUT | | INPUT [;] [prompt string;] var [,var ...] INPUT [;] [prompt string,] var [,var ...] | | Read data from the terminal; leading semicolon suppresses echo of CR/LF and semicolon after prompt string causes question mark after prompt while comma after prompt suppresses question mark |
| KILL | | KILL filename | | Delete a disk file |
| LINE INPUT | | LINE INPUT [;] [prompt string;] string var | | Read an entire line from terminal; leading semicolon suppresses echo of CR/LF |
| | LINE INPUT #f,string var | | Read an entire line from a disk file |
| LSET | | LSET field var=string exp | | Store data in random file buffer left-justified or left-justify a non-disk string in a given field |
| OPEN | | OPEN mode,[#] f,filename | | Open a disk file; mode must be one of: I = sequential input file O = sequential output file R = random input/output file |
| PRINT | | PRINT [USING format string;] exp [,exp ...] | | Print data at the terminal using the format specified |
| | PRINT #f, [USING format string;] exp [,exp ...] | | Write data to a disk file |
| | LPRINT [USING format string;] var [,var ...] | | Write data to a line printer |
| PUT | | PUT [#] f [,record number] | | Write data from a random buffer to a data file |
| READ | | READ var [,var ...] | | Read data from a DATA statement into the specified vars |
| RSET | | RSET field var = string exp | | Store data in a random file buffer right justified or right justify a non-disk string in a given field |
| WRITE | | WRITE [list of exps] | | Output data to the terminal |
| | WRITE #f, list of exps | | Output data to a sequential file or a random field buffer |
Operators
| Symbol | | Function |
| = | | Assignment or equality test |
| - | | Negation or subtraction |
| + | | Addition or string concatenation |
| * | | Multiplication |
| / | | Division (floating point result) |
| ^ | | Exponentiation |
| \ | | Integer division (integer result) |
| MOD | | Integer modulus (integer result) |
| NOT | | One's complement (integer) |
| AND | | Bitwise AND (integer) |
| OR | | Bitwise OR (integer) |
| XOR | | Bitwise exclusive OR (integer) |
| EQV | | Bitwise equivalence (integer) |
| IMP | | Bitwise implication (integer) |
| =,>,<, | | Relational tests (TRUE=1, FALSE=0) |
| <=,=<, | | |
| >=,=>, | | |
| <> | | |
The precedence of operators is:
- Expressions in parentheses
- Exponentiation
- Negation (Unary -)
- *, /
- \
- MOD
- +, -
- Relational Operators
- NOT
- AND
- OR
- XOR
- IMP
- EQV
|
Arithmetic Functions
| Function | | Action |
| ABS(exp) | | Absolute value of expression |
| ATN(exp) | | Arctangent of expression (in radians) |
| CDBL(exp) | | Convert the expression to a double precision number |
| CINT(exp) | | Convert the expression to an integer |
| COS(exp) | | Cosine of the expression (in radians) |
| CSNG(exp) | | Convert the expression to a single precision number |
| EXP(exp) | | Raises the constant E to the power of the expression |
| FIX(exp) | | Returns truncated integer of expression |
| FRE(exp) | | Gives memory free space not used by MBASIC |
| INT(exp) | | Evaluates the expression for the largest integer |
| LOG(exp) | | Gives the natural log of the expression |
| RND[(exp)] | | Generates a random number exp <0 seeds new sequence exp =0 returns previous number exp >0 or omitted returns new random number |
| SGN(exp) | | 1 if exp >0 0 if exp =0 -1 if exp <0 |
| SIN(exp) | | Sine of the expression (in radians) |
| SQR(exp) | | Square root of expression |
| TAN(exp) | | Tangent of the expression (in radians) |
String Functions
| Function | | Action |
| ASC(str) | | Returns ASCII value of first char in string |
| CHR$(exp) | | Returns a 1-char string whose char has ASCII code of exp |
| FRE(str) | | Returns remaining memory free space |
| HEX$(exp) | | Converts a number to a hexadecimal string |
| INPUT$(length [,[#]f]) | | Returns a string of length chars read from console or from a disk file; characters are not echoed |
| INSTR([exp,]str1,str2) | | Returns the first position of the first occurrence of str2 in str1 starting at position exp |
| LEFT$(str,len) | | Returns leftmost length chars of the string expression |
| LEN(str) | | Returns the length of a string |
| MID$(string,start[,length]) | | Returns chars from the middle of the string starting at the position specified to the end of the string or for length characters |
| OCT$(exp) | | Converts an expression to an Octal string |
| RIGHT$(str,len) | | Returns rightmost length chars of the string expression |
| SPACE$(exp) | | Returns a string of exp spaces |
| STR$(exp) | | Converts a numeric expression to a string |
| STRING$(length,str) | | Returns a string length long containing the first char of the str |
| STRING$(length,exp) | | Converts a numeric expression to a string |
| VAL(str) | | Converts the string representation of a number to its numeric value |
I/O and Special Functions
| Function | | Action |
| CVI(str) | | Converts a 2-char string to an integer |
| CVS(str) | | Converts a 4-char string to a single precision number |
| CVD(str) | | Converts an 8-char string to a double precision number |
| EOF(f) | | Returns TRUE (-1) if file is positioned at its end |
| ERL | | Error Line Number |
| ERR | | Error Code Number |
| INP(port) | | Inputs a byte from an input port |
| LOC(f) | | Returns next record number to read or write (random file) or number of sectors read or written (sequential file) |
| LPOS(n) | | Returns carriage position of line printer (n is dummy) |
| MKI$(value) | | Converts an integer to a 2-char string |
| MKS$(value) | | Converts a single precision values to a 4-char string |
| MKD$(value) | | Converts a double precision value to an 8-char string |
| PEEK(exp) | | Reads a byte from memory location specified by exp |
| POS(n) | | Returns carriage position of terminal (n is dummy) |
| SPC(exp) | | Used in PRINT statements to print spaces |
| TAB(exp) | | Used in PRINT statements to tab to specified position |
| USR[n](arg) | | Calls the user's machine language subroutine with the arg |
| VARPTR(var) | | Returns address of var in memory or zero if var has not been assigned a value |
| VARPTR(#f) | | Returns the address of the disk I/O buffer assigned to file number |
Reserved Keywords by Version
RESERVED WORDS (all versions)
CLEAR, DATA, DIM, END, FOR, GOSUB, GOTO, IF, INPUT, LET, LIST, NEW, NEXT,
PRINT, READ, REM, RETURN, RUN, STOP, TO, TAB, THEN, USR
RESERVED WORDS (8K, Extended, and Disk versions)
(all the above words plus) AND, CONT, DEF, FN, NOT, NULL, ON, OR, OUT, POKE, SPC, WAIT
RESERVED WORDS (Extended and Disk versions)
(all the above words plus) AUTO, CONSOLE, DEFDBL, DEFINT, DEFSNG, DEFSTR, DELETE,
EDIT, ELSE, ERASE, ERL, ERR, IMP, INSTR, LINK, KL, LPRINT, MOD, RENUM,
RESUUME, SPACE$, STRING$, SWAP, TROFF, TRON, VARPTR, WIDTH, XOR
RESERVED WORDS (Disk BASIC)
(all the above words plus) CLOSE, DSKI$, DSKO$, FIELD, FILES, GET, KILL, LOAD,
LSET, MERGE, MOUNT, NAME, OPEN, PUT, RSET, UNLOAD.
Interpreter Error Codes
| Code | | Error |
| 1 | | NEXT without FOR |
| 2 | | Syntax error |
| 3 | | RETURN without GOSUB |
| 4 | | Out of data |
| 5 | | Illegal function call |
| 6 | | Overflow |
| 7 | | Out of memory |
| 8 | | Undefined line |
| 9 | | Subscript out of range |
| 10 | | Redimensioned array |
| 11 | | Division by zero |
| 12 | | Illegal direct |
| 13 | | Type mismatch |
| 14 | | Out of string space |
| 15 | | String too long |
| 16 | | String formula too complex |
| 18 | | Undefined user function |
| 19 | | No RESUME |
| 20 | | RESUME without error |
| 21 | | Unprintable error |
| 22 | | Missing operand |
| 23 | | Line buffer overflow |
| 26 | | FOR without NEXT |
| 29 | | WHILE without WEND |
| 30 | | WEND without WHILE |
Disk Errors |
| 50 | | Field overflow |
| 51 | | Internal error |
| 52 | | Bad file number |
| 53 | | File not found |
| 54 | | Bad file mode |
| 55 | | File already open |
| 57 | | Disk I/O error |
| 58 | | File already exists |
| 61 | | Disk full |
| 62 | | Input past end |
| 63 | | Bad record number |
| 64 | | Bad file name |
| 66 | | Direct statement in file |
| 67 | | Too many files |
| |