ioProgrammo N°18, Ottobre 1998 ©Copyright DIEMME Editori
INTRODUZIONE
A
Tcl/Tk
Dietro queste sigle dal suono metallico e misterioso, si celano due linguaggi di programmazione con caratteristiche davvero uniche nel vasto panorama di tools per lo scripting avanzato in ambiente Linux
Avrete sicuramente capito che stiamo introducendo lo studio di due software, entrambi usati per la scrittura di quei simpatici programmini che fanno la gioia di ogni linuxiano convinto: gli scripts.
Poche righe di codice ben assestate, magari alla faccia di rigide regole stilistiche, che nel lavoro di ogni giorno ci levano d'impaccio e risolvono problemi talvolta di difficile soluzione se affrontati con altri linguaggi.
Non hanno nulla da spartire con i primitivi batch di Dos/Windows, con i quali è improponibile il più azzardato dei confronti. Stiamo parlando di veri e propri programmi strutturati, veloci ed affidabili.
Chi ci segue sin dai primi numeri, avrà sicuramente apprezzato la facilità con cui si programmava mamma shell con gli scripts bash. Poi siamo passati al Perl, i cui pregi sono emersi soprattutto nella programmazione di Internet. Ora che siamo così bravi, grazie all'accoppiata tcl/tk, possiamo rallegrare i nostri lavori con colori, finestre, pulsanti ed icone, così tanti da riempire interi desktop.
Già, proprio così. D'altra parte Linux non è solo una fredda schermata nera, con un bel dollarone in mostra preceduto dal nome del nostro fido PC. Linux è anche un ambiente grafico a 32 bit puri su cui si può cliccare e trascinare, trascinare e ricliccare all'infinito.
Mi riferisco a X-Window (senza!!! la s finale), lo standard per i motori grafici dei sistemi operativi Unix e Unix-like.
X-WINDOW
Sono passati ormai più di dieci anni da quando nei laboratori del MIT, uno dei templi della scienza informatica americana, furono scritte le prime righe di codice dell' X-Window System.
Nel 1987 è divenuto uno standard ufficiale grazie al contributo di ben 11 produttori di software e hardware di importanza mondiale, che riuniti in un consorzio internazionale crearono l'X11R1. Oggi l' X-Consortium ha reso disponibile la versione R6.4 del protocollo X11 (X11R6.4), il cuore dell'ambiente grafico delle workstation Unix.
Se avete fatto attenzione vi sarete accorti che è stata usata la parola protocollo. Vediamo perché.
Un tipico ambiente di lavoro, costituito da macchine Linux o Unix sulle quali sono in esecuzione applicazioni grafiche, si basa su un server molto potente in CPU, RAM e disco, e usa serie di terminali con monitor di buona qualità collegati al server tramite TCP/IP.
Bene direte. Si tratta ti una tipica configurazione client/server su LAN. In realtà la similitudine riguarda solo l'architettura di rete ma non il suo funzionamento.
Mentre in una rete classica i programmi contenuti nel server remoto vengono eseguiti nella CPU delle singole postazioni di lavoro, in X-Window le cose si invertono, nel senso che è il server remoto ad eseguire i programmi, mentre i terminali hanno solo il compito di visualizzarne l'output su video. La comunicazione avviene, oltre che via TCP/IP, soprattutto con il protocollo X, il quale definisce le regole con cui i dati devono essere trasferiti dal server X ai client X.
A rigor di logica è chiaro che client e server possono risiedere nello stesso PC, senza richiedere necessariamente un collegamento di rete. In questo caso si assiste ad una comunicazione tra processi che avviene in un blocco di memoria protetto e gestito dal sistema operativo.
Tutto chiaro? Spero di sì.
STARTX
Se avete appena eseguito una installazione completa di Linux, il vostro sistema ha tutti i componenti necessari per lavorare in ambiente grafico. Si tratta solo di configurare il software compatibilmente con la vostra scheda video ed il vostro monitor.
Uno spassionato consiglio vi suggerisce di usare il programma xf86config, presente nella directory /usr/X11R6/bin, per configurare il server X. Non lasciatevi tentare dai nuovi tool di configurazione che lavorano in modalità grafica provvisoria. Basta un parametro sbagliato per inchiodare il pc e danneggiare il file system. Xf86config lavora in modalità testo. Durante la sua esecuzione vi verranno poste delle domande circa l'hardware della vostra macchina (mouse, scheda video, monitor) alle quali si riesce sempre dare una risposta sempre che si abbia un minimo di conoscenza del proprio pc.
Terminata la configurazione verrà generato il file XF86Config contenente tutti i parametri per la corretta esecuzione di X-Window. A questo punto basta immettere il comando startx.
Se tutto funziona bene si potrebbe tentare di personalizzare l'aspetto dell'ambiente grafico. E' necessario agire sui file di configurazione del window-manager. Vi ricordo che nelle distribuzioni più diffuse di Linux, come la Slackware e la RedHat, vengono sempre inclusi due window-manager che gestiscono il look&feel dei componenti grafici dell'ambiente.
Uno di questi è il classico FVWM, mentre il secondo, ispirato a Windows95, è l'FVWM95.
Supponendo di aver scelto il primo dei due gestori di finestre, è conveniente copiare nella propria home directory i file /var/X11R6/lib/fvwm/system.fvwmrc e /var/X11R6/lib/xinit/xinitrc.fvwm avendo l'accortezza di cambiarne i nomi in ~/.fvwmrc e ~/.xinitrc. Ogni utente del sistema che intenda lavorare in X-Window dovrebbe avere la possibilità di editare tali file al fine di configurare l'ambiente grafico come meglio crede.
Il file .xinitrc, per esempio, è il primo ad essere eseguito dopo il comando startx, e si occupa del caricamento del window-manager. Viene usato anche per assegnare un colore o un motivo allo sfondo del desktop, oppure per eseguire le applicazioni che vorremmo avere attive fin dalla partenza di X. Ecco un tipico file .xinitrc
#!/bin/sh
# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f $userresources ]; then
xrdb -merge $userresources
fi
if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi
# start some nice programs
xsetroot -solid SteelBlue
fvwm
L'altro file, molto più complesso, è .fvwmrc, il quale si occupa della definizione dell'aspetto e del comportamento delle finestre delle applicazioni grafiche.
Editando questo file possiamo cambiare il colore delle cornici delle finetre, modificarne lo spessore dei bordi, aggiungere nuove voci di menu e variare il tipo di risposta della finestra in relazione agli eventi del mouse.
Infine, per chi non si accontenta, su Internet si trovano moltissimi altri window-manager alcuni dei quali molto belli e sofisticati. I più conosciuti sono AfterStep e KDE: provateli e ne rimarrete entusiasti.
TCL/TK
Visto che l'ambiente su cui lavoreremo è stato presentato, introduciamo ora i linguaggi che useremo per programmarlo.
Iniziamo da tcl (Tool Command Language), ideato da John Ousterhout nel 1989, oggi ingegnere della Sun.
Si tratta di un linguaggio di script, scritto interamente in C, la cui sintassi ricorda molto il Perl. La caratteristica principale di tcl consiste nella sua capacità di integrarsi in qualsiasi programma C, a tal punto che quest'ultimo può usare l'interprete tcl per eseguire uno script.
A differenza del Perl , tcl è dotato di una propria shell attivabile lanciando il comando tclsh.
Il prompt di Linux diventa un segno di percentuale % e il sistema attende che siano impartiti comandi validi, permettendo una sorta di programmazione interattiva abbastanza limitata.
Infatti il modo più comune per programmare in tcl consiste nello scrivere il codice con un editor, salvare e rendere eseguibile il file appena creato.
Qualche anno più tardi, precisamente nel 1991, Ousterhout affiancò a tcl un toolkit grafico chiamato tk.
La shell di tk (wish), conosciuta con il nome di windowing-shell ed utilizzabile solo in ambiente X, consente l'uso combinato delle istruzuioni tcl e tk. I comandi di tk permettono in sostanza la creazione e la gestione di componenti grafici, definiti strumenti, usati per offrire una interfaccia utente grafica agli script tcl.
La versione più stabile di tcl/tk è la 7.6/4.2, anche se oggi è già diffusa la 8.0. Tutto il codice sorgente dei due linguaggi è liberamente scaricabile da Internet mentre i binari sono sempre inclusi nelle varie distribuzioni di Linux, confermando la totale gratuità di tcl/tk.
QUANTA FATICA IN MENO
Il pregio principale di tcl/tk è la facilità con cui si scrivono programmi per X-Window. Prima di tk si era praticamente obbligati ad usare il C, Xlib e qualche toolkit commerciale come Motif o XView.
Sul C penso non ci sia molto da dire. Bene o male tutti ne hanno sentito parlare.
Xlib invece è una libreria di funzioni scritte guarda caso in C, usata dai programmi X per comunicare con il server grafico.

Con tk il modo di lavorare cambia notevolmente. Non si è più costretti a conoscere l'uso delle funzioni di Xlib, talvolta abbastanza complicate, ma basta solo usare semplici comandi di script. Vi assicuro che programmare così risulta anche divertente, un esempio?
#!/usr/bin/wish
label .msg -text "Clicca per uscire"
button .bye -text "CIAO" -command {exit}
pack .msg .bye
Con sole tre righe di codice abbiamo già creato una vera e propria applicazione grafica dotata di finestra, label e pulsante. Se avessimo usato il C e Xlib di righe ne sarebbero servite una ventina, senza contare gli astrusi parametri di compilazione.
Ma questo è solo un assaggio...
TEORIA E TECNICA
Breve storia di Tcl/Tk
John Ousterhout ideò tcl/tk fin dai tempi dell'università. Successivamente, entrato nel team di sviluppatori della Sun, lo perfezionò a tal punto da renderlo uno dei linguaggi di scripting più conosciuti nel mondo Unix.
La prima versione risale al 1989. Quelle di maggior successo e di più ampia diffusione sono invece le seguenti:
Tcl7.4/tk4.0 (Luglio 1995)
Tcl7.5/tk4.1 (Agosto 1996)
Tcl7.6p2/tk4.2p2 (Gennaio 1997)
Tcl8.0p2/tk8.0p2 (Novembre 1997)
La versione più stabile è la 7.6/4.2p2, la stessa che useremo nei nostri esempi. Nonostante i notevoli miglioramenti apportati a questa release, il codice scritto mantiene un' altissima compatibilità con i tcl/tk precedenti.
Oggi Sun raccomanda l'uso di tcl/tk8.0p2. Si tratta di una versione che ha subito numerose modifiche e ritenuta sufficientemente stabile
La novità principale riguarda un nuovo motore per la produzione di un byte-code più veloce. In termini pratici questo significa un aumento considerevole della velocità di esecuzione del programma finale. Un salto di prestazioni che si fa particolarmente sentire soprattutto nelle routine di manipolazione delle liste.
E' stata implementata una nuova funzione per la generazione di numeri casuali, fino ad ora assente, e viene anche inclusa una libreria per il supporto dello standard CGI usando i metodi GET e POST del protocollo HTTP.
Il porting sulle altre piattaforme, come Macintosh e Windows95/NT, è stato ulteriormente migliorato a tutto vantaggio di chi vorrà scrivere applicazioni grafiche.
Per finire vi comunico che è in dirittura d'arrivo un progetto molto interessante che ha visto tcl principale protagonista di un applicativo cross-platform verso Java e che sicuramente aprirà nuove strade a questo nuovissimo linguaggio.
TEORIA E TECNICA
Linux + X-Window = XFree86
In Linux, in fede allo spirito freeware del progetto GNU, X-Window e tutto ciò che ci ruota attorno, viene chiamato XFree86. Nell'uso comune di questo termine in generale si indica l'intero ambiente grafico di Linux, costituito nelle sua parti vitali da un server X e da un Window-Manager.
In realtà XFree86 è il nome di un progetto no-profit alimentato da validissimi programmatori che nonostante la provenienza da vari paesi, riescono a coordinare la loro attività attraverso Internet per un unico obiettivo comune: garantire a Linux un' interfaccia utente grafica (GUI) veloce, potente, costantemente aggiornata e compatibile con i chip grafici di nuova generazione.
In effetti lo sforzo maggiore che questi coder quotidianamente devono sostenere, consiste nello scrivere "driver" per le numerose schede grafiche attualmente in commercio.
Il compito non è dei più facili, visto il fermento del mercato degli acceleratori video e la velocità con cui vengono costruiti nuovi display. Il problema principale, infatti, è garantire la più ampia compatibilità di Linux con le moderne schede video e pare che questo obiettivo sia stato ormai conseguito.
Oggi, presso il sito ufficiale di XFree86 (www.XFree86.org), è disponibile la versione 3.3.2 dei server X. Sono supportate quasi tutte le più moderne schede S3 (VX/DX/GX/MX), le Matrox, il cui supporto fino a poco tempo era garantito solo da alcuni software commerciali e i velocissimi processori Nvidia e Riva 128. In questi giorni, inoltre, si sta lavorando per supportare anche l'AGP.
Possiamo sicuramente affermare, quindi, che l'ambiente X-Window di Linux ha ormai raggiunto un ottimo livello di stabilità. Alcuni test infine hanno dimostrato come XFree86 sia addirittura più veloce di molti server X di marche prestigiose (Sun, HP e IBM). Proprio un bel lavoro.
Ah, quasi dimenticavo. E' chiaro che se qualcuno avesse un vecchio PC, con una Cirrus o una Tseng un po' datata, può dormire sonni tranquilli, sicuro che l'indomani potrà installare il suo bravo Linux... con grafica ovvio!
TEORIA E TECNICA
Le schede supportate da XFree86 3.3.2
Ecco la lista dei server X (file .tgz) compatibili con le schede video più diffuse.
X3318514.tgz IBM 8514/A server
X331AGX.tgz IIT AGX server
X331I128.tgz Number Nine I128 server
X331Ma32.tgz ATI Mach 32 server
X331Ma64.tgz ATI Mach 64 server
X331Ma8.tgz ATI Mach 8 server
X331Mono.tgz Server monocromatico
X331P9K.tgz Weitek P9000 server
X331S3.tgz S3 server
X331S3V.tgz S3 ViRGE server
X331SVGA.tgz SVGA server
X331VG16.tgz 16 colori VGA server
X331W32.tgz Tseng ET4000/W32, ET6000 server
GLOSSARIO
AGP
Accelerated Graphics Port, una porta di comunicazione ad elevate prestazioni, adottata nelle moderne schede madri per consentire un trasferimento più veloce dei dati tra scheda video e RAM e CPU.
MIT
Massachusetts Institute of Technology.
Motif
Un toolkit prodotto dalla Open Software Foundation che consente la creazione di componenti grafici per l'ambiente X-Window.
TCP/IP
Transmission Control Protocol/Internet Protocol, il protocollo di comunicazione usato in Internet.
X
Abbreviazione di X-Window System.
X-Server
Un programma che, comunicando direttamente con la scheda video, gestisce la visualizzazione dell'output sotto forma di immagini grafiche (bitmap). Tanto per fissare le idee, anche se il paragone è un po' forzato, possiamo dire che un server X sta a Linux come un driver per una scheda video sta a Windows95/NT.
X-Client
Un' applicazione che funziona in ambiente grafico e che comunica direttamente con il server X affinché possa essere visualizzata sul video. Netscape per Linux, per esempio, è un tipico client X.
X-Terminal
In sostanza è un PC con in esecuzione un server X, poco dotato in termini di disco fisso e processore (in realtà un tipico X terminal no ha nemmeno l'hardisk) ma equipaggiato invece da un ottimo video (17-20 pollici). I terminali X, infatti, vengono usati solo per visualizzare le applicazioni grafiche, residenti e funzionanti su un server remoto.
XView
Toolkit grafico della Sun Microsystems.
Window-Manager
Un programma che definisce l'aspetto e lo stile (look & feel) delle varie componenti dell'ambiente grafico (finestre, pulsanti, icone) nonché il loro comportamento in relazione agli eventi generati dalla tastiera e dal mouse.
Data creazione HTML: Marzo 1999
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you