FR 2694105 A1 19940128 FR 9209057 A 19920722 I UTILISATION D'UN LANGAGE A INTERPRETE EMBARQUE POUR LA REALISATION D'UN OUTIL INTERACTIF DE DEFINITION D'INTERFACE UTILISATEURS. La présente concerne l'utilisation d'un langage à interprète embarqué pour la réalisation d'un outil interactif de définition d' interface utilisateurs. Les logiciels interactifs ont des contraintes très spécifiques, dont la plus important et qu'ils peuvent être changés très souvent En effet, pour des raisons ergonomique, il est difficile de développer des programmes d'utilisation aisée en une seule fois La première version est toujours un échec et nécessite de nombreux changement. Par ailleurs, il peut être souhaitable de changer la façon de déclencher une même action, pour s'adapter à un contexte ou un utilisateur différent. Enfin, un bon programme qui dispose d'une mauvaise interface peut connattre un succès commercial mitigé. Le but de l'invention est de proposer un outil de développement d'interfaces particulièrement flexible qui soit utilisable quelque soit l'application Cette interface a par exemple été développé pour le domaine des systèmes UNIX utilisant X/WINDOW et X/MOTIF marques respectivement déposées par le M I T et l'Open Software Foundation. Ce but est atteint par le fait que l'outil interactif de définition d'interface utilisant un langage du type LISP interprété et l'interpréteur (WOOL) est embarqué avec le programme de définition d'interface de l'application et aussi avec l'application produite Selon une autre particularité le langage a une représentation similaire pour les données et les programmes. Selon une autre particularité, le programme de définition coopère avec une bibliothèque d'objets interactifs "Widgets" de commande "X/MOTIF" et une bibliothèque d'objets graphiques I"GO"I. Selon une autre particularité le programme de l'application est constitué d'un mélange d'une part d'instructions en langage C qui est un assembleur portable de haut niveau manipulant des objets et d'autre part d'instructions en langage interprétable. Selon une autre particularité l'interpréteur est orienté objet en langage LISP. Selon une autre particularité l'interpréteur utilise des tableaux. Selon une autre particularité le noyau de l'interpréteur est constitué comme un matrice a deux dimensions, l'une de type contenant les listes, les chaînes, les nombres, l'autre de sélecteur, contenant des fonctions telles que "eval, print, free, add, ". Selon une autre particularité l'interpréteur WOOL comporte un ramassemiettes ou glaneur de cellules (Garbage collector, GC) qui permet de temps à autre et de façon cyclique de balayer la mémoire à la recherche d'objets inutilisés dont l'espace peut être réutilisé, ce qui se fait sans interrompre l'utilisation. Selon une autre particularité, ce glaneur de cellules (Garbage Collector, GC) est incrémental. Selon une autre particularité le glaneur de cellules utilise des compteurs des références et un mécanisme de regroupement des objets par taille pour limiter la fragmentation de la mémoire. Selon une autre particularité les fonctions de l'outil interactif sont décrites sous forme d'un programme interprété. Selon une autre particularité 1 'archivage de la présentation de l'interface éditée et effectué comme celui d'un programme WOOL. Selon une autre particularité la spécification interactive de la géométrie d'assemblage de ces objets est traduite en un fichier utilisable par une application archivable sur disque contenant la présentation d'un interface utilisateur sous la forme d'un programme en langage "WOOL". Selon une autre particularité le comportement dynamique des objets interactifs ("widgets") est défini par un ensemble de procédure de rappel ("callbacks") écrit en langage "WOOL" et qui désigne des fonctions de l'application appelées par la boite à outils "X/MOTIF" lorsqu'un événement d'entrée est reçu par l'un des "widgets". Selon une autre particularité le programme de définition d'interface est extensible par l'ajout de classes de "widgets" effectué en décrivant en langage WOOL les nouveaux types d'attributs de cette classe pour rendre les nouveaux "widgets" éditables. Selon une autre particularité chaque "widget" est pointé par un objet "WOOL" de la classe "WOOL" correspondant à la classe du "widget", les attributs supplémentaires étant attachés directement à l'objet "WOOL". Selon une autre particularité chaque objet WOOL est une structure en langage C autotype, contenant le type de l'objet et l'information du compte de référence. Selon une autre particularité à chaque objet interactif "widget"" est associé à un identifieur "WOOL" unique alloué de façon incrémentale. Selon une autre particularité l'outil interactif de définition d'interface "EGERIA" comporte un programme permettant l'affichage d'un menu de base comprenant une fonction d'édition "edit", une fonction création "create" et une fonction de géométrie "geometry". Selon une autre particularité la fonction création permet la création de tout "widget" à partir d'un menu, et après sélection d'une ligne de menu, change la forme du curseur et un clic souris dans un objet interactif contenant "widget containerl' installera l'objet du type choisi dans cet objet interactif contenant ("container"). Selon une autre particularité la fonction édition permet l'édition des attributs d'un "widget" dans une fenêtre séparée et permet de couper, coller, copier ou dupliquer le jeu des "widgets" sélectionnés ainsi que d'éditer les attributs des "widgets" parent d'un "widget" sélectionné ou de rendre le parent d'un "widget" couramment sélectionné le nouveau "widget" sélectionné. Selon une autre particularité la fonction géométrie "geometry" permet de gérer la géométrie d'un ensemble des "widgets" sélectionnés qui peuvent être alignés par le sommet, par le bas, par le côté droit, par le côté gauche ou avoir leur largeur ou hauteur identique. Selon une autre particularité une fonction édition permet l'affichage d'une fenêtre d'édition des attributs d'un "widget" divisée en deux zones, l'une comportant les fonctions appelées de l'application des procédures de rappel "callback", l'autre comportant les attributs matérialisés par un jeu de sous-éditeurs. Selon une particularité le premier sous-éditeur est constitué d'un bouton bascule pour entrer des attributs booléens. Selon une autre particularité le second sous-éditeur est constitué d'un bouton poussoir affichant un menu affichant les listes des valeurs d'un type énuméré (ex: alignement d'un texte à gauche, à droite ou centré). Selon une autre particularité le troisième sous-éditeur est constitué d'une zone de texte pour la saisie des textes ou des valeurs numériques. Selon une autre particularité la fonction d'éditeur des objets interactifs de type "Shell widgets" de MOTIF, c'est à dire représentant une fenêtre (X/Windows) de premier niveau, est lancée en sélectionnant d'abord le menu de sélection de parent "select parent" et ensuite la fonction d'édition d'attribut "édit attribute". D'autres caractéristiques et avantages de la présente invention apparaîtront plus clairement à la lecture de la description ci-après faite en référence aux dessins dans lesquels: La figure 1 représente de façon schématique l'architecture du logiciel de définition d'interface, La figure 2 représente la fenêtre principale présentée par ce logiciel pour la définition d'une interface, La figure 3 représente une fenêtre affichée par ce logiciel permettant l'édition de forme d'un objet. La figure 4 A et 4 B représente une fenêtre affichée par ce logiciel permettant l'édition des attributs d'un objet interactif, et respectivement des procédures de rappel. La figure 5 représente la fenêtre définie pour une application particulière par le logiciel de définition d' interface. L'outil interactif de définition d'interface ( 1) "Egeria" est constitué comme représenté à la figure 1: d'un éditeur ( 10) permettant de créer ou de modifier une interface, d'une bibliothèque interpréteur "WOOL LIB" ( 11) dont l'édition de lien avec le code de l'application donnera l'application complète, et d'une bibliothèque éditeur "Edit LIB" ( 12) dont l'édition de lien avec le code de l'application donnera un éditeur permettant l'exécution réelle des fonctions de l'application Ces deux bibliothèques "WOOL LIB" et "Edit LIB" sont fournies ensemble dans la bibliothèque "lib Eg a". Cet outil interactif de définition d'interface ( 10) doit être associé, pour fonctionner, avec une bibliothèque d'objets interactifs de commande appelée boite à outils d'objets de commandes, "X/MOTIF" ( 20) dans l'environnement UNIX, et une boite à outils d'objets graphiques constituée par une bibliothèque d'objets graphiques "GO" ( 21) Cette bibliothèque puissante en langage C++ fournit des services graphiques qui ne sont pas disponibles à ce jour dans l'environnement UNIX et qui permettent de créer et de commander des rectangles, des ellipses, des lignes polygonales, des textes éditables en plusieurs fontes et des images. L'outil de définition coopère également avec une librairie Xlib ( 3) qui constitue la couche protocole spécifiant le codage du flux d'informations circulant entre l'application et le serveur de fenêtrage et la couche bibliothèque constituant l'interface de programmation permettant d'accéder au système de fenêtrage. EGERIA ( 10) couvre la couche présentation qui décrit de façon statique l'ensemble des objets constituant une interface, c'est à dire leur hiérarchie et leur attribut, et la couche dialogue qui décrit 1 'aspect dynamique de 1 'interface, c' est à dire son comportement. Enfin une couche supplémentaire ( 5) est constituée par l'application qui comporte la couche sémantique contenant ce qui dans l'application ne concerne pas l'interface. L'interpréteur "WOOL LIB" ( 11) est un petit interpréteur Lisp écrit en langage C dans lequel la mémoire est gérée explicitement par compteur de référence et qui comporte un typage interne permettant la vérification de type, le déclenchement de procédure par envoi de messages conformément à une approche orientée objet. L'interpréteur fournit un ensemble de type de données de base telles que atome, liste, nombre entier, nombre réel, chaine de caractères. L'interpréteur "WOOL LIB" ( 11) utilise des tableaux pour le stockage des listes, ce qui permet d'accélérer le balayage des listes. Cet ensemble de type de base est extensible en ce que l'on peut introduire un nouveau type de base tel qu'un "widget" permettant la manipulation contrôlée des objets "MOTIF" en "WOOL". Chaque objet en "WOOL" est formé comme représenté fig l B, d'une entête qui comporte un pointeur sur la classe qui est le type ( 31) de l'objet et le compteur de référence (Ref Cnt) et enfin d'autres informations (attributs) qui dépendent du type de l'objet Chaque objet "widget" est associé à un identifieur alloué de façon incrémentale. Chaque widget crée par EGERIA se voit allouer un identifieur unique du type "@ 000012 @". L'unicité de cette référence est garantie pour toute la durée de la session EGERIA Si de telles références sont utilisées dans le texte des callbacks en "WOOL" attachées aux widgets, une sauvegarde (ou un couper) suivie d'une restauration (ou d'un coller) maintient la cohérence mutuelle des références. Ce n'est pas le cas si les références mutuelles sont réalisées en utilisant des atomes en "WOOL": dans ce cas un atome n'ayant qu'une valeur, les deux callbacks feraient référence au même widget. L'utilisation des identifieurs uniques de widgets dans le code de dialogue permet de construire des fenêtres dont les comportements sont facilement duplicables Prenons par exemple une fenêtre éditée interactivement et contenant un bouton et un texte Le callback associé au bouton est le suivant: (on Xm Nactivate Callback (widget) (widget- unmap @ 00002 @)) Lorsque le bouton est enfoncé en mode exécution, le texte disparaît (la commande "unmap" ayant pour objet de rendre invisible le widget donné par son argument). Si par une opération de couper/coller on duplique la fenêtre, le comportement sera également dupliqué, EGERIA change le code du callback associé au bouton dupliqué en: (on Xm Nactivate Callback (widget)(widgetunmap @ 00005 @)) si il se trouve que @ 000005 @ est l'identifieur unique généré pour le texte dupliquée. Un tel procédé permet d'éviter d'avoir à changer manuellement le code des callbacks lors d'une duplication. Le type de l'objet permet d'accéder dans le noyau de l'interpréteur "WOOL" (WOOL KERNEL) à une classe ( 110) qui contient une liste de méthodes, chaque méthode (Method) est une fonction telle que par exemple la fonction "Print" Ainsi la fonction "Print" d'un objet sera adaptée au type de l'objet traité Les classes constituent les colonnes du tableau matriciel de la figure l B et les méthodes les lignes du tableau La liste des méthodes embarquée dans l'interpréteur WOOL LIB, c'est à dire livrée avec 'l'éditeur (figure en annexe 6). Dans l'interpréteur "WOOL LIB" ( 11) un atome peut seulement avoir une seule valeur alors que dans les langages Lisp traditionnels, on peut donner à une variable et à une fonction le même nom sans conflit. Cet interpréteur propose un jeu de primitives "Lisp" facilement extensibles. Enfin l'interpréteur "WOOL LIB" est écrit d'une façon orientée objet et les objets sont typés de façon interne à l'interpréteur. Une autre particularité de l'interpréteur est qu'il est réentrant, ceci signifie qu'une fonction lancée par lui peut à nouveau relancer une interprétation qui aura accès à la même pile de données WOOL. Le ramasse-miettes constitué par la vieille méthode de comptage de référence nécessite de prendre un soin supplémentaire quand on créé des structures qui s'auto- référencent L'interpréteur "WOOL LIB" comporte un ramasse- miettes ou glaneur de cellules (Garbage collector, GC) qui permet de temps à autre et de façon cyclique de balayer la mémoire à la recherche d'objets inutilisés dont l'espace peut être réutilisé, ce qui se fait sans interrompre l'utilisation Ce glaneur de cellules (Garbage Collector, GC) est incrémental Le glaneur de cellules utilise des compteurs des références permettant l'allocation d'objets de taille quelconque et un mécanisme de regroupement des objets par taille pour limiter la fragmentation. L'interpréteur "WOOL LIB" met en oeuvre un glaneur de cellules (garbage collector, ou GC), permettant la récupération automatique de la mémoire inutilisée, ce qui permet au programmeur de ne pas se soucier de l'allocation et de la désallocation des objets utilisés Un tel système permet une programmation très rapide, car les programmes n'ont nul besoin de contenir le code pénible à concevoir et à vérifier qui est traditionnellement celui de la gestion explicite de la mémoire utilisée. Le GC de "WOOL LIB" est incrémental en ce qu'il opère de manière continue et sur de faibles volumes de données, contrairement aux GC classiques qui ne sont appelés qu'occasionnellement, pour la récupération d'un volume important de mémoire; dans ce cas, la période pendant laquelle le GC est actif se traduit par un arrêt perceptible de l'interprétation du programme en cours, ce qui peut être très gênant pour l'utilisateur d'un programme interactif Un GC incrémental garantit que l'interprétation se déroule sans à-coup, le surcrott dû au GC étant uniformément réparti sur l'ensemble de l'exécution du programme interprété. La propriété d'incrémentalité du GC de "WOOL-LIB" est obtenue: en maintenant un compteur de référence pour tout objet alloué, celui-ci n'étant libéré que lorsque ce compteur passe à zéro. en considérant que la plupart des objets alloués sont en fait désalloués très rapidement après leur création: de manière régulière (après l'exécution de toute instruction contenue dans une séquence d'expressions), une zone spéciale est balayée, à la recherche de tels objets. Les noms qu'EGERIA donne aux widgets "X/MOTIFS" sont compatibles avec les conventions imposées par X/Window et il X/Motif qui permettent la paramétisation des interfaces (fichier X default, option de lancement des programmes). Le code contenu dans EGERIA contient les références nécessaires à l'édition de liens. Dans l'utilisation d'EGERIA avec la boite à outils "X/MOTIF" ( 20) on place nécessairement dans le code d'EGERIA ( 10): la description des types de bases ("widget", procédure de rappel "callback", etc, par exemple Xm Top Level Shell cf( 40) annexe 4), les classes d'objets de l'interface (push button, scrollbar, menubar, etc) et les primitives (toolkit-init, "widget" create, etc, par exemple on Xm Ninput Callback du "widget" Xm Drawing Area cf( 432) annexe 4) les types dérivant de types de base (énuméré, dimension, etc, par exemple Xm Nwidth de Xm Top Level Shell) les attributs propres à chaque classe Des fonctions de haut niveau écrites à partir des primitives seront placées dans le fichier externe ( 14) Ceci permet de rajouter de nouvelles classes d'objets de l'interface. La structure d'EGERIA ( 10) se caractérise par une boucle principale de lecture de l'entrée qui distribue les évènements (clic souris, action clavier) reçus aux différents composants du programme Un exemple d'une telle boucle ( 511 annexe 5) figure dans l'exemple d'application donné par la suite dans les annexes 4 et 5. L'interprète "WOOL LIB" ne contient pas la boucle principale de l'application qui reste contrôlée par l'application ( 5). Cette boucle est chargée d' appeler la fonction de lecture motif puis de distribuer l'entrée reçue Cela signifie qu'il existe un niveau de programmation o l'on peut décider pour chaque évènement X/Window et donc pour chaque événement "Motif" de 1 ' entité chargée de traiter 1 ' événement Ce peut être "Motif" qui appellera les procédures de rappel "callbacks" définis pour le ""widget"" associé à leévènement ou bien un autre composant tel qu'EGERIA. Dans le cas défini par EGERIA, une "callback" telle que par exemple "call-back dog:draw" écrite en Lisp (cf 435 annexe 4) ou "call-back dog:step" (cf 4412 annexe 4) est formée d'un appel du point d'entrée principal ( 530 respectivement 531 annexe 5) de l'interpréteur "WOOL LIB" qui va exécuter la méthode associée ( 523 respectivement 525 annexe 5) écrite en langage C et rend la main aussi vite que possible. Enfin l'utilisation d'un système hybride fonctionnant en langage Lisp et en langage C pose le problème des conversions systématiques des paramètres des fonctions de C vers Lisp et de Lisp vers C La solution était de faire utiliser par le système Lisp les structures naturelles de C autant que possible, mais en les préfixant avec une entête en langage "WOOL" (par exemple 522 annexe 5). La figure l B représente la structure du noyau (WOOL KERNEL) qui est organisée selon un tableau dont chaque colonne correspond à un type d'objet Un objet étant référencé par son type qui permet ainsi d'accéder à la méthode de traitement des messages que peut traiter l'objet. Dans le mode execution, l'interpréteur "WOOL LIB" ( 11) a essentiellement pour tâche de charger le fichier ( 13) de description d'interface,par exemple constitué par l'annexe 4, lorsque cette interface a été élaborée "WOOL LIB" execute ce fichier de description d'interface ( 14) comme un programme en langage WOOL pour reconstruire l'interface de l'application et ensuite interprète tous les évènements survenant en provenance de la boite à outils MOTIF pour, soit réagir de façon purement dynamique dans l'interface sans réveiller l'application, soit envoyer l'évènement à l'application par l'intermédiaire d'un point d'entrée de celle-ci. L'éditeur EGERIA ( 10) possède principalement deux'modes de fonctionnement, l'édition et l'exécution. Le mode "édition" est celui dans lequel on peut librement modifier l'interface de l'application et le mode "exécution" permet de tester le comportement de l'interface. Enfin, si l'éditeur utilisé résulte de l'édition de lien de la bibliothèque éditeur ( 12) avec l'application ( 5) alors les fonctions de l'application sont effectivement appelées. Pour l'édition des objets, on retrouve les fonctions classiques créer, couper, copier, coller, éditer, les attributs, défaire, avec toutefois des nouveautés importantes qui sont l'édition des formes (FORM EDITOR), l'édition des attributs (Attribute Editor) et la hiérarchie des objets Les objets ("widget") peuvent se classer en deux catégories, les objets élémentaires et les contenants ("container widgets") qui peuvent contenir plusieurs objets Parmi les contenants, certains comme les objets interactifs père ou coquille ("shell widgets") n'ont pas de contenant et sont créés au premier niveau (exemple "Top level Shell" annexe 4). Un widget MOTIF FORM est un widget "contenant" dont les fils sont automatiquement positionnés ou retaillés lorsque le widget FORM est retaillé La spécification interactive du comportement des fils d'un tel widget est réalisée à l'aide d'un formulaire spécial, dit éditeur de forme "FORM EDITOR", qui permet de définir de manière aisée l'ensemble des comportements fournis par MOTIF. Le comportement d'un fils du widget FORM (par exemple Xm Push Button ( 321, figure 3)) est spécifié en donnant la valeur d'un attachement pour les 4 bords du widget, respectivement désignés par top ( 322), right ( 323), left ( 324), bottom ( 325) Un attachement peut être NONE (pas d'attachement ( 323)) FORM (attachement par rapport au bord correspondant du FORM ( 322,324)), POSITION (attachement proportionnel à la dimension horizontale ou verticale du widget FORM ( 3262)) ou WIDGET (attachement relatif à un widget fils du même FORM ( 325)). Avec chaque attachement, il est possible de spécifier une distance supplémentaire ( 3261)(offset) de décalage par rapport à la position spécifiée dans la zone d'édition ( 3262). Conformément à la figure 3 représentant le formulaire d'édition de forme "FORM EDITOR", quatre menus sont affichables pour spécifier le type d'attachement du widget fils considéré Pour chaque attachement, une flèche ( 328) interactive montre quel attachement est "courant" La sélection d'un attachement quelconque se traduit par la mise à "courant" de l'attachement positionné. Pour éditer un fils de FORM à l'aide de cet éditeur, il convient de sélectionner le widget et d'utiliser la commande d'édition de forme "FORM EDITOR" ( 2022) activable à l'aide du menu "Edit" ( 202) La classe, le nom et l'identifieur du widget apparait alors dans une zone de texte ( 321)de la fenêtre de l'éditeur de FORM, qui visualise alors les caractéristiques du widget qui concernent son comportement comme fils du widget FORM. Deux zones de texte décrivent le décalage ( 3261) (offset) et la position ( 3262) (lorsque l'attachement est POSITION) du widget correspondant à 1 ' attachement courant Lorsque l'attachement courant change, ces zones de texte sont mises à jour Lorsque l'attachement n'est pas POSITION, la zone de texte marquée "position" est inactive, et son titre apparait en grisé, comnme sur la figure 3. -15 Il est possible de déplacer ou de retailler interactivement avec la souris le widget fils; dans ce cas la commande est exécutée comme si elle avait été passée à partir de l'éditeur FORM, et les zones de texte correspondant au décalage et/ou à la position sont mises à jour. L'éditeur permet ainsi la création d'objets élaborés (container "widget") qui peuvent se composer de plusieurs objets mais qui sont considérés comme des objets simples, c'est à dire qu'on peut les coller, les couper et les copier en une seule opération. Tous les objets sont réalisés à l'aide de la fonction création ( 203, figure 2) "create" du menu principal ( 200) qui permet d'installer un objet dans un objet container, après avoir sélectionné un objet par un clic souris Ce menu principal ( 200) comporte en plus les fonctions classiques fichier ( 201) "file" et aide ( 206) "Help" et les fonctions spécifiques "EDIT", "t CREATE", "GEOMETRY", "TOOLS". L'édition de l'apparence de l'interface est effectuée soit directement à la souris en modifiant la taille ou la position des "widgets" à l'intérieur de leur contenant, soit en utilisant des formulaires contenant les différents attributs d'un ou plusieurs objets Pour cela, on fait appel à la fonction ( 202) "Edit" (édition) qui permet l'édition des attributs d'un objet dans une fenêtre séparée et permet d'éditer les attributs des objets père d'un objet sélectionné et également de couper, coller, assembler, copier un jeu d'objets sélectionné Enfin l'éditeur d'interface permet de modifier la géométrie de la présentation en faisant appel à la fonction ( 204) "geometry" (géométrie) qui permet par exemple d'aligner un ensemble d'objets sélectionné par le sommet, le côté ou la base, ou de faire varier les dimensions de l'ensemble de ces objets, soit en largeur, soit en hauteur. Le menu création ( 203) "CREATE" comporte comme représenté à la figure 2, une possibilité de choix parmi les différents objets disponibles dans la librairie X/MOTIF Ces objets sont constitués par une famille de boutons ( 2030), un contenant (container) ( 2032), un objet élaboré ( 2033), un objet simple ( 2031), un objet du type message ( 2034), un objet du type dialogue ( 2035), un objet du type menu ( 2036) et un objet du type contenant ( 2037) ("Shell") qui lorsqu'il a été sélectionné fait apparaître une deuxième carte de menu permettant de choisir parmi les attributs niveau maximum ( 2371), contenant ( 2372) (Shell), contenant privilégié ( 2373) (override Shell), contenant transitoire ( 2374) (transient Shell), contenant général ( 2375) (Top level Shell), contenant d'application ( 2376) (Application Shell). La partie attribut est réalisée avec un jeu de sous-éditeurs. Ces sous-éditeurs sont automatiquement créés par lecture d'une description des classes de la librairie (il) "X/MOTIF". Il y a trois sortes de sous-éditeurs Un sous-éditeur bouton bascule pour entrer des attributs booléens, un sous éditeur bouton poussoir affichant un menu pour des types énumérés et un sous éditeur zone de texte pour des valeurs textuelles ou numériques, telles que celles figurant en annexe 4 sous la référence ( 436). La sélection dans la barre de menu de la fonction "edit"( 202) permet d'éditer par la fonction 2021 "Attribute Editor" les attributs d'un "widget" Cette solution provoque l'affichage d'une fenêtre du type de celle représentée à la figure 4 A. Cette sélection provoque l'affichage d'une fenêtre du type de celle représentée à la figure 4 A qui comporte un menu constitué de plusieurs cartes ( 311, 312) superposées accessibles par des boutons ( 3110 à 3114 et 3121 à 3124) jouant le rôle d'onglet Chaque carte regroupe les attributs correspondants à une catégorie de " 1 widget" Ces catégories sont l'apparence lancée par le bouton 3110, la géométrielancée par le bouton 3111, le comportement lancé par le bouton 3112, les contraintes lancées par le bouton 3113, et les procédures de "callback" lancées par le bouton 3114 Ceci permet à l'utilisateur d'accéder de manière commode à un attribut parmi les très nombreux attributs fournis par le logiciel X/MOTIF. Sur la figure 4 A, le bouton de la carte correspondant à l'apparence 3110 est représenté en avant par rapport aux autres boutons 3111, 3112, 3113,3114 représentés enfoncés, c'est à dire en arrière plan L' éditeur d'attribut apparence correspondant à ce bouton représenté en avant plan a été activé par un clic souris sur la zone du bouton, et affiche la fenêtre correspondante ( 313) pour permettre l'édition d'attributs Dans le cas de la figure 4 A, ce sera la fenêtre dont la partie 313 comporte les attributs permettant de définir l'apparence du "widget" en cours d'édition Ces attributs sont constitués de zone de texte permettant de définir dans la zone 3130 l'arrière-plan, dans la zone 3131 l'arrière- plan de la matrice de points, dans la zone 3132 l'épaisseur de l'ombre de défaut de bouton, dans la zone 3133 la profondeur, dans la zone 3135 la liste de police de caractères, dans la zone 3136 l'avant-plan, dans la zone 3137 l'étiquette de la matrice de points, dans la zone 3138 l'étiquette de la chaîne, ici en l'occurrence Xm Push Button, dans la zone 3139 le type d'étiquettes, et dans la zone 31390 l'apparition en tant que défaut. Les attributs affichés dans la partie de fenêtre 313 sont les attributs visibles qui apparaissent lorsque le bouton 3101 portant l'étiquette "courant" (CURRENT) est enfoncé. La définition des attributs se fait de façon classique, en venant cliquer avec la flèche souris la zone de texte de l'attribut souhaité et en introduisant au clavier les valeurs textuels ou numériques Une fois chaque attribut définis, la sélection de bouton 3123 portant la commande applique (Apply) permet d'effectuer la validation globale de tous les attributs modifiés au cours d'une itération avec la feuille d'édition d'attributs La sélection du bouton 3122 portant la commande démarque (unmark), permet d'annuler toutes les modifications faites avant une validation globale La sélection du bouton 3121 portant la commande marque permet de valider les modifications sans passer par une validation globale. La sélection du bouton 3124 portant la commande vue (view) permet de faire passer un nom d'attribut de la liste des attributs visibles à la liste des attributs invisibles et réciproquement. L'enfoncement de ce bouton ( 3124) par clic de la flèche souris sur la zone du bouton déclenche au sein de l'éditeur d'attributs une fonction d'affichage de la fenêtre 3110 permettant de visualiser à la fois les attributs visibles représentés dans la zone 313 et les attributs invisibles représentés dans une zone 314 de la fenêtre 3110 Cette fenêtre 3110 comporte également des boutons fonctionnels permettant de valider par le bouton OK la sélection effectuée, d'invalider par le bouton 316 la sélection ou les modifications apportées, de déplacer par le bouton 317 un attribut de la zone visible à la zone invisible ou vice versa, de charger par le bouton 318 des attributs et par le bouton 319 de sauvegarder la sélection ou les modifications de sélection qui ont été apportées. Pour le bouton (view ail attributes) une commande additionnelle 310, disponible dans la feuille d'édition d'attribut (view all attributes) sous la forme d'un bouton radio permet de ne pas tenir compte de la spécification de la visibilité et d'afficher tous les attributs dans la fenêtre 313 Lorsque l'on sélectionne le bouton radio courant 3101, seuls les attributs portant la spécificité visible sont affichés dans la fenêtre 313. La sélection de la carte "geometry" par le bouton 3111 permet de lancer une fonction d'édition permettant d'afficher les attributs de sélection et de modification de la géométrie d'un widget La carte "comportement" par l'activation du bouton 3112 permet de lancer une fonction d'édition permettant d'afficher les attributs définissant le comportement d'un widget et de définir quel sera son comportement en fonction des attributs sélectionnés. La sélection du bouton 3113 active la fonction d'édition des contraintes et permet d'afficher les attributs des contraintes attachés à un objet déterminé. Selon le type d'objet des éditeurs sont inactivés. Par exemple, pour les boutons poussoir dont les attributs sont définis dans la fenêtre 31, la fonction d'édition des contraintes et de validation globale sont inactives et dans ce cas, le titre apparait en grisé comme représenté dans les boutons 3113, 3123. Enfin, la sélection du bouton 3114 permet de lancer la fonction d'édition de procédures de rappel. La partie procédure de rappel "callbacks" est simplement une zone de texte o il est possible d'éditer les procédures de rappels "callbacks" de l'objet interactif ""widget"" Cette partie est représentée de façon agrandie à la figure 4 B Au- dessus de la zone de dialogue concernant les procédures de rappels "callbacks" se trouve une boite de texte permettant d'afficher les informations sur le "widget" édité telles que son nom et son numéro de référence Une procédure de rappel "callback" est ici codée en langage WOOL Un modèle de base est donné pour chaque procédure de rappel "callbackld possible d'un "widget" Par exemple pour éditer le code WOOL exécuté quand un bouton poussoir est cliqué, le modèle de base est (on Xm N activate callback (widget)) Un pseudo "callback" Xm N create callback a été ajouté, il est appelé par EGERIA quand une description d'interface ( 14) est chargée, après que tous ses "widgets" fils créés dans le même fichier de description aient été créés Des initialisations additionnelles peuvent être faites à l'intérieur de Xm N create callback. La sélection d'objets parent (tel que par exemple: Xm Drawing Area qui est le parent de Xm Frame, Xm Label, Xm Scale et de Xm Separator de l'annexe 4) n'est pas; possible directement de façon à éditer les attributs d'un objet "Shell" ou d'un objet général "Top level widget" (Xm Top Level Shell), il est nécessaire d'utiliser la commande "Select parent" et ensuite de lancer l'édition d'attributs. Les objets interactifs créés ("widgets") dépendent beaucoup de l'état courant du fichier X/defaults, les noms donnés aux objets peuvent être utilisés pour positionner les valeurs par défaut des objets créés si ces valeurs n'ont pas été fixées avec l'éditeur Un jeu minimum et utile de valeurs fixées par défaut qui peut être utilisé par EGERIA peut être celles définies en annexe 1 dans le fichier X/Defaults ( 13). Une table de traduction contenue dans le fichier X/defaults peut également servir à activer des fonctions internes à Egeria, à partir d'évènements UNIX Ainsi l'évènement ( 21) de l'annexe 2 permettra de sélectionner avec le bouton gauche et de déplacer le ou les "widget"(s) sélectionné(s) par le pointeur La fonction "Eg Select" permet la sélection d'un "widget" sous le pointeur et la fonction Eg Move permet le déplacement du "widget" sélectionné Le bouton gauche de la souris actionné en même temps que la touche "Shift" permet comme représenté par la ligne 22 de l'annexe 2, d'ajouter l'objet désigné à la liste des objets sélectionnés En effet la fonction Eg Select or Un Select, permet de sélectionner ou de désélectionner un objet désigné par le pointeur Cette fonction travaille comme une bascule Enfin l'actionnement du bouton de droite de la souris produisant l'évènement indiqué à la ligne 23 en UNIX déclenchera la fonction Eg Set Select qui permet de tracer un rectangle interactif et de sélectionner les objets situés à l'intérieur du rectangle La zone rectangulaire est définie par deux coins, l'endroit o le bouton est enfoncé et l'endroit o le bouton est relaché. Une deuxième table de translation minimale définie à l'annexe 3 est également installée dans le fichier X/Defaults pour permettre l'activation des principales fonctions d'édition à partir du clavier Cette table fait appel à la fonction Eg WOOL Exec qui exécute une expression en langage WOOL qui est la valeur de l'atome donné en tant qu'argument Les atomes préfixés par le terme "Custom" sont définis dans le fichier Edcustom G Ceci est la façon standard de personnaliser le comportement de base de l'éditeur. Un exemple d'application de l'éditeur d'interface décrit en relation avec les figures 1 à 4 sera donné ci-après pour l'édition d'une interface permettant d'afficher comme représenté à la figure 5, un chien ( 45) en train de courir en permettant par action sur un bouton "One step" ( 42) de faire avancer le chien d'un pas, par action sur un bouton "Quit" ( 43) de terminer l'exécution de l'application, par action sur bouton "Start" ( 40) de faire courir le chien, à une vitesse modulable grâce à un potentiomètre à glissières ( 44), et par action sur un bouton "stop" ( 41) d'arrêter la course du chien - L'application comportera plusieurs images successives mémorisées dans une mémoire "Pixmap pdog" ( 52) qui seront visualisées en les déplacant dans une aire de dessin "Drawing Area" Pour éditer l'interface, il convient d'abord de créer les "widgets" en utilisant le menu "create" Tout d'abord, il faut créer explicitement un "widget Shell", qui sera dans notre exemple un "widget" général, un "top level", c'est à dire "Xm Toplevel Shell" ( 40) qui a pour identificateur "@ 00000 l@",pour parent "eg:widget-root" et contenant un autre objet ( 41) "Drawing Area" Ensuite on créera les autres "widgets" qui comporteront tous un identificateur, des attributs, un éventuel nom dans EGERIA "eg:name",par exemple "speed-widget"( 4510) et un éventuel script, par exemple celui ( 470) du bouton poussoir "quit" ( 47) A chaque fois, l'éditeur demandera d'indiquer le père et la position Nous créerons une "Drawing Area" o l'application dessinera le chien à l'intérieur d'une fenêtre de déroulement "scrolled window" ( 46), définie à l'annexe 4 par l'objet "Xm Scrolled Window" ( 462) et pourvue des barres de défilement "scroll bars" 47,48 Pour créer les objets, l'éditeur dispose des fonctions connues, couper, coller, copier et la liste des objets créés ou sélectionnés se manipule grâce, au bouton de gauche qui permet de sélectionner ou de déplacer le ou les "widget"s, au bouton de gauche qui lorsque la touche "Shift' est enfoncée permet d'ajouter l'objet désigné à la liste des objets sélectionné, au bouton de droite de la souris qui permet de sélectionner tous les Ilwidgets" à l'intérieur d'une zone rectangulaire définie par deux coins, à savoir l'endroit o le bouton est enfoncé, et l'endroit o il est relâché A l'opération "select parent" du menu "edit", le "widget" sélectionné devient le père de celui qui été sélectionné, ceci est indispensable pour sélectionner un "widget" caché par son ou ses fils, par exemple un" Shell" ou un menu. Lorsqu'un objet est sélectionné, sa classe et son numéro d'identification et éventuellement son nom apparaissent dans la fenêtre principale d'EGERIA, comme représenté à la figure 2. Les "widgets" peuvent ensuite être changé de position et de taille à l'aide de la souris en actionnant le bouton de gauche pour sélectionner et déplacer le ou les "widgets" sélectionnés, ce qui fait intervenir les évènements de la ligne 21 de l'annexe 2. L'action sur le bouton de droite de la souris pour tracer un rectangle dans lequel les objets seront sélectionnés, fait intervenir les commandes de la ligne 23 de l'annexe 2. L'action sur le bouton du milieu de la souris, comme indiqué par la ligne 24 de l'annexe 2 permet de changer la taille d'un ou plusieurs "widgets". Il est également possible de changer la position et la taille de plusieurs objets à la fois, grâce à des opérations du menu "Geometry", qui comporte une opération "align" permettant le déplacement des objets sélectionnés pour qu'ils soient alignés sur une même verticale à gauche, ou au milieu, ou à droite, ou sur une même horizontale, en haut, ou au milieu, ou en bas. Une opération "Resize" de ce menu "Geometry" permet de donner la même taille aux objets sélectionnés en largeur ou en hauteur, ou une taille mini ou maximum L'opération "Distribute" permet de répartir à intervalle régulier les objets sélectionnés, ils peuvent être répartis horizontalement ou verticalement à l'aide du rectangle les englobant ou à l'intérieur de leur père. L'édition des attributs s'effectue en sélectionnant l'opération ( 2021) "Attribute" du menu "Edit" pour faire apparaître une feuille de données contenant tous les attributs comme représentée à la figure 4 A. Certains attributs ne peuvent être modifiés après la création du "widget" C'est le cas par exemple des attributs Xm Nscrolling Policy et Xm Nscroll Bar Display Policy. Nous appelons "script" le code décrivant la réponse à l'ensemble des callbacks nous allons détailler les scripts associés a chacun des "widgets ces scripts sont écrits en WOOL. Le Pushbutton "Quit" permet de quitter l'application Pour indiquer qu'en réaction au message "Xm Nactivate Callback" le bouton réagira en appelant la fonction "exit", il suffit d'écrire dans le script: (on Xm Nactivate Callback(widget)(exit)). On notera que le paramètre "widget" est disponible il indique le "widget" couramment activé, c'est à dire ici le bouton poussoir "Push Button Quit" Le paramètre call data n'est pas disponible. Le bouton poussoir "Pushbutton Step" fait avancer le chien d'un pas Pour indiquer qu'en réaction au message Xm Nactivate Callback le bouton réagira en appelant la "callback" "step", définie dans l'application, on écrit dans le script: (on Xm Nactivate Callback ("widget" (call-back dog:step 19)) Le nombre 19 passé en argument se retrouvera dans le paramètre clientdata de la "callback" C correspondant à step "Step Callback" ( 525) Il indique par l'instruction C:int movement=(int) client-data ( 526); de combien de pixels avancer le chien La fonction C correspondante "Draw Callback" ( 523) pour dessiner le chien est présentée plus loin. Le chien est dessiné dans une aire de dessin "Drawing Area" Il est redessiné chaque fois que nécessaire en appelant la "callback" draw définie dans l'application: (On Xm Nexpose Callback (widget) (call-back draw)) (cf annexe 4 réf 430) Lorsque ce "widget" est crée, on initialise l'application en appelant la fonction init par l'instruction "call-back init"( 4311) qui définit les "callback" de l'application draw et step, et qui en faisant appel au code C: "Init Callback(widget,client-data,call-data) et Init Pixmaps" ( 532) charge les images de point (pixmaps) correspondant aux différents états du chien par la procédure "Init Pixmaps" définie en ( 5221) De plus on mémorisera la taille de l'aire de dessin "Drawing Area" dans la variable window-width pour que la fonction step fasse repartir le chien de la gauche chaque fois qu'il sort de l'aire de dessin "Drawing Area" sur la droite. (on Xm Ncreate Callback ("widget") (call-back init) (setq window-width (attribute-get "widget" Xm Nwidth))) (cf annexe 4 référence 431) La variable window-width est mise à jour chaque fois que la largeur du "widget" change par l'instruction WOOL: (on Xm Nresize Callback ("widget") (setq window-width (attribute-get "widget" Xm Nwidth))) (cf annexe 4 réf 433) Enfin on nomme ce widget drawing-area ( 434) pour l'identifier depuis le code C qui crée les pixmaps cela se fait avec la fonction Eg Variable Get Value ("drawing-area",) cf annexe 5 référence 522 il aurait été plus simple de passer le "widget"l en paramètre d'init mais cela nous permettra de voir (plus loin) comment consulter une variable LISP depuis le code C. Le Push Button "START" fait courir le chien Pour cela on utilise la fonction work-proc ( 441) qui mémorise une expression qui est ensuite évaluée chaque fois qu'il n'y a pas d'évènement à traiter provenant de X Cette expression doit être évaluée en peu de temps Dans notre exemple, elle incrémente un compteur ( 4411) et fait avancer le chien grâce à la fonction step ( 4412 ou 4413)) lorsqu'une certaine valeur est atteinte L'incrément est la valeur d'un "widget" Scale ( 451) identifié par un numéro géré par EGERIA, ici @ 000010 @. L'identificateur d'un "widget" est visualisé quand celui-ci est sélectionné Il peut facilement être copié et collé Sa classe et éventuellement son nom sont aussi affichés. (on Xm Nactivate Callback ("widget") (work-proc (progn (setq count (+ count (attribute-get @ 000010 @ Xm N Int-value))) (if (> count 100) (setq count ( count 100)) (call-back step 19)))))) Il est important de noter que l'attribut consulté est Xm N Int- value et non pas Xm Nvalue Ceci permet de lever l'ambigiité due (en WOOL) au fait que Xm Nvalue (pour MOTIF) désigne un entier pour un Xm Scale et une chaine de caractères pour *Xm Text. Dans ce dernier cas il faudrait utiliser Xm N String-value. Le compteur est initialisé lors de la création du "widget": ( on Xm Ncreate Callback (widget) (setq count O)) Le Push Button "Stop" permet d'arrêter la course du chien. Cela se fait aussi par un appel à work-proc cf 442: (on Xm Nactivate Callback (widget) (work-proc ()) - La sauvegarde de l'interface s'effectue par l'opération "Save" du Menu "File" Par la suite, le fichier ainsi sauvé peut être relu par l'opération "Load" Quelques remarques sur les conventions de noms s'imposent-: Les fichiers propres à EGERIA sont préfixés par eg- I 1 est conseillé de donner au fichier contenant l'interface d'une application le nom de cette application suffixé par eg Dans notre exemple nous appellerons dog eg l'interface générée par EGERIA et dog l'exécutable. Si cela ne convenait pas, il faudrait indiquer explicitement le nom du fichier à charger dans la source C de l'application (dans un paramètre de la fonction Eg Main). Le reste de l'application s'écrit en C Toutes les librairies utilisées sont écrites en C cf annexe 5 Si ce langage est C++, des modifications aux fichiers à inclure s'imposent. Pour tout autre langage il faudrait générer les fichiers de déclaration des types, des constantes et des fonctions. Le source complet de l'exemple dog c est en annexe 5 Nous allons en présenter les principaux éléments. Il faut d'abord inclure les déclarations de la boite à outil "toolkit" EGERIA fournit le fichier "eg_toolkit h contenant toutes les déclarations publiques du "toolkit" MOTIF (cf 50): #include "egtoolkit h". Il faut ensuite inclure les déclarations d'EGERIA Les fonctions ainsi disponibles sont décrites dans le manuel de référence: #include "egeria h". On donne le contrôle de l'exécution à EGERIA grâce à la fonction Eg Main. Eg Main (layers, Xt Number(layers), argc, argv, options, Xt Number(options), MODE_EXECUTION, Init Callback, NULL, Null, "EGPATH"); } Le paramètre le plus important, Init Callback ( 5110), enregistre la "callback" qui initialise l'application et enregistre les autres callbacks Cette "callback" est appelée explicitement depuis 1 'interface par (call-back init). Il est conseillé de reprendre le code donné en exemple dans dog C Seules les callbacks seront modifiées pour d'autres applications. La fonction Eg Main et ses paramètres permet d'effectuer les initialisations nécessaires et appelle ensuite Eg App Main Loop qui boucle sur l'appel à Xt App Next Event et Eg Dispatch Event. La "callback" Init Callback a deux rôles: initialiser l'application et enregistrer les liens entre l'interface et l'application. Côté application, dans notre cas, on crée les pixmaps correspondant aux différentes étapes de la course du chien dans la fonction Init Pixmaps. Côté lien avec l'application, on enregistre sous les noms draw et step les callbacks Draw Callback et Step Callback grâce à la fonction Eg Callback Define on fait aussi de window-width une variable LISP un peu particulière car elle partagera l'adresse de la variable C windowwidth. void Init Callback(widget, clientdata, calldata) Widget widget; /* UNUSED */ caddrt client data /* UNUSED */ caddrt call data /* UNUSED */ { Init Pixmapso(); Eg Callback Define ("Draw", Draw Callback); Eg Callback Define( "step", Step Callback); Eg Pointer Define ("window-width", &window Width); } void Draw Callback(widget, clientdata, calldata) Widget widget; /* UNUSED */ caddr t client data /* UNUSED */ caddrt call data /* UNUSED */ X Copy Area(DISPLAY,pdoglcurrentl,drawing Area Window, gc, 0, 0, wdoglcurrentl, Hdoglcurrentl, xdog, ydog); } void Step Callback(widget, client_data, call_data) Widget widget; /* UNUSED */ caddr_t client_data /* movement */ caddrt calldata /* UNUSED */ { int movement = (int) client_data; X Clear Area(DISPLAY, drawing Area Window, xdog,ydog,WIDTH, HEIGHT,False), xdog + = movement; if (movement > 0){ if (xdog ≥ window Width) xdog = 0; current++; if (current > 5) current = 0; } else{ if (xdog dessinés on consulte donc la variable LISP drawing-area. if (l Egvariable Get Value ( "drawing-area", eg Class Widget, &drawing Area)) { fprintf(stderr, "drawing-area must be specified\n"); exit (-1); } On pourrait aussi modifier la valeur d'une variable LISP depuis C Il faut noter que ce principe se retrouve dans d'autre systèmes qui ne sont pas forcément basés sur un interpréteur LISP Cela signifie qu'une application utilisant ces fonctionnalités n'est pas dépendant d'EGERIA. Après avoir compilé l'application, il faut en faire l'édition de lien avec la librairie EGERIA lib Eg a et avec les librairies nécessaires pour OSF/MOTIF c'est à dire: lib Xm a, lib Xt a et lib Xll a. Le programme obtenu permet d'éditer l'interface s'il est exécuté avant l'option -edit: EGPATH =:/user/local/lib/Xll/eg dog -edit&. Toutes modifications à la portée de l'homme de métier fait également partie de l'esprit de l'invention. ANNEXE 1 EGERIA*background: EGERIA*Xm Test * background: EGERIA*Xm List*background: EGERIA*foreground: black Antique White 3 Antique White 2 Antique White 2 EGERIA*Fon List: -adobe-times-bold-r*-*-12-*-75-*-* *- * EGERIA*Xm Toggle Button indicator Size: 18 EGERIA*selection Policy: SINGLESELECT EGERIA* list Size Policy: CONSTANT EGERIA*Xm List visibleltem Count:7 ANNEXE 2 "Shift"Ctrl : "Shift"Ctrl : "Shift"Ctrl : "Shift"Ctrl : "Shift"Ctrl : Eg Select( Eg Move(O\n\ 21 Eg Select() Eg Resize O\n\- _ 24 Eg Select Or Unselect O\n\-% 22 Eg Select Or Unselect O\n\ Eg Select O)\n\ 23 ANNEXE 3 EGERIA*object translations: #override\ e: p: x: c: v: d: Eg Wool Exec(custom:Edit)\n\ Eg Wool Exec(custom:Edit Parent)\n\ Eg Wool Exec(custom:Cut)\n\ Eg Wool Exec(custom:Copy)\n\ Eg Wool Exec(custom:Paste)\n\ Eg Wool Exec(custom:Delete) ANNEXE 4 Interface description generated by EGERIA for toolkit MOTIF _ _ _ _ _ (eg:layer-check 'Egeria 2000036) (eg:layer-check 'Xt 11004) (eg:layercheck 'MOTIF 1001) (Idi:interface (Idi:widget Xm Top Level Shell ( I parenteg:widget-root ident"@ 000001 @" I eg:name"" I ) I 40 ( 'I Xm Nwidth 763 t Xm Nheight 303 I Xm Nx 30 | Xm Ny 411 ) () () (Idi:widget Xm Drawing Area ( I ident"@ 000002 @" eg:name"" ) I (c g 41 Xm Nborder Widthl Xm Nx O Xm Ny O Xm Nwidth 765 Xm Nheight 303 Xm Nmargin Width O O ) (> (> ANNEXE 4 (suite) (Idi:widget Xm Scrolled Window (I ident"@ 000003 @" eg:name"" ) I Xm Nscrolling Policy Xm AUTOMATIC Xm Nscroll Bar Display Policy Xm ASNEEDED Xm Nx 21 Xm Ny 39 Xm Nwidth 718 Xm Nheightl 48 O () ( (Idi:widget Xm Drawing Area _ 434 ( ident"@ 000005 @" eg:name"drawing-area" 4311 script"(on Xm Ncreate Callback (widget) \n ' 431 {call-back init)\n (setq dog:window- width (attribute-get widget Xm Nwidth")\n\ l (on Xm Ndestroy Callback (widget))\n\ (on Xm Nhelp Caliback (widget))\n\ (on Xm Nresize Callback (widget) \n\ 1433 (setq dog:window-width (attribute- get widget Xm Nwidth)))\n\ J (on Xm Nexpose Callback (widget) \n\ 'm 430 (call-back dog:draw))\n\ 435 (on Xm Ninput Callback (widget))\n\ _ 432 ( Xm Nborder Width O Xm Nx O | Xm Ny O 436 Xm Nwidth 71 1 Xm Nheightl 63 I Xm Nresize Policy Xm RESIZE_NONE ) () () )) ANNEXE 4 (suite) ) (Idi:widget Xm Frame { ident"@ 000006 @" eg:name"" ) I (s I 44 Xm Nshadow Thickness 11 Xm Nmargin Width 5 Xm Nmargin Height 5 Xm Nshadow Type Xm SHADOW IN Xm Nx 62 Xm Ny 238 Xm Nwidth 59 Xm Nheight 35 ) / () () (Idi:widget Xm Push Button ( ident"@ 000007 @" eg:name"" script"(on Xm Ncreate Callback (widget) (setq count O))\n(on Xm Ndestroy Callback (widget))\n\ (on Xm Nhelp Callback (widget))\n\ (on Xm Nactivate Callback (widget) \n\ (setq dog:max 400) \n\ (work-proc \n\ 4411 \'(progn\n\ ' (setq count (+ count (attribute-get @ 000010 @ Xm N Int-value)))\n\ (if (> count dog:max)\n\ (progn\n\ (setq count ( count dog:max))\n\ (call-back dog:step 19))\n\ l 441 (if ( ) I ( I Xm Norientation Xm HORIZONTAL Xm Ntitle String"speed" Xm Nshow Value"True" 451 Xm Nx 460 Xm Ny 231 Xm Nwidth 161 Xm Nheight 52 Xm Nscale Width 300 Xm Nscale Heightl 5 Xm Nprocessing Direction Xm MAXON RIGHT Xm Nvaluel O Xm Nminimum-10 Xm Nmaximum 40 - ) ) (Idi:widget Xm Separator ( ident"@ 00001 @" eg:name"" ) ( Xm Nwidth 761 Xm Nheight 20 Xm Nx 2 Xm Ny 204 ) ) ANNEXE 4 (suite) (Idi:widget Xm Push Button ( ident"@ 000012 @" eg:name"" script"(on Xm Ncreate Callback (widget))\n(on Xm Ndestroy Callback 470 (widget))\n(on Xm Nhelp Callback (widget))\n\ L.on Xm Nactivate Callback (widget) (exit))\n\ on Xm Narm Callback (widget))\n\ (on Xm Ndisarm Callback (widget))\n\ ) ( Xm Nlabel String"QUIT" Xm Nx 672 Xm Ny 244 Xm Nwidth 32 Xm Nheight 21 ) () ) (Idi:widget Xm Label ( ident"@ 000013 @" eg:name"" ) Xm Nalignment Xm ALIGNMENTBEGINNING Xm Nmargin Width O Xm Nfont List"-adobe-helveticabold-r-normal-14-140-75-75-p-82-iso 8859-1 " Xm Nlabel String"Demonstration of the EGERIA Interface Editor (built on OSF/MOTIF)" Xm Nx 149 Xm Ny 10 Xm Nwidth 466 Xm Nheight 20 ) )) ) ) ) _ _ ?-' ANNEXE 5 ***************************+*+FF+i F* ""**}******* + *****}* ** +**+ **********+*** 4 Application: Link with User Interface part #include uegtoolkit hw #include "egeria h" #include void Init Callback(); /* (widget, clientdata, calldata) / I/* ============ =o ==== \ Initialisation of EGERIA Constant values (if not defined in Makefile) \ * */I #ifndef APPLICATION PATHVARIABLE #define APPLICATION-PATH-VARIABLE "EGPATHW #endif #ifndef APPLICATION PATH #define APPLICATION PATH NULL #endif #ifndef PROFILENAME #define PROFILENAME NULL /4 That means: eg/ i #endif Xrm Option Desc Rec optionsll= { {"-edit", " mode", Xrmoption No Arg, "uids"}, {"-exec", " mode", Xrmoption No Arg, "uims"}, {"-wool", " dialog", Xrmoption No Arg, "wool"}, {"-wcl", " dialog", Xrmoption No Arg, "wcl"}, {"-profile", " profile", Xrmoption Sep Arg, (caddrt) NULL} ANNEXE 5 (suite) Egeria version Used to check version CAUTION: Read the modification before to change this number #define Eg VERSION 2 / #define Eg VEREVISION 2 #define Eg REVISION O #define Eg Version Eg VERSION * 1000 + Eg REVISION Eg Layer layersl = { {"Egeria", Eg Version}, {"Xt", Xt Version}, {"MOTIF", Xm Version} }; /I _o_ _ _\ Egeria main loop int main (argc, argv) int argc; char argvll; { return Eg Main(layers, Xt Number(layers), | 511 argc, argv, options, Xt Number(options), /* MODEEDITION */ MODE_EXECUTION, I Init Caliback, 51 10 I PROFILE_NAME, | APPLICATIONPATH, APPLICATIONPATHVARIABLE); l /* =à Application part Widget drawing Area; Display Eg Display; Window drawing Area Window; #define PIXMAP NUMBER 7 #define PIXMAP NAME "dog" Pixmap ppixmaplPIXMAP_NUMBERl;/* Pixmaps */ unsigned int wpixmaplPIXMAPNUMBERl, hpixmaplPIXMAPNUMBERl, HEIGHT= O, 52 WIDTH = O; / sizes */ GC gc; #define DEFAULTPIXMAP 2 int xpixmap= O, ypixmap = 25, current = O; int window Width= 100; ANNEXE 5 (suite) Utilities \* */{ int Read Pixmap(pixmap Name, pixmap Ptr, width Ptr, height Ptr) char * pixmap Name; Pixmap * pixmap Ptr; unsigned int width Ptr, * height Ptr; { Xrm Value fromvalue, to_value; int dummy; fromvalue size = strlen(pixmap Name) + 1; fromvalue addr = pixmap Name; Xt Convert(drawing Area, Xt R String, &from_value, Xm R Man Foreground Pixmap fl Xm R Prim Foreground Pixmap */, &tovalue); if (to_value addr = = NULL Il (Pixmap *) tovalue addr = = DEFAULTPIXMAP) { return False; } else { unsigned long int dummy; Status status; pixmap Ptr= * (Pixmap *) tovalue addr; status= X Get Geometry(Eg Display, * pixmap Ptr, &dummy, &dummy, &dummy, width Ptr, height Ptr, &dummy, &dummy); return True; } } void Init Pixmaps() { XGC Values gcv; int i; char namelt 001; if (l Eg Variable Get C Value ("drawing-area", Eg Class Widget, &drawing Area)) { 522 fprintf(stderr, "drawing-area must be specified\n"); exit ( 1); } Eg Display= Xt Display(drawing Area); drawing Area Window= Xt Window(drawing Area); ANNEXE 5 (suite) /I to avoid event accumulation during animation 1/ gcv graphicsexposures = False; gc = X Create GC(Eg Display, drawing Area Window, GC Graphics Exposures, &gcv); for (i= O; i HEIGHT) HEIGHT= hpixmaplil; if (wpixmaplil > WIDTH) WIDTH= wpixmaplil; } } Callback functions \ - void Draw Callback(widget, clientdata, call_data) Widget widget;/* UNUSED / caddrt client_data;/* UNUSED */ caddrt calldata;/* UNUSED / X Copy Area(Eg Display, ppixmaplcurrentl, drawing Area Window, gc, 0, 0, wpixmaplcurrentl, hpixmaplcurrentl, xpixmap, ypixmap); } I void Undraw Callback(widget, client data, call data) Widget widget;/* UNUSED */ caddr t client_data;/* UNUSED I*/ caddrt callidata;/* UNUSED */ { X Clear Area(Eg Display, drawing Area Window, xpixmap, ypixmap, wpixmaplcurrentl, HEIGHT, False); } ANNEXE 5 (suite) void Step Callback(widget, clientdata, calldata) _ 525 Widget widget;/* UNUSED / caddr_t clientdata;/' movement '/ caddr_ t calldata;/* UNUSED */ { int movement= (int) clientdata; 526 X Clear Area(Eg Display, drawing Area Window, xpixmap, ypixmap, WIDTH, HEIGHT, False); xpixmap + = movement; if (movement > 0) { if (xpixmap > = window Width) xpixmap= O; current+ +; if (current > = PIXMAPNUMBER) current= O; } else { if (xpixmap { I Init Pixmaps(;) Eg Pointer Define("dog:window-widthw, Eg Classlnt, &window Width); 530 Eg Typed Caliback Define("dog:draw, Draw Callback, Eg Class Any); Eg Typed Callback Define("dog:step", Step Callback, Eg Classlnt); 531 Eg Typed Callback Define("dog:undraw", Undraw Caliback, Eg Class Any); } ************ ************************** * * ****** * * * * ******** 1 ANNEXE 6 6.1 WOOL CORE PART 6.1 1 Syntax i Function Action lWi&ç 2 llCL 52 ( 1 l\ W\OOL co LII Ielit lV l&-2 llCi L ltlint, eger ltt 1 & 21 lC'L 27 lsy,,hot " " l 1 W 12 l l(CL#33 l st ring not at ion () lWl I& 2 l lisl not al ion lWl lWl&: 2 llC L 158 l conditionual tsl. l 5 % 2 l 1 CL 1 lW 2 l preveut evaluation wvith possible internal evalua- ti<>ii Lionls backquote lW 2 l prevent evaluation with possible internal evalua- tions defmacro lEll *iefine a Woo L iliacro defmacro lW 2 llCL 76,195 l deline a Wo OL fuuction defunq lV Wll define a Woo L fuinction defua lIll defiue a WOOL function defun lW 2 llC 76 195 l defille a WOOL f Uiction I de lS I 'ieline a Woor, rittiction df lVll dleflue a Wool, function dm lE 11 l deline a NYOOL mnacro flambda lWIl deliue a Woor fuilction lambdamacro lWV 2 llCL 76 19 5 l tdefine a Woo L ftltlt'ctioii lambda lW Ij defile a Woot function lambda l%W 2 llCL 76 195 l deline a Woo L fi Umctio, 6.1 5 Anv Function 1 = convert copy eq equal eaunl obj ect-pilist print ? *print-readably* type-of type-of typep Action lW 21 lCL#293 l test ihiequalitv of objects lEll couvert a value lE LlV 2 l copy a wool obij-rt l(Wl& 2 l test strict etquality of any two objects lWI& 2 ll(CL 107 l test equalil ty of any objectts lE 21 retitri property-list associait ed wvit li au object lW 1 & 2 llClLÉ 577 l print Wo OL objects lW Il print Woor L objects lV 2 ll('L 557 l afiecl thle way ol)ject S are pritiedl lW,:-2 llC', 6,5 l t ype of a Woo L, object lEIllCI, 65 l t wp of a Woo ohje- t lWV 2 jlCL 67 l Chleck ltyple of at olbject ANNEXE 6 (suite) 6.1 6 Hash Table Fuicti;n Action gethash make-hash-table maphash remhash lWllCL -1:318 l retrieves entry ix an hasll table lW:lL:,51 l,iake ani l: sh t, hiae lWV 2 ll('L 4:18 l apply fiectioii o O Pacdi ei ies ila, l table l ll('L 41 f alreovetry i t e l\V 2 ll:It 4:3 $ lreixiloves entry ilu ash talble 6.1 7 Inout/Outout Ftxie-ti;n Action close errror-output file-open open output print ? read-char read-line read read *standard-error* *standard-input* *standard-output* stderr stdin stdout write-char vrite-line lWV 2 jl(CL SUSl close a st reau lEll global streams lEi 1 opli Il a str-am -"V:2 ll(t L; 4,l open a st ream lEll global st r-anis lWI & 21 lC'L# 77 *l pritit /OOL objcct s lWll print W Vool objects - lW 2 ll(t L 573 579 l read or write a char lW 2 ll( 'L 572571 l read or wvrite a line lo Idl read a string froi th Le current stream lW-2 llC 7 L 539 l read au expression lw'-,ll(",L -' tl gi,,ai stre mts lW'21 lC L 197 l global streaitis lW 2 ll(CL 497 l global streauns lE 1 llv W 2 initial global streains lE lll\V 2 J i,,itial g 14 h;al st reaus lLlll V 2 l initial glolail streamns lW 2 ll(-'L 57:3 S 579 l read or write a char V 2 lL'L 572,579 l reattd or wrrite a line ANNEXE 6 (suite) 6.1 8 List Function nil + th replace-nth append nconc consp delete delete- nth dolist map elt for mapfor length liast list-add list-addl list- append list-appendl list-get list-put list-putl list-make list-remove list-removel list-sortl make-list mapcar mapcan Some every member position print-level reverse sort sublist subseq Action lWtl& 2 llCL 91 l tlie uil value 1 W'2 ll(L 29; 5 l add or conaatcnat e l('1 l access all elenment of a list l(; 1 physically replace an element of a list lW- 2 l applendl sexquences (lists or strings) lW 2 l append sequences (lists or strings) lEll test for a list. lW 2 IlC-L 400 El remiove from a sequence (list or string) lG Il physically remove anl elenient of a list lWV 2 llú:L 169 395 l iterate tlirough a sequence (list or string) lW 2 llC(L 160,395 l iterate thtrotugih a sequence (list or string) lW 2 l get an itemn in a sequence (list or string) lWll ilerale I 1 rolgh a lisl of values lWIIl it erate lhlrouglh a list of vaiies lW 1 k 2 l leugth of sequence (list or string) l 55 l'& 2 l make a list lEllE 21 add ai elulent at tihe end of a list. lElllE 2 l add an eleinent at the end of a list lEIllE 2 l append a lislt to au other oue lE 1 llE 2 l append a list lo an othier one lE IllE 21 get or set itemn in a list lEllllE 2 get or set itent i,:a list lEIllE 2 l get or set item in a list lEIA-2 l make a list or a given size ll OlllE 2 l relove fronm a ist lE.lllE 2 l reliluve from a list lEIllE 2 l sort a list iln place lW 2 ll( 'L 1 18 l mak}e a list of a given size lEll LISP tradlitiontal iterators lEll LISP traditional itecrators etl 1 ISP' traditional iterators lEltl LIS' t radtitio,;I iteralors lWtll position of elenment in list nr in string lWVll(' L -14 U 4 l position uf elinent ill sn tt,,c (list or i si ring) lW lr 2 ll("L,564 l control prinl;ig di-lptil of lisls lW 2 ll(-L 393 l rev-erse itemns in a list. lW Elk 2 ll( 'L 411 $l sort a list in llact- lWIl extract a S,,I*ist t uf a li t lWt 2 llCL 393 l extract a sub-part ont of a setqnence (list or st ring) ANNEXE 6 (suite) 6.1 9 Logical Fttuctiou Action and lWI& 2 l logical AN D of expressions not lWXV:2 &l 21 'L 11 ul logical negat io, nu.l lEll logical miegatioli or lv 1 & 2 llC'L 1101 logical OR of expressiuus t lWI&:21 lCL 9 (l tlhe logical true" valuc 6.1 10 Number Fîmctiou Action mod lW 2 jlc'L 35:3 l Iiodulo * lI & 2 ll_:j L 29 {ql arii,,net ic optlraf ors / lW tz I& 2 llCL 29 'l aritlhunetic operators + lWI&r 2 ll('L 295 l add or concat eniiate lWI& 2 llC'L 295 l arithinetic diférenice lW 1 & 2 llCL 29:33 testfor strict superiority > = lEllW 2 llC', 29:il test for superiorit y atoi lW LIl ascii sl riig to int ger conversioi compare lWI&-12 l orderiug comxparison itoa l-VIl integer to ascii stritng conversioa logand lE 1 llW 2 l hiti wise opierators logior lEI}llW 2 l bit wvise op boundp lWI& 2 llCL 120 l test if an siyol lias aready bee,- dt Heinetl defax lVW 2 Jll('L t 86 l,llines varialle or constalt. de:constaant lW 2 ll( t L 86 l deftines variable or const ai de:un lW 2 ll(CL ? 6 195 l definc a WOOL f Uactio,, defmacro lW 2 ll('L 76195 l define a Voo L function fixd-package lW 2 llCL 2641 l fiid package from i Ls naline internu lEll make all svymbol front a string intern lW 2 ll( 'L 26115 l make an synhol fron a string make-package lW 2 llC'L 262 J niake a package *package* lW:2 l('L 2621 culrre l package use-package l'2 ll( L 269 l indicates packages u ed 6.1 13 Seauence Ft Dtitiou Ac:tioun + lWi& 2 llCL 2951 add or conlcatiate append lW 2 l append sequeineces (lists or strings) nconc 5 V 2 l append sequences (listsor strings) delete lW 21 lC'L 40 Ull remove froin a setquence (list or st riug) dolist lW 2 llCL 169 395 l iterate tlirougl a seqence(lisl or st ring) map lW 2 l(CL 169,395 J iterate tlrough a sequenre (list or strilng) elt lW\V 2 l get an item iii a sequener (list or string) length lWI 1 & 2 l hgtlh orseqlletue (list or t rilg) position l\ 2 llC( L 44 J posit ion of elenwent in squnnc (list or in string) subseq l:V 2 ll('L 3:93 extrat a siib-part ouit ol'a sq,,,- ne î (list or st rug) ANNEXE 6 (suite) 6.1 14 String Ftumction + append nconc atoi comparte delete dolist map elt intern intern itoa length match position min max read-line vrite-line strcat string-execute string-upcase string-downcase stringp subseq Actiou lW Vt& 2 ll(:'Li 3:1 l st ri,,g notatio,, lWlt& 2 ll(' L 295 l add or concatenate lW'I&-2 llCL 29:3 l test for strict inferiority lE 1 lW 21 lCL 29:3 l test - for inferiority lWhl& 2 llJó: 293 l test for strict superiority lE ltllW 2 ll('L 2031 test for superiorit y lW 21 append sequences (lists or strings) lf-2 l alplend se"lttt-ses (lists or strings) lWIl ascii string t o integer conversion Vl-1 & 2 l ordering comparisou lWV 2 l('L 400 eflremiove froin a sequence (list or string) lW 2 l l('L 169:295 l iterate lliroulgh a sequience (li 8 l or string) l 5 V 2 ll(CL 169 395 l iterate through a sequence (list or striing) lW 2 l get a it eri in a seqlqence (list or strinig) lE Ll make an sy-mbol fromi a string lW 2 llCL 26661 inake an symbol from a string lWll it eger to ascii string conversion lWL-t 2 l lengt I or fsequenlce (list or stritg) lWh I-2 l general regular expression niatchiug p>ack- age lWV 2 ll(CL 40 1 l position dt elenient; in setquence (list or in string) lE tllW 21 l(L 291 l give tée min or max of a list of tioisbers or strings l 1 ':IlV 21 l(''L 2941 give t le min or ma x of a list of mutinbers or strings lW 2 ll(CL 572 579 l read or wvrite a'line lW 2 ll( 'L 572 579 l radtt or write a liue l' Llloldil conicate enate two strings lEtl execlte a WOOL string lE lt& 2 llC(L ti de:var lW 21 l(CL 8,q defui,,s variahle or consta,,t. de:conlta t; lW 2 ll(CL 86 l diefrines varial:e or constant let lW 2 l local variable delaratiou let* lE{lllW 21 local vnrial)e Iecldaration set lW 22 llCL 122 1211 l variable assignestent setq l 2 ll 2 CL 122 ' 121 l variable assiguellueit set lW l J vrial)le a s signellielit setq lWIl variable asignteneuit. : lWLl variable assigtnement vith lW l local variable decldral riou with-eval l(Wll local variable declaratioti 6.1 17 Miscelaneous Function conte Xt-save context-restore gensym random Actiuu lW l J contaext iuianaut ielit l'V lj t'îotr'Xt t,,a Inn 'fl+ u-n (': llalEj 3,,rt e a, iat l lElll\V 2 ll(:'L:3153 generate a ran;iotu, i tinl r {;%,-* ?n, ANNEXE 6 (suite) 6.1 18 System Fimcti(,u l system system f, getenv get-internal-run-time time-elapsed elapsed-t/me popen Acti 6.2 WOOL EGERIA PART 6.2 1 Anv Ftu etion class-is-subclass class-super-class eg:cast type-is-subtype 6.2 2 Attribute Ftmuctiou eg:attribute-atom eg: attribute-make eg:attribute-name eg: attribute-type 6.2 3 Behavior Function it Add Callback lt Add Event Handler It Remove Callback It Remove Event Handler call-back eg:callback-make-fro eg:callback-make vidget-add-callback vidget-add-event-hanh vidget-remove-callba vidget-remove-event- vork-proc Action lE 1 l tests if a cl;s is subcla S or auother lIEL will lie re moved returts sinperclas lEll m Clhtange Ite Iype of an object lW 2 l ' tests if a type is sullype of aniol lr Action lE tl returus ilforllation about a widget at- tribhute lE 1 l m elfines a widget attribtte lEll m returns information about a witlget at- tribute lE 1 l ' returns information about a widget at- tribute Actiou lEll i adds or remnove callback iln a widlget lEll M add or remnove au event Itandier lE 1 l l adds or remove callback in a wildget lEll l 7 add or rentove au event handier lEi& 2 l call a callback ritticl iuntt nm-string lEll W create a callback lrolt a string lEll { create a calllbacek frui at expres sion lEl LI adt 's or renivve callbark in a vwi lget dler lEll mf add or reall Ove atll event lhaîuller tck lE 1 l | adds or reîowvcal Ilbaek in a widete. handler lEll l add or r-muove an event haudl r lEl L wil he r-Io L gt or set vwurkproc expression ANNEXE 6 (suite) 6.2 4 Control Flnction Action apply lEIllW 21 apply a fuictio I with given paraitetrs atom-for lEll iterates on each syinbl l do-symbol lW 21 iterates on each symbol error lEq wii he removi - | pronîpts an error message range-for lEll lwvill be reminoved it erates throughit a range of iite- gers wa.ni ng lE 13 E generate a wariliug 6.2 5 Develooment Fuilnction break measure-doing measure-print Action lW L& 2 l Iull fultl, io lElil to begin or stop measiure lEI'l print st atistie information about ser func- t.ilots ANNEXE 6 (suite) 6.2 6 Egeria Fllutiou ed:ask-parent ed:ghost-color ed:handle-height ed:handle-width ed:select-vidget ed:selected-list-get ed:selected-list-set eg:application-class eg:application-name eg:default-edition-mode eg:editable eg:edition-mode eg:identifier-to-vidget eg:load eg:profile-name eg:script-update eg:widget-description eg:vidget-for eg:vidget-is-editable eg:vwidget-pprint eg:widget-to-apply eg:vidget-to-identifier eg:widget-top-list sv Action lEll m intteractively ask to designate à wiclget lEll ll active value: Lthe color of l I glost. rertangle lEll art ive values: t le widthl a d liigli or tile ihaullt s lEl m active valises: hle widtii autld lheiglt o lhlie l Iaidies lEli l f get aiid set the list ofselected w Vid- lE l get and set the list of selteed "vid - gets lEll j get and set th Le list of selected wvil- g"t s lEli t he class of thie current aplplication lEll the namne of the cu rrent applicatiou lEll thie default egeria mode lEl Fl iudicates if created widget wvill he edit alle lEl ll active valie: t lhe global egria mode lE,l tlhe wvidget given hy an identifier lE 1 l EJ load a non editable file description of witdgets lEll m the uamie of'thel firsi profile nainme lElil m updates widget identifier in script lEli m give an expression d Itscribiuig t Ihe witlgel. lELl m iterate th Lroughi thie list of edit ed widget 1 s lEl l m say if a widget is editahile lEll |? prett y pri Int a widget. lEli yhe Iarept %vig-t ir it Ls a sh ll lElil ' i tol idelt ilier of a widg P t. lEl *'?_ thle list ofhlîell or toulv'El wil ZlIs lEll l, ret urns slttt 4 lgt ANNEXE 6 (suite) 6.2 7 Event Fuuction eg:cursor-position eg:cursor-m eg:cursor-y eg:vhich-button Action lE 1 il get the cursor coordinates lE 1 l W get t he cursor coordinates lEll m'' gel the cursor coordinates l(El l the lilouse butl ul pressed ill he lasl X evcil. 6.2 8 Misc F Ductiou eg:Xm String-to-String eg:cut-bufer eg:default eg:define-cursor eg:flush eg:resource-get eg:resource-put eg:synchronizeexpose eg:undefine-cursor eg:xt-convert Action ll Jl J" couvert au, 'iu String to au ascii st.rig lEll l? get the cut buffer lEIlWm lEl rl set and uinset L ile cursor shape. lEll flush lite X s rver lEll get or sel ait X resource lEll get or set au X resource lEll syivchirouiize t le X server lEli l get aud uwel tlte cursor slapi lEll " conyvrl ait objectf froail ol, yp, l o> alio her ANNEXE 6 (suite) 6.2 9 Plist Fimuction eg:properties-get eg:properties-put eg:property-get *g:property-put get plist-for plist-get plist-list-get plist-list-putl plist-make plist-putl plist-put plist-remove properties-get properties-put property-get property-put put Actionu lEli mi get or put properties of au object lEJIl m get or put properties of an object. lEll m get or put property of any object lEll m get or put property of any object. Ell m get or put property of any ol{ject lE l iterates tlhrouh a property list lEll gel or put a propert y in a plist lEll m get or put properties in a plist lEll m get or put properties in a plist lElll lwill be removed niake a propert y list fromn a siimple list. lEll m get or put a prop,:rtv in a plist. lE 11 l m get or put a property in a plist lEll wil I be reioved | remove properties fromn a list. lEll get or put properties of au object lEi J get or put properties of an objeci. lE tl m gel or put property of anv object lE tl m gel: or pliut propert y or aitny object. lEll m get or lut propert or anv oljt,ct 6.2 10 Stream Fimction buffer-make buffer-reset buff er-string Action lEll creates a streant buffer lEll m resets the content of the luffer lEll gets tlie countent of t he buffer 6.2 11 Symbol Functiou NONE atom-for do-symbol Ac:tiou l(- & 21 l siguates no value lE tl iterules oun e acih sv It I Ji lW 2 l i Leralt es o eaci symbol ANNEXE 6 (suite) 6.2 12 Widget F uucf, iou It Create Popup Shell It Create Widget Xt Destroy Widget Xt Get Values Xt Manage Child Xt Hap Widget Xt Kove Widget It Parent Xt Popdown Xt Popup Xt Realize Widget X It Resize moves or resizes a vidget Xt Set Value Xt Translate Coords It Unmanage Child Xtl Unmapwidget attribute-get attribute-set Actiu- lEI& 2 l creates a widlget lEi& 2; creates a widget. lEl& 2 l destroy a widge L and all ils cliilren lE 1 & 21 get MOTIF resources of a widget lELl& 2 J manage or uuinianage a chihl vwidget lEll | 1 inap or unimap a clldl wvidlget lLe l& 2 l moves or rsizes a wiilgtt. lEt&'2 l get t he parent widget of a wvid- lEl& 2 l p Iop-up or popdov Iu a ielnit lE 11 & 2 l pop-ijp or pnpldown a mesui lEI& 2 l ereat es X window aesociaetled with widget lEl& 2 l XI, Make Geometry L Request. lEl -2 J set MOTIF resources of a ividget lEI& 2 l t ratislat S to root witldow co- ordilbai es lElt; 2 J manage or unmnianage a child widget lElil map or uumnap aciil wvidgget. lEl & 21 get L and se L the value of a wid- get attribuite l(EL t 2 l gt and set the value of a wid- get at t ribul e ANNEXE 6 (suite) 6.2 12 Widaet (suite) eg: Xm Button Popdovn Children eg:Xm Disarm eg: widget-children eg:vidget-lower eg: widget-raise eg:vidget-rank eg:v idget-redra eg:vidget-set-menu-position eg:vidget-shell-children popup-shell-create uidget-create - vidget-destroy widget-geometry-request vidget-get-values vidget-manage vidget-map -id e- -mo ve lE 1 l l' popdowu children of a menu lEll m disarins a cascade button lEli m lhe list of chiltdren wvidget s lE 1 l m raise or owiver a v widget win- dow lEll m raise or luwer a widget w Vin- now lEl Jl 1 get or s, t rank of a widgt. i chilnlre i lisl lEll redrawv a wvid et. lE 1 ll get til e position of a Inlll lEli,,3 tite list of ritiltirt,, wif lf,,ts lEl& 2 l creates a witl?(. lEl& 21 creatges a widget. lEl tz 2 l destro 3: a widlget and all its elilreni lEl I& 2 l i Ioves or resiz es a v widget. lEIL 2 l get MOTIF re sourc-s ur a w Vitlgó't. lEl k 2 l m'a;nngc or lmiiii;I;iage a child witg',f. ll",il j? lfir ipor mllltlal) a rl-ill widgvte. rf{lî"I, it -,;r r,', a wh{- - ANNEXE 6 (suite) 6.2 13 Widget Class Ftulction Xt Get Constraint Resource List Xt Get Resource List eg: wvidget-class-atom eg:vidget- class-creator eg:widget-class-father eg:vidget-class-is-subclass eg:vidget-class-name eg:widget-class-variable vidget-class-constraint- resource-list widget-class-resource-list 6.2 14 Xmlinear Fu Iuction Xm Linear Drav Reference Xm Linear Restore Reference Xm Linear Save Reference Action lEll W get resource list of a widget class lE 1 l W get resource list of a widget class_ lEll returus information on a widget class lEll m returus information on a widget class lEtl l' rmeturls super-class or a class lEll W test if a cla ss is a sub class of aino Lher lEll m returus informnat-ion on i widget cl; s lEll m returns information ou a wvidgd:t clhss lEl t m get resource list of a widg:et class lEll W get resourcelist of a widget class Action lEll draws reference size and podi- t.iu of children lEll '_ restore size to r Pf-rence size lE ll '? 1 save csurrnit,onr, lilat re,, ereltce ANNEXE 6 (suite) 6.2 1 5 Xmlist Fumctiou) Xm List Addltems Tm List Addltem Xm List Delete All Items Xm List Deselect Alltems Xm List Do Im List Get Selected Tm.ist Get Im Listltem Exists Xm List Set Actionu le 1 L& 2 l add au itemi or a list of itemis Lo a list lf'l & 2 J add an ite N or a list uf itemis to a list lle&-2 l delestcf all t Lhe itemus or list. lE.,t-2 l deselect all the items of list l 1.:ll lill be r,iovedl |J Perfori a list op- eralion oit an itemi in List widget l: l e o, l get the listor se- lhcted itens lEll,-vill lwreî no'ed get or set tle list of iteins lEl 52 l Cit-eks if andl itemn is ill a list widget lEll will be remove get or set the iist of items 6.2 16 Xmtext Fiuction Xm Text Get String Xm Text Replace Xm Text Set Selection Xm Text Set String Action lEl& 2 l get tile text il, a text widget tl E& 2 l replace thie texi in a text wvitiget. lEl & 2 l selects a string iln a text widget lEl I& 2 l set the text iii a text widget. - ANNEXE 6 (suite) 6.3 C Part 6.3 1 Hight level Fiumction Eg Callback Define Eg Main Eg Typed Callback Define Eg Variable Get C Value Eg Variable Set C Value Action lEi& 2 l defilne a Callback llt& 2 l start EG El IA ruu-t imie lE l& 21 l define a Callhack lEI& 2 l set or get a WOOL variable lEI 4 & 2 l set or get, a WOOL variable 6.3 2 Object Ftuictionu Eg Objectcopy Eg Object Create From Xt Arg Val Eg Object Create Eg Object Decrease Ref Eg Object Equal Eg Object Eval Eg Object Get C Value Eg Object Increase Ret Eg Objectlntern Eval Eg Object Is Subclass Eg Object Modity Eg Object Print Actio)a lgli& 2 l copy an object lEI& 2 l Createa a new object front C value lEI&:21 Creates a new object from C value lE h & 2 l decrease or iucrease t lhe ref-rence count. or ai object. -lEI & 2 Test eqtlality of t wo objects lEht& 2 l Evaluates aui object lEI& 2 l Get C value of an obje't. lEl&-2 l decrease or increase t lie reference comnt. of al object lEl&,2 l Evaliat es, an object. lEl& 2 l Clheeks t he class of ani object. lE 1 l} Setts C' valu or ait oject. lLE 14:2 l Prints the wvooll oict. * ANNEXE 6 (suite) 6.33 List Fîucetiou Eg List Appendltem Eg List Contaiu Item Eg List Create From Array Eg List Createl Eg List Create Of Size Eg List Create Eg List Get Array Eg List Get Item Eg Lislt Get Position- Eg List Insert Item Eg List Length - Eg Listàove Item Eg List Remove Item Eg List Set Item Eg List Reset Action lEl & 2 l append an object to a list lEQl,-ii lhe reitaivetl l te t if a iten,;S in; a list. lEl& 2 l create a list front au array lEI:; 2 l c reate a lt lEl Ul l'l crtle a list of given size lE 1 i 2 l create a list lEI& 21 get cont eînts of lite list in C arra V lEl& 2 l gel or set an item i,, a list l r tl m gt, tlie positiuu of au oljecd i, a list. lEl k 2 l iusert al oabject in a list lE 11 & 2 l the lengtlh of a list lEL&Jl 11 ove a U e 1 enie L, inside a a li C lE i & 21 Rtnoves one itom lE t& 2 l get or set an item in a list. lEll F Remioves all itemls in a list 6.3 4 Class huiu Ctio Action Zg ClassCIt S lEk& 2 l Creates a uew Egeria cla ss úg Cla Gse 1thtod lE I -2 l set or get a miet Iod or U clauss Eg Classis Subclass E ANNEXE 7 Eg Active Define| define an active value void Eg Active D"ufue (namite gef F ncfion se F"ndioa) chiar *iiairle; Ef(; 'uat Cftiolîa ie,ctit iiot:. l O d 1 lintp a WOOL ar ive vli e se Mt-h fl'iction Eg Ar ti-vi D Defiue A N arctiv P vallic uay be vielwtd a va rial>le or,'s a flie-t ioi il lm sami( t iie 'l'lie priciphle is thal a specific fimctiolu is calied when yo Q assigu or when yo U cousuit agi active value. l Te gelt rinctio h S no pnranh t rs amli r'tirms an Eg Ohjlt t lhe selt fuction has o Ue parami-ter (tie valite set) el returins ait Eg Object. The correspomlding WOOL vef, b can be isedl as a function or a variable like: CAUTION: Both et antd get functionss must, returu alu bf Eg Oliject valte. C(setq activel 34) (activei 34) whicl, have the same effect the active value being dcfined by: lutu Aóivl ilt T Fuio Act Lve(; Egabjucr { retr- i Eg Object Create (Es Class Int, value Activel); E 6 Object s:t Fimctioa Act iv Cobaject) - Eg O bjct object; :if (E O bj,'tiatub:laescob-jóct, E'Cla u I=t:)) { IulóAct ivet E Obbject Get C Value (a Cobject); retra object; } ls, ( ret_= Eg IL; } Egict'iye Ofefin("ac ive I", get Ftnóion Active, *et:Funóctionjcti'e L): Eg Argument Must Bel check the type of an argument void Eg Argiiue -ut Miîust D: ( il tue r: j c a '(u) inft liindwu r: EOilje:t l,j ":-: Eg C Ia S class: ('l irk t hn cl S nl,'r air alpprulrisi ts 1 i:s;s;:s Fttm El tió/ %}vii gi V L l lie, c'itil i, l h e ' cu rrt'londiî, WOOL call of Li-e wrum Fg argu ir ssil Tlh, posi Lioiu start S at U. Eg Argsn Htus=t ( 0, arg TOl, Eg Classlnt); ANNEXE 7 (suite) Eg Class Create Eg Toolkit Class Create Eg Toolkit Synonymous Class Create Eg Toolkit Enumeration Class Create Creates a new Egeria dclass Eg Ct lass Eg Cl'ss Create (supcr Class,amnc) Eg( la ss S per clah 'stler Cluss' 'name' iudicale tlhe,atute or the uew class i Ui scripl' lagun ge. E Kass Unsigned Loai E 6 Clams Creut ( Eg 2 lass Int, "Unsigd Lon 6 "); E*lass Translat io Table Z 3 Toalkit Iia tme ( Eg Class Src:ured, Traslation Table", Zt Tranlation Table); EClams Shel Unxittype= EToa 1 lit Synayon Clas C=rat e ( "Sh Uell Uni Lt Type", E 6 las CI i Jt Type, X t R Sh Unit T Tpe); EúClass OrientationEgo E aion Cla Crea ( "Orientation", a Xm Rriontation); Eg Toolkit Syuovyno,,s Cia ss Creat e doest% realy create a newv class but ituake it available t C aund WOOL. Eg Class Destroy Destroyes a class void Eg Class Destroy (class): Eóg 'lass cla s s: otu iust hte suire Ihlat you hav P a;tlralty (lestroye l every S,lla oj,-vt S olr Lhis chss Act lialy l hlis filctien llily ch-,,g S,m, honds to pronfl Ih- error if o, r ry to plriit to eval or to call any niethod twitl an OI>Jert of tif dest ro?:l clas ANNEXE 7 (suite) Eg Class Get Method J Eg Class Set Methodi set or get a method of a class Eg,'ltt hod Eg C-las IG Gte Method ( Lite class. |J Predfefi n Led met hods Pa:unetixs r-tlwutrtl vabi Eg AIl,t Lhod Ev;al (objecti) object 2 Eg Mietlod Prhit (object) object ES-le Meltod L Free (object) Nt ULL Eg Meútlhid Copy (ubjel I) olject 2 Eggiletie Lod Eq::al (objet 1, object 2) objeritl or t or nil Eg Mot lhod Mnke (_calue) object. Eg M Xlethod Execule' (olject) :g IMlethod Su 't (oa Ijectloljt 2) oi)ject-2 Eg M-lhiutl Set Lq (objtcti, ob)'et 2) evaal m ion of ojecf 2 Eg M -tlhod(ot e LCv;'he (object) cvaile Eg M-tl hod Silenit-e-al (ohject i 1) object 2 Eg M, tltodtl'ype Nai:,e, ,t a rea{ ieilod atl or Eg Mt r thuad'l; -ile uo Lt a real inetl, d NI r LL or eg Taile Eg M Nlthiod'roolkit tvple not n ral melhlod XR Eg Met hiod 11 look not longer u,sed Eg Method'roolkit C'ouvert er not a real nmefthod Eg Mei, hod Super Cl ss not a real ineth-lod Eg Class CAUTION: The available nielho 5 ds anzd their p 1 vgrali milng ilfetfaee m ay be subject to modificatioais irr futuire. Eg Class Is Subclass| Tests subdassing ilut Eg Classls Sthdass ( clussl ctas 3) Eg( 'la W ctassl claaqs 2: Returns True if class I is a sub o'as or class 2, False otiherwvise. ANNEXE 7 (suite) Eg Convenient Widget Clas s Creat e Eg Normal Widget Class Create Record a new widget class void Eg Norniar W'idgget Chu ss Cr 'ate (l"rrjr ""ou'l ", vohl Eg Couuviniit Widggeit Cl ss Cr-ate (ptef r truoin,u t t,,Ikttid. cair *pr-fix: dclar *'Lvt Jil astt: %Vitige t('tla tuolkit id: L Eg Witgel Ur eu',r creat ur: Exmu,,ple: to d,:ihie Xm Message Box aud l Xmni Message Dialog. E:Coneiienletidgetclass Creata ("Xm" "Nessage Box", 3: Hlssa Imoxidg Class, X Creaft:lasa o Bor); Eg Contvniunt Iidget Class Creatu ("lm", " 1 essa Dialo", esi a 6 u Bozxidg t=lass, Iruace Hessae Dialo 6); CAUTION: C 'onvonieut cla nmust be recorded after their real cla 9 s exemple: Meisage Dialog after Metsage Box ANNEXE 7 (suite) jwgror print a warning error and stop execution voici Eg Errtr (,fritg Fnrmnai valnr) char *string Foriiat: luig value: Priit ai error mnesage amtl stops exec-ution Juiips to th,À toplevel of the rtuuli Ing WOOL prugram See al{u: Eg Waruig. i X (ac l= 3) Eg E Fror C"bad nu=br of arguauts Zdc", ar:; if Ca,= 3) E r=or (C$E For_ t DIU 8 Et a F Ra 3, a=); Prrde'fincdl s ring fornmra L C idletifier I Execxtedl para neter tvue _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ J Z Err',r_JJND EFIN ED_VARIA B L E eg Error_ BAI)_I Nl'M B E l O F_ R(;G eg Error_lr NDEFIN ED_F UNCTION eg Error BA DXDEFUN eg Error_B,3 AD RGUYP PE eg Errc r R E 1 l EASI "(;_ 'I)l%l egl'rrnr -BA D)_LOCA L_ SXYNT AX eg Error NOT_ NA'r OOM eg Error 5 NTA E RROR eg ErrorlNTER NAL-_FRROR eg E rror TIMNE_-EX Ci EED ED eg Errr_('ANNOT S E Tr eg Error_(CANNO'r-(; ETC_,VA L It TE eg Errur TOO_ MANY_ PARAMIETERS eg Error NONU WOOLOLB 3 J EC' eg Error_TN 1) EFI NEDM ETIIO D eg Error NO M EMORY eg Error NOTR E 1)EFINABLE eg Errur NOT _NIODlFI Ai 3 LE ciltr * nltile in L argc Eg Object fmurtioii char * n aime ilat poition clhar * miftiltn lchar * lltessage char * nmatlge clinr mess-, chiar * message ilit secoids F:g( lja q clasa 4 Eg('lass claess Eg Ohject fuinction char * mlessage Eg('lass class NU LL Eg Ohject ohject Eg Ohje-ct oj',rt eg Error SI Il ENTU Ei ROR i NULL ENTERS egi rr Erlri Sll?_il* l()R | h'l l IN" NTERN -I VLITR ,,, lEg Funrction Definel define a WOOL function void Eg Ftui ti(u Detfilz 4 ( ilzm Jll,,cli, arit:l) char *,,ir:-: char 1 u gilltctiut I rỉt,-'iuit: itt arit vy: Eg Ftuctiol Dufiue alli>rs to creale a netw functiui. is 1,th Iaim Oi ot Ihp filncti Oll as il vill he ralhtl I fromi WOOL. r _ i = I lat ltl ANNEXE 7 (suite) fuanctiol Ls the filctiol. arigly iitdiates' Lite ittlxmber or argtutentls expected It inay vary from O up to 5 or may be be NARY. CAUTION: A t Egeria runtlciot tmust always re uuru ait Eg Ol)jeet. Eg Obje t substraction (objoc- 0, object I) Egbject object O, objecti; int reallt; E Arom nx Nts Jt Se(O, objact O, E Classnt:); Eixt A 68 rtust 8 ce(i, objeót:, Eg C Iass,,t); resuilt (Ci(t) E( 3 bjec:G)t C 7/ oóob J e,-t O)) (( 1 ') Ebjuct G:e Calcu (objoel)); ret*r E 6 g Objet Creat (ESC Iasa Int, ru 51 t); } Eg Object addition Xargc, arg) int argc; Eg Objoct argv; int result, i; if Carge NOTE: Lt is imptritau Lt to itite t lt at rmcordedl fum'tiot acc 'p Is oliv WOOL ar- guuei L s So il is o R:el necessary to write au iteriedliat e fsunctiou with WOOL argtltliet S whicli chetk time type of arguimient, get the C value andl call any C fimctiou A way to record a rfinction describing its progranmming interface could b)e be st udclied. Eg List Appeud Itemi append an object to a 1 ist void Eg List App, xxudlt:(: (lisi tld,) App Egjl au,jct t ed uf lt St a: Eg Lit:L rtt -Appettui au vjct tu v tltó endt uf a li s t St al -',: Eg List:hlsert It:cm ANNEXE 7 (suite) |Eg List Contai ltem test if an item is in a list int Eg Listg Colt:iul Ittiii ( li sf il Itl) Eg List list; E'g Ohlject item: CAUTION: tr Ue Eg List Get Positiou i Mlcad. Eg List Create Eg List Create N create a list Eg List Eg List Create () Eglisl: Eg List Creltoc O () Eg List Eg List Createl (object) Egg Ohjevct object: Eg List Eg List Clrte 2 (objecfl objeci 2) Eg Obljec L objcxt I oblject 2: Eg List Eg List Create 3 (object J object S objcct 3) EI Oij: ct ohjctl obj-ect 2 ol jtct 3: Eg Lisi Eg List Creatve 4 (ahjectl ahobjer 2 object objectf 4) Eg Oject obljectl olject-2 object:3, olject-i: Eg List Eg List Creat:n 5 (obijecil object 2, objc i objert 4 objcc 5) Eg Ohjevt olhj: c L olject 2 object 3 olije-t 4 l, ohject 5: Eg List Creitte and Eg List Crteatt O are ideutúical Eg List Crfatl Eg List Create 5 arp provided for conveliience Thlese fuuictions ust Eg Oh)ject - lncreaellef See also Eg List Cre:te Frou Arii-ray. |Eg List Create From Array create a list from an array Eg List Eg List Create From Array (argc arg,) int argc: Eg Olhj(crt *argv; To create a WOOL Ii Lt oiject froni ait array use Eg List Create From Array. argc gives t Lh uiumther of ehtu:eiit S in tlh array gargl ANNEXE 7 (suite) Eg List Create Of Size I create a list of given size Eg List Eg List Creatc Of Size (si:c item) i I, size: lE'Ohie;i c il -, l: Eg Listc Criat:O Sizu crat-t: a list Ur fiv N size The rii,'wit t':,, pl; cr l a 's tlht I Ls (ail ail,,il). Eg List Createlf Size( 3 Eg UIL); Eg List Get Array| get contents of the list in C array Eg O Ihj, cl * Eg List Get Array (li dt) Eg Lis( list: CAUTION: -lhe arrav nis L nolo I be free It mnut nl he Itnodified directl lv to avoid rror wvitl rfcrrrtr_-roinia of i( ens or lengtlh of I h I;st. See also: Eg Oliject Decreasel Ref Eg Ob ject Iucrease R Ief Eg List Get Item Eg List Set Item get or set an item in a list Eg Olbject Eg List Ge Itlte, (lisl po 5 iiio,) Eg List list: inl position: int Eg List Setltelu (list position object) Eg Lisl list. ilit Posit ion; ilt, oabject: (lets or sets an oljecrt from a list at a give, posit io Eg List G Eîg NIL irpositio, is ulot currect Eg List Set Item returns 'True if dune aitl Fal - otl erwise. Note: position starts from 0. Eg List Get Posit ion get the position of an abject in a list iat Eg List Get Pusitiou (lisi item) Eg List liu:; E&Obj,ct it ll,; R-turius tihe po,-sit ico, of t he it emn in thle list O is the firat posil ion in tlite list. Returns -1 I if the itent is not found in the list. ANNEXE 7 (suite) Eg List Iasert Item| insert an object in a list void Eg Li t Inse t Item (list position itenm) Eg Lisi list;: iiii position: Eg OI jet itenm: Iusert an olje-ct in a list at a giveu posit io except if position is less timi O (inse rtiot is doue at l htt Ile-ginin ll r tlt lisf) or if 1 position is lr> thlaul 1 1- l,-'ithil orlist (inuserl ion is dom al thle, Il o lhet list). Tl,: Iirst position iii t, is: ist givehl hy O Si-e als: Eg List Ap)peud It:e Ul. I Eg List Lengt hl the length of a list Eg Oi)j,-t Eg L st Lenugth (li st) Eg Lislst: Returus the lengftl of a list. Eg List Move Item J move an element inside a a list it Eg List Move Iten (list old Po sitioi, neupoition) Eg List list: iut oltlj>sit On M: ilt, newpositioli: Chtanges Lhe posit ion of au item N inside a list Returti Ls Trite if xodifira/ iot, is done otr False if oldpozition or nesposition is out side iiliits lit th Lis last *as. Iutl Iting is dune. NOTE: The lirst position in a list is O (ztro) MODIFICATION (in release 0.5 1): llored itcm ia dcseribed byg its position. lEg List Remove Item I Removes one item itlt Eg Liîstf Removeltem (list posi ioull) Eg.ist list: - intli position: Retturis Trtic if if is don Frulse if positioit is oút of rtange. lEg List Reset | Removes ail items in a list void Eg Listl eset (list) E Ig List list: ANNEXE 7 (suite) Eg Malloc Eg Free Eg Realloc Eg Calloc Memory management functions caddrt Eg Mallue (bytes) ilit lstr voi l Eg Free (ph-r) cóniltr_- litr: caddrt Eg Realloc (pir bytes) caddr_t ptr: iltl lyvf u's: caddrf- Eg Ca;lh ' (nkfrli Tihse are the same f Itimetions as corresponding Ul NIX ones S' also: MAL- LOC(:3). Eg Obj ect Copy copy an abject Eg Olj ci Eg O Ij,;et Co Ipy (ibje ct) Eg Olject object: Copy an object This allow to plrevent hordler effect o R t he copied object The result is equal but, uo ueess arily eq For a list ouly the top level is coplied. Eg Object Create Creates a new object from C value J Eg Object Crea te From Xt Arg Val Creates a new abjiect from C value E Object L Eg Obljec:t Create (class agy C tdne) Eg( la'I class: Eg Ci Vale nny C&îal,,e; Eg Object Eg Olje ct Creante Frou Xt Arg Va (ceas: any C Value) Eg Class ci dass: Eg C Value anv-C Valhie: This is a ge eric fitunitioni to errvnt at olijert or niy type exctpl List Tt'e c- ond runct iou Eg Olje-t Creatc-Froml Xt Arg Vfld is int:nletl ouly ror EXPERT who uses the resuit of toolkit fiuctions wvich returu Xt Ar-g Val values such as Xt Get Values or Xt Couvert. Set altso: Eg Varialle Set C Value Eg Lit Cratte- CAUTION: Egabject Create Fromlt Arg Val slkold be c anged to accept a pointer rather thai a direct railue Oltcerwisc it cances same problcem on nit:- chine wiicre caxting fioni painler Lo characler tomard pointer ta inleger is lol alyv S valid Todaiy the raipilation aption -DISALIGN allaur la a'aiid hie prab- leto but an assigunation is replaccd by a bcopy and it i nott very efficient. ANNEXE 7 (suite) Eg Object Decrease Ref Eg Object Increase Ref decrease or increase the reference count of an object void Eg Oijec t De=rease Reef (objerf) Eg O Iject olbject: void Egb Objectlcttase Ref t obfcf) Eg Object object: WOOL u e a rpf rrtce couit garbage collection algori Llhm Wihep au object is rfi'rrenced Prom au ot h'r ome its refi relice coilit meust be inrrenutent e And wvileu au object is Lo longer refereniced its refereuce couit nisi lie decreuntedxtl. WOOL wvilt dest roy oljects with a reftrelice comit etitai te O. Eg Obje t Equai Test equality of two objects E;OI>j t Eg Objt-qt Eq, ta I ( fijcctf o Ij, 12) Eg Objct olhj r'turns Eg TRUE). This ficttion li ts t le sauue setaitic as tihe WOOL ruinctioni equal. Eg Objectiva 11 Evaluates an object lEg Object Intern Eval Evaluates an object Eg Ol, ject Eg Oljett Evd( object) Eg Objecrt oljc- t: Eg Oljr t Eg Oljec- t Iutern Eval(objcct) Eg Object olbject: Ev.iaat ionn of mnniy oljects retrnis tile object itself Evaluat ion of list cai-Ls t he funuctiion founid as first itema with lblluwiug itieumi as paratueters. The rutc io N Lt Eg O Iject Eval rvt Lurn Eg ERROR if an error occr. The ftinct ion tt Eg O except if you are quite sure tha L cude using it is executel frunt a WOOL funilctiuli. This is the basic finction to call t he WOOL interlpreter. ANNEXE 7 (suite) Eg Obj ect Get C Value Gets C value of an object Egtval-le Eg Oi)jecc Get Value ( 6 jer L) Eg Olbjectl object: See also: Eg Varilalk Gt C Value, Eg Objecet Ciemate Eg O 11 ject Modify MODIFICATION (in helease 0 54): T Ve old naie uf titis fuietioui tis Eg Obj ect Get CC Value. Eg Object Is Subclassl Checks the dass of an abject iut Eg Objct; Is Subh-lass (object class) Eg Oljtect ulject: Eg C lnss class: Eg Ol)jct:D Stbchtss returus Trte or False. Eg Ot)ject Get Class wiill proubably not Ibe available iin next Versiot. |Eg Object Modify I Sets C value of an object void Eg Otjct:todify (uoject ang Cl-%lit) Eg OI>)j(v't olj,,'t: l 6 ( 'h,, ay C*XS',lm( a 1 - : Tlis ful't-liot, is ve rv ( 1 ftliger:i I, u bl ca,,se of l hit I,,, rt h - is 1 l ró.son i Vmiv ih y im,' Le n,,I Eg Cbjec-:Set C Value Tihis c-na li er, mr f I, Suq 1. N It LL tlu V;il, ' vihi,-h i; a,l)imter wh vil 1 tlh poiniter is 110 lolg-'r vali d 131,t t Ilis lead to some prolhle'm about ' ype cltlcking Eg Obj ect Prin t L Prints the wool object Eg Obljet Eg Ob Iject Print (aobjecf) Eg Object oibjtct: Se also Eg Prlntú Eg Puts Eg Put Clhr. t Eg Pointer Define define a shared variable To Dsfine a 'arial sh;are d hy tlh itnl erpreter a,,d tl h appll;catio I Iu ts Eg Poil- te:r Deiue 'he siared value is ahr;,ys an iaiti ger. void Eg Poiutcr Dcfile ( name pointcr) clar *uanle: ECC Vaitue poit lr: ANNEXE 7 (suite) lthe liir r-tic, wil h Eg Varialble Se-t C Vahlit is tlal the ar, itueil is nol a WOOL valte Iut a ahddr ss to a C' val U: Tlis all)w -lte int,rprf r audl Lite applicat ion to set (ie value or the saite mtinury address Froin the WOOL side. an object of type Intege-r is creat ed to huld t lis value. Frrol thie application side long t fo B Ir; f Eg Pomte:r D finoe"?oo-ba '", (Eg OT'al *) &foo Bar); fo*Baf J 78; Ami r Iroi -Ite WOOL side: (print foo-bar Y' -> 78 Eg Printf Eg Puts Eg Put Cha print on current output stream voidtl Eg Prin Lf(char *string void *arg) void Eg Puts(clar *string) void Egl I'ut Char(clar c) Eg Prit:('there is Zd idgets created", number); Eg Putl(hello"); Eg Variable Get Object Eg Variable Set Object get or set wool value of a variable void Eg Variable Set Obiject ( aitie object) char * nalue,: Eg Objtc:t uljr-tt: Eg OI)jf-tf Eg V;ural)lte G:t Oi)ijt-t (nrmr) char * namlle: A.ssign a olj, ct I o a WOOL variall:e. T Ih Ypi ful,-f itils are dilf-rui r Frout Eg Variable Set C Value aud Eg Variable Set Y Value vwhir, niiauitaiite( C values aud imiplicit-ly create a MODIFICATION (in relase 0 5-1): TI c old amics wazs Eg Variable Assign Object and Eg Variable Consult Obj ect. Eg Warnixig print a warning error void Eg Wonriiing ( sitriug Fornia, valtue) char *si ring Foriti it loug value: Priu Ls a warnuing ness age atd cotitues t lthe executio Se also: Eg Error. if (m ≤ O) { Egiarniug ("z (Xd) is not positive", s); REVENDICATIONS 1 Outil interactif de définition d'interface caractérisé en ce qu'il utilise un langage interprété et que l'interpréteur est embarqué avec le programme de définition d'interface. 2 Outil interactif selon la revendication 1 caractérisé en ce quel langage a une représentation similaire pour les données et les programmes. 3 Outil interactif selon la revendication 1 ou 2 caractérisé en ce que le programme de définition coopère avec une bibliothèque d'objets interactifs ("widget") une bibliothèque d'objets, de commandes "X/MOTIF" et une bibliothèque d'objets graphiques ("GO"). 4 Outil interactif selon l'une des revendications 1 à 3 caractérisé en ce que le programme est constitué d'un mélange d'instructions en langage C et d'instructions en langage interprétable. Outil interactif selon la revendication 4 caractérisé en ce que l'interpréteur est orienté objet en langage "LISP". 6 Outil interactif selon une des revendications précédentes caractérisé en ce que l'interpréteur de l'éditeur d'interface utilise des tableaux. 7 Outil interactif selon la revendication 6 caractérisé en ce que le noyau de l'interpréteur est constitué comme une matrice à deux dimensions, l'une de types contenant les listes, les chaînes, les nombres, l'autre de sélecteurs ("eval, print, free, add "). 8 Outil interactif selon une des revendications précédentes caractérisé en ce que l'interpréteur ("WOOL") comporte un ramasse- miettes ou glaneur de cellules (Garbage Collector, G.C) incrémental permettant de temps à autre et de façon 81 cyclique de balayer la mémoire à la recherche d'objets inutilisés dont l'espace peut être réutilisé. 9 Outil interactif selon la revendication 8 caractérisé en ce que le Glaneur de Cellules utilise des compteurs de référence et un mécanisme de regroupement des objets par tailles pour limiter la fragmentation de la mémoire. Outil interactif selon une des revendications précédentes caractérisé en ce que les fonctions de l'outil interactif sont décrites sous forme d'un programme interprété. 1 l Utilisation d'un outil selon une des revendications précédentes pour la réalisation d'une interface caractérisée en ce que l'archivage de la présentation de l'interface éditée est effectuée comme celui d'un programme en langage "WOOL". 12 Outil interactif selon la revendication 3 caractérisée en ce que la spécification interactive de la géométrie d'assemblage de ces objets est constituée par un fichier utilisable par une application et contenant la présentation d'un interface utilisateur. 13 Outil interactif selon les revendications 3 ou ll caractérisé en ce que le comportement dynamique des objets interactifs ("widgets") est défini par un ensemble de procédure de rappel ("callbacks") écrites en langage interprété ("WOOL") qui désignent des fonctions de l'application appelées par la boite à outils "'X/MOTIFI" lorsqu'un événement d'entrée est reçu par l'un des ("widgets") objets interactifs. 14 Outil interactif selon une des revendications lou 2, ou, 3 ou lb caractérisé en ce que le programme de définition d'interface est extensible par l'ajout de classes d'objets interactifs ("widgets") effectué en décrivant en langage interprété ("WOOL") les nouveaux types d'attributs de cette 82 classe pour rendre les nouveaux objets interactifs ("widgets") éditables. Outil interactif selon la revendication 14 caractérisé en ce que chaque objet interactif ("widget") étant pointé par un objet en langage interprété ("WOOL") de la classe "WOOL" correspondant à la classe de l'objet interactif ("widget"), les attributs supplémentaires sont directement rattachés à 1 'objet en langage interprété ( "WOOL") 16 Outil interactif selon la revendication 15 caractérisé en ce que chaque objet en langage interprété ("WOOL") est une structure en langage C auto- typée contenant le type de l'objet et l'information du compte de référence. 17 Outil interactif selon la revendication 3, caractérisé en ce que un identifieur unique est alloué de façon incrémental à chaque objet interactif en langage interprété ("WOOL"). 18 Outil interactif selon la revendication 1 ou 2, ou, 3 ou 13, caractérisé en ce que l'outil interactif de définition d'interface (EGERIA) comporte un programme permettant l'affichage d'un menu de base, comprenant une fonction d'lédition", une fonction de "création", une fonction "géométrie" ("Geometry"). 19 Outil selon la revendication 18, caractérisé en ce que la fonction "création" permet la création de tout objet interactif ("widget") à partir d'un menu et après sélection d'une ligne de menu change la forme du curseur et un clic souris dans un objet interactif contenant ("widget container") installera l'objet du type choisi dans cet objet interactif contenant ("container"). 20 Outil selon la revendication 18, caractérisé en ce que la fonction ("édit") permet l'édition des attributs d'un objet interactif ("widget") dans une fenêtre séparée et permet de couper, coller, copier ou dupliquer le jeu d'objets interactifs ("widgets") sélectionné ainsi que d'éditer les attributs des objets interactifs ("widgets") parent d'un objet interactif ("widget") sélectionné ou de rendre le parent d'un objet interactif ("widget") couramment sélectionné le nouvel objet interactif ("widget") sélectionné. 21 Outil selon la revendication 18 caractérisé en ce que la fonction "géométrie" ("Geometry") permet de gérer la géométrie d'un ensemble d'objets interactifs ("widgets") sélectionnés qui peuvent être alignés par le sommet, par le bas, par le côté droit, par le côté gauche ou avoir leur largeur ou hauteur identique. 22 Outil selon la revendication 20 caractérisé en ce que la fonction "édition" permet l'affichage d'une fenêtre d'édition des attributs d'un objet interactif ("widget"), la dite fenêtre étant divisée en deux zones, l'une comportant les fonctions appelées de l'application procédure rappel ("callback"), l'autre comportant les attributs matérialisés par un jeu de sous-éditeurs. 23 Outil selon la revendication 22 caractérisé en ce que le premier sous-éditeur est constitué d'un bouton bascule pour entrer des attributs booléens. 24 Outil selon la revendication 22 caractérisé en ce que le second souséditeur est constitué d'un bouton poussoir affichant un menu affichant les listes des valeurs d'un type énuméré (exemple: alignement d'un texte à gauche, à droite ou centré). Outil selon la revendication 22 caractérisé en ce que le troisième souséditeur est constitué d'une zone de texte pour la saisie des textes ou des valeurs numériques. 26 Outil selon la revendication 20 caractérisé en ce que la fonction d'édition des objets interactifs interpréteurs de 84 commande (Shell"widget") ou des objets généraux (Top level "widget") est lancée en sélectionnant d'abord le menu ("select parent") de sélection de parent du menu et ensuite la fonction d'édition d'attribut ("edit attribute").