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 AA$ = "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, 4CIRCLE (160, 100), 50, 4, PI/2, PI
DIM and ERASE).CLEAROPEN).CLOSE #1PAPER
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 purpleCONT.
Command. Continue with execution of the code after a CTRL-C
break.CONTPRINT 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 ADEF INT A-ZDEF INT A-Z, a-zDEF REAL L-NDEF STR A-B, NAMEDELETE 10-50DELIMITER #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 SQUAREDRAW "BM100,100;E20;F20;L40": REM DRAW A TRIANGLEDRAW "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,100EDIT 25ENDV$ = "TEST=test env variable": ENVIRON V$: SHELL "env | more"PATH$ = ENVIRON$ ("PATH"): PRINT "The path is "; PATH$OPEN).IF EOF (1) THEN CLOSE #1DIM and CLEAR).DIM A(10), TT(5): ERASE A, TTPRINT "Error occurred on line "; ERLPRINT "Error code "; ERRERROR 1EXIT 1PRINT EXP (1): REM RETURN e, WHICH EQUALS ~2.7182818OPEN), 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.FILESFILES "*.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 ccFOR cc = 1 TO 10 STEP 2: PRINT cc: NEXT ccFOR cc = 5 TO -5 STEP -1: PRINT cc: NEXT ccGET 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 #1GOSUB 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 GetUserInputGOSUB 1110GOTO EndOfProgramCLS, PAPER, and
PEN statements in the graphics modes (see MODE).COLOR ,0: GRAPHICS CLSPRINT 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 40IF N = 10 THEN V$ = HEX$(N) ELSE GOSUB NewItemIF y >= 15 THEN Y = 15K$ = INKEY$: IF K$ = "Q" THEN GOTO EndOfProgramINPUT #1, NAM$, AGE, DOB$PRINT " NAME : "; NAM$PRINT " AGE : "; AGEPRINT "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 = "; PAGE = INT (20.75): PRINT AGECHDIR).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 EndOfProgramK$ = "HELLO": PRINT LEFT$ (K$, 3)A$ = "HELLO": PRINT "The string "; A$; " contains "; LEN (A$); "
characters."
LET A$ = "TEST"LET X = 10LINE 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$LISTLIST 20-LIST -50LIST 20-50LOAD "test"LOAD "test.bas", V$LOAD "test.bas", 100, 100010 B = 5: PRINT B20 GOSUB 50: PRINT B30 END40 REM START OF SUBROUTINE50 LOCAL B60 B = 20070 PRINT B80 RETURNCLS: 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, 0MAX.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 AMODE 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 modeMODE 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,100NAME "TEST.BAS" AS "NEWTEST.BAS"NEWFOR).FOR T = 1 TO 10: NEXT TA = 5 NOT 3: PRINT AOV$ = 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 CONTON BREAK GOSUB BRK_HANDLERON BREAK STOPON 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_HANDLERGOTO, 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, 300FOR T = 1 TO 3: ON T GOSUB 100, 200, 300: NEXT TINPUT, OUTPUT,
APPEND, or RANDOM, and is assigned an available
input/output channel "channel", for subsequent file operations.OPEN "test.txt" FOR INPUT AS #1A = 5 OR 3: PRINT APRINT "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 purplePAUSE.PAUSE 1000: REM WAIT ONE SECONDPEEK 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 1PEN 1, 1PEN 15, 1, 1PRINT "The value of PI is "; PIPLEASE 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?)...PLEASEPEN color at the
absolute position "x, y". The variant PLOTR plots the pixel
relative to the current position.COLOR 2: PLOT 50, 50POKE 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, 15GOSUB 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).POPINPUT, OUTPUT,
APPEND, or RANDOM.POPEN "grep ""test"" > test.txt" FOR OUTPUT AS #1OUTPUT 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; yPRINT USING #1, "Code ##"; CDPROGRAMARG$ 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, 5V = PROGRAMPTROPEN).PUT #1, 5RANDOMIZE TIMEDATA 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$, AGEREAD #1, NAM$, AGE: REM READ THE NAME AND AGEREM This is a comment...RENUM, then the default is "10, 10, 10".RENUM 10, 100, 5REPEAT-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 100ON 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 NEXTGOSUB).RETURNK$ = "HELLO": PRINT RIGHT$ (K$, 3)CHDIR and MKDIR).RMDIR "temp"PRINT "Random roll from 1 to 6 : "; INT (RND * 6) + 1FIELD 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"RUNSAVE "test.blc"SAVE "test.bas", ASAVE "test.txt", B, NM$SAVE "test.txt", B, 100, 1000S = 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 #1PRINT
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)STOPN = 50: PRINT STR$ (N)PRINT STRING (10, "X")A = 1: B = 2: SWAP A, B: PRINT A, BSYMBOL 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 shapeSYNCHRONIZE
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
SYSTEMAD = SYSVARPTRPRINT
statement (see PRINT).PRINT TAB (10); "Tabbed over 10 spaces..."PRINT TAN (.01)T = TIME: PRINT "TIME = "; TT$ = TIME$: PRINT "The current time is "; T$PRINT TRIM$ (" HELLO "); "GOODBYE"TRON).TROFFTROFF).TRONREPEAT-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..."WENDWHILE-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..."WENDOPEN).WRITE #1, NAM$, AGE: REM WRITE THE NAME AND AGEX = XMOUSEX = XPOSA = 5 XOR 3: PRINT AY = YMOUSEY = 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 |