Una aproximació a Tcl

Fa molt de temps que es fan aplicacions amb interfases gràfiques a Linux. Un dels llenguatges veterans per a la construcció d’interfases gràfiques és el Tcl quan s’acompanya del toolkit gràfic Tk. El Tcl/Tk.

En propietat, el llenguatge és Tcl. Tk és un toolkit, una afegit, una extensió, que permet crear finestres, posar botons, camps de text, llistes… els widgets típics d’una aplicació de finestres fent servir el llenguatge Tcl o altres llenguates.

Entre aquests altres llenguatges que poden fer servir TK hi ha Python. Python proporciona el mòdul TkInter que permet construir interfases gràfiques fent servir widgets de forma similar a com es fa amb Tcl.

Tcl té algunes característiques que el fan molt interessant:
– és interpretat, per tant, fàcil de desenvolupar i distribuir. L’intèrpret de tcl és tclsh; A més, l’interpret per a desenvolupar aplicacions amb Tk: wish
– interacció amb les comandes de la shell: la comanda exec permet executar instruccions de la shell
– tipus de dades únic: cadena de text; estructures de dades de llistes i arrays associatius.
– estructures de control: if-else, foreach,
– procediments
– extensió senzilla del llenguatge amb C. Càrrega dinàmica de llibreries d’extensió amb la comanda load.
– la substitució de cadenes en temps d’execució és la clau per a l’utilització productiva de Tcl. Tenir clar quan utilitzar “”, {}, [], ()… i les diferents substitucions que es produeixen amb unes o altres és la clau de l’èxit.

A continuació, alguns exemples amb tcl. Els poso en un script de la forma habitual a Unix.

#!/usr/bin/tclsh

#analitza els arguments d’entrada i els mostra amb foreach
puts $argv
puts “Número d’arguments: $argc”
foreach arg $argv {
puts “Argument: $arg”
}

# fa càlculs aritmètics
set a 10
set b 25
puts “$a * $b = [expr $a * $b]”

#llistes associatives que simulen arrays
set mat(1) 4
set mat(2) 3
puts “mat(1): $mat(1)”
puts “mat(2): $mat(2)”

# els índexos són cadenes.
set telefon(personal) 123456789
set telefon(movil) 666666666
set telefon(feina) 987654321
puts “telefons disponibles: [array names telefon]”
puts “Mostra tot: [array get telefon]”

# entrada senzilla per teclat
puts “quin vols veure?”
gets stdin nom
# passa a majúscules
puts “Has triat: [string toupper $nom]”
# el mostra
puts “Telefon de $nom: $telefon($nom)”

#treball amb llistes
set progs [list man gedit thunderbird firefox ls cat wc dd dc]
puts “llista: $progs”
puts “llarg de la llista: [llength $progs]”
#index de la llista comença amb 0
puts “element 3: [lindex $progs 3]”
puts “elements 2 a 6: [lrange $progs 2 6]”
puts “afegeix element al final”;
set progs [lappend progs tclsh]
puts “llista: $progs”
puts “afegeix element enmig de la llista”;
set progs [linsert $progs 3 wish]
puts “llista: $progs”


# obrir fitxers per llegir i esciure
#obre un fitxer per a escriure-hi (obté descriptor de fitxer per a escriptura “w”)
set fdw [open prova-tcl.txt w]
puts $fdw “Escriu una línia”
puts $fdw “Escriu una altre línia”
puts $fdw “Escriu la línia del final”
close $fdw

#Llegeix el fitxer (obté descriptor de fitxer per a lectura “r”)
set fdr [open prova-tcl.txt r]
while {![eof $fdr]} {
gets $fdr linea
puts $linea
}
close $fdr

En fi, tot allò que podem esperar d’un llenguatge d’script i potser alguna cosa més.

Hi ha gran quantitat de documentació en línia sobre Tcl.  Vet aquí uns quants enllaços útils:

El manual de referència de Tcl

Tcl developer site
Curs de Tcl a la Universitat de Chicago
Tclers wiki

I també uns manuals en format PDF per a descarregar i tenir-los a ma.

Tcl/Tk quick start
Tcl/Tk reference guide

Per a més endavant, un post sobre Tk.