ARexx

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

ARexx ist eine Portierung der Programmiersprache REXX für den Amiga-Computer und wurde 1987 von William S. Hawes entwickelt. ARexx ist, wie REXX, eine Interpreter-basierte Programmiersprache. Programme, die in ARexx entwickelt werden, nennt man Skript- oder auch Makro-Programme.

Die meisten Amiga-Programme verfügen über die Möglichkeit, ARexx-Skripte auszuführen, um den Funktionsumfang zu erweitern bzw. um über den ARexx-Port individuelle Problemlösungen zu gewährleisten.

Mittels ARexx besteht die Möglichkeit, dass zwei Programme miteinander über ihren jeweiligen ARexx-Port kommunizieren können, um die jeweils anderen Funktionen des Programmes nutzen können.

Zum Beispiel kann sich ein ARexx-Skript Informationen aus einer Datenbank holen, diese werden dann in eine Tabellenkalkulation übernommen, um das endgültige Ergebnis automatisch in ein Textverarbeitungsprogramm zu übernehmen. ARexx dient also primär dazu, sich wiederholende Vorgänge zu automatisieren.

Geschichte[Bearbeiten]

ARexx wurde 1987 von William S. Hawes von Wishful Thinking Development entwickelt und kam ca. 1990 mit dem OS2.04 durch Commodore auf dem Amiga zum Einsatz. ARexx basiert im Wesentlichen auf REXX, welches von Mike Cowlishaw bei IBM in den 1980er Jahren für Großrechner (Mainframes) auf CMS-Betriebssystemen entwickelt wurde. ARexx unterscheidet sich rudimentär nicht von der IBM-REXX-Sprache, obwohl es speziell für Amiga und seine Umgebung geschrieben wurde. Seit dem OS3.5 bietet die Amiga-Workbench einen eigenen ARexx-Port an, worüber Systemfunktionen durch ARexx genutzt werden können.

Wie funktioniert ARexx[Bearbeiten]

ARexx ist eine Interpreter-basierte Sprache, was bedeutet, dass ARexx-Skripten während ihrer Laufzeit, also während sie ausgeführt werden, durch einen Interpreter, dem Programm RexxMast, in Maschinensprache übersetzt werden. Dadurch sind die Skripten sofort einsatzfähig, ohne dass man sie wie bei C oder C++ vorher kompilieren muss. Der Nachteil dieser Interpretersprache ist, dass sie relativ langsam abgearbeitet wird und zur Ausführung immer den Interpreter benötigt. Da ARexx ohne Datentypen auskommt, kann jede Variable ein Text, eine Zahl oder eine beliebige Zeichenkette sein, wobei diese Variablen im Vorfeld nicht deklariert werden müssen. Der RexxMast liest ARexx-Skripten als Textdatei ein und führt sie Befehl für Befehl aus. RexxMast kontrolliert dabei automatisch die Ressourcen und fängt Fehler ab. ARexx bedient sich der AmigaOS-eigenen Umgebung und nutzt sowohl dessen Multitasking, die installierten Bibliotheken (Libraries) und die Prozesskommunikation. Dazu werden zwischen den Message-Ports, die ein Programm zur Verfügung stellt, Nachrichten (messages) verschickt, die dann von dem jeweiligen Programm abgeholt und verarbeitet werden. Dabei wird folgende Reihenfolge eingehalten:

  • beim Programmstart öffnet ein Anwendungsprogramm einen Message-Port
  • das Programm wartet auf den Empfang einer Nachricht (message)
  • das Betriebssystem teilt dem Programm mit, dass eine Nachricht an seinen Message-Port gesendet worden ist
  • das Programm führt die angeforderte Aktion aus
  • das Programm teilt dem Absender der Nachricht mit, dass die Nachricht (message) empfangen und verarbeitet wurde. Es wird dabei entweder ein Rückgabewert geliefert oder aber die angeforderten Daten gesendet.

Der Befehlssatz von ARexx ist sehr simpel gehalten und nutzt überwiegend Befehle, um Strings (Zeichenketten) zu manipulieren. Da es aber eine Vielzahl an zusätzlichen Erweiterungen für ARexx gibt, ist es sogar möglich, eine Programmoberfläche (GUI) mittels ARexx zu erstellen, um direkt mit dem Anwender in Kontakt zu treten, um dadurch Eingaben oder Abfragen zu erhalten.

Aufbau eines ARexx-Skripts[Bearbeiten]

Jedes ARexx-Skript besteht mindestens aus einer Kommentarzeile, dabei muss das Skript stets mit einer Kommentarzeile beginnen (aus historischen Gründen):

/* Dies ist mein Programm */

Diese Kommentarzeile teilt dem RexxMast mit, dass es sich bei dem vorliegenden Skript um ein ARexx-Skript handelt. Weitere Kommentarzeilen werden von RexxMast ignoriert, dienen aber natürlich der Verständlichkeit, vor allem wenn man nach Wochen oder Monaten das Skript selber nochmal bearbeiten möchte.

Nach der Kommentarzeile beginnt dann das eigentliche Programm:

SAY "Hallo Welt"

In diesem Fall würde der Text "Hallo Welt" in der Konsole ausgegeben werden.

Interne oder externe ARexx-Befehle[Bearbeiten]

ARexx bietet eine umfangreiche Bibliothek von vordefinierten Funktionen. Diese Funktionen sind stets verfügbar und auf die interne Datenstruktur des AmigaOS optimal abgestimmt, weshalb sie vom REXX Befehlssatz teilweise stark abweichen bzw. dort nicht zu finden sind (Beispiel: ADDLIB() ).

Zu diesen vordefinierten Funktionen gibt es eine Vielzahl von Zusatzbibliotheken (libraries), die den Funktionsumfang von ARexx erheblich steigern. Diese Zusatzbibliotheken werden aus dem ARexx-Skript heraus nachgeladen und stehen dann zur Verfügung. Hier einige Beispiele:

  • rexxreqtools.library
Erweitert ARexx, um damit Dateien-, Verzeichnisse und Zeichensätze über Auswahlfenster auszuwählen.
  • tritonrexx.library
Erlaubt, mittels ARexx grafische Oberflächen (GUI) zu erstellen.
  • rexxtricks.library
Bietet Funktionen, um via ARexx Amiga-DOS, SCSI-, Bildschirm- und Piktogramm-Funktionen zu nutzen.

Dies stellt allerdings nur einen kleinen Einblick der vorhandenen Bibliotheken dar, mit denen man ARexx erweitern kann.

ARexx-Skripte kompilieren[Bearbeiten]

Weit verbreitet war die Meinung, dass es möglich sei, ARexx-Skripte zu kompilieren. Dafür gab es auch zwei Programme, RexxMasher und ExecRexx. Diese beiden Programme waren allerdings keine Compiler, sondern entfernten lediglich alle Kommentarzeilen aus dem Skript, kodierten das Skript und fügten ein Programm zur Ausführung des Skripts hinzu. Beim Programmstart wurde das Skript wieder dekodiert, und es war noch immer der RexxMast notwendig, um es auszuführen. Durch das Entfernen der Kommentarzeilen konnte es allerdings bei sehr umfangreichen ARexx-Skripten vorkommen, dass das "kodierte" Skript nicht mehr fehlerfrei funktionierte.