Über REXX und ZOC |
Die von ZOC verwendete Skriptsprache REXX hat eine lange Tradition, speziell in der IBM-Welt. Die Sprache ist einfach aber vielseitig und bietet alle Elemente einer Programmiersprache, notwendig sind um Programme von einfacher bis mittlerer Komplexität zu schreiben (Variablen, Schleifen, Dateibehandlung, Prozeduren, usw.). Es gibt sogar eine objektorientierte Variante von REXX.
Die Programmierbarkeit von ZOC entsteht durch einer Kombination aus der Sprache REXX und ZOC-spezifischen Erweiterungen. Da REXX selbst bereits eine etablierte Skriptsprache ist, nutzt ZOC diese als Fundament und baut darauf mit eigenen Funktionen zur Terminalemulation und Kommunikation auf. Diese Erweiterungen heben sich vom normalen Sprachumfang ab, indem Sie immer mit dem Namen Zoc beginnen, z.B. ZocConnect.
Hinweis: Die in ZOC verwendete REXX Interpreter ist REGINA REXX
(https://regina-rexx.sourceforge.net/).
Falls Sie eine andere REXX-Implementierung bevorzugen (z.B. OOREXX), können
Sie diese unter
Optionen→Programmeinstellungen→Spezielle Dateien→Alternative REXX-DLL
konfigurieren.
ZOC REXX lernen |
Nachfolgend finden Sie einen groben Einblick in die REXX Programmierung. Nachdem Sie diesen Überblick gelesen haben, sollten Sie einen Blick auf die Themen REXX Sprachelemente und ZOC-REXX Befehle werfen. Diese decken den notwendigen Sprachumfang für den größten Teil aller anfallenden Aufgaben ab.
Abgesehen davon befindet sich im Ordner Eigene Dateien→ZOC8 Dateien→Rexx das Archiv ZocScriptingSamples.zip mit deutschsprachigen Schritt-für-Schritt Beispielen. Darüberhinaus gibt es weitere REXX Online Dokumentation auf der EmTec-Webseite.
Sollten Sie REXX auf einem komplexeren Level verwenden wollen, sollten Sie den Text ZOC REXX Reference (PDF, engl) ansehen, den Sie auch im o.g. Ordner oder auf der Webseite finden.
Ein erstes Beispiel |
Die ZOC-REXX Versionen des berühmten Hello-World Programms sehen so aus:
-- "Hello World" am ZOC Bildschirm ausgeben
SAY "Hello World"
-- "Hello World" zur Gegenstelle senden
CALL ZocSend "Hello World"
-- Die Gegenstelle "Hello World" ausgeben lassen
CALL ZocSend "echo 'Hello World!'^M"
Grundsätzliches |
Alle REXX-Programme beginnen in der Regel mit einem Kommentar. REXX sieht jeden Text, der zwischen /* und */ steht, also Kommentar an. Folglich sollte die erste Zeile eines REXX-Programms in etwa so aussehen: /* REXX */. Zusätzlich zu dieser Form von Kommentaren kennt REXX noch Kommentare bis zum Ende der Zeile, die durch -- eingeleitet werden (siehe die Beispiele oben).
REXX kennt Standard- und Erweiterungsbefehle. Beispiele für REXX Standardbefehle sind SAY, IF, DO, END. ZOC-Erweiterungsbefehle sind zum Beispiel ZocConnect, ZocSend, ZocDisconnect.
Der Übersichtlichkeit halber werden die nativen REXX Sprachelemente in Großschrift verwendet, z.B. CALL, IF, SAY. ZOC-Erweiterungen werden dagegen in CamelCase angegeben, z.B. ZocAsk, ZocWrite. Namen die im Programm vom Benutzer selbst vergeben werden (z.B. Variablen, Prozeduren, etc.), stehen in Kleinbuchstaben, z.B. ergebnis= 10*eingabe.
Wie werden die verschiedenen Befehlstypen angesprochen |
Standardbefehle | |
Standardbefehle werden durch Namen und ggf. Argumente angegeben (alle unten stehenden
Wörter in Großbuchstaben sind Standard-REXX Befehle):
| |
ZOC-Befehle | |
ZOC-Befehle werden als eine Art REXX-Unterfunktion aufgerufen und ausgeführt. Es gibt sie im Prinzip in zwei Formen:
Befehle, die keine Rückgabewert liefern (oder wenn Sie diesen nicht benötigen),
werden durch CALL zusammen mit dem ZOC-Befehl und den benötigten, durch
Komma getrennten, Argumenten aufgerufen. Befehle, die Rückgabewerte liefern,
übergeben die Liste aller Argumente, in Klammern eingeschlossen, hinter dem
Befehlsnamen.
|
Ein kleines Beispiel |
Eine häufige Anwendung für REXX-Programme ist das Einloggen und die automatische Ausführung von Befehlen.
Einfache Login-Prozeduren können zwar auch ohne REXX Skript direkt im jeweiligen Eintrag des Adressbuchs als AutoLogin angegeben werden (siehe Adressbucheinträge ändern), deren Möglichkeiten sind jedoch auf sehr simple Abläufe begrenzt.
Das nachfolgende REXX Beispiel ist dagegen etwas komplexer. Es baut
eine SSH Verbindung zu einem Rechner auf, führt dort den
mail Befehl aus um zu sehen ob neue Email vorliegt, meldet sich
wieder ab und zeigt ggf. eine Meldung.
/*REXX*/
-- variablen mit host und logininformationen
hostip= "users.hogwarts.edu"
username= "harryp"
password= "alohomora"
-- ssh verbindung aufbauen
CALL ZocSetDevice "Secure Shell"
CALL ZocConnect username":"password"@"hostip
-- falls der rechner antwortet, sollten wir innerhalb
-- von wenigen sekunden den text "last login" sehen
-- (resultat von 640 beim wait-befehl bedeutet timeout)
CALL ZocTimeout 10
x= ZocWait("Last login")
IF x\=640 THEN DO
-- erfolgreich angemeldet, auf prompt warten
CALL ZocWait "$"
-- sende den befehl 'mail'
CALL ZocSend "mail^M"
-- das echo des mail-befehls ueberspringen
CALL ZocWaitline
-- die naechste zeile die kommt, ist die ausgabe
-- von 'mail' (z.b. 'no mail for harryp')
CALL ZocWaitline
themail= ZocLastline()
-- abmelden und verbindungsabbau
CALL ZocSend "exit^M"
CALL ZocDelay 1
CALL ZocDisconnect
/* wenn die antwort nicht mit "No mail" anfaengt,
wird eine Meldung fuer den Benutzer angezeigt */
IF LEFT(themail,7)\="No mail" THEN DO
CALL ZocMsgBox themail
END
END
Hinweis: Weitere Beispiele finden Sie im
ZocScriptingSamples.zip
Archiv.
Was nun? |
Nach diesem Überblick ist der nächste Schritt die Übersicht über die REXX Sprachelemente.
← Zurück zu Die Programmierung von ZOC (REXX/DDE)