DOCUMENTATION SUR XIIUWGRAF --------------------------- Gestion de graphismes en multifenˆtrage sous XWindows. 1 : Diff‚rences essentielles avec la librairie graphique IIUWGRAPH 2 : Ouvrir et fermer une fenˆtre avec XIIUWGRAF 2.1 : Proc‚dure HPAGE 2.2 : Proc‚dure GRON 2.3 : Proc‚dure GROFF 3 : Description des diverses commandes d‚di‚es aux graphismes utilisables par l'interprˆteur LOGLAN 3.1 : Proc‚dure COLOR 3.2 : Proc‚dure BORDER 3.3 : Proc‚dure MOVE 3.4 : Fonction CLS 3.5 : Proc‚dure POINT 3.6 : Proc‚dure DRAW 3.7 : Proc‚dure CIRB 3.8 : Proc‚dure HFILL 3.9 : Proc‚dure VFILL 3.10 : Fonction INXPOS 3.11 : Fonction INYPOS 3.12 : Commandes de saisie et de restition d'une partie d'une fenˆtre 3.12.1 : Fonction GETMAP 3.12.2 : Proc‚dure PUTMAP 3.12.3 : Proc‚dure ORMAP 3.12.4 : Proc‚dure XORMAP 3.13 : Proc‚dure INPIX 3.14 : Proc‚dure STYLE 3.15 : Commandes de saisie et d'affichage de caractŠres 3.15.1 : Fonction INKEY 3.15.2 : Proc‚dure HASCII 3.15.3 : Proc‚dure OUTSTRING 3.16 : Proc‚dure PUSHXY 3.17 : Proc‚dure POPXY 4 : Description des commandes de gestion de la souris 4.1 : Proc‚dure STATUS 4.2 : Proc‚dure GETPRESS 4.3 : Proc‚dure GETRELEASE 4.4 : Proc‚dure GETMOVEMENT |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| 1 : Diff‚rences essentielles entre XIIUWGRAF et IIUWGRAPH ----------------------------------------------------- Ce paragraphe a pour objet de donner certaines particularit‚s de XIIUWGRAF,ceci afin de comprendre son fonctionnement g‚n‚ral. Tout d'abord il est important de signaler qu'… la diff‚rence de IIUWGRAPH, XIIUWGRAF est un programme … part entiŠre (plus exactement un processus cr‚e par l'interprˆteur LOGLAN).C'est pour cela qu'il est d‚conseill‚ (sauf cas de force majeure) de faire CONTROL-C pour terminer un programme : en effet, ceci a pour effet de terminer l'ex‚cution de l'interprˆteur sans terminer XIIUWGRAF (cr‚ation d'un processus zombie). Pour terminer une session graphique, il faudra donc automatiquement taper dans le programme en LOGLAN la commande GROFF car elle va terminer l'ex‚cution de XIIUWGRAF. Certaines commandes de IIUWGRAPH n'ont pas ‚t‚ impl‚ment‚es (par exemple HIDECURSOR,SHOWCURSOR,PALLET, ...), soit parce qu'elles seraient d'un int‚rˆt trŠs faible dans la gestion de XWindows,soit parce qu'elles seraient difficilement r‚alisables, soit parce que les programmeurs ont ‚t‚ atteints de fain‚antise chronique. Enfin, dans vos programmes il faudra imp‚rativement que vos unit‚s g‚rant le graphisme h‚ritent de la classe IIUWGRAPH sous peine d'erreurs … la compilation . |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| 2 : Ouvrir et fermer une fenˆtre avec XIIUWGRAF ------------------------------------------- XIIUWGRAF permet … l'utilisateur d'ouvrir jusqu'… seize fenˆtres … l'‚cran.Ces fenˆtres sont s‚lectionnables dans le programme en LOGLAN par la commande GRON d‚crite plus loin. 2.1 : La proc‚dure HPAGE ------------------ CALL HPAGE(numerofenetre,x,y); VAR numerofenetre,x,y : INTEGER; Cette proc‚dure a pour r“le de donner la position … laquelle sera affich‚e la fenˆtre dans l'‚cran, de donner la taille de cette fenˆtre et de l'effacer quand le besoin s'en fait sentir. Cette proc‚dure devra ˆtre appel‚e deux fois pour ouvrir une fenˆtre. HPAGE re‡oit trois paramˆtres : le premier est le num‚ro de la fenˆtre (un entier compris entre 0 et 15),les deux suivants sont soit les coordonn‚es de la fenˆtre … l'‚cran, soit la taille de cette fenˆtre. Un troisiŠme appel de HPAGE avec l'un des deux derniers paramˆtres nuls aura pour effet de l'effacer. Exemple : CALL HPAGE(0,posx,posy); ------- CALL HPAGE(0,longueur,hauteur); Le coin en haut … gauche de la fenˆtre 0 sera aux coordonn‚es (posx,posy) et la fenˆtre aura une taille de longueur X hauteur. CALL HPAGE(0,0,valeur) ou CALL HPAGE(0,valeur,0) ou CALL HPAGE(0,0,0) La fenˆtre 0 est effac‚e. 2.2 : La proc‚dure GRON ----------------- CALL GRON(numerofenetre); VAR numerofenetre : INTEGER; La proc‚dure GRON affiche la fenˆtre de num‚ro numerofenetre … l'‚cran. Ensuite pour s‚lectionner la fenˆtre dans laquelle on veut travailler, on refait un deuxiŠme appel de cette commande. Exemple : CALL HPAGE(0,0,0); CALL HPAGE(1,150,0); CALL HPAGE(0,100,100); CALL HPAGE(1,200,150); CALL GRON(0); Affichage de la fenˆtre 0 CALL GRON(1); Affichage de la fenˆtre 1 ... CALL GRON(0); S‚lection de la fenˆtre 1 ... 2.3 : La proc‚dure GROFF ------------------ CALL GROFF; L'appel … cette commande a pour cons‚quence l'effa‡age de toutes les fenˆtres et la fin d'ex‚cution du processus XIIUWGRAF. |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| 3 : Description des diff‚rentes commandes graphiques ------------------------------------------------ 3.1 : Proc‚dure COLOR --------------- CALL COLOR(couleur); VAR couleur : INTEGER; Permet de d‚terminer la couleur d'avant plan (0 pour noir et une valeur sup‚rieure ou ‚gale … 1 pour blanc). Cette commande a une action locale … la fenˆtre s‚lectionn‚e par GRON. 3.2 : Proc‚dure BORDER ---------------- CALL BORDER(couleur); VAR couleur : INTEGER; Commande qui s‚lectionne la couleur de fond. 3.3 : Proc‚dure MOVE -------------- CALL MOVE(posx,posy); VAR posx,posy : INTEGER; posx et posy deviennent les coordonn‚es courantes dans la fenˆtre. Comme COLOR, MOVE n'agit que sur la fenˆtre s‚lectionn‚e. 3.4 : Proc‚dure CLS ------------- CALL CLS; Efface la fenˆtre en blanc par d‚faut ou de la couleur sp‚cifi‚e par la commande BORDER. 3.5 : Prc‚dure POINT -------------- CALL POINT(x,y); VAR x,y : INTEGER; Affiche un point aux coordonn‚es (x,y) de la couleur sp‚cifi‚e par la commande COLOR ou noir par d‚faut. La position courante dans la fenˆtre devient (x,y). 3.6 : Proc‚dure DRAW -------------- CALL DRAW(x,y); VAR x,y : INTEGER; Affiche une ligne qui part de la position courante dans la fenˆtre vers la position (x,y). La position courante dans la fenˆtre devient (x,y). Elle est affich‚e avec la couleur courante (s‚lectionn‚e avec COLOR) et avec le style de trac‚ courant (s‚lectionn‚e par la commande STYLE d‚crite plus loin); 3.7 : Proc‚dure CIRB -------------- CALL CIRB(posx,posy,rayon,alpha,beta,cbord,style,p,q); VAR posx,posy,rayon,p,q,cbord,style : INTEGER; VAR alpha,beta : REAL; Si style a pour valeur 0, CIRB affiche un arc de centre (posx,posy), de rayon rayon. alpha et beta sont les angles de d‚part et d'arriv‚e de l'arc en question. Si alpha=beta alors un cercle (ou une ellipse) est dessin‚. Si p=q alors on obtient un cercle, si p>q une ellipse allong‚e dans le sens vertical est obtenue, sinon si p>q on a pour r‚sultat une ellipse allong‚e dans le sens horizontal. Cet affichage est fait avec la couleur d'avant plan courante et le style de trac‚ courant. Si style vaut 1, CIRB affiche un arc rempli ressemblant … une portion de camenbert avec la couleur d'avant plan courante. Si style vaut 2, l'int‚rieur de l'arc d‚limit‚ par sa courbure et la corde joignant ses deux extrˆmit‚s est rempli avec la couleur d'avant plan courante. Si l'on choisi pour style une valeur <0 ou >3, la valeur 0 est prise. 3.8 : Proc‚dure HFILL --------------- CALL HFILL(y); VAR y : INTEGER; Trace une ligne horizontale de la position courante (posx,posy) vers les coordonn‚es (posx,y) avec la couleur d'avant plan courante et le style de trac‚ courant. La position courante dans la fenˆtre devient (posx,y). 3.9 : Proc‚dure VFILL --------------- CALL VFILL(x); VAR x : INTEGER; Trace une ligne verticale de la position courante (posx,posy) vers les coordonn‚es (x,posy) avec la couleur d'avant plan courante et le style de trac‚ courant. La position courante dans la fenˆtre devient (x,posy). 3.10 : Fonction INXPOS --------------- posx:=INXPOS; VAR posx : INTEGER; Retourne la position courante sur l'axe des abscisses de la fenˆtre courante. 3.11 : Fonction INYPOS --------------- posy:=INYPOS; VAR posy : INTEGER; Retourne la position courante sur l'axe des ordonn‚es de la fenˆtre courante. 3.12 : Commandes de saisie et de restitution d'une partie d'une -------------------------------------------------------- fenˆtre. -------- 3.12.1 : Fonction GETMAP --------------- tab:=GETMAP(x,y); VAR x,y : INTEGER; VAR tab : ARRAYOF INTEGER; Sauve dans le tableau tab une partie rectanguraire de la fenˆtre courante, le coin en haut … gauche ‚tant la position courante dans la fenˆtre et le coin en bas … droite ‚tant la position (x,y). Le tableau devrait avoir une taille minimum de : 4 + (nbrelignes * (3 + nbrecol div 8)) octets En sachant qu'en LOGLAN un entier tient sur 4 octets, il ne vous reste plus qu'… faire votre cuisine. 3.12.2 : Proc‚dure PUTMAP ---------------- CALL PUTMAP(tab); VAR tab : ARRAYOF INTEGER; Affiche la portion d'image sauv‚e dans tab … la position courante dans la fenˆtre. Ce qu'il y avait … cette mˆme position avant l'affichage est totalement effa‡‚. 3.12.3 : Proc‚dure ORMAP --------------- CALL ORMAP(tab); VAR tab : ARRAYOF INTEGER; Lors de l'affichage, une op‚ration OR est faite avec la portion d'image sauv‚e dans tab et celle … la position courante dans la fenŠtre : l'image est donc affich‚e en "transparence". 3.12.4 : Proc‚dure XORMAP ---------------- CALL XORMAP(tab); VAR tab : ARRAYOF INTEGER; Mˆme chose qu'avec ORMAP … la diff‚rence qu'une op‚ration XOR est faite avec l'image sauv‚e dans tab et celle … la position courante dans la fenˆtre. 3.13 : Fonction INPIX -------------- couleur:=INPIX(x,y); VAR couleur,x,y : INTEGER; Cette fonction met la postion courante dans la fenˆtre … (x,y) et renvoie la couleur du point de la fenˆtre … cette position(0 pour noir et 1 pour blanc). 3.14 : Proc‚dure STYLE --------------- CALL STYLE(style); VAR style : INTEGER; D‚finit le style de trac‚ dans la fenˆtre courante. Si style vaut 0, le trac‚ sera fait avec la couleur de fond. Si style vaut 1, le trac‚ sera fait avec la couleur d'avant plan. Si style vaut 2,3,4 ou 5, le trac‚ sera fait avec les motif suivant : 2 : ******...******...****** 3 : ****......****......**** 4 : **...**...**...** 5 : **.........**.........** * : couleur d'avant plan . : couleur de fond 3.15 : Commandes de saisie et d'affichage de caractŠres ------------------------------------------------ 3.15.1 : Fonction INKEY -------------- ascii:=INKEY; VAR ascii : INTEGER; Retourne le code ascii de la touche tap‚e au clavier ou la valeur 0 sinon. L'appui sur les touches sp‚ciales (comme SHIFT, les touche F1,F2,...,CONTROL,...) renvoient des valeurs n‚gatives. Vous verrez bien par vous-mˆme quelles sont ces valeurs en faisant un petit programme test. 3.15.2 : Proc‚dure HASCII ---------------- CALL HASCII(code); VAR code : INTEGER; Affiche le caractŠre de code ascii code avec le coin en haut … gauche du caractŠre … la position courante (posx,posy) dans la fenˆtre. La position courante devient (posx+largeur,posy). Si code=0, une partie rectangulaire de largeurXhauteur est affich‚e avec la couleur de fond de la fenˆtre courante et position courante dans la fenˆtre reste inchang‚e. En g‚n‚ral la fonte par d‚faut qui est utilis‚e sous XWindows a une hauteur de dix points et une largeur de six points. 3.15.3 : Proc‚dure OUTSTRING ------------------- CALL OUTSTRING(tab); VAR tab : ARRAYOF CHAR; Affiche la chaine de caractŠre tab … la position courante (posx,posy) de la fenˆtre. La position courante devient (posx+largeur*longueur_chaine,posy) o— largeur est la largeur de la fonte utilis‚e. 3.16 : Proc‚dure PUSHXY ---------------- CALL PUSHXY; Sauvegarde le contexte graphique dans une pile, c'est … dire la position courante dans la fenˆtre,les couleurs de fond et d'avant plan et le style de trac‚ s‚lectionn‚ pour cette fenˆtre. Chaque Fenˆtre est dot‚e de sa pile de sauvegarde qui lui est propre et chaque pile a une profondeur maximale de 16. 3.17 : Proc‚dure POPXY --------------- CALL POPXY; Restore dans la fenˆtre courante le contexte graphique situ‚ en haut de la pile de sauvegarde et ce contexte est enlev‚ de la pile. |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| |----------------------------------------------------------------------------| 4 : Description des commandes de gestion de la souris ------------------------------------------------- 4.1 : Proc‚dure STATUS ---------------- CALL STATUS(h,v,l,r,c); VAR h,v : INTEGER; VAR l,r,c : BOOLEAN; Cette proc‚dure renvoie la position courante (h,v) du pointeur de la souris ainsi que l'‚tat des boutons de la souris. l,r,c sont respectivement les boutons gauche, droit et du centre de la souris. Ces valeurs bool‚ennes ont la valeur TRUE si le bouton correspondant est appuy‚. 4.2 : Proc‚dure GETPRESS ------------------ CALL GETPRESS(b,h,v,p,l,r,c); VAR b,h,v,p : INTEGER; VAR l,r,c : BOOLEAN; Cette proc‚dure renvoie le nombre de fois o— le bouton s‚lectionn‚ a ‚t‚ appuy‚ depuis le dernier appel … cette commande, ainsi que la position (h,v) du curseur la derniŠre fois que le bouton consid‚r‚ a ‚t‚ appuy‚. Le paramˆtre b permet de s‚lectionner le bouton … tester : - 0 : bouton gauche - 1 : bouton droit - 2 : bouton du milieu En sus, la proc‚dure renvoie l'‚tat courant des trois boutons l,r,c. 4.3 : Proc‚dure GETRELEASE -------------------- CALL GETRELEASE(b,h,v,p,l,r,c); VAR b,h,v,p : INTEGER; VAR l,r,c : BOOLEAN; Cette proc‚dure a la mˆme fonction que GETPRESS … la diff‚rence qu'elle teste le nombre de relƒchements du bouton s‚lectionn‚ et non l'appui. 4.4 : Proc‚dure GETMOVEMENT --------------------- CALL GETMOVEMENT(h,v); VAR h,v : INTEGER; Cette proc‚dure renvoie le mouvement relatif (h,v) du curseur de la souris depuis son dernier appel. Zatsolfolcs...