ARexx
# ARexx

ARexx ist eine Implementierung 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 zu 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

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.

## Funktionsweise

ARexx ist eine interpreterbasierte Sprache. ARexx-Skripte werden also nicht vor der Ausführung in Maschinensprache übersetzt, sondern werden zur Laufzeit durch den Interpreter RexxMaster geparst und interpretiert. Dadurch sind die Skripte sofort einsatzfähig, arbeiten aber auch relativ langsam und benötigen zur Ausführung immer den Interpreter. 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-Skripte 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), als auch 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

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

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:

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

## Interne oder externe ARexx-Befehle

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

Weit verbreitet war die Meinung, dass es möglich sei, ARexx-Skripte zu kompilieren. Dafür gab es Programme wie Rexx Plus, RexxMasher und ExecRexx. Die letzten 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.

| PET/CBM | KIM-1 • PET 2001 • CBM 3000 • CBM 4000 • CBM 8000 • CBM 8032 • MMF 9000 |
| - | - |
| CBM II | CBM $500^‡$ • CBM 600 • CBM 700 • CBM $900^‡$ |
| Heimcomputer | VC 10 • VC 20 • C64 (SX, $GS^†)$ • 264-Reihe (C16, C116, Plus/4) • C128 • $C65^‡$ |
| Amiga | 1000 • Sidecar • 500 • 500 Plus • 2000 • $CDTV^†$ • 600 • 3000/T/UX • 1200 • 4000 • $CD³²^†$ |
| IBM-kompatibel | PC-1 • PC-10 bis PC-70 • x86LT • A1060 |
| Peripherie | Laufwerke Datasette • CBM-Diskettenlaufwerke • VC15xx (VC1540/41, VC1551, VC1570/71, VC1581) • SFD100x (SFD1001, SFD1002) • CBM 2020 bis 8250 • CBM 4040 • A570 • A590 • A3070 Drucker MPS-Serie • MPS 801 • MPS 802 • MPS 803 • MPS 1000 • MPS 1270 • MPS 1500 C • MPS 1550 C • VC1520 • CBM-8000-Serie • CBM 4022 • CBM 4023 Sonstige Hardware CBM-Bus • Zorro-Bus • Uhrenport • WOM • RAM Expansion Unit • Turbokarte • Mäuse: Commodore 1350/1351 • Monochrom- und Farb-Monitore: 1701 • 1702 • 1703 • 1801 • 1802 • 1081 • 1084/1084S • 1085 • 1901 • 1942 • Lautsprecher A10 • Mehrfachbenutzersysteme (MBS) Historische Hardware Schreib- und Tischrechenmaschinen • LED-Uhren • $2000K/3000H^†$ • Chessmate |
| Chips | MOS Technology • 6502 • 6510 • VIC • VIC II • TED • VDC • SID • PIA • VIA • RIOT • TPI • CIA • ACIA • Agnus (Blitter, Copper) • Paula • EHB-Modus • HAM-Modus |
| Chipsätze | OCS • ECS • AGA • AAA • Chip-RAM und Fast-RAM |
| Software | Commodore BASIC • Commodore Basic V2 • Kernal • CBM-ASCII (PETSCII) • GEOS • Commodore DOS • AmigaOS • Kickstart • Workbench • ARexx • AmigaGuide • AMIX |
