 |
HP OpenVMS DCL Dictionary
GOTO
Transfers control to a labeled statement in a command procedure.
Format
GOTO label
Parameter
label
Specifies a label of 1 to 255 alphanumeric characters that appears as
the first item on a command line. A label cannot contain embedded
blanks. When the GOTO command is executed, control passes to the
command following the specified label.
When you use a label in a command procedure, it must be terminated with
a colon (:). If you use duplicate labels, control is always given to
the label most recently read by DCL.
Description
Use the GOTO command in command procedures to transfer control to a
line that is not the next line in the procedure. The label can precede
or follow the GOTO statement in the current command procedure. If the
command stream is not being read from a random-access device (that is,
a disk device), the GOTO command performs no operation.
If the target label of a GOTO command is inside a separate IF-THEN-ELSE
construct, an error message (DCL-W-USGOTO) is returned.
When the command interpreter encounters a label, it enters the label in
a label table. This table is allocated from space available in the
local symbol table. If the command interpreter encounters a label that
already exists in the table, the new definition replaces the existing
one. Therefore, if you use duplicate labels, control is always given to
the label most recently read by DCL. In general:
- If duplicate labels precede and follow the GOTO command, control is
given to the label preceding the command.
- If duplicate labels all precede the GOTO command, control is given
to the most recent label, that is, the one nearest the GOTO command.
- If duplicate labels all follow the GOTO command, control is given
to the one nearest the GOTO command.
If a label does not exist in the current command procedure, the
procedure cannot continue and is forced to exit.
Note that the amount of space available for labels is limited. If a
command procedure uses many symbols and contains many labels, the
command interpreter may run out of table space and issue an error
message.
Examples
#1 |
$ IF P1 .EQS. "HELP" THEN GOTO TELL
$ IF P1 .EQS. "" THEN GOTO TELL
.
.
.
$ EXIT
$ TELL:
$ TYPE SYS$INPUT
To use this procedure, you must enter a value for P1.
.
.
.
$ EXIT
|
In this example, the IF command checks the first parameter passed to
the command procedure; if this parameter is the string HELP or if the
parameter is not specified, the GOTO command is executed and control is
passed to the line labeled TELL; otherwise, the procedure continues
executing until the EXIT command is encountered. At the label TELL, a
TYPE command displays data in the input stream that documents how to
use the procedure.
#2 |
$ ON ERROR THEN GOTO CHECK
.
.
.
$ EXIT
$ CHECK: ! Error handling routine
.
.
.
$ END:
$ EXIT
|
The ON command establishes an error-handling routine. If any command or
procedure subsequently executed in the command procedure returns an
error or severe error, the GOTO command transfers control to the label
CHECK.
|