[Allegro] avanti-cl als Konsolprogramm
Bernhard Eversberg
ev at biblio.tu-bs.de
Di Mai 15 11:48:33 CEST 2007
Auf dem Expertentreffen wurde Bedarf artikuliert für
Konsolprogramme, die unabhängig von Benutzeroberfläche
und Plattform genutzt werden können.
Ein solches Programm ist:
avanti-cl.exe bzw. avanti-cl (UNIX/LinuX)
===========================================
Konsolprogramm zum Abarbeiten von FLEXen
"cl" steht für "command line" und bedeutet nichts anderes, als daß
avanti-cl.exe alleinstehend betrieben werden kann. Es läßt sich
direkt von der Kommandozeile aus starten, kann aber auch aus
Programmen heraus gestartet werden. Es kann nicht über TCP-IP
angesprochen werden, denn dazu fehlt ihm der entsprechende
Teil von avanti.
Außerdem arbeitet das Programm nur einen Job ab und beendet sich dann.
Es ist kein Dienst oder Server oder sonst etwas in der Art.
avanti.exe / avanti ist ein Programm, das FLEX-Jobs über TCP/IP
empfängt und für jeden Job avanti-cl startet, um ihm den
Job zu übergeben.
Im Gegensatz zum ExFLEX-Konzept wird kein laufendes a99.exe zum
Abarbeiten eines FLEXes benutzt. avanti-cl hat keine Benutzerober-
fläche und kann daher auch gestartet werden, wenn niemand eingeloggt
ist. Es kann nur eine FLEX-Datei einlesen und ausführen.
Arbeitsweise
============
avanti-cl bekommt einen ganz normalen avanti-FLEX über die Standard-
eingabe, arbeitet ihn ab, und liefert das Ergebnis auf der Standard-
ausgabe aus.
Jeder Befehl, der eine Ausgabe erzeugt (write, qrix, ...), schreibt
diese sofort raus. Vom Ergebnis wird nichts im Programm gepuffert.
Randbedingungen
===============
Es gibt folgende Dinge zu beachten:
- Ein Job darf maximal 200k (200 * 1024 Bytes) groß werden.
- Ausgaben werden ungepuffert auf die Standardausgabe ausgegeben.
Für eine Pufferung muss eine eventuell benutzte Programmumgebung
sorgen.
- Das Programm kann keinen zip-komprimierten Job annehmen und
liefert das Ergebnis ebenfalls nicht komprimiert ab. Der Befehl
compress funktioniert also nicht. Das ist aber nicht schlimm. Die
Möglichkeit war sowieso für die schnellere Datenübertragung über
TCP-IP vorgesehen. Da dieses Programm das nicht macht, muss das
aufrufende Programm sich eben bei Bedarf darum kümmern.
- Es können alle FLEX-Befehle benutzt werden, die in der
FLEX-Dokumentation rot mit "avanti" markiert sind.
- Es werden keine Registry-Eintraege verwendet.
- Erwartet wird nur dieses :
<installpath>/avanti-cl.exe -- das Binary
<installpath>/../etc/avanti.conf -- Konfigurationsdatei
<installpath>/../etc/uifsGER -- User Interface File
Also z.B. avanti-cl.exe auf c:\allegro und avanti.conf + uifsger
auf c:\etc
- Fehlermeldungen gehen an stderr.
Einsatz
=======
Aufruf von der Kommandzeile
---------------------------
avanti-cl <abc.job >ergebnis.txt 2>>fehler.txt
Soll heißen: Durch Dateiumlenkung erhält das Programm den Job aus der Datei
abc.job. Das Ergebnis wird in die Datei ergebnis.txt geschrieben. Die
Fehlermeldungen werden an die Datei fehler.txt angehängt. Letzteres
funktioniert nur unter Win'NT und Nachfolgern. Sonst erscheinen die
Meldungen auf dem Bildschirm.
Eine andere Möglichkeit ist diese:
abc.exe | avanti-cl.exe 2>>logging.xml | xyz.exe
wenn abc.exe eine FLEX-Datei über stdout ausgibt und xyz.exe den
Ausgabetext über stdin annehmen kann.
Aufruf von einem Programm aus
-----------------------------
Allgemein startet man avanti-cl als Subprozess und verbindet
es mit Pipes über die Standardkanäle mit dem Programm.
Mehr Informationen über die Mailingliste Allegro