/* test svgalib n°1 - tracés de base - Pat TRAU mai 02
on peut ici passer en mode graphique, tracer points et droites, et quitter
pour compiler - 2 solutions :
a) solution finale
gcc src.c -O3 -o exec -lvga
rendre root proriétaire de exec
chmod u+s exec (sous root)
tout le monde peut l'exécuter (mais ne laisser w qu'à root !)
b) en cours de développement
sous un user normal, travailler et compiler (comme avant)
ouvrir une seconde fenêtre dans le même répertoire, su, et lancer
le prog dans cette console ( ./exec )
*/
#include <stdio.h>
#include <stdlib.h>
#include <vga.h>
int choix_mode(void)
{
int m;
m=vga_getdefaultmode(); //retourne la valeur de la variable d'environnement
// SVGALIB_DEFAULT_MODE, -1 si inconnue
if(mode<0) //ou alors mettez ici return 4;
{
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"); //4 marche presque partout
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 main(void)
{
int i,mode;
mode=choix_mode();
vga_init();
// vga_setmode(G320x200x256); //à l'IPST, 207 et pat, ok jusqu'à 12
vga_setmode(mode);
tracecadre();
vga_setcolor(14);
/***********************
ces couleurs sont celles définies en VGA standard,
0 - black.
1 - blue.
2 - green.
3 - cyan.
4 - red.
5 - magenta.
6 - brown.
7 - grey.
8 - dark grey (light black).
9 - light blue.
10 - light green.
11 - light cyan.
12 - light red.
13 - light magenta.
14 - yellow (light brown).
15 - white (light grey).
******************************/
for(i=0;i<vga_getydim();i++) vga_drawpixel(i,i); //0,0=coin sup gauche
fprintf(stderr,"appuyez une touche pour quitter"); //on ne peut pas écrire dans le graphique mais dans la console ayant lancé le prog
vga_getch(); //attend un touche, retroune la touche appuyée (si nécessaire)
//vga_getkey() lit mais n'attend pas (retourne 0 si rien d'appuyé)
// sleep(20); //attendre, quand vga_getch ne marchait pas
vga_setmode(TEXT); //retourner au mode texte (important)
printf("fini\n"); //les printf se font sur la console où on a lancé la commande (ou dans CTRL ALT 8 suivant les cas)
return EXIT_SUCCESS;
}
Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002