Post on 08-Jun-2020
John K. Ousterhout
Tcl und Tk
'Entwicklung grafischer Beititzersdinittstelle nfür das X Window System ,'
I, 2 . - v
Anmerkungen zur Übersetzung
xxi
Vorwort
xxv
1 Einführung
1
1.1 Einführung 1
1 .2 Gliederung des Buchs 4
1.3 Notation 5
1 .4 Aussprache 6
1 .5 Versionen 6
2 Ein Überblick über Tcl und Tk
7
2.1 Die ersten Gehversuche 7
2.2 „Hello world" mit Tk 9
2.3 Skriptdateien 1 1
2.4 Variablen und Substitutionen 1 3
2.5 Kontrollstrukturen 14
2.6 Ein paar Worte zu Tcls Grammatik 16
2.7 Event-Bindings 18
2.8 Prozeßausführung 20
2.9 Weitere Eigenschaften von Tcl und Tk 23
2.10 Bestehende Erweiterungen und Applikationen 24
2.10 .1 expect 24
2.10 .2 Extended Tcl 25
2.10.3 XF 26
2.10 .4 Verteilte Programmierung 27
2.10.5 Ak 28
I Die Skriptsprache Tcl
31
Tcls Sprachsyntax
33
3.1 Skripte, Befehle und lexikalische Einheiten 33
3.2 Ausführung von Befehlen 34
3.3 Variablenersetzung 36
3.4 Befehlsersetzung 37
3.5 Backslash-Substitution 38
3 .6 Quoting mit Anführungszeichen 39
3.7 Quoting durch geschweifte Klammern 40
3.8 Kommentare 43
3.9 Normale Befehlsausführung, Ausnahmezustände 43
3.10 Mehr über Substitutionen 44
4 Variablen
47
4.1 Erzeugung einfacher Variablen 47
4.2 Arrays 4 9
4.3 Variablenersetzung 4 9
4.4 Variablen mit unset löschen 5 1
4.5 Mehrdimensionale Arrays 5 1
4.6 Die Befehle incr und append 52
4.7 Vordefinierte Variablen 53
4.8 Vorgeschmack auf weitere Variablenoperationen 53
5 Ausdrücke
55
5.1 Numerische Operanden 55
5.2 Operatoren und Operatorpräzedenzen 56
5.2 .1 Arithmetische Operatoren 56
5 .2 .2 Vergleichsoperatoren 57
5 .2 .3 Logische Operatoren 58
5 .2 .4 Operationen auf Bitebene 58
5 .2 .5 Bedingungsoperator 59
5.3 Mathematische Funktionen 59
5.4 Ersetzungen 59
5.5 Strings als Operanden 6 1
5.6 Typen und Typumwandlungen 61
5.7 Zahlenrepräsentation 62
6 Listen
6 3
6.1 Einfache Listen und der Befehl lindex 6 3
6 .2 Listengenerierung : concat und list, llength 6 6
63 Modifikation von Listen : linsert,lreplace, lrange und lappend 67
6.4 Listen mit Isearch durchsuchen 6 8
6 .5 Listen mit lsort sortieren 6 9
6 .6 Umwandlungen zwischen Strings und Listen 6 9
6 .7 Listen und Tcl-Befehle 70
7 Kontrollstrukturen
73
7.1 Der Befehl if 73
7.2 Schleifen mit while, for und foreach realisieren 75
7.3 Die Befehle break und continue 77
7.4 Der Befehl switch 78
7.5 Der Befehl eval 79
7.6 Skriptdateien mit source ausführen 8 1
8 Prozeduren und Variablenkontexte
8 3
8.1 Die zentralen Befehle proc und return 8 3
8 .2 Globale und Lokale Variablen 8 6
8 .3 Defaultwerte und Argumente in veränderlicher Anzahl 8 7
8 .4 Call by Reference mit upvar 8 9
8 .5 Implementierung neuer Kontrollstrukturen mit uplevel 90
9 Stringverarbeitung
9 3
9 .1 Ein paar Worte über Zeichensätze vorweg 93
9.2 Mustererkennung nach den glob-style-Regeln 9 5
9 .3 Mustererkennung über reguläre Ausdrücke 9 7
9 .4 Substitutionen über reguläre Ausdrücke 100
9.5 Formatierte Ausgaben mit dem Befehl format 10 1
9 .6 Stringanalyse mit dem Befehl scan 103
9.7 Die Befehle string index und string range 104
9 .8 Stringsuche und -vergleich 105
9 .9 Stringlängen, Groß-/Kleinschreibung und „Trimming" 105
10 Die Arbeit mit Dateien
107
10.1 Dateinamen 10 7
10 .2 Grundlegende Ein-/Ausgabeoperationen 109
10.3 Ausgabepufferung 11 1
10 .4 Wahlfreier Zugriff auf Dateien 112
10 .5 Das aktuelle Arbeitsverzeichnis 113
10 .6 Manipulation von Dateinamen : glob und file 113
10 .7 Systeminformationen über Dateien 11 7
10 .8 Fehler in Systemaufrufen 118
11 Prozesse
121
11.1 Prozeßerzeugung via exec 12 1
11 .2 Ein- und Ausgabe über Pipelines 125
11.3 Prozeßkennungen 126
11.4 Umgebungsvariablen 126
11.5 Tcl mit exit beenden 126
12 Fehler- und Ausnahmezustände
127
12.1 Der Zustand nach einem Fehler 127
12 .2 Fehlererzeugung in Tcl-Skripten 130
12.3 catch: Fehlerbehandlung leicht gemacht 130
12.4 Ausnahmezustände 131
13 Hinter den Kulissen von Tcl
13 5
13.1 Die Elemente eines Arrays 13 5
13 .2 Informationen aus dem Interpreter : info 13 9
13 .2 .1 Informationen über Variablen 13 9
13 .2 .2 Informationen über Prozeduren 14 0
13 .2 .3 Informationen über Befehle 14 2
13 .2.4 Die Unterfunktionen tclversion und library 14 3
13 .3 Ein Maß für die Performance : time 14 3
13 .4 Zugriffskontrollen für Variablen : Tracing 14 4
13 .5 Befehle umbenennen und löschen 14 7
13.6 unknown : Dem Unbekannten eine Chance 14 8
13.7 Die Technik des Autoloadings 150
14 History: Das Ding mit der Vergangenheit
153
14 .1 Die History-Liste, eine Chronik 153
14.2 Die Angabe von Ereignissen 155
14 .3 Anweisungen aus der Vergangenheit wiederholen 155
14 .4 Durch unknown verfügbare Abkürzungen 156
14.5 Die Kennung für das nächste Ereignis : history nextid 157
II Tks Erweiterungen zu Tcl
159
15 Eine Einführung in Tk
16 1
15 .1 Eine kurze Einführung in X 16 1
15.2 Widgets 16 4
15 .3 Applikationen, Top-Level Widgets und Screens 16 5
15 .4 Tcl-Skripte und Event-Handler 16 8
15 .5 Widgets erzeugen und entfernen 16 8
15 .6 Geometry-Manager 16 9
15 .7 Widget-Befehle 17 0
15 .8 Kommunikation zwischen Widgets und Applikationen 171
16 Tks Widgets im Schnelldurchlauf
17 3
16.1 Frames 174
16 .1 .1 Reliefs 174
16 .1 .2 Maßangaben 17 5
16 .1 .3 Farbangaben 17 6
16 .1 .4 Synonyme 177
16 .2 Die Widget-Klasse Toplevel 177
16.3 Label-Widgets 177
16 .3 .1 Angabe von Texten 177
16 .3 .2 Font-Spezifikationen 179
16 .3.3 Die Angabe von Bitmaps 180
16.4 Buttons, Checkbuttons und Radiobuttons 18 1
16 .5 Message-Widgets 18 3
16 .6 Listbox-Widgets 184
16.7 Scrollbars 18 5
16 .8 Scale-Widgets 187
16.9 Entries 189
16 .10 Widgets der Klassen Menu und Menubutton 190
16.10.1 Pull-Down-Menüs 19 1
16 .10 .2 Untermenüs 193
16 .10 .3 Keyboard-Traversal und Tastenkürzel 193
16 .11 Weitere weitverbreitete Widget-Ressourcen 196
16.11 .1 Cursor-Ressourcen 196
16.11 .2 Die Ressource -anchor 197
17 Der Packer, ein Geometry-Manager
199
17 .1 Grundlagen des Geometry-Managements 200
17 .2 Grundlagen des Packers 204
17.3 Der Befehl pack und seine Option -side 205
17 .4 Padding 207
17.5 Die Option -fill 208
17 .6 Expansionen 208
17.7 Die Ausrichtung von Widgets 211
17.8 Die Packreihenfolge 21 1
17.9 Layoutgestaltung hierarchischer Widgets 212
17.10 Weitere Funktionen des Packers 214
17.11 Weitere Geometry-Manager Tks 21 5
18 Event-Bindings
217
18.1 X-Events 217
18.2 Ein Überblick über den Befehl bind 21 9
18 .3 Event-Spezifikationen 22 0
18 .4 Event-Sequenzen 222
18 .5 Substitutionen während der Event-Verarbeitung 223
18.6 Was passiert bei mehreren Bindings für einen Event? 224
18.7 Der Zeitpunkt der Bearbeitung von Events 226
18.8 Die Behandlung von Background-Errors 226
18 .9 Weitere Event-Bindings 227
19 Canvas- und Text-Widgets
229
19 .1 Grundlagen des Canvas-Widgets 229
19.2 Die Manipulation einzelner Objekte 232
19.3 Bindings 233
19 .4 Weitere Eigenschaften der Canvas-Widgets 237
19 .5 Text-Widgets 237
19 .6 Indizes und Marken 238
19 .7 Markierungen von ganzen Textausschnitten 24 1
20 Die Selektion
245
20.1 Abfrage der Selektion unter verschiedenen Aspekten 245
20.2 Auffinden und Löschen der Selektion 247
20.3 Bereitstellen der Selektion Ober Tcl-Skripte 248
21 Die Eingabefokussierung
251
21 .1 Die zwei Modelle der Fokussierung 25 1
21 .2 Das Setzen der Fokussierung 25 3
21 .3 Zurücksetzen der Eingabefokussierung 25 3
21 .4 Voreinstellung der Fokussierung 25 4
21 .5 Tastaturkürzel 254
22 Window-Manager
255
22.1 Fenstergrößen 25 8
22.2 Rasterungen 26 0
22 .3 Fensterpositionen 26 2
22 .4 Zustände eines Fensters 26 2
22 .5 Dekorative Elemente 26 3
22 .6 Nachrichten vom Window-Manager 26 4
22 .7 Sonderbehandlungen durch den Window-Manager 264
22.8 Session-Management 265
22.9 Eine Warnung im Zusammenhang mit Window-Managern 26 6
23 Kommunizierende Applikationen
267
23.1 Grundlagen 267
23.2 Hypertools 26 9
23.3 Applikationsnamen 26 9
23 .4 Sicherheitsaspekte 270
24 Modale Interaktionen
273
24.1 Grabs 274
24.2 Tastatureingaben während eines Grabs 276
24.3 Mit tkwait auf Ereignisse warten 276
25 Widget-Konfiguration für Fortgeschrittene
279
25.1 Die Ressource-Datenbank 279
25.2 Eintragungen in die Datenbank 28 1
25.3 Der Ressource-Manager und die Datei .Xdefaults 28 2
25.4 Prioritäten innerhalb der Ressource-Datenbank 28 3
25.5 Der Befehl option 28 4
25.6 Die Funktion configure der Widget-Befehle 285
26 Vermischtes
287
26.1 Das Löschen von Widgets 287
26.2 Timing 289
26.3 Der Befehl update 289
26.4 Informationen über Widgets 29 1
26.5 Die Befehle raise und lower 29 126.6 Der Befehl tk 29 2
26.7 Von Tk verwaltete Variablen 29 3
27 Beispiele
29 5
27.1 Eine Prozedur zur Erzeugung von Dialogfenstern 29 5
27.2 Eine „Fernsteuerung" für Tk-Applikationen 300
III Tcl-Applikationen und C
307
28 Einführung in die Philosophie von Tcls C-Schnittstelle
309
28.1 Die Wahl der Mittel : Tcl gegen C 31 1
28.2 Objektbezeichnungen 31328.3 Die Wahl der Implementierung : funktions- gegen objektorientiert
314
28.4 Die Repräsentation von Informationen 31 5
29 Tcl-Interpreter und Skript-Evaluierungen
317
29.1 Interpreter 317
29.2 Eine einfache Tcl-Applikation 31 8
29.3 Weitere Funktionen zur Evaluierung 32 0
29 .4 Löschen von Interpretern 322
30 Neue Tcl-Befehle
323
30.1 Befehlsprozeduren 323
30 .2 Die Registrierung neuer Befehle 32530.3 Das Rückgabeprotokoll 327
30.4 Funktionen zum Umgang mit dem Rückgabeprotokoll 329
30.5 ClientData und Callback-Prozeduren 33 1
30.6 Das Löschen von Befehlen 333
30.7 Die Implementierung der Prozeduren in Tcl 335
31 Erweiterungspakete zu Tcl
33 7
31 .1 Tcl_Applnit 337
31 .2 Erweiterungspakete für Tcl 34 1
31 .2 .1 Präfixe für Erweiterungspakete 34 1
31.2 .2 Initialisierung eines Erweiterungspaketes 34 2
31 .2 .3 Unterstützung mehrerer Interpreter 34 4
32 Parsing
347
32.1 Zahlen und Boolesche Werte 347
32.2 Auswertung von Ausdrücken 35 0
32.3 Manipulation von Listen 35 1
33 Ausnahmezustände
35 3
33.1 Rückgabewerte 35 3
33 .2 Aufbau eines Stack-Trace in errorlnfo 35 6
33 .3 Das Setzen von errorCode 35 8
34 Zugriff auf Tcl-Variablen
36 1
34.1 Referenzierung von Tcl- Variablen 36 1
34 .2 Variablen setzen 36 4
34 .3 Variablen auslesen 36 6
34 .4 Variablen löschen 367
34.5 Links zwischen C- und Tcl-Variablen 36 8
34 .6 Variablen-Traces 36 9
34.7 Trace-Callbacks 370
34.8 Array-Traces 372
34.9 Mehrfache Traces 373
34.10 Callbacks aufgrund von unset 373
34.11 Variablen, die noch nicht existieren 374
34.12 Informationen über Traces 374
35 Hash-Tables
377
35.1 Zugriffsschlüssel und Werte 379
35.2 Hash-Tables anlegen und entfernen 380
35.3 Einträge erzeugen 381
35.4 Auffinden von Einträgen 382
35.5 Hash-Tables durchsuchen 383
35.6 Einträge löschen 384
35.7 Statistische Daten 385
36 Stringverarbeitung
387
36.1 Dynamische Strings 387
36.2 Vollständigkeit von Anweisungen 39 1
36.3 Stringvergleiche 392
37 POSIX-Unterstützung
395
37.1 Tilde-Notation 395
37.2 Erzeugung von POSIX-Meldungen 397
37.3 Erzeugung von Prozessen 39 9
37.4 Hintergrundprozesse 40 0
IV Tks C-Schnittstelle
403
38 Einführung
405
38.1 Woraus besteht ein Widget? 406
38 .2 Der Zusammenhang zwischen Tk und Xlib 408
38.3 Square : eine neue Widget-Klasse 409
38.4 tk.h 41 1
38.5 Design wiederverwertbarer Widgets 41 1
39 Erzeugung von Fenstern
413
39.1 Die Datentypen Window und Tk_Window 413
39.2 Die Generierung eines Tk_Windows 415
39.3 Festlegung der Klassenzugehörigkeit 416
39.4 Das Entfernen von Fenstern 417
39.5 Grundlegende Operationen mit einem Tk_Window 417
39.6 Klassenkonstruktoren 42 0
39.7 Die Initialisierung als Erweiterungspaket 42 2
39.8 Verzögerte Erzeugung von Fenstern 423
40 Widget-Konfiguration
42 5
40 .1 Tk_ConfigureWidget 42 5
40 .1 .1 Der Datentyp Tk_ConfigSpecs für Konfigurationstabellen
427
40 .1 .2 Der Aufruf von Tk_ConfigureWidget 430
40.1 .3 Fehler bei der Widget-Konfiguration 43 1
40 .1 .4 Modifizieren der augenblicklichen Konfiguration 43 1
40 .1 .5 Die Funktion Tk_Configurelnfo 43 1
40 .1 .6 Tk_FreeOptions 43 2
40 .1 .7 Weitere Einsatzgebiete für Konfigurationstabellen 432
40.2 Ressource-Caches 43 3
40 .2 .1 Graphikkontexte 434
40 .2 .2 Weitere Ressourcen 43 5
40.3 Tk_Uids 43 6
40.4 Weitere Konvertierungsfunktionen 43 7
40.5 Die Modifikation von Fensterattributen 43 8
40.6 Die Konfigurationsfunktion der Square-Widgets 440
40.7 Die Widget-Befehlsprozedur für Squares 44 1
41 Events
44 5
41 .1 X-Events 44 5
41 .2 File-Events 45 0
41 .3 Timer-Events 45 3
41 .4 Idle-Callbacks 45 4
41 .5 Generische Event-Handler 455
41 .6 Der Aufruf des Event-Dispatchers 45 7
42 Ausgabe von Widgets
46 1
42.1 Verzögerte Ausgabe von Widgets 46 1
42.2 Double-Buffering über Pixmaps 463
42.3 Ausgabe graphischer Objekte 465
43 Löschen von Widgets
46 9
43.1 Grundlagen 46 9
43.2 Verzögertes Löschen 471
44 Der Umgang mit der Selektion
475
44.1 Callback-Prozeduren für die Selektion 476
44.2 Beantragen der Selektion 479
44.3 Abfrage der Selektion 48 0
45 Geometry-Management
48 3
45 .1 Wunschgrößen von Widgets 483
45.2 Interne Ränder 485
45.3 Rasterungen 487
45.4 Geometry-Manager 487
45.5 Festlegung der Zuständigkeit 489
45.6 Abfrage von Geometrie-Informationen 490
45.7 Mapping und Setzen der Geometrie 490
45.8 Implementierung eines Geometry-Managers 492
A Die Installation von Tcl und Tk
495
A.1 Versionen 49 5
A.2 Das Master-Directory 49 6
A.3 Die Beschaffung von Distributionen via N l'1' 496
A.4 Die Beschaffung von Distributionen Ober E-Mail 498
A.5 Distributionen compilieren und-installieren 498
A.6 Erweiterungspakete 499
A.7 Die Newsgroup comp.lang.tcl 500
B Glossar
501
Index
513