Avant-propos

 

 

 

Historique

                  Le système X-Window a été développé au M.I.T. dans le cadre du projet Athena. Le but du projet était de réaliser une plate-forme portable pour la programma­tion graphique, qui permette à des applications tournant sur différentes machines connectées en réseau d'afficher leurs résultats sur une même station — et cela, indépendamment des machines et de la station graphique utilisée comme cible. Parmi les auteurs d'origine figurent Robert Scheifler et Jim Gettys mais il y eut en réalité de nombreuses contributions.

 

                  L’origine du développement du système X-Window prend sa source en 1982 à par­tir d'un système de fenêtrage appelé W qui fut développé à l’université Stanford. En 1985 sort la version 10 d'un système de fenêtrage appelé X et en 1987 est fondé le X‑Consortium regroupant de nombreux partenaires industriels.  La version 11 Release 2 du système X‑Window sort finalement en 1988, la Release 4 en 1990, et la version 11  Release 5 en 1991.

 

                   DEC et IBM ont dès l’origine participé activement au développement du projet, ainsi que d'autres grandes compagnies comme Sun Microsystems, Apollo, Tektronix, Hewlett‑Packard, Bull, NCR, etc. Aujourd’hui tous les grands constructeurs font partie du consortium X, au moins à titre de membre associé. Le système X‑Window est dispo­nible pratiquement sur toute machine graphique possédant un clavier et une souris et il est fourni en standard sur les machines DEC, IBM, AT&T, Sony, Solbourne, HP, Sun, etc. Il n'y a en fait que trois standards alternatifs : NeXT, Macintosh et Windows System.

 

 

La librairie Xlib

                  Le système X‑Window est écrit en C, ce qui permet une intégration facile sur toute machine. Il est construit selon un modèle client/serveur qui permet une intégration simple en réseau et fonctionne aujourd'hui sur les réseaux TCP-IP  et DECNET. Les constructeurs ont à leur charge d'implanter le serveur X. Pour communiquer avec le serveur, il faut utiliser un ensemble de fonctions et conventions particulières : le protocole X. C'est un protocole efficace mais peu pratique d’emploi. La librairie graphique Xlib que nous allons détailler dans ce livre est une sorte d’interface proposée aux program­meurs, qui utilise le protocole X mais introduit un nombre limité de notions — fenêtres, événements, fontes, couleurs, contextes et fonctions graphiques de base — permettant de communiquer facilement avec le serveur.

 

                  Aujourd'hui la librairie Xlib sert de base pour l'architecture d'outils de généra­tion d'interfaces plus sophistiqués comme la toolkit MotifTM ou la toolkit Openlook de chez SunMicrosystème. Ces boîtes à outils proposent divers objets interactifs comme les boutons, les ascenseurs, les menus, etc. Les différentes toolkits définissent des styles d'interfaces différents mais sont toutes construites par‑dessus la librairie Xlib[1].

 

                  L'utilisation des boîtes à outils facilite considérablement la programmation des interfaces graphiques, mais dès que l'on souhaite développer un logiciel graphique comportant autre chose que des boutons, des menus ou des boîtes de dialogues, une bonne connaissance de la librairie graphique est nécessaire. La librairie Xlib est en fait incon­tournable pour toute personne désirant travailler sérieusement dans le domaine des logi­ciels graphiques sous X-Window.

 

 

Structure de ce manuel

                  Ce livre est un manuel de programmation avec la librairie Xlib. Les différentes sections abordent les notions fondamentales introduites par la librairie ou le serveur : fenêtres, modèle client/serveur, événements, contexte graphique et fonctions de dessin, couleurs, localités et interprétation de chaînes. Les chapitres et les sections coïncident géné­ralement avec une section de la documentation du MIT[2] mais ne sauraient dispenser totalement de la lire. Le but de ce manuel n'est pas de remplacer la documentation, mais plutôt d'introduire agréable­ment à celle-ci en ramenant sa lecture fastidieuse à quelques consultations, effectuées au coup par coup, selon les besoins en programmation de cha­cun.

 

                  Je me suis attachée pour cela à fournir rapidement la liste des fonctions et structures de données essentielles. Ces termes techniques fourniront des points d’entrée à la documentation.

 

J'ai pris en outre le parti d'insister sur les erreurs classiques des débutants afin que le lecteur puisse trouver immédiatement une explication aux phénomènes qu'il ren­contre. L’icône précédente[3] sera utilisée pour insister sur les points importants ou sur les erreurs et confusions à ne pas commettre.

 

                  Un problème didactique concernant la présentation des fonctions de la librairie provient de la présence de plusieurs versions. Toutes les fonctions décrites ici sont des fonctions de la version 11, mais il en existe plusieurs mises à jour (Release). Ce livre étant destiné au public français, nous avons d'abord décrit en détail les fonctions de la version 11 Release 4 pour présenter les notions, car la Release 5, bien que sortie en 1991, n'est pas encore très répandue en France. Les principaux changements intro­duits par la Release 5 (dans le traitement de la couleur et l'internationalisation du codage des chaînes de caractères) ont été regroupés en fin de volume (chapitres 9 et 10).

 

                  Pour faciliter la compréhension, le nom des fonctions et structures figure en caractère machine. Le type des arguments des fonctions n'est précisé sous forme de décla­ration systématique que dans les premiers chapitres. Le nom des arguments est cependant toujours mentionné et indique le type par analogie ou convention. Par exemple, une variable nommée dpy a toujours nécessairement le type Display* et une variable nommée pixmap, le type Pixmap. Ces conventions sont introduites progressivement et allègent ainsi la déclaration des arguments. En outre, la forme de déclaration que nous utilisons est la forme d'appel de la fonction, plutôt que celle de sa déclaration C. Ainsi, plutôt que d'indiquer

 

void procedure (dpy, pt_return)

int     *pt_return ;

 

 

nous écrirons

 

void procedure (dpy, &pt_return)

int     pt_return ;

 

La présentation fournie est plus proche de l'usage car le type des variables est identique à celui qui figurera dans les déclarations du programme.

 

                  Quoi qu'il en soit, nous recommandons au lecteur d’avoir à sa disposition une documentation complète sur les fonctions de la librairie. Sa consultation, facilitée par l'index, sera l'occasion d’acquérir des précisions sur le comportement des fonctions : constantes de retour, erreurs pouvant résulter d’un mauvais appel, etc.

 

                  Pour faciliter une consultation rapide, on trouvera deux index à la fin de ce livre : un index alphabétique des notions et fonctions citées, et un index de référence sur les événements regroupant les informations liées à chaque type d'événement. On trouvera également en fin de chapitre la liste des fonctions incontournables qui ont été introduites.       

 

                  Enfin, une liste d’exercices termine les sections les plus importantes. Le corrigé des exercices pourra être lu à titre d’illustration de la section si le lecteur manque de temps pour programmer. J’espère que ces corrigés donneront aux lecteurs le goût du literate programming, selon l'expression de Donald Knuth.

 

 

Remerciements

                  Je tiens à remercier ici tous ceux qui m'ont aidée à faire ce livre, tant matériellement que moralement. Je suis d'abord endettée vis-à-vis de mes collègues du LIPN[4], car ce livre est issu d'un cours de DESS sur les interfaces graphiques qui n'aurait pu avoir lieu sans leur bonne volonté. Je suis aussi redevable aux étudiants de Paris XIII pour leur enthousiasme, qui a motivé l'écriture du polycopié dont ce livre est issu.

 

 

 

 

                  Je tiens aussi à remercier mes anciens collaborateurs de NSL[5], Patrick Amar, Yves Berteaud,  Francis Capy, Karim Hebbar et Patricia Pauthe, avec qui j'eu le plaisir d'animer des sessions de formation sur X-Window de 1988 à 1990. J'ai beaucoup appris durant ces sessions et ce livre est le fruit de cette expérience pédagogique. Je remercie tout particulièrement Patrick Amar, qui est à l'origine des cours de NSL, et Yves Berteaud, qui a guidé mes premières expériences sur la couleur. L'un et l'autre m'ont inspiré plusieurs exercices. Je remercie aussi vivement Patricia Pauthe, qui a eu la gentillesse de lire le livre entièrement et dont la bonne humeur et l'enthousiasme m'ont toujours stimulée. Ont également eu la gentillesse de lire le manuscrit : Pierre Brézellec, Yves Berteaud, Maurice Ansellem et François Recanati. Leurs remarques, tout comme celles de Patricia, m'ont été précieuses. Je leur suis d'autant plus reconnaissante qu'ils avaient tous, comme il se doit, mille autres choses à faire (tout particulièrement Pierre et Yves, qui étaient en train de terminer leurs thèses de doctorat).

 

 

 

                                                                                                                           Catherine Recanati

 



[1] Elles utilisent en outre la bibliothèque Xt qui propose une architecture générale pour l'intégration des widgets.

[2] James Gettys, Robert W. Scheifler, Ron Newman: Xlib - C Language X Interface, MIT X Consortium Standard, X Version 11, Project Athena, MIT.

[3] Merci à Macintosh pour cette icône offerte gracieusement avec la pile de Hypercard, et pour toutes les facilités que ce système offre pour le traitement de texte.

[4] Laboratoire d'Informatique de Paris-Nord (unité de recherche associée au CNRS), Université de Paris XIII.

[5] Non Standard Logics, 57-59 rue Lhomond, 75005 Paris. NSL est la première compagnie européenne à avoir développé des logiciels sous X-Window. Elle propose aujourd'hui des sessions de formation à X-Window, C++ et MOTIF et commercialise un générateur interactif d'interfaces (XFaceMaker) et un éditeur de programmes (WX).