Correction de quelaues bugs: attente fin clic, sauvegarde sous nux, désactivation de distcc ds le makefile, début de gestion clavier (pas encore ascii mais bas niveau)

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@48 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2008-03-31 12:00:21 +00:00
parent 22eac2bb82
commit 86edb4d1fb
6 changed files with 5889 additions and 5913 deletions

View File

@ -1,4 +1,4 @@
CC = gcc CC = powerpc-linux-gnu-gcc
COPT = -Wall -Os -c COPT = -Wall -Os -c
LOPT = -lSDL -o grafx2 LOPT = -lSDL -o grafx2

116
divers.c
View File

@ -7,15 +7,6 @@
// Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème // Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème
byte Recuperer_nb_lignes(void) byte Recuperer_nb_lignes(void)
{ {
/*
mov ax,1130h
xor bh,bh
push es
int 10h
pop es
inc dl
mov [esp+28],dl
*/
puts("Recuperer_nb_lignes non implémenté!\n"); puts("Recuperer_nb_lignes non implémenté!\n");
return 0; return 0;
} }
@ -44,15 +35,15 @@ word Palette_Compter_nb_couleurs_utilisees(dword* Tableau)
//On va maintenant compter dans la table les couleurs utilisées: //On va maintenant compter dans la table les couleurs utilisées:
Couleur=0; Couleur=0;
do do
{ {
if (Tableau[Couleur]!=0) if (Tableau[Couleur]!=0)
Nombre_Couleurs++; Nombre_Couleurs++;
Couleur++; Couleur++;
} }
while(Couleur!=0); //On sort quand on a fait le tour (la var est sur 8 bits donc 255+1=0) while(Couleur!=0); //On sort quand on a fait le tour (la var est sur 8 bits donc 255+1=0)
return Nombre_Couleurs; return Nombre_Couleurs;
} }
void Set_palette(T_Palette Palette) void Set_palette(T_Palette Palette)
@ -72,11 +63,13 @@ void Set_palette(T_Palette Palette)
void Attendre_fin_de_click(void) void Attendre_fin_de_click(void)
{ {
do SDL_Event event;
{
SDL_PumpEvents(); //On attend que l'utilisateur relache la souris. Tous les autres évènements
} //sont ignorés
while(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)); //On attend tant que le bouton est enfoncé (TODO: vérif clic droit aussi ?) while(SDL_PollEvent(&event) && event.type == SDL_MOUSEBUTTONUP);
//On indique à la gestion des E/S que le bouton est laché et on rend la main
Mouse_K=0; Mouse_K=0;
INPUT_Nouveau_Mouse_K=0; INPUT_Nouveau_Mouse_K=0;
} }
@ -104,19 +97,23 @@ void Effacer_image_courante_Stencil(byte Couleur, byte * Pochoir)
void Effacer_image_courante(byte Couleur) void Effacer_image_courante(byte Couleur)
// Effacer l'image courante avec une certaine couleur // Effacer l'image courante avec une certaine couleur
{ {
puts("Effacer_image_courante non implémenté!\n"); memset(
Principal_Ecran ,
Couleur ,
Principal_Largeur_image * Principal_Hauteur_image
);
} }
void Sensibilite_souris(word X,word Y) void Sensibilite_souris(word X,word Y)
{ {
puts("Sensibilite_souris non implémenté!\n"); puts("Sensibilite_souris non implémenté!");
} }
void Get_input(void) void Get_input(void)
//Gestion des évènements: mouvement de la souris, clic sur les boutons, et utilisation du clavier. //Gestion des évènements: mouvement de la souris, clic sur les boutons, et utilisation du clavier.
{ {
SDL_Event event; SDL_Event event;
Touche=0; Touche=0;
Touche_ASCII=0; // Par défaut, il n'y a pas d'action sur le clavier. Touche_ASCII=0; // Par défaut, il n'y a pas d'action sur le clavier.
@ -127,7 +124,7 @@ void Get_input(void)
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
//Mouvement de la souris //Mouvement de la souris
INPUT_Nouveau_Mouse_X = event.motion.x*Mouse_Facteur_de_correction_X; INPUT_Nouveau_Mouse_X = event.motion.x*Mouse_Facteur_de_correction_X;
INPUT_Nouveau_Mouse_Y = event.motion.y*Mouse_Facteur_de_correction_Y; INPUT_Nouveau_Mouse_Y = event.motion.y*Mouse_Facteur_de_correction_Y;
break; break;
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
//Clic sur un des boutons de la souris //Clic sur un des boutons de la souris
@ -135,47 +132,28 @@ void Get_input(void)
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
//Appui sur une touche du clavier //Appui sur une touche du clavier
puts("Get-Input: clavier pas géré !");
//On met le scancode dans Touche"
Touche = event.key.keysym.scancode;
//On ajoute aussi l'état des modifiers
#define ekkm event.key.keysym.mod
if (ekkm & (KMOD_LSHIFT | KMOD_RSHIFT)
{
Touche |= 0x0100;
}
if (ekkm & (KMOD_LCTRL | KMOD_RCTRL)
{
Touche |= 0x0200;
}
if (ekkm & (KMOD_LALT | KMOD_RALT)
{
Touche |= 0x0400;
}
//Cas particulier: déplacement du curseur avec haut bas gauche droite
//On doit interpréter ça comme un mvt de la souris
/* /*
; Sinon, appel à l'interruption pour connaître son scancode
mov ah,10h
int 16h
; AH = Scancode
; AL = Caractère ASCII
; On place le scan code dans la partie basse de [Touche]
mov byte ptr[Touche],ah
mov Touche_ASCII,al ; ... et le code ASCII dans Touche_ASCII
; Appel à l'interruption pour connaitre l'état des touches de contrôle
mov ah,02h
int 16h
; AL = Etat des touches de contrôle
; On oublie les informations sur Insert, CapsLock, NumLock et ScrollLock
and al,00001111b
; On associe les deux Shifts (2 bits de poids faible)
mov ah,al
and ah,00000001b
shr al,1
or al,ah
; On met le resultat dans la partie haute de [Touche]
mov byte ptr[Touche+1],al
; On gère le cas [Touche] est un déplacement du curseur
mov ax,Touche mov ax,Touche
; Test [Touche] = Emulation de MOUSE UP ; Test [Touche] = Emulation de MOUSE UP
@ -272,9 +250,9 @@ void Get_input(void)
int 33h int 33h
break; break;
*/ */
} }
} }
/* /*
Get_input_Pas_de_touche: Get_input_Pas_de_touche:
@ -668,7 +646,7 @@ void Rotate_180_deg_LOWLEVEL(void)
void Tempo_jauge(byte Vitesse) void Tempo_jauge(byte Vitesse)
//Boucle d'attente pour faire bouger les scrollbars à une vitesse correcte //Boucle d'attente pour faire bouger les scrollbars à une vitesse correcte
{ {
while (Vitesse!=0) while (Vitesse!=0)
{ {
Wait_VBL(); Wait_VBL();
Vitesse--; Vitesse--;

1010
files.c

File diff suppressed because it is too large Load Diff

BIN
gfx2.cfg

Binary file not shown.

10620
loadsave.c

File diff suppressed because it is too large Load Diff

View File

@ -30,7 +30,7 @@ void Afficher_partie_de_l_ecran_SDL (word Largeur,word Hauteur,word Largeu
for(dx=Hauteur;dx!=0;dx--) for(dx=Hauteur;dx!=0;dx--)
// Pour chaque ligne // Pour chaque ligne
{ {
// On fait une copie de la ligne // On fait une copie de la ligne
memcpy(Dest,Src,Largeur); memcpy(Dest,Src,Largeur);
@ -65,7 +65,7 @@ void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Co
} }
void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur) void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur)
/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image dans l'écran, en mode normal (pas en mode loupe) /* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image dans l'écran, en mode normal (pas en mode loupe)
Note: si on modifie cette procédure, il faudra penser à faire également la modif dans la procédure Pixel_Preview_Loupe_VESA_LFB. */ Note: si on modifie cette procédure, il faudra penser à faire également la modif dans la procédure Pixel_Preview_Loupe_VESA_LFB. */
{ {
Pixel_SDL(X-Principal_Decalage_X,Y-Principal_Decalage_Y,Couleur); Pixel_SDL(X-Principal_Decalage_X,Y-Principal_Decalage_Y,Couleur);
@ -80,7 +80,7 @@ void Ligne_horizontale_XOR_SDL(word Pos_X,word Pos_Y,word Largeur)
{ {
//On calcule la valeur initiale de EDI: //On calcule la valeur initiale de EDI:
byte* edi=Pos_Y*Largeur_ecran+Pos_X+Ecran; byte* edi=Pos_Y*Largeur_ecran+Pos_X+Ecran;
//On met dans ECX le nombre de pixels à traiter: //On met dans ECX le nombre de pixels à traiter:
int ecx; int ecx;
@ -98,7 +98,7 @@ void Ligne_verticale_XOR_SDL (word Pos_X,word Pos_Y,word Hauteur)
color=*(Ecran+Pos_X+i*Largeur_ecran); color=*(Ecran+Pos_X+i*Largeur_ecran);
*(Ecran+Pos_X+i*Largeur_ecran)=~color; *(Ecran+Pos_X+i*Largeur_ecran)=~color;
} }
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,0,Hauteur); SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,1,Hauteur);
} }
void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse)
@ -112,7 +112,7 @@ void Display_brush_Mono_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala
byte* Dest=Pos_Y*Largeur_ecran+Pos_X+Ecran; //EDI=adr destination à l'écran byte* Dest=Pos_Y*Largeur_ecran+Pos_X+Ecran; //EDI=adr destination à l'écran
byte* Src=Largeur_brosse*Decalage_Y+Decalage_X+Brosse; //ESI=adr ds la brosse byte* Src=Largeur_brosse*Decalage_Y+Decalage_X+Brosse; //ESI=adr ds la brosse
int dx,cx; int dx,cx;
for(dx=Hauteur;dx!=0;dx--) for(dx=Hauteur;dx!=0;dx--)
//Pour chaque ligne //Pour chaque ligne
{ {
@ -126,7 +126,7 @@ void Display_brush_Mono_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala
Src++; Src++;
Dest++; Dest++;
} }
// On passe à la ligne suivante // On passe à la ligne suivante
Src+=Largeur_brosse-Largeur; Src+=Largeur_brosse-Largeur;
Dest+=Largeur_ecran-Largeur; Dest+=Largeur_ecran-Largeur;
@ -134,7 +134,7 @@ void Display_brush_Mono_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur); SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
} }
void Clear_brush_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image) void Clear_brush_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image)
{ {
byte* Dest=Ecran+Pos_X+Pos_Y*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (EDI) byte* Dest=Ecran+Pos_X+Pos_Y*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (EDI)
byte* Src=(Pos_Y+Principal_Decalage_Y)*Largeur_image+Pos_X+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI) byte* Src=(Pos_Y+Principal_Decalage_Y)*Largeur_image+Pos_X+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI)
@ -153,49 +153,45 @@ void Clear_brush_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur); SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,Hauteur);
} }
void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) void Remap_screen_SDL (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion)
{ {
puts("Remap_screen_SDL non implémenté!"); puts("Remap_screen_SDL non implémenté!");
} }
void Afficher_une_ligne_ecran_SDL (word Pos_X,word Pos_Y,word Largeur,byte * Ligne) void Afficher_une_ligne_ecran_SDL (word Pos_X,word Pos_Y,word Largeur,byte * Ligne)
/* On affiche toute une ligne de pixels. Utilisé pour les textes. */ /* On affiche toute une ligne de pixels. Utilisé pour les textes. */
{ {
int i; memcpy(Ecran+Pos_X+Pos_Y*Largeur_ecran,Ligne,Largeur);
for(i=0;i<Largeur;i++) SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,1);
{
Pixel_SDL(Pos_X+i,Pos_Y,*(Ligne+i));
}
SDL_UpdateRect(Ecran_SDL,Pos_X,Pos_Y,Largeur,1);
}
void Lire_une_ligne_ecran_SDL (word Pos_X,word Pos_Y,word Largeur,byte * Ligne)
{
puts("Lire_une_ligne_ecran_SDL non implémenté!");
} }
void Lire_une_ligne_ecran_SDL (word Pos_X,word Pos_Y,word Largeur,byte * Ligne)
{
memcpy(Ligne,Largeur_ecran * Pos_Y + Pos_X + Ecran,Largeur);
}
void Afficher_partie_de_l_ecran_zoomee_SDL(word Largeur,word Hauteur,word Largeur_image,byte * Buffer) void Afficher_partie_de_l_ecran_zoomee_SDL(word Largeur,word Hauteur,word Largeur_image,byte * Buffer)
{ {
puts("Afficher_partie_de_l_ecran_zoomee_SDL non implémenté!"); puts("Afficher_partie_de_l_ecran_zoomee_SDL non implémenté!");
} }
void Display_brush_Color_zoom_SDL(word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer) void Display_brush_Color_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer)
{ {
puts("Display_brush_Color_zoom_SDL non implémenté!"); puts("Display_brush_Color_zoom_SDL non implémenté!");
} }
void Display_brush_Mono_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer) void Display_brush_Mono_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer)
{ {
puts("Display_brush_Mono_zoom_SDL non implémenté!"); puts("Display_brush_Mono_zoom_SDL non implémenté!");
} }
void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer) void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer)
{ {
puts("Clear_brush_zoom_SDL non implémenté!"); puts("Clear_brush_zoom_SDL non implémenté!");
} }
void Set_Mode_SDL() void Set_Mode_SDL()
/* On règle larésolution de l'écran */ /* On règle la résolution de l'écran */
{ {
Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_HWSURFACE|SDL_FULLSCREEN); Ecran_SDL=SDL_SetVideoMode(Largeur_ecran,Hauteur_ecran,8,SDL_HWSURFACE|SDL_FULLSCREEN);
Ecran=Ecran_SDL->pixels; Ecran=Ecran_SDL->pixels;