QL Keywords
The Keyword Reference Guide lists all SuperBASIC keywords in
alphabetical order: A brief explanation of the keywords function is
given followed by loose definition of the syntax and examples of
usage. An explanation of the syntax definition is given in the
Concept Reference Guide under the entry syntax.
Each keyword entry indicates to which, if any, group of operations it
relates, i.e. DRAW is a graphics operation and further information can
be obtained from the graphics section of the Concept Reference Guide.
Sometimes it is necessary to deal with more than one keyword at a
time, i.e. IF, ELSE, THEN, END, IF, these are all listed under IF.
An index is provided which attempts to cover all possible ways you
might describe a SuperBASIC keyword. For example the clear screen
command, CLS, is also listed under clear screen and screen clear.
01984 SINCLAIR RESEARCH LIMITED
ABS maths functions
ABS returns the absolute value of the parameter. It will return the
value of the parameter if the parameter is positive and will return
zero minus the value of the parameter if the parameter is negative.
syntax. ABS(numeric_expression)
example: i. PRINT ABS(0.5)
ii. PRINT ABS(a-b)
ACOS, ASIN
ACOT, ATAN maths functions
ACOS and ASIN will compute the arc cosine and the arc sine
respectively. ACOT will calculate the arc cotangent and ATAN will
calculate the arc tangent. There is no effective
limit to the size of the parameter.
syntax: angle:= nunieric_expression {in radians}
ACOS (angle)
ACOT (angle)
ASIN (angle)
ATAN (angle)
example: i. PRINT ATAN(angle)
ii. PRINT ASIN(1)
iii. PRINT ACOT(3.6574)
iv. PRINT ATAN(a-b)
ADATE clock
ADATE allows the clock to be adjusted.
syntax: seconds:= numeric_expression
ADATE seconds
example:
i. ADATE 3600 {will advance the clock 1 hour}
ii. ADATE -60 {will move the clock back 1 minute}
ARC
ARC_R graphics
ARC will draw an are of a circle between two specified points in the
window attached to the default or specified channel. The end points of
the arc are specified using the graphics co-ordinate system.
Multiple arcs can be drawn with a single ARC command.
The end points of the are can be specified in absolute coordinates
(relative to the graphics origin or in relative coordinates (relative
to the graphics cursor). If the first point is omitted then the are is
drawn from the graphics cursor to the specified point through the
specified angle.
ARC will always draw with absolute coordinates, while ARC_R will
always draw relative to the graphics cursor.
syntax: x:= numeric_expression
y:= numeric_expression
angle:= numeric_expression (in radians)
point:= x,y
parameter_2:= | TO point, angle (1)
| ,point TO point,angle (2)
parameter_1:= | point TO point,angle (1)
| TO point,angle (2)
ARC [channel,] parameter_1 *[parameter_2]*
ARC_R [channel,] parameter_1 *[parameter_2]*
where (1) will draw from the specified point to the next specified
point turning through the specified angle
(2) will draw from the the last point plotted to the specified
point turning through the specified angle
example: i. ARC 15,10 TO 40,40,PI/2
{draw an are from 15,10 to 40,40 turning through PI/2 radians}
ii. ARC TO 50,50,PI/2
{draw an are from the last point plotted to 50,50 turning through
PI/2 radians}
iii. ARC_R 10,10 TO 55,45,0.5
{draw an are, starting 10,10 from the last point plotted to 55,45
from the start of the are, turning through 0.5 radians}
AT windows
AT allows the print position to be modified on an imaginary row/column
grid based on the current character size. AT uses a modified form of
the pixel coordinate system where (row O, column O) is in the top left
hand corner of the window. AT affects the print position in the window
attached to the specified or default channel.
syntax: line:= numeric_expression
column:= numeric_expression
AT [channel,] line , column
example: AT 10,20 : PRINT "This is at line 10 column 20"
AUTO
AUTO allows line numbers to be generated automatically when entering
programs directly into the computer. AUTO will generate the next
number in sequence and will then enter the SuperBASIC line editor
while the line is typed in. If the line already exists then a copy of
the line is presented along with the line number. Pressing ENTER at
any point in the line will check the syntax of the whole line and will
enter it into the program.
AUTO is terminated by pressing CTRL-SPACE
syntax: first_line:= line_number
gap:= numeric_expression
AUTO [first_line] [,gap]
example:
i. AUTO {start at line 100 with intervals of 10}
ii. AUTO 10,5 {start at line 10 with intervals of 5}
iii. AUTO ,7 {start at line 100 with intervals of 7}
BAUD communications
BAUD sets the baud rate for communication via both serial channels.
The speed of the channels cannot be set independently.
syntax: rate:= numeric_expression
BAUD rate
The value of the numeric expression must be one of the supported baud
rates on the QL:
75
300
600
1200
2400
4800
9600
19200 (transmit only)
If the selected baud rate is not supported, then an error will be
generated.
Example: i. BAUD 9600
ii. BAUD print_speed
BEEP sound
BEEP activates the inbuilt sound functions on the QL. BEEP can accept
a variable number of parameters to give various levels of control over
the sound produced. The minimum specification requires only a duration
and pitch to be specified. BEEP used with no parameters will kill any
sound being generated.
syntax: duration:= numeric_expression {range -32768..32767}
pitch:= numeric_expression {range 0..255}
grad_x:= numeric_expression {range -32768..32767}
grad_y:= numeric_expression {range -8..7}
wrap:= numeric_expression {range 0..15}
fuzzy:= numeric_expression {range 0..15}
random:= numeric_expressian {range 0..15}
BEEP [ duration, pitch
[,pitch_2, grad_x, grad_y
[, wrap
[, fuzzy
[, random ]]]]]
duration - specifies the duration of the sound in units of 72
microseconds. A duration of zero will run the sound until
terminated by another BEEP command.
pitch - specifies the pitch of the sound.A pitch of 1 is high and
255 is low.
Pitch_2 - specifies an second pitch level between which the sound
will 'bounce'
grad_x - defines the time interval between pitch steps.
grad_y - defines the size of each step, grad_x and grad_y control the
rate at which the pitch bounces between levels.
wrap - will force the sound to wrap around the specified number
of times. If wrap is equal to 15 the sound will wrap around forever:
fuzzy - defines the amount of fuzziness to be added to the sound.
random - defines the amount of randomness to be added to the sound.
BEEPING sound
BEEPING is a function which will return zero (false) if the QL is
currently not beeping and a value of one (true) if it is beeping.
syntax: BEEPING
example: 100 DEFine PROCedure be quiet
110 BEEP
120 END DEFine
130 IF BEEPING THEN be quiet
BLOCK windows
BLOCK will fill a block of the specified size and shape, at the
specified position relative to the origin of the window attached to
the specified, or default channel. BLOCK uses the pixel coordinate
system.
syntax: width:= numeric_expression
height:= numeric_expression
x:= numeric_expression
y:= numeric_expression
BLOCK [channel,] width, height, x, y, colour
example:
i. BLOCK 10,10,5,5,7 {10x10 pixel white block at 5,5}
ii. 100 REMark "bar chart"
110 CSIZE 3,1
120 PRINT "bar chart"
130 LET bottom =100 : size = 20 : left = 10
140 FOR bar =1 to 10
150 LET colour = RND(O TO 255)
160 LET height = RND(2 TO 20)
170 BLOCK size, height, Left+bar*size, bottom-height,0
180 BLOCK size-2, height-2, left+bar*size+l,
bottom-height+l,colour
190 END FOR bar
BORDER windows
BORDER will add a border to the window attached to the specified
channel, or default channel.
For all subsequent operations except BORDER the window size is reducedto allow space for the BORDER. If another BORDER command is used then
the full size of the original window is restored prior to the border
being added; thus multiple BORDER commands have the effect of changing
the size and colour of a single border. Multiple borders are not
created unless specific action is taken.
If BORDER is used without specifying a colour then a transparent
border of the specified width is created.
syntax: width:= numeric_expression
BORDER [channel,] size [, colour]
example: i. BORDER 10,0,7 {black and white stipple border}
ii. 100 REMark Lurid Borders
110 FOR thickness = 50 to 2 STEP -2
120 BORDER thickness, RND(0 TO 255)
130 END FOR thickness
140 BORDER 50
CALL Qdos
Machine code can be accessed directly from SuperBASIC by using the
CALL command. CALL can accept up to 13 long word parameters which will
be placed into the 68008 data and address registers (D1 to D7, AO to
A5) in sequence.
No data is returned from CALL.
syntax: address:= numeric_expression
data:= numeric_expression
CALL address, *[data]* {13 data parameters maximum}
example: i. CALL 262144,0,0,0
ii. CALL 262500,12,3,4,1212,6
Warning: Address register A6 should not be used in routines called
using this command. To return to SuperBASIC use the instructions:
MOVEQ #O, DO
RTS
CHR$ BASIC
CHR$ is a function which will return the character whose value is
specified as a parameter: CHR$ is the inverse of CODE.
syntax: CHR$(numeric_expressen)
example: i. PRINT CHRS(27) {print ASCII escape character}
ii. PRINT CHR$(65) {print A}
CIRCLE
CIRCLE_R graphics
CIRCLE will draw a circle (or an ellipse at a specified angle) on the
screen at a specified position and size. The circle will be drawn in
the window attached to the specified or default channel.
CIRCLE uses the graphics coordinate system and can use absolute
coordinates (i.e. relative to the graphics origin), and relative
coordinates (i.e. relative to the graphics cursor). For relative
coordinates use CIRCLE_R.
Multiple circles or ellipses can be plotted with a single call to
CIRCLE. Each set of parameters must be separated from each other with
a semi colon (;)
The word ELLIPSE can be substituted for CIRCLE if required.
syntax: x:= numeric_expression
y:= numeric_expession
radius:= numeric_expression
eccentricity:= numeric_expression
angle:= numeric_expression {range 2 to PI}
parameters:= | x, y, (1)
| radius, eccentricity, angle (2)
where (1) will draw a circle
(2) will draw an ellipse of specified eccentricity and angle
CIRCLE [channel,] parameters*[; parameters]*
x - horizontal offset from the graphics origin or graphics cursor
y - vertical offset from the graphics origin or graphics cursor
radius - radius of the circle eccentricity the ratio between the
major and minor axes of an ellipse.
Angle - the orientation of the major axis of the ellipse relative to
the screen vertical. The angle must be specified in radians.
example: i. CIRCLE 50,50,20 {a circle at 50,50 radius 20}
ii. CIRCLE 50,50,20,0.5,0 {an ellipse at 50,50 major axis 20
eccentricity 0.5 and aligned with the vertical axis}
CLEAR
CLEAR will clear out the SuperBASIC variable area for the current
program and will release the space for Qdos.
syntax: CLEAR
example: CLEAR
Comment: CLEAR can be used to restore to a known state the SuperBASIC
system. For example, if a program is broken into (or stops due to an
error) while it is in a procedure then SuperBASIC is still in the
procedure even after the program has stopped. CLEAR will reset the
SuperBASIC. {See CONTINUE, RETRY.}
CLOSE devices
CLOSE will close the specified channel. Any window associated with the
channel will be deactivated.
syntax: channel:= numeric_expression
CLOSE channel
example: i. CLOSE #4
ii. CLOSE #input, channel
CLS windows
Will clear the window attached to the specified or default channel to
current PAPER colour, excluding the border if one has been specified.
CLS will accept an optional parameter which specifies if only a part
of the window must be cleared.
syntax: part:= numeric_expression
CLS [channel,] [part]
where: part = O - whole screen (default if no parameter)
part = 1 - top excluding the cursor line
part = 2 - bottom excluding the cursor line
part = 3 - whole of the cursor line
part = 4 - right end of cursor line including the cursor
position
example: i. CLS {the whole window}
ii. CLS 3 {clear the cursor line}
iii. CLS #2,2 {clear the bottom of the window on channel 2}
CODE
CODE is a function which returns the internal code used to represent
the specified character. If a string is specified then CODE will
return the internal representation of the first character of the
string.
CODE is the inverse of CHR$.
syntax: CODE (string_expression)
example: i. PRINT CODE("A") {prints 65}
ii. PRINT CODE ("SuperBASIC") {prints 83}
CONTINUE
RETRY error handling
CONTINUE allows a program which has been halted to be continued. RETRY
allows a program statement which has reported an error to be
re-executed.
syntax: CONTINUE
RETRY
example: CONTINUE
RETRY
warning A program can only continue if:
1. No new lines have been added to the program
2. No new variables have been added to the program
3. No lines have been changed
The value of variables may be set or changed.
COPY
COPY_N devices
COPY will copy a file from an input device to an output device until
an end of file marker is detected. COPY_N will not copy the header (if
it exists) associated with a file and will allow Microdrive files to
be correctly copied to another type of device.
Headers are associated with directory-type devices and should be
removed using COPY_N when copying to non-directory devices, e.g. mdvl
is a directory device; serl is a non-directory device.
syntax: COPY device TO device
COPY_N device TO device
It must be possible to input from the source device and it must be
possible to output to the destination device.
example:
i. COPY mdvl_data_file TO con_ {copy to default window}
ii. COPY neti_3 TO mdvl_data {copy data from network station to
mdv_data.}
iii. COPY_N mdvl_test_data TO ser1_ {copy mdvl_test_data to serial
port 1 removing header information}
COT
COS math functions
COS will compute the cosine of the specified argument.
syntax: angle:= numeric_expression {range -10000..10000 in radians}
COS (angle)
example: i. PRINT COS(theta)
ii. PRINT C0S(3.141592654/2)
COT will compute the cotangent of the specified argument.
syntax: angle:= numeric_expression {range -30000..30000 in radians}
COT (angle)
example: i. PRINT COT(3)
ii. PRINT C0T(3.141592654/2)
CSIZE window
Sets a new character size for the window attached to the specified or
default channel. The standard size is 0,0 in 512 mode and 2,0 in 256
mode.
Width defines the horizontal size of the character space. Height
defines the vertical size of the character space. The character size
is adjusted to fill the space available.
Figure A Character Square
width size height size·
6 pixels
8 pixels
12 pixels
16 pixels
10 pixels
20 pixels
syntax: width:= numeric_expression {range 0..3}
height:= numeric_expression {range 0..11}
CSIZE [channel,]- width, height
example: i. CSIZE 3,0
ii. CSIZE 3,1
CURSOR windows
CURSOR allows the screen cursor to be positioned anywhere in the
window attached to the specified or default channel.
CURSOR uses the pixel coordinate system relative to the window origin
and defines the position for the top left hand corner of the cursor.
The size of the cursor is dependent on the character size in use.
If CURSOR is used with four parameters then the first pair is
interpreted as graphics coordinates (using the graphics coordinate
system) and the second pair as the position of the cursor (in the
pixel coordinate system) relative to the first point.
This allows diagrams to be annotated relatively easily.
syntax: x:= numeric_expression
y:= numeric_expression
CURSOR [channel,] x, y [,x, y]
example: i. CURSOR 0,0
ii. CURSOR 20,30
iii. CURSOR 50,50,10,10
DATA
READ
RESTORE BASIC
READ, DATA and RESTORE allow embedded data, contained in a SuperBASIC
program, to be assigned to variables at run time.
DATA is used to mark and define the data, READ accesses the data and
assigns it to variables and RESTORE allows specific data to be
selected.
DATA allows data to be defined within a program. The data can be read
by a READ statement and the data assigned to variables. A DATA
statement is ignored by SuperBASIC when it is encountered during
normal processing.
syntax: DATA *[expression,]*
READ reads data contained in DATA statements and assigns it to a list
of variables. Initially the data pointer is set to the first DATA
statement in the program and is incremented after each READ.
Re-running the program will not reset the data pointer and so in
general a program should contain an explicit RESTORE.
An error is reported if a READ is attempted for which there is no
DATA.
syntax: READ *[identifier,l*
RESTORE restores the data pointer, i.e. the position from which
subsequent READs will read their data. If RESTORE is followed by a
line number then the data pointer is set to that line. If no parameter
is specified then the data pointer is reset to the start of the
program.
syntax: RESTORE [line_number]
example:
i. 100 REMark Data statement example
110 DIM weekdays$(7,4)
120 RESTORE
130 FOR count= 1 TO 7 :
READ weekdays$(count)
140 PRINT weekday$
150 DATA "MON","TUE","WED","THUR","FRI"
160 DATA "SAT"."SUN"
ii. 100 DIM month$(l2,9)
110 RESTORE
120 REMark Data statement example
130 FOR count=l TO 12 :
READ month$(count)
140 PRINT month$
150 DATA "January", "February", "March"
160 DATA "April","May","June"
170 DATA "July","August","September"
180 DATA "October","November","December"
Warning: An implicit RESTORE is not performed before running a
program. This allows a single program to run with different sets of
data. Either include a RESTORE in the program or perform an explicit
RESTORE or CLEAR before running the program.
DATE$
DATE clock
DATE$ is a function which will return the date and time contained in
the QLls clock. The format of the string returned by DATE$ is:
"yyyy mmm dd hh:mm:ss"
where yyyy is the year 1984, 1985, etc
mmm is the month Jan, Feb etc
dd is the day 01 to 28, 29, 30, 31
hh is the hour 00 to 23
mm are the minutes 00 to 59
ss are the seconds 00 to 59
DATE will return the date as a floating point number which can be used
to store dates and times in a compact form.
If DATE$ is used with a numeric parameter then the parameter will be
interpreted as a date in floating point form and will be converted to
a date string.
syntax: DATE$ {get the time from the clock)
DATE$ (numeric_expression) {get time from supplied parameter}
example: i. PRINT DATE$ {output the date and time}
ii. PRINT DATE$(234567) {convert 234567 to a date}
DAY$ clock
DAY$ is a function which will return the current day of the week. If a
parameter is specified then DAY$ will interpret the parameter as a
date and will return the corresponding day of the week.
syntax: DAY$ {get day from clock}
DAY$ (numeric_expression) {get day from supplied parameter}
example: i. PRINT DAY$ {output the day}
ii. PRINT DAY$(234567) {output the day represented by 234567
(seconds)}
DEFine
FuNction
END DEFine functions and procedures
DEFine FuNction defines a SuperBASIC function. The sequence of
statements between the DEFine function and the END DEFine constitute
the function. The function definition may also include a list of
formal parameters which will supply data for the function. Both
the formal and actual parameters must be enclosed in brackets. If the
function requires no parameters then there is no need to specify an
empty set of brackets.
Formal parameters take their type and characteristics from the
corresponding actual parameters. The type of data returned by the
function is indicated by the type appended to the function identifier.
The type of the data returned in the RETURN statement must match.
An answer is returned from a function by appending an expression to a
RETurn statement. The type of the returned data is the same as type of
this expression.
A function is activated by including its name in a SuperBASIC
expression.
Function calls in SuperBASIC can be recursive; that is, a function may
call itself directly or indirectly via a sequence of other calls.
Syntax: formal_parameters= (expression *[, expression]*)
actual_parameters:= (expression *[, expression]*)
type:= |$
|%
|
DEF FuNction identifier type {forma_parameters}
[LOCal identifier x[, identifier]*]
statements
RETurn expression
END DEFine
RETurn can be at any position within the procedure body. LOCal
statements must preceed the first executable statement in the
function.
example:
10 DEFine FuNction mean(a, b, c)
20 LOCaL answer
30 LET answer = (a + b + c)/3
40 RETurn answer
50 END DEFine
60 PRINT mean(1,2,3)
Comment: To improve legibility of programs the name of the function
can be appended to the END DEFine statement. However, the name will
not be checked by SuperBASIC.
DEFine
PROCedure
END DEFine functions and procedures
DEFine PROCedure defines a SuperBASIC procedure. The sequence of
statements between the DEFine PROCedure statement and the END DEFine
statement constitutes the procedure. The procedure definition may also
include a list of formal parameters which will supply data for the
procedure. The formal parameters must be enclosed in brackets for the
procedure definition, but the brackets are not necessary when the
procedure is called. If the procedure requires no parameters then
there is no need to include an empty set of brackets in the procedure
definition.
Formal parameters take their type and characteristics from the
corresponding actual parameters.
Variables may be defined to be LOCal to a procedure. Local variables
have no effect on similarly named variables outside the procedure. If
required, local arrays should be dimensioned within the LOCal
statement.
The procedure is called by entering its name as the first item in a
SuperBASIC statement together with a list of actual parameters.
Procedure calls in SuperBASIC are recursive that is, a procedure may
call itself directly or indirectly via a sequence of other calls.
It is possible to regard a procedure definition as a command
definition in SuperBASIC; many of the system commands are themselves
defined as procedures.
syntax: formal_parameter:= (expression *[, expression]*)
actual_parameters:= expression *[, expression]*
DEFine PROCedure identifier {forma_parameters}
[LOCal identifier *[, identifier]*]
statements
[RETurn]
END DEFine
RETURN can appear at any position within the procedure body. If
present the LOCal statement must be before the first executable
statement in the procedure. The END DEFine statement will act as an
automatic return.
example:
i. 100 DEFine PROCedure start_screen
110 WINDOW 100,100,10,10
120 PAPER 7 : INK O : CLS
130 BORDER 4,255
140 PRINT "Hello Everybody"
150 END DEFine
160 start_screen
ii. 100 DEFine PROCedure slow_scroll(scroll_limit)
110 LOCal count
120 FOR count =1 TO scroll
130 SCROLL 2
140 END FOR count
150 END DEFine
160 slow_scroll 20
Comment: To improve legibility of programs the name of the procedure
can be appended to the END DEFine statement. However, the name will
not be checked by SuperBASIC.
DEG math functions
DEG is a function which will convert an angle expressed in radians to
an angle expressed in degrees.
syntax: DEG(numeric_expression)
example: PRINT DEG(PI/Z) {will print 90}
DELETE micrdrives
DELETE will remove a file from the directory of the cartridge in the
specified Microdrive.
syntax: DELETE device
The device specification must be a Microdrive device
example: i. DELETE mdvl_old_data
ii. DELETE mdv1_letter_file
DIM arrays
Defines an array to SuperBASIC. String, integer and floating point
arrays can be defined. String arrays handle fixed length strings and
the final index is taken to be the string length.
Array indices run from 0 up to the maximum index specified in the DIM
statement; thus DIM will generate an array with one more element in
each dimension than is actually specified.
When an array is specified it is initialised to zero for a numeric
array and zero length strings for a string array.
syntax: index:= numeric_expression
array:= indentifier(index *[, index]*)
DIM array x[, array] *
example: i. DIM string_array$(10,10,50)
ii. DIM matrix(100,100)
DIMN arrays
DIMN is a function which will return the maximum size of a specified
dimension of a specified array. If a dimension is not specified then
the first dimension is assumed. If the specified dimension does not
exist or the identifier is not an array then zero is returned.
syntax: array:= identifier
index:= numeric_expression {1 for dimension 1, etc.}
DIMN(array [, dimension])
example: consider the array defined by: DIM a(2,3,4)
i. PRINT DIMN(A,1) {will print 2}
ii. PRINT DIMN(A,Z) {will print 3}
iii. PRINT DIMN(A,3) {will print 4}
iv. PRINT DIMN(A) {will print 2}
v. PRINT DIMN(A,4) {will print 0}
DIR microdrives
DIR will obtain and display in the window attached to the specified or
default channel Microdrives the directory of the cartridge in the
specified Microdrive.
syntax: DIR device
The device specification must be a valid Microdrive device
The directory format output by DIR is as follows:
free_sectors:= the number of free sectors
available_sectors:= the maximum number of sectors on this cartridge
file_name:= a SuperBASIC file name
screen format: Volume name
free_sectors | available_sectors sectors
file_name
......
file__name
example: i. DIR mdv1_
ii. DIR "mdv2_ "
iii. DIR "mdv" & microdrive_number$ & "_"
screen format: BASIC
183 / 221 sectors
demo_1
demo_1_old
demo_2
DIV operator
DIV is an operator which will perform an integer divide.
syntax: numeric_expression DIV numeric_expression
example: i. PRINT 5 DIV 2 {will output 2}
ii. PRINT -5 DIV 2 {will output -3}
DLINE BASIC
DLINE will delete a single line or a range of lines from a SuperBASIC
program.
syntax: range:= | line_number TO line_number (1)
| line_number TO (2)
| TO line_number (3)
| line_number (4)
DLINE range*[,range]*
where (1) will delete a range of lines
(2) will delete from the specified line to the end
(3) will delete from the start to the specified line
(4) will delete the specified line
example: i. DLINE 10 TO 70, 80, 200 TO 400
{will delete lines 10 to 70 inclusive, line 80 and lines 200 to 400
inclusive}
ii. DLINE {will delete nothing}
EDIT
The EDIT command enters the SuperBASIC line editor.
The EDIT command is closely related to the AUTO command, the only
difference being in their defaults. EDIT defaults to a line increment
of zero and thus will edit a single line unless a second parameter is
specified to define a line increment.
If the specified line already exists then the line is displayed and
editing can be started. If the line does not exist then the line
number is displayed and the line can be entered.
The cursor can be manipulated within the edit line using the standard
QL keystrokes.
cursor right
cursor left
cursor up - same as ENTER but automatically gives previous
existing line to edit next
cursor down - same as ENTER but automatically gives next existing
line to edit next
CTRL -> delete character right
CTRL <- delete character left
When the line is correct pressing ENTER will enter the line into the
program.
If an increment was specified then the next line in the sequence will
be edited otherwise edit will terminate.
syntax: increment:= numeric_expression
EDIT line_number [,increment]
example: i. EDIT 10 {edit line 10 only}
ii. EDIT 20,10 {edit lines 20, 30 etc.}
EOF devices
EOF is a function which will determine if an end of file condition has
been reached on a specified channel. If EOF is used without a channel
specification then EOF will determine if the end of a program's
embedded data statements has been reached.
syntax: EOF [(channel)]
example: i. IF EOF(#6) THEN STOP
ii. IF EOF THEN PRINT "Out of data"
EXEC
EXEC_W Qdos
EXEC and EXEC_W will load a sequence of programs and execute them in
parallel.
EXEC will return to the command processor after all processes have
started execution, EXEC_W will wait until all the processes have
terminated before returning.
syntax: program: =device {used to specify a Microdrive file
containing the program}
EXEC program
example: i. EXEC mdv1_communcations
ii. EXEC_W mdv1_printer_process
EXIT
repetition EXIT will continue processing after the END of the named
FOR or REPeat structure.
syntax: EXIT identifier
example: i. 100 REM start Looping
110 LET count = O
120 REPeat Loop
130 LET count = count +1
140 PRINT count
150 IF count = 20 THEN EXIT Loop
160 END REPeat loop
{the loop will be exited when count becomes equal to 20}
ii. 100 FOR n =1 TO 1000
110 REM program statements
120 REM program statements
130 IF RND >.5 THEN EXIT n
140 END FOR n
{the loop will be exited when a random number greater than 0.5 is
generated}
EXP
maths functions
EXP will return the value of e raised to the power of the specified
parameter.
syntax: EXP (numeric_expression) {range -500..500}
example: i. PRINT EXP(3)
ii. PRINT EXP(3.141592654)
FILL graphics
FILL will turn graphics fill on or off. FILL will fill any
non-re-entrant shape drawn with the graphics or turtle graphics
procedures as the shape is being drawn. Re-entrant shapes must be
split into smaller non-re-entrant shapes.
When you have finished filling, FILL 0 should be called.
syntax: switch:= numeric_expression {range 0..1}
FILL [channel,] switch
example: i. FILL 1:LINE 10,10 TO 50,50 TO 30,90 TO 10,10:FILL 0
{will draw a filled triangle}
ii. FILL 1:CIRCLE 50,50,20:FILL 0
{will draw a filled circle}
FILL$ string arrays
FILL$ is a function which will return a string of a specified length
filled with a repetition of one or two characters.
syntax: FILL$ (string_expression, numeric_expression)
The string expression supplied to FILL$ must be either one or two
characters long.
example: i. PRINT FILL$("a",5) {will print aaaaa}
ii. PRINT FILL$("oO",7) {will print oOoOoOo}
iii. LET a$ = a$ & FILL$(" ",10)
FLASH windows
FLASH turns the flash state on and off. FLASH is only effective in low
resolution mode. FLASH will be effective in the window attached to the
specified or default channel.
syntax: switch:= numeric_expression {range 0..1}
FLASH [channel,] switch
where: switch = 0 will turn the flash off
switch = 1 will turn the flash on
example: 100 PRINT "A ";
110 FLASH 1
120 PRINT "flashing ";
130 FLASH 0
140 PRINT "word"
Warning: Writing over part of a flashing character can produce
spurious results and should be avoided.
FOR
END FOR repetition
The FOR statement allows a group of SuperBASIC statements to be
repeated a controlled number of times. The FOR statement can be used
in both a long and a short form. NEXT and END FOR can be used together
within the same FOR loop to provide a loop epilogue, ie. a group of
SuperBASIC statements which will not be executed if a loop is exited
via an EXIT statement but which will be executed if the FOR loop
terminated normally.
define: for_item:= | numeric_expression
| numeric_exp TO numeric_exp
| numeric_exp TO numeric_exp STEP numeric_exp
for_list. = for_item *[, for_item] *
SHORT: The FOR statement is followed on the same logical line by a
sequence of SuperBASIC statements. The sequence of statements is then
repeatedly executed under the control of the FOR statement. When the
FOR statement is exhausted, processing continues on the next line. The
FOR statement does not require its terminating NEXT or END FOR. Single
line FOR loops must not be nested.
syntax: FOR variable = for_list : statement x[: statement]*
example: i. FOR i = 1, 2, 3, 4 TO 7 STEP 2 : PRINT i
ii. FOR element = first TO last : LET buffer (element ) = 0
LONG: The FOR statement is the last statement on the line. Subsequent
lines contain a series of SuperBASIC statements terminated by an END
FOR statement. The statements enclosed between the FOR statement and
the END FOR are processed under the control of the FOR statement.
syntax: FOR variable = for_list
statements
END FOR variable
example:
100 INPUT "data please" x
110 LET factorial = 1
120 FOR value = x TO 1 STEP -1
130 LET factorial = factorial * value
140 PRINT x !!!! factorial
150 IF factorial>lE20 THEN
160 PRINT "Very Large number"
170 EXIT value
180 END IF
190 END FOR value
Warning: A floating point variable must be used to control a FOR
loop.
FORMAT microdrives
FORMAT will format and make ready for use the cartridge contained in
the specified Microdrive.
syntax: FORMAT [channel,] device
Device specifies the Microdrive to be used for formatting and the
identifier part of the specification is used as the medium or volume
name for that cartridge. FORMAT will write the number of good sectors
and the total number of sectors available on the cartridge on the
default or on the specified channel.
It is helpful to format a new cartridge several times before use. This
conditions the surface of the tape and gives greater capacity.
example: i. FORMAT mdv1_data_cartridge
ii. FORMAT mdv2_wp_letters
FORMAT can be used to reinitialise a used cartridge. However all data
contained on that cartridge will be lost.
GOSUB
For compatibility with other BASICs, SuperBASIC supports the GOSUB
statement. GOSUB transfers processing to the specified line number; a
RETurn statement will transfer processing back to the statement
following GOSUB.
The line number specification can be an expression.
syntax: GOSUB line_number
example: i. GOSUB 100
ii. GOSUB 4*select_variable
Comment: The control structures available in SuperBASIC make the
GOSUB statement redundant.
GOTO
For compatibility with other BASICs, SuperBASIC supports the GOTO
statement. GOTO will unconditionally transfer processing to the
statement number specified. The statement number specification can be
an expression.
syntax: GOTO line_number
example: i. GOTO program start
ii. GOTO 9999
comment: The control structures available in SuperBASIC make the GOTO
statement redundant.
IF
THEN
ELSE
END IF
The IF statement allows conditions to be tested and the outcome of
that test to control subsequent program flow.
The IF statement can be used in both a long and a short form:
SHORT: The THEN keyword is followed on the same logical line by a
sequence of SuperBASIC keyword. This sequence of SuperBASIC statements
may contain an ELSE keyword. If the expression in the IF statement is
true (evaluates to be non-zero), then the statements between the THEN
and the ELSE keywords are processed. If the condition is false
(evaluates to be zero) then the statements between the ELSE and the
end of the line are processed.
If the sequence of SuperBASIC statements does not contain an ELSE
keyword and if the expression in the IF statement is true, then the
statements between the THEN keyword and the end of the line are
processed. If the expression is false then processing continues
at the next line.
syntax: statements:= statement *[: statement]*
IF expression THEN statements [:ELSE statements]
example: i. IF a=32 THEN PRINT "Limit" : ELSE PRINT "OK"
ii. IF test >maximum THEN LET maximum = test
iii. IF "1"+1=2 THEN PRINT "coercion OK"
LONG 1: The THEN keyword is the last entry on the logical line. A
sequence of SuperBASIC statements is written following the IF
statements. The sequence is terminated by the END IF statement. The
sequence of SuperBASIC statements is executed if the expression
contained in the IF statement evaluates to be non zero. The ELSE
keyword and second sequence of SuperBASIC statements are optional.
LONG 2: The THEN keyword is the last entry on the logical line. A
sequence of SuperBASIC statements follows on subsequent lines,
terminated by the ELSE keyword. IF the expression contained in the IF
statement evaluates to be non zero then this first sequence of
SuperBASIC statements is processed. After the ELSE keyword a second
sequence of SuperBASIC statements is entered, terminated by the END IF
keyword. If the expression evaluated by the IF statement is zero then
this second sequence of SuperBASIC statements is processed.
syntax: IF expression THEN
statements
[ELSE
statements]
END IF
example: 100 LET Limit =10
110 INPUT "Type in a number" ! number
120 IF number > limit THEN
130 PRINT "Range error"
140 ELSE
150 PRINT "Inside Limit"
160 END IF
In all three forms of the IF statement the THEN is optional. In the
short form it must comment be replaced by a colon to distinguish the
end of the IF and the start of the next statement. In the long form it
can be removed completely.
IF statements may be nested as deeply as the user requires (subject to
available memory). However, confusion may arise as to which ELSE, END
IF etc matches which IF. SuperBASIC will match nested ELSE statements
etc to the closest IF statement, for
example:
100 IF a = b THEN
110 IF c = d THEN
120 PRINT "error"
130 ELSE
140 PRINT "no error"
150 END IF
160 ELSE
170 PRINT "not checked"
180 END IF
The ELSE at line 130 is matched to the second IF. The ELSE at line 160
is matched with the first IF (at line 100).
INK windows
This sets the current ink colour, i.e. the colour in which the output
is written. INK will windows be effective for the window attached to
the specified or default channel.
syntax: INK [channel,] colour
example: i. INK 5
ii. INK 6,2
iii. INK #2,255
INKEY$
INKEY$ is a function which returns a single character input from
either the specified or default channel.
An optional timeout can be specified which can wait for a specified
time before returning, can return immediately or can wait forever. If
no parameter is specified then INKEY$ will return immediately.
syntax: INKEY$ [|(channel)
|(channel, time)
|(time)]
where: time = 1..32767 {wait for specified number of frames}
time = -1 {wait forever}
time = 0 {return immediately}
examples:
i. PRINT INKEY$ {input from the default channel}
ii. PRINT INKEY$(#4) {input from channel 4}
iii. PRINT INKEY$(50) {wait for 50 frames then return anyway}
iv. PRINT INKEY$(0) {return immediatly (poll the keyboard)}
v. PRINT INKEY$(#3,100) {wait for 100 frames for an input from
channel 3 then return anyway}
INPUT
INPUT allows data to be entered into a SuperBASIC program directly
from the QL keyboard by the user. SuperBASIC halts the program until
the specified amount of data has been input; the program will then
continue. Each item of data must be terminated by the ENTER key.
INPUT will input data from either the specified or the default
channel.
If input is required from a particular console channel the cursor for
the window connected to that channel will appear and start to flash.
syntax: separator:= |!
|,
|\
|; | TO
prompt:= [channel,] expression separator
INPUT [prompt] [channel] variable *[,variable]*
example:
i. INPUT ("Last guess "& guess & "New guess?") ! guess
ii. INPUT "What is your guess?"; guess
iii. 100 INPUT "array size?" ! Limit
110 DIM array(limit-1)
120 FOR element = 0 to Limit-1
130 INPUT ("data for element" & element) array(element)
140 END FOR element
150 PRINT array
INSTR operator
INSTR is an operator which will determine if a given substring is
contained within a specified string. If the string is found then the
substring's position is returned. If the string is not found then
INSTR returns zero.
Zero can be interpreted as false, i.e. the substring was not contained
in the given string. A non zero value, the substrings position, can be
intepreted as true, i.e. the substring was contained in the specified
string.
syntax: string_expression INSTR string expression
example: i. PRINT "a" INSTR "cat" {will print 2}
ii. PRINT "CAT" INSTR "concatenate" {will print 4}
iii. PRINT "x" INSTR "eggs" {will print 0}
INT maths functions
INT will return the integer part of the specified floating point
expression.
syntax: INT (numeric_expression)
example: i. PRINT INT(X)
ii. PRINT INT(3.141592654/2)
KEYROW
KEYROW is a function which looks at the instantaneous state of a row
of keys (the table below shows how the keys are mapped onto a matrix
of 8 rows by 8 columns). KEYROW takes one parameter, which must be an
integer in the range 0 to 7: this number selects which row is to be
looked at. The value returned by KEYROW is an integer between 0 and
255 which gives a binary representation indicating which keys have
been depressed in the selected row.
Since KEYROW is used as an alternative to the normal keyboard input
mechanism using INKEY$ or INPUT, any character in the keyboard
type-ahead buffer are cleared by KEYROW: thus key depressions which
have been made before a call to KEYROW will not be read by a
subsequent INKEY$ or INPUT.
Note that multiple key depressions can cause surprising results. In
particular, if three keys at the corner of a rectangle in the matrix
are depressed simultaneously, it will appear as if the key at the
fourth corner has also been depressed. The three special keys CTRL,
SHIFT and ALT are an exception to this rule, and do not interact with
other keys in this way.
syntax: row:= numeric_expression (range 0..7)
KEYROW (row)
example: 100 REMark run this program and press a few keys
110 REPeat loop
120 CURSOR 0,0
130 FOR row = 0 to 7
140 PRINT row !!! KEYROW(row) ;" "
150 END FOR row
160 END REPeat Loop
KEYBOARD MATRIX
COLUMN
ROW 1 2 4 8 16 32 64 128
7 ISHIFT( CTRL I ALT I X I V I N
8121610 EIOITIU
41L5
WII ITABIRI-Iv
31HIIIAIPIDIJ
CAPS
LOCK
KISIFI=IG
ZI .IC B f M
ENTER I t up ESC I I ISPACE down
F4 I F1 5 F2 F3 F5 4 7
LBYTES devices microdrives
LBYTES will load a data file into memory at the specified start
address.
syntax: start_address:= numeric_expression
LBYTES device ,startaddress
example:
i. LBYTES mdvl_screen, 131072 {load a screen image}
ii. LBYTES mdvl_program, start_address {load a program at a
specified address}
LEN string arrays
LEN is a function which will return the length of the specified string
expression.
syntax: LEN(string_expression)
example: i. PRINT LEN( "LEN will find the ength of this string")
ii. PRINT LEN(output_string$)
LET
LET starts a SuperBASIC assignment statement. The use of the LET
keyword is optional. The assignment may be used for both string and
numeric assignments. SuperBASIC will automatically convert unsuitable
data types to a suitable form wherever possible.
syntax: [LET] variable = expression
example: i. LET a = 1 + 2
ii. LET a$ = "12345"
iii. LET a$ = 6789
iv. b$ = test_data
LINE
LINE_R
LINE allows a straight line to be drawn between two points in the
window attached to the default or specified channel. The ends of the
line are specified using the graphics coordinate system.
Multiple lines can be drawn with a single LINE command.
The normal specification requires specifying the two end points for a
line. These end points can be specified either in absolute coordinates
(relative to the graphics origin) or in relative coordinates (relative
to the graphics cursor). If the first point is omitted then a line is
drawn from the graphics cursor to the specified point. If the second
point is omitted then the graphics cursor is moved but no line is
drawn.
LINE will always draw with absolute coordinates, i.e. relative to the
graphics origin, while LINE_R will always draw relative to the
graphics cursor.
syntax: x:= numeric_expression
y:= numeric_expression
point:= x,y
parameter_2:= | TO point (1)
| ,point XO point (2)
parameter_1:= | TO point, angle (1)
| TO point (2)
| point (3)
LINE [channel,] parameter_1 *[, parameter_2]*
LINE_R [channel,] parameter_1 *[,parameter_2]*
where
(1) will draw from the specified point to the next specified point
(2) will draw from the the last point plotted to the specified point
(3) will move to the specified point - no line will be drawn
example:
i. LINE 0,0 TO 0, 50 TO 50,0 TO 50,0 TO 0,0 {a square}
ii. LINE TO 0.75, 0.5 {a line}
iii. LINE 25,25 {move the graphics cursor}
LIST
LIST allows a SuperBASIC line or group of lines to be listed on a
specific or default channel. LIST is terminated by CTRL-SPACE
syntax: line:= | line_number TO line_number (1)
| line_number TO (2)
| TO line_number (3)
| line_number (4)
| (5)
LIST [channel,] line*[,line]*
where (1) will list from the specified line to the specified line
(2) will list from the specified line to the end
(3) will list from the start to the specified line
(4) will list the specified line
(5) will list the whole program
example: i. LIST {list all lines}
ii. LIST 10 TO 300 {list lines 10 to 300}
iii. LIST 12,20,50 {list lines 12,20 and 50 only}
If LIST output is directed to a channel opened as a printer channel
then LIST will provide hard copy.
LOAD devices microdrives
LOAD will load a SuperBASIC program from any QL device. LOAD
automatically performs a NEW before loading another program, and so
any previously loaded program will be cleared by LOAD.
If a line input during a load has incorrect SuperBASIC syntax, the
word MISTAKE is inserted between the line number and the body of the
line. Upon execution, a line of this sort will generate an error
syntax: LOAD device
example: i. LOAD "mdvl_test_program"
ii. LOAD mdvl_guess
iii. LOAD neti_3
iv. LOAD serl_e
LN
LOG10 maths functions
LN will return the natural logarithm of the specified argument. LOG10
will return the common logarithm. There is no upper limit on the
parameter other than the maximum number the computer can store.
syntax: LOG10 (numenic_expression) {range greater than zero}
LN (numeric_expression) {range greater than zero}
example: i. PRINT LOG10(20)
ii. PRINT LN(3.141592654)
LOCal functions and procedures
LOCal allows identifiers to be defined to be LOCal to a function or
procedure. Local identifiers only exist within the function or
procedure in which they are defined, or in procedures and functions
called from the function or procedure in which they are defined.
They are lost when the function or procedure terminates. Local
identifiers are independent of similarly named identifiers outside the
defining function or procedure. Arrays can be defined to be local by
dimensioning them within the LOCal statement.
The LOCal statement must precede the first executable statement in the
function or procedure in which it is used.
syntax: LOCal identifier *[, identifier]*
example: i. LOCal a,b,c(10,10)
ii. LOCal temp_data
comment: Defining variables to be LOCal allows variable names to be
used within functions and procedures without corrupting meaningful
variables of the same name outside the function or procedure.
LRUN devices microdrives
LRUN will load and run a SuperBASIC program from a specified device.
LRUN will perform NEW before loading another program and so any
previously stored SuperBASIC program will be cleared by LRUN.
If a line input during a loading has incorrect SuperBASIC syntax, the
word MISTAKE is inserted between the line number and the body of the
line. Upon execution, a line of this sort will generate an error.
syntax: LRUN device
example: i. LRUN mdv2_TEST
ii. LRUN mdv1_game
MERGE devices microdrives
MERGE will load a file from the specified device and interpret it as a
SuperBASIC program. If the new file contains a line number which
doesn't appear in the program already in the QL then the line will be
added. If the new file contains a replacement line for one that
already exists then the line will be replaced. All other old program
lines are left undisturbed.
If a line input during a MERGE has incorrect SuperBASIC syntax, the
word MISTAKE is inserted between the line number and the body of the
line. Upon execution, a line of this sort will generate an error.
syntax: MERGE device
example: i. MERGE mdv1_overlay_program
ii. MERGE mdv1_new_data
MOD operators
MOD is an operator which gives the modulus, or remainder; when one
integer is divided by another.
syntax: numeric_expression MOD numeric_expression
example: i. PRINT 5 MOD 2 {will print 1}
ii. PRINT 5 MOD 3 {will print 2}
MODE screen
MODE sets the resolution of the screen and the number of solid colours
which it can display. MODE will clear all windows currently on the
screen, but will preserve their position and shape. Changing to low
resolution mode (8 colour) will set the minimum character size to 2,0.
syntax: MODE numeric_expression
where: 8 or 256 will select low resolution mode
4 or 512 will select high resolution mode
example: i. MODE 256
ii. MODE 4
MOVE turtle graphics
MOVE will move the graphics turtle in the window attached to the
default or specified channel a specified distance in the current
direction. The direction can be specified using the TURN and TURNTO
commands. The graphics scale factor is used in determining how far the
turtle actually moves. Specifying a negative distance will move the
turtle backwards.
The turtle is moved in the window attached to the specified or default
channel.
syntax: distance:= numeric_expression
MOVE [channel,] distance
example: i. MOVE #2,20
{move the turtle in channel 2 20 units forwards}
ii. MOVE -50
{move the turtle in the default channel 50 units backwards}
MRUN devices microdrives
MRUN will interpret a file as a SuperBASIC program and merge it with
the currently loaded program.
If used as direct command MRUN will run the new program from the
start. If used as a program statement MRUN will continue processing on
the line following MRUN. If a line input during a merge has incorrect
SuperBASIC syntax, the word MISTAKE is inserted between the line
number and the body of the line. Upon execution, a line of this sort
will generate an error.
syntax: MRUN device
example: i. MRUN mdv1_chain_program
ii. MRUN mdv1_new_data
NET network
NET allows the network station number to be set. If a station number
is not explicitly set then the QL assumes station number 1.
syntax: station:= numeric_expression (range 1..127}
NET station
example: i. NET 63
ii. NET 1
Confusion may arise if more than one station on the network has the
same station number:
NEW
NEW will clear out the old program, variables and channels other than
0,1 and 2.
syntax: NEW
example: NEW
NEXT repetition
NEXT is used to terminate, or create a loop epilogue in, REPeat and
FOR loops.
syntax: NEXT identifier
The identifier must match that of the loop which the NEXT is to
control
example:
i. 10 REMark this loop must repeat forever
11 REPeat infinite loop
12 PRINT "sti LI looping"
13 NEXT infinite loop
ii. 10 REMark this loop will repeat 20 times
11 LET limit = 20
12 FOR index=1 TO Limit
13 PRINT index
14 NEXT index
iii. 10 REMark this Loop will tell you when a 30 is found
11 REPeat Loop
12 LET number = RND(1 TO 100)
13 IF number = 30 THEN NEXT Loop
14 PRINT number; " is 30"
15 EXIT LOOP
16 END REPeat loop
If NEXT is used inside a REPeat - END REPeat construct it will force
processing to continue at the statement following the matching REPeat
statement.
The NEXT statement can be used to repeat the FOR loop with the control
variable set at its next value. If the FOR loop is exhausted then
processing will continue at the statement following the NEXT;
otherwise processing will continue at the statement after the FOR.
ON...GOTO
ON...GOSUB
To provide compatibility with other BASICs, SuperBASIC supports the ON
GOTO and ON GOSUB statements. These statements allow a variable to
select from a list of possible line numbers a line to process in a
GOTO or GOSUB statement. If too few line numbers are specified in the
list then an error is generated.
syntax: ON variable GOTO expression *[, expression]*
ON variable GOSUB expression *[, expression]*
example: i. ON x GOTO 10, 20, 30, 40
ii. ON select_variable GOSUB 1000,2000,3000,4000
comment: SELect can be used to replace these two BASIC commands.
OPEN
OPEN_IN
OPEN_NEW devices Microdrives
OPEN allows the user to link a logical channel to a physical QL device
for I/O purposes. If the channel is to a Microdrive then the
Microdrive file can be an existing file or a new file. In which case
OPEN_IN will open an already existing Microdrive file for input and
OPEN_NEW will create a new Microdrive file for output.
syntax: channel:= # numeric_expressicn
OPEN channel, device
example: i. OPEN #5, f_name$
ii. OPEN_IN #9,"mdv1_filename" {open file mdvl_file__name}
iii. OPEN_NEW #7,mdv1_datafile {open file mdvl_datafile}
iv. OPEN #6,con_10x20a20x2032
{Open channel 6 to the console device creating a window size 10x20
pixels at position 20,20 with a 32 byte keyboard type ahead buffer.}
v. OPEN #8,mdv1_read_write_file.
OVER windows
OVER selects the type of over printing required in the window attached
to the specified or default channel. The selected type remains in
effect until the next use of OVER.
syntax: switch:= numeric_expression [range -1..i]
OVER [channel,] switch
where switch = 0 - print ink on strip
switch = 1 - print in ink on transparent stnp
switch = -1 - XORs the data on the screen
example: i. OVER 1 {set "overprinting")
ii. 10 REMark Shadow Writing
11 PAPER 7 : INK O : OVER 1 : CLS
12 CSIZE 3,1
13 FOR i = 0 TO 10
14 CURSOR i,i
15 IF i=10 THEN INK 2
16 PRINT "Shadow"
17 END FOR i
PAN windows
PAN the entire current window the specified number of pixels to the
left or the right. PAPER is scrolled in to fill the clear area.
An optional second parameter can be specified which will allow only
part of the screen to be panned.
syntax: distance:= numeric_expression
part:= numeric_expression
PAN [channel,] distance [, part]
where part = 0 - whole screen (or no parameter)
part = 3 - whole of the cursor line
part = 4 - right end of cursor line including the cursor
position
If the expression evaluates to a positive value then the contents of
the screen will be shifted to the right.
example:
i. PAN #2,50 {pan left 50 pixels}
ii. PAN -100 {pan right 100 pixels}
iii. PAN 50.3 {pan the whole of the current cursor line 50 pixels
to the right}
If stipples are being used or the screen is in low resolution mode
then, to maintain the stipple pattern, the screen must be panned in
multiples of two pixels.
PAPER windows
PAPER sets a new paper colour tie. the colour which will be used byCLS, PAN, SCROLL, etc). The selected paper colour remains in effect
until the next use of PAPER. PAPER will also set the STRIP colour
PAPER will change the paper colour in the window attached to the
specified or default channel.
syntax: PAPER [channel,] colour
example: i. PAPER #3,7 {White paper on channel 3}
ii. PAPER 7,2 {White and red stipple}
iii. PAPER 255 {Black and white stipple}
iv. 10 REMark Show colours and stipples
11 FOR colour = 0 TO 7
12 FOR contrast = 0 TO 7
13 FOR stipple = 0 TO 3
14 PAPER colour, contrast, stipple
15 SCROLL 6
16 END FOR stipple
17 END FOR cent rest
18 END FOR colour
PAUSE
PAUSE will cause a program to wait a specified period of time delays
are specified in units of 20ms in the UK only, otherwise 16.67ms. If
no delay is specified then the program will pause indefinitely.
Keyboard input will terminate the PAUSE and restart program execution.
syntax: delay:= numeric_expression
PAUSE [delay]
example: i. PAUSE 50 {wait 1 second}
ii. PAUSE 500 {wait 10 seconds}
PEEK
PEEICW
PEEK_L BASIC
PEEK is a function which returns the contents of the specified memory
location. PEEK has three forms which will access a byte (8 bits), a
word (16 bits), or a long word (32 bits).
syntax: address:= numeric_expression
PEEK(address) {byte access}
PEEK_W(address) {word access}
PEEK_L(address) {long word access}
example: i. PRINT PEEK(12245) {byte contents of location 12245}
ii. PRINT PEEK_W(12) {word contents of locations 12 and 13}
iii. PRINT PEEK_L(1000) {long word contents of location 1000}
Warning: For word and long word access the specified address must be
an even address.
PENUP
PENDOWN turtle graphics
Operates the 'pen' in turtle graphics. If the pen is up then nothing
will be drawn. If the pen is down then lines will be drawn as the
turtle moves across the screen.
The line will be drawn in the window attached to the specified or
default channel. The line will be drawn in the current ink colour for
the channel to which the output is directed.
syntax: PENUP [channel]
PENDOWN [channel]
example: i. PENUP {will raise the pen in the default channel}
ii. PENDOWN #2 {will lower the pen in the window attached to
channel 2}
PI maths function
PI is a function which returns the value of x.
syntax: PI
example: PRINT PI
POINT
POINT_R graphics
POINT plots a point at the specified position in the window attached
to the specified or default channel. The point is plotted using the
graphics coordinates system relative to the graphics origin. If
POINT_R is used then all points are specified relative to the
graphics cursor and are plotted relative to each other. Multiple
points can be plotted with a single call to POINT.
syntax: x:=numeric_expression
y:=numeric_expression
parameters:= x,y
POINT [channel,] parameters* [,parameters]*
example: i. POINT 256,128 {plot a point at (256,128)}
ii. POINT x,x*x {plot a point at (x,x*x)}
iii. 10 REPeat example
20 INK RND(255)
30 POINT RND(100),RND(100)
40 END REPeat example
POKE
POKL_W
POKE_L BASIC
POKE allows a memory location to be changed. For word and long word
accesses the specified address must be an even address.
POKE has three forms which will access a byte (8 bits), a word (16
bits), a long word (32 bits).
syntax: address:= numeric_expression
data:= numeric_expression
POKE address, data {byte access}
POKE_W address, data {word access}
POKE_L address, data {long word access}
example: i. POKE 12235,0 {set byte at 12235 to O}
ii. POKE_L 131072,12345 {set long word at 131072 to 12345}
Warning: Poking data into areas of memory used by Qdos can cause the
system to crash and data to be lost. Poking into such areas is not
recommended.
PRINT devices microdrives
Allows output to be sent to the specified or default channel. The
normal use of PRINT is to send data to the QL screen.
Syntax: separator:= | !
| ,
| \
| ;
| TO numeric_expression
item:= | expression
| channel
| separator
PRINT *[item]*
Multiple print separators are allowed. At least one separator must
separate channel specifications and expressions.
Example: i. PRINT "Hello World"
{will output Hello World on the default output device (channel 1)}
ii. PRINT #5,"data",1,2,3,4
{will output the supplied data to channel 5 (which must have been
previously opened)}
iii. PRINT TO 20; "This is in column 20"
! - Normal action is to insert a space between items output on the
screen. If the item will not fit on the current line a line feed will
be generated. If the current print position is at the start of a line
then a space will not be output. ! affects the next item to be
printed and therefore must be placed in front of the print item being
printed. Also a ; or a ! must be placed at the end of a print list if
the spacing is to be continued over a series of PRINT statements.
, - Normal separator, SuperBASIC will tabulate output every 8 columns.
\ - Will force a new line.
; - Will leave the print position immediately after the last item to
be printed. Output will be printed in one continuous stream.
TO - Will perform a tabbing operation. TO followed by a
numeric_expression will advance the print position to the column
specified by the numeric_expression. If the requested column is
meaningless or the current print position is beyond the specified
position then no action will be taken.
RAD maths functions
RAD is a function which will convert an angle specified in degrees to
an angle specified in radians.
syntax: RAD (numeric_expressio
example: PRINT RAD(180) {will print 3.141593}
RANDOMISE maths functions
RANDOMISE allows the random number generator to be reseeded. If a
parameter is specified the parameter is taken to be the new seed. If
no parameter is specified then the generator is reseeded from internal
information.
syntax: RANDOMISE [numeric_expression]
example: i. RANDOMISE {set seed to internal data}
ii. RANDOMISE 3.2235 {set seed to 3.2235}
RECOL windows
RECOL will recolour individual pixels in the window attached to the
specified or default channel according to some preset pattern. Each
parameter is assumed to specify, in order, the colour in which each
pixel is recoloured, i.e. the first parameter specifies the colour
with which to recolour all black pixels, the second parameter blue
pixels, etc.
The colour specification must be a solid colour, i.e. it must be in
the range O to 7.
syntax: c0:= new colour for black
c1:= new colour for blue
c2:= new colour for red
c3:= new colour for magenta
c4:= new colour for green
c5:= new colour for cyan
c6:= new colour for yellow
c7:= new colour for white
RECOL [channel ,] c0, cl, c2, c3, c4, c5, c6, c7
example:
RECOL 2,3,4,5,6,7,1,0 {recolour blue to magenta, red to green,
magenta to cyan etc.}
REMark
REMark allows explanatory text to be inserted into a program. The
remainder of the line is ignored by SuperBASIC.
syntax: REMark text
example: REMark This is a comment in a program
REMark is used to add comments to a program to aid clarity.
RENUM
RENUM allows a group or a series of groups of SuperBASIC line numbers
to be changed. If no parameters are specified then RENUM will renumber
the entire program. The new listing will begin at line 100 and proceed
in steps of 10.
If a start line is specified then line numbers prior to the start line
will be unchanged. If an end line is specified then line numbers
following the end line will be unchanged.
If a start number and stop are specified then the lines to be
renumbered will be numbered from the start number and proceed in steps
of the specified size.
If a GOTO or GOSUB statement contains an expression starting with a
number then this number is treated as a line number and is renumbered.
syntax: startline:= numeric_expression {start renumber}
end_line:= numeric_expression {stop renumber}
start_number:= numeric_expression {base line number} step:= numeric_expression {step}
RENUM [start_line [TO end_line];] [startnumber] [,step]
example: i. RENUM {renumber whole program from 100 by 10}
ii. RENUM 100 TO 200 {renumber from 100 to 200 by 10}
Comment: No attempt must be made to use RENUM to renumber program
lines out of sequence, ie to move lines about the program. RENUM
should not be used in a program.
REPeat
END REPeat repetition
REPeat allows general repeat loops to be constructed. REPeat should be
used with EXIT for maximum effect. REPeat can be used in both long and
short forms:
SHORT: The REPEAT keyword and loop identifer are followed on the same
logical line by a colon and a sequence of SuperBASIC statements. EXIT
will resume normal processing at the next logical line.
syntax: REPeat identifier : statements
example: REPeat wait : IF INKEY$ = "" THEN EXIT wait
LONG: The REPEAT keyword and the loop identifier are the only
statements on the logical line. Subsequent lines contain a series of
SuperBASIC statements terminated by an END REPeat statement.
The statements between the REPeat and the END REPeat are repeatedly
processed by SuperBASIC.
syntax: REPeat identifier
statements
END REPeat identifier
example:
10 LET number = RND(1 TO 50)
11 REPeat guess
12 INPUT "What is your guess?", guess
13 IF guess = number THEN
14 PRINT "You have guessed correctly"
15 EXIT guess
16 ELSE
17 PRINT "You have guessed incorrectly"
18 END IF
19 END REPeat guess
Comment: Normally at least one statement in a REPeat loop will be an
EXIT statement.
RESPR Qdos
RESPR is a function which will reserve some of the resident procedure
space. (For example to expand the SuperBASIC procedure list.)
syntax: space:= numeric_expression
RESPR (space)
example:
PRINT RESPR(1024) {will print the base address of a 1024 byte block}
RETurn functions and procedures
RETurn is used to force a function or procedure to terminate and
resume processing at the statement after the procedure or function
call. When used within a function definition them RETurn statement is
used to return the function's value.
syntax: RETern [expression]
example:
i. 100 PRINT ack (3,3)
110 DEFine FuNction ack(m,n)
120 IF m=0 THEN RETurn n+l
130 IF n=0 THEN RETurn ack (m-l,l)
140 RETern a c k (m-l ,a c k (m, n-l ) )
150 END DEFine
ii. 10 LET warning_flag =1
11 LET error_number = RND(0 TO 10)
12 warning error_number
13 DEFine PROCedure warning(n)
14 IF warning_flag THEN
15 PRINT "WARNING:";
16 SELect ON n
17 ON n =1
18 PRINT "Microdrive full"
19 ON n = 2
20 PRINT "Data space full"
21 ON n = REMAINDER
22 PRINT "Program error"
23 END SELect
24 ELSE
25 RETurn
26 END IF
27 END DEFine
It is not compulsory to have a RETurn in a procedure. If processing
reaches the END DEFine of a procedure then the procedure will return
automatically.
RETurn by itself is used to ieturn from a GOSUB.
RND maths function
RND generates a random number. Up to two parameters may be specified
for RND. If no parameters are specified then RND returns a pseudo
random floating point number in the exclusive range 0 to 1. If a
single parameter is specified then RND returns an integer in the
inclusive range 0 to the specified parameter. If two parameters are
specified then RND returns an integer in the inclusive range specified
by the two parameters.
syntax: RND( [numeric_expression] [TO numeric_expression])
example: i. PRINT RND {floating point number between 0 and 1}
ii. PRINT RND(10 TO 20) {integer between 10 and 20}
iii. PRINT RND(1 TO 6) {integer between 1 and 6}
iv. PRINT RND(10) {integer between 0 and 10}
RUN
program RUN allows a SuperBASIC program to be started. If a line
number is specified in the RUN command then the program will be
started at that point, otherwise the program will start at the lowest
line number.
syntax: RUN [numeric_expression]
example: i. RUN {run from start}
ii. RUN 10 {run from line 10}
iii. RUN 2*20 {run from line 40}
Comment: Although RUN can be used within a program its normal use is
to start program execution by typing it in as a direct command.
SAVE devices microdrives
SAVE will save a SuperBASIC program onto any QL device.
syntax: line:= | numeric_expression TO numeric_expression (1)
| numeric_expression TO (2)
| TO numeric_expression (3)
| numeric_expression (4)
| (5)
SAVE device *[,line]*
where (1) will save from the specified line to the specified line
(2) will save from the specified line to the end
(3) will save from the start to the specified line
(4) will save the specified line
(5) will save the whole program
example:
i. SAVE mdv1_program,20 TO 70 {save lines 20 to 70 on mdv1_program}
ii. SAVE mdv2_test_program,10,20,40 {save lines 10,20,40 on
mdv1_test_program}
iii. SAVE net3 {save the entire program on the network}
iv. SAVE ser1 {save the entire program on serial channel }
SBYTES devices microdrives
SBYTES allows areas of the QL memory to be saved on a QL device
syntax: start_address:= numeric_expression
length:= numeric_expression
SBYTES device, start_address, length
example: i. SBYTES mdv1_screendata,131072,32768
{save memory 50000 length 10000 bytes on mdv1_test_program}
ii. SBYTES mdv1_test_program,50000,10000
{save memory 50000 length 1000 bytes on mdvl_test_program}
iii. SBYTES neto_3,32768,32678
{save memory 32768 length 32768 bytes on the network}
iv. SBYTES ser1,0,32768
{save memory 0 length 32768 bytes on serial channel 1}
SCALE graphics
SCALE allows the scale factor used by the graphics procedures to be
altered. A scale of 'x' implies that a vertical line of length 'x'
will fill the vertical axis of the window in which the figure is
drawn. A scale of 100 is the default. SCALE also allows the origin of
the coordinate system to be specified. This effectively allows the
window being used for the graphics to be moved around a much larger
graphics space.
syntax: x:=numeric_expression
y:=numeric_expression
origin:= x,y
scale:= numeric_expression
SCALE [channel,] scale, origin
example:
i. SCALE 0.5,0.1,0.1 {set scale to 0.5 with the origin at 0.1,0.l}
ii. SCALE 10,0,0 {set scale to 10 with the origin at 0,0}
iii. SCALE 100,50,50 {set scale to 100 with the origin at 50,50}
SCROLL windows
SCROLL scrolls the window attached to the specified or default channel
up or down by the given number of pixels. Paper is scrolled in at the
top or the bottom to fill the clear space.
An optional third parameter can be specifiedto obtain a part screen
scroll.
syntax: part:= numeric_expression
distance:= numeric_expression
where part = 0 - whole screen (default is no parameter)
part = 1 - top excluding the cursor line
part = 2 - bottom excluding the cursor line
SCROLL [channel,] distance [, part]
If the distance is positive then the contents of the screen will be
shifted down.
example: i. SCROLL 10 {scroll down 10 pixels}
ii. SCROLL -70 {scroll up 70 pixels}
iii. SCROLL -10,2 {scroll the lower part of the window up 10
pixels}
SDATE clock
The SDATE command allows the QCs clock to be reset.
syntax: year:= numeric_expression
month:= numeric_expression
day:= numeric_expression
hours:= numenc_express,on
minutes:= numeric_expression
seconds:= numeric_expression
SDATE year, month, day, hours, minutes, seconds
example: i. SDATE 1984,4,2,0,0,0
ii. SDATE 1984,1,12,9,30,0
iii. SDATE 1984,3,21,0,0,0
SELect
END SELect conditions
SELect allows various courses of action to be taken depending on the
value of a variable.
define: select_variable:= numeric_variable
select_item:= | expression
| expression TO expression
select_list:= | select_item *[, select_item]*
LONG: Allows multiple actions to be selected depending on the value
of a selectvariable. The select variable is the last item on the
logical line. A series of SuperBASIC statements follows, which is
terminated by the next ON statement or by the END SELect statement. If
the select item is an expression then a check is made within
approximately 1 part in 10-', otherwise for expression TO expression
the range is tested exactly and is inclusive. The ON REMAINDER
statement allows a, "catch-all" which will respond if no other select
conditions are satisfied.
syntax: SELect ON select_variable
*[[ON select_variable] = select_list
statements] *
[ON selectvariable] = REMAINDER
statements
END SELect
example:
100 LET error number = RND(1 TO 10)
110 SELect ON error_number
120 ON error_number =1
130 PRINT "Divide by zero"
140 LET error_number = 0
150 ON error_number = 2
160 PRINT "File not found"
170 LET error_number = 0
180 ON error_number = 3 TO 5
190 PRINT "Microdrive file not found"
200 LET error_number = 0
210 ON error_number = REMAINDER
220 PRINT "Unknown error"
230 END SELect
If the select variable is used in the body of the SELect statement
then it must match the select variable given in the select header.
SHORT: The short form of the SELect statement allows simple single
line selections to be made. A sequence of SuperBASIC statements
follows on the same logical line as the SELect statement. If the
condition defined in the select statement is satisfied then the
sequence of SuperBASIC statements is processed.
syntax: SELect ON select_variable = select_list : statement *[:
statement] *
example:
i. SELect ON test data =1 TO 10 :
PRINT "Answer within range"
ii. SELect ON answer = 0.00001 TO 0.00005 : PRINT "Accuracy OK"
iii. SELect ON a =1 TO 10 : PRINT a ! "in range"
Comment: The short form of the SELect statement allows ranges to be
tested more easily than with an IF statement. Compare example ii.
above with the corresponding IF statement.
SEXEC Qdos
Will save an area of memory in a form which is suitable for loading
and executing with the EXEC command.
The data saved should constitute a machine code program.
Syntax: start_address:= numeric_expression {start of area}
length:= numeric_expression {length of area}
data_space:=numeric_expression
{length of data area which will be required by the program}
SEXEC device, start_address, length, data_space
example: SEXEC mdv1_program,262144,3000,500
The Qdos system documentation should be read before attempting to use
this command.
SIN maths function
SIN will compute the sine of the specified parameter.
syntax: angle:= numeric_expression {range -10000..10000 in radians}
SIN(angle)
example: i. PRINT SIN(3)
ii. PRINT SIN(3.141592654/2)
SQRT maths function
will compute the square root of the specified argument. The argument
must be greater maths functions than or equal to zero.
syntax: SORT (numeric_expression) {range >= 0}
example: i. PRINT SQRT(3) {print square root of 3}
ii. LET C = SQRT(a^2+b^2)
{let c become equal to the square root of a^2 + b^2}
STOP BASIC
STOP will terminate execution of a program and will return SuperBASIC
to the command BASIC interpreter.
syntax: STOP
example: i. STOP
ii. IF n =100 THEN STOP
You may CONTINUE after STOP. The last executable line of a program
will act as an automatic stop.
STRIP windows
STRIP will set the current strip colour in the window attached to the
specified or default channel. The strip colour is the background
colour which is used when OVER 1 is selected. Setting PAPER will
automatically set the strip colour to the new PAPER colour.
syntax: STRIP [channel,] colour
example: i. STRIP 7 {set a white strip}
ii. STRIP 0,4,2 {set a black and green stipple strip}
Comment: The effect of STRIP is rather like using a highlighting pen.
TAN maths functions
TAN will compute the tangent of the specified argument. The argument
must be in the range -30000 to 30000 and must be specified in radians.
syntax: TAN (numeric_expression) {range -30000..30000}
example: i. TAN(3) {print tan 3}
ii. TAN(3.141592654/2) {print tan PI/2}
TURN
TURNTO turtle graphics
TURN allows the heading of the 'turtle' to be turned through a
specified angle while TURNTO allows the turtle to be turned to a
specific heading.
The turtle is turned in the window attached to the specified or
default channel.
The angle is specified in degrees. A positive number of degrees will
turn the turtle anti-clockwise and a negative number will turn it
clockwise.
Initially the turtle is point at 09 that is to the right hand side of
the window.
syntax: angle:= numeric_expression {angle in degrees}
TURN [channel,] angle
TURNTO [channel,] angle
example: i. TURN 90 {turn through 90 degrees}
ii. TURNTO 0 {turn to heading 0 degrees}
UNDER windows
Turns underline either on or off for subsequent output lines.
Underlining is in the current INK colour in the window attached to the
specified oi default channel.
syntax: switch:= numeric_expression {range 0..1}
UNDER [channel,] switch
example: i. UNDER 1 {underlining on}
ii. UNDER 0 {underlining off}
WIDTH
WINDOW windows
WIDTH allows the default width for non-console based devices to be
specified, for example printers.
syntax: line_width:= numeric_expression
WIDTH [channel,] line_width
example: i. WIDTH 80 {set the device width to 80}
ii. WIDTH #6,72 {set the width of the device attached to
channel 6 to 72}
WINDOW windows
Allows the user to change the position and size of the window attached
to the specified or default channel. Any borders are removed when the
window is redefined. Coordinates are specified using the pixel system
relative to the screen origin.
syntax: width:= numeric_expression
depth:= numeric_expression
x:=numeric_expression
y:=numeric_expression
WINDOW [channel,] width, depth, x, y
example: WINDOW 30, 40, 10, 10 {window 30x40 pixels at 10,10}
               (
geocities.com/siliconvalley/pines/Pines)                   (
geocities.com/siliconvalley/pines)                   (
geocities.com/siliconvalley)