Die Syntax für den ASCII-Filetransfer mit Terms97801 lautet:
<ESC>FA<Dateiname>;<Dateiinhalt><ESC>\
Wird kein Dateiname angegeben, so wird der Name beim Empfang über einen Windows-Dialog erfragt.
Zum Übertragen einer Datei genügt auf der UNIX-Seite folgendes Shell-Script:
echo "\033FApcfile.txt;\c"
cat testfile
echo "\033\\"
Ein erweitertes Skript mit dem Namen tft (terms file transfer), bei dem der Dateiname als Argument übergeben werden kann, befindet sich im Lieferumfang von Terms97801.
HINWEIS:
Bei der Angabe von Dateinamen mit Pfad für die DOS-Seite können
sowohl der DOS-übliche Backslash '\' , als auch der
UNIX-übliche Slash '/' verwendet werden. Da die Shell auf der UNIX-Seite
Backslash-Ersetzungen durchführt, müssen für einen Backslash
zweimal Backslash in den Aufrufen verwendet werden; bei der Weitergabe als
Parameter sind es sogar vier. Darum wird die Verwendung der UNIX-Notation
empfohlen.
Ein typischer Unterschied zwischen UNIX und DOS/Windows-Dateien ist die Art des Zeilenabschlusses. UNIX begnügt sich in der Regel mit einem Linefeed-Character, während auf der PC-Seite die Zeilen zusätzlich ein Carridge-Return enthalten. Beim Übertragen einer ASCII-Datei von UNIX zum PC kann Terms97801 die Linefeeds mit einem Carridge-Return erweitern. Hierzu muß im Dialog System..Filetransfer das Kästchen 'LF mit CR erweitern' angekreuzt sein.
Abb. 26: Dialog für die Einstellungen beim Filetransfer
Ist das Kästchen 'Dateinamen bestätigen' angekreuzt, wird Terms97801 bei einem Filetransfer den Namen, unter dem die Datei gespeichert werden soll, im Standard-Dialog zum Speichern anzeigen. Der Name kann bestätigt werden, oder es kann ein anderer Name/Verzeichnis gewählt werden. Dies geschieht auch dann, wenn die Datei ohne Namen, d.h. nur mit einem Strichpunkt nach der einleitenden Escape-Sequenz, versandt wurde.
Falls beim Filetransfer bereits eine Datei mit dem selben Namen existiert, wird eine Bestätigung zum Überschreiben verlangt.
Abb. 27: Bestätigung des Dateinamens beim Filetransfer
Wird hier 'Nein' gewählt, so kann über den Standard-Dialog zum Speichern einer Datei ein neuer Name gewählt werden.
Während des Filetransfers wird in einem Dialogfenster über den aktuellen Stand der Datenübertragung informiert. Dabei hat der/die Anwender/in die Möglichkeit, den Filetransfer abzubrechen. Der Abbruch des Filetransfers sollte aber vermieden werden, da sonst die Zeichen, die sich noch in den Puffern befinden, auf dem Bildschirm erscheinen.
Abb. 28: Feedback beim Filetransfer
Die Syntax für den binären Filetransfer mit Terms97801 lautet:
<ESC>FB<Dateiname>;<Dateiinhalt uuencoded><ESC>\
Das Shell-Skript auf der UNIX-Seite kann so aussehen:
uuencode pcfile.bin pcfile.bin > /tmp/pcfile.u.$$
echo "\033FBpcfile.bin;\c"
cat /tmp/pcfile.u.$$
echo "\033\\"
Ein erweitertes Skript mit dem Namen tftb (terms file transfer binary), bei dem der Dateiname als Argument übergeben werden kann, befindet sich im Lieferumfang von Terms97801.
HINWEIS:
Das Programm uuencode speichert beim Codieren
einen weiteren Namen, sowie die Rechte der Datei. Terms97801 wertet diese
beiden Angaben beim Decodieren nicht aus.
Tritt während des Filetransfers ein Fehler auf, oder wird der Filetransfer abgebrochen, so muß dies der UNIX-Seite mitgeteilt werden. Hierzu dient das Feld 'Quit-Character' im Dialog System..Filetransfer. Das hier in \-Notation angegebene Zeichen wird an den Host gesandt, um dort das Senden zu unterbrechen.
Da die Skripte für den Filetransfer mit Terms97801 die tty-Einstellungen verändern, darf das Shell-Skript nicht abgebrochen werden, bevor die tty-Einstellungen wieder auf die normalen Werte zurückgestellt wurden. Darum sollte mit trap eine Signalbehandlung mit eigener Exit-Routine programmiert werden.
Ein Quit-Character bricht zwar ein Shell-Skript ab, da aber die Puffer auf beiden Seiten der Verbindung noch voll sind, erscheinen Teile des Dateiinhalts auf dem Bildschirm, was meist stört.
Ein typischer Fall für einen Fehler beim Filetransfer ist die Angabe eines nicht existierenden oder schreibgeschützten Verzeichnisses oder eines ungültigen Dateinamens. Da bei solchen Fällen der Fehler schon nach der Übertragung des Dateinamens auftritt, sollte der Dateiinhalt nicht mehr an den PC gesandt werden. Ein sleep 1 vor dem cat gibt dem Shell-Skript etwas Zeit, den Quit-Character im Fehlerfall vor Ausführung des cat zu empfangen.
Ein Skript für den Filetransfer mit Fehlerbehandlung kann so aussehen:
# error handler - restore stty settings
_error()
{
if [ X$STTYSET = X ]
then
exit
else
stty $STTYSET
exit
fi
}
trap '_error' 2 3
# save the stty settings for restore
STTYSET=`stty -g`
stty -opost
echo "\033FA"$DEST";\c"
sleep 1
cat $1
RESULT=$?
echo "\033\\"
# restore stty settings
stty $STTYSET
Die Fehlerbehandlung in obigem Beispiel verhindert, daß bei Angabe eines falschen Dateinamens der Dateiinhalt auf der Anzeige erscheint. Wird ein binäres Programm mit uuencode codiert an den PC übertragen, kann es passieren, daß die Datei ordnungsgemäß übertragen wurde, aber bei der Decodierung ein Fehler auftrat. Um solche Fehler zu behandeln, kann Terms97801 mit der Escape-Sequenz <ESC>[96y nach dem Status des letzten Filetransfers befragt werden. (siehe: Befragen von Terms97801)
Mit der Befragung von Terms97801 läßt sich auch noch eine weitere Fehlermöglichkeit abfangen, nämlich der Versuch, einen Filetransfer an ein echtes 97801-Terminal zu starten.
Die Escape-Sequenzen
<ESC>FE<Dateiname>;<Dateiinhalt><ESC>\
<ESC>FF<Dateiname>;<Dateiinhalt><ESC>\
entsprechen den Sequenzen <ESC>FA und
<ESC>FB,
fragen aber nicht, ob eine Datei überschrieben werden soll. Diese
Erweiterung kann für automatisierte Filetransfers, die immer denselben
Dateinamen verwenden, nützlich sein.