<!doctype linuxdoc system> <article> <title>HOWTO Tcl et Tk sous Linux <em>(Linux Tcl and Tk HOWTO)</em></title> <author>Luca Rossetti <htmlurl url="mailto:lukaros@tin.it" name="lukaros@tin.it">, traduit par Carine Bournez, <htmlurl url="mailto:cbournez@if.insa-lyon.fr" name="cbournez@if.insa-lyon.fr"> </author> <date>v0.2, 07 November 1998</date> <abstract> Ce document décrit l'approche de Linux à Tcl, un langage de script. C'est un langage interprété, facile à apprendre, qui utilise l'absence de typage pour permettre un niveau de programmation plus élevé et le développement rapide d'applications. La boîte à outils Tk est un environnement de programmation pour créer des interfaces graphiques (Graphical User Interfaces, GUI) sous le système X-Window. Leurs fonctionnalités incluent la possibilité d'extension et l'inclusion dans une autre application, le développement rapide et la facilité d'utilisation. Conjointement, Tcl et Tk apportent de grands bénéfices à la fois au développeur et à l'utilisateur. Les interfaces basées sur Tk ont tendance à être plus personnalisables et dynamiques que celles construites avec une boîte à outils reposant sur du C ou C++. Tk reproduit l'allure et les sensations de Motif. Un grand nombre d'applications intéressantes sous X sont entièrement implémentées en Tk, sans aucune nouvelle commande spécifique à l'application elle-même. </abstract> <toc> <sect>Introduction<label id="introduction"> <p> Ceci est le Linux Tcl et Tk HOWTO. Il vise, en tant que référence pour Linux, à couvrir tout ce qu'il est nécessaire de connaître concernant l'installation, la configuration, ainsi qu'une introduction au développement sous Tcl et Tk. Il présente d'abord un historique, puis aborde les avantages et inconvénients de Tcl et Tk sous linux, et enfin des références à d'autres sources d'information sur une large étendue de sujets liés à ce langage de script simple mais puissant. Si vous avez déjà recompilé votre noyau Linux sous X en utilisant la commande <code>make xconfig </code> vous vous être certainement trouvé face à la puissance de ce langage de script. Après l'exécution de la première étape de la recompilation du noyau, un script appelé kconfig.tk est exécuté via wish (l'interpréteur Tcl). La fenêtre de configuration du noyau Linux apparaît. Au lieu de répondre à des questions en série, cet utilitaire de configuration basé sur X vous permet d'utiliser des cases à cocher pour sélectionner les options du noyau que vous souhaitez activer. Le système conserve les options de votre dernière configuration afin qu'à chaque nouvelle exécution vous n'ayiez à ajouter/supprimer quelques sélections au lieu de reprendre tout l'ensemble des options. De plus, vous pouvez parcourir l'ensemble (ou seulement une partie) des options du noyau dans l'ordre que vous préférez. Après cette étape simplifiée, vous pouvez recompiler votre noyau, en suivant la manière traditionnelle. Il existe en fait un autre exemple bien connu. Avez-vous déjà utilisé «~printtool~» ? (Printer Config Tool (C) Copyright 1994 by <url url="http://www.redhat.com" name="Red Hat Software"> - author: Michael Callahan). Si vous avez installé une distribution Red Hat, vous avez agréablement réussi à l'utiliser pour mettre en place des services d'impression. Eh bien l'interface de printtool est principalement un script Tcl/Tk. Pour ceux qui ne connaissent pas Red Hat, laissez-moi vous dire comment vous pouvez configurer facilement vos imprimantes, juste en remplissant quelques champs de texte et en cochant quelques cases. Le programme lui-même se charge de mettre en place les services en créant le répertoire de spool, écrit le fichier /etc/printcap et le filtre de l'imprimante, relance lpd et teste votre filtre avec des pages en ascii ou en postscript. Il permet de manipuler les options de ghostscript (c'est-à-dire choisir jusqu'à 8 pages par page en sortie et régler les marges), propose une aide en ligne et plein d'autres caractéristiques. Quelle est la différence avec une autre implémentation de service d'impression ? Tout est réalisé en utilisant Tcl/Tk comme une «~colle~» entre applications consolidées et en opérant avec les fichiers de configurations standards de Linux, dans un mode fenêtré, visuel et interactif, sous X-Window. Aucune nouvelle commande spécifique à l'application n'a été écrite. <sect1>But de ce document <p> Actuellement, le but de ce document est de fournir des références de départ aux utilisateurs de Linux ; dans les versions futures, j'essaierai d'ajouter un petit «~tutoriel de programmation~». J'insiste~: ce n'est pas (et ne veut pas remplacer) un manuel utilisateur complet ni une référence pour le développement et la programmation en Tcl et Tk - c'est juste un point de départ pour les utilisateurs de Linux. La conception que l'auteur se fait d'un manuel de référence coïncide avec la définition des pages man et de nombreuses personnes apprennent Tcl/Tk à partir de ces sources brutes d'information. Ces fichiers font partie de la distribution du code source et sont installés sur votre machine Linux. Vous pourrez accéder aux pages de manuel de Tcl/Tk par la commande man. Beaucoup de tutoriels de programmation complets et structurés ont été écrits dans le but de laisser l'utilisateur débutant trafiquer avec Tcl/Tk ; des tonnes d'autres données sont disponibles sur Internet. M'inspirant de la philosophie de Tcl/Tk, je ne vais pas réinventer la roue, mais essayer de cimenter cette énorme masse d'information déjà disponible. Je vous suggère de jeter un oeil aux autres documents cités dans <ref id="references" name="la section Références"> pour savoir où trouver des informations spécifiques à propos de Tcl/Tk. <sect1>Ce qu'il faut savoir avant de poursuivre <p> Pour comprendre le B.A.BA de Tcl/Tk, vous n'avez pas besoin d'être un gourou de la programmation, la syntaxe des commandes est très simple. Basiquement, vous avez besoin de bien connaître~: <itemize> <item>des concepts simples de programmation ; <item>l'utilisation de commandes et d'utilitaires très usuels d'unix ; <item>l'accès à Internet ; <item>l'utilisation de ftp. </itemize> <p> <sect1>Nouvelles versions de ce document <p> Les versions plus récentes de ce document seront téléchargées sur le site ftp~: <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/"> et seront disponibles sur tous les autres miroirs. Les versions hypertexte et autres de ceci, ainsi que les autres HOWTOs de Linux sont principalement disponibles à <url url="http://sunsite.unc.edu/LDP/"> et <url url="http://www.linux-howto.com"> et sur beaucoup d'autres sites web miroirs. (NDT~: En France, vous pouvez utiliser le site suivant pour le document original~: <url url="ftp://ftp.lip6.fr/pub/linux/sunsite/docs/HOWTO/" name="Miroir de Sunsite"> ou, mieux, la version française~: <url url="ftp://ftp.lip6.fr/pub/linux/french/HOWTO/" name="Archive des HOWTO français sur LIP6"> <url url="http://www.freenix.org/unix/linux/HOWTO/" name="Archive des HOWTO français chez Freenix">) J'essaierai d'ajouter à <url url="http://space.tin.it/computer/tlqhr/" name="ma page Web"> la version la plus récente en html et en sgml. La plupart des distributions de Linux sur CD-ROM incluent les HOWTOs, souvent dans un sous-répertoire de /usr/doc/ et vous pouvez également en acheter des copies imprimées chez certains distributeurs. Parfois, les HOWTOs disponibles sur les CD-ROMs, sites ftp ou en copie imprimée ne sont plus d'actualité. Si la date y figurant est dépassée de plus de 6 mois, il existe probablement une version plus récente sur Internet. Si vous faites une traduction de ce document dans une autre langue, envoyez-moi un mot et j'en inclurai une référence ici. <sect1>Historique des révisions <p> <itemize> <item><bf>Version 0.1</bf>~: 28 Octobre 1998 - première version~; <item><bf>Version 0.2</bf>~: 07 Novembre 1998 - profonds changements de style et rajeunissement. </itemize> <sect1>Retours et commentaires <p> Je compte sur vous, lecteurs, pour rendre ce HOWTO utile. Si vous avez des suggestions, corrections ou commentaires, s'il vous plaît envoyez-les moi (<url url="mailto:lukaros@tin.it" name="Luca Rossetti">), et j'essaierai de les inclure dans la version suivante. Si des liens mentionnés dans ce document venaient à être indisponibles ou déplacés, merci de m'en informer tout de suite pour que je puisse mettre à jour ou changer le lien. J'ai la volonté de répondre aux questions d'ordre général à propos de Tcl/Tk et de Linux du mieux que je peux. Avant tout, lisez s'il vous plaît toutes les informations contenues dans ce HOWTO, et envoyez-moi un message détaillé sur le problème rencontré. Si vous publiez ce document sur un CD-ROM ou sous forme papier, j'apprécierais d'en avoir une copie. Envoyez-moi un e-mail et je vous donnerai mon adresse postale. Dans plusieurs sections je mentionne des sociétés de publication ou des URLs de sites commerciaux. Je ne travaille vraiment pas pour ces gens-là. <sect1>Crédits <p> La plupart des informations de ce HOWTO proviennent du livre du Dr. Ousterhout~: <url url="http://www.scriptics.com" name="Scriptics"> et de la <url url="http://www.tclfaq.wservice.com/tcl-faq/" name="FAQ de comp.lang.tcl"> de Larry W. Virden. Je souhaiterais remercier le <url url="http://www.pluto.linux.it/" name="PLUTO">, Groupe Italien des Utilisateurs de Linux, et l'ensemble des volontaires de l' <url url="http://www.pluto.linux.it/ildp/" name="ILDP"> (Italian Linux Documentation Project), spécialement Eugenia Franzoni et Giovanni Bortolozzo pour leurs commentaires. <sect1>Politique de diffusion <p> Ce document est Copyright 1998 par <url url="mailto:lukaros@tin.it" name="Luca Rossetti">. Ce document est diffusé dans l'espoir qu'il soit utile au lecteur~: bien sûr il est considéré sans garantie~; sans même la garantie sous-jacente de commercialisabilité ou d'adéquation à un but particulier. Ce HOWTO est une documentation libre~; vous pouvez le redistribuer et/ou le modifier, selon les termes du <url url="http://sunsite.unc.edu/LDP/LDP-COPYRIGHT.html" name="Copyright LDP">. Veuillez lire le <url url="http://sunsite.unc.edu/LDP/LDP-Manifesto.html" name="Manifeste du LDP"> pour plus de détails. <sect>Histoire de Tcl/Tk <p> Tcl/Tk a été créé par le <url url="mailto:ouster@scriptics.com" name="Dr. John Ousterhout"> (prononcer «~Oh'-stir-howt~») alors qu'il enseignait à l'université de Berkeley, en Californie. En fait, il a commencé à l'implémenter à son retour à Berkeley au printemps 1988~; dès l'été, il était utilisé dans quelques applications internes, mais Tk n'existait pas encore. Lisez l'histoire de Tcl/Tk écrite par son auteur à <url url="http://www.scriptics.com/scripting/tclHistory.html">. <sect1>Chronologie <p> <itemize> <item><bf>1989~:</bf> premières diffusions externes de Tcl et début de l'implémentation de Tk~; <item><bf>1991~:</bf> première version de Tk~; <item><bf>1994~:</bf> le Dr. Ousterhout est employé par Sun Microsystems, Inc.~: il se distingue comme ingénieur et dirige le projet Tcl. <item><bf>Avril/Mai 1997~:</bf> Le groupe de recherche responsable chez Sun du développement de Tcl est déplacé dans une filiale de Sun appelée SunScript. Cependant les choses ont changé à nouveau rapidement. Vous pouvez lire les détails de cette évolution en choisissant "SunScript_story" à l'URL~: <url url="http://starbase.neosoft.com/%7Eclaird/comp.lang.tcl/" name="SunScript-Story">~; <item><bf>Août 1997~:</bf> un consortium Tcl est créé. Vous pouvez en lire davantage, notamment comment en faire partie, qui est actuellement dans le conseil d'administration, etc. en visitant <url url="http://www.tclconsortium.org/" name="Tcl Consortium">~; <item><bf>Février 1998~:</bf> le Dr. Ousterhout quitte Sun pour fonder <url url="http://www.scriptics.com/" name="Scriptics">, une entreprise dédiée aux outils, applications et services d'écriture de scripts. Selon <url url=" http://www.scriptics.com/about/news/qa.html">, le coeur de Tcl/Tk reste libre, avec l'équipe de Sun qui continue actuellement son travail sur Tcl/Tk 8.1. Après la prochaine version, il est prévu que ce travail sur la base de Tcl/Tk migre de Sun à Scriptics, et que l'équipe de Sun se concentre davantage sur les extensions et applications de Tcl. <item><bf>23 Avril 1998~:</bf> L'<url url="http://www.acm.org/" name="ACM"> (Association for Computing Machinery) décerne le prix du logiciel 1997 (Software System Award) à John Ousterhout et Scriptics ( <url url="http://www.acm.org/awards/">). Cette récompense est attribuée à une institution ou une personne reconnue pour avoir développé un logiciel qui a eu une influence durable, remarquée par des contributions à des concepts ou par un plébiscite commercial, ou les deux. </itemize> <sect>Qu'est-ce que Tcl/Tk ? <p> <sect1>Qu'est-ce que Tcl ? <p> Tcl (prononcer «~tickeul~») est l'acronyme de "Tool Command Language" (langage de commandes-outils). Tcl est en fait divisé en deux parties~: un langage et une bibliothèque. Tcl est un langage de programmation simple, dont le but est de passer des commandes à des programmes interactifs tels que des éditeurs de texte, des débogueurs et des interpréteurs shell. Il possède une syntaxe simple et il est lui-même programmable : les utilisateurs de Tcl peuvent en effet écrire des procédures pour créer des commandes plus puissantes que celles que fournies par l'ensemble pré-construit. D'autre part, Tcl est un paquetage bibliothèque intégrable dans des applications. La bibliothèque Tcl est constituée d'un analyseur syntaxique du langage Tcl, de routines implémentant les commandes pré-définies de Tcl, et de procédures permettant à chaque application d'ajouter à Tcl des commandes additionnelles qui lui sont spécifiques. Le programme applicatif génère des commandes Tcl et les passe à l'analyseur syntaxique de Tcl pour l'exécution. Les commandes peuvent être générées en lisant des caractères sur une source en entrée ou bien en associant des chaînes de caractères avec des éléments de l'interface utilisateur de l'application, comme des boutons, des entrées de menus, ou d'autres widgets (NdT~: widget = Window Gadget, élément de fenêtre). Lorsque la bibliothèque Tcl reçoit une commande, elle analyse les champs qui la composent et exécute directement les commandes pré-définies. Pour les commandes implémentées par l'application, Tcl rappelle l'application pour exécuter les commandes. Dans bien des cas, les commandes lanceront des appels récursifs à l'interpréteur Tcl en passant des chaînes optionnelles à exécuter (en fait les procédures et commandes de bouclage conditionnel fonctionnent toutes de cette manière). Un programme d'application peut tirer de nombreux avantages de l'utilisation de Tcl comme langage de commande~: <itemize> <item> Tcl fournit une syntaxe standard~: une fois que les utilisateurs connaissent Tcl, ils seront capables de passer facilement des commandes à n'importe quelle application basée sur Tcl. <item> Tcl parvient à une bonne «~programmabilité~». Tout ce qu'une application nécessite est l'implémentation de quelques commandes spécifiques de bas niveau. Tcl fournit de nombreuses commandes utilitaires et une interface générique de programmation pour construire des procédures de commande complexes. En utilisant Tcl, les applications ne nécessitent pas de réimplémentation de ces caractéristiques. <item> Les extensions à Tcl, telles que la boîte à outils Tk, fournissent des mécanismes pour la communication entre applications, en envoyant des commandes Tcl dans un sens et dans l'autre. La structure commune du langage Tcl rend plus aisée la communication entre applications. </itemize> Il est important de noter que Tcl a été conçu en pensant que le programmeur devrait en fait utiliser deux langages ou plus lorsqu'il construit un système logiciel de taille conséquente~: un pour manipuler des structures de données internes complexes, et là où la performance est cruciale, et un autre, comme Tcl, pour écrire de très courts scripts qui assemblent les autres morceaux, en fournissant des possibilités d'extensions à l'utilisateur. Pour celui qui écrit des scripts Tcl, la facilité d'apprentissage, de programmation et d'assemblage, sont plus importantes que les performances ou les possibilités de structures de données complexes et d'algorithmes. Tcl a été construit pour être aisément inclus dans un langage de plus bas niveau lorsqu'on rencontre des tâches pour lesquelles un langage de plus bas niveau est plus adéquat. Ainsi, les fonctionnalités de base peuvent rester petites et chacun a seulement besoin d'ajouter les morceaux qu'il veut ou doit avoir. Une réponse à la question «~Qu'est-ce que Tcl ?~raquo; se trouve à <url url="http://www.NeoSoft.com/tcl/whatistcl.html">. <sect1>Qu'est-ce que Tk ? <p> Tk (prononcer "Tiii-kay") est une extension de Tcl qui apporte au programmeur une interface avec le système de fenêtrage X11. Il est à noter que Tk a été compilé avec succès sous X11 R4, X11 R5, X11 R6, ainsi que les environnements NeWS/X11 de Sun. De nombreux utilisateurs rencontreront Tcl/Tk à travers la commande "wish". Wish est un shell de fenêtrage simple qui permet à l'utilisateur d'écrire des applications Tcl/Tk dans un environnement de prototypage. Jusqu'à présent, Tcl/Tk ne supporte pas de fontes pour les langues japonaise, chinoise, coréenne,... <sect1>Extensions <p> Comme Tcl est facile à étendre, beaucoup essaient de partager des extensions, notamment le populaire itcl, <url url="http://www.tcltk.com/itcl/" name="[incr Tcl]">, ObjectTcl, TclX, <url url="http://tix.mne.com/" name="Tix ">, et <url url="http://www.tcltk.com/blt/" name="BLT">. Ces extensions nécessitent bien évidemment un interpréteur Tcl étendu. De plus, de nombreuses applications Tcl libres nécessitent une extension particulière de Tcl pour fonctionner. Une des extensions les plus populaires est certainement <url url="http://expect.nist.gov" name="Expect">. Elle permet d'avoir une interface sympathique pour la plupart des commandes UNIX basiques en ligne, telles que ftp, telnet, rlogin, passwd, fsck, etc. Une liste complète des extensions de Tcl/Tk peut être trouvée à l'URL <url url="http://www.scriptics.com/resource/software/extensions/">. <sect1>Plates-formes supportées <p> Cette section contient des informations à propos de Tcl 8.0 et Tk 8.0, versions les plus récentes de Tcl/Tk. Elles sont sorties le 18 août 1998 et le patch le plus récent (8.0.3) date du 3 septembre 1998. Quand vous télédéchargez Tcl et Tk, vous récupérez deux programmes, wish et tclsh, les bibliothèques supportant les scripts, et la documentation en ligne. Ces programmes supportent des plates-formes génériques de développement d'applications en Tcl. Wish inclut la boîte à outils pour interface graphique utilisateur Tk. Les paquetages sont prêts à être utilisés après l'installation. Tcl 8.0 et Tk 8.0 fonctionnent sur la plupart des versions des systèmes d'exploitation suivants~: <itemize> <item>Windows 95 <item>Windows NT <item>Solaris et SunOS <item>Linux <item>HP-UX <item>SGI <item>IRIX <item>Digital Unix <item>AIX <item>SCO Unix <item>La plupart des autres systèmes d'exploitation voisins d'UNIX pour Macintosh (68K et Power Mac) <item>Des versions pré-compilées sont disponibles pour diverses distributions de Linux. </itemize> <sect>Installation et prise en main de Tcl et Tk <p> Les distributions récentes incluent Tcl et Tk. Des paquetages rpm et deb de binaires pré-compilés sont disponibles pour les distributions Red Hat, SuSE et Debian (ce qui facilite l'installation). Une installation standard d'une distribution récente inclura Tcl/Tk puisque c'est un prérequis de nombreux utilitaires de configuration qui tournent principalement sous X. Tcl et Tk sont distribués librement sur Internet sous forme de code source. Il n'y a pas de restrictions quant à leur utilisation, ni de licence ou droits à payer (voir la section <ref id="license" name="termes de la licence"> pour information complète). Encore plus de scripts et d'extensions Tcl/Tk sont disponibles librement également. <sect1>Télédéchargement des distributions de base <p> La base de Tcl/Tk se constitue des bibliothèques Tcl et Tk, plus les applications wish et tclsh, la documentation associée, des bibliothèques de scripts et des applications de démonstration. Le site FTP primaire pour ces données est <url url="ftp://ftp.scriptics.com/pub/tcl/">. Le site primaire en HTTP est <url url="http://www.scriptics.com/software/download.html">. <sect1>Installation <p> A moins qu'elle ne soit déjà disponible en paquetages propriétaires pour votre distribution, vous souhaiterez télédécharger le version code source. Vous aurez besoin des sources de Tcl comme de Tk. La procédure suivante se réfère à ce second cas~: Choisissez entre le format tar et le format tar gzippé. Fichiers Tar compressés Sources de Tcl (tcl8.0.3.tar.Z)~: fichier tar compressé (environ 2.4 Mo). Sources de Tk (tk8.0.3.tar.Z)~: fichier tar compressé (environ 3.3 Mo). Fichiers Tar gzippés Sources de Tcl (tcl8.0.3.tar.gz)~: fichier tar gzippé (environ 1.5 Mo). Sources de Tk (tk8.0.3.tar.gz)~: fichier tar gzippé (environ 2.1 Mo). Quand vous récupérez ces fichiers, vous obtenez un fichier compressé tar avec un nom comme tcl8.0.3.tar.gz ou tcl8.0.3.tar.Z. Ces fichiers sont identiques, sauf par la technique de compression (les fichiers .gz sont généralement plus petits que les .Z). Pour décompresser la distribution, lancez des commandes shell comme celles-ci, selon la version que vous avez récupérée~: <code>gunzip -c tcl8.0.3.tar.gz </code> ou <code>tar xf - zcat tcl8.0.3.tar.Z </code> ou <code>tar xf - unzip tcl80.3.zip </code> Chacune de ces commandes crée un répertoire appelé tcl8.0.3, qui contient les sources pour toutes les plates-formes, la documentation, et les bibliothèques de script pour Tcl 8.0. Pour compiler et installer la distribution, suivez les instructions du fichier README dans le répertoire de la distribution. Assurez-vous de compiler Tcl avant Tk, puisque Tk dépend d'informations de Tcl. <sect1>L'archive de contributions <p> Il existe beaucoup d'autres paquetages libres pour Tcl et Tk, incluant des scripts écrits en Tcl et également des extensions écrites en C ou C++. Ces paquetages comprennent des applications de bases de données et d'accès réseau, un constructeur d'interfaces graphiques utilisateur, le programme expect, des widgets Tk supplémentaires, et des dizaines d'autres choses. Le site primaire pour l'archive Tcl/Tk est <url url="ftp://ftp.neosoft.com/pub/tcl">. <sect1>Sites miroirs <p> Plusieurs autres sites dans le monde sont des miroirs de tout ou partie des données du site de base et de l'archive de contributions~; vous trouverez peut-être plus pratique de prendre des données sur un miroir plus proche de vous. Le fichier ftp "0_mirror" à <url url="ftp://ftp.scriptics.com/pub/tcl/"> donne une liste de miroirs dans votre pays. <sect1>Quelles versions utiliser ? <p> Référez-vous toujours à la dernière version recommandée dans la section «~Tcl/Tk Core~» de <url url="http://www.scriptics.com/software/download.html" name="Scriptics Software Central page">. A l'heure où j'écris, les versions recommandées sont les dernières (Tcl 8.0.3 et Tk 8.0.3), qui sont sorties en septembre 1998. Tcl 8.0 contient un nouveau compilateur de pseudo-code qui accélère l'exécution d'un facteur 2 à 10. Il fournit aussi des contextes de dénomination (namespaces), des entrées/sorties binaires et plusieurs nouvelles caractéristiques. Tk 8.0 est la première version qui fournit l'allure et les impressions naturelles sur les Macintoshes et les PCs. Tk 8.0 supporte également l'encapsulation d'applications et propose un nouveau mécanisme de fonte portable. Tcl 8.0 et Tk 8.0 offrent tous deux des fonctionnalités supplémentaires au modèle de sécurité Safe-Tcl. <sect1>Où adresser des rapports de problèmes, bugs, ou améliorations <p> Utilisez <url url="news:comp.lang.tcl"> pour les communications publiques. (NdT~: le forum en langue française équivalent est <url url="news:fr.comp.lang.tcl">). Une alternative consiste à envoyer problèmes, suggestions, idées nouvelles, etc. directement à l'auteur. Un email à <url url="mailto:ouster@scriptics.com" name="John Ousterhout"> permet de le contacter. Lorsque vous rendez compte de problèmes ou de bugs, veillez à mentionner tous les détails nécessaires à un diagnostic correct. Basiquement, vous devez décrire votre matériel, votre système d'exploitation et la version de Tcl/Tk utilisée, préciser si vous avez fait des modifications ou des ajouts, et donner, si possible, soit un petit bout de code, soit une URL vers du code mettant en évidence le problème. Si vous avez du logiciel dont vous pensez que la communauté pourrait tirer parti (que ce soit un programme, une fonction, une extension, ou un simple exemple), ou si vous avez un document, un article de journal ou de magazine, une thèse, un projet, ou même une annonce commerciale, faites-le savoir aux personnes susceptibles d'être intéressées. Il y a des responsables de FAQ pour tous ces domaines, ainsi qu'un forum Usenet <url url="news:comp.lang.tcl.announce" name="comp.lang.tcl.announce"> que vous pouvez utiliser. Cela vaut toujours la peine de soumettre vos contributions directement sur le site ftp afin que davantage de personnes puisse dans le futur profiter de votre expérience. Pour poster sur le forum <url url="news:comp.lang.tcl.announce" name="comp.lang.tcl.announce">, envoyez un email détaillé à <url url="mailto:tcl-announce@mitchell.org" name="tcl-announce">. N'hésitez pas à renvoyer les gens vers votre propre site ftp ou WWW si vous en avez un. <sect>Un tout petit peu de programmation <p> Comme Tcl est un langage interprété, pour exécuter un programme Tcl (qu'on appelle également un script) vous passez normalement le fichier à l'interpréteur Tcl, wish, par exemple~: <code>wish hello.tcl </code> Vous pouvez aussi utiliser wish en mode interactif et lui donner des commandes à l'invite. Il existe un autre interpréteur de Tcl en standard, tclsh, qui comprend seulement le langage Tcl. Tclsh n'a aucune commande de l'interface utilisateur de Tk, donc il n'est pas possible de créer des programmes graphiques avec tclsh. Certaines applications Tcl libres étendent le langage en ajoutant de nouvelles commandes écrites sous la forme de fonctions C. Dans ce cas, vous devez compiler l'application au lieu de passer seulement son code Tcl à l'interpréteur wish. Ce programme applicatif compilé est véritablement, du point de vue de Tcl, une nouvelle version de l'interpréteur wish, avec les nouvelles commandes en C liées dedans. Bien sûr, le programme peut être bien plus qu'un simple interpréteur Tcl. (Note~: vous pouvez aussi utiliser la capacité de chargement automatique de Tcl sur les systèmes qui la supportent). <sect1>Programme-minute en Tcl <p> Tcl a une structure simple. Chaque ligne commence par une nouvelle commande, par exemple button et un certain nombre d'arguments. Chaque commande est implémentée comme si c'était une fonction C, qui prend en charge tous les arguments. Voici un exemple très bateau, le célèbre Hello World écrit en Tcl/Tk~: <code># Ceci est un commentaire button .b -text "Hello World" -command exit pack .b </code> Dans cet exemple, vous devez taper les commandes de manière interactive dans tclsh ou wish. Vous pouvez aussi placer les commandes dans des fichiers de script et les appeler tout comme des scripts shell. Pour reprendre l'exemple précédent, le programme Hello World s'écrirait~: <code>#! /usr/local/bin wish -f button .b -text "Hello World" -command exit pack .b </code> Mettez ce texte dans un fichier appelé Hello et assurez-vous que wish est installé dans /usr/local/bin (si ce n'est pas le cas, corrigez le chemin d'accès). Rendez le fichier Hello exécutable, par un~: <code>chmod 775 Hello </code> et lancez-le sous X. Vous allez voir un bouton marqué Hello World dans une fenêtre~: cliquer dessus ferme la fenêtre. <sect>Langage de script~: avantages et inconvénients <p> Afin de comprendre l'importance de Tcl/Tk et son futur, je vous recommande la visite de <url url="http://www.scriptics.com/people/john.ousterhout/"> par <url url="mailto:ouster@scriptics.com" name="John K. Ousterhout ">. Vous y trouverez des choses à lire sur l'importance des scripts (écrits dans des langages tels que Tcl) et une comparaison avec la programmation système (dans des langages comme le C et le Java). Pour une lecture à propos des comparaisons, voyez <ref id="prosandcons" name="the comparison discussion">. Voici un résumé des principaux avantages et inconvénients de Tcl/Tk. <sect1>Reproches les plus courants à propos de Tcl <p> <sect2>Tcl est interprété <p> Les données sont traitées de manière primaire comme des chaînes de caractère, les programmes écrits en Tcl sont lents. Tcl 8.0 essaie de pallier ceci en compilant à un certain degré ainsi qu'en autorisant différents types de variables. <sect2>Plusieurs caractéristiques ne sont pas intuitives <p> Les commentaires sont des commandes plutôt que de vrais commentaires, les nombres commençant par 0 sont en octal, l'utilisation correcte des guillemets, etc. Ces aspects sont abordés dans les diverses FAQs. <sect1>Principaux avantages de Tcl <p> <sect2>C'est un langage de script de haut niveau <p> Vous avez besoin de beaucoup moins de code pour faire le travail, surtout en comparaison avec des applications Motif ou Win32. En général, le nombre de lignes de code (Line Of Code, LOC) d'un projet logiciel est l'indice de complexité le plus important. <sect2>Tcl est libre <p> Vouz pouvez vous procurer les sources gratuitement sur Internet par la page Download de Scriptics ou par le site FTP pour Tcl. <url url="http://www.scriptics.com/software/download.html" name="Le site de base du logiciel"> inclut la version code source, ainsi que des versions binaires pour plates-formes Windows et Macintosh~; ou bien vous pouvez trouver Tcl sur un bon nombre de CD-ROMs pour un coût réduit. Une lecture à propos de la base libre de Tcl et Tk~: <url url="http://www.scriptics.com/about/news/qa.html" name="www.scriptics.com/about/news/qa.html"> . <sect2>Il fonctionne sur de nombreuses plates-formes <p> Il existe des versions pour UNIX (Linux... bien sûr), Windows et Macintosh. Exceptées quelques différences entre plates-formes, vos scripts Tcl fonctionneront de la même manière sur tous les systèmes. <sect2>Il est interprété <p> Vous pouvez exécuter directement votre code sans compilation ni édition de liens (même si quelques compilateurs de Tcl sont disponibles). <sect2>Il est extensible <p> Il est aisé d'ajouter vos propres commandes pour étendre le langage Tcl. Vous pouvez les écrire en C ou en Tcl. <sect2>Il est encapsulable dans vos applications <p> L'interpréteur Tcl est purement et simplement un ensemble de fonctions C que vous appelez dans votre code. Cela signifie que vous pouvez utiliser Tcl comme langage applicatif, tout comme un langage de macro pour un tableur. <sect2>Tcl/Tk est compatible An 2000 <p> Lisez ce que le créateur de la base Tcl et Tk dit à ce sujet~: <url url="http://www.scriptics.com/Y2K.html" name="www.scriptics.com/Y2K.html"> . <sect>Programmes les plus célèbres utilisant Tcl/Tk <p> A part les deux implémentations décrites dans <ref id="introduction" name="l'Introduction">, de nombreuses applications sont écrites en Tcl/Tk ou une combinaison de Tcl et de C. Une liste complète de ces implémentations figure à la <url url="http://www.tclfaq.wservice.com/tcl-faq/part4.html" name="partie 4"> de la Foire Aux Questions sur Tcl/Tk (FAQ). Je vous suggère de visiter <url url="http://www.scriptics.com/resource/software/" name="Scriptics' Software Central">. Un autre bon point de départ est <url url="http://www.NeoSoft.com/tcl/">. Une des meilleures applications Tcl tournant sous Linux s'appelle <url url="http://people.mainz.netsurf.de/˜bolik/tkdesk/" name="TkDesk">. C'est un gestionnaire de fenêtres et un lanceur d'applications qui fonctionne très bien. Si vous êtes développeur en Tcl/Tk, n'hésitez pas à <url url="mailto:lukaros@tin.it" name="m'envoyer"> une URL (et une description de votre travail) que je puisse ajouter ici. <sect>Références<label id="references"> <p> Pour de nombreuses raisons, les gens préfèrent souvent avoir un manuel papier comme référence ou aiment être aidés en ligne par d'autres personnes connectées. Vous pouvez trouver dans cette section une sélection de livres de référence, de tutoriels, de sites www et forums Usenet. <sect1>Livres <p> Beaucoup de livres concernant Tcl/Tk ont été écrits et vont être publiés. Je ne vais pas essayer de tous les répertorier (<bf>un autre howto n'y suffirait pas</bf> :) ). Vous trouverez davantage d'informations et des notes complémentaires à~: <itemize> <item> <htmlurl url="http://www.tclconsortium.org/books/index.vet" name="www.tclconsortium.org/books/index.vet"> <item> <htmlurl url="http://www.amazon.com/exec/obidos/subst/categories/computer-programming/tcl-tk-article/002-8989352-4516417" name="www.amazon.com/exec/obidos/subst/categories/computer-programming/tcl-tk-article/002-8989352-4516417"> <item>Page~: tcl_books.html à l'URL <htmlurl url="http://starbase.neosoft.com/%7Eclaird/comp.lang.tcl/" name="starbase-neosoft-tcl-books"> </itemize> Je vais essayer ici de résumer en quelques lignes les livres que je connais à ce sujet, qui sont tous d'un niveau basique à moyen. Là encore, les gens qui connaissent le sujet ont suffisamment d'informations pour savoir où trouver des livres d'un niveau plus avancé. <sect2>The Tcl and Tk Toolkit <p> Auteur~: <url url="mailto:ouster@scriptics.com" name="John K. Ousterhout "> Information sur le WWW à propos de l'ouvrage~: <htmlurl url="http://cseng.aw.com/bookdetail.qry?ISBN=0%2D201%2D63337%2DX&ptype=0" name="cseng.aw.com/bookdetail.qry?ISBN=0%2D201%2D63337%2DX&ptype=0"> Exemples du livre~: <url url="ftp://ftp.scriptics.com/pub/tcl/doc/book.examples.Z"> Compléments au livre~: <url url="http://www.scriptics.com/doc/tk4.0.ps"> Cet ouvrage couvre à l'origine Tcl 7.3 et Tk 3.6. <sect2>Practical Programming in Tcl and Tk, deuxième édition <p> Auteur~: <url url="mailto:welch@acm.org" name="Brent Welch"> Information sur le WWW à propos de l'ouvrage~: <url url="http://www.beedub.com/book/"> Table des matières~: <url url="http://www.beedub.com/book/"> Publicité du livre à la section_50000.html de l'URL <url url="http://www.borders.com/sections/"> Cette édition révisée décrit Tcl/Tk 8.0 tel qu'il était dans sa période beta. Les ajouts par rapport à la première édition concernent les sockets, les paquetages, les contextes (namespaces), et une longue section décrivant les changements dans Tcl 7.4, 7.5, 7.6 et 8.0 (et Tk également), Safe Tk, et le Plugin. <sect2>Tcl and Tk Reference Manual <p> Editeurs~: <url url="mailto:marc@redhat.com" name="Marc Ewing">, Erik Troan Information sur le WWW à propos de l'ouvrage~: <url url="http://www.lsl.com/catalog/books/tcltk/"> <sect2>The Visual TCL Handbook, 1/e <p> Auteur~: <url url="mailto:david@inforef.com" name="David Young"> Information sur le WWW à propos de l'ouvrage~: <url url="http://www.amazon.com/exec/obidos/ASIN/013461674X/qid%3D932034805/002-8225427-0056632"> Un guide complet sur Visual TCL. Ce livre mène le lecteur des concepts de base du développement d'interfaces graphiques utilisateur jusqu'à des développements d'applications significatifs. Le livre se concentre sur les extensions TCLX et VT, évoquant beaucoup de sujets fondamentaux pour TCL. VT est une interface graphique basée sur Motif, incompatible avec Tk. L'intégralité du langage TCL est documentée dans une section Commands séparée. Il inclut un CD-ROM avec les versions SGI, Solaris, HP-UX, AIX et Unixware de Visual Tcl. <sect2>Running Linux <p> Auteur~: Matt Welsh et Lar Kaufman Information sur le WWW à propos de l'ouvrage~: <url url="http://www.ora.com/catalog/runux2/noframes.html"> (NdT~: La version française de cet ouvrage est intitulée "Le Système Linux", aux éditions O'Reilly. Cette adaptation française de René Cougnenc a été révisée, pour la deuxième édition, par Manuel et Nat Makarévitch. Voir <url url="http://www.editions-oreilly.fr/sysad/runux2.html">. La 3ème édition originale doit sortir en août 1999. Voir <url url="http://www.ora.com/catalog/runux3/noframes.html">. Il faudra attendre un peu pour la version française). C'est un livre de base vraiment bien écrit. Il contient un chapitre sur la programmation en Tcl/Tk (ainsi que Perl, C, C++). <sect2>Tcl/Tk for Dummies (Pour les Nuls) <p> Auteur~: Timothy Webster, with Alex Francis Information sur le WWW à propos de l'ouvrage~: <url url="http://www.dummies.com/"> Un autre livre dans la série des livres de programmation. Celui-ci se concentre sur le plugin Tcl comme environnement de programmation. <sect2>Interactive Web Applications With Tcl/Tk <p> Auteurs~: Michael Doyle, Hattie Schroeder Information sur le WWW à propos de l'ouvrage~: <url url=" http://www.eolas.com/tcl/"> C'est un livre d'apprentissage par l'exemple, pour les personnes qui savent un peu programmer sans être experts. Il couvre le développement d'applets comme applications autonomes et des applications serveurs simples. Il est fourni avec la boîte à outils Spynergy, qui ajoute diverses procédures en pur Tcl/Tk pour le traitement distribué, la récupération d'URL, la génération de HTML, la gestion de bases de données et la gestion transparente de fichiers quelle que soit la plate-forme, un éditeur de Tcl, Ed, et un environnement de test, un outil de conversion d'image, une démonstration des fonctionnalités de Tk, une version client/serveur d'une application rolodex, un serveur web en Tcl pur, une application de push en client/serveur, un navigateur web en Tcl. <sect1>Manuels en ligne et tutoriels <p> <itemize> <item>John Ousterhout a écrit un guide dans un style ingénierie, qui décrit le codage, la documentation et les conventions de test en usage chez Sun pour le codage de la base en C de Tcl, et l'a mis à disposition des autres développeurs Tcl/Tk. Il se trouve à <url url="ftp://ftp.scriptics.com/pub/tcl/doc/engManual.tar.Z"> <item>Un second guide, couvrant l'écriture de scripts Tcl, peut être récupéré à <url url="ftp://ftp.scriptics.com/pub/tcl/doc/styleGuide.tar.gz">. <!-- NdT : ceci n'est plus valable : D'autres versions sont sur <url url="http://sunscript.sun.com/techcorner/styleGuide.ps" name="sunscript.sun.com/techcorner/styleGuide.ps">.--> <item> <url url="http://http2.brunel.ac.uk:8080/˜csstddm/TCL2/TCL2.html" name="A brief introduction to TCL/TK "> par <url url=" mailto:csstddm@brunel.ac.uk" name="David Martland ">. <item>Un autre tutoriel intitulé <url url="http://www.scism.sbu.ac.uk/tkteach/" name="User interfaces with Tcl/Tk"> a été écrit par <url url="mailto:fintan@sbu.ac.uk" name="Fintan Culwin ">. <item>Même si vous devriez avoir les pages de manuel de Tcl/Tk sur votre système, voici un autre endroit où chercher~: <url url="http://cuiwww.unige.ch/eao/www/TclTkMan/Man.html" name="TCL Manual Pages (from TCL7.4)-Tk Manual Pages (from TK4.0)">. <item> <url url="http://www.itd.clrc.ac.uk/Activity/TclTk" name="The Tcl/Tk Cookbook"> fournit beaucoup d'informations pour débuter. </itemize> <sect1>Sites World Wide Web <p> Il existe de nombreuses ressources WWW qui offrent des informations complémentaires sur beaucoup d'aspects de Tcl et de ses extensions. <itemize> <item>Référez-vous à <url url="http://www.tclfaq.wservice.com/tcl-faq/part2.html" name="la FAQ-Tcl (partie 2)"> pour des liens en quantité vers de la documentation Tcl/Tk et des sites web. <item>Lancez votre navigateur web sur <url url="http://www.tcltk.com" name="Tcl/Tk Information">~: un site avec beaucoup de liens vers des ressources Tcl/Tk sur le web (informations, Extensions, Outils, Entraînement et Evénements). <item>Jetez un oeil à <url url="http://www.tclconsortium.org/" name="Tcl-Consortium">~: une organisation à but non-lucratif pour promouvoir Tcl/Tk et soutenir la communauté des développeurs. <item>Allez naviguer à <url url="http://www.NeoSoft.com/tcl/" name="l'Archive Officielle des Sources des Contributions"> pour le Tool Command Language (TCL) et la boîte à outils Tk, hébergée par Neosoft, Inc. <item><label id="prosandcons">Pour une discussion à propos du pour et du contre des principaux langages de script~: <url url="http://www.sun.com/sunworldonline/swol-10-1997/swol-10-scripting.html " name="article paru dans SunWorld">, par <url url=" mailto:claird@Starbase.NeoSoft.com" name="Cameron Laird "> <item>Une page web qui contient diverses comparaisons entre Tcl/Tk et d'autres systèmes similaires. La plupart d'entre elles sont tirées de "comp.lang.tcl", l'auteur serait heureux d'ajouter tout article important que vous, oui vous !, voudrez lui envoyer~: <url url="http://icemcfd.com/tcl/comparison.html" name="Comparaison"> par <url url="mailto:wayne@icemcfd.com" name="Wayne Christopher">. <item> <url url="http://herzberg.ca.sandia.gov/TclCourse/" name="Le cours de Tcl/Tk de E.J. Friedman-Hill's">~: ce document est disponible seulement sous forme PowerPoint et en HTML de basse qualité (en format HTML, toutes les figures et une partie du texte sont manquantes). </itemize> <sect1>Autres documents & Foires Aux Questions <p> Beaucoup de matière est disponible sur l'Internet~: papiers introductifs, papiers blancs, tutoriels, transparents, versions PostScript de brouillons d'ouvrages publiés, et bien d'autres choses. Pour une référence complète, veuillez s'il vous plaît jeter un oeil à l'excellente <url url="http://www.tclfaq.wservice.com/tcl-faq/" name="FAQ Tcl"> . <sect1>Forum Usenet <p> <url url="news:comp.lang.tcl" name="comp.lang.tcl"> est un groupe de discussion non modéré, créé pour les échanges sur le langage de programmation Tcl et les outils qui utilisent Tcl sous une forme quelconque, tels que la boîte à outils Tk pour le système X Window, le Tcl étendu, et expect. (NdT~: le forum équivalent dans la hiérarchie francophone fr.* est <url url="news:fr.comp.lang.tcl" name="fr.comp.lang.tcl">). Pour les annonces relatives à Tcl/Tk, regardez toujours <url url="news:comp.lang.tcl.announce" name="comp.lang.tcl.announce">~: vous y trouverez les annonces de versions finales, de patchs, de nouvelles applications, etc. Je précise à nouveau que la FAQ se trouve à <url url="http://www.tclfaq.wservice.com/tcl-faq/" name="FAQ Tcl">. <sect>Termes de la licence de Tcl/Tk<label id="license"> <p> Les termes suivants s'appliquent à toutes les versions diffusées de la base de Tcl/Tk, au plug-in Tcl/Tk navigateur version 2.0, et à TclBlend et Jacl version 1.0. Veuillez noter que les outils TclPro sont sous une autre licence. La présente licence est incluse dans les distributions standard de Tcl/Tk en tant que fichier "licence.terms". LICENCE DE TCL/TK Ce logiciel est sous copyright des Régents de l'Université de Californie, Sun Microsystems, Inc., Scriptics Corporation, et autres parties. Les termes suivants s'appliquent à tous les fichiers associés au logiciel à moins que ce ne soit explicitement mentionné dans les fichiers individuellement. Les auteurs accordent ici la permission d'utiliser, copier, modifier, distribuer, et placer sous licence ce logiciel et sa documentation dans n'importe quel but, pour autant que les notes de copyright existantes soient conservées dans toutes les copies et que la présente note soit incluse telle quelle dans toute diffusion. Aucun accord écrit, licence ou droit d'auteur n'est requis pour un usage autorisé. Les modifications de ce logiciel devraient être placées sous copyright par leurs auteurs et ne nécessitent pas de suivre les termes de la licence décrits ici, pour autant que les nouveaux termes soient clairement indiqués sur la première page de chaque fichier sur lequel ils s'appliquent. <bf>EN AUCUN CAS LES AUTEURS OU DISTRIBUTEURS NE POURRONT ETRE TENUS POUR RESPONSABLES DE DOMMAGES DIRECTS, INDIRECTS, PARTICULIERS, ACCIDENTELS OU COLLATERAUX PROVOQUES PAR L'UTILISATION DE CE LOGICIEL, DE SA DOCUMENTATION, OU QUELCONQUES CONSEQUENCES DE CECI, MEME SI LES AUTEURS ONT ETE AVERTIS DE LA POSSIBILITE DE CES DOMMAGES.</bf> <bf>LES AUTEURS ET DISTRIBUTEURS SE DEGAGENT PRECISEMENT DE TOUTES GARANTIES, INCLUANT, MAIS PAS EXCLUSIVEMENT, LA GARANTIE IMPLICITE DE COMMERCIALISABILITE, L'ADEQUATION A UN BUT PARTICULIER, ET LA NON-CONTREFACON. CE LOGICIEL EST FOURNI «~TEL QUEL~», LES AUTEURS ET DISTRIBUTEURS N'ONT AUCUNE OBLIGATION DE MAINTENANCE, SUPPORT, MISE A JOUR, EXTENSIONS, OU MODIFICATIONS.</bf> UTILISATION GOUVERNEMENTALE~: Si vous acquérez ce logiciel pour le compte du gouvernement américain, le gouvernement n'aura que des droits restreints sur le logiciel et la documentation associée, tel qu'il est défini dans les lois fédérales sur l'acquisition (Federal Acquisition Regulations - FARs) à la clause 52.227.19 (c) (2). Si vous acquérez ce logiciel pour le compte du ministère de la défense (Department of Defense, DoD), le logiciel sera classé comme logiciel commercial (Commercial Computer Software) et le gouvernement n'aura que des droits restreints, tel que défini dans la clause 252.227-7013 (c) (1) des DFARs. Nonobstant ce qui précède, les auteurs accordent au gouvernement américain et aux personnes agissant en son nom la permission d'utiliser et de distribuer le logiciel selon les termes spécifiés dans la présente licence. </article>