# ARexx

ARexx (kurz für Amiga Rexx) ist eine leistungsstarke Skriptsprache für den Amiga-Computer, die in den 1980er Jahren speziell für AmigaOS entwickelt wurde. Sie ermöglicht es, Programme zu automatisieren und nahtlos miteinander zu verbinden, wodurch der Amiga zu einem der vielseitigsten Systeme seiner Zeit wurde. Anstatt für jede Anwendung eine neue Skriptsprache lernen zu müssen, stand damit unter AmigaOS eine einzige Skriptsprache für jede Anwendung zur Verfügung.

## Geschichte

Der ARexx Interpreter wurde 1987 von William S. Hawes programmiert und erweiterte die Standardfunktionen der Skriptsprache REXX, die in den 1980er Jahren von Mike Cowlishaw bei IBM für Großrechner (Mainframes) auf CMS-Betriebssystemen entwickelt wurde, um zahlreiche AmigaOS-spezifische Features. Während REXX vor allem für interaktive Anwendungen in Unternehmensumgebungen gedacht war, wurde ARexx speziell für die Multitasking-Umgebung des AmigaOS und die Bedürfnisse von Endanwendern und Entwicklern konzipiert.
Das Programm wurde erstmals 1990 mit AmigaOS 2.04 von Commodore ausgeliefert und ist seither ein fester Bestandteil aller AmigaOS-Versionen. Ab AmigaOS 3.5 (1993) wurde ARexx direkt in das Betriebssystem integriert und war über den ARexx-Port auch für Systemfunktionen zugänglich. ARexx gewann in der Folge insbesondere durch die Community schnell an Bedeutung, da viele Amiga-Entwickler ihre Software aktiv mit ARexx-Ports ausstatteten, um die Interoperabilität zu erhöhen. Laut einem Artikel im Usenet aus dem Jahr 1991 wurden Anwendungen wie ProCalc, DPaint IV und Imagine 2.0 mit umfangreichen ARexx-Support ausgestattet, was die Möglichkeiten für Anwender erheblich erweiterte. Besonders hervorgehoben wurde die Fähigkeit von ARexx, komplexe Workflows durch Automatisierung verschiedener Programme zu vereinfachen.
Nach der Einführung modernerer Amiga-Derivate wie MorphOS wurde ARexx jedoch nicht für deren PowerPC-Architektur portiert. Obwohl es auf MorphOS noch eingeschränkt genutzt werden kann, fehlt eine optimierte Version, da Hawes nicht mehr in der Amiga-Entwicklung tätig ist und keine finanzielle Unterstützung für die Weiterentwicklung existiert. Dennoch bleibt ARexx ein geschätztes Werkzeug für klassische Amiga-Systeme.

## Rezeption und Einfluss

ARexx wurde in den 1990er Jahren als eines der fortschrittlichsten Tools für die Interprozesskommunikation auf Desktop-Systemen angesehen. In einer Diskussion im Usenet von 1991 wurde hervorgehoben, dass ARexx eine der ersten Skriptsprachen war, die eine echte Verbindung zwischen Desktop-Software ermöglichte. Insbesondere das Konzept der Skriptsprache als universelles Bindeglied inspirierte spätere Technologien wie AppleScript in MacOS und Visual Basic for Applications (VBA) in Windows.

## Merkmale

ARexx zeichnet sich durch seine Flexibilität und Benutzerfreundlichkeit aus, insbesondere in der Interprozesskommunikation (IPC) von Amiga-Anwendungen. Die wichtigsten Merkmale sind:

### Interprozesskommunikation

    ARexx kommuniziert über sogenannte Message Ports, die als virtuelle Kanäle innerhalb des AmigaOS dienen und es Prozessen ermöglichen, Nachrichten auszutauschen. Jedes Programm, das ARexx unterstützt, kann Befehle von einem Skript empfangen und Ergebnisse zurückgeben.

### Typlose Datenrepräsentation

    Eine Besonderheit von ARexx ist die typlose Handhabung von Daten. Variablen können beliebige Werte enthalten, ohne dass der Datentyp vorher definiert werden muss. Dies erleichtert die Erstellung flexibler Skripte, da sich der Programmierer weniger um Datentypen kümmern muss.

### Dynamische Variablen

    Variablen müssen in ARexx nicht vor ihrer Verwendung deklariert werden. Dies ermöglicht eine schnelle und unkomplizierte Entwicklung, da Variablen während der Skriptausführung automatisch angelegt werden.

### Erweiterbarkeit

    ARexx kann durch Bibliotheken und eigene Funktionen erweitert werden. Benutzer können sogenannte „External Functions“ einbinden, um den Funktionsumfang an ihre Bedürfnisse anzupassen.

### Makro-Erweiterungen

    Viele Programme auf dem Amiga bieten Makro-Befehle, die über ARexx angesprochen werden können. Damit lassen sich wiederkehrende Aufgaben automatisieren.

### System-Integration

    ARexx bietet Zugriff auf Amiga-Systembibliothek (rexxsyslib.library) sowie auf externe Bibliotheken und Funktionen, die zur Laufzeit dynamisch geladen werden können.

### Fehlerbehandlung

    ARexx bietet eingebaute Mechanismen zur Fehlerbehandlung. Skripte können so gestaltet werden, dass sie bei Fehlern nicht abbrechen, sondern alternative Lösungen ausprobieren oder dem Benutzer eine Fehlermeldung anzeigen.

### Portabilität

    Da ARexx-Skripte in einer einfachen, textbasierten Form vorliegen, sind sie leicht übertragbar. Ein Skript, das auf einem Amiga-Modell funktioniert, kann in der Regel auch auf anderen Amiga-Systemen ausgeführt werden, sofern die benötigten Programme vorhanden sind.
Diese Eigenschaften machen ARexx zu einem leistungsstarken Werkzeug für Entwickler und Anwender des Amiga-Systems.

## Der ARexx Interpreter RexxMast

Der Interpreter RexxMast liest ARexx-Skripte als Textdateien ein und verarbeitet die Befehle zur Laufzeit nacheinander. Dabei übernimmt er die automatische Ressourcenverwaltung und das Abfangen der Fehler. RexxMast nutzt die AmigaOS-eigene Umgebung, einschließlich Multitasking, installierter Bibliotheken und Prozesskommunikation.
ARexx kommuniziert über sogenannte Message Ports, die als virtuelle Kanäle innerhalb AmigaOS dienen und es Prozessen ermöglichen, Nachrichten auszutauschen. Die Nachrichten (messages) werden in der folgenden Reihenfolge verarbeitet:
* Beim Start öffnet ein Anwendungsprogramm einen Message-Port.
* Das Programm wartet auf eingehende Nachrichten.
* Das Betriebssystem teilt mit, dass eine Nachricht an den Port gesendet wurde.
* Das Programm führt die angeforderte Aktion aus.
* Das Programm antwortet dem Absender mit dem Ergebnis oder liefert die angeforderten Daten zurück.

## Aufbau eines ARexx-Skripts
### Aufbau

Jedes ARexx-Skript besteht mindestens aus einer Kommentarzeile, die das Skript kennzeichnet. Aus historischen Gründen muss das Skript stets mit einer Kommentarzeile beginnen:
Der eigentliche Code folgt anschließend. Ein simples Beispiel für die Ausgabe eines Textes in der Konsole lautet:
Dies würde den Text Hallo Welt in der Konsole anzeigen. ARexx-Skripte bestehen aus einer Reihenfolge von Befehlen und Anweisungen, die der Interpreter zur Laufzeit ausführt.

### Dokumentationsstandards

Eine gute Dokumentation trägt maßgeblich zur Wartbarkeit eines Programms bei. ARexx-Skripte sind keine Ausnahme, und insbesondere bei komplexeren Automatisierungsaufgaben auf dem Amiga kann eine klare und präzise Dokumentation für das spätere Verständnis und die Weiterentwicklung des Codes wichtig sein.
Die folgenden Best Practices bieten eine gute Grundlage, um ARexx-Skripte verständlich und dokumentiert zu halten:

#### 1. Header-Kommentare

Zu Beginn eines ARexx-Skripts sollte ein Header-Kommentar eingefügt werden, der grundlegende Informationen über das Programm enthält. Dies umfasst den Namen des Skripts, die Version, den Autor, das Erstellungsdatum und eine kurze Beschreibung des Zwecks.
Beispiel:

#### 2. Kommentare zu Codeabschnitten

Besondere Abschnitte des Codes, wie komplexe Berechnungen oder logische Entscheidungsbäume, sollten mit Kommentaren versehen werden, die die Funktionsweise erläutern. Besonders bei komplexeren Algorithmen oder logischen Abschnitten sind solche Kommentare wichtig.
Beispiel:

#### 3. Dokumentation von Parametern und Rückgabewerten

Jede Funktion oder Prozedur sollte ihre Eingabeparameter und Rückgabewerte klar dokumentieren.
Beispiel:

#### 4. Dokumentation von Fehlerbehandlung

Es ist ebenfalls ratsam, Fehlerbehandlung und Ausgabewerte zu dokumentieren, besonders wenn Fehler auftreten können.

#### 5. Dokumentation für größere Projekte

Für größere Skripte oder Programme könnte eine detailliertere Dokumentation notwendig sein. Hier können Abschnitte mit Erklärungen zu spezifischen Modulen, Bibliotheken oder externen Funktionen hilfreich sein.
Mit klar strukturierten und gut kommentierten ARexx-Skripten können sowohl Entwickler als auch später bearbeitende Personen den Code leichter verstehen und modifizieren. In Anbetracht der Tatsache, dass es gegenwärtig keine spezialisierten Tools für ARexx-Dokumentation gibt, ist die manuelle Dokumentation durch Kommentare und strukturierte Beschreibungen umso wichtiger.

## Erweiterbarkeit und Bibliotheken

ARexx verfügt über eine Vielzahl von vordefinierten Funktionen, die speziell auf die Bedürfnisse von AmigaOS abgestimmt sind. Neben diesen internen Funktionen gibt es eine Reihe von Bibliotheken, die zusätzliche Funktionalitäten bereitstellen. Zu den bekanntesten Erweiterungen gehören:

### rexxreqtools.library

    Bietet Funktionen zur Auswahl von Dateien, Verzeichnissen und Zeichensätzen durch grafische Dialogfenster.

### tritonrexx.library

    Ermöglicht die Erstellung von grafischen Benutzeroberflächen (GUI) für ARexx-Skripte.

### rexxtricks.library

    Bietet Erweiterungen für den Zugriff auf das AmigaDOS, SCSI-Funktionen und die Verwaltung von Bildschirmen und Piktogrammen.
Diese Bibliotheken erweitern den Funktionsumfang von ARexx erheblich und ermöglichen es, mit der Sprache sowohl einfache Automatisierungen als auch komplexe Anwendungen zu entwickeln.

## Anwendungsszenarien
### Erweiterung bestehender Software

Ein häufiges Einsatzgebiet von ARexx ist aufgrund seiner Interprozesskommunikation und der Unterstützung zahlreicher Anwendungen die Erweiterung der Funktionalität bestehender Software.

#### Grafikbearbeitung

Wenn ein Programm, das Animationen aus Bitmap-Dateien erstellt, keine Bildbearbeitungsfunktionen besitzt, könnte ein ARexx-Skript beispielsweise folgende Schritte automatisieren:
* Dateien in einem Verzeichnis lokalisieren.
* Bilder nacheinander in ein Grafikprogramm laden.
* Änderungen durchführen und die bearbeiteten Dateien speichern.
* Eine Animation aus den bearbeiteten Bildern erstellen und speichern.

#### Datenintegration

Der Zusammenarbeit zwischen ARexx-kompatiblen Programmen sind dabei kaum Grenzen gesetzt. Beispielsweise kann ein ARexx-Skript auch
* Daten in einer Datenbankverwaltung aus einer Datenbank extrahieren,
* diese in einer Tabellenkalkulation berechnen,
* die Ergebnisse in einer Textverarbeitung in einem Dokument zusammenfassen.

#### Multimedia

Ein weiteres Einsatzgebiet von ARexx ist die Steuerung von Multimedia-Anwendungen wie AmigaVision. Mit einem ARexx-Skript kann beispielsweise eine komplexe Multimedia-Präsentation automatisiert erstellt werden:
* Videos, Bilder und Audiodateien aus verschiedenen Verzeichnissen laden.
* Übergangseffekte zwischen einzelnen Inhalten hinzufügen.
* Texteinblendungen oder Untertitel automatisch generieren und einfügen.
* Die fertige Präsentation exportieren oder direkt abspielen lassen.
ARexx ermöglicht dabei die Kommunikation zwischen AmigaVision und anderen Programmen, z. B. zur Bild- oder Audiobearbeitung. So könnten Grafiken in einem Zeichenprogramm angepasst, Audiodateien in einer Bearbeitungssoftware optimiert und dann automatisch in die Präsentation integriert werden. AmigaVision war eine von Commodore im Jahr 1990 veröffentlichte Multimedia-Software, die es Anwendern ermöglichte, interaktive Präsentationen zu erstellen.
Dadurch wird ARexx zu einem mächtigen Werkzeug, um bestehende Software modular zu erweitern und miteinander zu integrieren.

### Automatisierung repetitiver Aufgaben

ARexx wird auch genutzt, um monotone Aufgaben zu automatisieren. Ein Beispiel ist das Skript EqFiles.rexx, das mit dem Vergleichsprogramm ALeXcompare arbeitet, um doppelte Dateien zu identifizieren und die Ergebnisse farblich hervorzuheben.

### Systemerweiterungen

ARexx kann genutzt werden, um Funktionen zu AmigaOS hinzuzufügen. Ein Beispiel ist ein Überwachungsskript, das Warnmeldungen ausgibt oder Audio-Benachrichtigungen abspielt, wenn ein Programm abstürzt oder eine Aufgabe abgeschlossen wurde:
ARexx ist somit ein bedeutender Bestandteil der Amiga-Plattform, da es die Zusammenarbeit zwischen verschiedenen Anwendungen ermöglicht und den Funktionsumfang von AmigaOS erweitert. Viele Programme unterstützten ARexx-Kommandos und ermöglichen es Anwendern, die Software an individuelle Bedürfnisse anzupassen.

## Kompilation von ARexx-Scripten

Es gab in der Vergangenheit Missverständnisse über die Möglichkeit, ARexx-Skripte zu kompilieren.
Programme wie Rexx Plus, RexxMasher und ExecRexx ermöglichten es, ARexx-Skripte zu optimieren, indem sie die Kommentarzeilen entfernten und die Skripte in ein komprimiertes Format umwandelten. Diese "Kompilierung" ist jedoch keine echte Kompilierung, da der Code weiterhin von RexxMast ausgeführt werden muss.
Außerdem konnte es bei umfangreichen ARexx-Skripten dazu kommen, dass das „kodierte“ Skript nicht mehr fehlerfrei funktionierte.