For Blassic v0.5.x by Julian Albo (ninsesabe@arrakis.es)
Documentation last updated by Andrew L. Ayers (andrewa at phoenixgarage.NOSPAM.org) on
January 27, 2003
Please note that Blassic is constantly being updated and revised, and that some of
the definitions for the keywords used in Blassic may not be completely valid. I
have tried my best to create useful documentation for Blassic, I can only hope
that the community for Blassic continues to update and improve this
documentation in the future.
PRINT ABS (-1)
PRINT ACOS (.01)
A = 5 AND 3: PRINT A
A$ = "A": PRINT ASC (A$)
PRINT ASIN (.01)
PRINT ATAN (.01)
AUTO 10, 5
.BV$ = BIN$ (24): PRINT "The binary value of 24 is ";BV$
CHAIN
.PROG$ = "program.bas": CHAIN PROG$
FILES
command usage (see FILES
) to "path$".CHDIR ".\temp\"
A = 65: PRINT CHR$ (A)
PRINT CINT (1.5)
MODE
), at the
coordinates indicated by "x" and "y", with a radius of "r" pixels, in the
current color (see COLOR
). If "c" is specified, then the circle is
drawn with the color indicated by "c" (see COLOR
for table of
values). If "sa" and "ea" (start and end angles) are specified, then an arc
(part of a circle) is drawn. The angles must indicate a range between 0 and
2π (see PI
). Zero angle is at the "3 o'clock" position on the
circle (ie, 1,0 on the unit circle), and proceeds counterclockwise around the
circle.CIRCLE (160, 100), 50, 4
CIRCLE (160, 100), 50, 4, PI/2, PI
DIM
and ERASE
).CLEAR
OPEN
).CLOSE #1
PAPER
color (see PAPER
).PAPER 1: CLS
Number | Description | Number | Description |
---|---|---|---|
0 | Black | 8 | Dk Grey |
1 | Dk Blue | 9 | Lt Blue |
2 | Dk Green | 10 | Lt Green |
3 | Dk Cyan | 11 | Lt Cyan |
4 | Red | 12 | Lt Red |
5 | Purple | 13 | lt Purple |
6 | Brown | 14 | Yellow |
7 | Lt Grey | 15 | White |
COLOR 5: REM Change to purple
CONT
.
Command. Continue with execution of the code after a CTRL-C
break.CONT
PRINT COS (.01)
PRINT CVD ("abcdefgh")
PRINT CVI ("ab")
PRINT CVL ("abcd")
PRINT CVS ("abcd")
READ
statement. Note that the variable type (numeric or string) defined in the
READ
statement must match with the constant type in the
DATA
statement (see READ
and RESTORE
).
DATA 1, "This is number one", 2, "This is number two"
A$ = DATE$: PRINT "Today's date is ";A$
FN END
(see FN END
).DEF FN concat$ (a$, b$) = a$ + b$: PRINT FN concat$ ("here", "there")
DEF FN addone (x) = x + 1: PRINT FN addone (5)
DEF INT A
DEF INT A-Z
DEF INT A-Z, a-z
DEF REAL L-N
DEF STR A-B, NAME
DELETE 10-50
DELIMITER #1, "-": INPUT #1, A$, B$, C$
CLEAR
. The array
may also be cleared by using ERASE
.DIM A$(20)
DIM A$(20), B$(5), CC(12)
MODE
). The
following table details the graphics command language:Command | Description |
---|---|
B | Causes the cursor to not DRAW on the next motion
command |
C n | Changes the current drawing color to value "n" (seeCOLOR for table of valid color values for "n") |
U n | Moves up "n" pixels from the current position |
D n | Moves down "n" pixels from the current position |
L n | Moves left "n" pixels from the current position |
R n | Moves right "n" pixels from the current position |
E n | Moves diagonally up and right "n" pixels from the current position |
F n | Moves diagonally down and right "n" pixels from the current position |
G n | Moves diagonally down and left "n" pixels from the current position |
H n | Moves diagonally up and left "n" pixels from the current position |
M x, y | Moves to the coordinate specified by "x" and "y". Motion is absolute unless "x" and/or "y" are prefixed with either "+" or "-", in which case the move will be relative to the current position. |
DRAW "BM100,100;R20;D20;L20;U20": REM DRAW A SQUARE
DRAW "BM100,100;E20;F20;L40": REM DRAW A TRIANGLE
DRAW "BM100,100;R20;M+10,-20;U20;L40"
COLOR
from a position specified by the MOVE
statement (see
COLOR
and MOVE
). DRAWR
draws a line
relative to the current position.COLOR 1: MOVE 50,50: DRAW 100,100
EDIT 25
END
V$ = "TEST=test env variable": ENVIRON V$: SHELL "env | more"
PATH$ = ENVIRON$ ("PATH"): PRINT "The path is "; PATH$
OPEN
).IF EOF (1) THEN CLOSE #1
DIM
and CLEAR
).DIM A(10), TT(5): ERASE A, TT
PRINT "Error occurred on line "; ERL
PRINT "Error code "; ERR
ERROR 1
EXIT 1
PRINT EXP (1): REM RETURN e, WHICH EQUALS ~2.7182818
OPEN
), where "channel" is the number of
the open input/output channel, "n1" is the number of characters allocated to the
field, and "var1$" is a string variable that will be used to access the field.
FIELD
does not actually insert or retrieve any data from the open
input/output channel. It only designates how the data will be inserted by the
PUT
statement, and retrieved by the GET
statement.FIELD #1, 25 AS NAME$, 8 AS DOB$, 3 AS AGE$
CHDIR
). If
optional file mask "str$" is used, the returned list will contain files in the
current directory that matches the mask. Please note that the wildcards allowed
are operating system dependent.FILES
FILES "*.TXT": REM Return all files ending in ".TXT"
PRINT FIX (1.5): REM Prints "1"
DEF FN
).
DEF FN addtwice (x)
x = x + 5
x = x + 10
addtwice = x
FN END
STEP
increment value "i". Values "n1",
"n2" and "i" may all be negative. STEP
is optional and is assumed
to be "1" if not specified (see NEXT
).FOR cc = 1 TO 5: PRINT cc: NEXT cc
FOR cc = 1 TO 10 STEP 2: PRINT cc: NEXT cc
FOR cc = 5 TO -5 STEP -1: PRINT cc: NEXT cc
GET
is used to retrieve a
character typed on the keyboard, and place it in variable "var$". The program
execution is suspended until a key is pressed on the keyboard, after which the
execution resumes with the next line of code. In the second case,
GET
is used to retrieve a specified record number "n" from the open
random access input/output channel "channel". If "n" is not defined, then the
next record is retrieved (see OPEN
).GET K$: PRINT "The key pressed was "; K$
GET #1
GOSUB
causes execution to
branch to the subroutine, execute the lines contained within that subroutine,
and then via a RETURN
statement, continue execution of code after
the GOSUB
(see RETURN
).GOSUB GetUserInput
GOSUB 1110
GOTO EndOfProgram
CLS
, PAPER
, and
PEN
statements in the graphics modes (see MODE
).COLOR ,0: GRAPHICS CLS
PRINT HEX$ (10);" is the hexdecimal value = 10."
IF-THEN-ELSE
construct is used to form logic
based interactive branching. "exp1" is either a logic or arithmetic expression
test, which if it evaluates to TRUE (-1), causes the execution of the
THEN
expression "exp2". Otherwise execution continues with the next line,
or if the ELSE
expression "exp3" is defined, then it is executed
instead. Expressions "exp2" and "exp3" may be other statements or functional
expressions.IF A$ = "K" THEN GOTO 40
IF N = 10 THEN V$ = HEX$(N) ELSE GOSUB NewItem
IF y >= 15 THEN Y = 15
K$ = INKEY$: IF K$ = "Q" THEN GOTO EndOfProgram
INPUT #1, NAM$, AGE, DOB$
PRINT " NAME : "; NAM$
PRINT " AGE : "; AGE
PRINT "DATE OF BIRTH : "; DOB$
INPUT
prompt
character "?", with the string defined by "prompt". The variables "var1",
"var2", etc are used to store the resulting keyboard input, which is terminated
by a carriage return. These variables may be of string or numeric type. The data
input by the user must match the types of the variables, otherwise an error will
occur. Should multiple variables need to be entered, the user must separate the
data entered by commas.INPUT K$
INPUT "Your name : "; NAM$
INPUT "Please enter your name and age (name, age) : "; NAM$, AGE
INPUT$
then returns those
characters as a string, and continues with the execution of the Blassic program.
INPUT$
does not display a prompt.K$ = INPUT$ (3): PRINT "Characters : "; K$
INSTR
returns "0". If "str2$" is
null, then INSTR
returns the "1".PRINT INSTR ("HELLO", "L")
L$ = "HELLO": P = INSTR (3, L$, "O"): PRINT "Position = "; P
AGE = INT (20.75): PRINT AGE
CHDIR
).KILL "..\test.txt"
GOTO
, a defined label name can be
substituted for the line number. LABEL
must be the first
instruction in the line, otherwise it is ignored.LABEL EndOfProgram
K$ = "HELLO": PRINT LEFT$ (K$, 3)
A$ = "HELLO": PRINT "The string "; A$; " contains "; LEN (A$); "
characters."
LET A$ = "TEST"
LET X = 10
LINE INPUT
retrieves a line of string data "str$" from the
input/output channel, in which the line of data can contain any character,
including commas (or other defined delimiters). If "channel" is omitted or
undefined, then LINE INPUT
pauses the program execution to get a
line of input data "str$" from the keyboard, which can contain any character,
including commas.LINE INPUT #1, L$
PRINT "Data : ";: LINE INPUT L$
LIST
LIST 20-
LIST -50
LIST 20-50
LOAD "test"
LOAD "test.bas", V$
LOAD "test.bas", 100, 1000
10 B = 5: PRINT B
20 GOSUB 50: PRINT B
30 END
40 REM START OF SUBROUTINE
50 LOCAL B
60 B = 200
70 PRINT B
80 RETURN
CLS: LOCATE 5, 10: PRINT "Here!"
LOG
returns "-inf" (infinity).PRINT "The log of 2 is "; LOG(2)
LOG10
returns "-inf" (infinity).PRINT "The log10 of 2 is "; LOG10(2)
A$ = "HELLO": PRINT LOWER$ (A$)
FIELD
statement, and
"var2$" is a string variable to be placed into that field. The data placed in
the field is left-justified according to the space in the field. If "var2$" is
larger than the field, then the data is truncated on the right. Please note that
this statement works on strings only. Numeric data needs to be converted into a
string using the functions MKD$, MKI$, MKL$,
or
MKS$
.B$ = "TEST": LSET F$ = B$
PRINT LTRIM$ (" HELLO "); "GOODBYE"
Mode | Description |
---|---|
0 | Copy |
1 | XOR |
2 | AND |
3 | OR |
4 | Invert |
MASK 1, 0
MAX
.PRINT "The maximum is "; MAX (10, 20, 30)
K$ = "HELLO": PRINT MID$ (K$, 3, 2)
MIN
.PRINT "The minimum is "; MIN (10, 20, 30)
V$ = MKD$ (12.5)
CHDIR
).MKDIR "temp"
V$ = MKI$ (12)
V$ = MKL$ (1234)
V$ = MKS$ (12.5)
A = 5 MOD 3: PRINT A
MODE
allows the user to create a
graphics mode window of arbitrary height ("h") and width ("w"). When using the
third notation, setting "d" to "1" causes the y coordinates to be reveresed (ie,
coordinates decrease going down). Omitting "d" or setting it to "0" returns it
to normal operation. Valid values for "n" include:Number | Description |
---|---|
0 | Text Mode |
1 | 320 x 200 |
2 | 640 x 200 |
5 | 320 x 200 |
10 | 640 x 480 |
11 | 800 x 600 |
MODE 1: REM Change to 320x200 mode
MODE 1024, 768
Mode | Description | Inverted Y Axis? |
---|---|---|
spectrum | 256 x 176 | Yes |
cpc2 | 640 x 400 | Yes |
MODE "cpc2"
DRAW
(see DRAW
). MOVER
moves the graphics cursor relative
to the current position.COLOR 1: MOVE 50,50: DRAW 100,100
NAME "TEST.BAS" AS "NEWTEST.BAS"
NEW
FOR
).FOR T = 1 TO 10: NEXT T
A = 5 NOT 3: PRINT A
OV$ = OCT$ (24): PRINT "The octal value of 24 is ";OV$
ON BREAK
takes three forms, each form defining a
different method of handling what happens if the user of the Blassic program
presses CTRL-C
. The first form cancels the effect of CTRL-C
stopping the program. The second form causes the program to jump to
the subroutine specified "label" (which may be a label name or line number -
see GOSUB
and LABEL
). The third form disables the
effects of any prior ON BREAK CONT
and ON BREAK GOSUB
usage, and allows the normal action of CTRL-C
to interrupt the
running program.ON BREAK CONT
ON BREAK GOSUB BRK_HANDLER
ON BREAK STOP
ON ERROR GOTO
causes the running Blassic program to
jump to the specified "label" (which may be a label name or line number - see
GOTO
and LABEL
) Also see RESUME
,
ERR
, and ERL
.ON ERROR GOTO ERR_HANDLER
GOTO
, GOSUB
,
and LABEL
), depending on the numeric value "n". For example, if "n"
equals "2", then the second label would be jumped to.T = 3: ON T GOTO 100, 200, 300
FOR T = 1 TO 3: ON T GOSUB 100, 200, 300: NEXT T
INPUT
, OUTPUT
,
APPEND
, or RANDOM
, and is assigned an available
input/output channel "channel", for subsequent file operations.OPEN "test.txt" FOR INPUT AS #1
A = 5 OR 3: PRINT A
PRINT "The OS Family is "; OSFAMILY$
PRINT "The OS Name is "; OSNAME$
Number | Description | Number | Description |
---|---|---|---|
0 | Black | 8 | Dk Grey * |
1 | Dk Blue | 9 | Lt Blue * |
2 | Dk Green | 10 | Lt Green * |
3 | Dk Cyan | 11 | Lt Cyan * |
4 | Red | 12 | Lt Red * |
5 | Purple | 13 | lt Purple * |
6 | Brown | 14 | Yellow * |
7 | Lt Grey | 15 | White * |
MODE
).PAPER 5: REM Change to purple
PAUSE
.PAUSE 1000: REM WAIT ONE SECOND
PEEK
returns a single-byte value of data located at
the address number "n" (see SYSVARPTR
). The variants of this
command, PEEK16
and PEEK32
, return 2-byte (integer)
and 4-byte (long integer) values respectively.V = PEEK (SYSVARPTR)
PEN
allows the program to
change the current forground color of printed text to color number "n".Number | Description | Number | Description |
---|---|---|---|
0 | Black | 8 | Dk Grey |
1 | Dk Blue | 9 | Lt Blue |
2 | Dk Green | 10 | Lt Green |
3 | Dk Cyan | 11 | Lt Cyan |
4 | Red | 12 | Lt Red |
5 | Purple | 13 | lt Purple |
6 | Brown | 14 | Yellow |
7 | Lt Grey | 15 | White |
PEN
performs much the same as the COLOR
statement. PEN
does, however, have more advanced modes, which allow
for a much greater control of the way text output is displayed in the graphics
modes (the advanced modes of PEN
only work in the graphic modes,
and will cause an error in the text mode). These modes work in the following
manner:PEN n1, n2 [, n3]
PEN
operates in "normal" mode, in which the background is
considered "opaque", and any character printed at the location replaces the
character currently at that location (see LOCATE
). When "n2" is
set to "1", PEN
operates in "transparent" mode, in which the
background is considered transparent, and any character printed at the location
will "blend" together (which can allow for multiple effects - play with it!).
Mode | Description |
---|---|
0 | Copy |
1 | XOR |
2 | AND |
3 | OR |
4 | Invert |
MODE
). Using the XOR
mode with PEN 15
(ie, PEN 15,,1
), as used in the sample program "graph.bas", is the
most useful form, for the moment.PEN 1
PEN 1, 1
PEN 15, 1, 1
PRINT "The value of PI is "; PI
PLEASE
statement. When a key is pressed, then
execution continues with the next line (ok, I know that explanation is pretty
contrived, but what the heck other use can you think for it?)...PLEASE
PEN
color at the
absolute position "x, y". The variant PLOTR
plots the pixel
relative to the current position.COLOR 2: PLOT 50, 50
POKE
places the single-byte value "n" (0-255) into
the address location "address". The variants of this command,
POKE16
and POKE32
, places return 2-byte (integer) and
4-byte (long integer) values at the address location "address" respectively. See
SYSVARPTR
.POKE X, 15
GOSUB
to be deleted from the top of the return-address stack, to
modify program branch. While useful in some extreme cases, this practice is
considered poor programming and should be avoided when possible (see
GOSUB
and RETURN
).POP
INPUT
, OUTPUT
,
APPEND
, or RANDOM
.POPEN "grep ""test"" > test.txt" FOR OUTPUT AS #1
OUTPUT
or APPEND
- see OPEN
), then the
variable "var" is written to the file.PRINT "Hello there..."
INPUT NM$: PRINT "Hello, "; NM$
PRINT #1, A$
LOCATE
).PRINT AT 10, 5, "Hello there..."
OUTPUT
or
APPEND
- see OPEN
), then the variable "var" is written
to the file after being formatted.PRINT USING "This is number ## of ##..."; x; y
PRINT USING #1, "Code ##"; CD
PROGRAMARG$
returns the command line parameter value
at position number "n", excluding the Blassic command and the program name. If
there are insufficient parameters, an empty ("") string is returned. Parameters
are passed to a Blassic program when the program is run with the Blassic
command, as follows:> blassic program.bas arg1 arg2 [etc]
PRINT "The first argument is "; PROGRAMARG$(0)
PROGRAMARG$ test, 5
V = PROGRAMPTR
OPEN
).PUT #1, 5
RANDOMIZE TIME
DATA
statement (see DATA
). If input/output channel
"channel" is defined, then READ
reads a data element from the open
input/output channel "channel" (see OPEN
).DATA JOHN DOE, 23: READ NAM$, AGE
READ #1, NAM$, AGE: REM READ THE NAME AND AGE
REM This is a comment...
RENUM
, then the default is "10, 10, 10".RENUM 10, 100, 5
REPEAT-UNTIL
loop structure (see
UNTIL
).REPEAT
K$ = INKEY$
UNTIL K$ = "Q"
DATA
read pointer (see
DATA
and READ
) to the point represented by the label
"label", where "label" is a line number or label name (see LABEL
).
If "label" is not defined, then the read pointer is moved to the beginning of
the first DATA
statement.RESTORE 100
ON ERROR GOTO
routine, returns to the statement that
produced the error, to the next statement, or to the position specified by the
label "label", which can be a line number or label name.RESUME NEXT
GOSUB
).RETURN
K$ = "HELLO": PRINT RIGHT$ (K$, 3)
CHDIR
and MKDIR
).RMDIR "temp"
PRINT "Random roll from 1 to 6 : "; INT (RND * 6) + 1
FIELD
statement, and
"str$" is a string variable to be placed into that field. The data placed in the
field is right-justified according to the space in the field. If "str$" is
larger than the field, then the date is truncated on the left. Please note that
this statement works on strings only. Numeric data needs to be converted into a
string using MKD$, MKI$, MKL$,
or MKS$
.B$ = "TEST": RSET F$ = B$
PRINT RTRIM$ (" HELLO "); "GOODBYE"
RUN
SAVE "test.blc"
SAVE "test.bas", A
SAVE "test.txt", B, NM$
SAVE "test.txt", B, 100, 1000
S = SGN (-50): IF S = -1 THEN PRINT "Negative"
SHELL "ls -als"
(for *nix)SHELL "dir *.txt"
PRINT SIN (.01)
SOCKET "192.28.45.100", 8080 AS #1
PRINT
statement (see PRINT
).PRINT SPC (10); "Indented 10 spaces..."
SP$ = SPACE$ (10): PRINT SP$; "Indented 10 spaces..."
PRINT "The square root of four is : "; SQR (4)
STOP
N = 50: PRINT STR$ (N)
PRINT STRING (10, "X")
A = 1: B = 2: SWAP A, B: PRINT A, B
SYMBOL
to redefine the character
number "n". The bits that make up each byte determine how the symbol will appear
when printed.SYMBOL 250, 128, 192, 224, 240, 248, 252, 254, 255: REM Redefine symbol
250 to be a triangle shape
SYNCHRONIZE
allows the program to determine when to write to the bitmap, and when to update
the graphics window as needed by the program, rather than by the system. When a
"1" is passed to SYNCHRONIZE
, any graphics commands only update the
bitmap, and not the actual window. Then, when the SYNCHRONIZE
statement is used without a parameter, the bitmap is copied into the window,
making the changes visible. This process can be repeated as necessary, allowing
for fluid motion with little flicker. Passing a "0" to SYNCHRONIZE
will return the behavior to normal, copying changes to both the window and the
off-screen bitmap buffer.
x = 160: y=100: dx = 5
Mode 1
While Inkey$ = ""
x = x + dx
If x < 0 or x > 320 Then dx = -dx
Synchronize 1
Move x-20, y-20
Pen 4: Draw x+20, y-20: Draw x+20, y+20: Draw x-20, y+20: Draw x-20, y-20
Pause 1
Synchronize
Pen 15: Draw x+20, y-20: Draw x+20, y+20: Draw x-20, y+20: Draw x-20, y-20
Wend
Synchronize: Mode 0
SYSTEM
AD = SYSVARPTR
PRINT
statement (see PRINT
).PRINT TAB (10); "Tabbed over 10 spaces..."
PRINT TAN (.01)
T = TIME: PRINT "TIME = "; T
T$ = TIME$: PRINT "The current time is "; T$
PRINT TRIM$ (" HELLO "); "GOODBYE"
TRON
).TROFF
TROFF
).TRON
REPEAT-UNTIL
loop structure, where
"exp" is the code to evaluate, which if it evaluates to TRUE (-1), the loop
exits and continues with the next statement after the UNTIL
(see
REPEAT
).REPEAT
K$ = INKEY$
UNTIL K$ = "Q"
A$ = "hello": PRINT UPPER$ (A$)
N = USR ("./testdl.so", "testfunc", VARPTR ("test"))
VAL
returns "0".PRINT VAL ("10")
AP = VARPTR("This is a test")
WHILE-WEND
looping structure (see
WHILE
).WHILE INKEY$ <> "Q"
PRINT "PRESS Q TO QUIT..."
WEND
WHILE-WEND
looping structure (see
WEND
), where "exp" is the code to evaluate which will continue the
execution of the loop so long as the evaluation is TRUE (-1).WHILE INKEY$ <> "Q"
PRINT "PRESS Q TO QUIT..."
WEND
OPEN
).WRITE #1, NAM$, AGE: REM WRITE THE NAME AND AGE
X = XMOUSE
X = XPOS
A = 5 XOR 3: PRINT A
Y = YMOUSE
Y = YPOS
Name | Position | Length | Writable | Description |
---|---|---|---|---|
GraphicsWidth | 0 | 2 | No | Width of the window in graphics mode. |
GraphicsHeight | 2 | 2 | No | Height of the window in graphics mode. |
NumArgs | 4 | 2 | No | Numbers of args passed to the program from the command line (program name excluded). |
VersionMajor | 6 | 2 | No | First chunk of version number. |
VersionMinor | 8 | 2 | No | Second chunk of version number. |
VersionRelease | 10 | 2 | No | Last chunk of version number. |
AutoInit | 12 | 4 | Yes | Starting number of line used by AUTO by default and when loading text programs without line numbers. |
AutoInc | 16 | 4 | Yes | Increment of line number used by AUTO by default and when loading text programs without line numbers. |
CharGen | 20 | 4 | No | Location in memory of the character generator used in graphics mode. |
ShellResult | 24 | 1 | No | Return value of the last command invoked by the SHELL instruction. |
TypeOfVal | 25 | 1 | Yes | Type of VAL function: 0 for only numbers, 1 for expressions evaluation. |
TypeOfNextCheck | 26 | 1 | Yes | Type of NEXT check: 0, all FOR has to be nested; 1, check relaxed. |
TypeOfDimCheck | 27 | 1 | Yes | Type of DIM check: 0, DIM an array already dimensioned is an error; 1, is accepted. |
ERR
function (the line number the error occurred in may also be
retrieved using the ERL
function). The following are descriptions
for these error codes:Error Number | Error Description |
---|---|
0 | No Error |
1 | Syntax |
2 | Type Mismatch |
3 | Gosub Without Return |
4 | Return Without Gosub |
5 | Next Without For |
6 | Not Implemented |
7 | Divide By Zero |
8 | Data Exhausted |
9 | Invalid Command |
10 | Polite |
11 | Bad Subscript |
12 | Out Of Memory |
13 | Already Dimensioned |
14 | No Continue |
15 | File Number |
16 | File Mode |
17 | File Already Open |
18 | File Read |
19 | File Write |
20 | Until Without Repeat |
21 | Wend Without While |
22 | While Without Wend |
23 | Blassic Internal Error |
24 | No Dynamic Library |
25 | No Dynamic Symbol |
26 | Cannot Resume |
27 | No Label |
28 | Misplaced Local |
29 | Field Overflow |
30 | File Not Found |
31 | Line Exhausted |
32 | Function Not Defined |
33 | Incomplete Def |
34 | Invalid Direct |
35 | Bad Record |
36 | Function Call |
37 | Socket |
38 | Rename File |
39 | Operating System |
40 | Input Past EOF |