3 DOCUMENTATION SUR XIIUWGRAF
\r\r
4 ---------------------------
\r\r
6 Gestion de graphismes en multifen
\88trage sous XWindows.
\r\r
9 1 : Diff
\82rences essentielles avec la librairie graphique
\r\r
13 2 : Ouvrir et fermer une fen
\88tre avec XIIUWGRAF
\r\r
15 2.1 : Proc
\82dure HPAGE
\r\r
16 2.2 : Proc
\82dure GRON
\r\r
17 2.3 : Proc
\82dure GROFF
\r\r
20 3 : Description des diverses commandes d
\82di
\82es aux graphismes
\r\r
21 utilisables par l'interpr
\88teur LOGLAN
\r\r
23 3.1 : Proc
\82dure COLOR
\r\r
24 3.2 : Proc
\82dure BORDER
\r\r
25 3.3 : Proc
\82dure MOVE
\r\r
26 3.4 : Fonction CLS
\r\r
27 3.5 : Proc
\82dure POINT
\r\r
28 3.6 : Proc
\82dure DRAW
\r\r
29 3.7 : Proc
\82dure CIRB
\r\r
30 3.8 : Proc
\82dure HFILL
\r\r
31 3.9 : Proc
\82dure VFILL
\r\r
32 3.10 : Fonction INXPOS
\r\r
33 3.11 : Fonction INYPOS
\r\r
36 3.12 : Commandes de saisie et de restition d'une partie d'une
\r\r
38 3.12.1 : Fonction GETMAP
\r\r
39 3.12.2 : Proc
\82dure PUTMAP
\r\r
40 3.12.3 : Proc
\82dure ORMAP
\r\r
41 3.12.4 : Proc
\82dure XORMAP
\r\r
43 3.13 : Proc
\82dure INPIX
\r\r
44 3.14 : Proc
\82dure STYLE
\r\r
46 3.15 : Commandes de saisie et d'affichage de caract
\8ares
\r\r
47 3.15.1 : Fonction INKEY
\r\r
48 3.15.2 : Proc
\82dure HASCII
\r\r
49 3.15.3 : Proc
\82dure OUTSTRING
\r\r
51 3.16 : Proc
\82dure PUSHXY
\r\r
52 3.17 : Proc
\82dure POPXY
\r\r
54 4 : Description des commandes de gestion de la souris
\r\r
56 4.1 : Proc
\82dure STATUS
\r\r
57 4.2 : Proc
\82dure GETPRESS
\r\r
58 4.3 : Proc
\82dure GETRELEASE
\r\r
59 4.4 : Proc
\82dure GETMOVEMENT
\r\r
63 |----------------------------------------------------------------------------|
\r\r
64 |----------------------------------------------------------------------------|
\r\r
65 |----------------------------------------------------------------------------|
\r\r
67 1 : Diff
\82rences essentielles entre XIIUWGRAF et IIUWGRAPH
\r\r
68 -----------------------------------------------------
\r\r
70 Ce paragraphe a pour objet de donner certaines particularit
\82s de
\r\r
71 XIIUWGRAF,ceci afin de comprendre son fonctionnement g
\82n
\82ral.
\r\r
73 Tout d'abord il est important de signaler qu'
\85 la diff
\82rence de
\r\r
74 IIUWGRAPH, XIIUWGRAF est un programme
\85 part enti
\8are (plus exactement un
\r\r
75 processus cr
\82e par l'interpr
\88teur LOGLAN).C'est pour cela qu'il est
\r\r
76 d
\82conseill
\82 (sauf cas de force majeure) de faire CONTROL-C pour terminer
\r\r
77 un programme : en effet, ceci a pour effet de terminer l'ex
\82cution de
\r\r
78 l'interpr
\88teur sans terminer XIIUWGRAF (cr
\82ation d'un processus zombie).
\r\r
79 Pour terminer une session graphique, il faudra donc automatiquement taper
\r\r
80 dans le programme en LOGLAN la commande GROFF car elle va terminer
\r\r
81 l'ex
\82cution de XIIUWGRAF.
\r\r
83 Certaines commandes de IIUWGRAPH n'ont pas
\82t
\82 impl
\82ment
\82es (par
\r\r
84 exemple HIDECURSOR,SHOWCURSOR,PALLET, ...), soit parce qu'elles seraient
\r\r
85 d'un int
\82r
\88t tr
\8as faible dans la gestion de XWindows,soit parce qu'elles
\r\r
86 seraient difficilement r
\82alisables, soit parce que les programmeurs ont
\82t
\82\r\r
87 atteints de fain
\82antise chronique.
\r\r
89 Enfin, dans vos programmes il faudra imp
\82rativement que vos unit
\82s
\r\r
90 g
\82rant le graphisme h
\82ritent de la classe IIUWGRAPH sous peine d'erreurs
\85\r\r
94 |----------------------------------------------------------------------------|
\r\r
95 |----------------------------------------------------------------------------|
\r\r
96 |----------------------------------------------------------------------------|
\r\r
99 2 : Ouvrir et fermer une fen
\88tre avec XIIUWGRAF
\r\r
100 -------------------------------------------
\r\r
102 XIIUWGRAF permet
\85 l'utilisateur d'ouvrir jusqu'
\85 seize fen
\88tres
\85\r\r
103 l'
\82cran.Ces fen
\88tres sont s
\82lectionnables dans le programme en LOGLAN par
\r\r
104 la commande GRON d
\82crite plus loin.
\r\r
106 2.1 : La proc
\82dure HPAGE
\r\r
107 ------------------
\r\r
109 CALL HPAGE(numerofenetre,x,y);
\r\r
110 VAR numerofenetre,x,y : INTEGER;
\r\r
112 Cette proc
\82dure a pour r
\93le de donner la position
\85 laquelle
\r\r
113 sera affich
\82e la fen
\88tre dans l'
\82cran, de donner la taille de cette
\r\r
114 fen
\88tre et de l'effacer quand le besoin s'en fait sentir. Cette proc
\82dure
\r\r
115 devra
\88tre appel
\82e deux fois pour ouvrir une fen
\88tre.
\r\r
117 HPAGE re
\87oit trois param
\88tres : le premier est le num
\82ro de la
\r\r
118 fen
\88tre (un entier compris entre 0 et 15),les deux suivants sont soit les
\r\r
119 coordonn
\82es de la fen
\88tre
\85 l'
\82cran, soit la taille de cette fen
\88tre.
\r\r
120 Un troisi
\8ame appel de HPAGE avec l'un des deux derniers param
\88tres
\r\r
121 nuls aura pour effet de l'effacer.
\r\r
123 Exemple : CALL HPAGE(0,posx,posy);
\r\r
124 ------- CALL HPAGE(0,longueur,hauteur);
\r\r
126 Le coin en haut
\85 gauche de la fen
\88tre 0 sera aux coordonn
\82es
\r\r
127 (posx,posy) et la fen
\88tre aura une taille de longueur X hauteur.
\r\r
129 CALL HPAGE(0,0,valeur)
\r\r
130 ou CALL HPAGE(0,valeur,0)
\r\r
131 ou CALL HPAGE(0,0,0)
\r\r
133 La fen
\88tre 0 est effac
\82e.
\r\r
135 2.2 : La proc
\82dure GRON
\r\r
136 -----------------
\r\r
138 CALL GRON(numerofenetre);
\r\r
139 VAR numerofenetre : INTEGER;
\r\r
141 La proc
\82dure GRON affiche la fen
\88tre de num
\82ro numerofenetre
\85\r\r
142 l'
\82cran. Ensuite pour s
\82lectionner la fen
\88tre dans laquelle on veut
\r\r
143 travailler, on refait un deuxi
\8ame appel de cette commande.
\r\r
145 Exemple : CALL HPAGE(0,0,0);
\r\r
146 CALL HPAGE(1,150,0);
\r\r
147 CALL HPAGE(0,100,100);
\r\r
148 CALL HPAGE(1,200,150);
\r\r
149 CALL GRON(0); Affichage de la fen
\88tre 0
\r\r
150 CALL GRON(1); Affichage de la fen
\88tre 1
\r\r
152 CALL GRON(0); S
\82lection de la fen
\88tre 1
\r\r
156 2.3 : La proc
\82dure GROFF
\r\r
157 ------------------
\r\r
161 L'appel
\85 cette commande a pour cons
\82quence l'effa
\87age de toutes les
\r\r
162 fen
\88tres et la fin d'ex
\82cution du processus XIIUWGRAF.
\r\r
165 |----------------------------------------------------------------------------|
\r\r
166 |----------------------------------------------------------------------------|
\r\r
167 |----------------------------------------------------------------------------|
\r\r
170 3 : Description des diff
\82rentes commandes graphiques
\r\r
171 ------------------------------------------------
\r\r
173 3.1 : Proc
\82dure COLOR
\r\r
176 CALL COLOR(couleur);
\r\r
177 VAR couleur : INTEGER;
\r\r
179 Permet de d
\82terminer la couleur d'avant plan (0 pour noir et une
\r\r
180 valeur sup
\82rieure ou
\82gale
\85 1 pour blanc). Cette commande a une
\r\r
181 action locale
\85 la fen
\88tre s
\82lectionn
\82e par GRON.
\r\r
183 3.2 : Proc
\82dure BORDER
\r\r
186 CALL BORDER(couleur);
\r\r
187 VAR couleur : INTEGER;
\r\r
189 Commande qui s
\82lectionne la couleur de fond.
\r\r
191 3.3 : Proc
\82dure MOVE
\r\r
194 CALL MOVE(posx,posy);
\r\r
195 VAR posx,posy : INTEGER;
\r\r
197 posx et posy deviennent les coordonn
\82es courantes dans la fen
\88tre.
\r\r
198 Comme COLOR, MOVE n'agit que sur la fen
\88tre s
\82lectionn
\82e.
\r\r
200 3.4 : Proc
\82dure CLS
\r\r
205 Efface la fen
\88tre en blanc par d
\82faut ou de la couleur sp
\82cifi
\82e par
\r\r
206 la commande BORDER.
\r\r
208 3.5 : Prc
\82dure POINT
\r\r
212 VAR x,y : INTEGER;
\r\r
214 Affiche un point aux coordonn
\82es (x,y) de la couleur sp
\82cifi
\82e par la
\r\r
215 commande COLOR ou noir par d
\82faut. La position courante dans la fen
\88tre
\r\r
218 3.6 : Proc
\82dure DRAW
\r\r
222 VAR x,y : INTEGER;
\r\r
224 Affiche une ligne qui part de la position courante dans la fen
\88tre
\r\r
225 vers la position (x,y). La position courante dans la fen
\88tre devient
\r\r
226 (x,y). Elle est affich
\82e avec la couleur courante (s
\82lectionn
\82e avec
\r\r
227 COLOR) et avec le style de trac
\82 courant (s
\82lectionn
\82e par la commande
\r\r
228 STYLE d
\82crite plus loin);
\r\r
230 3.7 : Proc
\82dure CIRB
\r\r
233 CALL CIRB(posx,posy,rayon,alpha,beta,cbord,style,p,q);
\r\r
234 VAR posx,posy,rayon,p,q,cbord,style : INTEGER;
\r\r
235 VAR alpha,beta : REAL;
\r\r
237 Si style a pour valeur 0, CIRB affiche un arc de centre (posx,posy),
\r\r
238 de rayon rayon. alpha et beta sont les angles de d
\82part et d'arriv
\82e de
\r\r
239 l'arc en question. Si alpha=beta alors un cercle (ou une ellipse) est
\r\r
240 dessin
\82. Si p=q alors on obtient un cercle, si p>q une ellipse allong
\82e
\r\r
241 dans le sens vertical est obtenue, sinon si p>q on a pour r
\82sultat une
\r\r
242 ellipse allong
\82e dans le sens horizontal. Cet affichage est fait avec
\r\r
243 la couleur d'avant plan courante et le style de trac
\82 courant.
\r\r
245 Si style vaut 1, CIRB affiche un arc rempli ressemblant
\85 une portion
\r\r
246 de camenbert avec la couleur d'avant plan courante.
\r\r
248 Si style vaut 2, l'int
\82rieur de l'arc d
\82limit
\82 par sa courbure et la
\r\r
249 corde joignant ses deux extr
\88mit
\82s est rempli avec la couleur d'avant
\r\r
252 Si l'on choisi pour style une valeur <0 ou >3, la valeur 0 est prise.
\r\r
254 3.8 : Proc
\82dure HFILL
\r\r
260 Trace une ligne horizontale de la position courante (posx,posy) vers
\r\r
261 les coordonn
\82es (posx,y) avec la couleur d'avant plan courante et le
\r\r
262 style de trac
\82 courant. La position courante dans la fen
\88tre devient
\r\r
265 3.9 : Proc
\82dure VFILL
\r\r
271 Trace une ligne verticale de la position courante (posx,posy) vers
\r\r
272 les coordonn
\82es (x,posy) avec la couleur d'avant plan courante et le
\r\r
273 style de trac
\82 courant. La position courante dans la fen
\88tre devient
\r\r
276 3.10 : Fonction INXPOS
\r\r
280 VAR posx : INTEGER;
\r\r
282 Retourne la position courante sur l'axe des abscisses de la fen
\88tre
\r\r
285 3.11 : Fonction INYPOS
\r\r
289 VAR posy : INTEGER;
\r\r
291 Retourne la position courante sur l'axe des ordonn
\82es de la fen
\88tre
\r\r
294 3.12 : Commandes de saisie et de restitution d'une partie d'une
\r\r
295 --------------------------------------------------------
\r\r
299 3.12.1 : Fonction GETMAP
\r\r
302 tab:=GETMAP(x,y);
\r\r
303 VAR x,y : INTEGER;
\r\r
304 VAR tab : ARRAYOF INTEGER;
\r\r
306 Sauve dans le tableau tab une partie rectanguraire de la fen
\88tre
\r\r
307 courante, le coin en haut
\85 gauche
\82tant la position courante dans la
\r\r
308 fen
\88tre et le coin en bas
\85 droite
\82tant la position (x,y).
\r\r
309 Le tableau devrait avoir une taille minimum de :
\r\r
310 4 + (nbrelignes * (3 + nbrecol div 8)) octets
\r\r
312 En sachant qu'en LOGLAN un entier tient sur 4 octets, il ne vous
\r\r
313 reste plus qu'
\85 faire votre cuisine.
\r\r
315 3.12.2 : Proc
\82dure PUTMAP
\r\r
318 CALL PUTMAP(tab);
\r\r
319 VAR tab : ARRAYOF INTEGER;
\r\r
321 Affiche la portion d'image sauv
\82e dans tab
\85 la position
\r\r
322 courante dans la fen
\88tre. Ce qu'il y avait
\85 cette m
\88me position avant
\r\r
323 l'affichage est totalement effa
\87\82.
\r\r
325 3.12.3 : Proc
\82dure ORMAP
\r\r
329 VAR tab : ARRAYOF INTEGER;
\r\r
331 Lors de l'affichage, une op
\82ration OR est faite avec la portion
\r\r
332 d'image sauv
\82e dans tab et celle
\85 la position courante dans la
\r\r
333 fen
\8atre : l'image est donc affich
\82e en "transparence".
\r\r
335 3.12.4 : Proc
\82dure XORMAP
\r\r
338 CALL XORMAP(tab);
\r\r
339 VAR tab : ARRAYOF INTEGER;
\r\r
341 M
\88me chose qu'avec ORMAP
\85 la diff
\82rence qu'une op
\82ration XOR est
\r\r
342 faite avec l'image sauv
\82e dans tab et celle
\85 la position courante
\r\r
343 dans la fen
\88tre.
\r\r
345 3.13 : Fonction INPIX
\r\r
348 couleur:=INPIX(x,y);
\r\r
349 VAR couleur,x,y : INTEGER;
\r\r
351 Cette fonction met la postion courante dans la fen
\88tre
\85 (x,y) et
\r\r
352 renvoie la couleur du point de la fen
\88tre
\85 cette position(0 pour
\r\r
353 noir et 1 pour blanc).
\r\r
355 3.14 : Proc
\82dure STYLE
\r\r
358 CALL STYLE(style);
\r\r
359 VAR style : INTEGER;
\r\r
361 D
\82finit le style de trac
\82 dans la fen
\88tre courante.
\r\r
363 Si style vaut 0, le trac
\82 sera fait avec la couleur de fond.
\r\r
364 Si style vaut 1, le trac
\82 sera fait avec la couleur d'avant plan.
\r\r
365 Si style vaut 2,3,4 ou 5, le trac
\82 sera fait avec les motif suivant :
\r\r
367 2 : ******...******...******
\r\r
369 3 : ****......****......****
\r\r
371 4 : **...**...**...**
\r\r
373 5 : **.........**.........**
\r\r
375 * : couleur d'avant plan
\r\r
376 . : couleur de fond
\r\r
378 3.15 : Commandes de saisie et d'affichage de caract
\8ares
\r\r
379 ------------------------------------------------
\r\r
381 3.15.1 : Fonction INKEY
\r\r
385 VAR ascii : INTEGER;
\r\r
387 Retourne le code ascii de la touche tap
\82e au clavier ou la
\r\r
388 valeur 0 sinon. L'appui sur les touches sp
\82ciales (comme SHIFT,
\r\r
389 les touche F1,F2,...,CONTROL,...) renvoient des valeurs
\r\r
390 n
\82gatives. Vous verrez bien par vous-m
\88me quelles sont ces
\r\r
391 valeurs en faisant un petit programme test.
\r\r
393 3.15.2 : Proc
\82dure HASCII
\r\r
396 CALL HASCII(code);
\r\r
397 VAR code : INTEGER;
\r\r
399 Affiche le caract
\8are de code ascii code avec le coin en haut
\r\r
400 \85 gauche du caract
\8are
\85 la position courante (posx,posy) dans la
\r\r
401 fen
\88tre. La position courante devient (posx+largeur,posy).
\r\r
403 Si code=0, une partie rectangulaire de largeurXhauteur est
\r\r
404 affich
\82e avec la couleur de fond de la fen
\88tre courante et
\r\r
405 position courante dans la fen
\88tre reste inchang
\82e.
\r\r
407 En g
\82n
\82ral la fonte par d
\82faut qui est utilis
\82e sous
\r\r
408 XWindows a une hauteur de dix points et une largeur de six points.
\r\r
410 3.15.3 : Proc
\82dure OUTSTRING
\r\r
411 -------------------
\r\r
413 CALL OUTSTRING(tab);
\r\r
414 VAR tab : ARRAYOF CHAR;
\r\r
416 Affiche la chaine de caract
\8are tab
\85 la position courante
\r\r
417 (posx,posy) de la fen
\88tre. La position courante devient
\r\r
418 (posx+largeur*longueur_chaine,posy) o
\97 largeur est la largeur
\r\r
419 de la fonte utilis
\82e.
\r\r
421 3.16 : Proc
\82dure PUSHXY
\r\r
426 Sauvegarde le contexte graphique dans une pile, c'est
\85 dire la
\r\r
427 position courante dans la fen
\88tre,les couleurs de fond et d'avant plan
\r\r
428 et le style de trac
\82 s
\82lectionn
\82 pour cette fen
\88tre.
\r\r
430 Chaque Fen
\88tre est dot
\82e de sa pile de sauvegarde qui lui est propre
\r\r
431 et chaque pile a une profondeur maximale de 16.
\r\r
433 3.17 : Proc
\82dure POPXY
\r\r
438 Restore dans la fen
\88tre courante le contexte graphique situ
\82 en haut
\r\r
439 de la pile de sauvegarde et ce contexte est enlev
\82 de la pile.
\r\r
442 |----------------------------------------------------------------------------|
\r\r
443 |----------------------------------------------------------------------------|
\r\r
444 |----------------------------------------------------------------------------|
\r\r
447 4 : Description des commandes de gestion de la souris
\r\r
448 -------------------------------------------------
\r\r
450 4.1 : Proc
\82dure STATUS
\r\r
453 CALL STATUS(h,v,l,r,c);
\r\r
454 VAR h,v : INTEGER;
\r\r
455 VAR l,r,c : BOOLEAN;
\r\r
457 Cette proc
\82dure renvoie la position courante (h,v) du pointeur de la
\r\r
458 souris ainsi que l'
\82tat des boutons de la souris.
\r\r
459 l,r,c sont respectivement les boutons gauche, droit et du centre de la
\r\r
462 Ces valeurs bool
\82ennes ont la valeur TRUE si le bouton correspondant
\r\r
465 4.2 : Proc
\82dure GETPRESS
\r\r
466 ------------------
\r\r
468 CALL GETPRESS(b,h,v,p,l,r,c);
\r\r
469 VAR b,h,v,p : INTEGER;
\r\r
470 VAR l,r,c : BOOLEAN;
\r\r
472 Cette proc
\82dure renvoie le nombre de fois o
\97 le bouton s
\82lectionn
\82 a
\r\r
473 \82t
\82 appuy
\82 depuis le dernier appel
\85 cette commande, ainsi que la
\r\r
474 position (h,v) du curseur la derni
\8are fois que le bouton consid
\82r
\82 a
\r\r
475 \82t
\82 appuy
\82.
\r\r
477 Le param
\88tre b permet de s
\82lectionner le bouton
\85 tester :
\r\r
478 - 0 : bouton gauche
\r\r
479 - 1 : bouton droit
\r\r
480 - 2 : bouton du milieu
\r\r
482 En sus, la proc
\82dure renvoie l'
\82tat courant des trois boutons l,r,c.
\r\r
484 4.3 : Proc
\82dure GETRELEASE
\r\r
485 --------------------
\r\r
487 CALL GETRELEASE(b,h,v,p,l,r,c);
\r\r
488 VAR b,h,v,p : INTEGER;
\r\r
489 VAR l,r,c : BOOLEAN;
\r\r
491 Cette proc
\82dure a la m
\88me fonction que GETPRESS
\85 la diff
\82rence
\r\r
492 qu'elle teste le nombre de rel
\83chements du bouton s
\82lectionn
\82 et non
\r\r
495 4.4 : Proc
\82dure GETMOVEMENT
\r\r
496 ---------------------
\r\r
498 CALL GETMOVEMENT(h,v);
\r\r
499 VAR h,v : INTEGER;
\r\r
501 Cette proc
\82dure renvoie le mouvement relatif (h,v) du curseur de la
\r\r
502 souris depuis son dernier appel.
\r\r