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.
ARexx | |
---|---|
Basisdaten
| |
Entwickler | William S. Hawes |
Erscheinungsjahr | 1987 |
Aktuelle Version | 1.15 (intern 53.4) (21. Februar 2013) |
Betriebssystem | AmigaOS |
Programmiersprache | ANSI C, Assembler (handoptimiert) |
Kategorie | Skriptsprache |
Lizenz | proprietär |
deutschsprachig | nein |
Geschichte
BearbeitenDer 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
BearbeitenARexx 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
BearbeitenARexx 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
BearbeitenDer 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
BearbeitenAufbau
BearbeitenJedes 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
BearbeitenEine 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
BearbeitenZu 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
BearbeitenBesondere 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
BearbeitenJede 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
BearbeitenEs 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
BearbeitenFü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
BearbeitenARexx 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
BearbeitenErweiterung bestehender Software
BearbeitenEin häufiges Einsatzgebiet von ARexx ist aufgrund seiner Interprozesskommunikation und der Unterstützung zahlreicher Anwendungen die Erweiterung der Funktionalität bestehender Software.
Grafikbearbeitung
BearbeitenWenn 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
BearbeitenDer 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
BearbeitenEin 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
BearbeitenARexx 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
BearbeitenARexx 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
BearbeitenEs 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)
Weblinks
BearbeitenEinzelnachweise
Bearbeiten- ↑ Michael Cowlishaw: The REXX Language: A Practical Approach to Programming. 1st Auflage. Prentice Hall, 1985, ISBN 0-13-780651-5 (englisch).
- ↑ ARexx Users Reference Manual (englisch)
- ↑ Amiga Workbench 2.04 (englisch)
- ↑ a b Usenet-Community: Usenet-Diskussion zu ARexx (1991). 1991, abgerufen am 26. Januar 2025.
- ↑ RexxReqTools im Aminet - util/rexx/RexxReqTools.lha. Abgerufen am 9. Januar 2025.
- ↑ TritonRexx im Aminet - util/rexx/TritonRexx376.lha. Abgerufen am 9. Januar 2025.
- ↑ RexxTricks im Aminet - util/rexx/RexxTricks_386lha. Abgerufen am 9. Januar 2025.
- ↑ Fulvio Peruggi: EqFiles. (englisch).
- ↑ Alex Kazik: ALeXcompare. (englisch).
- ↑ ReXxMaShEr im Aminet - util/rexx/dcs_rexxmasher.lha. Abgerufen am 9. Januar 2025.
- ↑ ExecRexx im Aminet - util/rexx/ExecRexx.lha. Abgerufen am 9. Januar 2025.