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.