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.

ARexx
Basisdaten

Entwickler William S. Hawes
Erscheinungsjahr 1987
Aktuelle Version 1.15 (intern 53.4)
(21. Februar 2013)
Betriebssystem AmigaOS
Programmier­sprache ANSI C, Assembler (handoptimiert)
Kategorie Skriptsprache
Lizenz proprietär
deutschsprachig nein

Geschichte

Bearbeiten

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[1], um zahlreiche AmigaOS-spezifische Features[2]. 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[3]. 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[4] 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

Bearbeiten

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[4] 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

Bearbeiten

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

Bearbeiten

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

Bearbeiten

Jedes ARexx-Skript besteht mindestens aus einer Kommentarzeile, die das Skript kennzeichnet. Aus historischen Gründen muss das Skript stets mit einer Kommentarzeile beginnen:

 /* Dies ist mein Programm */

Der eigentliche Code folgt anschließend. Ein simples Beispiel für die Ausgabe eines Textes in der Konsole lautet:

 SAY "Hallo Welt"

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

Bearbeiten

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

Bearbeiten

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:

 /* ===========================================================
    Programmname: BeispielProgramm
    Version: 1.0
    Autor: Max Mustermann
    Datum: 2025-01-24
    Beschreibung: Dieses Skript gibt "Hallo, Welt!" aus.
    Eingaben: Keine
    Ausgaben: Gibt den Text "Hallo, Welt!" auf der Konsole aus.
 =========================================================== */

2. Kommentare zu Codeabschnitten

Bearbeiten

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:

 /* Berechnet die Summe von zwei Zahlen */
 sum: procedure
     parse arg num1 num2
     return num1 + num2

3. Dokumentation von Parametern und Rückgabewerten

Bearbeiten

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

Beispiel:

 /*
    Funktion: sum
    Parameter:
    - num1 (Zahl): Die erste Zahl, die zur Summe beiträgt.
    - num2 (Zahl): Die zweite Zahl, die zur Summe beiträgt.
    Rückgabewert:
    - (Zahl): Die Summe von num1 und num2.
 */

4. Dokumentation von Fehlerbehandlung

Bearbeiten

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

 /*
   Fehlerbehandlung für ungültige Eingaben
   Wenn num1 eine negative Zahl ist, wird eine Fehlermeldung ausgegeben.
 */
 if num1 < 0 then
    say "Fehler: Ungültige Zahl!"
    exit(1)

5. Dokumentation für größere Projekte

Bearbeiten

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

Bearbeiten

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[5]
Bietet Funktionen zur Auswahl von Dateien, Verzeichnissen und Zeichensätzen durch grafische Dialogfenster.
tritonrexx.library[6]
Ermöglicht die Erstellung von grafischen Benutzeroberflächen (GUI) für ARexx-Skripte.
rexxtricks.library[7]
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

Bearbeiten

Erweiterung bestehender Software

Bearbeiten

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

Grafikbearbeitung

Bearbeiten

Wenn ein Programm, das Animationen aus Bitmap-Dateien erstellt, keine Bildbearbeitungsfunktionen besitzt, könnte ein ARexx-Skript beispielsweise folgende Schritte automatisieren:

  1. Dateien in einem Verzeichnis lokalisieren.
  2. Bilder nacheinander in ein Grafikprogramm laden.
  3. Änderungen durchführen und die bearbeiteten Dateien speichern.
  4. Eine Animation aus den bearbeiteten Bildern erstellen und speichern.

Datenintegration

Bearbeiten

Der Zusammenarbeit zwischen ARexx-kompatiblen Programmen sind dabei kaum Grenzen gesetzt. Beispielsweise kann ein ARexx-Skript auch

  1. Daten in einer Datenbankverwaltung aus einer Datenbank extrahieren,
  2. diese in einer Tabellenkalkulation berechnen,
  3. die Ergebnisse in einer Textverarbeitung in einem Dokument zusammenfassen.

Multimedia

Bearbeiten

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:

  1. Videos, Bilder und Audiodateien aus verschiedenen Verzeichnissen laden.
  2. Übergangseffekte zwischen einzelnen Inhalten hinzufügen.
  3. Texteinblendungen oder Untertitel automatisch generieren und einfügen.
  4. 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

Bearbeiten

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

Systemerweiterungen

Bearbeiten

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:

/* Alarm.rexx */
ARG event
IF event = 0 THEN EXIT
IF event = 1 THEN SAY "Programm wurde unerwartet beendet."
IF event = 2 THEN SAY "Programm hat seine Aufgabe abgeschlossen."
IF event = 3 THEN SAY "Keine Daten im Verzeichnis gefunden."

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

Bearbeiten

Es gab in der Vergangenheit Missverständnisse über die Möglichkeit, ARexx-Skripte zu kompilieren.

Programme wie Rexx Plus, RexxMasher[10] und ExecRexx[11] 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.

Literatur

Bearbeiten
  • Mike Cowlishaw: REXX: A Practical Approach to Programming. 2. Auflage. 1990, ISBN 0-13-780651-5 (englisch)
  • William S. Hawes: ARexx: An Implementation of REXX for Amiga. Dokumentation von 1987 (englisch)
  • Zamara, Chris; Sullivan, Nick: Using Arexx on the Amiga. Abacus Software Inc., 1991. ISBN 1-55755-114-6 (englisch)
  • Callaway, Merrill: The ARexx Cookbook. Whitestone, 1992. ISBN 0-9632773-0-8 (englisch)
  • Commodore International: AmigaOS 3.5 Documentation. 1993 (englisch)
Bearbeiten

Einzelnachweise

Bearbeiten
  1. Michael Cowlishaw: The REXX Language: A Practical Approach to Programming. 1st Auflage. Prentice Hall, 1985, ISBN 0-13-780651-5 (englisch).
  2. ARexx Users Reference Manual (englisch)
  3. Amiga Workbench 2.04 (englisch)
  4. a b Usenet-Community: Usenet-Diskussion zu ARexx (1991). 1991, abgerufen am 26. Januar 2025.
  5. RexxReqTools im Aminet - util/rexx/RexxReqTools.lha. Abgerufen am 9. Januar 2025.
  6. TritonRexx im Aminet - util/rexx/TritonRexx376.lha. Abgerufen am 9. Januar 2025.
  7. RexxTricks im Aminet - util/rexx/RexxTricks_386lha. Abgerufen am 9. Januar 2025.
  8. Fulvio Peruggi: EqFiles. (englisch).
  9. Alex Kazik: ALeXcompare. (englisch).
  10. ReXxMaShEr im Aminet - util/rexx/dcs_rexxmasher.lha. Abgerufen am 9. Januar 2025.
  11. ExecRexx im Aminet - util/rexx/ExecRexx.lha. Abgerufen am 9. Januar 2025.