The Linux Tcl and Tk HOWTO Luca Rossetti [1]lukaros@tin.it v0.2, 07 Novembre 1998 __________________________________________________________________ Questo documento descrive l'approccio di Linux a Tcl, un linguaggio di script. È un linguaggio interpretato facile da imparare, che usa un approccio non tipizzato per ottenere un più alto livello di programmazione ed un più rapido sviluppo di applicazioni. Il toolkit Tk è un ambiente di programmazione per creare interfacce grafiche per gli utenti (GUI) in sistemi X Window. Le sue proprietà includono la possibilità di estendere ed integrarsi in altre applicazioni, sviluppo rapido e facilità di utilizzo. Insieme, Tcl e Tk forniscono molti benefici sia agli sviluppatori di applicazioni che agli utenti. Interfacce basate su Tk tendono ad essere molto più adattabili e dinamiche di quelle create con toolkit basati su C o su C++. Tk implementa l'aspetto e le funzioni di Motif. Un gran numero di applicazioni per X sono state realizzate interamente in Tk, senza scrivere alcun nuovo comando specifico dell'applicazione. Traduzione a cura di Ivan Bazzi. Revisione di Elisabetta Galli. Per versioni aggiornate di questo documento, e per trovare altra documentazione in italiano sul software libero, visitare il sito dell' [2]ILDP __________________________________________________________________ 1. Introduzione Questo è l'HOWTO per Tcl e Tk per Linux. Va inteso come riferimento per Linux, per coprire tutto quello che si dovrebbe sapere sull'installazione, configurazione e come introduzione allo sviluppo in Tcl e Tk. Vengono analizzate la storia ed alcuni pro e contro riguardanti Tcl e Tk in Linux e vengono anche indicati riferimenti a molte altre fonti d'informazione su vari argomenti relativi a questo semplice ma potente linguaggio di script. Se si è mai ricompilato un proprio kernel Linux all'interno di X usando il comando __________________________________________________________________ make xconfig __________________________________________________________________ sicuramente si è avuto modo di confrontarsi con la forza di questo semplice ma potente linguaggio per script. Dopo aver eseguito il primo passo nella ricompilazione del kernel, viene eseguito uno script chiamato kconfig.tk tramite wish (l'interprete Tcl). Appare la finestra di configurazione del kernel di Linux. Invece di rispondere ad una serie di domande, questo strumento di configurazione basato su X permette di usare caselle di spunta per selezionare quali opzioni del kernel abilitare. Il sistema memorizza le ultime opzioni di configurazione, cosicché ogni volta che viene lanciato bisognerà solo aggiungere o rimuovere qualche spunta senza bisogno di reinserire tutto l'insieme di opzioni. Inoltre si può riempire tutto (o in parte) l'elenco delle opzioni del kernel nell'ordine che si desidera. Dopo questo passo semplificato si può ricompilare il kernel nel modo tradizionale. In realtà c'è un altro caso famoso. Si è mai usato "printtool"? (Printer Config Tool (C) Copyright 1994 di [3]Red Hat Software - autore: Michael Callahan). Dopo aver installato una distribuzione Red Hat sarà capitato di usarlo per predisporre i servizi di stampa. Bene, l'interfaccia di printtool è principalmente uno script Tcl/Tk. Per chi non conoscesse Red Hat, mi si lasci dire come si possa facilmente configurare le stampanti semplicemente riempiendo qualche campo di testo e qualche casella di spunta. Il programma in sé si prende cura di predisporre i servizi di stampa attraverso la creazione della directory di spool, scrive il file /etc/printcap e il filtro della stampante, riavvia lpd e prova il filtro con pagine ascii o postscript. Consente di manipolare le opzioni ghostscript (cioé scegliere sino a 8 pagine per pagina in uscita e impostare i margini), ha una guida in linea e molte altre possibilità. Qual'è la differenza rispetto ad altre implementazioni di servizi di stampa? Tutto si ottiene utilizzando Tcl/Tk come una "colla" tra applicazioni consolidate, operando su normali file di configurazione di Linux in una finestra visuale e interattiva sotto X-Window. Non è stato scritto alcun nuovo comando specifico dell'applicazione. 1.1 Scopo di questo documento Attualmente il documento si limita a dare un riferimento iniziale all'utente Linux; nelle versioni future si cercherà di incorporare un piccolo "Tutorial di programmazione". Mi si lasci ripetere che questo documento non è (e non vuole sostituire) un "manuale utente" o un "riferimento" omnicomprensivo per lo sviluppo e la programmazione in Tcl e Tk: è solo un punto di partenza per gli utenti Linux. Il concetto dell'autore di manuale di riferimento coincide con la definizione di pagine di manuale, e molte persone imparano Tcl/Tk da queste basilari fonti d'informazione. Questi file fanno parte della distribuzione del codice sorgente, e sono installati nella propria macchina Linux. Si sarà in grado di accedere alle pagine di manuale di Tcl/Tk tramite il comando man. Sono stati scritti molti tutorial di programmazione completi e strutturati allo scopo di permettere ai nuovi utenti di maneggiare Tcl/Tk; tonnellate di altro materiale é disponibile in Internet. Interpretando la filosofia di Tcl/Tk non cercheró di reinventare la ruota: mi organizzeró per mettere insieme la grande quantitá di materiale già disponibile. Si suggerisce di guardare gli altri documenti elencati nella [4]sezione Riferimenti per trovare dove recuperare informazioni specifiche su Tcl e Tk. 1.2 Cosa bisogna sapere prima di leggere Per capire l'abc di Tcl/Tk non é necessario essere un guru della programmazione, la sintassi dei comandi é molto semplice. Fondamentalmente é necessario avere familiarità con: * semplici concetti di programmazione; * l'uso di comandi o strumenti unix molto comuni; * avere accesso ad Internet; * l'uso di ftp. 1.3 Nuove versioni di questo documento Le nuove versioni di questo documento verrano caricate sul sito ftp: [5]ftp://sunsite.unc.edu/ pub/Linux/HOWTO/ e saranno disponibili su tutti gli altri mirror. L'ipertesto e altre versioni di questo e di altri HOWTO di Linux sono disponibili principalmente presso [6]sunsite.unc.edu/LDP/lpd.ht ml, [7]www.linux-howto.com e presso molti altri siti mirror nel World-Wide-Web. Cercherò di incorporare nella [8]mia pagina Web la versione html e sgml più recente del documento. La maggior parte delle distribuzioni Linux in CD-ROM include gli HOWTO, spesso nella sottodirectory /usr/doc/, e si possono acquistare versioni stampate da parecchi venditori. Qualche volta gli HOWTO disponibili presso i venditori di CD-ROM, siti ftp, ed in formato cartaceo sono superati. Se la data scritta su questi HOWTO è più vecchia di sei mesi, allora probabilmente è disponibile una nuova copia in Internet. Se qualcuno facesse una traduzione di questo documento in un'altra lingua mi scriva un messaggio, includerò qui un riferimento. 1.4 Storia delle revisioni * Versione 0.1: 28 ottobre 1998 - prima versione; * Versione 0.2: 07 novembre 1998 - profonda revisione di stile e abbellimento. 1.5 Feedback e altre cose Conto su di te, lettore, per rendere utile questo HOWTO. Se hai un qualsiasi suggerimento, correzione o commento, ti prego di mandarlo a ( [9]Luca Rossetti ), e io cercherò di aggiungerlo nella prossima revisione. Se uno dei collegamenti menzionati in questo documento non fosse più disponibile o dovesse cambiare, per favore notificatemelo immediatamente cosicché possa aggiornarlo o rimuoverlo. Sono disposto a rispondere a domande generali a proposito di Tcl/Tk e Linux meglio che posso. Prima di farlo però, leggete tutte le informazioni contenute in questo HOWTO, e mandatemi informazioni dettagliate sul problema. Se pubblicate questo documento in un CD-ROM o in forma stampata, sarebbe veramente apprezzata una copia omaggio. Scrivetemi una e-mail e vi risponderò spedendovi il mio indirizzo postale. In molte sezioni ho menzionato società editrici o URL commerciali: io non lavoro per loro. 1.6 Ringraziamenti La maggior parte delle informazioni di questo HOWTO provengono da [10]Scriptics del Dr. Ousterhout e dalle FAQ di Larry W. Virden su [11]comp.lang.tcl FAQ . Vorrei ringraziare il gruppo di utenti linux italiano [12]PLUTO e tutti i volontari dell' [13]ILDP (Italian Linux Documentation Project), specialmente Eugenia Franzoni e Giovanni Bortolozzo, per i loro commenti. 1.7 Politica di distribuzione Questo documento è sottoposto a Copyright 1998 da [14]Luca Rossetti. Questo documento viene distribuito nella speranza che sia utile per il lettore: naturalmente è considerato senza alcuna garanzia, senza neanche l'implicita garanzia di commerciabilità o idoneità per uno scopo particolare. Questo HOWTO è un documento libero; lo si può ridistribuire o modificare sotto i termini del [15]COPYRIGHT LDP . Si legga il [16]Manifesto LDP per maggiori dettagli. 2. Storia di Tcl/Tk Tcl/Tk sono stati creati dal [17]dr. John Ousterhout (pronunciato "O'-ster-haut") mentre insegnava all'Università della California, Berkeley, California. Egli iniziò a implementarli quando tornò a Berkeley nella primavera del 1988; per l'estate di quell'anno veniva utilizzato in alcune applicazioni interne, ma senza Tk. Si può leggere la storia di Tcl/Tk direttamente dalle parole del suo autore su [18]www.scripti cs.com/scripting/tclHistory.html. 2.1 Cronologia * 1989: i primi rilasci esterni di Tcl e l'inizio dell'implementazione di Tk; * 1991: il primo rilascio di Tk; * 1994: il dr. Ousterhout viene assunto da Sun Microsystems, Inc. come Distinguished Engineer e conduce il progetto Tcl. * aprile/maggio 1997: le attività del gruppo di ricerca di Sun per lo sviluppo di Tcl vengono deviate al business group di Sun chiamato SunScript. Comunque, poco dopo, le cose cambiano ancora. Si possono leggere maggiori informazioni su questa evoluzione selezionando "SunScript_story" all'URL: [19]Su nScript-Story . * Agosto 1997: viene formato un Consorzio Tcl. * Febbraio 1998: il dr. Ousterhout lascia Sun per creare [20]Scriptics, una società dedicata a strumenti per script, applicazioni e servizi. Secondo [21]www.scriptics.com /about/news/qa.html il nucleo di Tcl e Tk rimane libero, con il team di Sun che continua a lavorare su Tcl/Tk 8.1. Dopo il prossimo rilascio, l'intenzione è quella di spostare il lavoro sul nucleo da Sun a Scriptics, mentre il team di Sun si concentrerà più sulle estensioni e applicazioni Tcl. * 23 aprile 1998: l'Association for Computing Machinery [22]ACM premia John Ousterhout e Scriptics con il Software System Award 1997 ( [23]www.acm.org/awards/). Questo premio viene assegnato a istituzioni o individui conosciuti per aver sviluppato sistemi software che abbiano avuto un'influenza duratura, riconoscibile in contributi a concetti, nell'accettazione conmerciale, o in entrambi. 3. Che cosa è Tcl/Tk 3.1 Che cosa è Tcl? Tcl è l'acronimo per "Tool Command Language" (si pronuncia come la parola inglese "tickle"). In realtà Tcl è diviso in due parti: un linguaggio e una libreria. Tcl è un semplice linguaggio di programmazione testuale destinato a impartire comandi a programmi interattivi come editor di testi, debugger e shell. Ha una sintassi semplice ed è anche programmabile. Gli utenti di Tcl possono scrivere procedure per fornire comandi più potenti rispetto a quelli incorporati. Secondo, Tcl è un pacchetto di libreria integrabile nelle applicazioni che consiste di un analizzatore del linguaggio Tcl, di routine per l'implementazione dei comandi incorporati in Tcl e di procedure che consentono ad ogni applicazione di estendere Tcl con ulteriori comandi specifici per quella applicazione. Il programma dell'applicazione genera comandi Tcl e li passa all'analizzatore di Tcl per l'esecuzione. I comandi possono essere generati leggendo caratteri da una sorgente in ingresso o associando stringhe di comandi ad elementi dell'interfaccia utente dell'appplicazione, come elementi di menu, bottoni, ed altri controlli. Quando la libreria Tcl riceve i comandi, li analizza suddividendoli in campi componenti ed esegue direttamente i comandi incorporati. Nel caso di comandi implementati dall'applicazione, richiama l'applicazione per eseguirli. In molti casi i comandi eseguiranno invocazioni ricorsive dell'interprete Tcl passando ulteriori stringhe da eseguire (in effetti procedure e comandi per cicli condizionali lavorano tutti in questa maniera). Un'applicazione può ottenere molti vantaggi utilizzando Tcl come proprio linguaggio di controllo: * Tcl fornisce una sintassi standard: una volta che gli utenti conoscano Tcl, saranno in grado facilmente di lanciare comandi ad una qualsiasi applicazione basata sul Tcl. * Tcl riesce a fornire programmabilità. Tutto quello che deve fare un'applicazione Tcl è implementare alcuni comandi di basso livello specifici dell'applicazione. Tcl fornisce molti comandi di base ed un'interfaccia di programmazione generale per costruire procedure di comandi complesse. Utilizzando Tcl, le applicazioni non hanno bisogno d'implementare di nuovo queste funzioni. * Estensioni di Tcl, come il Tk toolkit, forniscono meccanismi per la comunicazione tra applicazioni inviando comandi Tcl avanti e indietro. La struttura costituita dal linguaggio comune Tcl rende più semplice la comunicazione tra le applicazioni. È importante notare che Tcl è stato progettato pensando che il programmatore dovrebbe effettivamente usare due o più linguaggi nel progettare grandi sistemi software: uno per manipolare complesse strutture dati interne, o quando le prestazioni sono importanti; un altro, come Tcl, per scrivere script molto piccoli che uniscano gli altri pezzi, fornendo agganci all'utente che consentano di estendere l'applicazione. Per l'autore di script Tcl, la facilità di apprendimento, la facilità di programmazione e la facilità di unire le cose sono più importanti delle prestazioni o delle facilitazioni per strutture dati o algoritmi complessi. Tcl è stato progettato per rendere semplice il passaggio ad un linguaggio di programmazione a più basso livello, quando si incontrano compiti che a quel livello hanno più senso. In questo modo le funzionalità di base del nucleo possono rimanere piccole, permettendo di utilizzare solo quei pezzi particolarmente desiderati o di cui si ha necessità. Si può trovare una risposta alla domanda "Che cosa è Tcl?" su [24]www.NeoSoft.com/tcl /whatistcl.html . 3.2 Cosa è Tk? Tk (pronunciato come si pronuciano t e k in inglese: "ti-chei") è una estensione di Tcl che fornisce al programmatore un'interfaccia al sistema di finestre X11. Si noti che il Tk è stato compilato con successo sotto X11 R4, X11 R5 e X11 R6, oltre che gli ambienti di Sun NeWS/X11. Molti utenti incontreranno Tcl/Tk per via del comando "wish", che è una semplice shell a finestre che permette di scrivere appliazioni Tcl/Tk in un ambiente di prototipazione. Al momento Tcl/Tk non può gestire caratteri giapponesi, cinesi, coreani... 3.3 Estensioni Visto che Tcl è così semplice da estendere, molti cercano di condividere le estensioni, incluse le popolari itcl, [25][incr Tcl], ObjectTcl, TclX, [26]Tix e [27]BLT. Ovviamente queste estensioni richiedono un interprete Tcl esteso. Inoltre molte applicazioni Tcl libere richiedono una particolare estensione di Tcl per funzionare. Una delle più popolari estensioni è [28]Expect. Permette di inserire un front-end amichevole all'interno della maggior parte delle applicazioni UNIX basate su comandi da riga di comando, come ftp, telnet, rlogin, passwd, fsck e così via. Si può trovare una lista completa di estensioni di Tcl/Tk all'URL [29]www.scr iptics.com/resource/software/extensions/. 3.4 Piattaforme supportate Questa sezione contiene informazioni su Tcl 8.0 e Tk 8.0, la versione più recente di Tcl/Tk. Sono state rilasciate il 18 agosto 1997 ed il rilascio più recente della patch (8.0.3) è stato fatto il 3 settembre 1998. Quando si scaricano Tcl e Tk si ottengono due programmi, wish e tclsh, che supportano librerie di script, e documentazione di riferimento in linea. Questi programmi sono piattaforme generiche per scrivere applicazioni con Tcl. Wish include Tk, il toolkit per l'interfaccia grafica per l'utente. I pacchetti sono pronti all'uso dopo l'installazione. Tcl 8.0 e Tk 8.0 funzionano sulla maggior parte dei rilasci dei seguenti sistemi operativi: * Windows 95 * Windows NT * Solaris e SunOS * Linux * HP-UX * SGI * IRIX * Digital Unix * AIX * SCO Unix * la maggior parte degli altri sistemi operativi per Macintosh simili a Unix (68K e Power Mac) * rilasci precompilati sono disponibili per varie distribuzioni Linux. 4. Installazione e inizi con Tcl e Tk La maggior parte delle distribuzioni moderne includono Tcl e Tk. Pacchetti rpm e deb con binari precompilati sono disponibili con le distribuzioni Red Hat, SuSE e Debian (rendendo l'installazione più facile). L'installazione di una distribuzione moderna includerà Tcl/Tk, visto che è necessario per molti strumenti di configurazione operanti principalmente sotto X. Tcl e Tk sono distribuiti liberamente sotto forma di sorgenti via Internet. Non ci sono restrizioni al loro utilizzo e non è necessaria nessuna licenza o royalty (vedere la sezione [30]license.terms per informazioni complete). Sono disponibili liberamente molti altri script ed estensioni Tcl/Tk. 4.1 Scaricare le distribuzioni del nucleo Il nucleo Tcl/Tk consiste delle librerie Tcl e Tk, più le applicazioni wish e tclsh, la documentazione associata, le librerie di script e le applicazioni dimostrative. Il sito FTP primario per queste informazioni è [31]ftp.scriptics.com/pub/tcl/. Il sito HTTP primario è [32]www.scriptics. com/software/download.html . 4.2 Installazione A meno che siano già disponibili i pacchetti proprietari per la distribuzione in uso, si vorrà scaricare il rilascio dei sorgenti. Saranno necessari i sorgenti sia di Tcl che di Tk. Questa procedura si riferisce al secondo caso. Si scelga tra i formati tar compresso o tar compresso con gzip. File tar compressi Sorgenti Tcl (tcl8.0.3.tar.Z): file tar compressi (circa 2.4 Mbytes). Sorgenti Tk (tk8.0.3.tar.Z): file tar compressi (circa 3.3 Mbytes). File tar compressi con gzip Sorgenti Tcl (tcl8.0.3.tar.gz): file tar compressi con gzip (circa 1.5 Mbytes). Sorgenti Tk (tk8.0.3.tar.gz): file tar compressi con gzip (circa 2.1 Mbytes). Quando si recupera uno di questi file si ottiene un file tar compresso con un nome tipo tcl8.0.3.tar.gz o tcl8.0.3.tar.Z. I file sono identici ad eccezione della tecnica di compressione utilizzata per comprimerli (i file .gz sono in genere più piccoli dei file .Z). A seconda della versione del rilascio recuperato, per estrarre la distribuzione invocare i comandi di shell come segue: __________________________________________________________________ gunzip -c tcl8.0.3.tar.gz __________________________________________________________________ o __________________________________________________________________ tar xf - zcat tcl8.0.3.tar.Z __________________________________________________________________ o __________________________________________________________________ tar xf - unzip tcl80.3.zip __________________________________________________________________ Ognuno di questi comandi creerà una directory chiamata tcl8.0.3, che include i sorgenti per tutte le piattaforme, la documentazione e la libreria di script per Tcl 8.0. Per compilare e installare la distribuzione seguire le istruzioni contenute nel file README nella directory di distribuzione. Ci si assicuri di compilare Tcl prima di Tk, dato che Tk dipende da informazioni contenute in Tcl. 4.3 L'archivio dei contributi Ci sono molti altri pacchetti disponibili liberamente per Tcl e Tk, inclusi sia script scritti in Tcl che estensioni scritte in C o C++. Questi pacchetti includono applicazioni per basi di dati e accessi a reti, un costruttore di interfaccia grafica per l'utente, il progamma expect, controlli Tk addizionali e dozzine di altre cose . Il sito primario per l'archivio Tcl/Tk è [33]ftp.neosoft.com/pub/tcl. 4.4 Siti mirror Molti altri siti in giro ospitano una copia di tutto o di una parte del materiale del sito principale e dell'archivio dei contributi; si possono trovare informazioni più utili da recuperare da siti mirror vicini alla propria posizione. Scaricare via ftp il file "0_mirror" all'indirizzo: [34]ftp.scriptics.com/pub/tcl/ per una lista dei siti mirror del paese di appartenenza. 4.5 Quali rilasci usare Si faccia sempre riferimento alla versione più recente raccomandata nella sezione "Nucleo Tcl/Tk" della [35]pagina centrale per il software di Scriptics. Al momento della scrittura di questo documento, i rilasci raccomandati sono gli ultimi (Tcl 8.0.3 e Tk 8.0.3) risalenti al settembre del 1998. Tcl 8.0 contiene un nuovo compilatore di bytecode che può accelerare l'esecuzione di un fattore 2-10x. Fornisce anche spazio di nomi, I/O binario e molte altre nuove funzionalità. Tk 8.0 è il primo rilascio a fornire l'aspetto e le funzioni native su Macintosh e PC. Tk 8.0 supporta anche l'integrazione di applicazioni, e ha un nuovo meccanismo di tipi di caratteri portabile. Sia Tcl 8.0 che Tk 8.0 forniscono caratteristiche addizionali all'interno del modello di sicurezza Safe-Tcl. 4.6 Dove comunicare problemi, bug o miglioramenti Si usi [36]comp.lang.tcl per comunicazioni pubbliche. L'alternativa sarebbe spedire problemi, suggerimenti, nuove idee ecc. direttamente all'autore. Inviare un'email a [37]John Ousterhout raggiungerà l'autore di Tcl e Tk. Nel riportare problemi o bug ci si assicuri di menzionare tutti i dettagli necessari per una corretta diagnosi. Fondamentalmente si deve descrivere quale hardware, sistema operativo e versione di Tcl/Tk si sta usando, se si è fatta qualche modifica o aggiunta e fornire, se possibile, un piccolo pezzo di codice o un URL contenente un po' di codice che dimostri il problema. Se si ha del software da cui la comunità potrebbe trarre beneficio (che sia un programma, una funzione, un'estensione o un semplice esempio), o se si ha un documento, articolo di rivista o giornale, tesi, progetto, o anche una pubblicità commerciale, ci si assicuri che le persone appropriate lo sappiano. Ci sono curatori di FAQ per ognuna di queste aree, oltre ad un newsgroup [38]comp.lang.tcl.announce che può essere usato. Vale sempre la pena inviare i propri contributi direttamente al sito ftp, così in futuro più persone potranno beneficiare della propria esperienza. Per fare annunci nel newsgroup [39]comp.lang.tcl.announce , spedire una email con i dettagli a [40]tcl-announce. Ci si senta anche liberi di fare riferimento al proprio sito ftp o WWW se disponibile. 5. Un po' di programmazione Dato che Tcl è un linguaggio interpretato, per eseguire un programma Tcl (chiamato anche script) normalmente si passa il file di script all'interprete Tcl, wish, per esempio: __________________________________________________________________ wish hello.tcl __________________________________________________________________ Si può usare wish anche in modalità interattiva e inserire comandi dalla riga di comando. C'è un'altro interprete Tcl standard, tclsh, che comprende solo il linguaggio Tcl. Tclsh non ha nessuno dei comandi per l'interfaccia per l'utente di Tk, dunque non si possono creare programmi grafici con tclsh. Alcune applicazioni Tcl libere estendono il linguaggio Tcl aggiungendo nuovi comandi scritti come funzioni C. Se è questo il caso, è necessario compilare l'applicazione invece di limitarsi a passare il suo codice Tcl all'interprete wish. Questa applicazione, dalla prospettiva di Tcl, è effettivamente una nuova versione dell'interprete wish, a cui i nuovi comandi C vanno collegati. Naturalmente, l'applicazione potrebbe essere molto più complicata di un mero interprete Tcl (Nota: si può usare anche la capacità di autocaricamento di Tcl su sistemi che lo supportano). 5.1 Il programma in un minuto in Tcl Tcl ha una struttura semplice. Ogni linea comincia con un comando, come un bottone, ed una serie di argomenti. Ogni comando è implementato come se fosse una funzione C, che è responsabile della gestione di tutti gli argomenti. Come esempio molto standard, quanto segue è il programma Hello World in Tcl/Tk: __________________________________________________________________ # Questo è un commento button .b -text "Hello World" -command exit pack .b __________________________________________________________________ In questo caso bisogna scrivere i comandi interattivamente in tclsh o wish. I comandi possono anche essere inseriti in file di script da invocare come script di shell. Per farlo nell'esempio precedente, si riscriva il programma Hello World come segue: __________________________________________________________________ #! /usr/local/bin wish -f button .b -text "Hello World" -command exit pack .b __________________________________________________________________ Si inserisca il testo all'interno di un file chiamato Hello e ci si assicuri che wish sia installato in /usr/local/bin (altrimenti sarà necessario cambiare opportunamente il percorso). Si renda il file Hello eseguibile lanciando il comando __________________________________________________________________ chmod 775 Hello __________________________________________________________________ e lo si esegua in X. Si vedrà un bottone etichettato Hello World all'interno di una finestra: cliccandolo la finestra verrà chiusa. 6. Linguaggio per script: pro e contro Per capire l'importanza ed il futuro di Tcl/Tk suggerisco fortemente di puntare il proprio browser web all'URL [41]www.scriptics .com/people/john.ousterhout/ di [42]John K. Ousterhout . Vi si leggerà l'importanza e il paragone tra scrivere script (in linguaggi come Tcl) e programmazione di sistema (in languaggi come C e Java). Per leggere un documento di natura comparativa vedere [43]la discussione comparativa. Qui c'è un sommario dei più importanti pro e contro su Tcl/Tk. 6.1 Alcuni delle più comuni lamentele nei confronti di Tcl Tcl è interpretato I dati sono principalmente trattati come stringhe, i programmi scritti in Tcl sono lenti. Tcl 8.x cerca di affrontare il problema facendo un certo grado di compilazioni oltre a consentire ulteriori tipi di variabili. Molte caratteristiche non sono intuitive I commenti sono comandi piuttosto che commenti tradizionali, i numeri che cominciano con 0 sono ottali, uso appropriato dei meccanismi di citazione, ecc. Questi aspetti sono coperti nelle varie FAQ. 6.2 Alcuni dei pro di Tcl È un linguaggio per script di alto livello Si deve scrivere molto meno codice per compiere lo stesso lavoro, specialmente se paragonato ad applicazioni Motif o Win32. In generale, il numero delle Linee di Codice (Line of Code: LOC) di un progetto software è uno dei più importanti indici di complessità. Tcl è libero Si possono ottenere i sorgenti liberamente da Internet dalla pagina di scaricamento di Scriptics o dal sito FTP per Tcl. [44]Il sito del nucleo del software include la versione del codice sorgente, oltre alle versioni binarie per piattaforme Windows e Macintosh; oppure si può ottenere Tcl su un certo numero di CD-ROM per un costo nominale. Si legga liberamente a proposito del nucleo di Tcl e Tk da [45]www.scriptics.com/about/n ews/qa.html . Funziona su molte piattaforme Esistono versioni per UNIX (Linux... naturalmente), Windows e Macintosh. Ad eccezione di poche differenze per piattaforma, gli script Tcl funzioneranno nello stesso modo su tutti i sistemi. È interpretato Si può eseguire il codice direttamente senza compilarlo e farne il link (anche se sono disponibili compilatori Tcl). È estensibile È facile aggiungere propri comandi per estendere il linguaggio Tcl. Si possono scrivere comandi in C o Tcl. È integrabile nella propria applicazione L'interprete Tcl è semplicemente un insieme di funzioni C che possono essere chiamate dal proprio codice. Questo significa che si può usare Tcl come un linguaggio d'applicazione, in maniera molto simile ad un linguaggio macro per un'applicazione di foglio elettronico. Tcl/Tk è conforme all'anno 2000 (Y2K) Si legga cosa dice a proposito di questo argomento l'inventore del nucleo di Tcl e Tk [46]www.scriptics.com/Y2K.html . 7. I programmi più famosi che impiegano Tcl/Tk A parte le due applicazioni descritte nell' [47]introduzione, ci sono molte applicazioni scritte in Tcl/Tk o una combinazione di Tcl e C. Una lista completa in cui cercare queste implementazioni è la [48]parte 4 della frequently-asked questions su Tcl/Tk (FAQ). Suggerisco di visitare [49]Scriptics' Softwar e Central. Un altro buon punto di partenza è [50]www.NeoSoft.com/tcl/. Una delle migliori applicazioni Tcl funzionanti sotto Linux è chiamata [51]TkDesk, un manager di finestre e programma per il lancio delle applicazioni che lavora molto bene. Sviluppatori di Tcl/Tk su Linux si sentano liberi di [52]scrivermi uno URL (e una descrizione del lavoro) che possa qui inserire. 8. Riferimenti Per molte ragioni alle persone piace spesso avere un manuale stampato come riferimento o un aiuto da altri in linea. Qui si può trovare una selezione di libri di riferimento, tutorial, siti web e newsgroup. 8.1 Libri Sono stati scritti e pubblicati molti libri riguardanti Tcl/Tk. Non cercherò neppure di elencarli tutti (un altro howto non sarebbe sufficiente : ) ). Si possono trovare più informazioni e ulteriori note all'indirizzo: * [53]www.tcltk.com/consortium/resources/books.html * [54]www.amazon.com/exec/obidos/subst/categories/computer-programmin g/tcl-tk-article/002-8989352-4516417 * La pagina: tcl_books.html allo URL [55]starbase-neosoft-tcl-books Qui cercherò di fare un sommario con qualche nota dei libri che conosco riguardanti l'argomento, sono tutti ad un livello base-intermedio. Inoltre, chi conosce l'argomento ha sufficienti informazioni su dove trovare libri di livello avanzato. Tcl e toolkit Tk Autore: [56]John K. Ousterhout Informazioni sul web a proposito del libro: [57]cseng.aw.com/bookdetail.qry?ISBN=0%2D201%2D63337%2DX&ptype=0 Esempi del libro: [58]ftp.script ics.com/pub/tcl/doc/book.examples.Z Supplementi del libro: [59]www.scriptics.com/doc/tk 4.0.ps Il ibro copre principalmente Tcl 7.3 e Tk 3.6. Practical Programming in Tcl and Tk, II ed. Autore: [60]Brent Welch Informazioni sul web a proposito del libro: [61]www.beedub.com/book/ Indice del libro: [62]www.beedub.com/book/ Informazioni di promozione del libro alla pagina section_50000.html dello URL [63]www.borders.com/sections/ Questa edizione aggiornata descrive Tcl / Tk 8.0 com'era durante il periodo di rilascio della versione beta. Insieme al materiale dalla prima edizione, copre anche socket, pacchetti, spazio di nomi, una grande sezione che descrive i cambiamenti in Tcl 7.4, 7.5, 7.6 e 8.0 (ed anche Tk), Safe Tk ed il Plugin. Manuali di riferimento per Tcl e Tk Curatore: Donald Barnes, [64]Marc Ewing, Erik Troan Informazioni sul web a proposito del libro: [65]www.lsl.com/catalog/bo oks/tcltk/ The Visual TCL Handbook, 1/e Autore: [66]David Young Informazioni sul web a proposito del libro: [67]www.amazon.com/exec/obidos/ISBN=013461674X/u/7141-5908756-107481 Una guida completa per Visual TCL. Questo libro conduce il lettore dai concetti base per lo sviluppo di interfacce grafiche per l'utente a significativi sviluppi di applicazioni. Il libro si concentra sulle estensioni TCLX e VT, affrontando parecchi argomenti fondamentali di TCL. VT è un'interfaccia grafica per l'utente basata su Motif, incompatibile con Tk. L'intero linguaggio TCL è documentato in una sezione Comandi separata. È venduto con un CD-ROM che include versioni di Visual Tcl per SGI, Solaris, HP-UX, AIX e Unixware. Running LINUX Autori: Matt Welsh e Lar Kaufman Informazioni sul web a proposito del libro: [68]www.ora.com/ca talog/runux2/noframes.html Running Linux è un libro base scritto veramente bene. Contiene un capitolo sulla programmazione usando Tcl/Tk. (e Perl, C, C++). Tcl/Tk for Dummies (For Dummies) Autore: Timothy Webster con Alex Francis Informazioni sul web a proposito del libro: [69]www.dummies.com/ Un altro libro della serie dei tascabili dedicati alla programmazione. Questo si concentra sul plugin di Tcl come ambiente di programmazione. Interactive Web Applications With Tcl/Tk Autori: Michael Doyle Hattie Schroeder Informazioni sul web a proposito del libro: [70]www.eolas.com/tcl/ Questo è un libro d'insegnamento tramite esempi, per persone che conoscono già qualcosa della programmazione, senza esserne esperti. Copre lo sviluppo di applet e di applicazioni indipendenti e semplici applicazioni per server. Il libro fornisce il toolkit Spynergy, che aggiunge una varietà di procedure in puro Tcl/Tk per l'elaborazione distribuita, il recupero di URL, la rappresentazione HTML, la gestione di basi di dati e di file in modo indipendente dalla piattaforma, Ed (un editor Tcl e un ambiente di prova), uno strumento di conversione d'immagini, un demo sulle caratteristiche di Tk, una versione client/server di un'applicazione rolodex, un server web in puro Tcl, un'applicazione client/server di tecnologia push, un web browser in tcl, 8.2 Manuali e tutorial in linea * John Ousterhout ha scritto una guida in stile ingegneristico che descrive la scrittura del codice, la documentazione, e le convenzioni di test che sono state usate in Sun durante la scrittura del codice C del nucleo di Tcl, e l'ha resa disponibile agli altri sviluppatori Tcl e Tk. Si trova all'indirizzo [71]ftp.script ics.com/pub/tcl/doc/engManual.tar.Z * Una seconda guida di stile che copre la scrittura di script in Tcl può essere trovata all'indirizzo [72]ftp.scr iptics.com/pub/tcl/docs/styleGuide.tar.gz. Altre versioni possono essere trovate all'indirizzo [73]sunscript.su n.com/techcorner/styleGuide.ps. * [74]A brief introduction to TCL/TK di [75]David Martland * Un altro tutorial intitolato [76]User interfaces with Tcl/T k è stato scritto da [77]Fintan Culwin . * Anche se si dovrebbero avere le pagine di manuale di Tcl/Tk nel sistema in uso, ecco un altro luogo dove cercare [78]TCL Manual Pa ges (from TCL7.4)-Tk Manual Pages (from TK4.0). * [79]The Tcl/Tk Cookbook offre molte informazioni per cominciare. 8.3 Siti World Wide Web C'è un gran numero di risorse WWW che forniscono ulteriori informazioni a proposito di molti aspetti di Tcl e delle sue estensioni. * Si faccia riferimento a [80]Tcl-FAQs (pa rt2) per un gran numero di riferimenti alla documentazione di Tcl/Tk e a siti web. * Si punti il proprio browser verso [81]Tcl/Tk Information: un sito con molti collegamenti a risorse TclTk sul web (Information, Extensions, Tools, Training ed Events). * Si punti il proprio browser verso [82]The Official Contributed Sources A rchive per il Tool Command Language (Tcl) e per il toolkit Tk, ospitato da NeoSoft, Inc. * Per la discussione riguardante i pro ed i contro dei maggiori linguaggi per script: [83]articolo in SunWorld di [84]Cameron Laird . * Si tratta di una pagina web che contiene una varietà di paragoni tra Tcl/Tk ed altri sistemi simili. Molti di loro sono presi da "comp.lang.tcl", l'autore sarebbe felice di aggiungere qualsiasi altro articolo importante che gli si voglia spedire: [85]Comparison di [86]Wayne Christopher. * [87]E.J. Friedman-Hill's Tcl/Tk Course: questo documento è disponibile solo in formato PowerPoint e in un formato HTML di bassa qualità (nel formato HTML mancano tutte le figure e qualche testo). 8.4 Altri documenti & Frequently Asked Questions Molto materiale è disponibile in Internet: saggi introduttivi, white paper, tutorial, slide, versioni postscript di libri pubblicati in bozze e molto di più. Per un riferimento completo vedere l'eccellente [88]Tcl-FAQs . 8.5 Newsgroup [89]comp.lang.tcl è un newsgroup di Usenet non moderato, creato per la discussione del linguaggio di programmazione Tcl e di strumenti che usano qualche forma di Tcl, come il toolkit Tk per il sistema di finestre X, Tcl esteso ed expect. Per annunci relativi a Tcl/Tk si faccia sempre riferimento a [90]comp.lang.tcl.announce: si troveranno annunci di rilascio, patch, nuove applicazioni e così via. Ancora, le faq possono essere recuperate da [91]Tcl-FAQs. 9. Termini della licenza di Tcl/Tk I termini seguenti si applicano a tutte le versioni dei rilasci del nucleo di Tcl/Tk, al plug-in del browser per Tcl/Tk versione 2.0, e TclBlend e Jacl versione 1.0. Si noti che gli strumenti TclPro sono sotto un'altro accordo di licenza. Questo accordo fa parte della distribuzione standard di Tcl/Tk come file chiamato "license.terms". TERMINI DI LICENZA TCL/TK This software is copyrighted by the Regents of the University of California, Sun Microsystems, Inc., Scriptics Corporation, and other parties. The following terms apply to all files associated with the software unless explicitly disclaimed in individual files. The authors hereby grant permission to use, copy, modify, distribute, and license this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated on the first page of each file where they apply. IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. GOVERNMENT USE: If you are acquiring this software on behalf of the U.S. government, the Government shall have only "Restricted Rights" in the software and related documentation as defined in the Federal Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you are acquiring the software on behalf of the Department of Defense, the software shall be classified as "Commercial Computer Software" and the Government shall have only "Restricted Rights" as defined in Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the authors grant the U.S. Government and others acting in its behalf permissi on to use and distribute the software in accordance with the terms specified in this license. References 1. mailto:lukaros@tin.it 2. http://it.ildp.org/ 3. http://www.redhat.com/ 4. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/TclTk-HOWTO.html#references 5. ftp://sunsite.unc.edu/Linux/docs/HOWTO/ 6. http://sunsite.unc.edu/LDP/lpd.html 7. http://www.linux-howto.com/ 8. http://space.tin.it/computer/tlqhr/ 9. mailto:lukaros@tin.it 10. http://www.scriptics.com/ 11. http://www.tclfaq.wservice.com/tcl-faq/ 12. http://www.pluto.linux.it/ 13. http://www.pluto.linux.it/ildp/ 14. mailto:lukaros@tin.it 15. http://sunsite.unc.edu/LDP/LDP-COPYRIGHT.html 16. http://sunsite.unc.edu/LDP/LDP-Manifesto.html 17. mailto:ouster@scriptics.com 18. http://www.scriptics.com/scripting/tclHistory.html 19. http://starbase.neosoft.com/%7Eclaird/comp.lang.tcl/ 20. http://www.scriptics.com/ 21. http://www.scriptics.com/about/news/qa.html 22. http://www.acm.org/ 23. http://www.acm.org/awards/ 24. http://www.NeoSoft.com/tcl/whatistcl.html 25. http://www.tcltk.com/itcl/ 26. http://tix.mne.com/ 27. http://www.tcltk.com/blt/ 28. http://expect.nist.gov/ 29. http://www.scriptics.com/resource/software/extensions/ 30. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/TclTk-HOWTO.html#license 31. ftp://ftp.scriptics.com/pub/tcl/ 32. http://www.scriptics.com/software/download.html 33. ftp://ftp.neosoft.com/pub/tcl 34. ftp://ftp.scriptics.com/pub/tcl/ 35. http://www.scriptics.com/software/download.html 36. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/news.comp.lang.tcl 37. mailto:Ouster@scriptics.com 38. news:news.comp.lang.tcl.announce 39. news:news.comp.lang.tcl.announce 40. mailto:tcl-announce@mitchell.org 41. http://www.scriptics.com/people/john.ousterhout/ 42. mailto:ouster@scriptics.com 43. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/TclTk-HOWTO.html#prosandcons 44. http://www.scriptics.com/software/download.html 45. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/www.scriptics.com/about/news/qa.html 46. http://www.scriptics.com/Y2K.html 47. file://localhost/home/giulio/HOWTO/TclTk-HOWTO/TclTk-HOWTO.html#introduction 48. http://www.tclfaq.wservice.com/tcl-faq/part4.html 49. http://www.scriptics.com/resource/software/ 50. http://www.NeoSoft.com/tcl/ 51. http://people.mainz.netsurf.de/~bolik/tkdesk/ 52. mailto:lukaros@tin.it 53. http://www.tcltk.com/consortium/resources/books.html 54. http://www.amazon.com/exec/obidos/subst/categories/computer-programming/tcl-tk-article/002-8989352-4516417 55. http://starbase.neosoft.com/%7Eclaird/comp.lang.tcl/ 56. mailto:ouster@scriptics.com 57. http://cseng.aw.com/bookdetail.qry?ISBN=0%2D201%2D63337%2DX&ptype=0 58. ftp://ftp.scriptics.com/pub/tcl/doc/book.examples.Z 59. http://www.scriptics.com/doc/tk4.0.ps 60. mailto:welch@acm.org 61. http://www.beedub.com/book/ 62. http://www.beedub.com/book/ 63. http://www.borders.com/sections/ 64. mailto:marc@redhat.com 65. http://www.lsl.com/catalog/books/tcltk/ 66. mailto:david@inforef.com 67. http://www.amazon.com/exec/obidos/ISBN=013461674X/u/7141-5908756-1074%2081 68. http://www.ora.com/catalog/runux2/noframes.html 69. http://www.dummies.com/ 70. http://www.eolas.com/tcl/ 71. ftp://ftp.scriptics.com/pub/tcl/doc/engManual.tar.Z 72. ftp://ftp.scriptics.com/pub/tcl/docs/styleGuide.tar.gz 73. http://sunscript.sun.com/techcorner/styleGuide.ps 74. http://http2.brunel.ac.uk:8080/~csstddm/TCL2/TCL2.html 75. mailto:csstddm@brunel.ac.uk 76. http://www.scism.sbu.ac.uk/tkteach/ 77. mailto:fintan@sbu.ac.uk 78. http://cuiwww.unige.ch/eao/www/TclTkMan/Man.html 79. http://www.cis.rl.ac.uk/proj/TclTk/ 80. http://www.tclfaq.wservice.com/tcl-faq/part2.html 81. http://www.tcltk.com/ 82. http://www.NeoSoft.com/tcl/ 83. http://www.sun.com/sunworldonline/swol-10-1997/swol-10-scripting.html 84. mailto:claird@Starbase.NeoSoft.com 85. http://icemcfd.com/tcl/comparison.html 86. mailto:wayne@icemcfd.com 87. http://herzberg.ca.sandia.gov/TclCourse/ 88. http://www.tclfaq.wservice.com/tcl-faq/ 89. news:comp.lang.tcl 90. news:comp.lang.tcl.announce 91. http://www.tclfaq.wservice.com/tcl-faq/