Previous Next Contents

3. Erste Schritte mit Mimechan

3.1 Was ist ein Channel

In TCL ist ein Channel so wie ein Stream in C++. In TCL gibt es ein Einheitliches Interface Konzept für Ausgabe- und Eingabeströme. Man kann so genau auf die gleiche Art eine Datei, ein Socket, oder ein Gerät ansprechen.

Beispiel in TCL


set file [open gizmofile w]
puts -nonewline $fout "Dieser Satz wird zu Datei gizmofile geschrieben"
close $file 

Die Idee des Mimechannel ist, den Konventierungsalgorithmus in solchen Channel zu kapseln. Man schreibt in Mimechannel mit Hilfe von put irgendwelche Daten und beim lesen (durch read) bekommt man kodierte oder dekodierte Daten.

3.2 Erweiterungspaket laden

Um Mimechannel richtig nutzen zu können, muß man in den Interpreter die Bibliothek mimechan.so erstmal laden. Das geschieht mit


load $PATH/mimechann.so MIMECHAN

Wobei selbstverständlich die Variable $PATH mit dem Pfad zu der Datei mimechan.so zu initialisieren ist.

3.3 Ein Channel Öffnen

ein Channel öffnet man Kommando mimechan deren Syntax Darstellung in BNF (Backus-Naur-Form) ist


mimechann <normaloption>|<specialoption>
<normaloption> ::=  (-decode|-encode) (-base64|-qouted-printable|-uucode)
<specialoption> ::= -encode -qouted-printable -noLFconvert

Als Rückgabewert bekommt man einen Händler für gerade geöffnetes Mimechannel, der für Schreib- und Lesefunktionen des TCL als Argument zu übergeben ist.

3.4 Optionen des Mimechannel

Die Optionen sind angeordnet.

Hauptoptionen, sind immer notwendig

Nebenoptionen

-noLFconvert kann nur mit Optionnen -encode -quoted-printable eingesetz werden. Normalleweise werden auch Bruchzeilen kodiert. Diese Option unterdrückt dieses Verhalten.

3.5 Praktisches Beispiel

Kodierung zu base64

Ein Satz kodieren und auf dem Terminal ausgeben


set Z [mimechan -encode -base64]
puts -nonewline $Z "Dieser Satz wird zu base64 kodiert"
puts -nonewline [read $Z]
close $Z

close $Z ist wichtig, weil bis dahin unnötig der Speicherplatz belegt wird

Wichtig: Nach ersten read-Zugriff kann in den Channel nicht mehr geschrieben werden. (Erklärung sehe KODIERUNG)

Dekodierung von base64

In Datei test.base64 liegt eine base64 kodierte Datei. Diese Datei soll dekodiert ausgeben werden.


set Z [mimechan -decode -base64]
set fin [open test.base64 r]
puts -nonewline $Z [read $fin]
close $fin
puts [read $Z]
close $Z

In diesem Fall (bei Dekodierung) kann der Channel kontinuierlich beschrieben und gelesen werden. Bei Lesen wird es soviel zurückgegeben wie es von letzten Schreibzugriff zu dekodieren möglich war.


Previous Next Contents