| Prima Homepage Ravi Homepage Le langage scml et la doc Ravi Le module modxdraw Installation Ravi sur Ensibull - PIA99 ImaLab |
Le module "expérimental" d'interface avec X11 utilisant beaucoup de struct, il a servi de cobaye pour mettre au point la gestion des struct. Les auteurs de ce module sont Christophe et Jerôme. Notre objectif est de faire en sorte que, vu de ravi, une structure comme XEvent ou XFontStruct puisse être traitée comme une classe. On veut donc des déclarations permettant
et cela de facon modulable: certains champs doivent rester privés.
Comme son nom l'indique, la variable *struct-defaults* définit l'interface par défaut. Comme les valeurs standard ne conviennent pas, on les modifie. (export-fields (default-value get)) (is-class #t) (make-constructor #t)
Ceci active le traitement des commandes du préprocesseur à l'intérieur de r-ig. (r-ig est le générateur d'interface) Le fichier "X.h", pour lequel il y a un %%input "X.h" plus loin, contient des définitions de constantes avec des #define, et on voudra exporter ces définitions vers le module x11.
Le génération de XColor suivra les défaut définis plus haut. L'attribut print-function est décrit avec la déclaration classe. Très généralement, les déclarations struct et class sont sensiblement les mêmes.
Seul le champ fid sera exporté. La seule méthode (en plus du constructeur) générée pour la classe XFontStruct sera donc get-fid.
La fonction d'impression de XMotionEvent sera générée (nouveau!). On exporte tous les champs de XSetWindowAttributes en lecture et écriture: méthodes get-champ et set-champ!
Cette déclaration genère une fonction inline de profil
Ce (no-export rien) est bizarre: il positionne le flag d'exportation de facon que tout sera exporté (sauf le symbole rien ...) On saute maintenant les phases %%input pour lesquelles il n'y a rien à signaler.
La phase %%typefunctions provôque la génération des fonctions de gestion des types - dans notre cas, c'est uniquement la fonction PMakeXVisualInfo générée par la déclaration C->Sc. Elle doit être placée avant la phase %%function qui vient ensuite. La suite du fichier x11.ph contient la définition de nombreuses fonctions. On montre juste un détail intéressant: la fonction qui construit une liste Scheme avec des XVisualInfo:
Enfin, à la fin du fichier, la phase %%scheme-input contient ceci:
Cela complète la classe XEvent telle qu'elle sera vue dans Ravi. |