/* 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