A TAG is a branch target anywhere in the body it belongs to, including inside
an IF, DOW, DOU, FOR, SELECT, or MONITOR block. GOTO and CABxx
reach a nested TAG from inside the same block, from a block nested deeper, or
from outside the block entirely.
C EVAL Count = 1
C 1 IFEQ 1
C GOTO SKIP
C EVAL Count = 99
C SKIP TAG
C ENDIF
Branching into a block skips the block's own entry test. Control lands on the
TAG and the remainder of the block body runs; the IF condition or loop
condition is not re-evaluated on that entry path, and the block is then left
normally:
C EVAL Count = 1
C GOTO INSIDE
C 1 IFEQ 2
C INSIDE TAG
C EVAL Count = Count + 5
C ENDIF
Count ends at 6 even though the IF condition is false, because the branch
never ran the test.
GOTO may not cross the boundary between the mainline calculations and a
subroutine, in either direction - a label in a subroutine is reachable only
from within that subroutine. GOTO and TAG are fixed-format-only opcodes;
they have no free-format spelling.