Der Befehl QUEUE dient dazu, einen Datenstrom so aufzubereiten, daß er von einer Kommando-Shell oder einem anderen Programm gelesen werden kann. Er ist dem Befehl PUSH sehr ähnlich und unterscheidet sich von ihm nur insofern, als die Datenzeilen in der Reihenfolge "first-in, first-out" (Ausgabe in gleicher Reihenfolge wie die Eingabe) in dem STDIN-Datenstrom gestellt werden. In diesem Fall würden die Befehle:
QUEUE Zeile 1
QUEUE Zeile 2
QUEUE Zeile 3
in der Reihenfolge Zeile 1, 2, 3 gelesen. Die mit QUEUE gestapelten Zeilen gehen stets allen interaktiv eingegebenen Zeilen vor und folgen stets nach den mit PUSH gestapelten Zeilen. Beispiel:
DO i=1 to 5
QUEUE `echo "Zeile `i'"'
END
RETURN dient dazu, eine Funktion zu verlassen und die Steuerung an den Punkt zurückzugeben, von dem aus der vorherige Funktionsaufruf erfolgte. Der ausgewertete Ausdruck wird als Resultat der Funktion zurückgegeben. Wird kein Ausdruck angegeben, kann es in der Umgebung der Aufrufebene zu einem Fehler kommen. Funktionen, die von einem Ausdruck aus aufgerufen werden, müssen eine Resultatzeichenfolge zurückgeben. Ist kein Ergebnis verfügbar, kommt es zu einem Fehler. Funktionen, die vom Befehl CALL aufgerufen werden, brauchen kein Ergebnis zurückzugeben.
Wird von der Basisumgebung eines Programms ein RETURN ausgegeben, ist dies kein Fehler, sondern entspricht dem Befehl EXIT (Programm verlassen). Im Abschnitt zum Befehl EXIT wird beschrieben, wie Ergebniszeichenfolgen an eine externe Aufrufebene zurückgeleitet werden. Beispiel:
Das Ergebnis des ausgewerteten Ausdrucks wird - mit einem angefügten Zeichen für Zeilenvorschub - in die Ausgabekonsole geschrieben. Wird der Ausdruck weggelassen, wird eine leere Zeichenfolge an die Konsole gesendet. Beispiel:
SELECT beginnt einen Befehlsblock, der eine oder mehrere WHEN-Klauseln und möglicherweise eine OTHERWISE-Klausel enthält. Auf jeder Klauseln folgt eine bedingte Anweisung. Es wird nur eine der bedingten Anweisungen innerhalb der SELECT-Gruppe ausgeführt. Zunächst werden die einzelnen WHEN-Anweisungen nacheinander ausgeführt, bis eine zutrifft. Trifft keine zu, wird die OTHERWISE-Anweisung ausgeführt. Der SELECT-Bereich muß durch eine END-Anweisung abgeschlossen werden. Beispiel:
SELECT
WHEN i=1 THEN SAY `eins'
WHEN i=2 THEN SAY `zwei'
OTHERWISE SAY `andere'
END
Der Befehl SHELL ist gleichbedeutend mit dem Befehl ADDRESS. Beispiel:
SHELL edit /*Host auf `EDIT' setzen*/
SIGNAL {ON | OFF} steuert den Status der internen Unterbrechungskennzeichen (interrupt flags). Unterbrechungen ermöglichen es einem Programm, beim Auftreten bestimmter Fehler diese zu erkennen und die Steuerung zu behalten. In diesem Fall muß auf SIGNAL eines der Schlüsselwörter ON oder OFF und eines der im folgenden beschriebenen Bedingungsschlüsselwörter folgen. Das im Bedingungssymbol angegebene Unterbrechungskennzeichen wird dann auf den angegebenen Status gesetzt. Gültige Signalbedingungen sind:
Die Bedingungsschlüsselwörter werden als Sprungmarken interpretiert, an die die Steuerung übertragen wird, wenn die ausgewählte Bedingung eintritt. Ist z.B. die ERROR-Unterbrechung aktiviert und ein Kommando gibt einen Wert ungleich Null zurück, überträgt ARexx die Steuerung an die Sprungmarke ERROR:. Diese Bedingungssprungmarke muß natürlich im Programm definiert sein. Andernfalls kommt es sofort zu einem SYNTAX-Fehler, und das Programm wird verlassen.
In IGNAL [WERT] Ausdruck werden die auf SIGNAL folgenden Token als Ausdruck ausgewertet. Es wird eine sofortige Unterbrechung generiert, die die Steuerung an die im Ausdrucksergebnis definierte Sprungmarke übergibt. Der Befehl hat also den Effekt eines "berechneten GOTO".
Sobald eine Unterbrechung eintritt, werden alle derzeit aktiven Steuerbereiche (IF, DO, SELECT, INTERPRET oder interaktiver TRACE) vor der Steuerungsübergabe inaktiviert. Die Übergabe kann also nicht dazu verwendet werden, in den Bereich einer DO-Schleife oder einer anderen Steuerungsstruktur zu springen. Da sich eine SIGNAL-Bedingung nur auf die Steuerungsstrukturen der aktuellen Umgebung auswirkt, ist es gefahrlos möglich, innerhalb einer internen Funktion ein SIGNAL auszulösen. Der Status der Aufrufumgebung wird dadurch nicht berührt.
Die Sondervariable SIGL wird, sobald es zu einer Steuerungsübertragung kommt, auf die aktuelle Zeilennummer gesetzt. Das Programm kann anhand einer Überprüfung von SIGL feststellen, welche Zeile vor der Übertragung der Steuerung ausgeführt wurde. Verursacht eine ERROR- oder SYNTAX-Bedingung eine Unterbrechung, wird die Sondervariable RC auf den Fehlercode gesetzt, der die Unterbrechung auslöste. Im Fall der ERROR-Bedingung gibt dieser Code normalerweise den Schweregrad des Fehlers an. Einzelheiten zu Fehlercodes und Schweregraden finden Sie in Anhang A. Die SYNTAX-Bedingung läßt stets auf einen ARexx-Fehlercode schließen. Beispiel:
SIGNAL on erro /*Unterbrechung
aktivieren*/
SIGNAL off syntax /*SYNTAX INAKTIVIEREN*/
SIGNAL start /*Zu START springen*/
Der Befehl WHEN ist dem Befehl IF vergleichbar, ist allerdings nur innerhalb eines SELECT-Bereichs gültig. Alle WHEN-Ausdrücke werden nacheinander ausgewertet und müssen einen booleschen Wert ergeben. Ist das Ergebnis 1, wird die bedingte Anweisung ausgeführt, und die Steuerung geht an die END-Anweisung über, die SELECT beendet. THEN braucht (genau wie beim Befehl IF) nicht Bestandteil derselben Klausel zu sein. Beispiel:
SELECT
WHEN i<j THEN SAY `kleiner'
WHEN i=j THEN SAY `gleich'
OTHERWISE SAY `größer'
END