Für die Übertragung von binären Dateien kann Terms97801 eine Verschlüsselung gemäß uuencode durchführen. Es gelten folgende Escape-Sequenzen:
<ESC>GA<Name>; ASCII-Datei mit Dateinamen
<ESC>GB<Name>; binäre Datei uuencoded mit
Dateinamen
<ESC>GC<Name>; ASCII-Datei mit Dateiauswahl-Dialog
<ESC>GD<Name>; binäre Datei uuencoded mit
Dateiauswahl-Dialog
Nach abgeschlossener Übertragung wird ein Linefeed und ein EOF (End
Of File) gesandt.
Das Linefeed ist notwendig, da ein EOF nur am Zeilenanfang erkannt wird.
Beim ASCII-Filetransfer wird die Datei also um eine leere Zeile länger.
Der EOF-Character kann in dem Dialog System..Filetransfer angegeben werden. Dort kann außerdem eingestellt werden, ob die unter DOS üblichen Carridge-Returns vor dem Senden entfernt werden sollen.
Als Beispiele wurden die Shell-Skripte tgf (terms get file) und tgfb (terms get file binary) in den Lieferumfang aufgenommen, von denen letzteres hier erläutert werden soll:
#!/bin/sh
#################################################
# tgfb - terms get file binary (uuencoded)
#################################################
Da die TTY-Parameter verändert werden, muß dafür gesorgt werden, daß sie beim Abbruch zurückgestellt werden.
# error handler - restore stty settings
_error()
{
if [ X$STTYSET = X ]
then
exit
else
stty $STTYSET
exit
fi
}
trap '_error' 2 3
Anzeige der Aufruf-Syntax
USAGE="\nUSAGE:tgfb [dosfile]\n"
# print options
if [ X$1 = X-h ]
then
echo $USAGE
exit
fi
Als erstes werden die aktuellen TTY-Einstellungen gespeichert
# save the stty settings for restore
STTYSET=`stty -g`
und dann alle Nachbearbeitungen abgeschaltet
stty -echo
stty kill ''
stty erase ''
stty -opost
Die zu empfangende Datei muß vorübergehend gespeichert werden und braucht einen eindeutigen Namen.
TMPFILE=/tmp/terms.fget.u.$$
Falls kein Dateiname angegeben wurde, wird er erfragt
# argument is DOS-file
if [ $# -lt 1 ]
then
SOURCE=Dos-File
# ask for file name
echo "\033GD\c"
cat > $TMPFILE
else
SOURCE=$1
# do not ask for file name
echo "\033GB"$2";\c"
cat > $TMPFILE
fi
RESULT=$?
Jetzt wird das TTY wieder in die normale Einstellung gebracht
# restore stty settings
stty $STTYSET
Die Decodierung sollte nur gestartet werden, wenn alles glatt ging
if [ $RESULT -ne 0 ]
then
echo "tgfb:Error: cat returned "$RESULT
exit $RESULT
else
echo "Starte Decodierung"
fi
# uudecode the file
Eingedeutschte Decodierung erwartet Beginn statt BEGIN
unset LANG
Decodiere und melde Ergebnis
uudecode $TMPFILE
RESULT=$?
if [ $RESULT -ne 0 ]
then
echo "tgfb:Error: uudecode returned "$RESULT
else
echo $SOURCE "empfangen\n"
fi
Die temporäre Datei muß gelöscht werden, sonst ist bald die Platte voll
# remove temporary file
rm $TMPFILE
Läuft z.B. auf dem UNIX-Host ein Editor, so kann eine Text-Datei über Drag&Drop in das Terms97801-Fenster 'gedroppt' werden. Der Editor empfängt dann die Textdatei, als sei sie über die Tastatur eingegeben worden.
Warnung:
Die Auswirkungen, wenn eine binäre Datei, z.B. ein Programm,
per Drag&Drop in eine UNIX-Anwendung gegeben wird, sind unvorhersehbar.
Aus diesem Grund sollte der Drag&Drop-Mechanismus für Anwender/innen
ohne technisches Hintergrundwissen gesperrt werden.