ON ... GOSUB

ON ... GOSUB


OCONV Index Level ON ... GOTO
Syntax ON index.expression GOSUB statement.label{, statement.label...}
-or-
ON index.expression GOSUB statement.label{,
  statement.label
  ,...}
Category BASIC
Type Statement
Description The "on .. gosub" statement transfers control to a local subroutine designated by a specific statement label according to the positional value of the "index.expression". The syntax also allows being specified as "on ... go sub ..." (it allows a space between "go" and "sub").

The "index.expression" produces a number that corresponds to the position of the corresponding statement label within a list of statement labels separated by commas (,).

The "index.expression" is truncated to an integer and the program executes the subroutine identified by the label number in the statement that corresponds to the truncated expression.

For example, if the expression evaluates to 1, the first subroutine is executed. If the "index.expression" evaluates to a number less than one, or to a number greater than the number of statement labels, no action is taken. Execution continues at the first executable statement following the "on ... gosub".

The local subroutine must be terminated with a "return" statement. At the end of the subroutine, the program returns to the statement following the "on...gosub" statement.

For ease of reading, the "on..gosub" statement.label list can be spread over multiple lines if each continued line is terminated with a comma (,).
Options
See Also statements & functions ON ... GOTO statement labels RETURN
Example loop
 print '1) doit  2) printit  3) deleteit'
 input response
until num(response) do repeat
if response >=1 and response <= 3 then
   on response gosub 8000,9000,9500
end

If "response" is 1, this branches to subroutine 8000. If it is 2, it branches to subroutine 9000. If it is 3, it branches to subroutine 9500.

print 'a) doit  b) printit  c) deleteit'
input response,1
on index('abc',response,1) gosub doit,printit,deleteit

In this example, the result of the "index" function is used as the "index.expression" to determine which subroutine is called.  If the response is "a", then subroutine "doit" is called, and so on.

on response gosub 10,20,30,40,50,60
,70,80,90,100,110,120,130

When the value of the "index.expression" has a large number of possible branches, readability is improved by using the multiple line syntax.
Warnings The multi-line form is NOT supported in R83.
Compatibility D3 7.0 AP R83
OCONV Index Level ON ... GOTO