Tcl
Interpreter
In Tcl geschriebene Skripten werden durch den Interpreter tclsh ausgeführt. Man kann also tclsh aufrufen und den Skript als Parameter angeben oder man fügt in die erste Zeile des Skripts ein, welcher Interpreter den Skript ausführen soll.#!/usr/bin/tclsh |
Der Interpreter muss dabei immer mit vollem Pfad angegeben werden. Den Pfad bestimmt man mit dem Befehl which tclsh.
Für die Ausführung von Tcl-Skripten, die Tk verwenden, wird als Interpreter wish verwendet.
Kommandos
Ein Tcl-Skript ist eine Folge von Kommandos. Kommandos werden durch einen Zeilenumbruch oder durch Semikolon getrennt. Jedes Kommando besteht aus Worten, die wiederum durch Leerzeichen getrennt werden. Das erste Wort ist der Befehlsname, die folgenden die Argumente des Kommandos. Kommandos geben immer einen String zurück.#!/usr/bin/tclsh puts stdout "Hello World!" |
Variablen
Variablen werden mit dem Kommando set besetzt. Das Kommando set erwartet als ersten Paramter die Variable und als zweiten Parameter den String, der der Variablen zugewiesen werden soll.set Zielvariable Zeichenkette |
Substitution
Substitution heißt Ersetzung. Die Zuordnung von Werten an Variablen erfolgt nicht durch die Zuweisung mit dem Operator =, sondern durch das zweite Argument des set-Kommandos. Steht dort keine Zeichenkettenkonstante, wird man eine Ersetzung vorfinden. Die einfachste Ersetzung ist die Variablensubstitution. Durch Voranstellen eines Dollarzeichens wird der Inhalt der Variable und nicht ihr Name verwendet.Eine Kommandosubstitution steht immer in eckigen Klammern. Der Inhalt der eckigen Klammern wird interpretiert und vor der Abarbeitung des Kommandos zurückgegeben.
#!/usr/bin/tclsh set a huhu set b $a set c [expr 3 * 4] puts stdout $b puts stdout $c |
Die Ausgabe des Beispiels ist in der ersten Zeile das Wort huhu und in der zweiten Zeile die Zahl 12. Der Variablen c wird in der dritten Anweisung das Ergebnis der Anweisung expr 3 * 4 zugewiesen. Das Kommando expr berechnet einen mathematischen Ausdruck, den es als Parameter bekommt und gibt das Ergebnis als Zeichenkette zurück.
Quotation
Durch Anführungszeichen können mehrere Worte so zusammengefasst werden, dass sie vom Interpreter als ein Wort verarbeitet werden. Es wird aber keine Substitution verhindert.Dazu werden geschweifte Klammern verwendet. Sie verhindern die Interpretation aller dazwischen liegenden Sonderzeichen.
Kommentare
Wie in den UNIX-Skripten üblich, ist das # das Kommentarzeichen. Allerdings muss es am Anfang eines Kommandos stehen, also am Anfang einer Zeile oder durch ein Semikolon vom vorhergehenden Kommando getrennt.Kontrollstrukturen
Auch wenn die Kontrollelemente aussehen wie besondere Konstrukte, sind sie ebenfalls Kommandosif for switch break foreach while eval continueEin kleines Beispiel: Umkehrung einer Liste in einer while-Schleife:
set b "" set i [expr [llength $a] -1] while {$i >= 0} { lappend b [lindex $a $i] incr i -1 } |
Prozeduren
Eine Prozedur wird mit dem Wort proc eingeleitet. Es folgt der Name der Prozedur und ihre Parameternamen. Zum Schluss folgt in geschweiften Klammern der Körper der Prozedur.proc sub1 x {expr $x-1} |
Die oben definierte Prozedur wird wie ein Kommando sub1 aufgerufen.
Tk
Implementierte Widgetklassen:
Frame Menubutton Canvas Label Menu Scrollbar Button Message Scale Checkbutton Entry Listbox Radiobutton Text Toplevel
Jedes Widget wird erzeugt, indem das Klassenkommando aufgerufen wird. Auf den Klassennamen folgt der Fenstername, der mit einem Punkt beginnt. Am Ende folgen Konfigurationsoptionen.
Geometrie
Mit dem Befehl place können Widgets in ihrem Fenster positioniert werden. Mit dem Befehl pack werden die Widgets arrangiert.
button .ok -text Ok button .cancel -text Cancel button .help -text Help pack .ok .cancel .help -side left |
Zum Auffüllen des Platzes gibt es die Option -fill
pack .ok .cancel .help -side top -fill x |
Ereignisse
Auf Aktionen der Benutzer muss reagiert werden. Dazu wird dem Widget bei seiner Erzeugung eine Option -command mitgegeben. Der dahinter stehende Tcl-Skript wird bei einer Aktion aufgerufen.Mit dem Kommando bind können Ereignisse an Skripten gebunden werden.
bind .b <Control-h> {backspace .t} |
Das Fenster ist .b, das X-Ereignis ist Control-h und in den geschweiften Klammern steht die Reaktion auf das Ereignis.
Auf die Koordinaten des Ereignisses kann mit den Substitutionen %x und %y zugegriffen werden. Das betroffene Fenster steht in %W und das Zeichen des Ereignisses ist %A.
Beispiel
Ein Fenster mit einem Eingabefeld und zwei Buttons. In das Eingabefeld wird eine Rechenaufgabe gestellt. Auf Ok wird das Ergebnis berechnet und wieder ins Eingabefeld gestellt. Der zweite Button verlässt das Programm.#!/usr/bin/wish label .info -text Rechenclown entry .aufgabe -textvariable aufgabe button .ok -text Ok -command {calc $aufgabe} button .cancel -text Beenden -command exit pack .info .aufgabe -side top pack .ok .cancel -side left proc calc aufgabe { set aufgabe [expr $aufgabe] .aufgabe delete 0 10000 .aufgabe insert 0 $aufgabe } |
Literatur
- John K. Ousterhout: Tcl und Tk. Entwicklung grafischer Benutzerschnittstellen für X Window System
- Das Standardwerk vom Erfinder der Sprache
- Brent Welch: Practical Programming in Tcl and Tk (3rd Edition)
- Wer für englische Originalliteratur schwärmt, dem sei dieses Buch empfohlen.