Mit der Sequenz <ESC>XN, gefolgt von einem Programmnamen und <ESC>\, wird das angegebene Programm gestartet. Mit <ESC>XI geschieht dies als iconisiertes, mit <ESC>XJ als maximiertes und mit <ESC>XH als unsichtbares Programm. Dies gilt jedoch nur für Windows-Programme; für DOS-Programme gelten die Angaben der zugehörigen PIF-Datei.
Beispiel: echo "\033XNnotepad\033\\"
Im Lieferumfang befindet sich das Shell-Skript winexec. Dieses Skript erspart die direkte Angabe der Escape-Sequenz und läßt sich wie ein UNIX-Befehl aufrufen...
Beispiel: winexec "notepad c:/autoexec.bat"
Werden Windows-Programme aus einem Shell-Skript heraus gestartet, so kann die Beendigung des Programms zwingend notwendig sein, bevor der nächste Befehl des Shell-Skripts ausgeführt wird. Dies ist z.B. der Fall, wenn das Windows-Programm eine Datei erzeugt, die anschließend vom Shell-Skript abgeholt wird.
Für solche Fälle kann ein Programmstart mit Warten auf Beendigung ausgeführt werden. Die entsprechenden Escape-Sequenzen lauten analog: <ESC>Xn, <ESC>Xi, <ESC>Xj und <ESC>Xh. Terms97801 startet dann das Programm und sendet nach der Beendigung den String executed gefolgt vom Exitcode des Programms an den Host. Das Warten im Shell-Skript geschieht mittels einer read-Anweisung.
Beispiel:
echo \033Xnnotepad\033\\
read RESULT
Mit der Sequenz <ESC>XK, gefolgt von einem Dateinamen einer Tastaturbelegung (*.key) und <ESC>\, wird die angegebene Tastaturbelegung geladen.
Mit einer entsprechenden Sequenz in der .profile wird an jedem PC-Arbeitsplatz immer die persönliche Tastaturbelegung geladen. Hierzu muß die persönliche Tastaturbelegung an jedem Arbeitsplatz verfügbar sein. Dies kann entweder durch lokal gehaltene Kopien oder durch eine global verfügbare Datei im Netz erreicht werden.
Beispiel: echo "\033XKc:/terms/otto.key\033\\"
Falls kein Netz vorhanden ist, und die persönliche Tastaturtabelle nicht überall verfügbar ist, kann die Tastaturbelegung auch als UNIX-Datei gehalten und mit dem Terms97801-Filetransfer vorher auf den PC übertragen werden.
Mit der Sequenz <ESC>XT, gefolgt von dem Namen einer Tastaturschablone und <ESC>\ wird diese Tastaturschablone geladen. Falls die Schablone noch nicht angezeigt wurde, wird sie durch obige Escape-Sequenz aktiviert. Mit einem leeren Namen läßt sich die Schablone wieder ausschalten.
Werden verschiedene UNIX-Anwendungen von den Anwendern durch ein Menüsystem ausgewählt, kann dieses leicht auf ein automatisches Laden der passenden Tastaturschablone erweitert werden.
Mit dem Laden einer Tastaturschablone können weitere Einstellungen für Terms97801 verbunden werden. Befindet sich in der Ini-Datei eine Sektion mit dem gleichen Namen wie die Tastaturschablone (ohne Pfad und Erweiterung), so werden aus dieser Sektion die Einstellungen für die Zwischenablage, die Attributfarben und die Maussteuerung eingelesen. Näheres findet sich im nächsten Abschnitt und in Aktivieren anwendungsspezifischer Einstellungen durch Tastaturschablonen.
Im Lieferumfang befindet sich das Shell-Skript lt (load template) und lk (load keyboard). Diese Skripte ersparen die direkte Angabe der Escape-Sequenzen und lassen sich wie ein UNIX-Befehl aufrufen.
Beispiel:
lk c:/terms/otto.key
lt c:/terms/tabellen/hit50.sbl
Die Einstellungen, die durch bestimmte Ini-Sektionen beschrieben werden, können durch UNIX aktiviert werden. Hierzu dienen folgende Escape-Sequenzen:
<ESC>XA<Ini-Sektion><ESC>\ für Attribute
<ESC>XC<Ini-Sektion><ESC>\ für Clipboard
<ESC>XM<Ini-Sektion><ESC>\ für
Maussteuerung
<ESC>XB<Ini-Sektion><ESC>\ für Cursor
<ESC>XU<Ini-Sektion><ESC>\ für
Filetransfer
<ESC>XX<Ini-Sektion><ESC>\ für Connect
Es wird nach der angegebenen Ini-Sektion gesucht und die Einträge werden
so eingelesen, als ob sie in der normal benannten Ini-Sektion stünden.
Wird keine Ini-Sektion angegeben, so wird die normal benannte Ini-Sektion
eingelesen. Wird eine nicht existierende Ini-Sektion angegeben, so werden
die Default-Werte wie beim ersten Start von Terms97801 aktiviert.
Passende Ini-Sektionen werden am einfachsten dadurch erzeugt, daß eine
vorhandene Ini-Sektion dupliziert und umbenannt wird.
HINWEIS:
Die ersten drei Escape-Sequenzen werden durch das Laden einer Tastaturschablone
aktiviert. Dabei gilt: Name der Schablone ohne Pfad und Suffix wird als Name
der Ini-Sektion verwendet.
Beispiel: Eigene Farben durch Escape-Sequenz einstellen
Mit der Cursor-Sektion kann der Cursor und die Fontgröße von UNIX aus eingestellt werden.
Mit der Filetransfer-Sektion kann nicht nur die
Carridge-Return-Linefeed-Ersetzung
gesteuert werden, sondern auch der Drucker eingestellt werden.
Mit der Connect-Sektion können Optionen wie 'Trennen nur durch
Host' oder 'Schließe bei Verbindungsende' von UNIX aus aktiviert
werden. Auch die Titelzeile kann so gesetzt werden.
Die obigen Escape-Funktionen gibt es auch mit Kleinbuchstaben. In diesem Fall wird keine Angabe der Ini-Sektion benötigt, da diese Funktionen die zuvor eingestellten Werte wieder aktivieren. Dies kann nötig werden, wenn mit obigen Escape-Sequenzen Einstellungen vorgenommen wurden und durch z.B. durch einen Benutzerabbruch die alten Werte wieder hergestellt werden sollen.
<ESC>Xt<ESC>\ für letzte Tastaturschablone
<ESC>Xa<ESC>\ für letzte Attribute
<ESC>Xc<ESC>\ für letzte Clipboard-Einstellung
<ESC>Xm<ESC>\ für letzte Maussteuerung
<ESC>Xb<ESC>\ für letzte
Cursoreinstellung
Um von UNIX aus dem Benutzer etwas mitzuteilen, wird die Nachricht (mit dem
echo-Befehl) auf den Bildschirm geschrieben. Mit Terms97801 ist es möglich,
Nachrichten als Windows-Dialog mit OK-Knopf anzeigen zu lassen.
Ein Grund, diese Terms97801-Funktion einzusetzen, ist die größere
Auffälligkeit gegenüber der Ausgabe auf dem UNIX-Bildschirm. So
kann z.B. das Eintreffen elektronischer Post über einen Windows-Dialog
gemeldet werden.
Ein anderer Grund, diese Funktion einzusetzen, ist z.B. die Abfrage, für
welchen Druckertyp der Ausdruck aufbereitet werden soll. Da eine solche Abfrage
aus einer laufenden Anwendung geschieht, würde der 'normale UNIX-Dialog'
den Bildschirminhalt der laufenden Anwendung zerstören.
Mit der Sequenz <ESC>XO, gefolgt einem Text und <ESC>\ wird dieser Text als Windows-Nachricht mit OK-Knopf angezeigt. Nach Betätigen des OK-Knopfs wird ein 'newline' an UNIX gesendet, so daß in einem Shell-Skript mit einem read auf die Bestätigung gewartet werden kann.
Zum Beipiel:
echo "\033XOSie haben Post\033\\"; read
Abb. 29: Windows-OK-Dialog mit Terms97801-Escape-Sequenz
Mit der Sequenz <ESC>XY, gefolgt von einem Text und <ESC>\ wird dieser Text als Windows-Dialog mit Ja/Nein-Auswahl angezeigt. Nach dem Drücken einer der beiden Knöpfe werden Y bzw. N und 'newline' an UNIX gesendet.
echo "\033XYJa oder Nein\033\\"; read ANSWER
Abb. 30: Windows-Ja/Nein-Dialog mit Terms97801-Escape-Sequenz
Mit der Sequenz <ESC>XE, gefolgt von einem Text und <ESC>\ wird dieser Text als Beschriftung eines Windows-Eingabe-Dialogs angezeigt. Die Eingabe wird nach Bestätigung mit dem OK-Knopf an UNIX gesendet. Befindet sich im Text ein Strichpunkt, so wird alles, was dem Strichpunkt folgt, als Vorbelegung für das Eingabefeld verwendet.
Der Baustein für ein Shell-Skript kann z.B. so aussehen:
stty -echo
echo "\033XE\c"
echo "Bitte geben Sie den Monat ein;Januar\033\\"
read ANSWER
echo $ANSWER
stty echo
Zur Auswahl aus mehreren Möglichkeiten kann ein Dialog mit einer Radioschalter- oder Kästchenschalter-Auswahl angezeigt werden.
Syntax für Kästchenschalter-Auswahl:
<ESC>XQ<Frage>;<An/Aus><Schaltertext1>;......;<ESC>\
Syntax für Radioschalter-Auswahl:
<ESC>XR<Frage>;<An/Aus><Schaltertext1>;......;<ESC>\
Es sind maximal 16 Schalter zulässig; der String darf maximal aus 256 Zeichen bestehen. Die Auswahl des Benutzers wird mit durch 'blank' getrennten Zahlen zurückgemeldet. Beim Abbruch wird 0 an den Host gesandt.
Beispiele:
echo "\033XQWas möchten Sie essen?; \Suppe;xHauptgericht;xNachtisch;\033\\"
Abb. 31: Windows-Kästchen-Auswahl mit Terms97801-Escape-Sequenz
echo "\033XRWie geht's?; schlecht; mittel;xgut;\033\\"
Abb. 32: Windows-Radioschalter-Auswahl mit Terms97801-Escape-Sequenz
Die Radio- und Kästchenauswahl ist auf maximal 16 Einträge beschränkt. Sollen mehr Auswahlmöglichkeiten angeboten werden, so kann eine Listbox-Auswahl verwendet werden. Mit der Sequenz <ESC>Xl<Text>;<listeneintrag1>;....<ESC>\, wird ein Listbox-Dialogs angezeigt. Die ausgewählte Zeile wird nach Bestätigung mit dem OK-Knopf an UNIX gesendet.
Mit <ESC>Xq<Text>;<listeneintrag1>;....<ESC>\ wird ebenfalls eine Listbox angezeigt. Aus dieser Listbox können mehrere Einträge ausgewählt werden. Die Auswahl wird zeilenweise zurückgegeben. Die letzte Zeile besteht aus der Zeichenfolge EOF.
Mit der Listenauswahl ist es möglich eine UNIX-Datei-Auswahl im Windows-Stil zu erzeugen.
Der Baustein für ein Shell-Skript kann z.B. so aussehen:
stty -echo
while true
do
# get the current directory
TEXT=`pwd`
# show windows list box
echo "\033XlVerzeichnis:$TEXT;../;\c"
ls -lcpb | tail +2 | awk '{ printf( "%-14s %7d %2d.%s %s;", $9, $5, $6,
$7, $8) }'
echo '\033\\\c'
read LINE
LINE=`echo $LINE | cut -d" " -f1`
case $LINE in
../) cd ..;;
*/) cd $LINE;;
*) stty echo;
echo $LINE
exit;;
esac
done
Abb. 33: Windows-Listen-Auswahl mit Terms97801-Escape-Sequenz
Als ausführlicheres Beispiel für die Benutzerdialoge befindet sich im Lieferumfang das Skript tour.
Unter Windows, ganz besonders bei PC-Netzwerken, können
mehrere Drucker installiert sein. Ein UNIX-Ausdruck auf dem PC erfordert
die Druck-Aufbereitung des Dokuments auf der UNIX-Seite. Dies setzt die Kenntnis
des Druckers am PC voraus. Soll ein UNIX-Ausdruck auf
verschiedenen Druckern möglich sein, so muß der/die Anwender/in
nach dem gewünschten Drucker gefragt werden.
Mit <ESC>XP<ESC>\ wird der Dialog zur Druckerauswahl
angezeigt und der ausgewählte Treibername zurückgegeben. Dieser
Dialog kann dazu benutzt werden, einen Drucker zu erfragen, bevor die
Druckaufbereitung durch UNIX gestartet wird.
Auch die Überprüfung, ob eine bestimmte Datei oder ein bestimmtes
Verzeichnis vorhanden ist, kann gelegentlich nützlich sein.
Mit der Escape-Sequenz
<ESC>XZ<Dateiname><ESC>\ wird versucht,
die angegebene Datei zu öffnen. Gelingt dies, so wird 'true', gefolgt
von '0' oder '1' an den Host gesandt. 0 bedeutet, daß es sich um einen
wechselbaren Datenträger handelt. 1 bedeutet, daß es sich um eine
Festplatte handelt.
Kann die Datei nicht geöffnet werden, wird 'false' gefolgt vom Fehlercode an den Host gesandt. Als Fehlercode wird der Wert 2 für "Datei existiert nicht" oder 3 "Pfad existiert nicht" gesendet. Die Existenz eines Verzeichnisses läßt sich durch die Frage nach einer Datei in diesem Verzeichnis realisieren. Wird 'false' mit dem Fehlercode 3 zurückgegeben, so existiert das Verzeichnis nicht. Als Beispiel hierfür befinden sich im Lieferumfang die Skripte testfile und testdir.
Anmerkung:
Der Fehlercode entspricht dem DOS-Fehler. Für WindowsNT 4.0 wird aus
Kompatibilitätsgründen ebenfalls der DOS-Fehler zurückgegeben,
aber leider nicht genauso wie unter DOS/Windows95. Das Skript
testdir funktioniert darum nicht unter WindowsNT 4.0.
Für die Interaktion mit dem/r Benutzer/in bei Dateiübertragungen sind Funktionen zur Auswahl einer Datei und eines Verzeichnisses vorhanden.
Mit der Escape-Sequenz <ESC>XF<Vorgabe-Dateiname><ESC>\ wird ein Dateiauswahl-Dialog und mit <ESC>XD<Vorgabe-Verzeichnis><ESC>\ wird ein Verzeichnisauswahl-Dialog angezeigt. Der ausgewählte Dateiname bzw. das ausgewählte Verzeichnis wird an den Host gesandt. Der Pfad wird in UNIX-Notation, also mit / statt \ zurückgegeben. Im Fehlerfall wird 'error', beim Abbruch durch den Anwender 'canceled' gesandt.
Beispiel:
$ echo "\033XDC:/DOS\033\\"
Abb. 34: Windows-Verzeichnis-Auswahl mit Terms97801-Escape-Sequenz
Das Beispiel tft verwendet diese Escape-Sequenz zur Auswahl eines Dateinamens. Das Beispiel tounix verwendet die Escape-Sequenz zur Auswahl eines Verzeichnisses.
Mit
<ESC>XG<Pfad/name.suffix><ESC>\ wird ebenfalls
ein Dateiauswahl-Dialog angeboten. Im Unterschied zur Funktion von
<ESC>XF können in dem Dialog mehrere Dateien
ausgewählt werden. Die Übergabe der ausgewählten Dateien erfolgt
zeilenweise; die erste Zeile gibt den Pfad an, es folgen die Dateien; die
letzte Zeile besteht aus der Zeichenkette EOF.
Im Lieferumfang befindet sich das Beispiel selfiles .
Mit
<ESC>XL<Pfad><ESC>\ wird der Inhalt des
angegebenen Verzeichnisses ausgegeben. Die Übergabe erfolgt zeilenweise;
die letzte Zeile besteht aus der Zeichenkette EOF.
Im Lieferumfang befindet sich das Beispiel getdir .
Mit <ESC>XW<Buchstabe><ESC>\ kann die Art der Anzeige von Terms97801 verändert werden. Als <Buchstabe> können folgende Werte eingesetzt werden:
H für verstecken,
I für iconisieren,
M für maximieren und
S für wiederherstellen.
Die Abfragen für DOS- und Windows-Version und das DOS-Environment sind sehr nützlich, wenn die PCs verschieden konfiguriert sind, aber ein Shell-Skript für die verschiedenen PC-Konfigurationen benutzt werden soll. Über die Environment-Abfrage läßt sich das temporäre Windows-Verzeichnis erfragen. Auch Pfade zu Programmen, die von UNIX aus gestartet werden sollen, können über eine DOS-Environment-Variable hinterlegt werden.
Mit
<ESC>XV<Buchstabe><ESC>\ können DOS-
und Windows-Version und das DOS-Environment abgefragt werden.
Als <Buchstabe> können folgende Werte eingesetzt werden:
D für DOS-Version; liefert 0 0 unter WindowsNT 4.0 und 7 0 unter Windows95
W für Windows-Version,
E für DOS-Environment,
F für Windows-Flags; liefert immer 0 0 0 0; nur aus Kompatibilität
noch vorhanden; und
X für erweiterte Versionsinformation; liefert Windows-Typ, Major-Version,
Minor-Version, Build
Im Lieferumfang befinden sich die Beispiel-Skripte getver und getenv.
Anmerkung:
Unter WindowsNT wird statt des DOS-Environments das NT-Enviroment an UNIX
gesendet.
Beispiel: Ausgabe von getver (unter WindowsNT 4.0:)
$ getver
Ihre DOS-Version: 0 0
Ihre Windows-Version: WinNT Build: 1381
Major: 4 Minor: 0
$