| .GOSUB...RETURN Statement Details. |
|
  QuickSCREEN       Details       Example       Contents       Index |
| ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
| GOSUB...RETURN Statement Details |
|
| Syntax |
|   GOSUB {linelabel1 | linenumber1} |
|   [statements] |
|   RETURN [linelabel2 | linenumber2] |
|   |
|   Argument                  Description |
|   linelabel1, linenumber1   The line number or line label that is the |
|                             first line of the subroutine. |
|   |
|   linelabel2, linenumber2   The line label or line number where the |
|                             subroutine returns. |
|   |
|   Note: BASIC's SUB and FUNCTION procedures provide a more well-structured |
|         alternative to GOSUB...RETURN subroutines. |
|   |
| In addition to RETURN with no argument, BASIC supports RETURN |
| with a line label or line number allowing a return from a subroutine |
| to the statement having the specified line number or label, instead |
| of returning to the statement after the GOSUB statement. Use |
| this line-specific type of return with care. |
|   |
| You may call a subroutine any number of times in a program. You may |
| also call a subroutine from within another subroutine. How deeply |
| you can nest subroutines is limited only by the available stack space |
| (you may increase the stack space with the CLEAR statement). |
| Subroutines that call themselves (recursive subroutines) can easily |
| run out of stack space. RETURN with a line label or line number |
| can only return control to a statement in the module-level code not |
| procedure-level code. See the example program below. |
|   |
| A subroutine may contain more than one RETURN statement. Simple |
| RETURN statements (without the linelabel2, linenumber2 option) in a |
| subroutine make BASIC branch back to the statement following the most |
| recent GOSUB statement. |
|   |
| Subroutines may appear anywhere in the program, but it is good |
| programming practice to make them readily distinguishable from the |
| main program. To prevent inadvertent entry into a subroutine, precede |
| it with a STOP, END, or GOTO statement that directs program control |
| around the subroutine. |
|   |
|                          ----- Important ----- |
| The preceding discussion of subroutines applies only to the targets of |
| GOSUB statements, not subprograms delimited by SUB statements. Entering |
| and exiting SUB blocks with GOSUB...RETURN statements is not supported. |
|                          --------------------- |