retour présentation SVGALIB

source de tstvga2.c

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


retour présentation SVGALIB

Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002