Diese Übersicht behandelt spezielle Themen über die Kontrollsprache REXX (alternativ ist eine allgemeiner gehaltene ZOC REXX-Einführung unter REXX Programmierung zu finden).
Die REXX Sprache für ZOC besteht im Prinzip aus drei Teilen:
1. REXX Grundbefehle (IF, LOOP, CALL, usw.)
2. REXX Standardfunktionen. (TIME(), SUBSTR(), STRIP(), usw.)
3. ZOC Erweiterungen (ZocSend, ZocDownload, ZocWait, etc.)
Der Text unten beschreibt den Grundumfang (Punkte 1 und 2). Die speziellen ZOC-Erweiterungen (Punkt 3) sind unter Hilfe-Menü→ZOC REXX-Befehle/Funktionen zu finden.
Neben der Beschreibung hier, ist der komplette REXX Grundumfang (wiederum Punkte 1. und 2.) auch an verschiedenen Stellen im Internet beschrieben. Links hierzu befinden sich im Rexx-Ordner innerhalb des Ordners ZOC Dateien (wir empfehlen das REXX Wiki (deutsch)).
Die ZOC REXX Reference (PDF, engl) deckt alle drei Punkte ab. Die unten aufgeführten Themen werden außerdem in den REXX-Beispielen gezeigt, die über den REXX Link im o.g. Ordner bzw. in der REXX Online Dokumentation verfügbar sind.
Programm-Formatierung | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alle REXX-Programme müssen prinzipiell mit einem Kommentar beginnen. Als Kommentar gilt Text, der zwischen /* und */ steht. Außerdem gibt es Zeilenkommentare, die durch -- eingeleitet werden und bis zum Ende der Zeile gelten.
Es können mehrere Befehle in eine Zeile geschrieben werden, wenn diese
durch Komma voneinander getrennt werden. Ein Befehl kann in der nächsten
Zeile fortgesetzt werden, wenn am Ende der vorherigen Zeile ein zusätzliches
Komma geschrieben wird.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zahlen und Berechnungen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zahlen können zum Rechnen, Zählen usw. verwendet werden. REXX verwendet
Zahlen und Berechnungen in einer denkbar unkomplizierten Weise:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zeichenketten | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Obwohl REXX in der Lage ist, mit Text ohne Anführungszeichen zu arbeiten,
ist es generell besser, Zeichenketten mit einfachen oder doppelten
Anführungszeichen zu versehen:
Zeichenketten können Variablen zugewiesen werden. Außerdem können
Zeichenketten und Variablen direkt aneinandergereiht werden. Falls syntaktisch
notwendig kann auch der String-Verbindungsoperator || verwendet werden:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ablaufverfolgung | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zur Fehlersuche ist es möglich, am Anfang des Programms nach der ersten
Zeile den Befehl TRACE A anzugeben. Danach zeigt der
REXX-Interpreter jeden Befehlsschritt vor der Ausführung an.
TRACE I zeigt eine sehr detaillierte Ablaufverfolgung, TRACE O
schaltet die Ablaufverfolgung wieder aus. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vergleiche | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Um Vergleiche in REXX auszudrücken, stehen folgende Vergleichs-Operatoren zur Verfügung:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Entscheidungen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Entscheidungen werden in der Syntax IF <ausdruck> THEN DO <befehle> END ELSE DO <befehle> END ausgedrückt (siehe Abschnitt Vergleiche (oben) für die Vergleichs- und Verknüpfungsoperationen).
Ein typischer IF-Programmteil sieht in etwa so aus:
Der ELSE-Zweig kann weggelassen werden, wenn er nicht benötigt wird.
Die Schlüsselwörter DO und END können weggelassen werden,
wenn sich nur ein Befehl zwischen DO und END befindet.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Schleifen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Schleifen werden in REXX folgendermaßen formuliert:
DO <zähler> <befehle> END
Schleifen können mit dem Befehl LEAVE abgebrochen werden. Mit
ITERATE kann innerhalb der Schleife der nächste Schleifendurchgang
ausgelöst werden (d.h. der Befehl überspringt den Rest des aktuellen
Schleifendurchgangs). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sprünge und Prozeduren | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sprungmarken und Prozeduren werden mit einem Namen und nachfolgendem Doppelpunkt gekennzeichnet. Um eine Sprungmarke anzuspringen, wird der Befehl SIGNAL verwendet, während der Befehl CALL eine Prozedur aufruft (die Prozedur kann zum Aufrufpunkt mittels RETURN zurückkehren).
Das nachfolgende Beispiel zeigt einen Sprung und
einen Prozeduraufruf mit Argumentübergabe:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktionsaufrufe | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktionen werden wie Prozeduren gekennzeichnet und aufgerufen. Allerdings
besitzen Funktionen im Gegensatz zu Prozeduren einen Rückgabewert:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Externe Skripts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Es ist auch möglich ein externes Skript als Unterprogramm oder Funktion aufzurufen. Dazu muss der Name der Datei in Hochkommata geschrieben werden und die Datei entweder im ZOC-Programmordner, im ZOC Dateiordner oder im ZOC Skript-Ordner oder in einem Ordner im Windows Suchpfad (PATH) oder im REGINA REXX Makro Pfad (REGINA_MACROS) liegen. Alternativ kann die Datei komplettem mit Pfad angegeben werden.
Parameter werden wie sonst auch mit Komma getrennt aufgelistet und können im
externen Skript mittels der ARG(n) Funktion abgegriffen werden.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Der PARSE Befehl | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PARSE ist ein flexibles REXX Kommando um formatierte Zeichen in Teile zu zerlegen und die Teile Variablen zuzuweisen. Der Syntax hierfür ist PARSE VALUE <zeichenkette> WITH <variable>"<trenner>" … Wenn Sie z.B. eine Zeichenkette coord mit Koordinaten in der Form <index>: <pos-x>/<pos-y> haben, können Sie diese leicht mittels
PARSE VALUE coord WITH index": "posx"/"posy zerlegen.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Verwendung von ZOC-Befehlen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ZOC-Befehle sind eine Erweiterung der REXX Sprache in Form von Prozeduren und Funktionen und bieten Zugriff auf ZOC-spezifische Funktionalitäten (siehe ZOC-REXX Befehle).
ZOC-Befehle, die keinen Rückgabewert besitzen (oder wenn Sie an dem Rückgabewert
nicht interessiert sind), werden wie Prozeduren aufgerufen:
ZOC-Befehle, die einen Rückgabewert besitzen, werden wie Funktionen
aufgerufen: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Verwendung von macOS- oder Windows-Befehlen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Befehle, die direkt vom Betriebssystem ausgeführt werden (wie z.B. Löschen
und Umbenennen von Dateien), müssen direkt an das Betriebssystem adressiert
werden. Dies kann entweder durch REXX's ADDRESS CMD Befehl
oder durch ZOC's ZocShell Befehl geschehen.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Eingebaute Funktionen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die nachfolgenden Funktionen können in Zuweisungen oder in anderen Befehlen, die Werte erwarten, verwendet werden, z.B. b= ABS(a) oder IF ABS(n)>10 THEN …. .Es sind nur die wichtigsten Funktionen und Argumente aufgelistet. Der komplette Sprachumfang ist in der ZOC REXX Reference (PDF, engl) beschrieben, die sich im Ordner Eigene Dateien→ZOC8 Dateien→Rexx befindet.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Datei-I/O | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* REXX FILE INPUT EXAMPLE */
file= "input.txt" DO FOREVER ln= LINEIN(file) IF STREAM(file, "S")\="READY" THEN LEAVE /* process line of file (ln) here */ END CALL STREAM file, "C", "CLOSE"
Die Datei FILEIO.ZRX bei den Beispielen im Rexx Ordner wendet diese Funktionen beispielhaft an.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Übergabe von Parametern an REXX | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Von der ZOC Kommandozeile bzw. von ZOC-Benutzerknöpfen kann auch ein Parameter an ein REXX Skript übergeben werden, z.B. ZOC "/RUN:script\test.zrx Hello, World"
Solche Parameter können in im REXX Skript mit Hilfe der ARG(1) Funktion abgefragt und ggf. mit
PARSE zerlegt werden) (es wird dabei noch dringend empfohlen evtl. führende und
nachfolgende Leerzeichen durch STRIP() zu entfernen).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Häufige Funktionen in Visual Basic vs. REXX | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
← Zurück zu Die Programmierung von ZOC (REXX/DDE)