From madore@news.ens.fr
Path: eleves!not-for-mail
From: madore@news.ens.fr (GroTeXdieck)
Newsgroups: ens.forum.informatique.x11
Subject: Re: Livre sur la programmation X
Date: 14 Oct 1998 19:14:24 GMT
Lines: 157
Sender: madore@clipper.ens.fr
Message-ID: <702t6g$ag7$1@clipper.ens.fr>
References: <702gj7$iq2$1@clipper.ens.fr>
NNTP-Posting-Host: clipper.ens.fr
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: clipper.ens.fr 908392464 10759 129.199.129.1 (14 Oct 1998 19:14:24 GMT)
X-Complaints-To: forum@clipper.ens.fr
NNTP-Posting-Date: 14 Oct 1998 19:14:24 GMT
X-Newsreader: Flrn (0.3.0 - 10/98)
Xref: eleves ens.forum.informatique.x11:13

[Attention, très long.]

La programmation en X peut se faire à différents niveaux.  Le plus
bas, c'est le Protocole X, ou comment le client et le serveur
échangent des données sur le socket.  On ne programme (à peu près)
jamais directement au niveau du Protocole, mais il peut servir de le
connaître, de façon à décoder les informations qui passent (par
exemple).

Le niveau au-dessus, c'est la Xlib.  La Xlib propose une traduction
assez directe des requêtes du Protocole en appels de fonctions.  Elle
permet de créer et de manipuler des fenêtres (dans un sens assez
basique : une fenêtre c'est juste un rectangle dans lequel on peut
dessiner, et qu'on peut soulever ou baisser par rapport aux autres -
et on peut aussi imbriquer des fenêtres - la décoration des fenêtres
de plus haut niveau est apportée par le Window Manager), de dessiner
dedans (ce qui se fait par l'intermédiaire de machins appelés graphics
contexts (GC) qui contiennent des informations comme la couleur
courante, la largeur des traits, etc), de recevoir des événements
(clavier, souris, exposition des fenêtres, messages inter-clients,
etc.)

La programmation directe en Xlib est surtout adaptée lorsqu'il s'agit
de faire juste des dessins, ou bien des programmes qui n'ont une
interface utilisateur que très limitée.  Par exemple, le (célèbre) jeu
xlaby est écrit en Xlib pure.  Dès qu'on veut faire un truc un tant
soit peu sophistiqué, la Xlib ne suffit plus.

Le niveau suivant, c'est le X Toolkit, Xt en abrégé.  En fait, il y a
deux choses, les X toolkit intrinsics, et un jeu de widgets.  Le X
Toolkit, c'est un système orienté objets (mais quand même entièrement
en C) qui permet de manipuler des ``widgets'', qui sont des fenêtres
munies de ressources et de méthodes, leur permettant de réagir
``toutes seules'' à certains événements.  Les intrinsics sont le cadre
dans lequel on peut communiquer avec les widgets, et proposent
quelques widgets tout à fait rudimentaires (dont le widget Core, qui
est juste une fenêtre qui ne réagit à rien), et ensuite il y a des
jeux de widgets disponibles.  L'autre (célèbre) jeu xletters est écrit
en Xt : les boutons et les labels en haut de la fenêtre sont des
widgets Athena (de classe Command, Toggle ou Label), et l'espace de
jeu est un widget Core, que le programme manipule avec des moyens plus
bas niveau que le Xt.

Il y a plusieurs jeux de widgets disponibles pour le X toolkit.  Le
jeu Athena, développé au MIT, est un jeu assez petit et pas très
complet, mais qui a l'avantage d'être léger, standard et gratuit.  Le
jeu Motif de l'OSF est très commun pour les applications commerciales
(comme Netscape), et il n'est pas gratuit (toutefois, il en existe un
clone sous GPL, appelé lesstif).  Motif n'est pas un bon exemple,
toutefois, parce qu'il propose en plus de ses widgets tout un tas de
fonctions qui court-circuitent celles du X toolkit, de sorte qu'on ne
voit plus vraiment le X toolkit quand on programme en Motif.  Je le
trouve assez pénible parce qu'ils veulent absolument obliger le
programmeur à suivre certaines conventions parfois contestables (dans
le cadre de programmes bien précis).  Sinon, il y a un jeu de widgets
OpenLook qui est censé imiter le look de SunTools (et qui en est le
remplaçant).

Sinon, il y a d'autres surcouches de la Xlib qui ont été écrites, qui
remplissent les mêmes fonctions que Xt mais qui sont disjoint de lui.
Entre autres gtk.  Si tu veux développer un gros programme, il faut te
demander longuement à l'avance ce qui est le plus adapté.  Mais pour
un petit truc pas compliqué, je crois que Xt+Athena (Xaw) s'impose.
C'est en tout cas la ligne ``canonique''.  Contrairement à une rumeur
répandue, ce n'est pas compliqué, ni même vraiment long, et c'est très
puissant (en trois lignes tu peux rajouter un éditeur presque complet
dans ton programme).  Là où ça devient très Meta-W-ique, c'est quand
on veut créer ses propres widgets.  Mais pour faire juste des petits
boutons, des popups, des menus, des labels (qui peuvent changer, bien
sûr) et des choses comme ça, ce n'est pas nécessaire.

Pour apprendre la Xlib, les pages man peuvent suffire.  Pour apprendre
le X toolkit, ce n'est plus vraiment le cas, et pour les widgets
Athena, il n'y a pas du tout de pages man.  Il y a deux sources
canoniques de documentation.

D'abord, les manuels O'Reilly intitulés ``The Definitive Guides to the
X Window System''.  Il y en a (je crois) douze volumes (sans compter
le nutshell et les guides de différentes extensions de X) :

Volume 0: X Protocol Reference Manual

Volume 1: Xlib Programming Manual

Volume 2: Xlib Reference Manual

Volume 3: X Window System User's Guide

Volume 4: X Toolkit Intrinsics Programming Manual

Volume 5: X Toolkit Intrinsics Reference Manual [+ référence des
widgets Athena]

Volume 6A: Motif Programming Manual

Volume 6B: Motif Reference Manual

Volume 6C: ?

Volume 7: XView Programming Manual [+ référence]

Volume 8: X Window System Administrator's Guide

Programmer's supplement for X11R6

Les volumes sont assez indépendants les uns des autres.  Les volumes
du type ``Programming Manual'' (volumes 1, 4, 6A) sont très clairs et
sont une excellente introduction au sujet traité.  On y apprend
progressivement les bases et les techniques de programmation.  Ils
sont organisés par sujet.  Les volumes du type ``Reference Manual''
(volumes 2, 5, 6B) contiennent un classement alphabétique des
différentes fonctions, variables, types, widgets et autres.  On y
trouve des informations en général plus complètes que les pages man et
des exemples.  En plus, les volumes 5 et 6B contiennent un index
permuté qui permet de faire l'équivalent de man -k sur papier.

Le volume vraiment indispensable, c'est le volume 4.  C'est mon
préféré.  Pour apprendre à faire des programmes même assez complexes
avec le X toolkit, il est nécessaire et suffisant.  Dans le temps, il
y en avait une édition Athena et une édition Motif : dans les deux cas
il est question des intrinsics, mais les exemples étaient donnés avec
l'un ou l'autre jeu de widgets.  Malheureusement, la version Athena
n'existe plus.  Les widgets Athena proprement dits ne sont donc
documentés que dans le volume 5.

Je précise que je n'ai pas d'actions chez O'Reilly.

L'autre source de documentation fiable, ce sont les documents publiés
par le Consortium X lui-même (pardon, le groupe Open maintenant).
Dans les sources de X ils se trouvent dans le répertoire xc/doc/ et
ils sont au format nroff.  Ces documents sont plus à jour que les
manuels O'Reilly (puisqu'ils viennent avec le programme lui-même),
mais ils sont aussi moins lisibles.  Ce sont des documents de
référence, mais ils sont quand même établis avec un souci didactique
évident.  J'ai lu celui sur la Xlib (avant de m'acheter les manuels
O'Reilly qui vont bien) et celui sur les widgets Athena.  Ils sont
assez bons et si on ne veut pas / ne peut pas s'acheter les guides
O'Reilly, ils peuvent s'y substituer.

En salle S, dans l'armoire magique (pour savoir qui a les clefs, man
salle_S), il y a une édition périmée du volume 0, ainsi que les
volumes 1 et 2.  C'est pour cette raison que xlaby est écrit en Xlib
et non avec le X toolkit, parce que Péter et moi avons appris à
programmer en X grâce à ces livres.  Soit dit en passant, ce serait
une bonne idée à mon avis d'acheter le volume 4 et peut-être le 5, ou
au moins d'imprimer les documents du Consortium sur ces sujets
(attendu, je le répète, que les pages man sont insuffisantes).

Sinon, il y a le moyen de prendre un programme existant et de
comprendre comment il fonctionne.  Le problème c'est que trouver un
programme assez petit pour être clair mais assez gros pour contenir
tout ce qu'on veut apprendre n'est pas toujours trivial.  Une autre
solution est de tomber sur un Wonderful Wizard of X quand il est en
salle S et le persuader de t'aider à écrire un premier programme.  Une
fois le premier écrit, c'est très facile de l'améliorer.

Consulte aussi la faq de comp.windows.x

