ON ... GOSUB
Syntax
Transfers control to one of a series of specified line numbers or labels based on the value of an expression. This statement expects a RETURN statement in the subroutine to return control to the line following the ON ... GOSUB statement.
This statement uses a jump table for faster execution.
Parameters
<expression>: An integer expression that determines which label to jump to. It can be any numeric expression.<label0>, <label1>, <label2>, ..., <labelN>: A comma-separated list of line numbers or labels. These are the destinations for control transfer based on the value of<expression>.
The value of <expression> is converted to a uByte (Unsigned Byte), so,
for example, a value of 256 will be converted to 0.
If the <expression> value is greater than the number of labels,
this instruction will be ignored and the execution will continue normally.
Example with ON ... GOSUB
In this example:
* If X is 0, the execution will jump to line 50.
* If X is 1, it will jump to line 100.
* If X is 2, it will jump to line 150.
In each block, after executing the corresponding print statement, the program sets the ok variable to 1, indicating a valid choice. Then, the RETURN statement returns control to the line following the ON ... GOSUB statement.
Remarks
- The
<expression>is evaluated, and if it results in a value outside the range 0 to N (where N is the number of labels), no action is taken. ON ... GOSUBis a structured programming alternative to multipleIF...THEN...GOSUBstatements.
Compatibility
- This statement is not compatible with Sinclair BASIC.