Macaulay provides some rudimentary ``control flow'' for jumping around in scripts. These commands basically tell the preprocessor which handles scripts to start reading the scripts in different places. In other words, Macaulay scripts are interpretted, not compiled. This is not a serious speed disadvantage for two reasons. First, most of the time is spend actually computing things like standard bases and free resolutions, not figuring out what commands mean. Second, it usually takes the host computer's operating system far longer to find scripts as they are called, than it takes Macaulay to scan an entire script once found. Thus jumps within a script are faster that calls to other scripts, which is itself faster than the actual computations.
Macaulay jumps around in scripts using labels. A label is anything at the beginning of a line (ignoring leading white space) up to a colon ``:''. Labels are ignored by Macaulay for all purposes besides if statments and jumps. When Macaulay is directed by an if statement or a jump to continue reading input from a label, it starts scanning the script file from the beginning, until it finds the label. It begins executing statements on the line of the label, or on the next line if the label is on a line of its own.
A jump statement takes the form ``jump label'', and sends Macaulay careening off in search of this label. An if statement takes the form ``if condition label'' or ``if condition label label2''. In the first form, Macaulay jumps to ``label:'' if the condition is true. In the second form, Macaulay jumps instead to ``label2:'' (rather than just continuing on from where it was) if the condition is false.