/* test svgalib n°2 - utilisation de la souris (mais sans curseur !) - Patrick TRAU mai 02 il n'y a rien de spécial à dire, yaqu'à regarder pour compiler (voir plus de détails dans test n°1) gcc sample.c -O3 -o sample -lvga chmod u+s sample */ #include <stdio.h> #include <stdlib.h> #include <vga.h> #include <vgamouse.h> int choix_mode(void) { int m; printf("choisissez une définition qui ne plante pas votre carte graphique:\n"); printf(" G320x200x16 1"); printf(" G640x200x16 2"); printf(" G640x350x16 3"); printf(" G640x480x16 4"); printf(" G320x200x256 5"); printf(" G320x240x256 6"); printf(" G320x400x256 7"); printf(" G360x480x256 8"); printf(" G640x480x2 9"); printf(" G640x480x256 10"); printf(" G800x600x256 11"); printf(" G1024x768x256 12 ? "); scanf("%d",&m); return m; } void tracecadre(void) { int x,y,coul,i; x=vga_getxdim(); //récup résolution actuelle y=vga_getydim(); // coul=vga_getcolors(); //récup nb de couleurs dans le mode actu coul=vga_white(); //récup n° de couleur du blanc dans le mode actu vga_drawline(0,0,x-1,0); vga_drawline(x-1,0,x-1,y-1); vga_drawline(x-1,y-1,0,y-1); vga_drawline(0,y-1,0,0); } int choix_souris(void) // puisqu'il y a des printf, à faire avant vga_init ! { int m; printf("choisissez votre souris :\n"); printf(" MOUSE_MICROSOFT 0"); printf(" MOUSE_MOUSESYSTEMS 1"); printf(" MOUSE_MMSERIES 2"); printf(" MOUSE_LOGITECH 3"); printf(" MOUSE_BUSMOUSE 4"); printf(" MOUSE_PS2 5"); printf(" MOUSE_LOGIMAN 6"); printf(" MOUSE_GPM 7"); printf(" MOUSE_SPACEBALL 8"); printf(" MOUSE_NONE 9"); printf(" MOUSE_INTELLIMOUSE 10"); printf(" MOUSE_IMPS2 11 ? "); scanf("%d",&m); return m; } int main(void) { int i,mode,typesouris; int mousetype,c,x=0,y=0; mode= choix_mode(); //4 @home, 4 à 12 à l'ipst typesouris=choix_souris(); //MOUSE_PS2 à l'ipst, MOUSE_MICROSOFT @home vga_init(); vga_setmode(mode); tracecadre(); vga_setcolor(14); for(i=0;i<vga_getydim();i++) vga_drawpixel(i,i); //0,0=coin sup gauche //debut tstsouris mousetype=mouse_init("/dev/mouse",typesouris,400); // /dev/psaux @ipst /dev/ttyS0 @home mais /dev/mouse marche partout mouse_setxrange( 0, vga_getxdim()-1); // sinon quand on sort à droite on rentre à gauche ! mouse_setyrange( 0, vga_getydim()-1); vga_setmousesupport(mousetype); mouse_setscale(50); //plus c'est grand plus la souris est précise mais lente do { mouse_update(); // à faire à tout bout de champ pour que les fonctions suiv soient mises à jour c=7&mouse_getbutton(); //0 pas de bouton, 4 gauche, 1 droite, 5 les 2 (2 boutons) le bouton du milieu devrait valoir 2 mais je n'ai pas testé vga_setcolor(c+10); vga_drawline(x=mouse_getx(),y=mouse_gety(),x,y); //en C ANSI les args sont évalués de droite à gauche !! } while(c<5); //sortie quand click droite + gauche ! //fin testsouris vga_setmode(TEXT); //retourner au mode texte (important) printf("fini\n"); //les printf se font sur la console où on a lancé la commande return EXIT_SUCCESS; }
Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002