Splitted graph.c in multiple files. Compiles but there is a lot of warnings about declarations. I'm cleaning it up but i wanted to commit that before starting to get conflicts
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@395 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
198
divers.c
198
divers.c
@@ -140,7 +140,7 @@ void Effacer_image_courante(byte Couleur)
|
||||
|
||||
void Sensibilite_souris(__attribute__((unused)) word X,__attribute__((unused)) word Y)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
int Get_input(void)
|
||||
@@ -201,10 +201,10 @@ int Get_input(void)
|
||||
//Appui sur une touche du clavier
|
||||
Touche = Conversion_Touche(event.key.keysym);
|
||||
Touche_ANSI = Conversion_ANSI(event.key.keysym);
|
||||
|
||||
|
||||
//Cas particulier: déplacement du curseur avec haut bas gauche droite
|
||||
//On doit interpréter ça comme un mvt de la souris
|
||||
|
||||
|
||||
if(Touche == Config_Touche[0])
|
||||
{
|
||||
//[Touche] = Emulation de MOUSE UP
|
||||
@@ -358,7 +358,7 @@ int Get_input(void)
|
||||
Afficher_curseur();
|
||||
}
|
||||
|
||||
// Vidage de toute mise à jour de l'affichage à l'écran qui serait encore en attente.
|
||||
// Vidage de toute mise à jour de l'affichage à l'écran qui serait encore en attente.
|
||||
// (c'est fait ici car on est sur que cette fonction est apellée partout ou on a besoin d'interragir avec l'utilisateur)
|
||||
Flush_update();
|
||||
return 1; // Il y a des choses à faire
|
||||
@@ -379,7 +379,7 @@ void Wait_VBL(void)
|
||||
// sans charger inutilement le CPU par du busy-wait (on n'est pas à 10ms près)
|
||||
{
|
||||
const int Delai = 10;
|
||||
|
||||
|
||||
Uint32 debut;
|
||||
debut = SDL_GetTicks();
|
||||
// Première attente : le complément de "Delai" millisecondes
|
||||
@@ -389,7 +389,7 @@ void Wait_VBL(void)
|
||||
while (SDL_GetTicks() / Delai <= debut / Delai)
|
||||
{
|
||||
SDL_Delay(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Pixel_dans_brosse (word X,word Y,byte Couleur)
|
||||
@@ -417,7 +417,7 @@ void Pixel_dans_ecran_courant (word X,word Y,byte Couleur)
|
||||
void Remplacer_une_couleur(byte Ancienne_couleur, byte Nouvelle_couleur)
|
||||
{
|
||||
byte* edi;
|
||||
|
||||
|
||||
// pour chaque pixel :
|
||||
for(edi = Principal_Ecran;edi < Principal_Ecran + Principal_Hauteur_image * Principal_Largeur_image;edi++)
|
||||
if (*edi == Ancienne_couleur)
|
||||
@@ -428,25 +428,25 @@ void Remplacer_une_couleur(byte Ancienne_couleur, byte Nouvelle_couleur)
|
||||
|
||||
void Ellipse_Calculer_limites(short Rayon_horizontal,short Rayon_vertical)
|
||||
{
|
||||
Ellipse_Rayon_horizontal_au_carre =
|
||||
Ellipse_Rayon_horizontal_au_carre =
|
||||
Rayon_horizontal * Rayon_horizontal;
|
||||
Ellipse_Rayon_vertical_au_carre =
|
||||
Ellipse_Rayon_vertical_au_carre =
|
||||
Rayon_vertical * Rayon_vertical;
|
||||
Ellipse_Limite = Ellipse_Rayon_horizontal_au_carre * Ellipse_Rayon_vertical_au_carre;
|
||||
}
|
||||
|
||||
byte Pixel_dans_ellipse(void)
|
||||
{
|
||||
uint64_t ediesi = Ellipse_Curseur_X * Ellipse_Curseur_X * Ellipse_Rayon_vertical_au_carre +
|
||||
uint64_t ediesi = Ellipse_Curseur_X * Ellipse_Curseur_X * Ellipse_Rayon_vertical_au_carre +
|
||||
Ellipse_Curseur_Y * Ellipse_Curseur_Y * Ellipse_Rayon_horizontal_au_carre;
|
||||
if((ediesi) <= Ellipse_Limite) return 255;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
byte Pixel_dans_cercle(void)
|
||||
{
|
||||
if(Cercle_Curseur_X * Cercle_Curseur_X +
|
||||
if(Cercle_Curseur_X * Cercle_Curseur_X +
|
||||
Cercle_Curseur_Y * Cercle_Curseur_Y <= Cercle_Limite)
|
||||
return 255;
|
||||
return 0;
|
||||
@@ -471,7 +471,7 @@ void Copier_une_partie_d_image_dans_une_autre(byte * Source,word S_Pos_X,word S_
|
||||
esi+=Largeur_source;
|
||||
edi+=Largeur_destination;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -492,7 +492,7 @@ void Rotate_90_deg_LOWLEVEL(byte * Source,byte * Destination)
|
||||
|
||||
// Largeur de la source = Hauteur de la destination
|
||||
dx = bx = Brosse_Largeur;
|
||||
|
||||
|
||||
// Pour chaque ligne
|
||||
for(dx = Brosse_Largeur;dx>0;dx--)
|
||||
{
|
||||
@@ -590,7 +590,7 @@ void Remplacer_toutes_les_couleurs_dans_limites(byte * Table_de_remplacement)
|
||||
*Adresse = Table_de_remplacement[Ancien];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte Lit_pixel_dans_ecran_backup (word X,word Y)
|
||||
{
|
||||
@@ -649,7 +649,7 @@ byte Effet_Colorize_interpole (word X,word Y,byte Couleur)
|
||||
// (Couleur_dessous*Facteur_A+Couleur*facteur_B)/256
|
||||
//
|
||||
|
||||
// On place dans ESI 3*Couleur_dessous ( = position de cette couleur dans la
|
||||
// On place dans ESI 3*Couleur_dessous ( = position de cette couleur dans la
|
||||
// palette des teintes) et dans EDI, 3*Couleur.
|
||||
byte Bleu_dessous=Principal_Palette[*(FX_Feedback_Ecran + Y * Principal_Largeur_image + X)].B;
|
||||
byte Bleu=Principal_Palette[Couleur].B;
|
||||
@@ -657,15 +657,15 @@ byte Effet_Colorize_interpole (word X,word Y,byte Couleur)
|
||||
byte Vert=Principal_Palette[Couleur].V;
|
||||
byte Rouge_dessous=Principal_Palette[*(FX_Feedback_Ecran + Y * Principal_Largeur_image + X)].R;
|
||||
byte Rouge=Principal_Palette[Couleur].R;
|
||||
|
||||
|
||||
// On récupère les 3 composantes RVB
|
||||
|
||||
// Bleu
|
||||
Bleu = (Table_de_multiplication_par_Facteur_B[Bleu]
|
||||
Bleu = (Table_de_multiplication_par_Facteur_B[Bleu]
|
||||
+ Table_de_multiplication_par_Facteur_A[Bleu_dessous]) / 256;
|
||||
Vert = (Table_de_multiplication_par_Facteur_B[Vert]
|
||||
Vert = (Table_de_multiplication_par_Facteur_B[Vert]
|
||||
+ Table_de_multiplication_par_Facteur_A[Vert_dessous]) / 256;
|
||||
Rouge = (Table_de_multiplication_par_Facteur_B[Rouge]
|
||||
Rouge = (Table_de_multiplication_par_Facteur_B[Rouge]
|
||||
+ Table_de_multiplication_par_Facteur_A[Rouge_dessous]) / 256;
|
||||
return Meilleure_couleur(Rouge,Vert,Bleu);
|
||||
|
||||
@@ -679,7 +679,7 @@ byte Effet_Colorize_additif (word X,word Y,byte Couleur)
|
||||
byte Bleu=Principal_Palette[Couleur].B;
|
||||
byte Vert=Principal_Palette[Couleur].V;
|
||||
byte Rouge=Principal_Palette[Couleur].R;
|
||||
|
||||
|
||||
return Meilleure_couleur(
|
||||
Rouge>Rouge_dessous?Rouge:Rouge_dessous,
|
||||
Vert>Vert_dessous?Vert:Vert_dessous,
|
||||
@@ -694,7 +694,7 @@ byte Effet_Colorize_soustractif(word X,word Y,byte Couleur)
|
||||
byte Bleu=Principal_Palette[Couleur].B;
|
||||
byte Vert=Principal_Palette[Couleur].V;
|
||||
byte Rouge=Principal_Palette[Couleur].R;
|
||||
|
||||
|
||||
return Meilleure_couleur(
|
||||
Rouge<Rouge_dessous?Rouge:Rouge_dessous,
|
||||
Vert<Vert_dessous?Vert:Vert_dessous,
|
||||
@@ -797,7 +797,7 @@ void Rotate_180_deg_LOWLEVEL(void)
|
||||
tmp = *ESI;
|
||||
*ESI = *EDI;
|
||||
*EDI = tmp;
|
||||
|
||||
|
||||
EDI--; // Attention ici on recule !
|
||||
ESI++;
|
||||
}
|
||||
@@ -820,7 +820,7 @@ void Scroll_picture(short Decalage_X,short Decalage_Y)
|
||||
byte* edi = Principal_Ecran + Decalage_Y * Principal_Largeur_image + Decalage_X;
|
||||
const word ax = Principal_Largeur_image - Decalage_X; // Nombre de pixels à copier à droite
|
||||
word dx;
|
||||
for(dx = Principal_Hauteur_image - Decalage_Y;dx>0;dx--)
|
||||
for(dx = Principal_Hauteur_image - Decalage_Y;dx>0;dx--)
|
||||
{
|
||||
// Pour chaque ligne
|
||||
memcpy(edi,esi,ax);
|
||||
@@ -863,7 +863,7 @@ word Get_key(void)
|
||||
}
|
||||
}
|
||||
|
||||
void Zoomer_une_ligne(byte* Ligne_originale, byte* Ligne_zoomee,
|
||||
void Zoomer_une_ligne(byte* Ligne_originale, byte* Ligne_zoomee,
|
||||
word Facteur, word Largeur
|
||||
)
|
||||
{
|
||||
@@ -880,3 +880,151 @@ void Zoomer_une_ligne(byte* Ligne_originale, byte* Ligne_zoomee,
|
||||
Ligne_originale++;
|
||||
}
|
||||
}
|
||||
|
||||
/*############################################################################*/
|
||||
|
||||
#if defined(__WIN32__)
|
||||
#define _WIN32_WINNT 0x0500
|
||||
#include <windows.h>
|
||||
#elif defined(__macosx__)
|
||||
#include <sys/sysctl.h>
|
||||
#elif defined(__BEOS__) || defined(__HAIKU__)
|
||||
// sysinfo not implemented
|
||||
#else
|
||||
#include <sys/sysinfo.h> // sysinfo() for free RAM
|
||||
#endif
|
||||
|
||||
// Indique quelle est la mémoire disponible
|
||||
unsigned long Memoire_libre(void)
|
||||
{
|
||||
// On appelle la fonction qui optimise la mémoire libre afin d'en
|
||||
// regagner un maximum. Sinon, tous les "free" libèrent une mémoire qui
|
||||
// n'est pas prise en compte par la fonction, et on se retrouve avec un
|
||||
// manque alarmant de mémoire.
|
||||
/*
|
||||
A revoir, mais est-ce vraiment utile?
|
||||
_heapmin();
|
||||
*/
|
||||
// Memory is no longer relevant. If there is ANY problem or doubt here,
|
||||
// you can simply return 10*1024*1024 (10Mb), to make the "Pages"something
|
||||
// memory allocation functions happy.
|
||||
#if defined(__WIN32__)
|
||||
MEMORYSTATUSEX mstt;
|
||||
mstt.dwLength = sizeof(MEMORYSTATUSEX);
|
||||
GlobalMemoryStatusEx(&mstt);
|
||||
return mstt.ullAvailPhys;
|
||||
#elif defined(__macosx__)
|
||||
int mib[2];
|
||||
int maxmem;
|
||||
size_t len;
|
||||
|
||||
mib[0] = CTL_HW;
|
||||
mib[1] = HW_USERMEM;
|
||||
len = sizeof(maxmem);
|
||||
sysctl(mib,2,&maxmem,&len,NULL,0);
|
||||
return maxmem;
|
||||
#elif defined(__BEOS__) || defined(__HAIKU__)
|
||||
// No <sys/sysctl.h> on BeOS or Haiku
|
||||
return 10*1024*1024;
|
||||
#else
|
||||
struct sysinfo info;
|
||||
sysinfo(&info);
|
||||
return info.freeram*info.mem_unit;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transformer un nombre (entier naturel) en chaîne
|
||||
void Num2str(dword Nombre,char * Chaine,byte Taille)
|
||||
{
|
||||
int Indice;
|
||||
|
||||
for (Indice=Taille-1;Indice>=0;Indice--)
|
||||
{
|
||||
Chaine[Indice]=(Nombre%10)+'0';
|
||||
Nombre/=10;
|
||||
if (Nombre==0)
|
||||
for (Indice--;Indice>=0;Indice--)
|
||||
Chaine[Indice]=' ';
|
||||
}
|
||||
Chaine[Taille]='\0';
|
||||
}
|
||||
|
||||
// Transformer une chaîne en un entier naturel (renvoie -1 si ch. invalide)
|
||||
int Str2num(char * Chaine)
|
||||
{
|
||||
int Valeur=0;
|
||||
|
||||
for (;*Chaine;Chaine++)
|
||||
{
|
||||
if ( (*Chaine>='0') && (*Chaine<='9') )
|
||||
Valeur=(Valeur*10)+(*Chaine-'0');
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
return Valeur;
|
||||
}
|
||||
|
||||
|
||||
// Arrondir un nombre réel à la valeur entière la plus proche
|
||||
short Round(float Valeur)
|
||||
{
|
||||
short Temp=Valeur;
|
||||
|
||||
if (Valeur>=0)
|
||||
{ if ((Valeur-Temp)>= 0.5) Temp++; }
|
||||
else
|
||||
{ if ((Valeur-Temp)<=-0.5) Temp--; }
|
||||
|
||||
return Temp;
|
||||
}
|
||||
|
||||
// Arrondir le résultat d'une division à la valeur entière supérieure
|
||||
short Round_div_max(short Numerateur,short Diviseur)
|
||||
{
|
||||
if (!(Numerateur % Diviseur))
|
||||
return (Numerateur/Diviseur);
|
||||
else
|
||||
return (Numerateur/Diviseur)+1;
|
||||
}
|
||||
|
||||
// Retourne le minimum entre deux nombres
|
||||
int Min(int A,int B)
|
||||
{
|
||||
return (A<B)?A:B;
|
||||
}
|
||||
|
||||
// Retourne le maximum entre deux nombres
|
||||
int Max(int A,int B)
|
||||
{
|
||||
return (A>B)?A:B;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Fonction retournant le libellé d'une mode (ex: " 320x200")
|
||||
char * Libelle_mode(int Mode)
|
||||
{
|
||||
static char Chaine[24];
|
||||
if (! Mode_video[Mode].Fullscreen)
|
||||
return "window";
|
||||
sprintf(Chaine, "%dx%d", Mode_video[Mode].Largeur, Mode_video[Mode].Hauteur);
|
||||
|
||||
return Chaine;
|
||||
}
|
||||
|
||||
// Trouve un mode video à partir d'une chaine: soit "window",
|
||||
// soit de la forme "320x200"
|
||||
// Renvoie -1 si la chaine n'est pas convertible
|
||||
int Conversion_argument_mode(const char *Argument)
|
||||
{
|
||||
// Je suis paresseux alors je vais juste tester les libellés
|
||||
int Indice_mode;
|
||||
for (Indice_mode=0; Indice_mode<Nb_modes_video; Indice_mode++)
|
||||
// Attention les vieilles fonctions de lecture .ini mettent tout en MAJUSCULE.
|
||||
if (!strcasecmp(Libelle_mode(Indice_mode), Argument))
|
||||
return Indice_mode;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user