Dienstag, 14. April 2009

REXX - REstructured eXtended eXecutor

Ab der Version 2.0 gehört die Scriptsprache REXX mit zum Lieferumfang von OS/2. REXX hat seine Wurzeln im Großrechnerbereich und wurde von IBM nach OS/2 protiert. Sie lässt sich durch das hinzufügen von zusätzlichen Libraries (DLLs) beliebig erweitern womit man Sie als alternative zu einem Shell-Skript einsetzen, aber auch eigene Anwendungen mit ihr erstellen kann. REXX ist eine strukturierte Programmiersprache sie sehr einfach zu erlernen und zu lesen ist und wurde auf viele Plattformen portiert. Wie PERL hat REXX seine Stärke in der Stringverarbeitung.
Ein REXX Programm kann mit jedem beliebigen Text-Editor erstellt werden. In der ersten Zeile muss immer ein Kommentar /* ... */ stehen, damit die OS/2 Shell erkennt, dass es sich um ein REXX Skript handelt. REXX kennt 23 Instruktionen und einen Datentyp, den String. Variablen sind Typenlos und der Inhalt einer Variable kann sich im Laufe des Programms bzw. bei der Programmausführung beliebig ändern. REXX kennt keine Arrays, dafür können Variablen eine oder mehrere, durch einen "." getrennte Endungen haben mit denen man sich Ein- bzw. Mehrdimensionale dynamische Hashtables mit der gleichen Funktion eines Arrays erzeugen kann. Ich möchte hier einen kurzen Auszug aus dem Grund-Wortschatz von REXX Funktionen geben:
  • IF ... THEN ... ELSE
    Die Anweisung prüft, ob die Bedingung die hinter IF steht wahr ist. Ist dies der Fall, wird die Anweisung ausgeführt, die hinter THEN steht. Ist die Bedingung falsch, wird die Anweisung ausgeführt, die hinter ELSE steht.

  • SELECT WHEN ... THEN ... WHEN ... THEN ... OTHERWISE ... END
    Die Anweisung SELECT fasst mehrere Bedingung zusammen. Jede Bedingung wird durch eine WHEN geprüft. Ist diese Bedingung wahr wird die hinter den THEN stehende Anweisung ausgeführt. Es ist möglich, dass mehrere Bedingungen wahr sind. In diesem Fall werden deren Anweisung ebenfalls ausgeführt. In dem Fall, dass keine Bedingung wahr ist, wird die Anweisung hinter OTHERWISE ausgeführt.

  • DO (FOREEVER, UNTIL, WHILE, X=Y TO Z) ... LEAVE ... END
    Die Anweisung DO kann alleine und in Kombination mit den Bedingungen die in Klammern angeführt sind angewendet werden.
    DO FOREEVER ist eine Endlosschleife die unendlich durchlaufen wird.
    DO UNTIL ist eine Schleife, die solange durchlaufen wird bis die Bedingung hinter UNTIL erfüllt/wahr ist.
    DO WHILE ist eine Schleife die solange durchlaufen wird die die Bedingung hinter WHILE nicht mehr erfüllt/wahr ist.
    DO X=Y TO Z ist die klassische FOR ... NEXT Schleife. X bekommt einen Startwert Y und iteriert zu Z. Hat X den Wert von Z erreicht wird die Schleife verlassen.
    Die Anweisung LEAVE kann innerhalb der DO-Schleife aufgerufen werden. Der Aufruf führt dazu, dass die DO Schleife verlassen wird.

  • ARG
    Diese Anweisung liest ein oder mehrere Argumenten ein, die zusammen mit dem REXX Programmaufruf eingegeben wurden.

  • PARSE
    Liest einen oder mehrere Strings von der Tastatur ein und ordnet diese Variablen zu.

  • SAY "..." "..."
    Gibt einen oder mehre Strings oder Ausdrücke aus.

  • CALL
    Mit CALL kann eine REXX Sub-Routine aufgerufen werden. Der Name der Sub-Routine definiert sich aus dem Namen des LABELS das unmittelbar über dem Funktionsaufruf von PROCEDURE steht. Mit dem Funktionsaufruf können optional auch eine Reihe von Argumenten mitgegeben werden.

  • PROCEDURE ... EXPOSE ... ARG ... RETURN
    Die Funktion PROCEDURE kann direkt hinter einem definierten LABEL angegeben werden. Innerhalb dieser Sub-Routine können neue Variablen definiert werden, die nur in dieser Routine ihre Gültigkeit haben. Der Routine können wie einem REXX Programm Argumente (ARG) übergeben werden, mit die die Routine arbeiten kann. Mit der Anweisung RETURN wird die Sub-Routine wieder verlassen. Mit EXPOSE kann man externe Variablen definieren die innerhalb der Sub-Routine modifiziert werden können.

  • SYMBOL
    Prüft ab eine Symbol oder Variable eine gültige Zuordnung bzw. Definition besitzt. Die Funktion gibt BAD, VAR oder LIT zurück. Mit dieser Funktion kann man z.B. überprüfen, ob eine Variable schon eine gültige Initialisierung besitzt. Eine uninitialisierte Variable gibt immer ihren eigenen Namen als Inhalt zurück.

  • EXIT
    Verlässt das laufende Programm.
Unter OS/2 gibt es die GUI Anwendung PMREXX mit der man sich im Detail die Ausgaben eines REXX- Programms anschauen und Debuggen kann. Das Programm wird nicht standardmäßig Installiert und muss über die Installationsoption nachinstalliert werden, wenn man keine OS/2- Vollinstallation ausgewählt hat. Darüber hinaus gibt es unter OS/2 die Möglichkeit auch GUI-Anwendungen mit REXX zu erstellen. Das VREXX Toolkit stellt hierfür die entsprechenden Funktionen zur Verfügung. Watcom VX-REXX ist eine Visuelle Entwicklungsumgebung, mit der man seine sein Presentation Manager Anwendungen über eine GUI zusammen klicken kann. Hiermit wird auch heute noch an eComStation entwickelt. Leider gibt es diese Entwicklungsumgebung nur als Demo-Version zum Download. Wer sich fragt, wo REXX heute noch eingesetzt wird, findet hier einen ausführlichen Artikel.

[UPDATE] Und dann gibt es noch DrDialog den man bei Hobbes und OS2 Site herunterladen kann. Mit dieser REXX-Entwicklungsumgebung lassen sich ebenfall GUI-Anwendungen unter OS/2 Warp erstellen. Ein ausführliche 14teilige Anleitung und eine Einführung in REXX hat Thomas Klein für den Voice-Newsletter erstellt. Es folgen die Links auf die einzelnen Teile:
(Danke an Warpcafe für den Tip)

Kommentare:

warpcafe hat gesagt…

Hi,

hinsichtlich GUI-Rexx für OS/2 und ecomstation hätte ich noch ein paar Links, vielleicht interessiert Euch das eine oder andere (falls noch nicht bekannt?)
- DrDialog (bei Hobbes z.B.)
IBM-EWS (freeware) zur Erstellung von nativen GUI-Rexx Programmen (als EXE) mit integrierter ENtwicklungsumgebung. Etwas in die Jahre gekommen aber eine astreine Rapid-Prototyping Umgebung für schnelle udn hübsche Lösungen
- Artikelserie im VOICE Newsletter zu DrDialog, hat mehr als 10 Teile/Ausgaben überdauert und beschreibt so ziemlich alle controls (Teil 1: http://www.os2voice.org/VNL/past_issues/VNL0902H/vnewsf6.htm)
- es gibt eine (mittlerweile etwas inaktive aber noch lebende) Yahoo group zum Thema Gui-Rexx unter http://groups.yahoo.com/group/GuiObjectRexx/

Grüße
(und vielen Dank für Eure coole Seite und das Durchhaltevermögen!)
Thomas

Blotto hat gesagt…

Vielen Dank für den Tipp!