GOTO

In this section:

How to:

Reference:

The GOTO command is used to transfer control to a different Maintain Data function, to a special point within the current function, or to terminate the application.

To transfer control to a different function, it is recommended that you use the PERFORM command instead of GOTO.

Syntax: How to Use the GOTO Command

The syntax of the GOTO command is

GOTO destination [;]

where:

destination

Is one of the following:

functionname

Specifies the name of the function to which control is transferred. Maintain Data expects to find a function by that name in the procedure. You cannot use GOTO with a function that has parameters.

Top

Transfers control to the beginning of the Top function. All local variables are freed and current data source positions are retained, as are any uncommitted data source transactions.

END [KEEP|RESET]

Terminates the procedure. Control returns to whatever called the procedure. No function may be named END, as such a function would be ignored and never executed.

KEEP

Terminates a called procedure, but keeps its data (the values of its variables and data source position pointers) in memory. It remains in memory through the next call or, if it is not called again, until the application terminates.

RESET

Terminates a called procedure and clears its data from memory. This is the default.

EXIT

This is similar to GOTO END but immediately terminates all procedures in an application. This means that if one procedure calls another and the called procedure issues a GOTO EXIT, both procedures are ended by the GOTO EXIT command. No function may be named EXIT.

ENDCASE

Transfers control to the ENDCASE command in the function, and the function is exited. For information about the ENDCASE command, see CASE.

ENDREPEAT

Transfers control to the ENDREPEAT command in the current REPEAT loop. The loop is not exited. All appropriate loop counters specified on the ENDREPEAT command are incremented. For information about the REPEAT and ENDREPEAT commands, see REPEAT.

EXITREPEAT

Exits the current REPEAT loop. Control transfers to the next line after the ENDREPEAT command. For information about the REPEAT and ENDREPEAT commands, see REPEAT.

;

Terminates the command. Although the semicolon is optional, you should include it to allow for flexible syntax and better processing. For more information about the benefits of including the semicolon, see Terminating a Command's Syntax.

For example, to branch to the function named MainMenu, you would issue the command:

GOTO MainMenu

Reference: Usage Notes for GOTO

  • If the GOTO specifies a function name that does not exist in the program, an error occurs at parse time, which occurs before execution.
  • When one procedure calls another, and the called procedure has a GOTO END command, GOTO END ends only the called procedure. The calling procedure is unaffected. A GOTO END does not cause a COMMIT. This allows a called procedure to exit and have the calling program issue the COMMIT when appropriate. For information about the COMMIT command, see COMMIT.

Reference: Commands Related to GOTO

  • PERFORM. Control to another function. When the function finishes, control is returned to the command following the PERFORM.
  • CASE/ENDCASE. Allows a set of commands to be grouped together.
  • REPEAT/ENDREPEAT. Provides a general looping facility.

Using GOTO With Data Source Commands

A GOTO command can be executed in a MATCH command following an ON MATCH or ON NOMATCH command, or in NEXT following ON NEXT or ON NONEXT. The following syntax branches to the function MatchEdit when a MATCH occurs:

ON MATCH GOTO MatchEdit;

GOTO and ENDCASE

When control is transferred to a function with the GOTO command, every condition for exiting that function must contain a command indicating where control should be passed to. If an ENDCASE command is reached by either GOTO or normal program flow, and Maintain Data has not received any instructions as to where to go next, Maintain Data takes a default action and exits the procedure. ENDCASE is treated differently when GOTO and PERFORM are combined. See PERFORM for more information.

GOTO and PERFORM

It is recommended that you do not issue a GOTO command within the scope of a PERFORM command.

The scope of a PERFORM command extends from the moment at which it is issued to the moment at which control returns normally to the command or form control point immediately following it. The scope includes any additional PERFORM commands nested within it.

For example, if the Top function issues a PERFORM command to call Case One, Case One issues a PERFORM command to call Case Two. Case Two issues a PERFORM command to call Case Three, and control then returns to Case Two, returns from there to Case One, and finally returns to the Top function. You should not issue a GOTO command from the time the original PERFORM branches out of the Top function until it returns to the Top function.

If, when you code your application, you cannot know every potential run time combination of PERFORM and GOTO branches, it is recommended that you refrain from coding any GOTO commands in your application.