Macaulay is capable of receiving its input from either the keyboard or from a text file, which we shall call a script. When Macaulay starts up, it expects its input from the keyboard. (This is called standard input in Unix circles; you can make Macaulay start instead from a text file named ``script'' from Unix by typing ``Macaulay <script'' to start Macaulay, but we shall assume that you have just typed ``Macaulay'' to start Macaulay.) We call the initial source of Macaulay's input ``voice 0''. Inside a Macaulay session, you can cause Macaulay to switch over to reading from a text file named ``file'' by entering ``<script''. When you do this, Macaulay calls this new input source ``voice 1'', and it keeps track of what voice 0 was so it can go back to it after voice 1 ends. A voice ends either when Macaulay encounters a dollar sign $, or when the file itself ends. If voice 0 ends, Macaulay quits.
This process can be iterated many times; you can tell Macaulay to take its input from a file, which later tells Macaulay to take its input from a second file. When voice 2 ends, Macaulay goes back to voice 1 (which may later start another voice 2, etc.), and when voice 1 ends, Macaulay returns to voice 0, the same state in which it started. There is a rather large limit to the number of possible input voices which Macaulay can stack up at any one time; we'd love to hear from you if you bump into it.
If Macaulay is in a voice ;SPMgt; 0, you can tell what this current voice is by Macaulay's prompt characters: type n%, where n is the voice number. When you interrupt a computation, Macaulay creates a new voice to take input from the keyboard (your scripts are still there, waiting for the suspended computation to finish). In this case, the prompt indicates that a previous environment is suspended, and that an inner environment now also exists. For example, the prompt ``2% 3%'' indicates that a computation initiated by voice 2 is suspended, and that voice 3 now controls Macaulay.