Programare în tcl. Introducere rapidă în Tcl

De fiecare dată când fac cunoștință cu vreun nou limbaj de programare, nu mă obosesc să fiu uimit de persistența autorilor (sau a autorului). Nefiind un expert în niciun domeniu al dezvoltării software, este greu să ne imaginăm ce dificultăți poți întâmpina dacă nu folosești instrumente specializate și abordări specifice pentru rezolvarea problemelor care apar pe calea dezvoltatorului. Voi vorbi pe scurt despre un limbaj precum TCLspuse pe paginile Computer News. Dar este atât de scurt încât vreau să mă întorc la acest limbaj de programare și să vorbesc despre el mai detaliat.


Puțină istorie

Autorul cărții TCL (acest nume în rusă este cel mai adesea pronunțat „Tikl”), John Osterout, a decis că lumea ar fi un loc mai bun dacă ar exista un limbaj specializat pentru încorporarea în aplicațiile de consolă. Făcut repede şi foarte bine. Așa a apărut prima versiune de TCL. Conform solicitărilor utilizatorilor, Osterout și-a extins capacitățile creației sale, construind în el instrumente pentru crearea de aplicații cu o interfață grafică pentru utilizator. Așa s-a născut TCL/TK. Fie că este lungă sau scurtă, limbajul a migrat sub aripa corporației Sun Microsystems, care a reușit să facă interpretul de limbă cât mai multiplatform posibil, deși din anumite motive era încă gratuit. Deși, în ciuda acestui din urmă fapt, TCL a fost aspru criticat de principalul ideolog al dezvoltării de software liber, Richard Stallman. Principalul argument al lui Stallman a fost performanța scăzută a interpretului de limbă.

Dar interesul lui Sun pentru TCL a dispărut curând din cauza boom-ului limbajului Java dezvoltat de aceeași companie, iar Osterout și-a fondat propria companie, Scriptics. La scurt timp după aceasta, interpretul a fost reproiectat semnificativ, care a început să compileze programul în bytecode intermediar înainte de a executa programul, drept urmare viteza programelor scrise în TCL a crescut de peste șase ori. De asemenea, a fost adăugat suport pentru Unicode și aplicații multi-threaded, permițând dezvoltatorilor să folosească TCL pentru a scrie aplicații server. Apoi Scriptics a fost redenumit Ajuba Solutions, iar apoi a fost cumpărat de Interwoven, care a transferat dezvoltarea TCL/TK către comunitatea de programare Tcl Core Team.

Totuși, toate acestea, deși informative, vor ajuta puțin la stăpânirea limbii. Deci, să aruncăm o privire la ce este TCL astăzi.


TCL astăzi

TCL este, în general, un acronim. Numele complet al acestei limbi este Tool Command Language, care în rusă înseamnă „limbaj de comandă instrument”.

Principala caracteristică a TCL clasic este că acest limbaj de programare, spre deosebire de cea mai mare parte a altor limbaje populare astăzi, nu este orientat pe obiecte. Adepții TCL explică acest lucru spunând că această abordare reflectă mai bine esența programului, deoarece procesorul funcționează nu cu obiecte, ci cu secvențe de comenzi care pot fi combinate în proceduri. Este greu de spus cât de mult corespunde această opinie cu starea reală a lucrurilor, dar aici, poate, nici măcar nu este vorba de asta. Si ce? Dar adevărul este că un limbaj care este conceput exclusiv pentru a lipi diferite părți ale sistemului într-un singur întreg, în general, nu are niciun folos pentru OOP. Cu toate acestea, deoarece TCL în sine a depășit de mult ideea pe care a fost creat, există extensii speciale de limbaj care implementează abordarea orientată pe obiecte.

Cu toate acestea, abordarea textului programului nu este mai puțin interesantă. Sunt aceleași date ca oricare din exterior și pot fi manipulate din program în același mod ca și textul introdus de utilizator. În general, orice date din TCL sunt șiruri. Neobișnuit? Pot fi. Dar nimeni nu spune că este incomod.

La fel ca și cunoscutele, dar deja uitate de masă, Lisp și Forth, TCL folosește notația de prefix atunci când scrie comenzi. Ce înseamnă? De fapt, totul este foarte simplu. Fiecare comandă constă dintr-un set de câmpuri separate prin spații. Primul câmp trebuie să fie numele comenzii, iar câmpurile rămase opționale sunt argumentele transmise comenzii. Comanda returnează o valoare, uneori goală. O comandă este aceeași cu ceea ce se numește funcție sau procedură în alte limbaje de programare. Nu există cuvinte cheie în TCL: structurile de control sunt, de asemenea, comenzi. Această abordare face ușoară extinderea limbajului în orice direcție de care are nevoie programatorul, deoarece, teoretic, extensibilitatea TCL nu este nicăieri mai bună, dacă exista dorința de a se extinde. De exemplu, toate suplimentele OO au apărut tocmai din cauza acestei proprietăți TCL.

În TCL, printre altele, există un astfel de eveniment. Înseamnă același lucru ca în orice alt limbaj de programare - o anumită acțiune a programului în sine sau, ca să spunem așa, a unui stimul extern, la care programul trebuie să reacționeze într-un anumit mod. Evenimentele din TCL pot fi generate de un cronometru și, de asemenea, apar, de exemplu, atunci când apar date într-un canal, valoarea unei variabile se modifică, când se termină un program extern sau pur și simplu când utilizatorul interacționează cu interfața. Desigur, programatorul are putere asupra evenimentelor din programul său.

La fel ca multe alte limbaje de scripting, TCL suportă foarte bine un astfel de lucru precum matricele asociative, de care mulți dezvoltatori au devenit deja pasionați.

Pentru a vă face o idee mai bună despre sintaxa TCL, care desigur nu poate fi explicată într-un singur articol, voi da un exemplu de mic program în acest limbaj. Este angajat în adăugarea cifrelor numărului introdus de utilizator.

#!/bin/tclsh set arg "" ] set result 0 foreach el $arg ( set result ) pune $result


Ce este TK?

Aceasta este exact întrebarea care poate apărea după citirea textului despre caracteristicile TCL. Da, am menționat deja că mulți oameni numesc acum Tikl TCL/TK ("Tak-Tikl") și, prin urmare, este timpul să spunem ce se ascunde în spatele încă două litere.

TK este o abreviere a cuvântului deja scurt ToolKit, care ascunde o bibliotecă puternică pentru crearea unei interfețe grafice de utilizator pentru aplicațiile TCL. Această bibliotecă, trebuie să spun, are capabilități foarte bune. TK este implementat pentru sistemele de operare Linux, Mac OS X, Unix și Windows, iar în versiunile moderne de TK interfața cu utilizatorul are un aspect „nativ” pentru un anumit sistem de operare, adică controalele arată exact la fel ca în toate. alte aplicații. Există diverse extensii pentru bibliotecă care sunt folosite pentru a crea ferestre cu formă liberă, pentru a adăuga suport pentru tehnologia drag-and-drop și alte lucruri similare.

TK se potrivește foarte bine cu conceptul bazat pe evenimente al limbajului TCL și permite dezvoltatorilor să facă multe lucruri mult mai ușor decât în ​​alte limbaje de programare. În plus, componentele TK gestionează automat majoritatea evenimentelor, facilitând crearea de aplicații pentru dezvoltatori. Pentru TK există seturi de componente suplimentare, de exemplu, BWidget, Tix sau incr Widgets.

O altă caracteristică interesantă a bibliotecii TK este că este adaptată pentru alte limbi interpretate, nu doar TCL, cu toate acestea, interpretul TCL este încă necesar atunci când rulează aplicații, deoarece alte limbi folosesc doar o interfață externă pentru codul bibliotecii în sine. , care, ca și Se știe că este încă scris în TCL. Există biblioteci speciale Perl/Tk, Ruby/Tk, Python/Tk care implementează suport TK pentru limbajele de programare corespunzătoare.


Instrumente

În practică, bineînțeles, capabilitățile lingvistice bune nu sunt suficiente pentru a crea aplicații de înaltă calitate în ea. Nu, acum nu vorbesc despre abilitățile de programator, ci despre instrumentele pe care le va folosi programatorul. Principalul dintre aceste instrumente în programarea TCL este, desigur, interpretul acestui limbaj de scripting.

Pe Linux, interpretul TCL este încorporat în cea mai mare parte a distribuțiilor. Pentru alte sisteme de operare, lucrurile sunt puțin mai complicate. Pentru Windows, de exemplu, puteți utiliza produsul ActiveTcl oferit de ActiveState (www.activestate.com/Products/ActiveTcl). Distribuția include un interpret TCL, diverse biblioteci și extensii, precum și o bibliotecă specială pentru utilizarea TCL prin Windows Script Host. Adevărat, ActiveTCL nu are propriul IDE, dar puteți folosi Komodo, care are chiar și un designer special de formulare TK. Dar dacă nu doriți să cumpărați Komodo, puteți utiliza mediul Visual TCL (). Interpretul în sine și o mulțime de documentație în limba engleză pot fi găsite pe site-ul oficial - tcl.tk. Materialele în limba rusă de pe TCL sunt prezente și pe World Wide Web, de exemplu, la tclstudy.narod.ru.


În spatele scenelor

Cu toate acestea, indiferent cât de mult am spus despre TCL și TK, în culise au rămas multe. De exemplu, viteza programelor, pentru care încă mai are mult de străduit (programele TCL sunt încă vizibil mai lente decât cele scrise în Perl). În același timp, ceea ce aderenții TCL prezintă ca avantaje necondiționate poate provoca și o serie de dificultăți. Extensibilitatea uimitoare a limbajului face ca sarcina de standardizare să fie foarte dificilă, iar acest lucru, desigur, își lasă amprenta asupra capacității de a folosi TCL pentru a scrie aplicații cu adevărat mari.Deși TCL este adesea comparat cu Java, mi se pare că este nu fără motiv că preia conducerea în popularitate a doua dintre aceste limbi. Sintaxa particulară a TCL își face, de asemenea, treaba murdară și, prin urmare, numărul celor care doresc să o învețe nu crește exponențial, așa cum este cazul Java, dar liniar și nu foarte activ.

Deși, nu există nicio îndoială că pentru lipirea mai multor aplicații scrise în limbaje de programare compilate, conform recenziilor multora dintre cei care au încercat TCL și l-au comparat în acest domeniu cu opțiuni alternative, a fost cel mai bun. Integrarea TCL în aplicațiile aplicației este, de asemenea, o caracteristică foarte drăguță și utilă. Acest lucru este vizibil mai ales în lumea sistemelor de tip UNIX, unde TCL este al doilea cel mai venerat limbaj după C (și poate și Emacs Lisp). Deși este cu siguranță potrivit pentru Windows, un alt lucru este că acest sistem de operare are deja încorporați interpreți VBScript și Jscript și, prin urmare, TCL experimentează ceva de la aceștia care ar putea fi numit, în anumite ipoteze, competiție.

Deși, desigur, toate aceste considerente sunt greu de evaluat fără să încercați singur TCL. Așa că îmi termin povestea despre asta, vreau doar să citez în sfârșit din cuvintele autorului limbajului de programare C, Brian Kernighan: „Tcl / Tk oferă muncii productivitate magică, în câteva ore poți obține aceleași rezultate. ca în zile sau săptămâni când se dezvoltă în C sau C++... Tk este foarte eficient pentru majoritatea aplicațiilor, multe elemente de interfață (widget-uri) sunt implementate atât de bine încât nu se poate decât să se întrebe cum ar putea fi făcută atât de bine o astfel de muncă... pare norocos că împărțirea sarcinilor între Tcl și C /C++ este destul de ușoară, trebuie doar să știi care instrument face treaba mai bine... Extinderea sistemului cu cod Tcl suplimentar încărcat direct în biblioteca Tcl a aplicației, în deplin acord cu Ideea originală a lui Osterout, crește eficiența programului în ansamblu, simplifică structura acestuia și îmbunătățește portabilitatea... Nu sunt sigur că Tcl ar putea supraviețui ca produs independent - are prea mulți concurenți.Dar combinația Tcl/Tk are fără concurenți în lumea Unix... Sistemul este extrem de fiabil, foarte bine documentat... disponibil gratuit... de o calitate impecabilă."

Programare practică în Tcl și Tk EDIȚIA A PATRA Brent B. Welch Ken Jones cu Jeffrey Hobbs PRENTICE HALL PTR PRENTICE HALL PTR Upper Saddle River, NJ 07458 www.phptr.com Programare practică în Tcl și Tk EDIȚIA A PATRA Brent Welsh Ken Jones cu participarea lui Geoffrey Hobbs Moscova Sankt Petersburg Kiev 2004 BBK 32.973.26-018.2.75 U98 UDC 681.3.07 Editura Williams Sef. editat de S.N. Trigub Traducere din engleză și editare de V.V. Veishman Pentru întrebări generale, vă rugăm să contactați Editura William la: [email protected] , http://www.williamspublishing.com Welsh, Brent B., Jones, Ken, Hobbs, Jeffrey W98 Practical Tcl and Tk Programming, Ediția a 4-a. : Per. din engleza - M.: Editura „William”, 2004, - 1136 p. : bolnav. - Paral. tit. Engleză ISBN 5-8459-0661-Х (rusă) Această carte acoperă o gamă largă de probleme legate de utilizarea limbajului Tcl și a extensiei Tk. Se discută instrumentele de bază de scriere a programelor Tcl, generarea dinamică a comenzilor, utilizarea expresiilor regulate, I/O bazate pe evenimente, componentele Tk, lucrul cu imagini și culoare, maparea evenimentelor la comenzile instrumentului de configurare Tcl și alte subiecte importante. Autorii au acordat atenție programării extensiilor Tc1 în limbajul C. Această carte va fi utilă atât pentru dezvoltatorii experimentați, cât și pentru programatorii începători. BBK 32.973.26-018.2.75 Toate denumirile produselor software sunt mărci comerciale înregistrate ale companiilor respective. Nicio parte a acestei publicații nu poate fi reprodusă sub nicio formă sau prin orice mijloc, electronic sau mecanic, inclusiv fotocopiere sau înregistrare, pentru orice scop, fără permisiunea scrisă a Prentice Hall. Traducere autorizată din ediția în limba engleză publicată de Prentice Hall PTR, Copyright © 2003 de Pearson Education, Inc. Toate drepturile rezervate. Nicio parte a acestei cărți nu poate fi reprodusă, stocată în sistem de recuperare sau transmisă sub nicio formă sau prin orice mijloace, electronice, mecanice, fotocopiere, înregistrare sau altfel, fără permisiunea prealabilă scrisă a Editorului. Ediție în limba rusă publicată de Editura Williams în conformitate cu Acordul cu R&I Enterprises International, Copyright © 2004 ISBN 5-8459-0661-Х (rusă) © Williams Publishing House, 2004 ISBN 0-13-038560-3 (engleză) .) © 2003 Pearson Education, Inc. Cuprins Partea I: Noțiuni de bază Tcl 55 Capitolul 1: Înțelegerea limbajului Tcl 56 Capitolul 2: Noțiuni de bază 85 Capitolul 3: Un script CGI simplu 93 Capitolul 4: Procesarea șirurilor 114 Capitolul 5: Liste 133 Capitolul 6. Structuri de control 147 Capitolul 7. Proceduri și domeniul de aplicare 163 Capitolul 8. Matrice Tcl 172 Capitolul 9. Lucrul cu programe și fișiere 186 Partea P. Instrumente Tcl avansate 215 Capitolul 10. Cotarea și utilizarea comenzii eval 217 Capitolul 11. Expresii regulate 234 Capitolul 12. Biblioteci și pachete de scripturi 274 Capitolul 13. Informații despre interpret și instrumente de depanare 291 Capitolul 14. Spații de nume 320 Capitolul 15. Internaționalizare 337 Capitolul 16. Programe bazate pe evenimente 350 Capitolul 17. Utilizarea socket-urilor de rețea 362 Capitolul 18. TclHttpd Web Server 388 Capitolul 19. Lucrul cu mai mulți interpreți și utilizarea Safe-Tcl 432 Capitolul 20 Safe-Tk. add-on 459 Capitolul 21. Scripturi Tc1 cu mai multe fire 472 Capitolul 22. Tclkit și Starkit 508 Partea a III-a. Elementele de bază ale Tk 529 Capitolul 23. Informații generale despre Tk 530 Capitolul 24. Tk în exemple 543 Capitolul 25. Managerul de aranjare rack 566 Capitolul 26. Managerul de aranjare grilă 587 Capitolul 27. Managerul de așezare a locației 599 b Cuprins Capitolul 28. Componenta ferestrei panou 608 Capitolul 29. Conectarea comenzilor la evenimente 615 Partea IV. Componente Tk 637 Capitolul 30. Butoane și meniuri 639 Capitolul 31. Baza de date de resurse 667 Capitolul 32. Componente simple Tk 681 Capitolul 33. Bare de defilare 698 Capitolul 34. Editarea câmpurilor și glisoarelor incrementale 708 Capitolul 35. Componenta 35. Capitolul 7. Windows 724. Capitolul 37. Componenta canvas 771 Partea V. Caracteristicile Tk 813 Capitolul 38. Selectarea datelor și clipboard 815 Capitolul 39. Casete de dialog și focalizare de intrare 825 Capitolul 40. Atributele componentelor Tk 840 Capitolul 41. Culoare, imagini și cursore 850 Capitolul 42 Fonturi și atribute de text 869 Capitolul 43 Comanda Trimitere 885 Capitolul 44 Managerii de ferestre 896 Capitolul 45 Suportul preferințelor personalizate 915 Capitolul 46 Interfața pentru definirea legăturilor 929 Partea VI. Programarea în limbajul C 937 Capitolul 47. Programele C și limbajul Tcl 938 Capitolul 48. Compilarea Tcl și a extensiilor de program 985 Capitolul 49. Crearea componentelor Tk în limbajul C 1002 Capitolul 50. Biblioteci C 1033 Partea VII. Modificări în compoziția lui Tcl și Tk 1059 Capitolul 51. Tcl 7.4/Tk 4.0 1060 Capitolul 52. Tcl 7.5/Tk 4.1 1069 Capitolul 53. Tcl 7.6/Tk 4.2 1074 Capitolul 54. Ts/Tk 4.1 51. Ts/Ts. 8.1 1086 Capitolul 56. Tc1/Tk 8.2 1091 Capitolul 57. Tc1/Tk 8.3 1094 Capitolul 58. Tc1/Tk 8.4 1101 Capitolul 59. Conținutul CD-ului 1112 Indexul subiectului 1115 Unele versiuni de conținut Introducere în favoarea Tc1/Tk 38 Tcl și Tk 42 Extensii Tcl și Tk 44 Tcl pe World Wide Web 44 Arhive Ftp 45 Grupuri de știri 45 Cui este destinată această carte 45 Cum se lucrează cu această carte 46 Exemple de programe 46 Convenții de prezentare 46 Pictograme 47 Cum este organizată această carte 47 Caracteristici a patra ediție a cărții 49 Mulțumiri pentru asistență în pregătirea primei ediții a cărții 49 Mulțumiri pentru asistență în pregătirea celei de-a doua ediții a cărții 51 Mulțumiri pentru asistență în pregătirea celei de-a treia ediții a cărții 52 Mulțumiri pentru asistență în pregătirea cărții a patra ediție a cărții 52 Cum să contactați autorul cărții 53 Așteptăm feedback-ul dvs. 53 Partea I. Noțiuni de bază Tcl 55 Capitolul 1. Înțelegerea limbajului Tcl 56 Comenzi Tcl 57 Hello, World! 57 Variabile 58 8 Cuprins Înlocuirea comenzilor 59 Expresii matematice 60 Înlocuirea caracterelor reprezentate prin bare oblice inverse 61 Gruparea folosind acolade și ghilimele duble 63 Considerații pentru utilizarea parantezelor drepte 64 Gruparea înainte de înlocuire 64 Gruparea expresiilor matematice folosind acolade 66 Exemplu de înlocuire 666 Exemplu de înlocuire de calculare a unui factorial 68 Informații suplimentare despre variabile 70 Considerații pentru utilizarea diferitelor caractere în numele variabilelor 71 Comanda unset 72 Verificarea prezenței variabilelor 72 Informații suplimentare despre expresii matematice 72 Comentarii 74 Reguli pentru substituție și grupare 75 Considerații pentru grupare și substituție 77 Informații de referință 79 Secvențe de caractere care încep cu o bară oblică inversă 79 Operații aritmetice 80 Funcții matematice încorporate 80 Comenzi Tcl de bază 81 Capitolul 2. Primii pași 85 Sursa comenzii 86 Scripturi Tcl pe Unix 86 Meniul principal Windows 88 Macintosh OS 8/9 și Mac ReEdit 88 OS X 89 Comandă din consolă 90 Opțiuni pentru linia de comandă 90 Opțiuni pentru linia de comandă afișate de programul dorit 91 Variabile predefinite 92 Cuprins 9 Capitolul 3. Un script CGI simplu 93 Înțelegerea limbajului HTML 94 Crearea standardului CGI și a paginii web dinamice 96 Guestbook.cgi Script 97 Utilizare fișier bibliotecă 98 Formarea începutului unui document HTML 99 Date generate de un script CGI 101 Utilizarea unei matrice Tcl ca bază de date 103 Crearea formularelor HTML și procesarea intrărilor utilizatorului 105 Formularul newguest.html 105 Pachetele ncgi și cgi.tcl 107 Scriptul newguest.cgi 107 Salvarea datelor utilizând scripturile Tc1 109 Gestionarea erorilor în scripturile CGI Îmbunătățirea scripturilor software 113 Capitolul 4. Procesarea șirurilor 114 Comanda șirului 114 Indecși 117 Șiruri în expresii 118 Compararea șirurilor de caractere cu caractere 1191192 Convertirea unor caractere Hartă 122 Comanda append 123 Comanda format 123 Comanda scan 127 Comanda binară 127 Modele de formatare 128 Exemple 130 Date binare și schimb de fișiere 132 Surse pentru informații suplimentare 132 Capitolul 5. Liste 133 Liste în Tcl 134 Generarea listelor 1136 Comanda 1136 Comanda lappend 137 Comanda lset 138 Comanda concat 138 Preluarea elementelor din listă: comenzi llength, lindex și Irange 139 Modificarea listelor: comenzi linsert și lreplace 140 10 Cuprins Căutarea unei liste: Comanda lsearch 141 Sortarea listelor: Comanda lsort 144 join 144 join. Comanda 146 Surse pentru mai multe informații 146 Capitolul 6. Structuri de control 147 Instrucțiunea if then else 148 Comanda switch 150 Comentarii în comanda switch 152 Comanda while 152 Comanda foreach 153 Utilizarea mai multor variabile bucle 155 Lucrul cu mai multe liste 156 Comanda for 156 Comenzile break și continuare 157 Comanda catch 157 Gestionarea situațiilor fără eroare 159 Comanda de eroare 159 Comanda return 161 Capitolul 7. Proceduri și domeniul de aplicare 163 Comanda proc 163 Modificarea numelor comenzii cu comanda rename 165 Scop 166 Comanda globală 167 Transmiterea unui nume cu comanda upvar 168 Crearea alias-urilor cu comanda upvar 169 Utilizarea comenzii upvar pentru a menține starea obiectului 170 Spații de nume și comanda upvar 170 Comenzi care funcționează cu nume de variabile 171 Capitolul 8. Matrice Tcl 172 Instrumente de limbaj pentru lucrul cu tablouri 172 Indici 173 Variabile matrice 174 Comanda de conversie a matricei 175 Matrice în liste 176 Transmiterea numelor de matrice 177 Crearea structurilor de date bazate pe matrice 178 Înregistrări simple 178 Cuprins 11 Stiva 180 Lista de matrice 181 Baza de date simplă 183 Alternative la utilizarea matricelor 184 Capitolul 9. Lucrul cu programe și fișiere 186 Rularea programelor folosind comanda exec 186 variabila auto_noexec 189 Caracteristicile rulării comenzii exec pe Windows 189 AppleScript pe sistemul Macintosh 189 Comanda fișierului 190 Nume fișiere pe diverse platforme 192 Formarea unei căi: comanda file join 193 Selectarea componentelor căii: comenzi split, dirname, tail 195 Acțiuni cu fișiere și directoare 196 Copierea fișierelor 196 Crearea directoare 196 Legături fixe și simbolice 197 Ștergerea fișierelor 197 Redenumirea fișierelor și directoare 198 Atribute fișiere 198 Utilizarea comenzilor I/O 201 Deschiderea fișierelor 202 Crearea unui canal de comunicare cu un proces 204 Extinderea datelor 204 Citirea și extinderea datelor 205 205 Comenzile Puts și Gets 206 Comanda Read 206 Încheierea unei linii de caracter 207 Acces aleatoriu la date 208 Închiderea canalelor I/O 209 Director curent: comenzi cd și pwd 209 Acțiuni cu fișiere folosind comanda glob 209 Extindere caractere ~ 211 Comenzi Exit și pid 212 Variabile de mediu 212 Comanda de registry 213 Partea a II-a. Caracteristici avansate Tcl 215 Capitolul 10: Cotarea și utilizarea comenzii eval 217 Generarea codului cu comanda List 218 12 Cuprins Comanda eval 218 Comenzi care efectuează concatenarea parametrilor 220 Comenzi care oferă un apel invers 221 Prefixul comenzii 221 Generarea dinamică a procedurilor în executarea concatenării 222 Comanda eval 224 Utilizarea comenzii eval într-o procedură Shell 224 Probleme cu citarea în comanda eval 227 Comanda de nivel superior 229 Comanda subst 232 Procesarea șirurilor cu comanda subst 233 Capitolul 11. Expresii regulate 234 Când să folosiți expresiile regulate 235 Rezolvarea problemelor obișnuite 236 Reguli pentru scrierea expresiilor regulate 237 Compararea caracterelor 237 Seturi de caractere 237 Iteratoare 238 Operator de selecție 239 Utilizarea ancorelor 240 Utilizarea barelor oblice inverse 240 Utilizarea barelor oblice inverse 240 244 Extindere 2 Subslashpatter 244 Extindere 2 Ordine 2 Extindere2 2 Potrivire Compatibilitate cu modele acceptate în Tcl 8.0 243 Secvențe backslash 244 Clase de caractere 244 Potrivire parcimonioasă 245 Iteratoare cu un număr limitat de repetări 246 Referințe inverse 247 Comparație lookahead 247 Coduri de caractere 248 Elemente de înlocuire 249 Deschidere la clase de echivalență 249 opțiuni de comparație 249 sensibile 249 taxa 250 Sintaxa expresiilor regulate 251 Comanda regexp 255 Cuprins 13 Model de analiză URL 257 Probleme întâmpinate la utilizarea iteratoarelor 260 Exemple de expresii regulate 260 Comanda regsub 262 Conversia datelor într-un program folosind regsub 263 Decodarea URL-urilor 263 Analizarea parametrilor CGI 276 Decodarea HTMLi 2765 HTMLi 2765 simplă 276 Eliminarea comentariilor HTML 272 Comenzi folosind expresii obișnuite 272 Capitolul 12: Biblioteci și pachete de scripturi 274 Accesarea pachetelor: variabila auto_path 275 Utilizarea pachetelor 276 Încărcarea automată a pachetelor 277 Pachete, implementate ca programe C 278 Ordinea de încărcare a pachetelor de biblioteci de comenzi 2289 folosirea fișierului tcllndex 281 Comanda necunoscută 283 Încărcare automată 283 Interzicerea utilizării unei biblioteci: auto_noload 284 Convenții care se aplică în timpul lucrului interactiv 285 Apelarea automată a programelor 285 Istoricul apelării comenzii 285 Abrevieri de nume Comenzi 285 Tcl Shell Environment 285 Bibliotecă T285 Procedură tcl_findLibrary 287 Stil de programare 288 Prefixe de nume de procedură 288 Matrice globală și reprezentare a variabilelor de stat 289 Ghiduri oficiale 289 Capitolul 13. Informații despre interpret și instrumente de depanare 291 Comanda ceas 292 Comanda Info 296 Variabile 297 297 Proceduri 30 Comenzi 14 Execuții 30 30 Proceduri Scripturi și Biblioteci 302 Numere de versiune 303 Mediu de rulare 303 Executarea programelor pe diferite platforme 304 Monitorizarea variabilelor și comenzilor 305 Monitorizarea execuției comenzilor 306 Variabile numai în citire 307 Crearea elementelor de matrice utilizând comanda Trace 308 Comenzile de apelare în fundal 309 Istoricul de apeluri și accesarea istoricului comenzilor 309 T310 C shell 311 Depanare 312 Tcl Dev Kit 313 Depanator avansat 314 Instrument Checker 314 Instrument compilator 314 Instrument TclApp 315 Instrument Service Manager 315 Instrument Inspector 315 Alte instrumente 315 Consola Tkcon 316 Critcl 316 Monitorizare eroare 3 Comanda 316 Programul de performanță eroare 316 Programul de performanță tk 316 în fișierul jurnal 317 Compilatorul Tcl 318 Capitolul 14. Spații de nume 320 Utilizarea spațiilor de nume 321 Variabile în spațiile de nume 323 Nume compuse 324 Găsirea comenzilor 325 Spații de nume imbricate 326 Proceduri de importare și export 327 Spații de nume și apeluri inverse 329 Introspecție 330 Comanda spațiului de nume 331 Conversia Lucru cu obiectele de spațiu de nume existente Sistemul de conținut 3 3xot 3 32 eu obiect system 333 Note 334 Denumirea componentelor, imaginilor și interpreților 334 Comanda variabilă în sfera globală 334 Încărcarea automată și procedura auto_import 334 Spații de nume și comanda de nivel superior 335 Particularitățile denumirii spațiilor de nume 335 Operații suplimentare 336 Capitolul 15. Internaționalizarea 337 pi 8 Setul de caractere Codificarea 339 Codificarea fișierelor și comanda fconfigure 340 Scripturi prezentate în diverse codificări 341 Unicode și UTF-8 341 Codificare binară 342 Conversia codificărilor 343 Comanda de codificare 343 Directoare de mesaje 344 Determinarea limbii locale 345 Administrarea directorilor de mesaje și a spațiilor de nume346 Pachetul msgcat 349 Capitolul 16. Programe bazate pe evenimente 350 Bucla de evenimente Tcl 351 Comanda after 351 Comanda fileevent 352 Comanda vwait 354 Comanda fconfigure 356 Modul I/O fără blocare 357 Comanda fblocked 359 Conversia End-359 Caracterul of-Line 359 Gestionarea caracterului de la sfârșitul fișierului 360 Dispozitive secvențiale 360 ​​Codificări 361 Configurarea canalelor I/O 361 16 Cuprins Capitolul 17. Utilizarea soclurilor de rețea 362 Extensii de rețea Tcl 363 Bibliotecă standard Scotty 363 Socket-uri Tc63 Client 363 Tc63 364 Opțiuni utilizate la crearea socket-urilor client 365 Socket-uri de server 366 Opțiuni utilizate la crearea socket-urilor serverului 367 Serviciul Echo 367 Primirea datelor prin HTTP 370 Servere proxy 371 Solicitare HEAD 373 Cereri GET și POST 375 Comanda fcopy 379 http:1 comandă http:1 config 380 Comanda ::geturl 381 Comanda http::formatQuery 385 Comenzi http::register și http::unregister 385 Comanda http::reset 385 Comanda http::cleanup 386 Autentificare de bază 386 Capitolul 18. TclHttpd Web Server 388 Integrarea cu programele de aplicație TclHttp3 388 Arhitectura TclHttpd 390 Adăugarea codului la TclHttpd 391 Modificarea programelor principale 392 Gestionarele domeniului 392 Starea conexiunii și datele cererii 393 Pachete HTML și ncgi 394 Transferarea rezultatelor procesării cererii către client 394 Application Direct 394 Prelucrarea datelor conținute într-o solicitare de tipuri 398396 Lucru cu MSE 398396 Tipuri de documente 398 Șabloane HTML + Tcl 400 Plasarea codului Tcl 401 Șabloane și structura site-ului web 402 Conținut 17 Utilizarea variabilelor pentru a stoca informații despre un site Web 406 Manipulatorii de date de formulare 407 Manipulatorii directe de aplicații 408 Șabloane pentru manipulatorii de date de formulare 411 Auto-testarea formularelor 411 Pachetul html 413 Atribuirea procedurilor 415 Module standard Application Direct 419 Despre starea serverului 420 Depanare 420 Trimiterea mesajelor de e-mail 422 Pachetul de distribuție TclHttpd 424 Pornirea serverului 424 Conținutul pachetului de distribuție 425 Configurarea serverului 426 Opțiuni de linie de comandă 426 Nume și număr de utilizator server2 7 ID grup 428 Adresa administratorului site-ului Web 428 Director rădăcină document 428 Diverse setări pentru lucrul cu documente 429 Șabloane de document 430 Fișiere protocol 430 Directoare CGI 431 Capitolul 19. Lucrul cu mai mulți interpreți și utilizarea comenzii SAFE-TCL 432 Interp 433 Crearea interpreților 435 Ierarhia interpreților 436 Numele interpretului în rolul echipei 437 Utilizarea echipei LIST ca parte a Interp Eval 437 Interpreți protejați 438 Pseudonimele pseudonimului 440 Echipe ascunse 441 Stanovka 442 Suport pentru intrarea de ieșire de către interpreți protejați 444 Bază protejată 446 Politici de securitate 448 18 Cuprins Restricționarea accesului la socket-uri 448 Restricții privind utilizarea fișierelor temporare 451 Comandă protejată după 456 Capitolul 20. Safe-Tk suplimentar și un browser suplimentar modulul 459 Tk în interprete slave 460 Ferestre Tk încorporate 460 Restricții sigure Tk 461 Plugin de browser 462 Embed_args și variabile de plugin 463 Exemplu de plugin 464 Instalarea plugin-ului 464 Politici de securitate și plugin 465 Politici de securitate 465 Pachetul de configurare/configurare 46 Configurare browser 46 fig. cfg File 469 Fișiere de configurare pentru politici 470 Seturi de capabilități 470 Crearea unei noi politici de securitate 471 Capitolul 21. Scripturi Tc1 cu mai multe fire 472 Ce este un fir de execuție 473 Suport de fire în Tcl 474 Pregătirea unui interpret Tcl cu suport pentru fire 474 Utilizarea extensiilor cu scripturi cu mai multe fire 474 475 Extensie fir de execuție 476 Crearea firelor de execuție 476 Crearea firelor de execuție care se pot asocia 478 Transmiterea mesajelor către fire 481 Transmiterea mesajelor sincrone 481 Trecerea asincronă a mesajelor 483 Stocarea și eliberarea firelor 484 Gestionarea erorilor 485 Resurse partajate 486 Gestionarea conductelor I/O din fire de execuție diferite 487 Accesarea țevilor de I/O între fire de execuție 487 488 Variabile partajate 493 mutexe și variabile de condiție 495 Mutexes 495 Variabile de condiție 496 Pool -uri de fir 499 Conținut 19 Fire de comandă 501 Spațiu de nume 501 Space TSV 504 Space TPOOL 506 Capitolul 22. forma Starki File Systems 511 Aplicare la conținut folosind VFS 512 Utilizarea sdx pentru a crea aplicații 513 Crearea unui fișier Starkit simplu 513 Vizualizarea conținutului unui fișier Starkit 514 Organizarea pachetului standard 514 Crearea unui fișier Starpack 515 Utilizarea sistemului de fișiere virtual Starkit 515 Crearea tclhttpd.kit 517 Crearea fișierelor partajate Starkit 519 Metakit 521 Model de date Metakit 522 Accesarea bazei de date Metakit 522 Crearea vizualizărilor Metakit 525 Salvarea datelor într-un fișier Starkit 526 Wikit și Wiki 527 Caracteristici de utilizare a fișierelor Starkit 527 Seturi de documente 527 Aplicații de auto-upare 527 Instalatori simpli 528 Partea III. Elementele de bază ale Tk 529 Capitolul 23. Informații generale despre programul Tk 530 Tk „Hello, World!” 532 Denumirea componentelor Tk 534 Configurarea componentelor Tk 535 Atributele componentelor Tk și a bazei de resurse 536 Informații de referință Tk 537 Comenzi Tk 538 Comenzi pentru crearea componentelor 538 Comenzi pentru efectuarea acțiunilor cu componente 539 Proceduri de suport 540 20 Cuprins Seturi de componente 541 Tix BLT 541 și 541 542 BWidget s 542 TkTable 542 Capitolul 24. Tk în exemple 543 ExecLog 543 Titlul ferestrei 546 Cadrul butonului 546 Butoanele de comandă 547 Eticheta textului și elementul de introducere 547 Manipularea tastei și focalizarea introducerii 547 Proceduri de execuție 54 Proceduri de execuție a barei de text 54 Scroll54 Proceduri54 dura Stop 550 Lucrul pe mai multe platforme 551 Browser 552 Redimensionarea Windows 556 Gestionarea stării 556 Găsirea fișierelor 556 Meniul în cascadă 558 Componenta text numai citire 559 Tc1 Wrapper 559 Marcatori de text, mânere și legături 563 Utilizarea mai multor interpreți 563 Managerul de aplicații 563 Managerul de aplicații 564. Plasarea direcțională 567 Dimensiunile ferestrelor și comanda de propagare a pachetului 568 Plasarea orizontală și verticală 568 Modelul cavității 570 Spațiu de aspect și spațiu de afișare 572 Opțiunea -fill 572 Umplutură internă, specificată folosind opțiunile -ipadx și -ipady 573 Umplutură externă, specificată folosind -padx și Opțiuni -pady 575 Redimensionarea ferestrelor și opțiunea -expand 576 Cuprins 21 Commiterea 578 Coada de aspect 580 Introspecție 581 Caracteristici de aspect pentru bara de defilare 581 Selectarea unei componente părinte la așezare 582 Eliminarea unei componente din coada de aspect 8 5 8 Pachetul de comenzi 8 Pachetul de comenzi 585 Reguli Stiva ferestre 586 Capitolul 26. Managerul de aranjare grilă 587 Dispunerea componentelor ca tabel 587 Opțiunea -sticky 588 Umplutură externă, implementată cu opțiunile -padx și -pady 590 Umplutură internă, implementată cu opțiunile -ipadx și -ipady 590 Plasarea mai multor ferestre componente într-o singură celulă 591 Combinarea rândurilor și coloanelor 592 Atributele rândurilor și coloanelor 593 Completarea rândurilor și coloanelor 593 Dimensiunea minimă a celulei 594 Suport pentru ferestre redimensionabile 594 Opțiunea -uniform 596 Comanda grilă 597 Capitolul 27. Managerul aspectului locului 599 Înțelegerea aspectului locației 599 manager 599 Gestionarea panourilor 601 Analizarea parametrilor și menținerea stării 603 Alinierea cadrelor 603 Legarea evenimentelor 604 Gestionarea plasării cadrelor 605 Comanda The place 606 Capitolul 28. Componenta fereastră panou 608 Utilizarea ferestrei panou 608 Gestionarea conținutului panourilor 609 Programarea componentei ferestrei panou 611 Atributele ferestrei panou 613 22 Cuprins Capitolul 29: Legarea comenzilor la evenimente 615 Comanda de legare 616 Comanda de legare a tastelor și de a se focaliza 619 Utilizarea tastelor și de introducere a tastelor. continua comenzi 620 Definirea noilor tag-uri de legare 620 Descrierea evenimentelor 621 Evenimente de la tastatură 623 Evenimente de mouse 624 Alte evenimente 625 Legături pentru ferestrele de nivel superior 626 Modificatori 626 Secvențe de evenimente 629 Evenimente virtuale 631 Generarea de evenimente 632 Informații despre eveniment 3 cuvinte cheie eveniment 6x363 IV. Componente TC 637 Capitolul 30. Butoanele și meniul 639 comenzi apelate prin intermediul butoanelor și zona de vizibilitate 640 butoane asociate cu TS1-cross 645 atribute ale butoanelor 650 butoane de meniu și MENUBUTON 651 Meniul linie 653 Meniurile Contriot 654 Meniul de aranjare a meniului Opțiuni 654 elemente din mai multe coloane 655 Evenimente de meniu 655 Selectarea elementelor de meniu folosind tastatura 655 Evenimente de meniu virtual 656 Efectuarea acțiunilor de meniu 656 Atribute de meniu 658 Pachet pentru lucrul cu meniuri după nume 661 Comenzi rapide de la tastatură pentru accesarea meniurilor 665 Cuprins 23 Capitolul 31. Despre baza de date de resurse 667 667 Șabloane de resurse 668 Încărcarea unui fișier de bază de date 670 Includerea înregistrărilor într-o bază de date 671 Accesarea unei baze de date 672 Butoane definite de utilizator 672 Meniuri definite de utilizator 674 Aplicații și resurse pentru utilizator 677 Caracteristici ale substituției de variabile 679 Capitolul 32. Componente de sus Cadre simple T681 și Windows 682 Atributele componentelor Frame, Labelframe și Toplevel 682 Utilizarea componentei Labelframe 684 Activarea altor aplicații 685 Stiluri de ferestre de nivel superior 686 Componenta Label 687 Atribute Width and WrapLength 688 Label Component Component Atribute 6890 Atribute mesaj Componenta text 6890 Atribuire Componenta mesaj 6890 Atribuire 6890 în componentele de etichetă și mesaj 693 Componenta de scară 693 Legături pentru componenta de scară 694 Atribute ale componentei de scară 695 Programarea controlerelor liniare 696 Comanda clopot 697 Capitolul 33. Bare de defilare 698 Utilizarea barelor de defilare 698 Protocol pentru interacțiunea cu barele de defilare 700 operarea barelor de defilare 701 Operații xview și yview 702 Componenta scrollbar 703 Legături pentru scrollbars 704 Atributele componentei Scrollbar 705 Programarea scrollbars 706 24 Cuprins Capitolul 34. Editarea câmpurilor și a glisoarelor incrementale 708 Utilizarea câmpurilor de editare 709 Verificarea conținutului câmpurilor de editare 710 Sfaturi pentru utilizarea câmpurilor de editare 712 Utilizarea componentei casete de selectare 713 Legături pentru componentele de intrare și casete de selectare 716 Atribute ale componentelor de intrare și casete de selectare 718 Programarea câmpurilor de editare și a glisoarelor incrementale 721 Capitolul 35. Ferestrele Listă 724 Utilizarea casetelor cu listă 724 Efectuarea acțiunilor asupra conținutului unei componente Listbox 724 Programarea unei componente Listbox 725 Componenta Listbox 728 Legături pentru componenta Listbox 731 Răsfoire Modul de selecție 731 Modul de selecție unică 732 Modul de selecție extinsă73 Modul 734 Legături pentru derulare 734 Evenimente virtuale pentru componenta Listbox 735 Atribute ale componentei Listbox 735 Mod grilă 737 Capitolul 36. Componenta text 738 Indecși 739 Inserarea și ștergerea textului 740 Expresii index 740 Compararea indecșilor 741 Marcatori 744 Marcatori73 Atribute 744 Marcatori de text 744 Marcatori3 Direcții3 44 Utilizarea atributelor multiple de mâner 746 Spațiere și aliniere între linii 747 Tabulator 750 Selecție 750 Legături pentru mânere 751 Găsirea textului 753 Componente în linie 754 Imagini în linie 756 Conținut 25 Citirea conținutului unei componente de text 757 Obținerea informațiilor despre componentă 95 75 Obținerea informațiilor despre componentă 95 75 Obținerea informațiilor despre componentă 95 Dumpingarea conținutului Anularea acțiunilor finalizate 760 Legături și evenimente 762 Legături pentru o componentă text 762 Evenimente virtuale 764 Operații cu text 765 Atribute componentă text 769 Capitolul 37. Componenta Canvas 771 Coordonatele Canvas 771 Bună, lume! 773 Mânere Canvas 774 Glisor liniar pentru a determina valorile minime și maxime 776 Obiecte Canvas 782 Starea pânzei și obiectelor Canvas 783 Linii întrerupte 784 Arce 785 Bitmaps 786 Imagini 787 Linii 788 Ovale 791 Poligoane 3 Obiecte ferestre 9791 Texte 9792 Canvas 9792 02 componenta Generarea descrierilor Postscript 805 Atributele componentei canvas 808 Sfaturi 810 Coordonatele ecranului și coordonatele canvasului 810 Reprezentarea coordonatelor 810 Scalare și rotație 810 Lucrul cu resurse 811 Obiecte definite de un număr mare de puncte 811 Selectarea obiectelor canvas 811 Cuprins Partea V.26 Caracteristicile Tk 813 Capitolul 38. Selecția datelor și Clipboard-ul 815 Modelul de selecție 815 Comanda de selecție 818 Comanda Clipboard 819 Manipulatorii de selecție 820 Manipulatorul de selecție Canvas 820 Capitolul 39. Casete de dialog și Focalizare de intrare 825 Casete de dialog standard 826 Casete de mesaje 826 Casete de dialog Fișier și director 827 Casete de dialog color 829 Casete de dialog definite de dezvoltator 829 Focalizare de intrare 830 Comanda de focalizare 831 Transferarea focalizării de intrare 831 Capturarea intrării 832 Componentele tkwait 834 Reducerea comenzii 8334 Partajarea comenzilor focus, grab și tkwait 834 Caseta de dialog pentru introducerea unui șir 836 Comenzi rapide de la tastatură și focalizare de intrare 838 Animație și comanda de actualizare 838 Capitolul 40. Atributele componentei Tk 840 Setarea valorii atributelor 840 Dimensiuni componente 842 Componente de încadrare și relief 845 Evidențiere , având focalizare de intrare 846 Puncte de umplutură și ancorare 847 Capitolul 41. Culoare, imagini și cursore 850 Lucrul cu culori 851 Palete de culori 853 Valori de culoare 853 Hărți de culoare și clase vizuale 856 Bitmaps și imagini 858 Comanda imagine 859 Bitmaps 860 Bitmap atribut 860 Fotografie imagini 861 Cuprins 27 Cursor text 865 Cursor mouse 866 Capitolul 42. Fonturi și atribute text 869 Denumirea fonturilor 870 Fonturi denumite 871 Fonturi de sistem 872 Fonturi Unicode 872 Nume fonturi X Window 873 Caracteristici de lucru cu fonturi Tk versiuni anterioare84 metrici 875 Comanda fontului 876 Atribute text 877 Plasare 877 Atribute care controlează textul selectat 878 Utilizarea unei grile și redimensionarea 878 Un program care implementează selecția fontului 879 Capitolul 43. Comanda de trimitere 885 Ce poate face comanda de trimitere 886 Comanda de trimitere și X Window autorizare 887 Un script care implementează transferul de date 888 Comunicarea procesului 890 Evaluarea execuției de la distanță folosind socluri de rețea 892 Capitolul 44. Manageri de ferestre 896 Comanda win 896 Dimensiunea, poziționarea și stilul ferestrelor de nivel superior 897 Pictograme 900 Alte operațiuni ale managerului de ferestre 901 90 Alte operațiuni ale managerului de ferestre 90 Comanda winfo 904 Transmiterea de comenzi între aplicații 905 Relații între componentele aceleiași familii 906 Dimensiunea componentelor 906 Locația componentelor 908 Fereastra rădăcină virtuală 909 Lucrul cu atomi și identificatori 910 Hărți de culoare și clase vizuale 911 Comanda tk 912 28 Cuprins Capitolul 45 Personalizat Preferințe 91 Suport: Fișierele implicite utilizate de o aplicație 915 Definirea preferințelor personalizate 917 Interfața de preferințe personalizate 920 Gestionarea fișierului de setări utilizator 924 Urmărirea modificărilor în variabilele setărilor utilizatorului 926 Rafinarea pachetului 927 Capitolul 46. Interfață pentru definirea legăturilor 929 Ferestre cu liste de colaborare 932 Instrumente pentru editarea legăturilor 934 Salvarea și încărcarea legăturilor 935 Partea VI. Programare în C 937 Capitolul 47. Programe C și limbajul Tcl 938 Concepte de bază 939 Abordări de bază pentru scrierea codului C pentru o aplicație Tcl 939 Proceduri de comandă C și obiecte de date 940 SWIG 940 Inițializarea Tcl 941 Apelarea scripturilor Tc1 942 Utilizarea bibliotecii C T94l2 Crearea pachetelor încărcabile 944 Comanda de încărcare 944 Procedura de inițializare a pachetului 945 Utilizarea TCL_PKGPROVIDE 946 Procedura de comandă C 947 Interfață de comandă String 948 Procedura de comandă Coduri de ieșire 950 Gestionarea Stringurilor de rezultate 950 TCL_OBJ Interfață de comandă 951 Gestionarea contorului de referință TCL_OBJ 953 Modificare TCL_OBJ Valori 955 Probleme cu probleme TCL_OBJ la utilizarea valorilor Tcl_Obj partajate 956 Comanda blob 958 Crearea și ștergerea tabelelor hash 958 Tc1_A11oc, ckalloc și malloc 961 Prelucrarea parametrilor și utilizarea Tcl_GetIndexFromObj 961 Conținut 29 Crearea și ștergerea elementelor de referință Tcl_A11oc, 96965 pentru a susține o listă de valori Tcl_GetIndexFromObj​ 966 Folosirea Tcl _Preserve și Tcl_ Release pentru protecția datelor 967 Macro-ul CONST în Tcl 8.4 API 969 Operații și internaționalizare cu șiruri 970 Interfața DString 970 Conversie set de caractere 971 Tcl_Main și Tcl_AppInit 972 Scripturi Variante 975 CMain 975 975 Script-uri Variante eties de Tcl_Eval 979 Abandonarea Tcl_ Eval 980 Capitolul 48. Compilarea Tcl și Plug-in-uri 985 Structura directorului standard 986 Pachetul de distribuție 986 Structura directorului de instalare 987 Construirea Tcl din sursă 988 Instrumentele de configurare și autoconf 989 Opțiuni de configurare standard 991 Instalare 993 Utilizarea bibliotecilor stub5 Fișier 999 9 Autoconf. .m4 995 Crearea șabloanelor 996 Exemplu de extensie 996 Fișier configure.in 997 Fișier Makefile.in 998 Fișiere antet standard 1000 Utilizarea extensiei 1000 Capitolul 49. Crearea componentelor Tk în limbajul C 1002 Inițializarea extensiei 1003 Comanda componentă structură de date 100105 Clasa componentelor 1001005 Comanda instanței componente 1010 Instalarea și modificarea valorilor atributelor 1014 Definirea atributelor componente 1019 Afișarea ceasului 1025 30 Cuprins Sprijinirea evenimentelor ferestrei 1029 Eliberarea resurselor 1031 Capitolul 50. Biblioteci C 1033 Informații generale despre biblioteca Tcl C 1033 Crearea4 Inițializarea unei aplicații 1033 interprete 1034 Crearea și ștergerea comenzilor 1035 Pachete și încărcare dinamică 1035 Gestionarea șirurilor de rezultate 1035 Alocarea memoriei 1035 Lucrul cu liste 1036 Analizarea comenzilor 1036 Pipeline 1037 Urmărirea acțiunilor interpretului 1037 Erorile de execuție a informațiilor cu variabile T10371 T10371 38 Procesarea expresiilor 1039 Conversia numerelor 1039 Obiecte Tcl 1039 Tipuri de obiecte de bază 1039 Obiecte șir 1040 ByteArray pentru date binare 1041 Șiruri dinamice 1041 Seturi de caractere 1041 AssocData și Structuri de date Interpreter 1042 Tabele hash 1042 Gestionarea opțiunilor 1042 Buclele de expresie și reglarea evenimentelor 104 Reglarea evenimentelor 1043 Valr 104 Implementarea evenimentelor 104 Lucrul cu fișiere 1044 Evenimente temporizatoare 1044 Reverse Time Idle Calls 1044 I/O 1044 I/O Channel Drivers 1045 Gestionarea numelor de fișiere 1046 Obținerea informațiilor despre sistemul de fișiere 1046 Implementarea unui sistem de fișiere virtual 1047 Suport pentru fluxuri 1047 Lucrul cu semnale 1048 Conținut 31 0 Închiderea normală a programelor 1048484Încărcare 10484 Închiderea programelor normale 1048 Informații generale despre biblioteca Tk C 1049 Programul principal și parametrii liniei de comandă 1049 Crearea ferestrelor 1049 Numele aplicației pentru comanda de trimitere 1050 Configurarea ferestrelor 1050 Opțiunile liniei de comandă 1050 Coordonatele ferestrei 1050 Stiva ferestrei 1051 Informații despre setarea ferestrelor și componenta de selecție 1051 atribute 1051 clipboard 1051 Interfața buclei de evenimente 1051 Gestionarea evenimentelor din fereastră 1052 Legarea evenimentelor 1052 Capturarea evenimentelor de la tastatură 1052 Gestionarea erorilor de protocol grafic 1053 Utilizarea bazei de date de resurse 1053 Gestionarea hărților de biți 1053 Crearea de noi tipuri de imagini 1053 Crearea de noi tipuri de imagini 1053 Asistență 1053 Afișarea imaginilor 145 Utilizarea imaginilor 145 Suport 1053 Afișarea imaginilor 14 Utilizarea imaginilor Atchers Layouts 1054 Identificatori de rând 1055 Hărți de culoare și clase vizuale 1055 Chenaruri cu efecte 3D simulate 1056 Cursore mouse 1056 Fonturi și afișare text 1056 Context grafic 1056 Alocarea memoriei hărții de pixeli 1057 Unități de ecran 1057 Folosirea denivelărilor 1057 Linii de conexiune 1 linii 1 liniuțe 7 1057 1057 Linii de conexiune 1 linii 7 1057 liniuțe linii 1058 Stiluri de aliniere a textului 1058 32 Cuprins Atomi 1058 Gestionarea identificatorilor de resurse 1058 Descriptori de aplicații Windows 1058 Partea VII. Modificări în compoziția Tcl și Tk 1059 Capitolul 51. Tcl 7.4/Tk 4.0 1060 Shell<<Сору» может заменить ), o casetă de dialog standard și câteva comenzi suplimentare pentru lucrul cu fișierele. Tcl 7.7 și Tk 4.3 au fost implementări interne concepute pentru a dezvolta module Tcl/Tk suplimentare pentru browserele Web Netscape Navigator și Microsoft Internet Explorer. Dezvoltarea lor a avut loc, de fapt, în paralel cu munca la versiunile 7.6 și Tk 4.2. Modulul suplimentar a fost creat pentru diverse platforme, inclusiv Solaris/SPARC, Solaris/INTEL, SunOS, Linux, Digital Unix, IRIX, HP/UX, Windows 95, Windows NT și Macintosh. Acest modul acceptă Tcl-ailets ca parte a paginilor Web; folosește un mecanism de securitate bazat pe Safe-Tcl. Principalele caracteristici ale Tcl 8.0 includ un compilator dinamic de cod Tcl, a cărui utilizare poate crește foarte mult eficiența executării scripturilor Tcl. Tcl 8.0 acceptă șiruri care pot conține caractere nule. Pentru scripturile Tcl, compilatorul este transparent, dar dezvoltatorii care scriu extensii trebuie să cunoască unele dintre noile API-uri C, altfel nu vor putea profita de noile caracteristici. Procesul de creare a Tcl 8.0 a durat puțin mai mult. Acest lucru s-a datorat tranziției lui John Osterout de la Sun Microsystems la Scriptics Corporation. Implementarea 8.0р2 a fost gata în toamna lui 1997 și în curând a câștigat popularitate. Cu toate acestea, lansarea implementării finale, 8.0.5, a fost amânată până în primăvara anului 1999. Noua versiune a Tk a fost creată doar pentru a asigura cea mai bună conformitate cu Tcl 8.O. TK 8.0 include suport pentru fonturi independent de platformă, meniuri și bare de instrumente specifice platformei și componente specifice platformei care sunt concepute pentru a arăta în concordanță cu alte aplicații care rulează pe sistemele Windows și Macintosh. Tcl/Tk 8.1 oferă suport Unicode și noi capabilități de procesare a expresiilor obișnuite care oferă capabilități similare cu Perl 5. Aceste versiuni sunt, de asemenea, gata pentru fire, ceea ce face ușoară încorporarea Tcl în aplicații cu mai multe fire. Dezvoltatorii Tk au depus multă muncă pentru a găsi fonturi potrivite pentru a reprezenta caracterele Unicode, iar cataloagele de mesaje facilitează scrierea aplicațiilor cu interfețe în diferite limbi. Lucrarea pe Tcl/Tk 8.1 a fost, de asemenea, afectată de trecerea lui Osterout de la Sun la Scriptics. Prima implementare alfa a fost finalizată în toamna anului 1997, iar implementarea finală, 8.1.1, nu a fost gata până în mai 1999. Implementarea Tcl/Tk 8.2 a fost concepută în principal pentru a corecta erorile observate și a crește fiabilitatea sistemului. În același timp, API-ul bibliotecii Tcl C a fost completat cu unele instrumente care măresc setul de extensii disponibile. Lucrările la Tcl/Tk 8.2 s-au încheiat rapid, iar aceste implementări au fost publicate în vara anului 1999. Tcl/Tk 8.3 a fost îmbunătățit semnificativ în comparație cu implementările anterioare. Tk a adoptat șabloanele Dash și Image propuse de Jan Nijtmans. Implementarea 8.3.0 a fost lansată în februarie 2000, iar cea mai recentă versiune, 8.3.5, a fost lansată în octombrie 2002. Tcl/Tk 8.4 s-a concentrat pe performanță și a adăugat o interfață de sistem de fișiere virtuală și trei componente Tk: caseta spin, cadru etichetat și fereastră panou. 44 Lucrările la această implementare au continuat destul de mult timp. Prima versiune beta a fost lansată în iunie 2000, iar implementarea 8.4.2 a fost lansată în mai 2003. Tcl și Tk Extensions Tcl este proiectat astfel încât suplimentele să fie create ca extensii fără a afecta funcționalitatea de bază Tcl. În prezent sunt disponibile numeroase extensii. Informații despre acestea pot fi obținute pe Web la următoarea adresă: http://www.tcl.tk/resource/ Totuși, pentru a face unele modificări trebuie să modificați pachetul de bază Tcl/Tk. Dacă doriți să contribui la eforturile tale la dezvoltarea de noi variante Tcl/Tk, ajutorul tău ar fi foarte apreciat. Puteți găsi informațiile necesare despre activitățile echipei de dezvoltare Tcl și Tk la următoarea adresă: http://www.tcl.tk/cgi-bin/tct/tip/ Codurile sursă Tcl și Tk sunt acceptate în SourceForge proiect. http://www.sourceforge.net/proj ects/tcl http://www.sourceforge.net/proj ects/tktoolkit Mesajele despre erorile observate și sugestiile pentru îmbunătățiri sunt înregistrate în baza de date. Adăugările la codul sursă făcute în conformitate cu Manualul de inginerie Tcl au cele mai mari șanse de a fi acceptate.Manualele descriu regulile de formatare a codului, cerințele de testare și documentare. Tcl pe World Wide Web Puteți începe să vă familiarizați cu materialele despre Tcl din următoarele pagini web: http://www.tcl.tk/ http://tcl.activestate.com/ http://www.purl.org / NET/Tcl-FAQ/ Site-ul Wiki este actualizat frecvent la inițiativa utilizatorului. Publică numeroase materiale despre Tcl și extensiile sale (puteți iniția publicarea de informații noi). http://wiki.tcl.tk/ 45 Pagina Web a acestei cărți conține informații despre erori pentru toate edițiile. Monitorizez personal materialele publicate pe acest site și plănuiesc să fac acest lucru în viitor. http://www.beedub.com/book/ Puteți găsi, de asemenea, informații utile pe site-ul Web Prentice Hall. http://www.prenhall.com/ Arhivele Ftp Mai jos sunt enumerate câteva dintre site-urile FTP care conțin informații oTcl. ftp://ftp.tcl.tk/pub/tcl ftp://src.doc.ic.ac.uk/packages/tcl/ ftp://ftp.luth.se/pub/unix/tcl/ ftp:/ /ftp.sunet.se/pub/lang/tcl ftp://ftp.cs.Columbia.edu/archives/tcl ftp://ftp.funet.fi/pub/languages/tcl Puteți utiliza orice browser, cum ar fi Mozilla , Netscape, Internet Explorer și Lynx. Grupuri de știri Grupul coll.lang.tcl este foarte activ. În cadrul său există un forum dedicat discutării Tcl. Mesajele despre extensiile și aplicațiile Tc1 sunt trimise grupului de colegi. lang.tcl.announce. Pentru a accesa materialele grupurilor de știri, puteți utiliza servicii web speciale. Pentru a face acest lucru, trebuie doar să introduceți comp.lang.tcl în câmpul de editare de pe următoarea pagină Web: http://groups.google.com Cui este destinată această carte? Această carte poate fi utilă atât pentru programatorii care încep să lucreze cu Tcl pentru prima dată, și pentru specialiști calificați. Recomand tuturor categoriilor de cititori să citească cu atenție Capitolul 1. Modelul de programare Tcl este destul de simplu, dar diferă semnificativ de multe alte limbaje de programare. Acest model se bazează pe înlocuirea șirurilor, așa că, înțelegându-l cu atenție, vei evita multe probleme în munca ta. Cartea oferă un număr mare de exemple despre utilizarea eficientă a instrumentelor Tcl și Tk. Aproape fiecare 46 de capitole conține tabele care oferă informații despre comenzile și componentele Tc1. Se presupune că cititorul acestei cărți are o oarecare experiență în programare, dar chiar și un începător poate dobândi rapid abilitățile necesare citind această carte. Cunoașterea limbajelor shell Unix vă va ajuta, dar nu este o cerință. În cazul în care prezentarea materialului este strâns legată de principiile de funcționare ale sistemelor de ferestre, sunt furnizate informații relevante. Capitolul 2 descrie detaliile utilizării Tcl și Tk pe sisteme Unix, Windows și Macintosh. Cum să lucrați cu această carte Cel mai bine este să efectuați exemplele date în ea pe computer în timp ce citiți cartea. Programatorii au adesea dificultăți în a învăța Tcl. Faptul este că în informațiile de referință despre Tcl și Tk nu există exemple de utilizare a constructelor de limbaj corespunzătoare, iar programele reale se dovedesc a fi slab documentate. Această carte are scopul de a oferi cititorului informațiile care lipsesc. Pentru a afla anumite comenzi Tcl și Tk, vă recomand să utilizați ajutorul online. Acesta oferă o descriere detaliată a constructelor de limbaj corespunzătoare. Această carte conține multe din informațiile din sistemul de referință, dar îi lipsesc detalii care pot varia în funcție de implementarea Tcl și Tk. Versiunile HTML ale paginilor de ajutor online pot fi găsite pe CD-ul care însoțește această carte. Exemple de programe Această carte vine cu un CD care conține codurile pentru toate exemplele discutate în carte. Discul poate fi citit pe sisteme Unix, Windows și Macintosh. Pe lângă programe, conține versiuni ale Tcl și Tk care erau disponibile la momentul publicării acestei cărți, precum și multe dintre programele distribuite gratuit pe Internet. Codul sursă pentru exemple poate fi găsit și pe Web la următoarea adresă: http://www.beedub.com/book/ Convenții de prezentare Exemplele de cod sunt prezentate în moduri diferite pe parcursul cărții. Cele mai importante dintre ele sunt separate de restul textului și prezentate sub formă de listări. Codurile a 47 de programe în Tcl și C sunt prezentate în font monospace. Rezultatele executării comenzilor Tcl sunt, de asemenea, afișate cu caractere cursive. Rețineți că caracterele => nu fac parte din datele returnate de comandă. expr 5+8 => 13 Fontul Monospace este folosit și pentru a reprezenta numele comenzilor Tcl și procedurilor C în text. Cartea conține adesea reguli pentru utilizarea comenzilor Tcl. Numele comenzii și cuvintele cheie imuabile sunt afișate în font monospațiu. Indicațiile că apelul de comandă conține valori variabile, opțiuni sau alte date sunt scrise cu caractere cursive. Dacă un parametru este opțional, semnele de întrebare sunt plasate în stânga și în dreapta acestuia. Un exemplu care explică utilizarea comenzii set este dat mai jos. setați nume_variabilă?valoare? Pictograme Informațiile care necesită o atenție suplimentară sunt marcate cu pictograme. Cum este organizată această carte Materialul din carte este împărțit în șapte părți. Primul capitol descrie instrumentele de bază ale Tcl. Primul capitol examinează mecanismele care stau la baza limbajului. Acest material este foarte important. Cu siguranță ar trebui să-l verificați dacă doriți să utilizați eficient Tcl. Dacă ați programat deja în Tcl, ar trebui să parcurgeți cel puțin Capitolul 1. Capitolul 2 acoperă detaliile utilizării Tcl și Tk pe sisteme Unix, Windows și Macintosh. Capitolul 3 prezintă un exemplu de aplicație (script CGI) care ilustrează principalele caracteristici ale scrierii programelor în Tcl. Restul capitolelor din partea I sunt dedicate unei examinări detaliate a principalelor comenzi Tcl. În special, se discută despre lucrul cu șiruri de caractere, tipuri de date, utilizarea fluxului și procedurilor de control și domeniul de aplicare. Partea I se încheie cu o privire asupra instrumentelor pentru schimbul de fișiere și rularea altor programe. Partea a II-a descrie instrumente avansate pentru scrierea programelor Tcl. În primul rând, discutăm despre comanda eval, care vă permite să generați în mod dinamic programe Tcl. Expresiile regulate oferă capacități suplimentare de procesare a șirurilor. Dacă procesarea datelor este o parte semnificativă a aplicației dvs. și dacă aplicația rulează lent, este posibil să-i puteți îmbunătăți performanța utilizând suportul pentru expresii regulate. Spațiile de nume vă permit să împărțiți domeniul global de proceduri și variabile în domenii separate. Unicode și directoarele de mesaje facilitează crearea de aplicații multilingve. Bibliotecile și pachetele vă permit să vă organizați codul astfel încât să poată fi utilizat în diferite proiecte. Instrumentele de introspecție oferă informații importante despre starea internă a Tcl. I/O bazat pe evenimente vă permite să creați aplicații care funcționează cu mai mulți clienți simultan. Prizele de rețea sunt folosite pentru a implementa protocolul HTTP, care vă permite să primiți pagini Web. Ultimele capitole din partea a II-a descriu instrumentele de dezvoltare a aplicațiilor și modul de utilizare a acestora pe diverse platforme. Instrumentele Safe-Tcl oferă un mediu sigur în care pot fi executate applet-urile Tcl. Pentru a lucra pe Web, poate fi folosit serverul Web extensibil TclHttpd, scris în întregime în Tcl. Este ușor să creezi programe de aplicație bazate pe TclHttpd; De asemenea, puteți integra serverul cu aplicațiile existente, creând astfel o interfață Web pentru acestea. Starkit este un nou instrument puternic care vă permite să împachetați și să livrați aplicații Tcl/Tk. Pentru a organiza sistemul de fișiere în pachet, se folosește suportul pentru sistemul de fișiere virtual (VFS). Partea a III-a conține informații generale despre Tk. Capacitățile lui Tk sunt ilustrate cu o serie de exemple. Această parte descrie, de asemenea, legarea - stabilirea unei corespondențe între o comandă Tcl și un eveniment, cum ar fi un clic de mouse sau apăsarea unei taste. Ultimele trei capitole ale Părții a III-a sunt dedicate managerilor de layout Tk, care oferă instrumente puternice pentru organizarea interfeței cu utilizatorul. Partea a IV-a a acestei cărți descrie componentele Tk. Componentele implementează butoane, meniuri, bare de defilare, etichete de text, câmpuri de editare, zone de text care acceptă diferite fonturi, pânză de desen, casete cu listă și glisoare liniare. Pentru fiecare componentă, există instrumente care vă permit să îi schimbați configurația și să organizați interacțiunea cu programele aplicației, dar comportamentul implicit al componentei satisface cel mai adesea cerințele dezvoltatorilor. Pentru a simplifica configurarea componentelor și a asigura consistența elementelor de interfață, sunt furnizate baze de date de resurse. Partea V descrie acele instrumente Tk cărora nu li sa acordat suficientă atenție în părțile anterioare. În special, acoperă selecțiile, problemele de focalizare de intrare și casetele de dialog standard. În plus, se discută în detaliu lucrul cu fonturi, culoare 49 și imagini - elemente comune tuturor componentelor Tk. Această parte se încheie cu câteva exemple de programe destul de mari. Partea VI este o introducere în programarea extensiilor Tc1 în C. Această parte este inclusă în carte, astfel încât cititorul să își poată face o idee bună despre cum să extindă Tcl cu comenzi scrise în C și să integreze Tcl cu aplicațiile existente. Fiecare capitol din partea a VII-a este dedicat uneia dintre implementările Tcl/Tk menționate în această carte. Aceste capitole descriu funcții noi, precum și caracteristici care se pot schimba de la o versiune la alta. Aceste caracteristici trebuie luate în considerare la adaptarea programelor pentru versiuni noi de Tcl/Tk. Caracteristicile ediției a patra a cărții În cea de-a patra ediție, materialul este prezentat folosind versiunea Tcl/Tk 8.4, în care au fost implementate multe caracteristici noi. Tcl introduce un sistem de fișiere virtual care vă permite să luați în considerare structura directoarelor la livrarea aplicațiilor, precum și să lucrați cu resurse de la distanță pe FTP și site-uri Web printr-o interfață cu un sistem de fișiere obișnuit. A patra ediție adaugă Capitolul 22, care acoperă Tclkit și Starkit și utilizarea bazei de date Metakit pentru a stoca scripturi și alte fișiere. Cu VFS, aceste fișiere sunt plasate pe un sistem de fișiere privat. Starkit este un nou instrument puternic care vă permite să împachetați și să livrați aplicații Tcl/Tk. Ediția a patra a adăugat și Capitolul 21, care acoperă instrumente pentru susținerea programelor cu mai multe fire. Aceste facilități sunt foarte utile atunci când se încorporează Tcl în aplicații multi-threaded. Această ediție acoperă și noi componente ale Tk. Glisorul incremental este similar cu câmpul de editare, dar are caracteristici suplimentare. Ramele cu etichete oferă noi opțiuni de stil pentru ferestre. Componenta fereastra panoului este un manager de layout specializat care oferă noi capabilități pentru organizarea interfețelor utilizator. Mulțumiri pentru asistență în pregătirea primei ediții a acestei cărți Mulțumesc personalului de la Xerox PARC pentru asistență și înțelegere. Multe dintre sfaturile date în carte au fost rezultatul nu numai al muncii mele personale, ci și al experienței colegilor mei. Întrebările puse de Dave Nichols m-au inspirat să învăț mecanica de bază a interpretului Tcl. Comentariile lui Dan Swinehart și Lawrence Butcher m-au ținut motivat să continui să lucrez. Ron Frederick și Berry Kerchival au folosit Tk pentru a dezvolta interfețe grafice pentru sistemele lor. Rezultatele obținute au confirmat încă o dată eficiența ridicată a acestui instrument. Becky Burwell, Rich Gold, Carl Hauser, John Maxwell, Ken Pier, Marvin Theimer și Mohan Vishwanath mi-au revizuit primele schițe. Comentariile și observațiile lor au oferit o asistență neprețuită în continuarea lucrărilor asupra textului. Karin Petersen, Bill Schilit și Terri Watson au căutat mereu modalități de a folosi Tcl în moduri non-standard, ceea ce a adus o varietate plăcută lucrării. Vreau să le mulțumesc în mod special lui Mark Weiser și Doug Terry pentru ajutor și sprijin. Mulțumim autorului cărții Tcl și Tk, John Osterout. Sistemele pe care le-a dezvoltat sunt cele mai remarcabile pe care le-am întâlnit vreodată. John m-a ținut la curent cu cele mai recente implementări Tk 4.0, astfel încât să pot explora noi funcții înainte de lansarea primei beta. Le mulțumesc programatorilor cu care a trebuit să comunic. Am învățat multe lucruri noi de la ei. Consider că John LoVerso și Stephen Uhler sunt cei mai talentați dezvoltatori de programe Tc1 pe care i-am cunoscut vreodată. Îmi exprim sincera recunoștință celor care mi-au citit primele proiecte și au oferit comentarii valoroase. Acesta este Pierre David, Clif Flynt, Simon Kenyon, Eugene Lee, Don Libes, Lee Moore, Joe Moss, Hador Shemtov, Frank Stajano, Charles Thayer și Jim Thornton. Mulți oameni mi-au trimis sugestii și comentarii prin poștă. Aici dau numele doar câtorva dintre ei. Sunt Miguel Angel, Stephen Bensen, Jeff Blaine, Tom Charnock, Brian Cooper, Patrick D'Cruze, Benoit Benoit Desrosiers, Ted Dunning, Mark Eichin, Paul Priberg, Carl Gauthier, David Gerdes, Klaus Hackenberg, Torkle Hasle, Marti Hearst, Jean-Pierre Herbert, Jamie Honan, Norman Klein, Joe Konstan, Susan Larson Larson), Heken Liljegren, Lionel Mallet, Dejan Milojicic, Greg Minshall, Bernd Mohr, Will Morse, Heiko Nerdmann Heiko Nardmann, Gerd Neugebauer, Keri Renzema, Rob Riepel , Dan Schenk, Jean-Guy Schneider, Elizabeth Scholl), Karl Schwamb, Rony Shapiro, Peter Simanyi, Vince Skahan, Bill Stumbo, Glen Vanderburg, Larry Virden, Reed Wade și Jim Wight. Din păcate, nu am putut să răspund la toate scrisorile. Mulțumesc editorilor și tuturor celor de la Prentice Hall. Profesioniștii cu înaltă calificare Mark Taub, Lynn Schneider și Kerry Reardon m-au ajutat foarte mult în dezvoltarea cărții. Mulțumiri pentru ajutor cu cea de-a doua ediție a acestei cărți Vreau să-i mulțumesc din nou lui John Osterout pentru sprijinul acordat în timpul lucrului la grupul Tcl/Tk de la Sun Microsystems. Restul grupului a făcut tot posibilul pentru a transforma Tcl și Tk în instrumente reale pentru crearea de programe multiplatforme. Scott Stanton a fost responsabil pentru portarea Tk pe PC, iar Ray Johnson s-a asigurat că Tk funcționează pe Macintosh. Jacob Levy a implementat un sistem I/O bazat pe evenimente, Safe-Tcl și un program de completare pentru browser. Brian Lewis a creat compilatorul Tcl. Ken Corey a lucrat la integrarea Tcl și Java și a ajutat, de asemenea, la lucrul la SpecTcl. Syd Polk a generalizat sistemul de meniuri pentru a lucra cu componente specifice platformei în mediile Macintosh și Windows. Colin Stevens a lucrat la suport pentru fonturi și instrumente de internaționalizare pentru Tk. Stephen Uhler merită mulțumirile mele sincere pentru exemplele interesante pe care le-am folosit în cartea mea. A condus echipa de dezvoltare SpecTcl. Stephen a creat biblioteca HTML pe care am folosit-o pentru a scrie editorul. Am lucrat împreună la primele versiuni ale TclHttpd. M-a învățat cum să scriu cod Tcl compact și eficient și cum să folosesc expresii regulate pentru a rezolva multe probleme. Îi datorez multe lui Stephen și sper că i-aș putea fi de folos într-un fel. Mulțumesc din nou lui Mark Taub, precum și Eileen Clark și Martha Williams de la Prentice Hall. George Williams m-a ajutat să pun fișierele împreună pe un CD. 52 Mulțumiri pentru asistență în pregătirea celei de-a treia ediții a cărții John Osterout continuă să joace un rol important în dezvoltarea și distribuția Tcl, de data aceasta ca fondator al Scriptics Corporation. Vreau să mulțumesc tuturor celor de la Scriptics, în special lui Sarah Daniels, Scott Stanton, Ray Johnson, Bryan Surles, Melissa Chawla, Lee Bernhard, Suresh Sastry, Emil Scaffon, Pat P., Scott Redman și Berry Kerchival. Toți cei de la Scriptics merită mulțumirile noastre sincere pentru crearea unui mediu propice muncii creative în cadrul companiei. Autorul multor publicații, Jerry Peek, m-a ajutat cu sfaturi utile. Ken Jones a vorbit despre instrumente eficiente de indexare. Multe mulțumiri tuturor cititorilor care au trimis feedback și sugestii. Învățarea despre noi moduri de a folosi Tcl m-a interesat întotdeauna. De asemenea, le mulțumesc editorilor de la Prentice Hall Mark Taub, Joan McNamara și Joan Eurell. M-au ajutat să termin a treia ediție a cărții la timp. Mulțumiri pentru asistență în pregătirea celei de-a patra ediții a cărții. Mulțumiri lui Jeff Hobbs și Ken Jones, acest proiect a fost finalizat cu succes. Jeff este cunoscut pe scară largă printre programatorii Tcl. Noi implementări ale Tcl/Tk au apărut în mare parte datorită conducerii sale și muncii intense. Ken este un profesor de Tcl bine-cunoscut, iar colaborarea mea cu el a dus la adăugarea unor materiale noi interesante la această carte. Vreau să le mulțumesc membrilor echipei de bază Tcl; Prin eforturile acestui grup, Tcl devine un instrument din ce în ce mai puternic și dobândește noi capabilități. Aș dori să le mulțumesc lui Jean-Claude Wippler și Steve Landers pentru Metakit, Tclkit și Starkits. Aceste instrumente oferă capabilități unice pentru ambalarea și livrarea aplicațiilor Tcl. Sper că aceste tehnologii vor continua să se dezvolte. Am primit și informații despre Starkit de la unii utilizatori. Mesaje mi-au fost trimise de Robert Techentin, Steve Blinkhorn, Frank Sergeant, Arjen Markus, Uwe Koloska, Larry Virden 53, Tom Krehbiel (Tom Krehbiel) și Donald Porter. Aș dori să-mi exprim recunoștința conducerii și personalului de la Prentice Hall pentru sprijinul lor continuu. Marc Taub continuă să fie „nașul” acestei cărți. Kathleen Caren a jucat un rol important în pregătirea celei de-a patra ediții pentru lansare. În cele din urmă, îi mulțumesc soției mele, Jodi, pentru dragostea, bunătatea, răbdarea și înțelegerea ei în timpul orelor lungi de scriere a acestei cărți. Am trei fii, Christopher, Daniel și Michael. Trebuie să răspund constant la întrebările lor, așa că sunt sigur că nu sunt în pericol de degradare psihică. Cum să contactez autorul unei cărți Sunt întotdeauna gata să ascult părerile cititorilor despre o carte. Adresa mea este welch® acm.org. Dacă includeți cuvântul „carte” sau titlul cărții în câmpul de subiect al scrisorii, acest lucru mă va ajuta să sortez corect scrisorile primite. Puteți obține informații noi despre această carte și despre alte domenii ale muncii mele la http://www.beedub.com/. Țin o evidență a erorilor găsite pe site-ul Web, astfel încât comentariile dumneavoastră vor fi foarte apreciate. Așteptăm feedback-ul dvs. Dumneavoastră, cititorul acestei cărți, sunteți principalul critic și comentator al acesteia. Apreciem opinia dumneavoastră și vrem să știm ce am făcut bine, ce am fi putut face mai bine și ce altceva ați dori să ne vedeți publicând. Suntem interesați să auzim orice alte comentarii pe care ați dori să ni le faceți. Așteptăm comentariile voastre și le sperăm. Ne puteți trimite o scrisoare sau e-mail, sau pur și simplu vizitați serverul nostru web și lăsați comentariile dvs. acolo. Într-un cuvânt, în orice mod convenabil pentru dvs., spuneți-ne dacă vă place sau nu această carte și, de asemenea, exprimă-ți părerea despre cum să facem cărțile noastre să fie mai interesante pentru tine. Când trimiteți o scrisoare sau un mesaj, asigurați-vă că includeți titlul cărții și autorii acesteia, precum și adresa dvs. de retur. Vom analiza cu atenție opinia dumneavoastră și ne asigurăm că o ținem cont atunci când alegem și ne pregătim pentru publicarea cărților ulterioare. Coordonatele noastre: E-mail: info oQwilliamspublishing. com WWW: http://www. williamspublishing. com Informații pentru scrisori din: Rusia: 115419, Moscova, PO Box 783 Ucraina: 03150, Kiev, PO Box 152 PARTEA Tcl Basics Partea I oferă informații de bază despre limba Tcl. Capitolul 1 ar trebui citit de fiecare cititor, indiferent de problemele pe care intenționează să le rezolve în practică. Acest capitol descrie proprietățile de bază ale limbajului. Tcl este destul de simplu, așa că chiar și programatorii începători îl pot stăpâni cu ușurință. Persoanele calificate ar trebui să revizuiască și Capitolul 1 pentru a evita abordările care nu sunt aplicabile TCL. Capitolul 2 oferă un ghid rapid pentru rularea Tcl și Tk în mediile de operare Unix, Windows și Macintosh. Poate fi necesar să citiți mai întâi Capitolul 2 pentru a putea urma exemplele din Capitolul 1. Capitolul 3 prezintă un program tipic TCL - un script CGI care implementează o carte de oaspeți pe un site Web. La crearea acestui program s-au folosit instrumente care sunt descrise în detaliu în capitolele următoare. Scopul principal al capitolului este de a prezenta cititorului un exemplu din viața reală care demonstrează capacitățile Tcl. Restul capitolelor din partea I sunt dedicate direct programării în Tcl. Procesarea șirurilor este tratată în Capitolul 4. Lucrul cu liste este tratat în Capitolul 5. Structurile de control, cum ar fi buclele și instrucțiunile if, sunt tratate în Capitolul 6. Capitolul 7 acoperă procedurile Tcl care pot fi utilizate pentru a implementa noi comenzi Tcl. Capitolul 8 discută tablourile Tcl. Arrayurile sunt una dintre cele mai utile structuri din Tcl; oferă flexibilitate în aplicațiile pe care le creați. Capitolul 9 acoperă operațiunile I/O și rularea altor programe. Aceste instrumente creează scripturi Tcl care vă permit să combinați diferite programe și să procesați datele conținute în fișiere. După ce ați citit Partea I, veți avea suficiente cunoștințe pentru a dezvolta programe simple Tcl și pentru a citi și înțelege codul scris de alți programatori. Capitolul 1 Înțelegerea Tcl Acest capitol descrie sintaxa limbajului de scripting Tcl. În special, se ocupă de înlocuirea și gruparea efectuată în timpul interpretării programelor Tcl. Discuția va acoperi următoarele comenzi Tcl: puts, format, set, expr, string, while, incr și proc. Tcl este un limbaj de comandă orientat spre șiruri. Folosește doar câteva constructe de bază ale limbajului. Sintaxa limbii este extrem de simplă, ceea ce vă permite să o învățați rapid. Limbajul Tcl este axat în primul rând pe rezolvarea problemelor care implică combinarea unui set de „blocuri de construcție” într-o aplicație finită. Tcl este un limbaj interpretat; În timp ce aplicația rulează, codul acesteia este procesat de interpret. Datorită acestei abordări, procesul de dezvoltare și modernizare a aplicației este simplificat semnificativ; operațiunile necesare pentru aceasta pot fi efectuate interactiv. Capacitatea de a rula comenzi interactiv face mult mai ușoară învățarea Tcl. Dacă nu știți deja cum să rulați un interpret Tcl pe sistemul dvs., ar trebui să citiți Capitolul 2, care acoperă rularea Tcl pe medii de operare Unix, Windows și Macintosh. Acest capitol oferă o privire de ansamblu asupra limbajului Tcl. Chiar dacă vă considerați un programator cu experiență, încercați să vă faceți timp pentru a citi acest capitol. Acest lucru vă va ajuta să vă asigurați că cunoașteți cu adevărat limba Tcl și vă va ajuta să evitați multe greșeli în viitor. Principalele mecanisme care stau la baza Tcl sunt legate de procesarea și substituția șirurilor, ceea ce face ușoară urmărirea acțiunilor interpretului. Modelul Tcl este oarecum diferit de alte limbaje de programare, așa cum veți vedea în timp ce citiți acest capitol. Capitolul 1: Înțelegerea limbajului Tcl 57 Tcl Commands Tcl -■ este o abreviere pentru Tool Command Language. Comenzile efectuează diverse acțiuni, cum ar fi imprimarea unui șir, calcularea valorii unei expresii aritmetice sau afișarea widget-urilor pe ecran. În Tcl, toate acțiunile sunt reprezentate ca comenzi, chiar și atribuirea de valori variabilelor și definirea procedurilor. Pentru a apela comenzi în limbajul Tcl, sunt furnizate structuri sintactice destul de simple. Toate acțiunile complexe sunt efectuate de interpret, care implementează comenzile. Comanda Tcl este scrisă în următoarea formă: comandă parametru1 parametrul2 parametrul3. . . Comanda poate fi fie o comandă încorporată Tcl, fie o procedură. Numele comenzii este separat de parametri prin unul sau mai multe spații sau file; aceleași simboluri sunt folosite pentru a separa parametrii. Caracterul de sfârșit de linie sau punct și virgulă termină comanda. În timpul procesului de interpretare, Tcl efectuează gruparea (combinând mai multe cuvinte într-un singur parametru) și înlocuirea (înlocuirea variabilelor și apelurile de proceduri imbricate). Activitățile de procesare a comenzilor interpretului Tcl pot fi împărțite în trei etape. Gruparea parametrilor. Înlocuirea comenzilor imbricate, variabilelor și caracterelor precedate de o bară oblică inversă. Apelați o comandă. Interpretarea parametrilor prin comanda în sine. (Această problemă va fi discutată mai târziu în acest capitol.) Salut, lume! Lista 1.1. Programul „Bună, lume!” pune stdout (Bună ziua, lume => Hello, World! В данном примере команде puts передаются два параметра: идентификатор потока ввода-вывода и строка. Команда puts записывает строку в поток, добавляя символ новой строки. Данный простой пример демонстрирует две следующие особенности Tcl. Параметры интерпретируются командой. В данном случае поток ввода- вывода идентифицируется с помощью имени stdout. Данное имя потока используется puts и другими командами ввода-вывода. Имя stderr 58 Часть I. Основы Tcf определяет стандартный поток ошибок, а имя stdin - стандартный поток ввода. Обмен данными с файлами подробно рассматривается в главе 9. Фигурные скобки применяются для группировки нескольких слов в один параметр. В результате команда puts воспринимает слова Hello, World! как второй параметр. Скобки не являются частью значения. Фигурные скобки предназначены для предоставления дополнительной информации интерпретатору. Перед тем как значение будет передано команде, скобки удаляются. Посредством скобок группируются все символы, включая переводы строк и вложенные скобки. Группировка оканчивается при появлении закрывающей фигурной скобки. Для группировки в Tcl также могут использоваться двойные кавычки. Группировка будет более подробно рассмотрена далее в этой главе. Переменные Для присвоения значений переменной используется команда set. Этой команде передаются два параметра: имя переменной и значение. Имя переменной может быть любой длины; регистр символов учитывается. В составе имени допустимы любые символы. При написании Tcl-программ нет необходимости объявлять переменные перед их использованием. Интерпретатор создает переменную в тот момент, когда ей необходимо впервые присвоить значение. Для того чтобы обратиться к значению переменной, надо указать перед ее именем символ $, как показано в листинге 1.2. Листинг 1.2. Использование переменных Tcl set var 5 => 5 set b $var => 5 Вторая команда set, содержащаяся в листинге, присваивает переменной b значение переменной var. В данном примере вы впервые встречаетесь с под- Глава 1. Общие сведения о языке Tcl 59 становкой. Чтобы лучше понять, как выполняется вторая команда set, ее можно переписать, заменив $var значением переменной var: set b 5 В действительности подстановка осуществляется несколько другими, более эффективными способами, что очень важно в том случае, когда значением переменной является длинная строка. Подстановка команд Помимо подстановки переменных, в Tcl используется подстановка команд. Вложенные команды помещаются в квадратные скобки. Интерпретатор Tcl воспринимает любую последовательность символов, находящуюся между открывающей и закрывающей квадратной скобкой, как команду. В процессе интерпретации осуществляется замена выражения в квадратных скобках (включая сами скобки) результатом выполнения вложенной команды. Квадратные скобки выполняют те же функции, что и одинарные кавычки в некоторых оболочках, кроме того, такой подход позволяет работать с командами любого уровня вложенности. Листинг 1.3. Подстановка команд set len => 6 В листинге 1.3 приведенное ниже выражение представляет собой вложенную команду. string length foobar Данная команда возвращает длину строки "foobar". Команда string будет подробно описана в главе 4. При выполнении выражения в первую очередь выполняется вложенная команда. Затем осуществляется подстановка, в результате чего внешняя команда приобретает следующий вид: set len б Если в составе внешней команды находится несколько вложенных команд, интерпретатор обрабатывает их слева направо. Закрывающая скобка является признаком конца очередной команды. Встретив ее, интерпретатор выполняет команду. Это надо учитывать в тех случаях, когда результат одной команды может влиять на выполнение другой. 60 Часть I. Основы Tcl Математические выражения Сам по себе интерпретатор Tcl не вычисляет значения математических выражений. Он лишь выполняет группировку, подстановку и вызов команд. Для разбора и вычисления значений математических выражений используется команда expr. Листинг 1.4. Простое арифметическое выражение expr 7.2/4 => 1.8 Синтаксис выражений, передаваемых команде expr в качестве параметров, такой же, как и синтаксис выражений в языке С. Команда expr обрабатывает целые числа, числа с плавающей точкой и логические значения. Результатом выполнения логических операций является значение 0 (false) либо 1 (true). По необходимости целые числа преобразуются в значения с плавающей точкой. Восьмеричные числа начинаются с нуля (например, значение 033 равно целому числу 27). Шестнадцатеричные значения начинаются с символов Ох. В Tcl поддерживается представление чисел с плавающей точкой. Сведения о приоритете операций приведены в конце данной главы. В математических выражениях могут присутствовать ссылки на переменные и вложенные команды. В примере, приведенном в листинге 1.5, посредством команды expr выполняется сложение значения переменной х с числом, равным длине строки "f oobar". В результате подстановки команде expr передается 6 + 7 и при выполнении команды set переменной len присваивается значение 13. Листинг 1.5. Вложенные команды set x 7 set len + $x] => 13 Средства обработки выражений поддерживают ряд встроенных функций, применяемых при проведении математических вычислений. (Перечень таких функций приведен в конце данной главы.) В примере, показанном в листинге 1.6, вычисляется число pi. Листинг 1.6. Использование встроенных математических функций set pi => 3.1415926535897931 Глава 1. Общие сведения о языке Tcl 61 При реализации функции expr были приняты меры для обеспечения корректности значений и предотвращения нежелательных преобразований числовых значений в строковые. Разработчики программ, со своей стороны, могут повысить эффективность выполнения операции expr, применяя фигурные скобки для группировки выражений. Это связано с особенностями работы компилятора, преобразующего исходный текст в байтовый код. Более подробно данный вопрос будет рассмотрен далее в этой главе. Пример использования фигурных скобок для повышения быстродействия вычислений приведен в листинге 1.7. Все выражения, содержащиеся в этом листинге, составлены корректно. Листинг 1.7. Использование фигурных скобок для группировки выражений expr {7.2 / 4} set len + $x}] set pi Подстановка символов, представленных с помощью обратной косой черты Еще один тип подстановки, выполняемый интерпретатором Tcl, связан с использованием обратной косой черты. Таким способом в состав параметров можно включать символы, которые в обычных условиях имеют специальные значения. Предположим, например, что вы собираетесь использовать в составе параметра символ $ или какую-либо скобку. Перед таким символом надо указать обратную косую черту. Если для составления требуемого выражения вам надо использовать большое число символов обратной косой черты, следует помнить, что существует более простой способ, позволяющий получить тот же результат. В частности, команда list, которая будет описана в главе 5, автоматически отменяет специальные значения символов. В листинге 1.8 приведен пример использования обратной косой черты для получения литерального значения символа $. Листинг 1.8. Отмена специального значения символа с помощью обратной косой черты set dollar \$foo => $foo set x $dollar => $foo 62 Часть I. Основы Тс! Интерпретация выполняется в один проход. Вторая команда set в приведенном выше примере иллюстрирует важную особенность Tcl. Значение переменной dollar не испытывает на себе влияния операции подстановки. Другими словами, при подстановке разбор значений переменных не производится. В данном примере значением как переменной dollar, так и переменной х является строка "$f oo". Общее правило таково: при использовании eval нет необходимости заботиться о значениях переменных. Подробнее этот вопрос будет обсуждаться в главе 10. С помощью последовательностей знаков, начинающихся с обратной косой черты, можно записывать шестнадцатеричные, восьмеричные значения символов, а также представлять их в формате Unicode. set escape \u001b set escape \0xlb set escape \033 В каждом из этих выражений переменной escape присваивается символ ASCII ESC, код которого в десятичном представлении равен 27. Правила представления символов последовательностями, начинающимися с обратной косой черты, приведены в табл. 1.1. Часто символ обратной косой черты используется для записи длинной команды в нескольких строках. Как было сказано ранее, перевод строки завершает команду. В примере, представленном в листинге 1.9, обратная косая черта обязательно должна присутствовать, иначе последним символом в записи команды expr будет знак +. Листинг 1.9. Запись длинной команды в двух строках с использованием обратной косой черты set totalLength + \ ] Отменить специальное значение перевода строки можно двумя способами. Первый способ состоит в формировании параметра посредством группировки. В этом случае никаких действий для отмены специального значения перевода строки не требуется; соответствующий символ становится частью группы и не завершает команду. Второй способ - включить в конец строки обратную косую черту. В этом случае последний символ в строке преобразуется в пробел, а все пробелы в начале следующей строки удаляются. Другими словами, символ обратной косой черты не только позволяет продолжить команду в следующей строке, но и удаляет ненужные пробелы, включаемые в начало строки для форматирования. Глава 1. Общие сведения о языке Tcl 63 Группировка с помощью фигурных скобок и двойных кавычек Двойные кавычки и фигурные скобки используются для группировки нескольких слов в один параметр. Различие между ними состоит в том, что кавычки допускают подстановку в группе, а фигурные скобки запрещают ее. Это правило действует по отношению к командам, переменным и последовательностям, начинающимся с обратной косой черты. Листинг 1.10. Группировка с помощью двойных кавычек и фигурных скобок set s Hello => Hello puts stdout "The length of $s is ." => The length of Hello is 5. puts stdout {The length of $s is .} => The length of $s is . При выполнении второй команды, приведенной в данном примере, интерпретатор Tcl, обрабатывая второй параметр puts, выполняет подстановку как значения переменной, так и команды. В третьей команде подстановка запрещена, поэтому строка выводится в том виде, в котором она указана в записи параметра. На практике группировка с помощью фигурных скобок в основном выполняется тогда, когда подстановка параметра должна быть отложена на более позднее время либо вовсе не должна выполняться. В качестве примеров можно привести циклы, условные выражения и объявления процедур. Двойные кавычки чаще всего применяются в командах, подобных puts. Кавычки также часто используются в команде format. Эта команда выполняет те же функции, что и функция printf в языке С. Первый параметр команды format определяет формат вывода. В нем часто присутствуют специальные символы, например перевод строки, знаки табуляции и пробелы. Проще всего указать эти символы с помощью последовательностей, начинающихся с обратной косой черты (например, перевод строки можно представить как \п, а знак табуляции - как \t). Перед выполнением команды format последовательности, начинающиеся с обратной косой черты, должны быть преобразованы, поэтому для формирования параметра, определяющего формат, целесообразно использовать двойные кавычки. puts В данном случае команда format используется для выравнивания при выводе значений переменных name и value с помощью символа табуляции. 64 Часть I. Основы Tcl Выражения °/es и e/e5.3f задают формат вывода остальных параметров команды. Заметьте, что символ \п, обычно указываемый при вызове команды printf языка С, здесь отсутствует. Он не нужен, так как команда puts сама добавляет символ перевода строки. Подробно команда format будет описана в главе 4. Особенности использования квадратных скобок Квадратные скобки используются для подстановки команд и не выполняют группировку. Вместо этого вложенная команда, определяемая с помощью квадратных скобок, рассматривается как часть текущей группы. В приведенной ниже команде двойные кавычки формируют последний параметр, выполняя группировки, а результаты выполнения вложенной команды включаются в группу. puts stdout "The length of $s is ." Если в состав параметра входит только вложенная команда, вам нет необходимости группировать элементы с помощью двойных кавычек, поскольку средства разбора Tcl рассматривают вложенную команду как единое целое. puts stdout В приведенном ниже выражении кавычки излишни. puts stdout " " Группировка перед подстановкой Интерпретатор Tcl выполняет разбор команды за один проход. В течение единственного прохода он принимает решение о группировке и подстановке. Группировка осуществляется перед подстановкой. Эту особенность интерпретатора Tcl необходимо иметь в виду при написании программ. Значения, полученные в результате подстановки, не влияют на группировку, так как решение о группировке было принято ранее. Приведенный ниже пример демонстрирует влияние"вложенных команд на группировку. Вложенная команда рассматривается как неразрывная последовательность символов, причем внутренняя структура этих символов не учитывается. При формировании параметров основной команды результаты подстановки включаются в текущую группу символов. Листинг 1.11. Вложенная команда и подстановка переменных set х 7; set у 9 puts stdout $x+$y= => 7+9=16 Глава 1. Общие сведения о языке Tcl 65 В листинге 1.11 второй параметр команды puts имеет следующий вид: $х+$у= Пробелы в составе вложенной команды при группировке игнорируются. В тот момент, когда интерпретатор Tcl встречает левую квадратную скобку, подстановка некоторых переменных уже выполнена и сформирована следующая строка: 7+9= При появлении левой квадратной скобки осуществляется рекурсивный вызов интерпретатора для выполнения вложенной команды. Перед выполнением ехрr подстановка переменных $х и $у уже выполнена. Результат выполнения команды ехрr включается вместо всей последовательности символов, находящихся между левой и правой квадратной скобкой. Поэтому команда puts получает в качестве второго параметра следующее значение: 7+9=16 Группировка, выполняется перед подстановкой В рассмотренном выше примере при обработке второго параметра команды puts решение о группировке принимается перед решением о подстановке. Даже если результат выполнения вложенной команды содержит пробелы или другие специальные символы, аргумент будет передан команде без учета специальных значений. Группировка и подстановка переменных соотносятся между собой так же, как группировка и подстановка команд. Пробелы или другие специальные символы в составе значений переменных не оказывают влияние на решение о группировке, так как это решение принимается еще тогда, когда значения переменных недоступны. Если вы хотите, чтобы при выводе результатов выполнения команды символы + и = были отделены от чисел пробелами, вам надо явным образом сгруппировать параметр, используя двойные кавычки. При этом команда puts примет следующий вид: puts stdout "$х + $у = " В данном случае для группировки используются кавычки. Это важно, так как в составе группы должна быть разрешена подстановка значений переменных и команды. Группировка математических выражений с помощью фигурных скобок Команда expr выполняет некоторые действия по подстановке внутри фигурных скобок. Более подробно этот вопрос будет рассмотрен далее в этой 66 Часть I. Основы Tcl главе. Таким образом, оказывается, что в приведенной ниже команде выполняется подстановка значений переменных в выражении, помещенном в фигурные скобки. puts stdout "$x + $у = " Примеры подстановки Если в составе команды присутствует несколько подстановок, не разделенных пробелами или знаками табуляции, группировка выполняется по умолчанию. Использовать двойные кавычки в этом случае не обязательно. В приведенной ниже команде осуществляется конкатенация значений переменных а, b и с. set concat $a$b$c Если же вам необходимо разделить значения переменных пробелами, необходимо использовать кавычки. set concat "$а $b $с" В общем случае команды, помещенные в квадратные скобки, и ссылки на переменные можно указывать в любой позиции строки. В приведенном ниже примере имя команды определяется в результате выполнения другой команды. параметр параметр При работе с Тк имя компонента часто используется как имя команды. $text insert end "Hello, World!" Процедуры Для определения процедур в Tcl используется команда ргос. Единожды определенная Tcl-процедура может быть использована многократно, причем вызывается она точно так же, как и встроенная команда Tcl. Определение процедуры осуществляется с помощью следующего выражения: ргос имя список_параметров тело_процедуры Первый параметр - это имя определяемой процедуры. В качестве второго параметра команды задается список параметров процедуры. Третий параметр - тело процедуры, включающее одну или несколько Тс1-команд. В имени процедуры могут содержаться практически любые символы; регистр символов учитывается. В данной книге принято соглашение об именовании, согласно которому имена процедур начинаются с символа верхнего Глава 1. Общие сведения о языке Тс! 67 регистра, а имена переменных - с символа нижнего регистра. По мере развития Tcl все большее значение приобретает стиль программирования. Этому вопросу посвящена глава 12. Листинг 1.12. Определение процедуры proc Diag {а Ъ} { set с return $c } puts "The diagonal of a 3, 4 right triangle is " => The diagonal of a 3, 4 right triangle is 5.0 Процедура Diag, определенная в данном примере, вычисляет длину гипотенузы прямоугольного треугольника. В качестве параметров процедуре передаются длины катетов. Функция sqrt - одна из функций, поддерживаемых командой expr. Переменная с - это локальная переменная процедуры; она существует только при выполнении Diag. Области видимости переменных будут обсуждаться в главе 7. Переменная с в данном примере не обязательна; при необходимости можно было бы составить код процедуры, не используя переменных. В этом случае процедура выглядела бы следующим образом: proc Diag {a b} { return } Команда return возвращает результаты выполнения процедуры. В данном случае она не обязательна, так как интерпретатор Tcl по умолчанию возвращает значение пос!}


Acest articol este dedicat unei introduceri rapide în elementele de bază ale limbajului TCL, care a devenit pentru mine primul limbaj industrial studiat independent după aceeași schemă (sub formă de lecții pe site) pe care o vor folosi cititorii noștri. Înainte de a trece la lecția în sine, să ne dăm seama ce fel de limbă este aceasta.
Limba Tcl
Tcl (din limba engleză Tool Command Language - „tool command language”, citiți „tikl” sau „ti-si-el”) este un limbaj de scripting de nivel înalt.
Tcl este adesea folosit împreună cu biblioteca grafică Tk (Tool Kit). Pachetul Tcl/Tk în rusă este uneori numit „Tak-tikl” (versiunea în engleză este „tikl-tok”).
Domeniile de aplicare ale limbajului sunt prototiparea rapidă, crearea de interfețe grafice pentru programele consolă (pachete software), integrarea în programe de aplicație, testarea. Tcl este folosit și în dezvoltarea web.

Puțină istorie Limbajul a fost dezvoltat de John Ousterhout în timp ce lucra la Universitatea din California din Berkeley. Scopul inițial a fost de a crea un limbaj universal pentru încorporarea în aplicațiile console. După aceasta, Ousterhout și-a extins limbajul cu instrumente pentru crearea de interfețe grafice - așa a apărut Tcl/Tk.
De-a lungul celor 4 ani de dezvoltare în interiorul zidurilor universității, comunitatea Tikl a crescut la câteva sute de mii de programatori. În 1993, a fost dezvoltată prima extensie orientată pe obiecte, incr Tcl.
În 1994, Ousterhout a devenit inginerul principal al proiectului SunScript. În următorii 4 ani, devenind unul dintre proiectele Sun Corporation, Tikl nu numai că a rămas un sistem distribuit gratuit, dar s-a îmbunătățit semnificativ și a devenit multi-platformă.
Richard Stallman a dat o lovitură vizibilă popularității limbii când a publicat o recomandare într-un număr de grupuri de știri în septembrie 1994, „De ce nu ar trebui să folosești Tcl”. În el, el s-a bazat pe afirmațiile că „Tcl nu este conceput ca un limbaj de programare serios” și „Tcl are o sintaxă specială care este atractivă pentru hackeri datorită simplității sale. Dar sintaxa Tcl pare ciudată pentru majoritatea utilizatorilor.” și, de asemenea, în legătură cu promovarea Emacs, Lisp a emis un verdict: „Proiectul GNU nu va folosi Tcl în software-ul GNU”. Pe lângă plângerile subiective cu privire la designul limbajului, Stallman a subliniat un dezavantaj obiectiv la acel moment - performanța scăzută.
Cu toate acestea, creșterea numărului de dezvoltatori care utilizează în mod activ tikl în această perioadă s-a ridicat la 600%.
În 1998, din cauza boom-ului Java și a concurenței intense asociate acestuia, corporația nu a mai putut acorda aceeași atenție gâdilului. John Ousterhout părăsește Sun și creează (cu sprijinul lui Sun) Scriptics, continuând dezvoltarea tehnologiei Tcl/Tk. A fost una dintre primele firme comerciale de software ale cărei activități au fost construite în jurul software-ului liber.
Schema de culori a logo-ului adoptată în anii 90. secolul XX
În martie 1998, Ousterhout a scris articolul acum clasic „Scripting: High-Level Programming for the 21st Century”, în care a numit limbaje de scripting limbaje de integrare a sistemelor, deoarece acestea sunt concentrate în primul rând pe lucrul cu obiecte din mediul de operare, mai degrabă decât cu date elementare. Acest lucru vă permite să „lipiți” astfel de obiecte într-unul singur fără a scrie mii de linii de cod folosind două sau trei comenzi.
În același an, a câștigat două premii majore pentru dezvoltarea limbajului Tcl. Primul este ACM Software System Award, acordat pentru „cel mai important software”. Acest premiu a recunoscut anterior sisteme de bază precum stiva de protocol TCP/IP, prima foaie de calcul, prima bază de date relațională, World Wide Web, Unix, PostScript și Smalltalk. Al doilea este premiul anual USENIX Software Tools User Group (STUG), care recunoaște software-ul remarcabil.
În 1999, a fost lansat Tcl 8.0 - această implementare a introdus compilarea în bytecode pentru prima dată, ceea ce a făcut posibilă creșterea performanței de 6 ori. Următoarea modificare, Tcl 8.1, a introdus suport complet pentru Unicode și a introdus multithreading pentru prima dată. În ceea ce privește această versiune, Ousterhout a declarat: „În general, 8.1 mută Tcl într-o categorie nouă, deoarece poate fi folosit acum pentru aplicații de server. C, C++ și Java pot fi încă folosite pentru a crea părți critice pentru performanță ale aplicațiilor, iar Tcl poate fi folosit în continuare pentru integrare și crearea de componente front-end.”
În 2000, Scriptics a fost redenumită Ajuba Solutions și apoi achiziționată de Interwoven, care nu era interesată să lucreze cu software liber. Din acest motiv, dezvoltarea Tcl a fost predată comunității de programare. Așa s-a format Tcl Core Team.
La cea de-a 9-a conferință Tcl/Tk, desfășurată la Vancouver, a fost prezentat sistemul de fișiere virtual StarKit, oferind o modalitate nouă, ușor de utilizat, de a distribui programe Tcl.
(Acest material este preluat de pe Wikipedia favorită a tuturor: https://ru.wikipedia.org/wiki/Tcl)

Și acum puțin din părerea mea personală. Ca atare, limbajul Tcl este un limbaj de programare excelent, care are o mulțime de biblioteci (numărul său de „baterii” este unul dintre cele mai mari astăzi), a trecut testul timpului (adică nu mai are boli ale copilăriei, ca aceleași Du-te), și, de asemenea, este foarte ușor de învățat. Îl poți stăpâni în câteva zile! Și, în același timp, limbajul va fi util atât administratorului de sistem (scripturile sunt scrise foarte convenabil), cât și programatorului.

TCL: motive pentru popularitatea scăzută Pentru început, îi voi supăra pe cei care fac spumă la gură și țipă că „Tcl nu este necesar” sau „Tcl este mort”. Pentru a respinge acest din urmă, priviți data de lansare a celei mai recente versiuni a interpretului Tcl/Tk.
Despre primul lucru - AOL, BMW nu va folosi un limbaj inutil, CPU nu va acorda un ACM Software System Award pentru crearea sa. În prezent, dezvoltarea în Tcl/Tk se realizează în principal în profunzimea companiilor care scriu software în acest limbaj pentru uz intern. Prin urmare, vorbind despre impopularitatea lui Tcl/Tk, vorbim în primul rând despre impopularitatea acestuia în rândul dezvoltatorilor de aplicații pentru utilizatori desktop.
Următorul argument care este prezentat ca nepopularitatea lui Tcl/Tk este că aspectul standard al unui set de widget-uri nu este frumos, ca exemplu - este dat clientul tkabber jabber. Este demn de remarcat despre această afirmație - setul de widget-uri standard au valori implicite ale atributelor care corespund modelului cu barbă, al cărui aspect este într-adevăr puțin cronic.
Dar de ce să folosiți valori implicite? Un dezvoltator Tcl/Tk cu experiență este capabil să creeze o interfață care nu este deloc inferioară în aspect față de majoritatea aplicațiilor.
În plus, astăzi Tk acceptă „teme” și se poate adapta extern la aspectul mediului grafic al sistemului de operare, ceea ce face ca programele Tcl/Tk să nu se distingă de analogii lor pur extern.
Un dezavantaj semnificativ pentru multe echipe comerciale de dezvoltare de software este că programele în limbaj sunt încă distribuite sub formă de cod sursă, fără traducere prealabilă în bytecode, de exemplu. software-ul scris în Tcl/Tk este open source. Și majoritatea dezvoltatorilor de software comercial evită acest lucru.
Printre dezvoltatorii de software gratuit și open source, popularitatea Tcl a scăzut datorită FSF și Richard Stallman în special. În septembrie 1994, RMS a scufundat permanent ideile productive ale lui Tcl/Tk cu recomandarea sa „De ce nu ar trebui să folosești Tcl”, care s-a concentrat pe sintaxa presupus imposibil de complexă a lui Tcl (contând ca contraargument un limbaj cu sintaxă mult mai grea, dar cu o semantică clară, - Lisp) și despre „simplitatea Tcl care captivează hackerii”. Nereușind să înțeleagă ideile de bază ale lui Tickle despre „extensibilitate” și „extensibilitate”, RMS dă lovitura finală argumentând că Tcl este potrivit doar pentru aplicații mici și dând verdictul: „Prin urmare, Proiectul GNU nu intenționează să folosească Tcl în GNU. software." Acest lucru este deosebit de ciudat având în vedere faptul că Lisp și Tcl au trăsături și idei comune, în special aceeași extensibilitate. În ciuda tuturor eforturilor lui Stallman, Tcl nu s-a scufundat niciodată, iar Lisp nu a reușit să ocupe o poziție de lider în rândul limbilor pentru dezvoltarea aplicațiilor desktop.
După cum vede o minte curioasă, nu există un motiv obiectiv pentru a nu studia și folosi Tcl. Înainte de a trece la lecție, să trecem și prin cele mai frecvente întrebări despre această limbă.

FAQÎntrebarea (B): Ce este Tcl?
Răspuns (O): Tcl este un limbaj de scripting de nivel înalt. Este considerat unul dintre cele trei limbaje de scripting clasice. Înainte de apariția PHP, a fost folosit în locul celui din urmă. Este foarte strâns interconectat cu setul de instrumente Tk, care vă permite să scrieți programe destul de funcționale cu o GUI într-un timp scurt.
ÎN: De ce să înveți Tcl când poți folosi orice limbaj de scripting legat de Tk?
DESPRE: Poate sa. Dar este mai bine să utilizați orice set de instrumente în mediul său „nativ” (codul arată mai organic). Și programele în Tcl/Tk pur funcționează mai repede decât folosind poduri pentru Ruby/Tk, Perl/Tk etc., deoarece trage cu ele ambele medii de execuție. Portabilitatea programelor și scripturilor suferă și de acest lucru - pentru a rula fișierul, veți avea nevoie de mediul instalat nu numai al limbajului de scripting în care este scris programul, ci și Tcl/Tk (primul este necesar tocmai ca „punte". ”).
ÎN: Dar există Lisp!
DESPRE: Da el este. Și unii programatori compară Tcl cu el. Îi spun chiar „Tcl - Lisp On Drugs”. Limbile sunt într-adevăr similare - lucrul cu liste, metaprogramare. Dar există și diferențe serioase. De exemplu, în Tcl totul este un șir, nu un caracter.
ÎN: Pot scrie în Tcl funcțional?
DESPRE: Puteți. Tcl vă permite să scrieți într-un stil funcțional.
ÎN: Ce paradigme acceptă Tcl/Tk?
DESPRE: Imperativ, funcțional, orientat pe obiecte. Funcționalitatea a fost foarte bine susținută începând cu versiunea 8.6, iar recursiunea cozii a fost în sfârșit implementată corect. Acesta din urmă este suportat de mult timp, una dintre cele mai cunoscute extensii OOP, XOTcl, implementează programarea orientată pe obiecte în stilul Smalltalk... În ultimul timp, am ajuns la concluzia că Tcl este deja un limbaj cu implementare ( deşi parţial) a tuturor paradigmelor deodată.
ÎN: Unde sa încep?
DESPRE: Pentru a începe, puteți citi acest articol și urmați actualizările =)
ÎN: Care sunt implementările Tcl/Tk?
DESPRE: Ca atare, Tcl/Tk este unul, dezvoltarea sa astăzi este realizată de Tcl Core Team, dar există și extensii pentru acesta: implementare standard a Tcl, XOTcl: exotic (extensie pentru OOP), iTcl (First OOP extension, Inct Tcl, iWidgets este scris pe el), SNIT (adeziv obiect pentru Tcl, inclus în biblioteca standard Tcl), STOOOP (extensia OOP scrisă în Tcl, inclusă și în biblioteca standard astăzi)
ÎN: Ce sunt „adunările”?
DESPRE: Există coduri sursă oficiale pe care oricine le poate descărca de pe site-ul oficial și le poate asambla. Există și distribuții de la echipe terțe: ActiveState Tcl (proprietar, există o versiune plătită, pentru toate sistemele de operare majore), WinTcl (mai compact, axat pe lucrul cu XOTcl, conține Tloona și XOTcllde, după cum sugerează și numele - pentru Win ), TclKit (suficient de o distribuție compactă axată pe utilizarea iTcl, este asamblată într-un singur pachet și are un sistem de gestionare a conținutului propriu, cross-platform), dqkit ("TclKit pe steroizi, există mai multe opțiuni de asamblare, cross-platform). ), Tcl/Tk Aqua (distribuția este concepută exclusiv pentru MacOS Recent a apărut o implementare Tcl pentru .Net - Eagle.
ÎN: Ce IDE ar trebui să iau?
DESPRE: Vim, Emacs sunt excelente editori personalizabili care se extind într-un IDE cu drepturi depline. Dezavantajul celui din urmă este suportul slab de sintaxă pentru cele mai recente versiuni de Tcl. (g) Vim acceptă perfect sintaxa celor mai recente versiuni fără setări suplimentare. Pentru Windows - ActiveState Komodo. Tloona - IDE pentru Tcl/Tk scris în Tcl/Tk.<Требуется подробное описание>. XOTcllde - IDE ca ClassBrowser pentru Smalltalk. Concentrat pe lucrul cu XOTcl. Visual Tcl/Tk (vtcl) este un mediu de dezvoltare puternic similar cu Delphi sau QtCreator, cu capacitatea de a edita cod.
ÎN: Ce literatură poți citi?
DESPRE: Există destul de multe tutoriale în limba engleză pe Tcl/Tk. Rusul a găsit doar unul (a subliniat el). Din cărți vă pot recomanda „Practical Programming in Tcl and Tk, 4th Edition” (B.B. Welsh, K. Jones, D. Hobbs), în limba engleză - „Tcl and Tk Programming for the Absolute Beginner” (Kurt Wall) .

Instalarea Tcl Pentru a începe programarea în Tcl, trebuie să aveți instalată o mașină virtuală care va procesa codul pe care îl scrieți. Să vedem cum se instalează:
0) Pentru Calculate Linux/Gentoo: emerge dev-lang/tcl, emerge dev-lang/tk, emerge dev-tcltk/tcllib
1) Pentru Fedora: yum install tcl tk
2) Pentru Ubuntu: sudo apt-get install tcl tk
3) Pentru Windows și MacOS: cel mai simplu mod este să utilizați distribuțiile binare. Descărcați oricare și instalați-l în două clicuri.
4) Construirea Tcl/Tk din surse. Descărcați sursele (situate separat pentru Tcl și separat pentru Tk) de pe site-ul oficial și rulați următoarele comenzi pentru fiecare arhivă: 4.1 Dezambalarea fișierelor sursă: $ tar zxf file_name.tar.gz
4.2 Accesați folderul cu comanda: $ cd file_name && cd unix
4.3. Executați: $ ./configure --prefix=/opt --enable-gcc
(pentru Tk: $ ./configure —with-tcl=../../tcl8.5a5/unix —prefix=/opt —enable-gcc)
4.4 Apoi: $ make
4.5. Apoi: $ make test
4.6. Și în sfârșit: $ make install
Pentru a porni mediul interactiv, tastați în terminal:
$tclsh
Ar trebui să apară simbolul %.

Primul program
Să scriem un program clasic „Cuvinte salutare” în Tcl. Introdu următorul cod:

pune "Bună, cuvinte!"
ca răspuns vei vedea:

Cuvinte salutare!
Felicitări! Ai scris primul tău program în Tcl. Simplu, nu-i așa? Să ne concentrăm pe comanda puts. Această comandă/funcție trimite text către orice dispozitiv standard de intrare/ieșire (în cazul nostru, un terminal). În mod implicit, după imprimarea textului, pune cursorul la începutul liniei următoare.

Observ că în această lecție sunt afișate mai multe cuvinte; în acest scop, ele sunt cuprinse între ghilimele duble ("..."). În exemplele simple din acest tutorial, ghilimele și bretele funcționează în același mod. Dar, de fapt, există o mare diferență între ele, dar despre asta vom vorbi puțin mai târziu.

Comanda puts este în esență o funcție, deoarece un anumit element al limbajului care nu numai că efectuează orice acțiune, dar ia și de la unul la un număr infinit de argumente (cel mai apropiat analog este funcțiile în matematică). Dacă șirul pe care îl imprimam pe ecran nu era cuprins între ghilimele sau acolade, interpretul Tcl ar trata fiecare cuvânt ca un argument separat și l-ar transmite separat comenzii puts. Funcția puts va presupune că există mai multe argumente și va returna un fold în majoritatea cazurilor.

În esență, linia de comandă Tcl este doar o listă de cuvinte. Se prelucrează după următorul principiu:
1. Primul cuvânt este comanda (funcția) în sine care trebuie executată.
2. Toate următoarele cuvinte sunt argumente sau parametri ai funcției.
Rețineți că, spre deosebire de majoritatea limbilor, în Tcl linia de comandă se termină la sfârșitul liniei, adică. un caracter de linie nouă sau un punct și virgulă (;). Dar ultima metodă nu este foarte bună, va reduce înțelegerea codului dvs.

Ce este simpol novostroki? Acesta este un caracter invizibil pe care computerul îl înlocuiește în codul sursă al programului atunci când apăsați tasta Enter. În limbi precum Pure C este notat cu „\n”.

Deoarece programele pot fi destul de lungi, este o formă bună și o practică utilă să lăsați comentarii în codul sursă (un fel de explicație a ceea ce face cutare sau cutare bucată de cod din programul dvs.).

Puppy este o distribuție mică, dar oferă o selecție largă de limbaje de programare. În mod implicit, Live-CD nu instalează nimic pentru compilarea programelor C sau C++, cu toate acestea, există un fișier suplimentar devx_xxx.sfs (unde xxx este numărul versiunii Puppy, de exemplu 210) care transformă Puppy într-un mediu de compilare complet C/ .C++ (de asemenea, plus compilatorul FreeBASIC). Chiar și fără fișierul devx_xxx.sfs, Live-CD-ul conține multe limbi, inclusiv procesarea scripturilor Ash/Bash, Tcl/Tk și PuppyBasic. Această pagină este dedicată unei imagini de ansamblu asupra capabilităților software Puppy...

Scripturi Ash/Bash

Un limbaj care este deja complet gata de utilizare în Puppy este scriptul coajă(scripting comandă-shell). Scriptul shell Unix/Linux a existat din timpuri imemoriale și va continua să existe atâta timp. Prin „shell shell” mă refer la interfața de utilizator pe care o utilizați când lucrați cu linia de comandă. Când rulați X (un shell de fereastră grafic), promptul de comandă este într-o fereastră de terminal; când părăsiți X, vă întoarceți la promptul de comandă.

Programul care rulează și interacționează cu tine se numește comandă-shell, care în Linux este de obicei shell-ul Bash. În Puppy ai de ales între două cochilii, Bash și Ash.

Rețineți că X într-o fereastră de terminal lansează Bash. Dacă ieșiți din X la linia de comandă, Ash va porni. Pentru a identifica în mod unic shell-ul cu care doriți să lucrați, ar trebui să puneți „#!/bin/bash” sau „#!/bin/sh” (sau „#!/bin/ash”) pe prima linie a scriptului.

Un script shell este un program real, doar că este stocat într-un fișier text și nu necesită compilare. Scripturile pot fi foarte complexe, iar Puppy are un număr mare de ele.

Această pagină nu este un tutorial despre dezvoltarea scripturilor Ash/Bash - există multe cărți pe acest subiect, precum și link-uri pe Internet. Puteți găsi câteva astfel de link-uri aici: „Ghid avansat de scriptare Bash”, „Programare Bash --- Introducere HOWTO”.

Tot ce ai nevoie pentru a scrie scripturi Ash/Bash este un editor de text, Puppy are două editoare de consolă, e2Și MP, și doi editori GUI, GeanyȘi Leafpad. Geany și MP sunt interesante pentru că pot evidenția sintaxa pentru scripturile Ash/Bash. (vezi și ML mai jos sub Tcl/Tk)

Distrează-te proiectând scenarii pentru Puppy!

Puppy are o mulțime de documente și instrumente pentru a vă ajuta să dezvoltați scripturi:

    gtk-shell- o alternativă GTK foarte flexibilă, simplă și mică la xmessage și Xdialog anterioare. Poate afișa/edita fișiere, poate afișa dialogul de selecție a fișierelor, poate accepta text personalizat, poate lucra cu butoanele de selecție. Fara documentatie. Pentru ajutor, tastați (în consolă) # gtk-shell -h .

    gtkdialog3- o altă alternativă pentru gtk-shell, xmessage și Xdialog. gtkdialog este o aplicație GTK2 care citește un fișier XML care descrie formatul de dialog și interacțiunea utilizatorului și poate fi folosită pentru a crea interfețe grafice (interfețe grafice de utilizator) incredibil de sofisticate. Acest program a fost introdus pentru prima dată în Puppy 0.9.7. Cred că gtkdialog este alegerea ramurii!

În prezent, există două versiuni de gtkdialog în Puppy, gtkdialog2 și gtkdialog3 - este de preferat să folosiți cea mai recentă versiune deoarece este probabil să fie singura rămasă în Puppy - cu alte cuvinte, rulați întotdeauna binarul gtkdialog3.

Iată câteva scripturi folosite în Puppy:

/usr/sbin/pmount /usr/sbin/timezone-set

Tcl/Tk

Tcl este un limbaj de scripting interpretat similar cu scripturile Ash descrise mai sus, iar un program Tcl poate fi folosit la fel de ușor ca un script shell. Totuși, locul în care Tcl iese cu adevărat în evidență este biblioteca Tk, care transformă Tcl într-un mediu software complet GUI (interfață grafică cu utilizatorul). Există multe biblioteci suplimentare pentru Tcl, Puppy are în prezent

    Tk(biblioteca standard care oferă toate widget-urile de bază),

    fig(Tcl/Tk funcționează numai cu fișiere gif, această bibliotecă adaugă lucru cu jpeg, png, etc.),

    Combobox(element complex cu listă derulantă),

    BWidget(unele controale mai complexe).

Toate acestea le veți găsi în directorul /usr/lib.

Multe aplicații în Puppy (și în pachetele PET) sunt scrise în Tcl/Tk, asta Slidedraw, TkZip, CDTAR, XS, snap, tkpppoe, phv, TkDVDȘi regexpviewer.

Deci de ce Tcl? De ce nu Perl sau Java? Pentru mine, personal, există trei motive: există un număr mare de aplicații GUI disponibile, Tcl/Tk are o dimensiune foarte mică și este o limbă foarte ușor de învățat. Ultimul motiv este extrem de important, deoarece datorită lui pot citi cu ușurință codul scris de alte persoane, ceea ce nu se poate spune despre limbaje bazate pe sintaxa C care au cod greu de înțeles (C++, Java).