Bei der Verarbeitung von Befehlsdateien sollen häufig Befehle ausgeführt werden, ohne daß deren übliche Ausgabedaten im Shell-Fenster angezeigt werden. Dadurch kann vermieden werden, daß eine überflüssige Folge von Meldungen angezeigt bzw. ein Ausgabefenster zu einem ungünstigen Zeitpunkt geöffnet wird.
Soll vermieden werden, daß Daten an die Konsole ausgegeben werden, leiten Sie die Ausgabedaten des Befehls wie folgt mit dem Argument >NIL: an ein Pseudogerät um:
Durch das Argument >NIL: wird vermieden, daß die Meldung T:TempDat Deleted (T:TempDat gelöscht) bzw. Fehlermeldungen auf dem Bildschirm angezeigt werden.
Soll die Konsolenausgabe mit Ausnahme von Fehlermeldungen vermieden werden, verwenden Sie bei Befehlen, bei denen diese Option verfügbar ist, die Option QUIET:
Die Meldung T:Tempfile Deleted wird nicht angezeigt. Ist die Datei "T:TempDat" jedoch nicht vorhanden, erscheint eine diesbezügliche Fehlermeldung.
Zum leichteren Eingeben und Testen von ARexx-Makros gehen Sie wie folgt vor:
Erstellen Sie mit Eds (s.o.) die folgende AmigaDOS-Befehlsdatei und speichern Sie sie unter dem Namen "S:Edrx":
.KEY mac
ED REXX:<mac>.rexx
PROTECT S:<mac>.rexx +S-E
RX REXX:<mac>
Verwenden Sie diese Befehlsdatei beim Ausprobieren von ARexx-Makros. Geben Sie Edrx gefolgt vom Namen des jeweiligen Makros ein. Über "Edrx" wird der Editor aufgerufen, ohne daß Sie die Erweiterung ".rexx" eingeben müssen. Beim Verlassen des Editors wird das ARexx-Interpretationsprogramm (engl. Interpreter) RX direkt mit Ihrem Makro als Argument aufgerufen.
Wenn Sie beispielsweise regelmäßig per DFÜ eine neue Liste von Dateien laden, sollen diese Dateien möglicherweise einer Liste vorhandener Dateien hinzugefügt und alle Einträge nach Datum sortiert werden. Jeder Dateiname habe dasselbe Präfix und ein Suffix mit dem zugehörigen Datum, z.B. NeuDat.941009 für die Dateiliste vom 9. Oktober 1994.
Soll eine einzige Dateiliste erstellt werden, in der die Einträge nach Datum sortiert sind, verwenden Sie die Befehle JOIN und SORT mit Namensmuster:
JOIN NeuDat.#? TO RAM:Temp.joined
SORT RAM:Temp.joined TO NeuDat.sortiert
DELETE RAM:Temp.joined
In den folgenden Beispielen werden anspruchsvollere Aufgaben für Benutzer erläutert, die sich ausgezeichnet mit AmigaDOS auskennen.
Bisweilen müssen Sie die Abläufe in einer Befehlsdatei in Abhängigkeit von der Softwareversion ändern, mit der der Benutzer arbeitet. Versionsnummern können in einer Befehlsdatei leicht überprüft werden.
Soll überprüft werden, ob eine Befehlsdatei auf einem Amiga mit Systemsoftware der Version 2 ausgeführt wird, fügen Sie z.B. vor dem versionsabhängigen Teil der Befehlsdatei folgende Zeilen ein:
VERSION >NIL: 37
IF WARN
ECHO "Zeit für eine Systemaktualisierung."
QUIT
ELSE
ECHO "Version 2 oder höher. Gut! "
ECHO "Weiter geht's."
ENDIF
Versionsnummern unter 37 stehen für Versionen vor Version 2; Versionsnummer 38 steht für Version 2.1, 39 für Version 3 und 40 für Version 3.1.
Wenn Zeichensätze (Fonts) und Bibliotheken (Libraries) in den Speicher geladen werden, verbleiben sie selbst dann im Speicher, wenn sie zur Zeit nicht verwendet werden. Sie werden nur dann automatisch aus dem Speicher entfernt, wenn der durch sie belegte Speicherplatz für einen anderen Zweck benötigt wird. In einigen Fällen empfiehlt es sich jedoch, daß Sie nicht benutzte Ressourcen selber aus dem Speicher entfernen.
Sie wollen beispielsweise einen Zeichensatz edieren und anschließend testen oder die Versionsnummer der Bibliothek auf einer neuen Disk abfragen, aber der Amiga kann den neuen Zeichensatz bzw. die neue Bibliothek scheinbar nicht finden. Dies liegt daran, daß von AmigaDOS möglichst immer der Zeichensatz bzw. die Bibliothek verwendet wird, der/die sich im Speicher befindet. Über die Option FLUSH des Befehls AVAIL können Sie nicht benutzte Ressourcen aus dem Speicher entfernen und die Fragmentierung des Speichers verringern.
Soll ein nicht benutzter Zeichensatz bzw. eine nicht benutzte Bibliothek aus dem Speicher ausgelagert werden, ohne den Computer erneut zu starten, geben Sie folgendes ein:
Damit ein Zeichensatz bzw. eine Bibliothek aus dem Speicher entfernt werden kann, darf er/sie zur Zeit nicht von der Workbench oder einer anderen Anwendung verwendet werden.
Soll in einem Skript eine Schleife programmiert werden, vor der Sie ggf. aufgefordert werden, die Anzahl der Durchläufe anzugeben, gehen Sie wie folgt vor:
Geben Sie mit Eds (s.o.) folgende Befehlsdatei ein und speichern Sie sie als "Mschleife":
.KEY Schleife
; Klammern bei Ersetzungsangaben ändern, da
; Befehlsdatei < und > zur Umleitung verwendet:
.BRA {
.KET }
; Überprüfen, ob Benutzer Argument für Anzahl
; Schleifendurchläufe angegeben hat. Falls nicht: IF NOT { Schleife }
ECHO "Bitte Anzahl der Durchläufe angeben"
ECHO "und die Eingabetaste drücken: " NOLINE SETENV <NIL: Schleife {$$} ?
ELSE
; Argument vorhanden, Wert speichern
ECO >ENV:Schleife {$$} {Schleife}
ENDIF
;
LAB start ; Schleifenanfang
ECHO "Schleifenanzahl " NOLINE ; hier Anzahl der
TYPE ENV:Schleife {$$} ; Befehlswiederholungen
EVAL <ENV:Schleife {$$} >NIL: TO=T:Qwe{$$} VALUE2=1 OP=- ?
; Alternativ: ECHO >T:Qwe {$$} `EVAL
$Schleife {$$} - 1`
TYPE >ENV:Schleife {$$} T:Qwe {$$}
IF VAL $Schleife {$$} GT 0
SKIP start BACK ;Schleife noch aktiv
ENDIF
;
DELETE ENV:Schleife {$$} T:Qwe {$$} QUIET ;aufräumen
ECHO "Schleife beendet"
Wenn Sie diese Befehlsdatei starten, ohne ein Argument anzugeben, werden Sie aufgefordert, die Anzahl der gewünschten Durchläufe anzugeben. Der angegebene Wert wird als Anfangswert für die Schleife verwendet. Geben Sie über folgenden Befehl einen Wert an:
Die folgenden Ausgaben werden angezeigt:
Schleifenanzahl 5
Schleifenanzahl 4
Schleifenanzahl 3
Schleifenanzahl 2
Schleifenanzahl 1
Schleife beendet
Bei dieser Schleife besteht die einzige Aktion darin, die Anzahl der verbleibenden Schleifendurchläufe anzuzeigen. Unter Verwendung der Umgebungsvariablen "Schleife{$$}" können Sie jedoch komplexere Aktionen angeben.
Beim ersten IF-Block wird überprüft, ob beim Aufrufen der Befehlsdatei ein Argument angegeben wurde. Ist dies nicht der Fall, wird der Benutzer zur Eingabe eines Werts aufgefordert. In beiden Fällen wird der Wert in der Variablendatei "ENV:Schleife{$$}" gespeichert. Durch den Operator {$$} wird die aktuelle Prozeßnummer an den Namen "Schleife" angehängt, um einen eindeutigen Dateinamen zu erhalten. Dadurch sollen mögliche Konflikte beim Multitasking vermieden werden. Der Dateiname lautet beispielsweise "ENV:Schleife4".
Innerhalb der Schleife wird durch die Verknüpfung des Befehls ECHO mit dem Befehl TYPE das Wort "Schleifenanzahl" gefolgt von der als Argument angegebenen Nummer angezeigt. Beim ersten Durchlauf erscheint Schleifenanzahl 5 .
Der Befehl EVAL verwendet die Nummer in der Datei "ENV:Schleife{$$}" als <Wert1> (VALUE1). Daher muß am Ende der Zeile ein Fragezeichen stehen. <Wert2> (VALUE2) ist 1 und die auszuführende Operation Subtraktion. Die Ausgabedaten des Befehls EVAL werden in die Datei "T:Qwe{$$}" geschrieben. Mit dem nächsten Befehl TYPE wird der Wert aus der Datei "T:Qwe($$)" an die Datei "ENV:Schleife{$$}" kopiert. Durch diese beiden Zeilen wird jeweils 1 vom Wert in der Datei "ENV:Schleife{$$}" subtrahiert. Die EVAL-Zeile kann alternativ und eleganter mit umgekehrten Hochkommas geschrieben werden.
Über die IF-Anweisung wird der Befehlsdatei mitgeteilt, die Schleife jeweils erneut zu beginnen, solange der Wert in "Schleife{$$}" größer als 0 ist. Dadurch wird die Zeile "Schleifenanzahl" mit dem neuen Wert ausgegeben.
Die Schleife wird beendet sobald der Wert in "Schleife{$$}" 0 ist. Vor Beenden der Befehlsdatei werden die beiden temporären Dateien gelöscht.