Dokument ist veraltet

Programmsteuerung easy: Shell & ARexx:

ARexx ist eine systemweite Skript-Sprache.
Über ARexx-Schnittstellen (Ports) erhält man Zugriff auf (fast) jede Funktion jeder Applikation oder System-Komponente.

WWW: ARexxGuide Copyright © 1993,1994 Robin Evans AmigaGuide® with ready-to-run examples, also HTML (english) | ARexx Online Users Guide (english) | SelfHTML HTML-Kurs (deutsch)

Beispiel: HTML-Bildkataloge mit ImageFX erstellen

Grundprinzip

ARexx ist zwar eine komplette Programmiersprache, aber es lassen sich auch einzelne Befehle von der Shell aus "absetzen". Folgende Befehlszeile startet z.B. den ARexx-Interpreter, um das Programm ImageFX anzuweisen, ein Bild zu öffnen:
Rx "ADDRESS IMAGEFX.1 LOADBUFFER 'RAM:Bild.jpg'"

Erklärung
 
Das folgende Beispiel soll die Einfachheit und Effizienz von ARexx im Zusammenspiel mit der Shell verdeutlichen: Zwei Shell-Skripte, die ImageFX Befehle übermitteln, um eine bestehende Bildersammlung um Thumbnail-HTML-Kataloge zu ergänzen.
 
Hinweis: Bildbearbeitungsfunktionen können auch viel eleganter - z.B. durch Freeware-Tools wie NetPBM - in die Shell integriert werden.
Die "korrekte" Vorgehensweise wäre übrigens, ein ImageFX-PlugIn komplett in ARexx zu schreiben. Man kann nämlich nicht nur aus der Shell heraus ARexx verwenden, sondern natürlich auch aus ARexx heraus das AmigaDOS - z.B. zur Datei-Stapelverarbeitung - benutzen (Portname "COMMAND").
 
 

benötigte Software:

Disclaimer

Die folgende Software wurde getestet unter AmigaOS 3.1 und ImageFX 4.1. Der Autor übernimmt keine Haftung für Datenverluste durch Benutzung der Software.
Bekannte Fehler:

Das erste Skript: Verzweigung in Unterverzeichnisse

Dieses Skript sorgt nur für die Rekursion in Unterverzeichnisse, wo dann das Haupt-Skript die eigentliche Arbeit erledigt. Es muss im Stammverzeichnis der Bildersammlung gestartet werden.
 
# s:htmlcat-rx / Download
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
SET hcwd `CD`
 
LIST DIRS ALL P ~(tn) LFORMAT "CD %F%N*NCD*Nhtmlcat-rx.script" >T:htmlcat-rx-stapel.$process
IF `LIST T:htmlcat-rx-stapel.$process LFORMAT %L` EQ "empty"
DELETE T:htmlcat-rx-stapel.$process
ELSE
EXECUTE T:htmlcat-rx-stapel.$process
DELETE T:htmlcat-rx-stapel.$process QUIET
ENDIF
 
CD $hcwd
 
UNSET hcwd
 
htmlcat-rx.script

Das Skript sollte sich mit gesetztem Script-Bit (protect s:htmlcat-rx +s) im S: Verzeichnis (sys:s/) befinden. Damit ist sichergestellt, dass das Skript sich im Suchpfad der Shell befindet und wie ein Kommando ausgeführt werden kann.
Erklärung
01 SET hcwd `CD`

 
Legt in der Shell-Variablen hcwd den Pfadnamen des Stammverzeichnisses ab.

 
 
03 LIST DIRS ALL P ~(tn) LFORMAT "CD %F%N*NCD*Nhtmlcat-rx.script" >T:htmlcat-rx-stapel.$process

 
Erzeugt eine temporäre Befehlsdatei, die in sämtliche Unterverzeichnisse verzweigt, und dort jeweils das Haupt-Skript startet.

 
 
04  IF `LIST T:htmlcat-rx-stapel.$process LFORMAT %L` EQ "empty"

 
Beginn einer bedingten Programmausführung. Standard-Sicherheitsabfrage.
Der folgende Block wird ausgeführt, falls das eben erzeugte Skript leer ist (also keine Unterverzeichnisse vorhanden sind). Durch diese Abfrage wird verhindert, dass eine leere Befehlsdatei ausgeführt wird, was zu einem Fehler-Abbruch führen würde.
 
 
05   DELETE T:htmlcat-rx-stapel.$process

 
Das leere temporäre Skript wird gelöscht.
 
 
06  ELSE

 
Falls die temporäre Datei nicht leer ist:
 
 
07   EXECUTE T:htmlcat-rx-stapel.$process

 
Führt das temporäre Skript aus.
 
 
08   DELETE T:htmlcat-rx-stapel.$process QUIET

 
Löscht das temporäre Skript.
 
 
09  ENDIF

 
Ende der bedingten Ausführung.
 
 
11 CD $hcwd

 
Wechselt wieder ins Stammverzeichnis.
 
 
13 UNSET hcwd

 
hcwd wird nicht mehr gebraucht.
 
 
15 htmlcat-rx.script

 
Führt das Haupt-Skript im Stammverzeichnis aus.
 
 

Das Haupt-Skript: Katalog-Erzeugung

# s:htmlcat-rx.script / Download
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
SET WD `cd`
 
ECHO "<html><head><meta http-equiv=*"Content-Type*" content=*"text/html; charset=iso-8859-1*"><title>HTML-Katalog: $WD</title></head>" >index.htm
ECHO "<body><a href=*"../index.htm*">zurück</a><br><br>" >>index.htm
ECHO "<h4 align=*"center*">$WD/</h4><p align=*"center*">Thumbnail-Gr&ouml;&szlig;e: 15%<br><br><br>" >>index.htm
 
LIST DIRS P ~(tn) LFORMAT "ECHO *"DIR: <a href=***"%N/index.htm***">%N/</a><br>*" >>index.htm" >T:dirs.$process
IF `LIST T:dirs.$process LFORMAT %L` EQ "empty"
DELETE T:dirs.$process QUIET
ELSE
SORT T:dirs.$process T:dirs.$process
EXECUTE T:dirs.$process
DELETE T:dirs.$process QUIET
ENDIF
 
IF NOT EXISTS tn/
MAKEDIR tn
ENDIF
 
LIST P #?.(jpg|jpeg|jfif|tga|targa|gif|ilbm|iff|bmp|pcx|png) LFORMAT "IF NOT EXISTS tn/%M.gif*NRx *"ADDRESS IMAGEFX.1 LOADBUFFER '$WD/%N' FORCE*"*NRx *"ADDRESS IMAGEFX.1 SCALE 15 15 PERCENT*"*NRx *"ADDRESS IMAGEFX.1 COLOR2CMAP 256 NONE*"*NRx *"ADDRESS IMAGEFX.1 SAVEBUFFERAS GIF '$WD/tn/%M.gif'*"*NENDIF" >T:htmlcat-rx.$process
IF `LIST T:htmlcat-rx.$process LFORMAT %L` EQ "empty"
DELETE T:htmlcat-rx.$process QUIET
ELSE
EXECUTE T:htmlcat-rx.$process
DELETE T:htmlcat-rx.$process QUIET
ENDIF
 
LIST P #?.(jpg|jpeg|jfif|tga|targa|gif|ilbm|iff|bmp|pcx|png) LFORMAT "ECHO *"<a href=***"%N***">*" noline >>T:tmp.$process*NPicSize tn/%M.gif >>T:tmp.$process*NECHO *"alt=***"%N***" border=***"0***"></a>*" >>T:tmp.$process" >T:index.$process
IF `LIST T:index.$process LFORMAT %L` EQ "empty"
DELETE T:index.$process QUIET
ELSE
EXECUTE T:index.$process
DELETE T:index.$process QUIET
ENDIF
 
IF EXISTS T:tmp.$process ;its opened with >>, not >
IF `LIST T:tmp.$process LFORMAT %L` EQ "empty"
DELETE T:tmp.$process QUIET
ELSE
Rep T:tmp.$process "ALT=*"*" BORDER=*"0*">*N" ""
SORT T:tmp.$process T:tmp.$process
TYPE T:tmp.$process >>index.htm
DELETE T:tmp.$process QUIET
ENDIF
ENDIF
 
ECHO "<br clear=*"all*"><br><br>" >>index.htm
 
LIST P #?.(jpg|jpeg|jfif|tga|targa|gif|ilbm|iff|bmp|pcx|png) LFORMAT %N >pix.txt
IF `LIST pix.txt LFORMAT %L` EQ "empty"
DELETE pix.txt QUIET
ELSE
SORT pix.txt pix.txt
ECHO "<a href=*"pix.txt*">Liste der Bildnamen zum Batch-Download</a>" >>index.htm
ENDIF
 
ECHO "</p><hr><p align=*"right*"><small>htmlcat-rx by Alexander Richter<br>ImageFX &copy; Nova Design<br>PicSize by Christopher Naas<br>Rep by D. Keletsekis<br>ARexx, Shell, Datatypes &copy; Amiga Inc.</small></p></body></html>" >>index.htm

Erklärung
03 ECHO "<html><head><meta http-equiv=*"Content-Type*" content=*"text/html; charset=iso-8859-1*"><title>HTML-Katalog: $WD</title></head>" >index.htm
04 ECHO "<body><a href=*"../index.htm*">zurück</a><br><br>" >>index.htm
05 ECHO "<h4 align=*"center*">$WD/</h4><p align=*"center*">Thumbnail-Gr&ouml;&szlig;e: 15%<br><br><br>" >>index.htm


Schreibt den Kopf des HTML-Dokuments (aktuelles Verz./index.htm).

07 LIST DIRS P ~(tn) LFORMAT "ECHO *"DIR: <a href=***"%N/index.htm***">%N/</a><br>*" >>index.htm" >T:dirs.$process
08 IF `LIST T:dirs.$process LFORMAT %L` EQ "empty"
09 DELETE T:dirs.$process QUIET
10 ELSE
11 SORT T:dirs.$process T:dirs.$process
12 EXECUTE T:dirs.$process
13 DELETE T:dirs.$process QUIET
14 ENDIF

 
Erzeugt Links zu Unterverzeichnissen (falls vorhanden). Ausführung der Stapel-Datei mit vorheriger Sicherheitsabfrage (Zeien 8-14).
 
 
16 IF NOT EXISTS tn/
17 MAKEDIR tn
18 ENDIF

 
Erzeugt das Thumbnail-Verzeichnis, falls es nicht schon existiert.
 
 
20 LIST P #?.(jpg|jpeg|jfif|tga|targa|gif|ilbm|iff|bmp|pcx|png) LFORMAT "IF NOT EXISTS tn/%M.gif*NRx *"ADDRESS IMAGEFX.1 LOADBUFFER '$WD/%N' FORCE*"*NRx *"ADDRESS IMAGEFX.1 SCALE 15 15 PERCENT*"*NRx *"ADDRESS IMAGEFX.1 COLOR2CMAP 256 NONE*"*NRx *"ADDRESS IMAGEFX.1 SAVEBUFFERAS GIF '$WD/tn/%M.gif'*"*NENDIF" >T:htmlcat-rx.$process

 
Erzeugt die Befehlsdatei, die die (noch nicht vorhandenen) Thumbnails erzeugt.
 
 
28 LIST P #?.(jpg|jpeg|jfif|tga|targa|gif|ilbm|iff|bmp|pcx|png) LFORMAT "ECHO *"<a href=***"%N***">*" noline >>T:tmp.$process*NPicSize tn/%M.gif >>T:tmp.$process*NECHO *"alt=***"%N***" border=***"0***"></a>*" >>T:tmp.$process" >T:index.$process

 
Erzeugt das Skript, das den HTML-Code für die Thumbnails in die temporäre Datei T:tmp.$process schreibt.
 
 
36 IF EXISTS T:tmp.$process ;its opened with >>, not >
37 IF `LIST T:tmp.$process LFORMAT %L` EQ "empty"
38 DELETE T:tmp.$process QUIET
39 ELSE
40 Rep T:tmp.$process "ALT=*"*" BORDER=*"0*">*N" ""
41 SORT T:tmp.$process T:tmp.$process
42 TYPE T:tmp.$process >>index.htm
43 DELETE T:tmp.$process QUIET
44 ENDIF
45 ENDIF

 
Der temporäre HTML-Code wird, falls vorhanden, korrigiert und an index.htm angefügt.
 
 
Anschliessend muss nur noch das Ende des HTML-Dokuments in index.htm geschrieben werden. Ausserdem wird noch eine Text-Liste der Bildnamen generiert (47-57).
 
Das Ergebnis sieht dann z.B. so aus:




16.5.2002