From f342ff5ff7a28cc9168e01f9de12e3ce3616c2fc Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Thu, 19 Mar 2009 03:18:42 +0000 Subject: [PATCH] More translations (about 500) git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@687 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- aide.c | 56 +- boutons.c | 254 +++---- boutons.h | 6 +- brush.c | 338 +++++----- divers.c | 40 +- divers.h | 10 +- files.c | 68 +- files.h | 8 +- global.h | 10 +- graph.c | 156 ++--- graph.h | 12 +- hotkeys.h | 2 +- init.c | 88 +-- input.c | 20 +- input.h | 2 +- io.c | 60 +- io.h | 28 +- loadsave.c | 1317 ++++++++++++++++++------------------- loadsave.h | 4 +- main.c | 12 +- moteur.c | 313 +++++---- moteur.h | 26 +- op_c.c | 20 +- op_c.h | 2 +- operatio.c | 158 ++--- pages.c | 192 +++--- pages.h | 28 +- palette.c | 18 +- pxdouble.c | 172 ++--- pxdouble.h | 32 +- pxsimple.c | 160 ++--- pxsimple.h | 34 +- pxtall.c | 156 ++--- pxtall.h | 30 +- pxwide.c | 174 ++--- pxwide.h | 34 +- readini.c | 192 +++--- readline.c | 10 +- saveini.c | 4 +- sdlscreen.c | 32 +- sdlscreen.h | 2 +- shade.c | 120 ++-- special.c | 14 +- special.h | 2 +- struct.h | 26 +- texte.c | 82 +-- texte.h | 4 +- translat/english.txt | 340 +++++----- translat/translations.xls | Bin 269312 -> 272896 bytes windows.c | 160 ++--- windows.h | 14 +- 51 files changed, 2519 insertions(+), 2523 deletions(-) diff --git a/aide.c b/aide.c index 81c3517f..7bef5d83 100644 --- a/aide.c +++ b/aide.c @@ -150,7 +150,7 @@ void Fenetre_controle(int NumeroControle) Block(Fenetre_Pos_X+(Menu_Facteur_X*5), Fenetre_Pos_Y+(Menu_Facteur_Y*16), Menu_Facteur_X*292,Menu_Facteur_Y*11,CM_Noir); - Print_dans_fenetre(7,18,ConfigTouche[IndiceConfig].Libelle,CM_Blanc,CM_Noir); + Print_dans_fenetre(7,18,ConfigTouche[IndiceConfig].Label,CM_Blanc,CM_Noir); // Zone de description Fenetre_Afficher_cadre_creux(5,68,292,37); @@ -244,10 +244,10 @@ void Afficher_aide(void) short Pos_Reel_X; short Pos_Reel_Y; byte * char_pixel; - short Largeur; // Largeur physique d'une ligne de texte + short width; // Largeur physique d'une ligne de texte char TypeLigne; // N: Normale, T: Titre, S: Sous-titre // -: Ligne inférieur de sous-titre - const char * Ligne; + const char * line; char Buffer[45]; // Buffer texte utilisé pour formater les noms de // raccourcis clavier short Position_lien=0; // Position du premier caractère "variable" @@ -271,64 +271,64 @@ void Afficher_aide(void) break; } // On affiche la ligne - Ligne = Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne].Text; + line = Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne].Text; TypeLigne = Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne].Line_type; // Si c'est une sous-ligne de titre, on utilise le texte de la ligne précédente if (TypeLigne == '-' && (Ligne_de_depart + Indice_de_ligne > 0)) - Ligne = Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne - 1].Text; + line = Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne - 1].Text; else if (TypeLigne == 'K') { const char *Lien; - Position_lien = strstr(Ligne,"%s") - Ligne; + Position_lien = strstr(line,"%s") - line; Lien=Valeur_Raccourci_Clavier(Table_d_aide[Section_d_aide_en_cours].Table_aide[Ligne_de_depart + Indice_de_ligne].Line_parameter); Taille_lien=strlen(Lien); - snprintf(Buffer, 44, Ligne, Lien); - if (strlen(Ligne)+Taille_lien-2>44) + snprintf(Buffer, 44, line, Lien); + if (strlen(line)+Taille_lien-2>44) { Buffer[43]=CARACTERE_SUSPENSION; Buffer[44]='\0'; } - Ligne = Buffer; + line = Buffer; } // Calcul de la taille - Largeur=strlen(Ligne); + width=strlen(line); // Les lignes de titres prennent plus de place if (TypeLigne == 'T' || TypeLigne == '-') - Largeur = Largeur*2; + width = width*2; // Pour chaque ligne dans la fenêtre: for (Y=0;Y<8;Y++) { Position_X=0; // On crée une nouvelle ligne à splotcher - for (Indice_de_caractere=0;Indice_de_caractere'_' || Ligne[Indice_de_caractere/2]<' ') + if (line[Indice_de_caractere/2]>'_' || line[Indice_de_caractere/2]<' ') char_pixel=&(Fonte_help_norm['!'][0][0]); // Caractère pas géré else if (Indice_de_caractere & 1) - char_pixel=&(Fonte_help_t2[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]); + char_pixel=&(Fonte_help_t2[(unsigned char)(line[Indice_de_caractere/2])-' '][0][0]); else - char_pixel=&(Fonte_help_t1[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]); + char_pixel=&(Fonte_help_t1[(unsigned char)(line[Indice_de_caractere/2])-' '][0][0]); } else if (TypeLigne=='-') { - if (Ligne[Indice_de_caractere/2]>'_' || Ligne[Indice_de_caractere/2]<' ') + if (line[Indice_de_caractere/2]>'_' || line[Indice_de_caractere/2]<' ') char_pixel=&(Fonte_help_norm['!'][0][0]); // Caractère pas géré else if (Indice_de_caractere & 1) - char_pixel=&(Fonte_help_t4[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]); + char_pixel=&(Fonte_help_t4[(unsigned char)(line[Indice_de_caractere/2])-' '][0][0]); else - char_pixel=&(Fonte_help_t3[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]); + char_pixel=&(Fonte_help_t3[(unsigned char)(line[Indice_de_caractere/2])-' '][0][0]); } else if (TypeLigne=='S') - char_pixel=&(Fonte_help_bold[(unsigned char)(Ligne[Indice_de_caractere])][0][0]); + char_pixel=&(Fonte_help_bold[(unsigned char)(line[Indice_de_caractere])][0][0]); else if (TypeLigne=='N' || TypeLigne=='K') - char_pixel=&(Fonte_help_norm[(unsigned char)(Ligne[Indice_de_caractere])][0][0]); + char_pixel=&(Fonte_help_norm[(unsigned char)(line[Indice_de_caractere])][0][0]); else char_pixel=&(Fonte_help_norm['!'][0][0]); // Un garde-fou en cas de probleme @@ -355,13 +355,13 @@ void Afficher_aide(void) } // On la splotche for (Repeat_Menu_Facteur_Y=0;Repeat_Menu_Facteur_YPosition=Conf->Indice_Sensibilite_souris_Y-1; - Fenetre_Dessiner_jauge(Jauge); + // slider = Jauge de sensibilité Y + slider->Position=Conf->Indice_Sensibilite_souris_Y-1; + Fenetre_Dessiner_jauge(slider); - Jauge=Jauge->Next; - // Jauge = Jauge de sensibilité X - Jauge->Position=Conf->Indice_Sensibilite_souris_X-1; - Fenetre_Dessiner_jauge(Jauge); + slider=slider->Next; + // slider = Jauge de sensibilité X + slider->Position=Conf->Indice_Sensibilite_souris_X-1; + Fenetre_Dessiner_jauge(slider); Print_dans_fenetre(273, 31,(Conf->Lire_les_fichiers_caches)?YES:NO,CM_Noir,CM_Clair); Print_dans_fenetre(273, 46,(Conf->Lire_les_repertoires_caches)?YES:NO,CM_Noir,CM_Clair); @@ -1301,30 +1301,30 @@ void Afficher_liste_modes(short Debut_liste, short Position_curseur) else Couleur_texte=CM_Clair; } - Num2str(Mode_video[Mode_courant].Largeur,Chaine,4); + Num2str(Mode_video[Mode_courant].Width,Chaine,4); Chaine[4]=' '; - Num2str(Mode_video[Mode_courant].Hauteur,Chaine+5,4); + Num2str(Mode_video[Mode_courant].Height,Chaine+5,4); if(Mode_video[Mode_courant].Fullscreen == 1) memcpy(Chaine+9," Fullscreen ",13); else memcpy(Chaine+9," Window ",13); - if (Mode_video[Mode_courant].Largeur*3 == Mode_video[Mode_courant].Hauteur*4) + if (Mode_video[Mode_courant].Width*3 == Mode_video[Mode_courant].Height*4) Ratio=" 4:3"; - else if (Mode_video[Mode_courant].Largeur*9 == Mode_video[Mode_courant].Hauteur*16) + else if (Mode_video[Mode_courant].Width*9 == Mode_video[Mode_courant].Height*16) Ratio=" 16:9"; - else if (Mode_video[Mode_courant].Largeur*10 == Mode_video[Mode_courant].Hauteur*16) + else if (Mode_video[Mode_courant].Width*10 == Mode_video[Mode_courant].Height*16) Ratio=" 16:10"; - else if (Mode_video[Mode_courant].Largeur*145 == Mode_video[Mode_courant].Hauteur*192) + else if (Mode_video[Mode_courant].Width*145 == Mode_video[Mode_courant].Height*192) Ratio="192:145"; - else if (Mode_video[Mode_courant].Largeur*2 == Mode_video[Mode_courant].Hauteur*3) + else if (Mode_video[Mode_courant].Width*2 == Mode_video[Mode_courant].Height*3) Ratio=" 3:2"; - else if (Mode_video[Mode_courant].Largeur*3 == Mode_video[Mode_courant].Hauteur*5) + else if (Mode_video[Mode_courant].Width*3 == Mode_video[Mode_courant].Height*5) Ratio=" 5:3"; - else if (Mode_video[Mode_courant].Largeur*4 == Mode_video[Mode_courant].Hauteur*5) + else if (Mode_video[Mode_courant].Width*4 == Mode_video[Mode_courant].Height*5) Ratio=" 5:4"; - else if (Mode_video[Mode_courant].Largeur*16 == Mode_video[Mode_courant].Hauteur*25) + else if (Mode_video[Mode_courant].Width*16 == Mode_video[Mode_courant].Height*25) Ratio=" 25:16"; else Ratio=" "; @@ -1465,7 +1465,7 @@ void Bouton_Resol(void) Afficher_curseur(); break; - case 4 : // Hauteur + case 4 : // Height Num2str(Hauteur_choisie,Chaine,4); Readline(166,37,Chaine,4,1); Hauteur_choisie=atoi(Chaine); @@ -1494,11 +1494,11 @@ void Bouton_Resol(void) if (Mouse_K==2) { // On affecte également les dimensions de l'image: - Largeur_choisie=Mode_video[Mode_choisi].Largeur/Pixel_width; + Largeur_choisie=Mode_video[Mode_choisi].Width/Pixel_width; Num2str(Largeur_choisie,Chaine,4); Fenetre_Contenu_bouton_saisie(Bouton_saisie_Width,Chaine); - Hauteur_choisie=Mode_video[Mode_choisi].Hauteur/Pixel_height; + Hauteur_choisie=Mode_video[Mode_choisi].Height/Pixel_height; Num2str(Hauteur_choisie,Chaine,4); Fenetre_Contenu_bouton_saisie(Bouton_saisie_Height,Chaine); } @@ -1621,14 +1621,14 @@ void Bouton_Resol(void) if ((Mode_video[Mode_choisi].Etat & 3) == 3 || Initialiser_mode_video( - Mode_video[Mode_choisi].Largeur, - Mode_video[Mode_choisi].Hauteur, + Mode_video[Mode_choisi].Width, + Mode_video[Mode_choisi].Height, Mode_video[Mode_choisi].Fullscreen)) { Erreur(0); // On signale à l'utilisateur que c'est un mode invalide Initialiser_mode_video( - Mode_video[Resolution_actuelle].Largeur, - Mode_video[Resolution_actuelle].Hauteur, + Mode_video[Resolution_actuelle].Width, + Mode_video[Resolution_actuelle].Height, Mode_video[Resolution_actuelle].Fullscreen); } @@ -1651,8 +1651,8 @@ void Bouton_Safety_resol(void) Desenclencher_bouton(BOUTON_LOUPE); Initialiser_mode_video(640, 400, 0); Resolution_actuelle=0; - Mode_video[0].Largeur = Largeur_ecran*Pixel_width; - Mode_video[0].Hauteur = Hauteur_ecran*Pixel_height; + Mode_video[0].Width = Largeur_ecran*Pixel_width; + Mode_video[0].Height = Hauteur_ecran*Pixel_height; Afficher_menu(); Afficher_ecran(); @@ -1770,7 +1770,7 @@ void Bouton_Ellipse_pleine(void) // -- Gestion du menu des dégradés ------------------------------------------ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) { - short Ligne; + short line; // On commence par afficher les 2 côtés qui constituent le dégradé de base: // Côté gauche (noir) @@ -1788,36 +1788,36 @@ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) { case 1 : // Dégradé de trames simples // Au centre, on place 10 lignes tramées simplement - for (Ligne=2;Ligne<2+10;Ligne++) - if (Ligne&1) + for (line=2;line<2+10;line++) + if (line&1) { // Lignes impaires - Pixel_dans_fenetre(Pos_X+ 5,Pos_Y+Ligne,CM_Blanc); - Pixel_dans_fenetre(Pos_X+ 7,Pos_Y+Ligne,CM_Blanc); - Pixel_dans_fenetre(Pos_X+ 8,Pos_Y+Ligne,CM_Noir); + Pixel_dans_fenetre(Pos_X+ 5,Pos_Y+line,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 7,Pos_Y+line,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 8,Pos_Y+line,CM_Noir); } else { // Lignes paires - Pixel_dans_fenetre(Pos_X+ 6,Pos_Y+Ligne,CM_Blanc); - Pixel_dans_fenetre(Pos_X+ 9,Pos_Y+Ligne,CM_Noir); + Pixel_dans_fenetre(Pos_X+ 6,Pos_Y+line,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 9,Pos_Y+line,CM_Noir); } break; case 2 : // Dégradé de trames étendues // Au centre, on place 10 lignes tramées de façon compliquée - for (Ligne=2;Ligne<2+10;Ligne++) - if (Ligne&1) + for (line=2;line<2+10;line++) + if (line&1) { // Lignes impaires - Pixel_dans_fenetre(Pos_X+ 7,Pos_Y+Ligne,CM_Blanc); - Pixel_dans_fenetre(Pos_X+ 8,Pos_Y+Ligne,CM_Noir); - Pixel_dans_fenetre(Pos_X+10,Pos_Y+Ligne,CM_Noir); + Pixel_dans_fenetre(Pos_X+ 7,Pos_Y+line,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 8,Pos_Y+line,CM_Noir); + Pixel_dans_fenetre(Pos_X+10,Pos_Y+line,CM_Noir); } else { // Lignes paires - Pixel_dans_fenetre(Pos_X+ 4,Pos_Y+Ligne,CM_Blanc); - Pixel_dans_fenetre(Pos_X+ 6,Pos_Y+Ligne,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 4,Pos_Y+line,CM_Blanc); + Pixel_dans_fenetre(Pos_X+ 6,Pos_Y+line,CM_Blanc); } } @@ -1850,7 +1850,7 @@ void Degrade_Charger_infos_du_tableau(int Indice) } } -void Degrade_Dessiner_preview(short Debut_X,short Debut_Y,short Largeur,short Hauteur,int Indice) +void Degrade_Dessiner_preview(short Debut_X,short Debut_Y,short width,short height,int Indice) { short Pos_X; // Variables de balayage du block en bas de l'écran. short Pos_Y; @@ -1862,15 +1862,15 @@ void Degrade_Dessiner_preview(short Debut_X,short Debut_Y,short Largeur,short Ha Debut_X=Fenetre_Pos_X+(Debut_X*Menu_Facteur_X); Debut_Y=Fenetre_Pos_Y+(Debut_Y*Menu_Facteur_Y); - Degrade_Intervalle_total=Largeur*Menu_Facteur_X; + Degrade_Intervalle_total=width*Menu_Facteur_X; Fin_X=Debut_X+Degrade_Intervalle_total; - Fin_Y=Debut_Y+(Hauteur*Menu_Facteur_Y); + Fin_Y=Debut_Y+(height*Menu_Facteur_Y); for (Pos_Y=Debut_Y;Pos_YTAILLE_MAXI_PATH) + length=strlen(Principal_Repertoire_courant); + if (length>TAILLE_MAXI_PATH) { // Doh! il va falloir tronquer le répertoire (bouh !) // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\") @@ -2257,9 +2257,9 @@ void Print_repertoire_courant(void) // Ensuite, on cherche un endroit à partir duquel on pourrait loger tout // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!) - for (Indice++;IndiceNomComplet,Nom))); + ((Element_courant!=NULL) && (strcmp(Element_courant->NomComplet,fname))); Indice++,Element_courant=Element_courant->Suivant); return (Element_courant!=NULL)?Indice:0; } -void Placer_barre_de_selection_sur(char * Nom) +void Placer_barre_de_selection_sur(char * fname) { short Indice; - Indice=Position_fichier_dans_liste(Nom); + Indice=Position_fichier_dans_liste(fname); if ((Liste_Nb_elements<=10) || (Indice<5)) { @@ -2386,7 +2386,7 @@ void Placer_barre_de_selection_sur(char * Nom) char FFF_Meilleur_nom[TAILLE_CHEMIN_FICHIER]; -char * Nom_correspondant_le_mieux_a(char * Nom) +char * Nom_correspondant_le_mieux_a(char * fname) { char * Pointeur_Meilleur_nom; Element_de_liste_de_fileselect * Element_courant; @@ -2402,7 +2402,7 @@ char * Nom_correspondant_le_mieux_a(char * Nom) || (Config.Find_file_fast==(Element_courant->Type+1)) ) { // On compare et si c'est mieux, on stocke dans Meilleur_nom - for (counter=0; Nom[counter]!='\0' && tolower(Element_courant->NomComplet[counter])==tolower(Nom[counter]); counter++); + for (counter=0; fname[counter]!='\0' && tolower(Element_courant->NomComplet[counter])==tolower(fname[counter]); counter++); if (counter>Lettres_identiques) { Lettres_identiques=counter; @@ -2415,9 +2415,9 @@ char * Nom_correspondant_le_mieux_a(char * Nom) return Pointeur_Meilleur_nom; } -byte Bouton_Load_ou_Save(byte Load, byte Image) - // Load=1 => On affiche le menu du bouton LOAD - // Load=0 => On affiche le menu du bouton SAVE +byte Bouton_Load_ou_Save(byte load, byte image) + // load=1 => On affiche le menu du bouton LOAD + // load=0 => On affiche le menu du bouton SAVE { short Bouton_clicke; T_Bouton_scroller * Scroller_de_fichiers; @@ -2449,9 +2449,9 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) Hauteur_image_initiale=Principal_Hauteur_image; strcpy(Nom_fichier_initial,Principal_Nom_fichier); strcpy(Commentaire_initial,Principal_Commentaire); - if (Load) + if (load) { - if (Image) + if (image) Ouvrir_fenetre(310,187+FILENAMESPACE,"Load picture"); else Ouvrir_fenetre(310,187+FILENAMESPACE,"Load brush"); @@ -2459,7 +2459,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) } else { - if (Image) + if (image) Ouvrir_fenetre(310,187+FILENAMESPACE,"Save picture"); else Ouvrir_fenetre(310,187+FILENAMESPACE,"Save brush"); @@ -2504,12 +2504,12 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) Fenetre_Definir_bouton_dropdown(70,56,36,16,0, (Principal_Format==0)?"*.*":FormatFichier[Principal_Format-1].Extension, 1,0,1,A_DROITE|A_GAUCHE); // 6 - if (Load) + if (load) Fenetre_Dropdown_choix(Dropdown_des_formats,0,"*.*"); for (Temp=0;Temp On charge/sauve une image // Image=0 => On charge/sauve une brosse { @@ -3267,24 +3267,24 @@ void Load_picture(byte Image) int Nouveau_mode; - if (!Image) + if (!image) Swapper_infos_selecteurs_image_et_brosse(); strcpy(Repertoire_fichier_initial,Principal_Repertoire_fichier); strcpy(Nom_fichier_initial ,Principal_Nom_fichier); Format_fichier_initial=Principal_Format_fichier; - if (!Image) + if (!image) { Palette_initiale=(Composantes *)malloc(sizeof(T_Palette)); memcpy(Palette_initiale,Principal_Palette,sizeof(T_Palette)); } - Ne_pas_restaurer=Bouton_Load_ou_Save(1,Image); + Ne_pas_restaurer=Bouton_Load_ou_Save(1,image); if (Ne_pas_restaurer) { - if (Image) + if (image) { if (Principal_Image_modifiee) Ne_pas_restaurer=Demande_de_confirmation("Discard unsaved changes?"); @@ -3300,7 +3300,7 @@ void Load_picture(byte Image) Forme_curseur=FORME_CURSEUR_SABLIER; Afficher_curseur(); - if (Image) + if (image) { // Si c'est une image qu'on charge, on efface l'ancien commentaire // C'est loin d'être indispensable, m'enfin bon... @@ -3313,9 +3313,9 @@ void Load_picture(byte Image) else Pixel_de_chargement=Pixel_Chargement_dans_brosse; - Charger_image(Image); + Charger_image(image); - if (!Image) + if (!image) { if (!Utiliser_palette_brosse) memcpy(Principal_Palette,Palette_initiale,sizeof(T_Palette)); @@ -3376,7 +3376,7 @@ void Load_picture(byte Image) } else { - if (Image) + if (image) { if (Loupe_Mode) { @@ -3391,8 +3391,8 @@ void Load_picture(byte Image) if ((Config.Auto_set_res) && (Nouveau_mode!=Resolution_actuelle)) { Initialiser_mode_video( - Mode_video[Nouveau_mode].Largeur, - Mode_video[Nouveau_mode].Hauteur, + Mode_video[Nouveau_mode].Width, + Mode_video[Nouveau_mode].Height, Mode_video[Nouveau_mode].Fullscreen); Afficher_menu(); } @@ -3408,14 +3408,14 @@ void Load_picture(byte Image) Calculer_couleurs_menu_optimales(Principal_Palette); Afficher_ecran(); - if (Image) + if (image) Principal_Image_modifiee=0; } Afficher_menu(); Afficher_curseur(); } - if (!Image) + if (!image) free(Palette_initiale); if (!Ne_pas_restaurer) @@ -3425,7 +3425,7 @@ void Load_picture(byte Image) Principal_Format_fichier =Format_fichier_initial; } - if (!Image) + if (!image) Swapper_infos_selecteurs_image_et_brosse(); Print_nom_fichier(); @@ -3482,8 +3482,8 @@ void Bouton_Reload(void) (!Une_resolution_a_ete_passee_en_parametre) ) { Initialiser_mode_video( - Mode_video[Nouveau_mode].Largeur, - Mode_video[Nouveau_mode].Hauteur, + Mode_video[Nouveau_mode].Width, + Mode_video[Nouveau_mode].Height, Mode_video[Nouveau_mode].Fullscreen); Afficher_menu(); } @@ -3514,12 +3514,12 @@ void Bouton_Reload(void) } -void Nom_fichier_backup(char * Nom, char * Nom_backup) +void Nom_fichier_backup(char * fname, char * Nom_backup) { short i; - strcpy(Nom_backup,Nom); - for (i=strlen(Nom)-strlen(Principal_Nom_fichier); Nom_backup[i]!='.'; i++); + strcpy(Nom_backup,fname); + for (i=strlen(fname)-strlen(Principal_Nom_fichier); Nom_backup[i]!='.'; i++); Nom_backup[i+1]='\0'; strcat(Nom_backup,"BAK"); } @@ -3552,9 +3552,9 @@ void Backup_du_fichier_sauvegarde(void) } -void Save_picture(byte Image) - // Image=1 => On charge/sauve une image - // Image=0 => On charge/sauve une brosse +void Save_picture(byte image) + // image=1 => On charge/sauve une image + // image=0 => On charge/sauve une brosse { // Données initiales du fichier (au cas où on voudrait annuler) char Repertoire_fichier_initial[TAILLE_CHEMIN_FICHIER]; @@ -3567,14 +3567,14 @@ void Save_picture(byte Image) //char Commentaire_initial[TAILLE_COMMENTAIRE+1]; - if (!Image) + if (!image) Swapper_infos_selecteurs_image_et_brosse(); strcpy(Repertoire_fichier_initial,Principal_Repertoire_fichier); strcpy(Nom_fichier_initial ,Principal_Nom_fichier); Format_fichier_initial=Principal_Format_fichier; - Ne_pas_restaurer=Bouton_Load_ou_Save(0,Image); + Ne_pas_restaurer=Bouton_Load_ou_Save(0,image); if (Ne_pas_restaurer && Fichier_existe(Principal_Nom_fichier)) { @@ -3597,13 +3597,13 @@ void Save_picture(byte Image) Forme_curseur=FORME_CURSEUR_SABLIER; Afficher_curseur(); - if (Image) - Sauver_image(Image); + if (image) + Sauver_image(image); else { Principal_Largeur_image=Brosse_Largeur; Principal_Hauteur_image=Brosse_Hauteur; - Sauver_image(Image); + Sauver_image(image); Principal_Largeur_image=Principal_Largeur_image_Backup; Principal_Hauteur_image=Principal_Hauteur_image_Backup; } @@ -3624,7 +3624,7 @@ void Save_picture(byte Image) Principal_Format_fichier =Format_fichier_initial; } - if (!Image) + if (!image) Swapper_infos_selecteurs_image_et_brosse(); Print_nom_fichier(); @@ -5110,8 +5110,8 @@ void Dessiner_trame_zoomee(short Orig_X, short Orig_Y) // On efface de contenu précédent Block(Orig_X,Orig_Y, - Menu_Facteur_X*Fenetre_Liste_boutons_special->Largeur, - Menu_Facteur_Y*Fenetre_Liste_boutons_special->Hauteur,CM_Clair); + Menu_Facteur_X*Fenetre_Liste_boutons_special->Width, + Menu_Facteur_Y*Fenetre_Liste_boutons_special->Height,CM_Clair); for (Pos_Y=0; Pos_YPos_X*Menu_Facteur_X, Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y, - Bouton_preview->Largeur*Menu_Facteur_X, - Bouton_preview->Hauteur*Menu_Facteur_Y, + Bouton_preview->Width*Menu_Facteur_X, + Bouton_preview->Height*Menu_Facteur_Y, CM_Clair); Nouvelle_Brosse = Rendu_Texte(Chaine_preview, Position_curseur+Debut_liste, Taille_police, antialias, Style_Bold, Style_Italic, &Nouvelle_Largeur, &Nouvelle_Hauteur); if (Nouvelle_Brosse) @@ -6031,16 +6031,16 @@ void Bouton_Texte() Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y, 0, 0, - Min(Bouton_preview->Largeur*Menu_Facteur_X, Nouvelle_Largeur), - Min(Bouton_preview->Hauteur*Menu_Facteur_Y, Nouvelle_Hauteur), + Min(Bouton_preview->Width*Menu_Facteur_X, Nouvelle_Largeur), + Min(Bouton_preview->Height*Menu_Facteur_Y, Nouvelle_Hauteur), Back_color, Nouvelle_Largeur); } UpdateRect( Fenetre_Pos_X+Bouton_preview->Pos_X*Menu_Facteur_X, Fenetre_Pos_Y+Bouton_preview->Pos_Y*Menu_Facteur_Y, - Bouton_preview->Largeur*Menu_Facteur_X, - Bouton_preview->Hauteur*Menu_Facteur_Y); + Bouton_preview->Width*Menu_Facteur_X, + Bouton_preview->Height*Menu_Facteur_Y); } if (A_redessiner || A_previsionner) { diff --git a/boutons.h b/boutons.h index 9865e3e5..26ee47ce 100644 --- a/boutons.h +++ b/boutons.h @@ -611,18 +611,18 @@ void Bouton_Cacher_menu(void); /*! Load picture from file. */ -void Load_picture(byte Image); +void Load_picture(byte image); /*! Save picture to file. */ -void Save_picture(byte Image); +void Save_picture(byte image); /*! Generic color tagging menu, for various effects. */ -void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte can_cancel, const char *Section_aide); +void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * mode, byte can_cancel, const char *Section_aide); /*! diff --git a/brush.c b/brush.c index 8cbb66c5..a6a77721 100644 --- a/brush.c +++ b/brush.c @@ -37,56 +37,56 @@ // Calcul de redimensionnement du pinceau pour éviter les débordements de // l'écran et de l'image -void Calculer_dimensions_clipees(short * X,short * Y,short * Largeur,short * Hauteur) +void Calculer_dimensions_clipees(short * X,short * Y,short * width,short * height) { if ((*X)(Limite_Droite+1)) + if (((*X)+(*width))>(Limite_Droite+1)) { - (*Largeur)=(Limite_Droite-(*X))+1; + (*width)=(Limite_Droite-(*X))+1; } if ((*Y)(Limite_Bas+1)) + if (((*Y)+(*height))>(Limite_Bas+1)) { - (*Hauteur)=(Limite_Bas-(*Y))+1; + (*height)=(Limite_Bas-(*Y))+1; } } // -- Calcul de redimensionnement du pinceau pour éviter les débordements // de l'écran zoomé et de l'image -- -void Calculer_dimensions_clipees_zoom(short * X,short * Y,short * Largeur,short * Hauteur) +void Calculer_dimensions_clipees_zoom(short * X,short * Y,short * width,short * height) { if ((*X)(Limite_Droite_Zoom+1)) + if (((*X)+(*width))>(Limite_Droite_Zoom+1)) { - (*Largeur)=(Limite_Droite_Zoom-(*X))+1; + (*width)=(Limite_Droite_Zoom-(*X))+1; } if ((*Y)(Limite_Bas_Zoom+1)) + if (((*Y)+(*height))>(Limite_Bas_Zoom+1)) { - (*Hauteur)=(Limite_Bas_Zoom-(*Y))+1; + (*height)=(Limite_Bas_Zoom-(*Y))+1; } } @@ -102,9 +102,9 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) // affiche la brosse/pinceau short Debut_Y; // Position Y (dans l'image) à partir de laquelle on // affiche la brosse/pinceau - short Largeur; // Largeur dans l'écran selon laquelle on affiche la + short width; // width dans l'écran selon laquelle on affiche la // brosse/pinceau - short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la + short height; // height dans l'écran selon laquelle on affiche la // brosse/pinceau short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir // de laquelle on affiche la brosse/pinceau @@ -142,51 +142,51 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) Debut_X=X-Brosse_Decalage_X; Debut_Y=Y-Brosse_Decalage_Y; - Largeur=Brosse_Largeur; - Hauteur=Brosse_Hauteur; - Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&Largeur,&Hauteur); - if (Largeur<=0 || Hauteur<=0) + width=Brosse_Largeur; + height=Brosse_Hauteur; + Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&width,&height); + if (width<=0 || height<=0) break; Debut_Compteur_X=Debut_X-(X-Brosse_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Brosse_Decalage_Y); - Fin_Compteur_X=Debut_Compteur_X+Largeur; - Fin_Compteur_Y=Debut_Compteur_Y+Hauteur; + Fin_Compteur_X=Debut_Compteur_X+width; + Fin_Compteur_Y=Debut_Compteur_Y+height; if (Preview) { - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) Display_brush_Color( Debut_X-Principal_Decalage_X, Debut_Y-Principal_Decalage_Y, Debut_Compteur_X, Debut_Compteur_Y, - Largeur, - Hauteur, + width, + height, Back_color, Brosse_Largeur ); if (Loupe_Mode) { - Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&Largeur, - &Hauteur + Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&width, + &height ); Debut_Compteur_X=Debut_X-(X-Brosse_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Brosse_Decalage_Y); - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { // Corrections dues au Zoom: Debut_X=(Debut_X-Loupe_Decalage_X)*Loupe_Facteur; Debut_Y=(Debut_Y-Loupe_Decalage_Y)*Loupe_Facteur; - Hauteur=Debut_Y+(Hauteur*Loupe_Facteur); - if (Hauteur>Menu_Ordonnee) - Hauteur=Menu_Ordonnee; + height=Debut_Y+(height*Loupe_Facteur); + if (height>Menu_Ordonnee) + height=Menu_Ordonnee; Display_brush_Color_zoom(Principal_X_Zoom+Debut_X,Debut_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur,Back_color, + width,height,Back_color, Brosse_Largeur, Buffer_de_ligne_horizontale); } @@ -201,16 +201,16 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) { if (Smear_Debut) { - if ((Largeur>0) && (Hauteur>0)) + if ((width>0) && (height>0)) { Copier_une_partie_d_image_dans_une_autre( - Principal_Ecran, Debut_X, Debut_Y, Largeur, Hauteur, + Principal_Ecran, Debut_X, Debut_Y, width, height, Principal_Largeur_image, Smear_Brosse, Debut_Compteur_X, Debut_Compteur_Y, Smear_Brosse_Largeur ); - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } Smear_Debut=0; } @@ -236,7 +236,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) Smear_Brosse[Position]=Couleur_temporaire; } - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } Smear_Min_X=Debut_Compteur_X; @@ -262,48 +262,48 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) Afficher_pixel(Pos_X,Pos_Y,Couleur); } } - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } break; case FORME_PINCEAU_BROSSE_MONOCHROME : // Brosse monochrome Debut_X=X-Brosse_Decalage_X; Debut_Y=Y-Brosse_Decalage_Y; - Largeur=Brosse_Largeur; - Hauteur=Brosse_Hauteur; - Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + width=Brosse_Largeur; + height=Brosse_Hauteur; + Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Brosse_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Brosse_Decalage_Y); - Fin_Compteur_X=Debut_Compteur_X+Largeur; - Fin_Compteur_Y=Debut_Compteur_Y+Hauteur; + Fin_Compteur_X=Debut_Compteur_X+width; + Fin_Compteur_Y=Debut_Compteur_Y+height; if (Preview) { - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) Display_brush_Mono(Debut_X-Principal_Decalage_X, Debut_Y-Principal_Decalage_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur, + width,height, Back_color,Fore_color, Brosse_Largeur); if (Loupe_Mode) { - Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Brosse_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Brosse_Decalage_Y); - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { // Corrections dues au Zoom: Debut_X=(Debut_X-Loupe_Decalage_X)*Loupe_Facteur; Debut_Y=(Debut_Y-Loupe_Decalage_Y)*Loupe_Facteur; - Hauteur=Debut_Y+(Hauteur*Loupe_Facteur); - if (Hauteur>Menu_Ordonnee) - Hauteur=Menu_Ordonnee; + height=Debut_Y+(height*Loupe_Facteur); + if (height>Menu_Ordonnee) + height=Menu_Ordonnee; Display_brush_Mono_zoom(Principal_X_Zoom+Debut_X,Debut_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur, + width,height, Back_color,Fore_color, Brosse_Largeur, Buffer_de_ligne_horizontale); @@ -319,17 +319,17 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) { if (Smear_Debut) { - if ((Largeur>0) && (Hauteur>0)) + if ((width>0) && (height>0)) { Copier_une_partie_d_image_dans_une_autre(Principal_Ecran, Debut_X,Debut_Y, - Largeur,Hauteur, + width,height, Principal_Largeur_image, Smear_Brosse, Debut_Compteur_X, Debut_Compteur_Y, Smear_Brosse_Largeur); - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } Smear_Debut=0; } @@ -347,7 +347,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) Smear_Brosse[Position]=Couleur_temporaire; } - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } @@ -364,51 +364,51 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) if (Lit_pixel_dans_brosse(Compteur_X,Compteur_Y)!=Back_color) Afficher_pixel(Pos_X,Pos_Y,Couleur); } - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } } break; default : // Pinceau Debut_X=X-Pinceau_Decalage_X; Debut_Y=Y-Pinceau_Decalage_Y; - Largeur=Pinceau_Largeur; - Hauteur=Pinceau_Hauteur; - Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + width=Pinceau_Largeur; + height=Pinceau_Hauteur; + Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Pinceau_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Pinceau_Decalage_Y); - Fin_Compteur_X=Debut_Compteur_X+Largeur; - Fin_Compteur_Y=Debut_Compteur_Y+Hauteur; + Fin_Compteur_X=Debut_Compteur_X+width; + Fin_Compteur_Y=Debut_Compteur_Y+height; if (Preview) { Temp=Brosse; Brosse=Pinceau_Sprite; - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) Display_brush_Mono(Debut_X-Principal_Decalage_X, Debut_Y-Principal_Decalage_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur, + width,height, 0,Fore_color, TAILLE_MAXI_PINCEAU); if (Loupe_Mode) { - Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Pinceau_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Pinceau_Decalage_Y); - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { // Corrections dues au Zoom: Debut_X=(Debut_X-Loupe_Decalage_X)*Loupe_Facteur; Debut_Y=(Debut_Y-Loupe_Decalage_Y)*Loupe_Facteur; - Hauteur=Debut_Y+(Hauteur*Loupe_Facteur); - if (Hauteur>Menu_Ordonnee) - Hauteur=Menu_Ordonnee; + height=Debut_Y+(height*Loupe_Facteur); + if (height>Menu_Ordonnee) + height=Menu_Ordonnee; Display_brush_Mono_zoom(Principal_X_Zoom+Debut_X,Debut_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur, + width,height, 0,Fore_color, TAILLE_MAXI_PINCEAU, Buffer_de_ligne_horizontale); @@ -424,17 +424,17 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) { if (Smear_Debut) { - if ((Largeur>0) && (Hauteur>0)) + if ((width>0) && (height>0)) { Copier_une_partie_d_image_dans_une_autre(Principal_Ecran, Debut_X,Debut_Y, - Largeur,Hauteur, + width,height, Principal_Largeur_image, Smear_Brosse, Debut_Compteur_X, Debut_Compteur_Y, Smear_Brosse_Largeur); - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } Smear_Debut=0; } @@ -451,7 +451,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) Afficher_pixel(Pos_X,Pos_Y,Smear_Brosse[Position]); Smear_Brosse[Position]=Couleur_temporaire; } - Mettre_Ecran_A_Jour(Debut_X, Debut_Y, Largeur, Hauteur); + Mettre_Ecran_A_Jour(Debut_X, Debut_Y, width, height); } @@ -468,7 +468,7 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview) if (Pinceau_Sprite[(TAILLE_MAXI_PINCEAU*Compteur_Y)+Compteur_X]) Afficher_pixel(Pos_X,Pos_Y,Couleur); } - Mettre_Ecran_A_Jour(Debut_X,Debut_Y,Largeur,Hauteur); + Mettre_Ecran_A_Jour(Debut_X,Debut_Y,width,height); } } } @@ -483,9 +483,9 @@ void Effacer_pinceau(short X,short Y) // affiche la brosse/pinceau short Debut_Y; // Position Y (dans l'image) à partir de laquelle on // affiche la brosse/pinceau - short Largeur; // Largeur dans l'écran selon laquelle on affiche la + short width; // width dans l'écran selon laquelle on affiche la // brosse/pinceau - short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la + short height; // height dans l'écran selon laquelle on affiche la // brosse/pinceau short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir // de laquelle on affiche la brosse/pinceau @@ -517,39 +517,39 @@ void Effacer_pinceau(short X,short Y) case FORME_PINCEAU_BROSSE_MONOCHROME : // Brosse monochrome Debut_X=X-Brosse_Decalage_X; Debut_Y=Y-Brosse_Decalage_Y; - Largeur=Brosse_Largeur; - Hauteur=Brosse_Hauteur; - Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + width=Brosse_Largeur; + height=Brosse_Hauteur; + Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Brosse_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Brosse_Decalage_Y); - Fin_Compteur_X=Debut_Compteur_X+Largeur; - Fin_Compteur_Y=Debut_Compteur_Y+Hauteur; + Fin_Compteur_X=Debut_Compteur_X+width; + Fin_Compteur_Y=Debut_Compteur_Y+height; - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) Clear_brush(Debut_X-Principal_Decalage_X, Debut_Y-Principal_Decalage_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur,Back_color, + width,height,Back_color, Principal_Largeur_image); if (Loupe_Mode) { - Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X; Debut_Compteur_Y=Debut_Y; - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { // Corrections dues au Zoom: Debut_X=(Debut_X-Loupe_Decalage_X)*Loupe_Facteur; Debut_Y=(Debut_Y-Loupe_Decalage_Y)*Loupe_Facteur; - Hauteur=Debut_Y+(Hauteur*Loupe_Facteur); - if (Hauteur>Menu_Ordonnee) - Hauteur=Menu_Ordonnee; + height=Debut_Y+(height*Loupe_Facteur); + if (height>Menu_Ordonnee) + height=Menu_Ordonnee; Clear_brush_zoom(Principal_X_Zoom+Debut_X,Debut_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur,Back_color, + width,height,Back_color, Principal_Largeur_image, Buffer_de_ligne_horizontale); } @@ -558,44 +558,44 @@ void Effacer_pinceau(short X,short Y) default: // Pinceau Debut_X=X-Pinceau_Decalage_X; Debut_Y=Y-Pinceau_Decalage_Y; - Largeur=Pinceau_Largeur; - Hauteur=Pinceau_Hauteur; - Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + width=Pinceau_Largeur; + height=Pinceau_Hauteur; + Calculer_dimensions_clipees(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X-(X-Pinceau_Decalage_X); Debut_Compteur_Y=Debut_Y-(Y-Pinceau_Decalage_Y); - Fin_Compteur_X=Debut_Compteur_X+Largeur; - Fin_Compteur_Y=Debut_Compteur_Y+Hauteur; + Fin_Compteur_X=Debut_Compteur_X+width; + Fin_Compteur_Y=Debut_Compteur_Y+height; Temp=Brosse; Brosse=Pinceau_Sprite; - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { Clear_brush(Debut_X-Principal_Decalage_X, Debut_Y-Principal_Decalage_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur,0, + width,height,0, Principal_Largeur_image); } if (Loupe_Mode) { - Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&Largeur,&Hauteur); + Calculer_dimensions_clipees_zoom(&Debut_X,&Debut_Y,&width,&height); Debut_Compteur_X=Debut_X; Debut_Compteur_Y=Debut_Y; - if ( (Largeur>0) && (Hauteur>0) ) + if ( (width>0) && (height>0) ) { // Corrections dues au Zoom: Debut_X=(Debut_X-Loupe_Decalage_X)*Loupe_Facteur; Debut_Y=(Debut_Y-Loupe_Decalage_Y)*Loupe_Facteur; - Hauteur=Debut_Y+(Hauteur*Loupe_Facteur); - if (Hauteur>Menu_Ordonnee) - Hauteur=Menu_Ordonnee; + height=Debut_Y+(height*Loupe_Facteur); + if (height>Menu_Ordonnee) + height=Menu_Ordonnee; Clear_brush_zoom(Principal_X_Zoom+Debut_X,Debut_Y, Debut_Compteur_X,Debut_Compteur_Y, - Largeur,Hauteur,0, + width,height,0, Principal_Largeur_image, Buffer_de_ligne_horizontale); } @@ -794,18 +794,18 @@ void Outline_brush(void) byte state; byte * Nouvelle_brosse; byte * Temporaire; - word Largeur; - word Hauteur; + word width; + word height; - Largeur=Brosse_Largeur+2; - Hauteur=Brosse_Hauteur+2; - Nouvelle_brosse=(byte *)malloc(((long)Largeur)*Hauteur); + width=Brosse_Largeur+2; + height=Brosse_Hauteur+2; + Nouvelle_brosse=(byte *)malloc(((long)width)*height); if (Nouvelle_brosse) { // On remplit la bordure ajoutée par la Backcolor - memset(Nouvelle_brosse,Back_color,((long)Largeur)*Hauteur); + memset(Nouvelle_brosse,Back_color,((long)width)*height); // On copie la brosse courante dans la nouvelle Copier_une_partie_d_image_dans_une_autre(Brosse, // Source @@ -815,15 +815,15 @@ void Outline_brush(void) Brosse_Largeur, Nouvelle_brosse, // Destination 1, 1, - Largeur); + width); // On intervertit la nouvelle et l'ancienne brosse: Temporaire=Brosse; Brosse=Nouvelle_brosse; Brosse_Largeur+=2; Brosse_Hauteur+=2; - Largeur-=2; - Hauteur-=2; + width-=2; + height-=2; // Si on "outline" avec une couleur différente de la Back_color on y va! if (Fore_color!=Back_color) @@ -834,7 +834,7 @@ void Outline_brush(void) state=0; for (Pos_X=1; Pos_X2) && (Brosse_Hauteur>2) ) { - Largeur=Brosse_Largeur-2; - Hauteur=Brosse_Hauteur-2; - Nouvelle_brosse=(byte *)malloc(((long)Largeur)*Hauteur); + width=Brosse_Largeur-2; + height=Brosse_Hauteur-2; + Nouvelle_brosse=(byte *)malloc(((long)width)*height); if (Nouvelle_brosse) { @@ -923,29 +923,29 @@ void Nibble_brush(void) Copier_une_partie_d_image_dans_une_autre(Brosse, // Source 1, 1, - Largeur, - Hauteur, + width, + height, Brosse_Largeur, Nouvelle_brosse, // Destination 0, 0, - Largeur); + width); // On intervertit la nouvelle et l'ancienne brosse: Temporaire=Brosse; Brosse=Nouvelle_brosse; Brosse_Largeur-=2; Brosse_Hauteur-=2; - Largeur+=2; - Hauteur+=2; + width+=2; + height+=2; // 1er balayage (horizontal) for (Pos_Y=0; Pos_Y=0) && (Pos_Y=0) && (Pos_Y=0) && (Pos_Y=0) && (Pos_YLimite_Droite) Fin_X=Limite_Droite; for (X=Debut_X; X<=Fin_X; X++) { - Temp=(float)(0.5+(float)X-ScanY_X[0][Y])/(float)Largeur; + Temp=(float)(0.5+(float)X-ScanY_X[0][Y])/(float)width; Xt=Round((float)(ScanY_Xt[0][Y])+(Temp*(ScanY_Xt[1][Y]-ScanY_Xt[0][Y]))); Yt=Round((float)(ScanY_Yt[0][Y])+(Temp*(ScanY_Yt[1][Y]-ScanY_Yt[0][Y]))); diff --git a/divers.c b/divers.c index 6fb195da..c7de43a5 100644 --- a/divers.c +++ b/divers.c @@ -221,7 +221,7 @@ byte Pixel_dans_cercle(void) return 0; } -void Copier_une_partie_d_image_dans_une_autre(byte * Source,word S_Pos_X,word S_Pos_Y,word Largeur,word Hauteur,word Largeur_source,byte * dest,word D_Pos_X,word D_Pos_Y,word Largeur_destination) +void Copier_une_partie_d_image_dans_une_autre(byte * Source,word S_Pos_X,word S_Pos_Y,word width,word height,word Largeur_source,byte * dest,word D_Pos_X,word D_Pos_Y,word Largeur_destination) { // ESI = adresse de la source en (S_Pox_X,S_Pos_Y) byte* esi = Source + S_Pos_Y * Largeur_source + S_Pos_X; @@ -229,12 +229,12 @@ void Copier_une_partie_d_image_dans_une_autre(byte * Source,word S_Pos_X,word S_ // EDI = adresse de la destination (D_Pos_X,D_Pos_Y) byte* edi = dest + D_Pos_Y * Largeur_destination + D_Pos_X; - int Ligne; + int line; // Pour chaque ligne - for (Ligne=0;Ligne < Hauteur; Ligne++) + for (line=0;line < height; line++) { - memcpy(edi,esi,Largeur); + memcpy(edi,esi,width); // Passe à la ligne suivante esi+=Largeur_source; @@ -259,7 +259,7 @@ void Rotate_90_deg_LOWLEVEL(byte * Source,byte * dest) byte* Debut_de_colonne = Source + Brosse_Largeur - 1; edi = dest; - // Largeur de la source = Hauteur de la destination + // Largeur de la source = hauteur de la destination dx = bx = Brosse_Largeur; // Pour chaque ligne @@ -280,26 +280,26 @@ void Rotate_90_deg_LOWLEVEL(byte * Source,byte * dest) // Remplacer une couleur par une autre dans un buffer -void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short Hauteur,short Largeur_buffer) +void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short width,short height,short Largeur_buffer) { int dx,cx; // Pour chaque ligne - for(dx=Hauteur;dx>0;dx--) + for(dx=height;dx>0;dx--) { // Pour chaque pixel - for(cx=Largeur;cx>0;cx--) + for(cx=width;cx>0;cx--) { *Buffer = Table_conv[*Buffer]; Buffer++; } - Buffer += Largeur_buffer-Largeur; + Buffer += Largeur_buffer-width; } } -void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,short Brosse_Hauteur,word Largeur_image) +void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,short Brosse_Hauteur,word image_width) { - byte* Src=Debut_Y*Largeur_image+Debut_X+Principal_Ecran; //Adr départ image (ESI) + byte* Src=Debut_Y*image_width+Debut_X+Principal_Ecran; //Adr départ image (ESI) byte* Dest=Brosse; //Adr dest brosse (EDI) int dx; @@ -311,7 +311,7 @@ void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,s memcpy(Dest,Src,Brosse_Largeur); // On passe à la ligne suivante - Src+=Largeur_image; + Src+=image_width; Dest+=Brosse_Largeur; } @@ -342,19 +342,19 @@ void Set_mouse_position(void) void Remplacer_toutes_les_couleurs_dans_limites(byte * Table_de_remplacement) { - int Ligne; + int line; int counter; byte* Adresse; byte Ancien; // Pour chaque ligne : - for(Ligne = Limite_Haut;Ligne <= Limite_Bas; Ligne++) + for(line = Limite_Haut;line <= Limite_Bas; line++) { // Pour chaque pixel sur la ligne : for (counter = Limite_Gauche;counter <= Limite_Droite;counter ++) { - Adresse = Principal_Ecran+Ligne*Principal_Largeur_image+counter; + Adresse = Principal_Ecran+line*Principal_Largeur_image+counter; Ancien=*Adresse; *Adresse = Table_de_remplacement[Ancien]; } @@ -596,14 +596,14 @@ void Scroll_picture(short x_offset,short y_offset) } void Zoomer_une_ligne(byte* Ligne_originale, byte* Ligne_zoomee, - word factor, word Largeur + word factor, word width ) { byte color; word X; // Pour chaque pixel - for(X=0;X= 12) Resultat[11]=CARACTERE_SUSPENSION; @@ -124,24 +124,24 @@ char * Nom_formate(char * Nom, int Type) { strcpy(Resultat," . "); // On commence par recopier la partie précédent le point: - for (c=0;( (Nom[c]!='.') && (Nom[c]!='\0') );c++) + for (c=0;( (fname[c]!='.') && (fname[c]!='\0') );c++) { if (c < 8) - Resultat[c]=Nom[c]; + Resultat[c]=fname[c]; } // Un caractère spécial pour indiquer que l'affichage est tronqué if (c > 8) Resultat[7]=CARACTERE_SUSPENSION; // On recherche le dernier point dans le reste du nom - for (Pos_DernierPoint = c; Nom[c]!='\0'; c++) - if (Nom[c]=='.') + for (Pos_DernierPoint = c; fname[c]!='\0'; c++) + if (fname[c]=='.') Pos_DernierPoint = c; // Ensuite on recopie la partie qui suit le point (si nécessaire): - if (Nom[Pos_DernierPoint]) + if (fname[Pos_DernierPoint]) { - for (c = Pos_DernierPoint+1,Autre_curseur=9;Nom[c]!='\0' && Autre_curseur < 12;c++,Autre_curseur++) - Resultat[Autre_curseur]=Nom[c]; + for (c = Pos_DernierPoint+1,Autre_curseur=9;fname[c]!='\0' && Autre_curseur < 12;c++,Autre_curseur++) + Resultat[Autre_curseur]=fname[c]; } } return Resultat; @@ -149,7 +149,7 @@ char * Nom_formate(char * Nom, int Type) // -- Rajouter a la liste des elements de la liste un element --------------- -void Ajouter_element_a_la_liste(char * Nom, int Type) +void Ajouter_element_a_la_liste(char * fname, int Type) // Cette procedure ajoute a la liste chainee un fichier passé en argument. { // Pointeur temporaire d'insertion @@ -159,8 +159,8 @@ void Ajouter_element_a_la_liste(char * Nom, int Type) Element_temporaire=(Element_de_liste_de_fileselect *)malloc(sizeof(Element_de_liste_de_fileselect)); // On met a jour le nouvel emplacement: - strcpy(Element_temporaire->NomAbrege,Nom_formate(Nom, Type)); - strcpy(Element_temporaire->NomComplet,Nom); + strcpy(Element_temporaire->NomAbrege,Nom_formate(fname, Type)); + strcpy(Element_temporaire->NomComplet,fname); Element_temporaire->Type = Type; Element_temporaire->Suivant =Liste_du_fileselect; @@ -369,15 +369,15 @@ void Lire_liste_des_lecteurs(void) struct mount_entry* next; #if defined(__BEOS__) || defined(__HAIKU__) - char * Home = getenv("$HOME"); + char * home_dir = getenv("$HOME"); #else - char * Home = getenv("HOME"); + char * home_dir = getenv("HOME"); #endif Ajouter_element_a_la_liste("/", 2); Liste_Nb_repertoires++; - if(Home) + if(home_dir) { - Ajouter_element_a_la_liste(Home, 2); + Ajouter_element_a_la_liste(home_dir, 2); Liste_Nb_repertoires++; } @@ -415,7 +415,7 @@ void Trier_la_liste_des_fichiers(void) // * Les fichiers ensuite, dans l'ordre alphabétique de leur nom { byte La_liste_est_triee; // Booléen "La liste est triée" - byte Inversion; // Booléen "Il faut inverser les éléments" + byte need_swap; // Booléen "Il faut inverser les éléments" Element_de_liste_de_fileselect * Element_precedent; Element_de_liste_de_fileselect * Element_courant; Element_de_liste_de_fileselect * Element_suivant; @@ -436,23 +436,23 @@ void Trier_la_liste_des_fichiers(void) while ( (Element_courant!=NULL) && (Element_suivant!=NULL) ) { // On commence par supposer qu'il n'y pas pas besoin d'inversion - Inversion=0; + need_swap=0; // Ensuite, on vérifie si les deux éléments sont bien dans l'ordre ou // non: // Si l'élément courant est un fichier est que le suivant est - // un répertoire -> Inversion + // un répertoire -> need_swap if ( Element_courant->Type < Element_suivant->Type ) - Inversion=1; + need_swap=1; // Si les deux éléments sont de même type et que le nom du suivant - // est plus petit que celui du courant -> Inversion + // est plus petit que celui du courant -> need_swap else if ( (Element_courant->Type==Element_suivant->Type) && (strcmp(Element_courant->NomComplet,Element_suivant->NomComplet)>0) ) - Inversion=1; + need_swap=1; - if (Inversion) + if (need_swap) { // Si les deux éléments nécessitent d'être inversé: @@ -563,7 +563,7 @@ void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select // -- Récupérer le libellé d'un élément de la liste ------------------------- -void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type) +void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * label,int *Type) // // Decalage_premier = Décalage entre le premier fichier visible dans le // sélecteur et le premier fichier de la liste @@ -571,7 +571,7 @@ void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select // Decalage_select = Décalage entre le premier fichier visible dans le // sélecteur et le fichier à récupérer // -// Libelle = Chaine de réception du libellé de l'élément +// label = Chaine de réception du libellé de l'élément // // Type = Récupération du type: 0 fichier, 1 repertoire, 2 lecteur. // Passer NULL si pas interessé. @@ -591,7 +591,7 @@ void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select Element_courant=Element_courant->Suivant; // On recopie la chaîne - strcpy(Libelle, Element_courant->NomComplet); + strcpy(label, Element_courant->NomComplet); if (Type != NULL) *Type=Element_courant->Type; @@ -626,7 +626,7 @@ void Select_Scroll_Up(short * Decalage_premier,short * Decalage_select) } -void Select_Page_Down(short * Decalage_premier,short * Decalage_select, short Lignes) +void Select_Page_Down(short * Decalage_premier,short * Decalage_select, short lines) { if (Liste_Nb_elements-1>*Decalage_premier+*Decalage_select) { @@ -642,7 +642,7 @@ void Select_Page_Down(short * Decalage_premier,short * Decalage_select, short Li else { if (Liste_Nb_elements>*Decalage_premier+18) - *Decalage_premier+=Lignes; + *Decalage_premier+=lines; else { *Decalage_premier=Liste_Nb_elements-10; @@ -654,7 +654,7 @@ void Select_Page_Down(short * Decalage_premier,short * Decalage_select, short Li } -void Select_Page_Up(short * Decalage_premier,short * Decalage_select, short Lignes) +void Select_Page_Up(short * Decalage_premier,short * Decalage_select, short lines) { if (*Decalage_premier+*Decalage_select>0) { @@ -662,8 +662,8 @@ void Select_Page_Up(short * Decalage_premier,short * Decalage_select, short Lign *Decalage_select=0; else { - if (*Decalage_premier>Lignes) - *Decalage_premier-=Lignes; + if (*Decalage_premier>lines) + *Decalage_premier-=lines; else *Decalage_premier=0; } diff --git a/files.h b/files.h index db1c03bc..d716adf3 100644 --- a/files.h +++ b/files.h @@ -33,7 +33,7 @@ void Trier_la_liste_des_fichiers(void); // -- Affichage des éléments de la liste de fichier / répertoire ------------ void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select); // -- Récupérer le libellé d'un élément de la liste ------------------------- -void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type); +void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * label,int *Type); void Afficher_bookmark(T_Bouton_dropdown * Bouton, int Numero_bookmark); @@ -41,14 +41,14 @@ void Afficher_bookmark(T_Bouton_dropdown * Bouton, int Numero_bookmark); void Select_Scroll_Down(short * Decalage_premier,short * Decalage_select); void Select_Scroll_Up (short * Decalage_premier,short * Decalage_select); -void Select_Page_Down (short * Decalage_premier,short * Decalage_select, short Lignes); -void Select_Page_Up (short * Decalage_premier,short * Decalage_select, short Lignes); +void Select_Page_Down (short * Decalage_premier,short * Decalage_select, short lines); +void Select_Page_Up (short * Decalage_premier,short * Decalage_select, short lines); void Select_End (short * Decalage_premier,short * Decalage_select); void Select_Home (short * Decalage_premier,short * Decalage_select); short Calculer_decalage_click_dans_fileselector(void); -char * Nom_formate(char * Nom, int Type); +char * Nom_formate(char * fname, int Type); // Scans a directory, calls Callback for each file in it, void for_each_file(const char * Nom_repertoire, void Callback(const char *)); diff --git a/global.h b/global.h index 2862801f..f91ac15f 100644 --- a/global.h +++ b/global.h @@ -50,8 +50,8 @@ GFX2_GLOBAL word Config_Touche[NB_TOUCHES_SPECIALES][2]; struct S_Mode_video { - short Largeur; - short Hauteur; + short Width; + short Height; byte Mode; word Fullscreen; byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible @@ -348,10 +348,10 @@ GFX2_GLOBAL struct // Informations sur l'aspect du bouton (graphisme): word Decalage_X; // Décalage par rapport à la gauche du menu word Decalage_Y; // Décalage par rapport au haut du menu - word Largeur; // Largeur du bouton - word Hauteur; // Hauteur du bouton + word Width; // Largeur du bouton + word Height; // Hauteur du bouton byte Enfonce; // Le bouton est enfoncé - byte Forme; // Forme du bouton + byte Shape; // Forme du bouton // Information sur les clicks de la souris: fonction_action Gauche; // Action déclenchée par un click gauche sur le bouton diff --git a/graph.c b/graph.c index d9ed0fd9..be8721b9 100644 --- a/graph.c +++ b/graph.c @@ -46,7 +46,7 @@ // Fonction qui met à jour la zone de l'image donnée en paramètre sur l'écran. // Tient compte du décalage X et Y et du zoom, et fait tous les controles nécessaires -void Mettre_Ecran_A_Jour(short X, short Y, short Largeur, short Hauteur) +void Mettre_Ecran_A_Jour(short X, short Y, short width, short height) { short L_effectif, H_effectif; short X_effectif; @@ -54,39 +54,39 @@ void Mettre_Ecran_A_Jour(short X, short Y, short Largeur, short Hauteur) short Diff; // Première étape, si L ou H est négatif, on doit remettre la zone à l'endroit - if (Largeur < 0) + if (width < 0) { - X += Largeur; - Largeur = - Largeur; + X += width; + width = - width; } - if (Hauteur < 0) + if (height < 0) { - Y += Hauteur; - Hauteur = - Hauteur; + Y += height; + height = - height; } // D'abord on met à jour dans la zone écran normale Diff = X-Principal_Decalage_X; if (Diff<0) { - L_effectif = Largeur + Diff; + L_effectif = width + Diff; X_effectif = 0; } else { - L_effectif = Largeur; + L_effectif = width; X_effectif = Diff; } Diff = Y-Principal_Decalage_Y; if (Diff<0) { - H_effectif = Hauteur + Diff; + H_effectif = height + Diff; Y_effectif = 0; } else { - H_effectif = Hauteur; + H_effectif = height; Y_effectif = Diff; } @@ -117,8 +117,8 @@ void Mettre_Ecran_A_Jour(short X, short Y, short Largeur, short Hauteur) // Clipping en X X_effectif = (X-Loupe_Decalage_X)*Loupe_Facteur; Y_effectif = (Y-Loupe_Decalage_Y)*Loupe_Facteur; - L_effectif = Largeur * Loupe_Facteur; - H_effectif = Hauteur * Loupe_Facteur; + L_effectif = width * Loupe_Facteur; + H_effectif = height * Loupe_Facteur; if (X_effectif < 0) { @@ -180,7 +180,7 @@ void Transformer_point(short X, short Y, float cosA, float sinA, //--------------------- Initialisation d'un mode vidéo ----------------------- -int Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen) +int Initialiser_mode_video(int width, int height, int fullscreen) { int Sensibilite_X; int Sensibilite_Y; @@ -193,9 +193,9 @@ int Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen) if (Pixel_height<1) Pixel_height=1; - if (Largeur_ecran!=Largeur/Pixel_width || - Hauteur_ecran!=Hauteur/Pixel_height || - Mode_video[Resolution_actuelle].Fullscreen != Fullscreen) + if (Largeur_ecran!=width/Pixel_width || + Hauteur_ecran!=height/Pixel_height || + Mode_video[Resolution_actuelle].Fullscreen != fullscreen) { switch (Pixel_ratio) { @@ -297,28 +297,28 @@ int Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen) break; } // Valeurs raisonnables: minimum 320x200 - if (!Fullscreen) + if (!fullscreen) { - if (Largeur < 320*Pixel_width) - Largeur = 320*Pixel_width; - if (Hauteur < 200*Pixel_height) - Hauteur = 200*Pixel_height; + if (width < 320*Pixel_width) + width = 320*Pixel_width; + if (height < 200*Pixel_height) + height = 200*Pixel_height; } else { - if (Largeur < 320*Pixel_width || Hauteur < 200*Pixel_height) + if (width < 320*Pixel_width || height < 200*Pixel_height) return 1; } // La largeur doit être un multiple de 4 #ifdef __amigaos4__ // On AmigaOS the systems adds some more constraints on that ... - Largeur = (Largeur + 15) & 0xFFFFFFF0; + width = (width + 15) & 0xFFFFFFF0; #else - Largeur = (Largeur + 3 ) & 0xFFFFFFFC; + width = (width + 3 ) & 0xFFFFFFFC; #endif - Set_Mode_SDL(&Largeur, &Hauteur,Fullscreen); - Largeur_ecran = Largeur/Pixel_width; - Hauteur_ecran = Hauteur/Pixel_height; + Set_Mode_SDL(&width, &height,fullscreen); + Largeur_ecran = width/Pixel_width; + Hauteur_ecran = height/Pixel_height; // Taille des menus if (Largeur_ecran/320 > Hauteur_ecran/200) @@ -354,12 +354,12 @@ int Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen) Set_palette(Principal_Palette); Resolution_actuelle=0; - if (Fullscreen) + if (fullscreen) { for (Indice=1; IndiceLimite_Gauche) && - (Lit_pixel_dans_ecran_courant(Debut_X-1,Ligne)==2)) || + (Lit_pixel_dans_ecran_courant(Debut_X-1,line)==2)) || // Test de la présence d'un point à droite du segment ((Fin_X-1Limite_Haut)) + if (!Propagation_possible && (line>Limite_Haut)) for (Pos_X=Debut_X;Pos_XLimite_Haut) Limite_courante_Haut--; - for (Ligne=Limite_courante_Bas;Ligne>=Limite_courante_Haut;Ligne--) + for (line=Limite_courante_Bas;line>=Limite_courante_Haut;line--) { Ligne_modifiee=0; - // On va traiter le cas de la ligne n° Ligne. + // On va traiter le cas de la ligne n° line. // On commence le traitement à la gauche de l'écran Debut_X=Limite_Gauche; @@ -661,14 +661,14 @@ void Fill(short * Limite_atteinte_Haut , short * Limite_atteinte_Bas, { // On cherche son début for (;(Debut_X<=Limite_Droite) && - (Lit_pixel_dans_ecran_courant(Debut_X,Ligne)!=1);Debut_X++); + (Lit_pixel_dans_ecran_courant(Debut_X,line)!=1);Debut_X++); if (Debut_X<=Limite_Droite) { // Un segment de couleur 1 existe et commence à la position Debut_X. // On va donc en chercher la fin. for (Fin_X=Debut_X+1;(Fin_X<=Limite_Droite) && - (Lit_pixel_dans_ecran_courant(Fin_X,Ligne)==1);Fin_X++); + (Lit_pixel_dans_ecran_courant(Fin_X,line)==1);Fin_X++); // On sait qu'il existe un segment de couleur 1 qui commence en // Debut_X et qui se termine en Fin_X-1. @@ -679,16 +679,16 @@ void Fill(short * Limite_atteinte_Haut , short * Limite_atteinte_Bas, Propagation_possible=( // Test de la présence d'un point à gauche du segment ((Debut_X>Limite_Gauche) && - (Lit_pixel_dans_ecran_courant(Debut_X-1,Ligne)==2)) || + (Lit_pixel_dans_ecran_courant(Debut_X-1,line)==2)) || // Test de la présence d'un point à droite du segment ((Fin_X-1Limite_Haut) ) Limite_courante_Haut--; // On monte cette limite vers le haut @@ -783,12 +783,12 @@ void Remplir(byte Couleur_de_remplissage) if (Limite_atteinte_Haut>Limite_Haut) Copier_une_partie_d_image_dans_une_autre(Ecran_backup, // Source Limite_Gauche,Limite_Haut, // Pos X et Y dans source - (Limite_Droite-Limite_Gauche)+1, // Largeur copie - Limite_atteinte_Haut-Limite_Haut,// Hauteur copie - Principal_Largeur_image, // Largeur de la source + (Limite_Droite-Limite_Gauche)+1, // width copie + Limite_atteinte_Haut-Limite_Haut,// height copie + Principal_Largeur_image, // width de la source Principal_Ecran, // Destination Limite_Gauche,Limite_Haut, // Pos X et Y destination - Principal_Largeur_image); // Largeur destination + Principal_Largeur_image); // width destination if (Limite_atteinte_Bas255)) + while ((Indice<512) && (list[Indice]>255)) Indice++; // On note la position de la première case de la séquence Premier=Indice; // On recherche la position de la dernière case de la séquence - for (last=Premier;Liste[last+1]<256;last++); + for (last=Premier;list[last+1]<256;last++); // Pour toutes les cases non vides (et non inhibées) qui suivent - switch (Mode) + switch (mode) { case MODE_SHADE_NORMAL : - for (;(Indice<512) && (Liste[Indice]<256);Indice++) + for (;(Indice<512) && (list[Indice]<256);Indice++) { // On met à jour les tables de conversion - Couleur=Liste[Indice]; - Table_inc[Couleur]=Liste[(Indice+Pas<=last)?Indice+Pas:last]; - Table_dec[Couleur]=Liste[(Indice-Pas>=Premier)?Indice-Pas:Premier]; + Couleur=list[Indice]; + Table_inc[Couleur]=list[(Indice+Pas<=last)?Indice+Pas:last]; + Table_dec[Couleur]=list[(Indice-Pas>=Premier)?Indice-Pas:Premier]; } break; case MODE_SHADE_BOUCLE : Temp=1+last-Premier; - for (;(Indice<512) && (Liste[Indice]<256);Indice++) + for (;(Indice<512) && (list[Indice]<256);Indice++) { // On met à jour les tables de conversion - Couleur=Liste[Indice]; - Table_inc[Couleur]=Liste[Premier+((Pas+Indice-Premier)%Temp)]; - Table_dec[Couleur]=Liste[Premier+(((Temp-Pas)+Indice-Premier)%Temp)]; + Couleur=list[Indice]; + Table_inc[Couleur]=list[Premier+((Pas+Indice-Premier)%Temp)]; + Table_dec[Couleur]=list[Premier+(((Temp-Pas)+Indice-Premier)%Temp)]; } break; default : // MODE_SHADE_NOSAT - for (;(Indice<512) && (Liste[Indice]<256);Indice++) + for (;(Indice<512) && (list[Indice]<256);Indice++) { // On met à jour les tables de conversion - Couleur=Liste[Indice]; + Couleur=list[Indice]; if (Indice+Pas<=last) - Table_inc[Couleur]=Liste[Indice+Pas]; + Table_inc[Couleur]=list[Indice+Pas]; if (Indice-Pas>=Premier) - Table_dec[Couleur]=Liste[Indice-Pas]; + Table_dec[Couleur]=list[Indice-Pas]; } } } @@ -2384,7 +2384,7 @@ byte Effet_Quick_shade(word X,word Y,byte Couleur) int c=Couleur=Lit_pixel_dans_ecran_feedback(X,Y); int Sens=(Fore_color<=Back_color); byte start,end; - int Largeur; + int width; if (Sens) { @@ -2399,18 +2399,18 @@ byte Effet_Quick_shade(word X,word Y,byte Couleur) if ((c>=start) && (c<=end) && (start!=end)) { - Largeur=1+end-start; + width=1+end-start; if ( ((Shade_Table==Shade_Table_gauche) && Sens) || ((Shade_Table==Shade_Table_droite) && (!Sens)) ) - c-=Quick_shade_Step%Largeur; + c-=Quick_shade_Step%width; else - c+=Quick_shade_Step%Largeur; + c+=Quick_shade_Step%width; if (c=gui->h || Debut_X+Largeur>=gui->w) + if (Debut_Y+height>=gui->h || Debut_X+width>=gui->w) { printf("Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but it doesn't fit the image.\n", - Debut_X, Debut_Y, Hauteur, Largeur, Section); + Debut_X, Debut_Y, height, width, Section); Erreur(ERREUR_GUI_CORROMPU); } - for (Y=Debut_Y; YLargeur - Mode2->Largeur) - return Mode1->Largeur - Mode2->Largeur; + if(Mode1->Width - Mode2->Width) + return Mode1->Width - Mode2->Width; // Tri par hauteur - return Mode1->Hauteur - Mode2->Hauteur; + return Mode1->Height - Mode2->Height; } @@ -1636,8 +1636,8 @@ void Definition_des_modes_video(void) { int Indice2; for (Indice2=1; Indice2 < Nb_modes_video; Indice2++) - if (Modes[Indice]->w == Mode_video[Indice2].Largeur && - Modes[Indice]->h == Mode_video[Indice2].Hauteur) + if (Modes[Indice]->w == Mode_video[Indice2].Width && + Modes[Indice]->h == Mode_video[Indice2].Height) { // Mode déja prévu: ok break; @@ -1774,14 +1774,14 @@ int Charger_CFG(int Tout_charger) for (Indice=0; Indice<(long)(Chunk.Taille/sizeof(CFG_Mode_video)); Indice++) { if (!read_byte(Handle, &CFG_Mode_video.Etat) || - !read_word_le(Handle, &CFG_Mode_video.Largeur) || - !read_word_le(Handle, &CFG_Mode_video.Hauteur) ) + !read_word_le(Handle, &CFG_Mode_video.Width) || + !read_word_le(Handle, &CFG_Mode_video.Height) ) goto Erreur_lecture_config; for (Indice2=1; Indice2 @@ -59,34 +59,34 @@ dword endian_magic32(dword x) // Lit un octet // Renvoie -1 si OK, 0 en cas d'erreur -int read_byte(FILE *Fichier, byte *Dest) +int read_byte(FILE *file, byte *Dest) { - return fread(Dest, 1, 1, Fichier) == 1; + return fread(Dest, 1, 1, file) == 1; } // Ecrit un octet // Renvoie -1 si OK, 0 en cas d'erreur -int write_byte(FILE *Fichier, byte b) +int write_byte(FILE *file, byte b) { - return fwrite(&b, 1, 1, Fichier) == 1; + return fwrite(&b, 1, 1, file) == 1; } // Lit des octets // Renvoie -1 si OK, 0 en cas d'erreur -int read_bytes(FILE *Fichier, void *Dest, size_t Taille) +int read_bytes(FILE *file, void *Dest, size_t Taille) { - return fread(Dest, 1, Taille, Fichier) == Taille; + return fread(Dest, 1, Taille, file) == Taille; } // Ecrit des octets // Renvoie -1 si OK, 0 en cas d'erreur -int write_bytes(FILE *Fichier, void *Src, size_t Taille) +int write_bytes(FILE *file, void *Src, size_t Taille) { - return fwrite(Src, 1, Taille, Fichier) == Taille; + return fwrite(Src, 1, Taille, file) == Taille; } // Lit un word (little-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int read_word_le(FILE *Fichier, word *Dest) +int read_word_le(FILE *file, word *Dest) { - if (fread(Dest, 1, sizeof(word), Fichier) != sizeof(word)) + if (fread(Dest, 1, sizeof(word), file) != sizeof(word)) return 0; #if SDL_BYTEORDER != SDL_LIL_ENDIAN *Dest = SDL_Swap16(*Dest); @@ -95,18 +95,18 @@ int read_word_le(FILE *Fichier, word *Dest) } // Ecrit un word (little-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int write_word_le(FILE *Fichier, word w) +int write_word_le(FILE *file, word w) { #if SDL_BYTEORDER != SDL_LIL_ENDIAN w = SDL_Swap16(w); #endif - return fwrite(&w, 1, sizeof(word), Fichier) == sizeof(word); + return fwrite(&w, 1, sizeof(word), file) == sizeof(word); } // Lit un word (big-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int read_word_be(FILE *Fichier, word *Dest) +int read_word_be(FILE *file, word *Dest) { - if (fread(Dest, 1, sizeof(word), Fichier) != sizeof(word)) + if (fread(Dest, 1, sizeof(word), file) != sizeof(word)) return 0; #if SDL_BYTEORDER != SDL_BIG_ENDIAN *Dest = SDL_Swap16(*Dest); @@ -115,18 +115,18 @@ int read_word_be(FILE *Fichier, word *Dest) } // Ecrit un word (big-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int write_word_be(FILE *Fichier, word w) +int write_word_be(FILE *file, word w) { #if SDL_BYTEORDER != SDL_BIG_ENDIAN w = SDL_Swap16(w); #endif - return fwrite(&w, 1, sizeof(word), Fichier) == sizeof(word); + return fwrite(&w, 1, sizeof(word), file) == sizeof(word); } // Lit un dword (little-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int read_dword_le(FILE *Fichier, dword *Dest) +int read_dword_le(FILE *file, dword *Dest) { - if (fread(Dest, 1, sizeof(dword), Fichier) != sizeof(dword)) + if (fread(Dest, 1, sizeof(dword), file) != sizeof(dword)) return 0; #if SDL_BYTEORDER != SDL_LIL_ENDIAN *Dest = SDL_Swap32(*Dest); @@ -135,19 +135,19 @@ int read_dword_le(FILE *Fichier, dword *Dest) } // Ecrit un dword (little-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int write_dword_le(FILE *Fichier, dword dw) +int write_dword_le(FILE *file, dword dw) { #if SDL_BYTEORDER != SDL_LIL_ENDIAN dw = SDL_Swap32(dw); #endif - return fwrite(&dw, 1, sizeof(dword), Fichier) == sizeof(dword); + return fwrite(&dw, 1, sizeof(dword), file) == sizeof(dword); } // Lit un dword (big-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int read_dword_be(FILE *Fichier, dword *Dest) +int read_dword_be(FILE *file, dword *Dest) { - if (fread(Dest, 1, sizeof(dword), Fichier) != sizeof(dword)) + if (fread(Dest, 1, sizeof(dword), file) != sizeof(dword)) return 0; #if SDL_BYTEORDER != SDL_BIG_ENDIAN *Dest = SDL_Swap32(*Dest); @@ -156,16 +156,16 @@ int read_dword_be(FILE *Fichier, dword *Dest) } // Ecrit un dword (big-endian) // Renvoie -1 si OK, 0 en cas d'erreur -int write_dword_be(FILE *Fichier, dword dw) +int write_dword_be(FILE *file, dword dw) { #if SDL_BYTEORDER != SDL_BIG_ENDIAN dw = SDL_Swap32(dw); #endif - return fwrite(&dw, 1, sizeof(dword), Fichier) == sizeof(dword); + return fwrite(&dw, 1, sizeof(dword), file) == sizeof(dword); } // Détermine la position du dernier '/' ou '\\' dans une chaine, -// typiquement pour séparer le nom de fichier d'un chemin. +// typiquement pour séparer le nom de file d'un chemin. // Attention, sous Windows, il faut s'attendre aux deux car // par exemple un programme lancé sous GDB aura comme argv[0]: // d:\Data\C\GFX2\grafx2/grafx2.exe @@ -181,7 +181,7 @@ char * Position_dernier_slash(const char * Chaine) Position = Chaine; return (char *)Position; } -// Récupère la partie "nom de fichier seul" d'un chemin +// Récupère la partie "nom de file seul" d'un chemin void Extraire_nom_fichier(char *dest, const char *Source) { const char * Position = Position_dernier_slash(Source); @@ -204,14 +204,14 @@ void Extraire_chemin(char *dest, const char *Source) strcat(dest, SEPARATEUR_CHEMIN); } -int Fichier_existe(char * Fichier) -// Détermine si un fichier passé en paramètre existe ou non dans le +int Fichier_existe(char * fname) +// Détermine si un file passé en paramètre existe ou non dans le // répertoire courant. { struct stat buf; int Resultat; - Resultat=stat(Fichier,&buf); + Resultat=stat(fname,&buf); if (Resultat!=0) return(errno!=ENOENT); else diff --git a/io.h b/io.h index ea72b5d5..f4f7f3cf 100644 --- a/io.h +++ b/io.h @@ -22,21 +22,21 @@ word endian_magic16(word x); dword endian_magic32(dword x); -int read_byte(FILE *Fichier, byte *Dest); -int write_byte(FILE *Fichier, byte b); +int read_byte(FILE *file, byte *Dest); +int write_byte(FILE *file, byte b); -int read_bytes(FILE *Fichier, void *Dest, size_t Taille); -int write_bytes(FILE *Fichier, void *Dest, size_t Taille); +int read_bytes(FILE *file, void *Dest, size_t Taille); +int write_bytes(FILE *file, void *Dest, size_t Taille); -int read_word_le(FILE *Fichier, word *Dest); -int write_word_le(FILE *Fichier, word w); -int read_dword_le(FILE *Fichier, dword *Dest); -int write_dword_le(FILE *Fichier, dword dw); +int read_word_le(FILE *file, word *Dest); +int write_word_le(FILE *file, word w); +int read_dword_le(FILE *file, dword *Dest); +int write_dword_le(FILE *file, dword dw); -int read_word_be(FILE *Fichier, word *Dest); -int write_word_be(FILE *Fichier, word w); -int read_dword_be(FILE *Fichier, dword *Dest); -int write_dword_be(FILE *Fichier, dword dw); +int read_word_be(FILE *file, word *Dest); +int write_word_be(FILE *file, word w); +int read_dword_be(FILE *file, dword *Dest); +int write_dword_be(FILE *file, dword dw); void Extraire_nom_fichier(char *dest, const char *Source); void Extraire_chemin(char *dest, const char *Source); @@ -49,9 +49,9 @@ char * Position_dernier_slash(const char * Chaine); #define SEPARATEUR_CHEMIN "/" #endif -// Détermine si un fichier passé en paramètre existe ou non dans le +// Détermine si un file passé en paramètre existe ou non dans le // répertoire courant. -int Fichier_existe(char * Fichier); +int Fichier_existe(char * fname); // Détermine si un répertoire passé en paramètre existe ou non dans le // répertoire courant. int Repertoire_existe(char * Repertoire); diff --git a/loadsave.c b/loadsave.c index 255aa69d..c32f4308 100644 --- a/loadsave.c +++ b/loadsave.c @@ -138,10 +138,10 @@ T_Format FormatFichier[NB_FORMATS_CONNUS] = { enum PIXEL_RATIO Ratio_image_chargee=PIXEL_SIMPLE; // Taille de fichier, en octets -int FileLength(FILE * Fichier) +int FileLength(FILE * file) { struct stat infos_fichier; - fstat(fileno(Fichier),&infos_fichier); + fstat(fileno(file),&infos_fichier); return infos_fichier.st_size; } @@ -168,7 +168,7 @@ short Preview_Facteur_Y; short Preview_Pos_X; short Preview_Pos_Y; -byte HBPm1; // Header.BitPlanes-1 +byte HBPm1; // header.BitPlanes-1 // Chargement des pixels dans la preview @@ -208,7 +208,7 @@ void Remapper_fileselect(void) { // Si on charge une image monochrome, le fileselect ne sera plus visible. Dans ce cas on force quelques couleurs à des valeurs sures - int Noir = + int black = Principal_Palette[CM_Noir].R + Principal_Palette[CM_Noir].V + Principal_Palette[CM_Noir].B; @@ -217,14 +217,14 @@ void Remapper_fileselect(void) Principal_Palette[CM_Blanc].V + Principal_Palette[CM_Blanc].B; - //Set_color(CM_Clair,(2*Blanc+Noir)/9,(2*Blanc+Noir)/9,(2*Blanc+Noir)/9); - //Set_color(CM_Fonce,(2*Noir+Blanc)/9,(2*Noir+Blanc)/9,(2*Noir+Blanc)/9); - Principal_Palette[CM_Fonce].R=(2*Noir+Blanc)/9; - Principal_Palette[CM_Fonce].V=(2*Noir+Blanc)/9; - Principal_Palette[CM_Fonce].B=(2*Noir+Blanc)/9; - Principal_Palette[CM_Clair].R=(2*Blanc+Noir)/9; - Principal_Palette[CM_Clair].V=(2*Blanc+Noir)/9; - Principal_Palette[CM_Clair].B=(2*Blanc+Noir)/9; + //Set_color(CM_Clair,(2*Blanc+black)/9,(2*Blanc+black)/9,(2*Blanc+black)/9); + //Set_color(CM_Fonce,(2*black+Blanc)/9,(2*black+Blanc)/9,(2*black+Blanc)/9); + Principal_Palette[CM_Fonce].R=(2*black+Blanc)/9; + Principal_Palette[CM_Fonce].V=(2*black+Blanc)/9; + Principal_Palette[CM_Fonce].B=(2*black+Blanc)/9; + Principal_Palette[CM_Clair].R=(2*Blanc+black)/9; + Principal_Palette[CM_Clair].V=(2*Blanc+black)/9; + Principal_Palette[CM_Clair].B=(2*Blanc+black)/9; Set_palette(Principal_Palette); } @@ -290,7 +290,7 @@ void Palette_fake_24b(T_Palette Palette) // Supplément à faire lors de l'initialisation d'une preview dans le cas // d'une image 24b -void Initialiser_preview_24b(int Largeur,int Hauteur) +void Initialiser_preview_24b(int width,int height) { if (Pixel_de_chargement==Pixel_Chargement_dans_preview) { @@ -309,7 +309,7 @@ void Initialiser_preview_24b(int Largeur,int Hauteur) // Allocation du buffer 24b Buffer_image_24b= - (Composantes *)Emprunter_memoire_de_page(Largeur*Hauteur*sizeof(Composantes)); + (Composantes *)Emprunter_memoire_de_page(width*height*sizeof(Composantes)); if (!Buffer_image_24b) { // Afficher un message d'erreur @@ -330,7 +330,7 @@ void Initialiser_preview_24b(int Largeur,int Hauteur) -void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) +void Initialiser_preview(short width,short height,long Taille,int format) // // Cette procédure doit être appelée par les routines de chargement // d'images. @@ -342,18 +342,18 @@ void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) char Chaine[256]; int Image_en_24b; - Image_en_24b=Format & FORMAT_24B; - Format =Format & (~FORMAT_24B); + Image_en_24b=format & FORMAT_24B; + format =format & (~FORMAT_24B); if (Pixel_de_chargement==Pixel_Chargement_dans_preview) { // Préparation du chargement d'une preview: // Affichage des données "Image size:" - if ((Largeur<10000) && (Hauteur<10000)) + if ((width<10000) && (height<10000)) { - Num2str(Largeur,Chaine,4); - Num2str(Hauteur,Chaine+5,4); + Num2str(width,Chaine,4); + Num2str(height,Chaine+5,4); Chaine[4]='x'; Print_dans_fenetre(226,55,Chaine,CM_Noir,CM_Clair); } @@ -384,21 +384,21 @@ void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) } // Affichage du vrai format - if (Format!=Principal_Format) + if (format!=Principal_Format) { - Print_dans_fenetre( 274,72,FormatFichier[Format-1].Extension,CM_Noir,CM_Clair); + Print_dans_fenetre( 274,72,FormatFichier[format-1].Extension,CM_Noir,CM_Clair); } // On efface le commentaire précédent Block(Fenetre_Pos_X+46*Menu_Facteur_X,Fenetre_Pos_Y+(175+FILENAMESPACE)*Menu_Facteur_Y, Menu_Facteur_X<<8,Menu_Facteur_Y<<3,CM_Clair); // Affichage du commentaire - if (FormatFichier[Format-1].Commentaire) + if (FormatFichier[format-1].Commentaire) Print_dans_fenetre(46,175+FILENAMESPACE,Principal_Commentaire,CM_Noir,CM_Clair); // Calculs des données nécessaires à l'affichage de la preview: - Preview_Facteur_X=Round_div_max(Largeur,122*Menu_Facteur_X); - Preview_Facteur_Y=Round_div_max(Hauteur, 82*Menu_Facteur_Y); + Preview_Facteur_X=Round_div_max(width,122*Menu_Facteur_X); + Preview_Facteur_Y=Round_div_max(height, 82*Menu_Facteur_Y); if ( (!Config.Maximize_preview) && (Preview_Facteur_X!=Preview_Facteur_Y) ) { @@ -413,15 +413,15 @@ void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) // On nettoie la zone où va s'afficher la preview: Block(Preview_Pos_X,Preview_Pos_Y, - Round_div_max(Largeur,Preview_Facteur_X), - Round_div_max(Hauteur,Preview_Facteur_Y), + Round_div_max(width,Preview_Facteur_X), + Round_div_max(height,Preview_Facteur_Y), CM_Noir); } else { if (Pixel_de_chargement==Pixel_Chargement_dans_ecran_courant) { - if (Backup_avec_nouvelles_dimensions(0,Largeur,Hauteur)) + if (Backup_avec_nouvelles_dimensions(0,width,height)) { // La nouvelle page a pu être allouée, elle est pour l'instant pleine // de 0s. Elle fait Principal_Largeur_image de large. @@ -441,12 +441,12 @@ void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) { free(Brosse); free(Smear_Brosse); - Brosse=(byte *)malloc(Largeur*Hauteur); - Brosse_Largeur=Largeur; - Brosse_Hauteur=Hauteur; + Brosse=(byte *)malloc(width*height); + Brosse_Largeur=width; + Brosse_Hauteur=height; if (Brosse) { - Smear_Brosse=(byte *)malloc(Largeur*Hauteur); + Smear_Brosse=(byte *)malloc(width*height); if (!Smear_Brosse) Erreur_fichier=3; } @@ -457,7 +457,7 @@ void Initialiser_preview(short Largeur,short Hauteur,long Taille,int Format) if (!Erreur_fichier) if (Image_en_24b) - Initialiser_preview_24b(Largeur,Hauteur); + Initialiser_preview_24b(width,height); } @@ -529,10 +529,10 @@ void Nom_fichier_complet(char * Nom_du_fichier, byte Sauve_Colorix) // Gestion des lectures et écritures // ///////////////////////////////////////////////////////////////////////////// -void Lire_octet(FILE * Fichier, byte *Octet) +void Lire_octet(FILE * file, byte *Octet) { // FIXME : Remplacer les appelants par read_bytes(), et gérer les retours d'erreur. - read_byte(Fichier, Octet); + read_byte(file, Octet); } // -------------------------------------------------------------------------- @@ -546,21 +546,21 @@ void Init_ecriture(void) Index_ecriture=0; } -void Ecrire_octet(FILE *Fichier, byte Octet) +void Ecrire_octet(FILE *file, byte Octet) { Tampon_ecriture[Index_ecriture++]=Octet; if (Index_ecriture>=64000) { - if (! write_bytes(Fichier,Tampon_ecriture,64000)) + if (! write_bytes(file,Tampon_ecriture,64000)) Erreur_fichier=1; Index_ecriture=0; } } -void Close_ecriture(FILE *Fichier) +void Close_ecriture(FILE *file) { if (Index_ecriture) - if (! write_bytes(Fichier,Tampon_ecriture,Index_ecriture)) + if (! write_bytes(file,Tampon_ecriture,Index_ecriture)) Erreur_fichier=1; free(Tampon_ecriture); } @@ -582,10 +582,10 @@ void Modif_Erreur_fichier(int Nouvelle_valeur) // -- Charger n'importe connu quel type de fichier d'image (ou palette) ----- -void Charger_image(byte Image) +void Charger_image(byte image) { int Indice; // Indice de balayage des formats - int Format=0; // Format du fichier à charger + int format=0; // Format du fichier à charger // On place par défaut Erreur_fichier à vrai au cas où on ne sache pas @@ -597,7 +597,7 @@ void Charger_image(byte Image) FormatFichier[Principal_Format-1].Test(); if (!Erreur_fichier) // Si dans le sélecteur il y a un format valide on le prend tout de suite - Format=Principal_Format-1; + format=Principal_Format-1; } if (Erreur_fichier) @@ -611,7 +611,7 @@ void Charger_image(byte Image) // On s'arrête si le fichier est au bon format: if (Erreur_fichier==0) { - Format=Indice; + format=Indice; break; } } @@ -625,7 +625,7 @@ void Charger_image(byte Image) Ratio_image_chargee=PIXEL_SIMPLE; // Dans certains cas il est possible que le chargement plante // après avoir modifié la palette. TODO - FormatFichier[Format].Load(); + FormatFichier[format].Load(); if (Erreur_fichier>0) { @@ -659,14 +659,14 @@ void Charger_image(byte Image) free(Buffer_image_24b); } - if (Image) + if (image) { - if ( (Erreur_fichier!=1) && (FormatFichier[Format].Backup_done) ) + if ( (Erreur_fichier!=1) && (FormatFichier[format].Backup_done) ) { // On considère que l'image chargée n'est plus modifiée Principal_Image_modifiee=0; // Et on documente la variable Principal_Format_fichier avec la valeur: - Principal_Format_fichier=Format+1; + Principal_Format_fichier=format+1; // Correction des dimensions if (Principal_Largeur_image<1) @@ -679,7 +679,7 @@ void Charger_image(byte Image) // On considère que l'image chargée est encore modifiée Principal_Image_modifiee=1; // Et on documente la variable Principal_Format_fichier avec la valeur: - Principal_Format_fichier=Format+1; + Principal_Format_fichier=format+1; } else { @@ -699,13 +699,13 @@ void Charger_image(byte Image) // -- Sauver n'importe quel type connu de fichier d'image (ou palette) ------ -void Sauver_image(byte Image) +void Sauver_image(byte image) { // On place par défaut Erreur_fichier à vrai au cas où on ne sache pas // sauver le format du fichier: (Est-ce vraiment utile??? Je ne crois pas!) Erreur_fichier=1; - Lit_pixel_de_sauvegarde=(Image)?Lit_pixel_dans_ecran_courant:Lit_pixel_dans_brosse; + Lit_pixel_de_sauvegarde=(image)?Lit_pixel_dans_ecran_courant:Lit_pixel_dans_brosse; FormatFichier[Principal_Format_fichier-1].Save(); @@ -713,7 +713,7 @@ void Sauver_image(byte Image) Erreur(0); else { - if ((Image) && (FormatFichier[Principal_Format_fichier-1].Backup_done)) + if ((image) && (FormatFichier[Principal_Format_fichier-1].Backup_done)) Principal_Image_modifiee=0; } } @@ -728,7 +728,7 @@ void Sauver_image(byte Image) // -- Tester si un fichier est au format PAL -------------------------------- void Test_PAL(void) { - FILE *Fichier; // Fichier du fichier + FILE *file; // Fichier du fichier char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier long Taille_du_fichier; // Taille du fichier struct stat Informations_Fichier; @@ -738,12 +738,12 @@ void Test_PAL(void) Erreur_fichier=1; // Ouverture du fichier - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { stat(Nom_du_fichier,&Informations_Fichier); // Lecture de la taille du fichier Taille_du_fichier=Informations_Fichier.st_size; - fclose(Fichier); + fclose(file); // Le fichier ne peut être au format PAL que si sa taille vaut 768 octets if (Taille_du_fichier==sizeof(T_Palette)) Erreur_fichier=0; @@ -754,7 +754,7 @@ void Test_PAL(void) // -- Lire un fichier au format PAL ----------------------------------------- void Load_PAL(void) { - FILE *Fichier; // Fichier du fichier + FILE *file; // Fichier du fichier char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier //long Taille_du_fichier; // Taille du fichier @@ -763,13 +763,13 @@ void Load_PAL(void) Erreur_fichier=0; // Ouverture du fichier - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { T_Palette Palette_64; // Initialiser_preview(???); // Pas possible... pas d'image... // Lecture du fichier dans Principal_Palette - if (read_bytes(Fichier,Palette_64,sizeof(T_Palette))) + if (read_bytes(file,Palette_64,sizeof(T_Palette))) { Palette_64_to_256(Palette_64); memcpy(Principal_Palette,Palette_64,sizeof(T_Palette)); @@ -783,7 +783,7 @@ void Load_PAL(void) Erreur_fichier=2; // Fermeture du fichier - fclose(Fichier); + fclose(file); } else // Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur @@ -794,7 +794,7 @@ void Load_PAL(void) // -- Sauver un fichier au format PAL --------------------------------------- void Save_PAL(void) { - FILE *Fichier; // Fichier du fichier + FILE *file; // Fichier du fichier char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier //long Taille_du_fichier; // Taille du fichier @@ -803,25 +803,25 @@ void Save_PAL(void) Erreur_fichier=0; // Ouverture du fichier - if ((Fichier=fopen(Nom_du_fichier,"wb"))) + if ((file=fopen(Nom_du_fichier,"wb"))) { T_Palette Palette_64; memcpy(Palette_64,Principal_Palette,sizeof(T_Palette)); Palette_256_to_64(Palette_64); // Enregistrement de Principal_Palette dans le fichier - if (! write_bytes(Fichier,Palette_64,sizeof(T_Palette))) + if (! write_bytes(file,Palette_64,sizeof(T_Palette))) { Erreur_fichier=1; - fclose(Fichier); + fclose(file); remove(Nom_du_fichier); } else // Ecriture correcte => Fermeture normale du fichier - fclose(Fichier); + fclose(file); } else // Si on n'a pas réussi à ouvrir le fichier, alors il y a eu une erreur { Erreur_fichier=1; - fclose(Fichier); + fclose(file); remove(Nom_du_fichier); // On se fout du résultat de l'opération car si ça // renvoie 0 c'est que le fichier avait été partiel- @@ -839,8 +839,8 @@ void Save_PAL(void) typedef struct { byte Filler1[6]; - word Largeur; - word Hauteur; + word Width; + word Height; byte Filler2[118]; T_Palette Palette; } __attribute__((__packed__)) T_Header_IMG; @@ -848,7 +848,7 @@ typedef struct // -- Tester si un fichier est au format IMG -------------------------------- void Test_IMG(void) { - FILE *Fichier; // Fichier du fichier + FILE *file; // Fichier du fichier char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier T_Header_IMG IMG_Header; byte Signature[6]={0x01,0x00,0x47,0x12,0x6D,0xB0}; @@ -859,17 +859,17 @@ void Test_IMG(void) Erreur_fichier=1; // Ouverture du fichier - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { // Lecture et vérification de la signature - if (read_bytes(Fichier,&IMG_Header,sizeof(T_Header_IMG))) + if (read_bytes(file,&IMG_Header,sizeof(T_Header_IMG))) { if ( (!memcmp(IMG_Header.Filler1,Signature,6)) - && IMG_Header.Largeur && IMG_Header.Hauteur) + && IMG_Header.Width && IMG_Header.Height) Erreur_fichier=0; } // Fermeture du fichier - fclose(Fichier); + fclose(file); } } @@ -879,7 +879,7 @@ void Load_IMG(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier byte * Buffer; - FILE *Fichier; + FILE *file; word Pos_X,Pos_Y; long Largeur_lue; long Taille_du_fichier; @@ -892,34 +892,34 @@ void Load_IMG(void) Nom_fichier_complet(Nom_du_fichier,0); Erreur_fichier=0; - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { Taille_du_fichier=Informations_Fichier.st_size; - if (read_bytes(Fichier,&IMG_Header,sizeof(T_Header_IMG))) + if (read_bytes(file,&IMG_Header,sizeof(T_Header_IMG))) { #if SDL_BYTEORDER == SDL_BIG_ENDIAN - IMG_Header.Largeur = SDL_Swap16(IMG_Header.Largeur); - IMG_Header.Hauteur = SDL_Swap16(IMG_Header.Hauteur); + IMG_Header.Width = SDL_Swap16(IMG_Header.Width); + IMG_Header.Height = SDL_Swap16(IMG_Header.Height); #endif - Buffer=(byte *)malloc(IMG_Header.Largeur); + Buffer=(byte *)malloc(IMG_Header.Width); - Initialiser_preview(IMG_Header.Largeur,IMG_Header.Hauteur,Taille_du_fichier,FORMAT_IMG); + Initialiser_preview(IMG_Header.Width,IMG_Header.Height,Taille_du_fichier,FORMAT_IMG); if (Erreur_fichier==0) { memcpy(Principal_Palette,IMG_Header.Palette,sizeof(T_Palette)); Set_palette(Principal_Palette); Remapper_fileselect(); - Principal_Largeur_image=IMG_Header.Largeur; - Principal_Hauteur_image=IMG_Header.Hauteur; - Largeur_lue=IMG_Header.Largeur; + Principal_Largeur_image=IMG_Header.Width; + Principal_Hauteur_image=IMG_Header.Height; + Largeur_lue=IMG_Header.Width; for (Pos_Y=0;(Pos_YTAILLE_COMMENTAIRE) { @@ -1112,12 +1112,12 @@ void Load_PKM(void) else Couleur=0; - if (read_bytes(Fichier,Principal_Commentaire,Octet)) + if (read_bytes(file,Principal_Commentaire,Octet)) { Indice+=Octet; Principal_Commentaire[Octet]='\0'; if (Couleur) - if (fseek(Fichier,Couleur,SEEK_CUR)) + if (fseek(file,Couleur,SEEK_CUR)) Erreur_fichier=2; } else @@ -1128,13 +1128,13 @@ void Load_PKM(void) break; case 1 : // Dimensions de l'écran d'origine - if (read_byte(Fichier,&Octet)) + if (read_byte(file,&Octet)) { if (Octet==4) { Indice+=4; - if ( ! read_word_le(Fichier,(word *) &Ecran_original_X) - || !read_word_le(Fichier,(word *) &Ecran_original_Y) ) + if ( ! read_word_le(file,(word *) &Ecran_original_X) + || !read_word_le(file,(word *) &Ecran_original_Y) ) Erreur_fichier=2; } else @@ -1145,12 +1145,12 @@ void Load_PKM(void) break; case 2 : // Couleur de transparence - if (read_byte(Fichier,&Octet)) + if (read_byte(file,&Octet)) { if (Octet==1) { Indice++; - if (! read_byte(Fichier,&Back_color)) + if (! read_byte(file,&Back_color)) Erreur_fichier=2; } else @@ -1161,10 +1161,10 @@ void Load_PKM(void) break; default: - if (read_byte(Fichier,&Octet)) + if (read_byte(file,&Octet)) { Indice+=Octet; - if (fseek(Fichier,Octet,SEEK_CUR)) + if (fseek(file,Octet,SEEK_CUR)) Erreur_fichier=2; } else @@ -1174,7 +1174,7 @@ void Load_PKM(void) else Erreur_fichier=2; } - if ( (!Erreur_fichier) && (Indice!=Head.Jump) ) + if ( (!Erreur_fichier) && (Indice!=header.Jump) ) Erreur_fichier=2; } @@ -1182,30 +1182,30 @@ void Load_PKM(void) if (!Erreur_fichier) { - Initialiser_preview(Head.Largeur,Head.Hauteur,Taille_du_fichier,FORMAT_PKM); + Initialiser_preview(header.Width,header.Height,Taille_du_fichier,FORMAT_PKM); if (Erreur_fichier==0) { - Principal_Largeur_image=Head.Largeur; - Principal_Hauteur_image=Head.Hauteur; + Principal_Largeur_image=header.Width; + Principal_Hauteur_image=header.Height; Taille_image=(dword)(Principal_Largeur_image*Principal_Hauteur_image); // Palette lue en 64 - memcpy(Principal_Palette,Head.Palette,sizeof(T_Palette)); + memcpy(Principal_Palette,header.Palette,sizeof(T_Palette)); Palette_64_to_256(Principal_Palette); Set_palette(Principal_Palette); Remapper_fileselect(); Compteur_de_donnees_packees=0; Compteur_de_pixels=0; - Taille_pack=(Informations_Fichier.st_size)-sizeof(T_Header_PKM)-Head.Jump; + Taille_pack=(Informations_Fichier.st_size)-sizeof(T_Header_PKM)-header.Jump; // Boucle de décompression: while ( (Compteur_de_pixels>8); - Ecrire_octet(Fichier,Hauteur_ecran&0xFF); - Ecrire_octet(Fichier,Hauteur_ecran>>8); + Ecrire_octet(file,1); + Ecrire_octet(file,4); + Ecrire_octet(file,Largeur_ecran&0xFF); + Ecrire_octet(file,Largeur_ecran>>8); + Ecrire_octet(file,Hauteur_ecran&0xFF); + Ecrire_octet(file,Hauteur_ecran>>8); // Ecriture de la back-color - Ecrire_octet(Fichier,2); - Ecrire_octet(Fichier,1); - Ecrire_octet(Fichier,Back_color); + Ecrire_octet(file,2); + Ecrire_octet(file,1); + Ecrire_octet(file,Back_color); // Routine de compression PKM de l'image Taille_image=(dword)(Principal_Largeur_image*Principal_Hauteur_image); @@ -1387,60 +1387,60 @@ void Save_PKM(void) Valeur_pixel=Lit_pixel_de_sauvegarde(Compteur_de_pixels % Principal_Largeur_image,Compteur_de_pixels / Principal_Largeur_image); } - if ( (Derniere_couleur!=Head.Recon1) && (Derniere_couleur!=Head.Recon2) ) + if ( (Derniere_couleur!=header.Recon1) && (Derniere_couleur!=header.Recon2) ) { if (Compteur_de_repetitions==1) - Ecrire_octet(Fichier,Derniere_couleur); + Ecrire_octet(file,Derniere_couleur); else if (Compteur_de_repetitions==2) { - Ecrire_octet(Fichier,Derniere_couleur); - Ecrire_octet(Fichier,Derniere_couleur); + Ecrire_octet(file,Derniere_couleur); + Ecrire_octet(file,Derniere_couleur); } else if ( (Compteur_de_repetitions>2) && (Compteur_de_repetitions<256) ) { // RECON1/couleur/nombre - Ecrire_octet(Fichier,Head.Recon1); - Ecrire_octet(Fichier,Derniere_couleur); - Ecrire_octet(Fichier,Compteur_de_repetitions&0xFF); + Ecrire_octet(file,header.Recon1); + Ecrire_octet(file,Derniere_couleur); + Ecrire_octet(file,Compteur_de_repetitions&0xFF); } else if (Compteur_de_repetitions>=256) { // RECON2/couleur/hi(nombre)/lo(nombre) - Ecrire_octet(Fichier,Head.Recon2); - Ecrire_octet(Fichier,Derniere_couleur); - Ecrire_octet(Fichier,Compteur_de_repetitions>>8); - Ecrire_octet(Fichier,Compteur_de_repetitions&0xFF); + Ecrire_octet(file,header.Recon2); + Ecrire_octet(file,Derniere_couleur); + Ecrire_octet(file,Compteur_de_repetitions>>8); + Ecrire_octet(file,Compteur_de_repetitions&0xFF); } } else { if (Compteur_de_repetitions<256) { - Ecrire_octet(Fichier,Head.Recon1); - Ecrire_octet(Fichier,Derniere_couleur); - Ecrire_octet(Fichier,Compteur_de_repetitions&0xFF); + Ecrire_octet(file,header.Recon1); + Ecrire_octet(file,Derniere_couleur); + Ecrire_octet(file,Compteur_de_repetitions&0xFF); } else { - Ecrire_octet(Fichier,Head.Recon2); - Ecrire_octet(Fichier,Derniere_couleur); - Ecrire_octet(Fichier,Compteur_de_repetitions>>8); - Ecrire_octet(Fichier,Compteur_de_repetitions&0xFF); + Ecrire_octet(file,header.Recon2); + Ecrire_octet(file,Derniere_couleur); + Ecrire_octet(file,Compteur_de_repetitions>>8); + Ecrire_octet(file,Compteur_de_repetitions&0xFF); } } } - Close_ecriture(Fichier); + Close_ecriture(file); } else Erreur_fichier=1; - fclose(Fichier); + fclose(file); } else { Erreur_fichier=1; - fclose(Fichier); + fclose(file); } // S'il y a eu une erreur de sauvegarde, on ne va tout de même pas laisser // ce fichier pourri traîner... Ca fait pas propre. @@ -1479,7 +1479,7 @@ FILE *LBM_Fichier; void Test_LBM(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; - char Format[4]; + char format[4]; char Section[4]; dword Dummy; @@ -1502,10 +1502,10 @@ void Test_LBM(void) // fichiers tronqués (et déjà que c'est chiant de perdre // une partie du fichier il faut quand même pouvoir en // garder un peu... Sinon, moi je pleure :'( !!! ) - if (! read_bytes(LBM_Fichier,Format,4)) + if (! read_bytes(LBM_Fichier,format,4)) Erreur_fichier=1; else - if ( (memcmp(Format,"ILBM",4)) && (memcmp(Format,"PBM ",4)) ) + if ( (memcmp(format,"ILBM",4)) && (memcmp(format,"PBM ",4)) ) Erreur_fichier=1; } fclose(LBM_Fichier); @@ -1749,8 +1749,8 @@ byte Couleur_ILBM_line(word Pos_X, word Vraie_taille_ligne, byte HBPm1) void Load_LBM(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; - T_Header_LBM Header; - char Format[4]; + T_Header_LBM header; + char format[4]; char Section[4]; byte Octet; short B256; @@ -1778,42 +1778,42 @@ void Load_LBM(void) // On avance dans le fichier (pas besoin de tester ce qui l'a déjà été) read_bytes(LBM_Fichier,Section,4); read_dword_be(LBM_Fichier,&Dummy); - read_bytes(LBM_Fichier,Format,4); + read_bytes(LBM_Fichier,format,4); if (!Wait_for((byte *)"BMHD")) Erreur_fichier=1; read_dword_be(LBM_Fichier,&Dummy); // Maintenant on lit le header pour pouvoir commencer le chargement de l'image - if ( (read_word_be(LBM_Fichier,&Header.Width)) - && (read_word_be(LBM_Fichier,&Header.Height)) - && (read_word_be(LBM_Fichier,&Header.Xorg)) - && (read_word_be(LBM_Fichier,&Header.Yorg)) - && (read_byte(LBM_Fichier,&Header.BitPlanes)) - && (read_byte(LBM_Fichier,&Header.Mask)) - && (read_byte(LBM_Fichier,&Header.Compression)) - && (read_byte(LBM_Fichier,&Header.Pad1)) - && (read_word_be(LBM_Fichier,&Header.Transp_col)) - && (read_byte(LBM_Fichier,&Header.Xaspect)) - && (read_byte(LBM_Fichier,&Header.Yaspect)) - && (read_word_be(LBM_Fichier,&Header.Xscreen)) - && (read_word_be(LBM_Fichier,&Header.Yscreen)) - && Header.Width && Header.Height) + if ( (read_word_be(LBM_Fichier,&header.Width)) + && (read_word_be(LBM_Fichier,&header.Height)) + && (read_word_be(LBM_Fichier,&header.Xorg)) + && (read_word_be(LBM_Fichier,&header.Yorg)) + && (read_byte(LBM_Fichier,&header.BitPlanes)) + && (read_byte(LBM_Fichier,&header.Mask)) + && (read_byte(LBM_Fichier,&header.Compression)) + && (read_byte(LBM_Fichier,&header.Pad1)) + && (read_word_be(LBM_Fichier,&header.Transp_col)) + && (read_byte(LBM_Fichier,&header.Xaspect)) + && (read_byte(LBM_Fichier,&header.Yaspect)) + && (read_word_be(LBM_Fichier,&header.Xscreen)) + && (read_word_be(LBM_Fichier,&header.Yscreen)) + && header.Width && header.Height) { - if ( (Header.BitPlanes) && (Wait_for((byte *)"CMAP")) ) + if ( (header.BitPlanes) && (Wait_for((byte *)"CMAP")) ) { read_dword_be(LBM_Fichier,&Nb_couleurs); Nb_couleurs/=3; - if (((dword)1< il faut copier les 32 coul. } // sur les 32 suivantes et assombrir ces dernières. else { - if ((Header.BitPlanes==6) || (Header.BitPlanes==8)) - Image_HAM=Header.BitPlanes; + if ((header.BitPlanes==6) || (header.BitPlanes==8)) + Image_HAM=header.BitPlanes; else /* Erreur_fichier=1;*/ /* C'est censé être incorrect mais j'ai */ Image_HAM=0; /* trouvé un fichier comme ça, alors... */ @@ -1824,12 +1824,12 @@ void Load_LBM(void) if ( (!Erreur_fichier) && (Nb_couleurs>=2) && (Nb_couleurs<=256) ) { - HBPm1=Header.BitPlanes-1; - if (Header.Mask==1) - Header.BitPlanes++; + HBPm1=header.BitPlanes-1; + if (header.Mask==1) + header.BitPlanes++; // Deluxe paint le fait... alors on le fait... - Back_color=Header.Transp_col; + Back_color=header.Transp_col; // On commence par passer la palette en 256 comme ça, si la nouvelle // palette a moins de 256 coul, la précédente ne souffrira pas d'un @@ -1856,34 +1856,34 @@ void Load_LBM(void) if ( (Wait_for((byte *)"BODY")) && (!Erreur_fichier) ) { read_dword_be(LBM_Fichier,&Taille_image); - //swab((char *)&Header.Width ,(char *)&Principal_Largeur_image,2); - //swab((char *)&Header.Height,(char *)&Principal_Hauteur_image,2); - Principal_Largeur_image = Header.Width; - Principal_Hauteur_image = Header.Height; + //swab((char *)&header.Width ,(char *)&Principal_Largeur_image,2); + //swab((char *)&header.Height,(char *)&Principal_Hauteur_image,2); + Principal_Largeur_image = header.Width; + Principal_Hauteur_image = header.Height; - //swab((char *)&Header.Xscreen,(char *)&Ecran_original_X,2); - //swab((char *)&Header.Yscreen,(char *)&Ecran_original_Y,2); - Ecran_original_X = Header.Xscreen; - Ecran_original_Y = Header.Yscreen; + //swab((char *)&header.Xscreen,(char *)&Ecran_original_X,2); + //swab((char *)&header.Yscreen,(char *)&Ecran_original_Y,2); + Ecran_original_X = header.Xscreen; + Ecran_original_Y = header.Yscreen; Initialiser_preview(Principal_Largeur_image,Principal_Hauteur_image,Taille_du_fichier,FORMAT_LBM); if (Erreur_fichier==0) { - if (!memcmp(Format,"ILBM",4)) // "ILBM": InterLeaved BitMap + if (!memcmp(format,"ILBM",4)) // "ILBM": InterLeaved BitMap { // Calcul de la taille d'une ligne ILBM (pour les images ayant des dimensions exotiques) if (Principal_Largeur_image & 15) { Vraie_taille_ligne=( (Principal_Largeur_image+16) >> 4 ) << 4; - Taille_ligne=( (Principal_Largeur_image+16) >> 4 )*(Header.BitPlanes<<1); + Taille_ligne=( (Principal_Largeur_image+16) >> 4 )*(header.BitPlanes<<1); } else { Vraie_taille_ligne=Principal_Largeur_image; - Taille_ligne=(Principal_Largeur_image>>3)*Header.BitPlanes; + Taille_ligne=(Principal_Largeur_image>>3)*header.BitPlanes; } - if (!Header.Compression) + if (!header.Compression) { // non compressé LBM_Buffer=(byte *)malloc(Taille_ligne); for (Pos_Y=0; ((Pos_Y>3; + Taille_ligne=(Taille_ligne*header.Nb_bits)>>3; Buffer=(byte *)malloc(Taille_ligne); for (Pos_Y=Principal_Hauteur_image-1; ((Pos_Y>=0) && (!Erreur_fichier)); Pos_Y--) { - if (read_bytes(Fichier,Buffer,Taille_ligne)) + if (read_bytes(file,Buffer,Taille_ligne)) for (Pos_X=0; Pos_X>4); } else @@ -2505,19 +2505,19 @@ void Load_BMP(void) if ( ((b&3)==1) || ((b&3)==2) ) { byte Dummy; - Lire_octet(Fichier, &Dummy); + Lire_octet(file, &Dummy); } } - Lire_octet(Fichier, &a); - Lire_octet(Fichier, &b); + Lire_octet(file, &a); + Lire_octet(file, &b); } /*Close_lecture();*/ } - fclose(Fichier); + fclose(file); } else { - fclose(Fichier); + fclose(file); Erreur_fichier=1; } } @@ -2527,9 +2527,9 @@ void Load_BMP(void) // Image 24 bits!!! Erreur_fichier=0; - Principal_Largeur_image=Header.Largeur; - Principal_Hauteur_image=Header.Hauteur; - Initialiser_preview(Header.Largeur,Header.Hauteur,Taille_du_fichier,FORMAT_BMP | FORMAT_24B); + Principal_Largeur_image=header.Width; + Principal_Hauteur_image=header.Height; + Initialiser_preview(header.Width,header.Height,Taille_du_fichier,FORMAT_BMP | FORMAT_24B); if (Erreur_fichier==0) { @@ -2541,20 +2541,20 @@ void Load_BMP(void) Buffer=(byte *)malloc(Taille_ligne); for (Pos_Y=Principal_Hauteur_image-1; ((Pos_Y>=0) && (!Erreur_fichier)); Pos_Y--) { - if (read_bytes(Fichier,Buffer,Taille_ligne)) + if (read_bytes(file,Buffer,Taille_ligne)) for (Pos_X=0,Indice=0; Pos_X> 3)+1) << 3; @@ -2588,38 +2588,38 @@ void Save_BMP(void) Taille_ligne=Principal_Largeur_image; #if SDL_BYTEORDER == SDL_BIG_ENDIAN - Header.Signature = 0x424D; + header.Signature = 0x424D; #else - Header.Signature = 0x4D42; + header.Signature = 0x4D42; #endif - Header.Taille_1 =(Taille_ligne*Principal_Hauteur_image)+1078; - Header.Reserv_1 =0; - Header.Reserv_2 =0; - Header.Decalage =1078; - Header.Taille_2 =40; - Header.Largeur =Principal_Largeur_image; - Header.Hauteur =Principal_Hauteur_image; - Header.Plans =1; - Header.Nb_bits =8; - Header.Compression=0; - Header.Taille_3 =0; - Header.XPM =0; - Header.YPM =0; - Header.Nb_Clr =0; - Header.Clr_Imprt =0; + header.Taille_1 =(Taille_ligne*Principal_Hauteur_image)+1078; + header.Reserv_1 =0; + header.Reserv_2 =0; + header.Decalage =1078; + header.Taille_2 =40; + header.Width =Principal_Largeur_image; + header.Height =Principal_Hauteur_image; + header.Plans =1; + header.Nb_bits =8; + header.Compression=0; + header.Taille_3 =0; + header.XPM =0; + header.YPM =0; + header.Nb_Clr =0; + header.Clr_Imprt =0; #if SDL_BYTEORDER == SDL_BIG_ENDIAN - Header.Taille_1 = SDL_Swap32( Header.Taille_1 ); - Header.Decalage = SDL_Swap32( Header.Decalage ); - Header.Taille_2 = SDL_Swap32( Header.Taille_2 ); - Header.Largeur = SDL_Swap32( Header.Largeur ); - Header.Hauteur = SDL_Swap32( Header.Hauteur ); - Header.Plans = SDL_Swap16( Header.Plans ); - Header.Nb_bits = SDL_Swap16( Header.Nb_bits ); + header.Taille_1 = SDL_Swap32( header.Taille_1 ); + header.Decalage = SDL_Swap32( header.Decalage ); + header.Taille_2 = SDL_Swap32( header.Taille_2 ); + header.Width = SDL_Swap32( header.Width ); + header.Height = SDL_Swap32( header.Height ); + header.Plans = SDL_Swap16( header.Plans ); + header.Nb_bits = SDL_Swap16( header.Nb_bits ); // If you ever set any more fields to non-zero, please swap here! #endif - if (write_bytes(Fichier,&Header,sizeof(T_BMP_Header))) + if (write_bytes(file,&header,sizeof(T_BMP_Header))) { // Chez Bill, ils ont dit: "On va mettre les couleur dans l'ordre // inverse, et pour faire chier, on va les mettre sur une échelle de @@ -2636,7 +2636,7 @@ void Save_BMP(void) Palette_locale[Indice][3]=0; } - if (write_bytes(Fichier,Palette_locale,1024)) + if (write_bytes(file,Palette_locale,1024)) { Init_ecriture(); @@ -2645,17 +2645,17 @@ void Save_BMP(void) // parce que faut pas pousser." for (Pos_Y=Principal_Hauteur_image-1; ((Pos_Y>=0) && (!Erreur_fichier)); Pos_Y--) for (Pos_X=0; Pos_X>((Reduction_moins_1-(Pos_X%Reduction))*depth)) & Masque; + Couleur=(LBM_Buffer[Pos_X/Reduction]>>((Reduction_moins_1-(Pos_X%Reduction))*depth)) & byte_mask; Pixel_de_chargement(Pos_X,Pos_Y,Couleur); } } @@ -3615,10 +3614,10 @@ void Test_PCX(void) void Load_PCX(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; - FILE *Fichier; + FILE *file; short Taille_ligne; - short Vraie_taille_ligne; // Largeur de l'image corrigée + short Vraie_taille_ligne; // width de l'image corrigée short Largeur_lue; short Pos_X; short Pos_Y; @@ -3638,32 +3637,32 @@ void Load_PCX(void) Erreur_fichier=0; - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { stat(Nom_du_fichier,&Informations_Fichier); Taille_du_fichier=Informations_Fichier.st_size; /* - if (read_bytes(Fichier,&PCX_Header,sizeof(T_PCX_Header))) + if (read_bytes(file,&PCX_Header,sizeof(T_PCX_Header))) {*/ - if (read_byte(Fichier,&(PCX_Header.Manufacturer)) && - read_byte(Fichier,&(PCX_Header.Version)) && - read_byte(Fichier,&(PCX_Header.Compression)) && - read_byte(Fichier,&(PCX_Header.Depth)) && - read_word_le(Fichier,&(PCX_Header.X_min)) && - read_word_le(Fichier,&(PCX_Header.Y_min)) && - read_word_le(Fichier,&(PCX_Header.X_max)) && - read_word_le(Fichier,&(PCX_Header.Y_max)) && - read_word_le(Fichier,&(PCX_Header.X_dpi)) && - read_word_le(Fichier,&(PCX_Header.Y_dpi)) && - read_bytes(Fichier,&(PCX_Header.Palette_16c),48) && - read_byte(Fichier,&(PCX_Header.Reserved)) && - read_byte(Fichier,&(PCX_Header.Plane)) && - read_word_le(Fichier,&(PCX_Header.Bytes_per_plane_line)) && - read_word_le(Fichier,&(PCX_Header.Palette_info)) && - read_word_le(Fichier,&(PCX_Header.Screen_X)) && - read_word_le(Fichier,&(PCX_Header.Screen_Y)) && - read_bytes(Fichier,&(PCX_Header.Filler),54) ) + if (read_byte(file,&(PCX_Header.Manufacturer)) && + read_byte(file,&(PCX_Header.Version)) && + read_byte(file,&(PCX_Header.Compression)) && + read_byte(file,&(PCX_Header.Depth)) && + read_word_le(file,&(PCX_Header.X_min)) && + read_word_le(file,&(PCX_Header.Y_min)) && + read_word_le(file,&(PCX_Header.X_max)) && + read_word_le(file,&(PCX_Header.Y_max)) && + read_word_le(file,&(PCX_Header.X_dpi)) && + read_word_le(file,&(PCX_Header.Y_dpi)) && + read_bytes(file,&(PCX_Header.Palette_16c),48) && + read_byte(file,&(PCX_Header.Reserved)) && + read_byte(file,&(PCX_Header.Plane)) && + read_word_le(file,&(PCX_Header.Bytes_per_plane_line)) && + read_word_le(file,&(PCX_Header.Palette_info)) && + read_word_le(file,&(PCX_Header.Screen_X)) && + read_word_le(file,&(PCX_Header.Screen_Y)) && + read_bytes(file,&(PCX_Header.Filler),54) ) { Principal_Largeur_image=PCX_Header.X_max-PCX_Header.X_min+1; @@ -3712,17 +3711,17 @@ void Load_PCX(void) // a une palette. if ( (PCX_Header.Depth==8) && (PCX_Header.Version>=5) && (Taille_du_fichier>(256*3)) ) { - fseek(Fichier,Taille_du_fichier-((256*3)+1),SEEK_SET); + fseek(file,Taille_du_fichier-((256*3)+1),SEEK_SET); // On regarde s'il y a une palette après les données de l'image - if (read_byte(Fichier,&Octet1)) + if (read_byte(file,&Octet1)) if (Octet1==12) // Lire la palette si c'est une image en 256 couleurs { int index; // On lit la palette 256c que ces crétins ont foutue à la fin du fichier for(index=0;index<256;index++) - if ( ! read_byte(Fichier,&Principal_Palette[index].R) - || ! read_byte(Fichier,&Principal_Palette[index].V) - || ! read_byte(Fichier,&Principal_Palette[index].B) ) + if ( ! read_byte(file,&Principal_Palette[index].R) + || ! read_byte(file,&Principal_Palette[index].V) + || ! read_byte(file,&Principal_Palette[index].B) ) { Erreur_fichier=2; DEBUG("ERROR READING PCX PALETTE !",index); @@ -3735,7 +3734,7 @@ void Load_PCX(void) // Maintenant qu'on a lu la palette que ces crétins sont allés foutre // à la fin, on retourne juste après le header pour lire l'image. - fseek(Fichier,128,SEEK_SET); + fseek(file,128,SEEK_SET); if (!Erreur_fichier) { Taille_ligne=PCX_Header.Bytes_per_plane_line*PCX_Header.Plane; @@ -3758,13 +3757,13 @@ void Load_PCX(void) for (Position=0; ((Position1) || (Last_pixel>=0xC0) ) - Ecrire_octet(Fichier,counter|0xC0); - Ecrire_octet(Fichier,Last_pixel); + Ecrire_octet(file,counter|0xC0); + Ecrire_octet(file,Last_pixel); } } // Ecriture de l'octet (12) indiquant que la palette arrive if (!Erreur_fichier) - Ecrire_octet(Fichier,12); + Ecrire_octet(file,12); - Close_ecriture(Fichier); + Close_ecriture(file); // Ecriture de la palette if (!Erreur_fichier) { - if (! write_bytes(Fichier,Principal_Palette,sizeof(T_Palette))) + if (! write_bytes(file,Principal_Palette,sizeof(T_Palette))) Erreur_fichier=1; } } else Erreur_fichier=1; - fclose(Fichier); + fclose(file); if (Erreur_fichier) remove(Nom_du_fichier); @@ -4061,8 +4060,8 @@ void Save_PCX(void) ///////////////////////////////////////////////////////////////////////////// typedef struct { - word Width; // Largeur de l'image - word Height; // Hauteur de l'image + word Width; // width de l'image + word Height; // height de l'image } __attribute__((__packed__)) T_CEL_Header1; typedef struct @@ -4071,8 +4070,8 @@ typedef struct byte Kind; // Type de fichier ($10=PALette $20=BitMaP) byte Nbbits; // Nombre de bits word Filler1; // ??? - word Largeur; // Largeur de l'image - word Hauteur; // Hauteur de l'image + word Width; // width de l'image + word Height; // height de l'image word Decalage_X; // Decalage en X de l'image word Decalage_Y; // Decalage en Y de l'image byte Filler2[16]; // ??? @@ -4084,7 +4083,7 @@ void Test_CEL(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; int Taille; - FILE *Fichier; + FILE *file; T_CEL_Header1 Header1; T_CEL_Header2 Header2; struct stat Informations_Fichier; @@ -4096,13 +4095,13 @@ void Test_CEL(void) return; } Nom_fichier_complet(Nom_du_fichier,0); - if (! (Fichier=fopen(Nom_du_fichier, "rb"))) + if (! (file=fopen(Nom_du_fichier, "rb"))) { Erreur_fichier = 1; return; } - if (read_word_le(Fichier,&Header1.Width) && - read_word_le(Fichier,&Header1.Height) ) + if (read_word_le(file,&Header1.Width) && + read_word_le(file,&Header1.Height) ) { // Vu que ce header n'a pas de signature, il va falloir tester la // cohérence de la dimension de l'image avec celle du fichier. @@ -4112,18 +4111,18 @@ void Test_CEL(void) { // Tentative de reconnaissance de la signature des nouveaux fichiers - fseek(Fichier,0,SEEK_SET); - if (read_bytes(Fichier,&Header2.Signa,4) && + fseek(file,0,SEEK_SET); + if (read_bytes(file,&Header2.Signa,4) && !memcmp(Header2.Signa,"KiSS",4) && - read_byte(Fichier,&Header2.Kind) && + read_byte(file,&Header2.Kind) && (Header2.Kind==0x20) && - read_byte(Fichier,&Header2.Nbbits) && - read_word_le(Fichier,&Header2.Filler1) && - read_word_le(Fichier,&Header2.Largeur) && - read_word_le(Fichier,&Header2.Hauteur) && - read_word_le(Fichier,&Header2.Decalage_X) && - read_word_le(Fichier,&Header2.Decalage_Y) && - read_bytes(Fichier,&Header2.Filler2,16)) + read_byte(file,&Header2.Nbbits) && + read_word_le(file,&Header2.Filler1) && + read_word_le(file,&Header2.Width) && + read_word_le(file,&Header2.Height) && + read_word_le(file,&Header2.Decalage_X) && + read_word_le(file,&Header2.Decalage_Y) && + read_bytes(file,&Header2.Filler2,16)) { // ok } @@ -4137,7 +4136,7 @@ void Test_CEL(void) { Erreur_fichier=1; } - fclose(Fichier); + fclose(file); } @@ -4146,7 +4145,7 @@ void Test_CEL(void) void Load_CEL(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; - FILE *Fichier; + FILE *file; T_CEL_Header1 Header1; T_CEL_Header2 Header2; short Pos_X; @@ -4159,9 +4158,9 @@ void Load_CEL(void) Erreur_fichier=0; stat(Nom_du_fichier,&Informations_Fichier); Nom_fichier_complet(Nom_du_fichier,0); - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { - if (read_bytes(Fichier,&Header1,sizeof(T_CEL_Header1))) + if (read_bytes(file,&Header1,sizeof(T_CEL_Header1))) { Taille_du_fichier=Informations_Fichier.st_size; if ( (Taille_du_fichier>(long int)sizeof(T_CEL_Header1)) @@ -4181,7 +4180,7 @@ void Load_CEL(void) for (Pos_X=0;((Pos_X> 4)); } else @@ -4193,13 +4192,13 @@ void Load_CEL(void) { // On réessaye avec le nouveau format - fseek(Fichier,0,SEEK_SET); - if (read_bytes(Fichier,&Header2,sizeof(T_CEL_Header2))) + fseek(file,0,SEEK_SET); + if (read_bytes(file,&Header2,sizeof(T_CEL_Header2))) { // Chargement d'un fichier CEL avec signature (nouveaux fichiers) - Principal_Largeur_image=Header2.Largeur+Header2.Decalage_X; - Principal_Hauteur_image=Header2.Hauteur+Header2.Decalage_Y; + Principal_Largeur_image=Header2.Width+Header2.Decalage_X; + Principal_Hauteur_image=Header2.Height+Header2.Decalage_Y; Ecran_original_X=Principal_Largeur_image; Ecran_original_Y=Principal_Hauteur_image; Initialiser_preview(Principal_Largeur_image,Principal_Hauteur_image,Taille_du_fichier,FORMAT_CEL); @@ -4221,11 +4220,11 @@ void Load_CEL(void) switch(Header2.Nbbits) { case 4: - for (Pos_Y=0;((Pos_Y> 4)); } else @@ -4233,11 +4232,11 @@ void Load_CEL(void) break; case 8: - for (Pos_Y=0;((Pos_Y16 sont utilisées dans l'image for (Pos_X=16;((Pos_X<256) && (!Utilisation[Pos_X]));Pos_X++); @@ -4293,7 +4292,7 @@ void Save_CEL(void) Header1.Width =Principal_Largeur_image; Header1.Height=Principal_Hauteur_image; - if (write_bytes(Fichier,&Header1,sizeof(T_CEL_Header1))) + if (write_bytes(file,&Header1,sizeof(T_CEL_Header1))) { // Sauvegarde de l'image Init_ecriture(); @@ -4305,17 +4304,17 @@ void Save_CEL(void) else { Dernier_octet=Dernier_octet | (Lit_pixel_de_sauvegarde(Pos_X,Pos_Y) & 15); - Ecrire_octet(Fichier,Dernier_octet); + Ecrire_octet(file,Dernier_octet); } if ((Pos_X & 1)==1) - Ecrire_octet(Fichier,Dernier_octet); + Ecrire_octet(file,Dernier_octet); } - Close_ecriture(Fichier); + Close_ecriture(file); } else Erreur_fichier=1; - fclose(Fichier); + fclose(file); } else { @@ -4345,23 +4344,23 @@ void Save_CEL(void) Header2.Kind=0x20; // Initialisation du type (BitMaP) Header2.Nbbits=8; // Initialisation du nombre de bits Header2.Filler1=0; // Initialisation du filler 1 (???) - Header2.Largeur=Principal_Largeur_image-Header2.Decalage_X; // Initialisation de la largeur - Header2.Hauteur=Principal_Hauteur_image-Header2.Decalage_Y; // Initialisation de la hauteur + Header2.Width=Principal_Largeur_image-Header2.Decalage_X; // Initialisation de la largeur + Header2.Height=Principal_Hauteur_image-Header2.Decalage_Y; // Initialisation de la hauteur for (Pos_X=0;Pos_X<16;Pos_X++) // Initialisation du filler 2 (???) Header2.Filler2[Pos_X]=0; - if (write_bytes(Fichier,&Header2,sizeof(T_CEL_Header2))) + if (write_bytes(file,&Header2,sizeof(T_CEL_Header2))) { // Sauvegarde de l'image Init_ecriture(); - for (Pos_Y=0;((Pos_Y> 4) << 4; Principal_Palette[Indice].B=(Octet[0] & 15) << 4; Principal_Palette[Indice].V=(Octet[1] & 15) << 4; break; case 24: // RRRR RRRR | VVVV VVVV | BBBB BBBB - read_bytes(Fichier,Octet,3); + read_bytes(file,Octet,3); Principal_Palette[Indice].R=Octet[0]; Principal_Palette[Indice].V=Octet[1]; Principal_Palette[Indice].B=Octet[2]; @@ -4540,7 +4539,7 @@ void Load_KCF(void) else Erreur_fichier=1; } - fclose(Fichier); + fclose(file); } else Erreur_fichier=1; @@ -4554,7 +4553,7 @@ void Load_KCF(void) void Save_KCF(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; - FILE *Fichier; + FILE *file; T_KCF_Header Buffer; T_CEL_Header2 Header2; byte Octet[3]; @@ -4568,7 +4567,7 @@ void Save_KCF(void) Erreur_fichier=0; Nom_fichier_complet(Nom_du_fichier,0); - if ((Fichier=fopen(Nom_du_fichier,"wb"))) + if ((file=fopen(Nom_du_fichier,"wb"))) { // Sauvegarde de la palette @@ -4587,7 +4586,7 @@ void Save_KCF(void) Buffer.Palette[Indice_palette].Couleur[Indice_couleur].Octet2=Principal_Palette[Indice].V>>4; } - if (! write_bytes(Fichier,&Buffer,sizeof(T_KCF_Header))) + if (! write_bytes(file,&Buffer,sizeof(T_KCF_Header))) Erreur_fichier=1; } else @@ -4598,14 +4597,14 @@ void Save_KCF(void) Header2.Kind=0x10; // Initialisation du type (PALette) Header2.Nbbits=24; // Initialisation du nombre de bits Header2.Filler1=0; // Initialisation du filler 1 (???) - Header2.Largeur=256; // Initialisation du nombre de couleurs - Header2.Hauteur=1; // Initialisation du nombre de palettes + Header2.Width=256; // Initialisation du nombre de couleurs + Header2.Height=1; // Initialisation du nombre de palettes Header2.Decalage_X=0; // Initialisation du décalage X Header2.Decalage_Y=0; // Initialisation du décalage Y for (Indice=0;Indice<16;Indice++) // Initialisation du filler 2 (???) Header2.Filler2[Indice]=0; - if (! write_bytes(Fichier,&Header2,sizeof(T_CEL_Header2))) + if (! write_bytes(file,&Header2,sizeof(T_CEL_Header2))) Erreur_fichier=1; for (Indice=0;(Indice<256) && (!Erreur_fichier);Indice++) @@ -4613,12 +4612,12 @@ void Save_KCF(void) Octet[0]=Principal_Palette[Indice].R; Octet[1]=Principal_Palette[Indice].V; Octet[2]=Principal_Palette[Indice].B; - if (! write_bytes(Fichier,Octet,3)) + if (! write_bytes(file,Octet,3)) Erreur_fichier=1; } } - fclose(Fichier); + fclose(file); if (Erreur_fichier) remove(Nom_du_fichier); @@ -4639,8 +4638,8 @@ void Save_KCF(void) typedef struct { byte Filler1[4]; - word Largeur; - word Hauteur; + word Width; + word Height; byte Filler2; byte Plans; } __attribute__((__packed__)) T_SCx_Header; @@ -4648,7 +4647,7 @@ typedef struct // -- Tester si un fichier est au format SCx -------------------------------- void Test_SCx(void) { - FILE *Fichier; // Fichier du fichier + FILE *file; // Fichier du fichier char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier //byte Signature[3]; T_SCx_Header SCx_Header; @@ -4659,17 +4658,17 @@ void Test_SCx(void) Erreur_fichier=1; // Ouverture du fichier - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { // Lecture et vérification de la signature - if ((read_bytes(Fichier,&SCx_Header,sizeof(T_SCx_Header)))) + if ((read_bytes(file,&SCx_Header,sizeof(T_SCx_Header)))) { if ( (!memcmp(SCx_Header.Filler1,"RIX",3)) - && SCx_Header.Largeur && SCx_Header.Hauteur) + && SCx_Header.Width && SCx_Header.Height) Erreur_fichier=0; } // Fermeture du fichier - fclose(Fichier); + fclose(file); } } @@ -4678,7 +4677,7 @@ void Test_SCx(void) void Load_SCx(void) { char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier - FILE *Fichier; + FILE *file; word Pos_X,Pos_Y; long Taille,Vraie_taille; long Taille_du_fichier; @@ -4689,13 +4688,13 @@ void Load_SCx(void) Erreur_fichier=0; - if ((Fichier=fopen(Nom_du_fichier, "rb"))) + if ((file=fopen(Nom_du_fichier, "rb"))) { - Taille_du_fichier=FileLength(Fichier); + Taille_du_fichier=FileLength(file); - if ((read_bytes(Fichier,&SCx_Header,sizeof(T_SCx_Header)))) + if ((read_bytes(file,&SCx_Header,sizeof(T_SCx_Header)))) { - Initialiser_preview(SCx_Header.Largeur,SCx_Header.Hauteur,Taille_du_fichier,FORMAT_SCx); + Initialiser_preview(SCx_Header.Width,SCx_Header.Height,Taille_du_fichier,FORMAT_SCx); if (Erreur_fichier==0) { if (!SCx_Header.Plans) @@ -4703,7 +4702,7 @@ void Load_SCx(void) else Taille=sizeof(Composantes)*(1< 256) + int scale; + scale = atoi(argv[Indice]); + if (scale < 2 || scale > 256) { Erreur(ERREUR_LIGNE_COMMANDE); Afficher_syntaxe(); exit(0); } - Set_Palette_RGB_Scale(Grad); + Set_Palette_RGB_Scale(scale); } else { @@ -559,8 +559,8 @@ int Initialisation_du_programme(int argc,char * argv[]) Resolution_actuelle=-1; // On n'était pas dans un mode graphique Initialiser_mode_video( - Mode_video[Mode_dans_lequel_on_demarre].Largeur, - Mode_video[Mode_dans_lequel_on_demarre].Hauteur, + Mode_video[Mode_dans_lequel_on_demarre].Width, + Mode_video[Mode_dans_lequel_on_demarre].Height, Mode_video[Mode_dans_lequel_on_demarre].Fullscreen); Principal_Largeur_image=Largeur_ecran/Pixel_width; diff --git a/moteur.c b/moteur.c index 25c5284e..61f0a0f9 100644 --- a/moteur.c +++ b/moteur.c @@ -145,20 +145,20 @@ char * TITRE_BOUTON[NB_BOUTONS]= "Hide tool bar " }; // Sauvegarde un bloc (généralement l'arrière-plan d'une fenêtre) -void Sauve_fond(byte **Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur) +void Sauve_fond(byte **Buffer, int Pos_X, int Pos_Y, int width, int height) { int Indice; if(*Buffer != NULL) DEBUG("WARNING : Buffer already allocated !!!",0); - *Buffer=(byte *) malloc(Largeur*Menu_Facteur_X*Hauteur*Menu_Facteur_Y*Pixel_width); - for (Indice=0; Indice<(Hauteur*Menu_Facteur_Y); Indice++) - Lire_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,(*Buffer)+((int)Indice*Largeur*Menu_Facteur_X*Pixel_width)); + *Buffer=(byte *) malloc(width*Menu_Facteur_X*height*Menu_Facteur_Y*Pixel_width); + for (Indice=0; Indice<(height*Menu_Facteur_Y); Indice++) + Lire_ligne(Pos_X,Pos_Y+Indice,width*Menu_Facteur_X,(*Buffer)+((int)Indice*width*Menu_Facteur_X*Pixel_width)); } // Restaure de ce que la fenêtre cachait -void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur) +void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int width, int height) { int Indice; - for (Indice=0; Indice=Bouton[Numero].Decalage_X) && (Pos_Y>=Bouton[Numero].Decalage_Y) && - (Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && - (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur)) + (Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Width) && + (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Height)) return Numero; break; case FORME_BOUTON_TRIANGLE_HAUT_GAUCHE: if ((Pos_X>=Bouton[Numero].Decalage_X) && (Pos_Y>=Bouton[Numero].Decalage_Y) && - (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X<=Bouton[Numero].Largeur)) + (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X<=Bouton[Numero].Width)) return Numero; break; case FORME_BOUTON_TRIANGLE_BAS_DROITE: - if ((Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && - (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur) && - (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X>=Bouton[Numero].Largeur)) + if ((Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Width) && + (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Height) && + (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X>=Bouton[Numero].Width)) return Numero; break; } @@ -227,8 +227,8 @@ void Tracer_cadre_de_bouton_du_menu(byte Numero,byte pressed) Debut_X=Bouton[Numero].Decalage_X; Debut_Y=Bouton[Numero].Decalage_Y; - Fin_X =Debut_X+Bouton[Numero].Largeur; - Fin_Y =Debut_Y+Bouton[Numero].Hauteur; + Fin_X =Debut_X+Bouton[Numero].Width; + Fin_Y =Debut_Y+Bouton[Numero].Height; if (!pressed) { @@ -243,7 +243,7 @@ void Tracer_cadre_de_bouton_du_menu(byte Numero,byte pressed) Couleur_Diagonale=CM_Fonce; } - switch(Bouton[Numero].Forme) + switch(Bouton[Numero].Shape) { case FORME_BOUTON_SANS_CADRE : break; @@ -284,7 +284,7 @@ void Tracer_cadre_de_bouton_du_menu(byte Numero,byte pressed) Pixel_dans_menu(Debut_X,Fin_Y,Couleur_Diagonale); BLOCK_MENU[Fin_Y][Debut_X]=Couleur_Diagonale; // On colorie le coin haut gauche - for (Pos_X=0;Pos_X>1; + Fenetre_Pos_X=(Largeur_ecran-(width*Menu_Facteur_X))>>1; - Fenetre_Pos_Y=(Hauteur_ecran-(Hauteur*Menu_Facteur_Y))>>1; + Fenetre_Pos_Y=(Hauteur_ecran-(height*Menu_Facteur_Y))>>1; // Sauvegarde de ce que la fenêtre remplace - Sauve_fond(&(Fond_fenetre[Fenetre-1]), Fenetre_Pos_X, Fenetre_Pos_Y, Largeur, Hauteur); + Sauve_fond(&(Fond_fenetre[Fenetre-1]), Fenetre_Pos_X, Fenetre_Pos_Y, width, height); // Fenêtre grise - Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(Largeur-4)*Menu_Facteur_X,(Hauteur-4)*Menu_Facteur_Y,CM_Clair); + Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(width-4)*Menu_Facteur_X,(height-4)*Menu_Facteur_Y,CM_Clair); // -- Cadre de la fenêtre ----- --- -- - - // Cadre noir puis en relief - Fenetre_Afficher_cadre_mono(0,0,Largeur,Hauteur,CM_Noir); - Fenetre_Afficher_cadre_bombe(1,1,Largeur-2,Hauteur-2); + Fenetre_Afficher_cadre_mono(0,0,width,height,CM_Noir); + Fenetre_Afficher_cadre_bombe(1,1,width-2,height-2); // Barre sous le titre - Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(11*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce); - Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(12*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Blanc); + Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(11*Menu_Facteur_Y),(width-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce); + Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(12*Menu_Facteur_Y),(width-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Blanc); - Print_dans_fenetre((Largeur-(strlen(Titre)<<3))>>1,3,Titre,CM_Noir,CM_Clair); + Print_dans_fenetre((width-(strlen(Titre)<<3))>>1,3,Titre,CM_Noir,CM_Clair); if (Fenetre == 1) { @@ -1234,7 +1234,7 @@ void Fermer_fenetre(void) //---------------- Dessiner un bouton normal dans une fenêtre ---------------- -void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur, +void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word width,word height, char * Titre,byte Lettre_soulignee,byte clickable) { byte Couleur_titre; @@ -1242,19 +1242,19 @@ void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Haut if (clickable) { - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); - Fenetre_Afficher_cadre_general(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,width,height); + Fenetre_Afficher_cadre_general(Pos_X-1,Pos_Y-1,width+2,height+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); Couleur_titre=CM_Noir; } else { - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); - Fenetre_Afficher_cadre_mono(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Clair); + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,width,height); + Fenetre_Afficher_cadre_mono(Pos_X-1,Pos_Y-1,width+2,height+2,CM_Clair); Couleur_titre=CM_Fonce; } - Pos_texte_X=Pos_X+( (Largeur-(strlen(Titre)<<3)+1) >>1 ); - Pos_texte_Y=Pos_Y+((Hauteur-7)>>1); + Pos_texte_X=Pos_X+( (width-(strlen(Titre)<<3)+1) >>1 ); + Pos_texte_Y=Pos_Y+((height-7)>>1); Print_dans_fenetre(Pos_texte_X,Pos_texte_Y,Titre,Couleur_titre,CM_Clair); if (Lettre_soulignee) @@ -1265,17 +1265,17 @@ void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Haut // -- Bouton normal enfoncé dans la fenêtre -- -void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word width,word height) { - Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Noir,CM_Fonce,CM_Fonce,CM_Noir); - UpdateRect(Fenetre_Pos_X+Pos_X*Menu_Facteur_X, Fenetre_Pos_Y+Pos_Y*Menu_Facteur_Y, Largeur*Menu_Facteur_X, Hauteur*Menu_Facteur_Y); + Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,width,height,CM_Fonce,CM_Noir,CM_Fonce,CM_Fonce,CM_Noir); + UpdateRect(Fenetre_Pos_X+Pos_X*Menu_Facteur_X, Fenetre_Pos_Y+Pos_Y*Menu_Facteur_Y, width*Menu_Facteur_X, height*Menu_Facteur_Y); } // -- Bouton normal désenfoncé dans la fenêtre -- -void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word width,word height) { - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); - UpdateRect(Fenetre_Pos_X+Pos_X*Menu_Facteur_X, Fenetre_Pos_Y+Pos_Y*Menu_Facteur_Y, Largeur*Menu_Facteur_X, Hauteur*Menu_Facteur_Y); + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,width,height); + UpdateRect(Fenetre_Pos_X+Pos_X*Menu_Facteur_X, Fenetre_Pos_Y+Pos_Y*Menu_Facteur_Y, width*Menu_Facteur_X, height*Menu_Facteur_Y); } @@ -1380,13 +1380,13 @@ void Calculer_hauteur_curseur_jauge(T_Bouton_scroller * button) { if (button->Nb_elements>button->Nb_visibles) { - button->Hauteur_curseur=(button->Nb_visibles*(button->Hauteur-24))/button->Nb_elements; + button->Hauteur_curseur=(button->Nb_visibles*(button->Height-24))/button->Nb_elements; if (!(button->Hauteur_curseur)) button->Hauteur_curseur=1; } else { - button->Hauteur_curseur=button->Hauteur-24; + button->Hauteur_curseur=button->Height-24; } } @@ -1398,10 +1398,10 @@ void Fenetre_Dessiner_jauge(T_Bouton_scroller * button) Block(Fenetre_Pos_X+(button->Pos_X*Menu_Facteur_X), Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), - 11*Menu_Facteur_X,(button->Hauteur-24)*Menu_Facteur_Y,CM_Noir/*CM_Fonce*/); + 11*Menu_Facteur_X,(button->Height-24)*Menu_Facteur_Y,CM_Noir/*CM_Fonce*/); if (button->Nb_elements>button->Nb_visibles) - Position_curseur_jauge+=Round_div(button->Position*(button->Hauteur-24-button->Hauteur_curseur),button->Nb_elements-button->Nb_visibles); + Position_curseur_jauge+=Round_div(button->Position*(button->Height-24-button->Hauteur_curseur),button->Nb_elements-button->Nb_visibles); Block(Fenetre_Pos_X+(button->Pos_X*Menu_Facteur_X), Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), @@ -1409,17 +1409,17 @@ void Fenetre_Dessiner_jauge(T_Bouton_scroller * button) UpdateRect(Fenetre_Pos_X+(button->Pos_X*Menu_Facteur_X), Fenetre_Pos_Y+button->Pos_Y*Menu_Facteur_Y, - 11*Menu_Facteur_X,(button->Hauteur)*Menu_Facteur_Y); + 11*Menu_Facteur_X,(button->Height)*Menu_Facteur_Y); } void Fenetre_Dessiner_bouton_scroller(T_Bouton_scroller * button) { - Fenetre_Afficher_cadre_general(button->Pos_X-1,button->Pos_Y-1,13,button->Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); - Fenetre_Afficher_cadre_mono(button->Pos_X-1,button->Pos_Y+11,13,button->Hauteur-22,CM_Noir); + Fenetre_Afficher_cadre_general(button->Pos_X-1,button->Pos_Y-1,13,button->Height+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); + Fenetre_Afficher_cadre_mono(button->Pos_X-1,button->Pos_Y+11,13,button->Height-22,CM_Noir); Fenetre_Afficher_cadre_bombe(button->Pos_X,button->Pos_Y,11,11); - Fenetre_Afficher_cadre_bombe(button->Pos_X,button->Pos_Y+button->Hauteur-11,11,11); + Fenetre_Afficher_cadre_bombe(button->Pos_X,button->Pos_Y+button->Height-11,11,11); Print_dans_fenetre(button->Pos_X+2,button->Pos_Y+2,"\030",CM_Noir,CM_Clair); - Print_dans_fenetre(button->Pos_X+2,button->Pos_Y+button->Hauteur-9,"\031",CM_Noir,CM_Clair); + Print_dans_fenetre(button->Pos_X+2,button->Pos_Y+button->Height-9,"\031",CM_Noir,CM_Clair); Fenetre_Dessiner_jauge(button); } @@ -1436,22 +1436,22 @@ void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caract void Fenetre_Contenu_bouton_saisie(T_Bouton_special * button, char * content) { - Print_dans_fenetre_limite(button->Pos_X+2,button->Pos_Y+2,content,button->Largeur/8,CM_Noir,CM_Clair); + Print_dans_fenetre_limite(button->Pos_X+2,button->Pos_Y+2,content,button->Width/8,CM_Noir,CM_Clair); } //------------ Effacer le contenu (caption) d'une zone de saisie ------------ void Fenetre_Effacer_bouton_saisie(T_Bouton_special * button) { - Block((button->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(button->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,(button->Largeur/8)*8*Menu_Facteur_X,8*Menu_Facteur_Y,CM_Clair); - UpdateRect((button->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(button->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,button->Largeur/8*8*Menu_Facteur_X,8*Menu_Facteur_Y); + Block((button->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(button->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,(button->Width/8)*8*Menu_Facteur_X,8*Menu_Facteur_Y,CM_Clair); + UpdateRect((button->Pos_X+2)*Menu_Facteur_X+Fenetre_Pos_X,(button->Pos_Y+2)*Menu_Facteur_Y+Fenetre_Pos_Y,button->Width/8*8*Menu_Facteur_X,8*Menu_Facteur_Y); } //------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------ T_Bouton_normal * Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, - word Largeur, word Hauteur, + word width, word height, char * Titre, byte Lettre_soulignee, byte clickable, word Raccourci) { @@ -1465,8 +1465,8 @@ T_Bouton_normal * Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, Temp->Numero =Nb_boutons_fenetre; Temp->Pos_X =Pos_X; Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; + Temp->Width =width; + Temp->Height =height; Temp->Raccourci=Raccourci; Temp->Repetable=0; @@ -1474,13 +1474,13 @@ T_Bouton_normal * Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, Fenetre_Liste_boutons_normal=Temp; } - Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur,Titre,Lettre_soulignee,clickable); + Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,width,height,Titre,Lettre_soulignee,clickable); return Temp; } //------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------ T_Bouton_normal * Fenetre_Definir_bouton_repetable(word Pos_X, word Pos_Y, - word Largeur, word Hauteur, + word width, word height, char * Titre, byte Lettre_soulignee, byte clickable, word Raccourci) { @@ -1494,8 +1494,8 @@ T_Bouton_normal * Fenetre_Definir_bouton_repetable(word Pos_X, word Pos_Y, Temp->Numero =Nb_boutons_fenetre; Temp->Pos_X =Pos_X; Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; + Temp->Width =width; + Temp->Height =height; Temp->Raccourci=Raccourci; Temp->Repetable=1; @@ -1503,7 +1503,7 @@ T_Bouton_normal * Fenetre_Definir_bouton_repetable(word Pos_X, word Pos_Y, Fenetre_Liste_boutons_normal=Temp; } - Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur,Titre,Lettre_soulignee,clickable); + Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,width,height,Titre,Lettre_soulignee,clickable); return Temp; } @@ -1525,9 +1525,9 @@ T_Bouton_palette * Fenetre_Definir_bouton_palette(word Pos_X, word Pos_Y) T_Bouton_scroller * Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, - word Hauteur, - word Nb_elements, - word Nb_elements_visibles, + word height, + word nb_elements, + word nb_elements_visible, word Position_initiale) { T_Bouton_scroller * Temp; @@ -1536,9 +1536,9 @@ T_Bouton_scroller * Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, Temp->Numero =++Nb_boutons_fenetre; Temp->Pos_X =Pos_X; Temp->Pos_Y =Pos_Y; - Temp->Hauteur =Hauteur; - Temp->Nb_elements =Nb_elements; - Temp->Nb_visibles =Nb_elements_visibles; + Temp->Height =height; + Temp->Nb_elements =nb_elements; + Temp->Nb_visibles =nb_elements_visible; Temp->Position =Position_initiale; Calculer_hauteur_curseur_jauge(Temp); @@ -1550,7 +1550,7 @@ T_Bouton_scroller * Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, } -T_Bouton_special * Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +T_Bouton_special * Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word width,word height) { T_Bouton_special * Temp; @@ -1558,8 +1558,8 @@ T_Bouton_special * Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word Lar Temp->Numero =++Nb_boutons_fenetre; Temp->Pos_X =Pos_X; Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; + Temp->Width =width; + Temp->Height =height; Temp->Next=Fenetre_Liste_boutons_special; Fenetre_Liste_boutons_special=Temp; @@ -1575,7 +1575,7 @@ T_Bouton_special * Fenetre_Definir_bouton_saisie(word Pos_X,word Pos_Y,word Larg return Temp; } -T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word Largeur,word Hauteur,word Largeur_choix,char *Libelle,byte display_choice,byte display_centered,byte display_arrow,byte active_button) +T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word width,word height,word dropdown_width,char *label,byte display_choice,byte display_centered,byte display_arrow,byte active_button) { T_Bouton_dropdown *Temp; @@ -1583,22 +1583,22 @@ T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word L Temp->Numero =++Nb_boutons_fenetre; Temp->Pos_X =Pos_X; Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; + Temp->Width =width; + Temp->Height =height; Temp->Affiche_choix =display_choice; Temp->Premier_choix=NULL; - Temp->Largeur_choix=Largeur_choix?Largeur_choix:Largeur; + Temp->Largeur_choix=dropdown_width?dropdown_width:width; Temp->Affiche_centre=display_centered; Temp->Affiche_fleche=display_arrow; Temp->Bouton_actif=active_button; Temp->Next=Fenetre_Liste_boutons_dropdown; Fenetre_Liste_boutons_dropdown=Temp; - Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur,"",-1,1); - if (Libelle && Libelle[0]) - Print_dans_fenetre(Temp->Pos_X+2,Temp->Pos_Y+(Temp->Hauteur-7)/2,Libelle,CM_Noir,CM_Clair); + Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,width,height,"",-1,1); + if (label && label[0]) + Print_dans_fenetre(Temp->Pos_X+2,Temp->Pos_Y+(Temp->Height-7)/2,label,CM_Noir,CM_Clair); if (display_arrow) - Fenetre_Afficher_sprite_drive(Temp->Pos_X+Temp->Largeur-10,Temp->Pos_Y+(Temp->Hauteur-7)/2,6); + Fenetre_Afficher_sprite_drive(Temp->Pos_X+Temp->Width-10,Temp->Pos_Y+(Temp->Height-7)/2,6); return Temp; } @@ -1606,14 +1606,14 @@ T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word L // Ajoute un choix à une dropdown. Le libellé est seulement référencé, // il doit pointer sur une zone qui doit être encore valide à la fermeture // de la fenêtre (comprise). -void Fenetre_Dropdown_choix(T_Bouton_dropdown * dropdown, word Numero, const char *Libelle) +void Fenetre_Dropdown_choix(T_Bouton_dropdown * dropdown, word Numero, const char *label) { T_Dropdown_choix *Temp; T_Dropdown_choix *last; Temp=(T_Dropdown_choix *)malloc(sizeof(T_Dropdown_choix)); Temp->Numero =Numero; - Temp->Libelle=Libelle; + Temp->Label=label; Temp->Next=NULL; last=dropdown->Premier_choix; @@ -1644,7 +1644,7 @@ void Fenetre_Dropdown_vider_choix(T_Bouton_dropdown * dropdown) //----------------------- Ouverture d'un pop-up ----------------------- -void Ouvrir_popup(word Pos_X, word Pos_Y, word Largeur,word Hauteur) +void Ouvrir_popup(word Pos_X, word Pos_Y, word width,word height) // Lors de l'appel à cette procédure, la souris doit être affichée. // En sortie de cette procedure, la souris est effacée. @@ -1656,22 +1656,22 @@ void Ouvrir_popup(word Pos_X, word Pos_Y, word Largeur,word Hauteur) { Fenetre++; - Fenetre_Largeur=Largeur; - Fenetre_Hauteur=Hauteur; + Fenetre_Largeur=width; + Fenetre_Hauteur=height; Fenetre_Pos_X=Pos_X; Fenetre_Pos_Y=Pos_Y; // Sauvegarde de ce que la fenêtre remplace - Sauve_fond(&(Fond_fenetre[Fenetre-1]), Fenetre_Pos_X, Fenetre_Pos_Y, Largeur, Hauteur); + Sauve_fond(&(Fond_fenetre[Fenetre-1]), Fenetre_Pos_X, Fenetre_Pos_Y, width, height); /* // Fenêtre grise Block(Fenetre_Pos_X+1*Menu_Facteur_X, Fenetre_Pos_Y+1*Menu_Facteur_Y, - (Largeur-2)*Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,CM_Clair); + (width-2)*Menu_Facteur_X,(height-2)*Menu_Facteur_Y,CM_Clair); // Cadre noir puis en relief - Fenetre_Afficher_cadre_mono(0,0,Largeur,Hauteur,CM_Blanc); + Fenetre_Afficher_cadre_mono(0,0,width,height,CM_Blanc); */ if (Fenetre == 1) { @@ -1864,8 +1864,8 @@ short Attendre_click_dans_palette(T_Bouton_palette * button) // -------------- Récupération d'une couleur derrière un menu ---------------- void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * click) { - short Largeur=Fenetre_Largeur*Menu_Facteur_X; - short Hauteur=Fenetre_Hauteur*Menu_Facteur_Y; + short width=Fenetre_Largeur*Menu_Facteur_X; + short height=Fenetre_Hauteur*Menu_Facteur_Y; short Ancien_X=-1; short Ancien_Y=-1; short Indice; @@ -1875,15 +1875,15 @@ void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * click) byte Cacher_curseur_avant_recuperation; - if ((Buffer=(byte *) malloc(Largeur*Hauteur))) + if ((Buffer=(byte *) malloc(width*height))) { Effacer_curseur(); Cacher_curseur_avant_recuperation=Cacher_curseur; Cacher_curseur=0; - for (Indice=0; IndiceLargeur_ecran-Largeur) + if (Nouveau_X>Largeur_ecran-width) { - Nouveau_X=Largeur_ecran-Largeur; + Nouveau_X=Largeur_ecran-width; Dx = Mouse_X - Nouveau_X; } @@ -2021,9 +2021,9 @@ void Deplacer_fenetre(short Dx, short Dy) Nouveau_Y=0; Dy = Mouse_Y; } - if (Nouveau_Y>Hauteur_ecran-Hauteur) + if (Nouveau_Y>Hauteur_ecran-height) { - Nouveau_Y=Hauteur_ecran-Hauteur; + Nouveau_Y=Hauteur_ecran-height; Dy = Mouse_Y - Nouveau_Y; } @@ -2031,27 +2031,27 @@ void Deplacer_fenetre(short Dx, short Dy) { Effacer_curseur(); - Ligne_horizontale_XOR(Ancien_X,Ancien_Y,Largeur); - Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,Hauteur-2); - Ligne_verticale_XOR(Ancien_X+Largeur-1,Ancien_Y+1,Hauteur-2); - Ligne_horizontale_XOR(Ancien_X,Ancien_Y+Hauteur-1,Largeur); + Ligne_horizontale_XOR(Ancien_X,Ancien_Y,width); + Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,height-2); + Ligne_verticale_XOR(Ancien_X+width-1,Ancien_Y+1,height-2); + Ligne_horizontale_XOR(Ancien_X,Ancien_Y+height-1,width); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur); - Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2); - Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,width); + Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,height-2); + Ligne_verticale_XOR(Nouveau_X+width-1,Nouveau_Y+1,height-2); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+height-1,width); Afficher_curseur(); - UpdateRect(Ancien_X,Ancien_Y,Largeur,Hauteur); - UpdateRect(Nouveau_X,Nouveau_Y,Largeur,Hauteur); + UpdateRect(Ancien_X,Ancien_Y,width,height); + UpdateRect(Nouveau_X,Nouveau_Y,width,height); } } Effacer_curseur(); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur); - Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2); - Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,width); + Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,height-2); + Ligne_verticale_XOR(Nouveau_X+width-1,Nouveau_Y+1,height-2); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+height-1,width); if ((Nouveau_X!=Fenetre_Pos_X) || (Nouveau_Y!=Fenetre_Pos_Y)) @@ -2122,10 +2122,10 @@ short Fenetre_Dropdown_click(T_Bouton_dropdown *Bouton) Hauteur_boite=3+Nb_choix*8+1; Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Largeur,Bouton->Hauteur); + Fenetre_Enfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Width,Bouton->Height); Ouvrir_popup( Fenetre_Pos_X+(Bouton->Pos_X)*Menu_Facteur_X, - Fenetre_Pos_Y+(Bouton->Pos_Y+Bouton->Hauteur)*Menu_Facteur_Y, + Fenetre_Pos_Y+(Bouton->Pos_Y+Bouton->Height)*Menu_Facteur_Y, Bouton->Largeur_choix+OMBRE_DROITE, Hauteur_boite+OMBRE_BAS); @@ -2189,7 +2189,7 @@ short Fenetre_Dropdown_click(T_Bouton_dropdown *Bouton) color_1=CM_Noir; color_2=CM_Clair; } - Print_dans_fenetre(3,2+Indice_choix*8,Choix->Libelle,color_1,color_2); + Print_dans_fenetre(3,2+Indice_choix*8,Choix->Label,color_1,color_2); } UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Fenetre_Largeur*Menu_Facteur_X,Fenetre_Hauteur*Menu_Facteur_Y); Afficher_curseur(); @@ -2213,7 +2213,7 @@ short Fenetre_Dropdown_click(T_Bouton_dropdown *Bouton) Fermer_popup(); - Fenetre_Desenfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Largeur,Bouton->Hauteur); + Fenetre_Desenfoncer_bouton_normal(Bouton->Pos_X,Bouton->Pos_Y,Bouton->Width,Bouton->Height); Afficher_curseur(); if (Indice_selectionne>=0 && Indice_selectionneAffiche_choix) { // Mettre à jour automatiquement le libellé de la dropdown - Print_dans_fenetre(Bouton->Pos_X+2,Bouton->Pos_Y+(Bouton->Hauteur-7)/2,Choix->Libelle,CM_Noir,CM_Clair); + Print_dans_fenetre(Bouton->Pos_X+2,Bouton->Pos_Y+(Bouton->Height-7)/2,Choix->Label,CM_Noir,CM_Clair); } return Bouton->Numero; } @@ -2235,29 +2235,29 @@ short Fenetre_Dropdown_click(T_Bouton_dropdown *Bouton) // --- Fonction de clic sur un bouton a peu près ordinaire: // Attend que l'on relache le bouton, et renvoie le numero du bouton si on // est resté dessus, 0 si on a annulé en sortant du bouton. -short Fenetre_bouton_normal_click(word Pos_X, word Pos_Y, word Largeur, word Hauteur, short Numero) +short Fenetre_bouton_normal_click(word Pos_X, word Pos_Y, word width, word height, short Numero) { while(1) { Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur); + Fenetre_Enfoncer_bouton_normal(Pos_X,Pos_Y,width,height); Afficher_curseur(); - while (Fenetre_click_dans_zone(Pos_X,Pos_Y,Pos_X+Largeur-1,Pos_Y+Hauteur-1)) + while (Fenetre_click_dans_zone(Pos_X,Pos_Y,Pos_X+width-1,Pos_Y+height-1)) { if(!Get_input()) Wait_VBL(); if (!Mouse_K) { Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur); + Fenetre_Desenfoncer_bouton_normal(Pos_X,Pos_Y,width,height); Afficher_curseur(); return Numero; } } Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur); + Fenetre_Desenfoncer_bouton_normal(Pos_X,Pos_Y,width,height); Afficher_curseur(); - while (!(Fenetre_click_dans_zone(Pos_X,Pos_Y,Pos_X+Largeur-1,Pos_Y+Hauteur-1))) + while (!(Fenetre_click_dans_zone(Pos_X,Pos_Y,Pos_X+width-1,Pos_Y+height-1))) { if(!Get_input()) Wait_VBL(); @@ -2276,7 +2276,6 @@ short Fenetre_Numero_bouton_clicke(void) T_Bouton_special * Temp4; T_Bouton_dropdown * Temp5; - //long Hauteur_Curseur_jauge; long Hauteur_maxi_jauge; Fenetre_Attribut1=Mouse_K; @@ -2284,20 +2283,20 @@ short Fenetre_Numero_bouton_clicke(void) // Test du click sur les boutons normaux for (Temp1=Fenetre_Liste_boutons_normal; Temp1; Temp1=Temp1->Next) { - if (Fenetre_click_dans_zone(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Pos_X+Temp1->Largeur-1,Temp1->Pos_Y+Temp1->Hauteur-1)) + if (Fenetre_click_dans_zone(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Pos_X+Temp1->Width-1,Temp1->Pos_Y+Temp1->Height-1)) { if (Temp1->Repetable) { Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); + Fenetre_Enfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Width,Temp1->Height); Afficher_curseur(); Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); + Fenetre_Desenfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Width,Temp1->Height); Afficher_curseur(); return Temp1->Numero; } - return Fenetre_bouton_normal_click(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur,Temp1->Numero); + return Fenetre_bouton_normal_click(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Width,Temp1->Height,Temp1->Numero); } } @@ -2316,7 +2315,7 @@ short Fenetre_Numero_bouton_clicke(void) // Test du click sur les barres de défilement for (Temp3=Fenetre_Liste_boutons_scroller; Temp3; Temp3=Temp3->Next) { - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Height-1)) { // Bouton flèche Haut if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+10)) @@ -2344,10 +2343,10 @@ short Fenetre_Numero_bouton_clicke(void) } else // Bouton flèche Bas - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Height-11,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Height-1)) { Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); + Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Height-11,11,11); if (Temp3->Position+Temp3->Nb_visiblesNb_elements) { @@ -2364,18 +2363,18 @@ short Fenetre_Numero_bouton_clicke(void) Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); + Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Height-11,11,11); Afficher_curseur(); } else // Jauge - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+12,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-13)) + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+12,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Height-13)) { if (Temp3->Nb_elements>Temp3->Nb_visibles) { // S'il y a la place de faire scroller le curseur: - Hauteur_maxi_jauge=(Temp3->Hauteur-24); + Hauteur_maxi_jauge=(Temp3->Height-24); // Fenetre_Attribut2 reçoit la position dans la jauge correspondant au click Fenetre_Attribut2 =(Mouse_Y-Fenetre_Pos_Y) / Menu_Facteur_Y; @@ -2421,21 +2420,21 @@ short Fenetre_Numero_bouton_clicke(void) // Test du click sur une zone spéciale for (Temp4=Fenetre_Liste_boutons_special; Temp4; Temp4=Temp4->Next) { - if (Fenetre_click_dans_zone(Temp4->Pos_X,Temp4->Pos_Y,Temp4->Pos_X+Temp4->Largeur-1,Temp4->Pos_Y+Temp4->Hauteur-1)) + if (Fenetre_click_dans_zone(Temp4->Pos_X,Temp4->Pos_Y,Temp4->Pos_X+Temp4->Width-1,Temp4->Pos_Y+Temp4->Height-1)) return Temp4->Numero; } // Test du click sur une dropdown for (Temp5=Fenetre_Liste_boutons_dropdown; Temp5; Temp5=Temp5->Next) { - if (Fenetre_click_dans_zone(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Pos_X+Temp5->Largeur-1,Temp5->Pos_Y+Temp5->Hauteur-1)) + if (Fenetre_click_dans_zone(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Pos_X+Temp5->Width-1,Temp5->Pos_Y+Temp5->Height-1)) { if (Mouse_K & Temp5->Bouton_actif) return Fenetre_Dropdown_click(Temp5); else { Fenetre_Attribut2=-1; - return Fenetre_bouton_normal_click(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Largeur,Temp5->Hauteur,Temp5->Numero); + return Fenetre_bouton_normal_click(Temp5->Pos_X,Temp5->Pos_Y,Temp5->Width,Temp5->Height,Temp5->Numero); } } } @@ -2460,13 +2459,13 @@ short Fenetre_Numero_bouton_touche(void) if (Temp->Raccourci==Touche) { Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp->Pos_X,Temp->Pos_Y,Temp->Largeur,Temp->Hauteur); + Fenetre_Enfoncer_bouton_normal(Temp->Pos_X,Temp->Pos_Y,Temp->Width,Temp->Height); Afficher_curseur(); Tempo_jauge(Config.Valeur_tempo_jauge_droite); Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp->Pos_X,Temp->Pos_Y,Temp->Largeur,Temp->Hauteur); + Fenetre_Desenfoncer_bouton_normal(Temp->Pos_X,Temp->Pos_Y,Temp->Width,Temp->Height); Afficher_curseur(); return Temp->Numero; @@ -2527,8 +2526,6 @@ short Fenetre_Bouton_clicke(void) return 0; } -//int Moteur_Dernier_bouton_clicke; -//int Moteur_Type_dernier_bouton_clicke; // Fonction qui sert à remapper les parties sauvegardées derriere les // fenetres ouvertes. C'est utilisé par exemple par la fenetre de palette diff --git a/moteur.h b/moteur.h index f7a374c3..4768007a 100644 --- a/moteur.h +++ b/moteur.h @@ -25,16 +25,16 @@ void Desenclencher_bouton (int Numero); void Enclencher_bouton (int Numero,byte click); void Annuler_les_effets (void); void Restaurer_les_effets (void); -void Ouvrir_fenetre (word Largeur,word Hauteur, char * Titre); +void Ouvrir_fenetre (word width,word height, char * Titre); void Fermer_fenetre (void); -void Ouvrir_popup (word Pos_X, word Pos_Y, word Largeur, word Hauteur); +void Ouvrir_popup (word Pos_X, word Pos_Y, word width, word height); void Fermer_popup (void); -void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur, +void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word width,word height, char * Titre,byte Lettre_soulignee,byte clickable); -void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur); -void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur); +void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word width,word height); +void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word width,word height); void Fenetre_Dessiner_bouton_palette(word Pos_X,word Pos_Y); void Calculer_hauteur_curseur_jauge(T_Bouton_scroller * button); @@ -46,11 +46,11 @@ void Fenetre_Effacer_bouton_saisie(T_Bouton_special * button); void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres); T_Bouton_normal * Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, - word Largeur, word Hauteur, + word width, word height, char * Titre,byte Lettre_soulignee, byte clickable, word Raccourci); T_Bouton_normal * Fenetre_Definir_bouton_repetable(word Pos_X, word Pos_Y, - word Largeur, word Hauteur, + word width, word height, char * Titre,byte Lettre_soulignee, byte clickable, word Raccourci); @@ -59,14 +59,14 @@ void Fenetre_Effacer_tags(void); void Tagger_intervalle_palette(byte start,byte end); T_Bouton_scroller * Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, - word Hauteur, - word Nb_elements, - word Nb_elements_visibles, + word height, + word nb_elements, + word nb_elements_visible, word Position_initiale); -T_Bouton_special * Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word Largeur,word Hauteur); +T_Bouton_special * Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word width,word height); T_Bouton_special * Fenetre_Definir_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres); -T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word Largeur,word Hauteur,word Largeur_choix,char *Libelle,byte display_choice,byte display_centered,byte display_arrow,byte active_button); -void Fenetre_Dropdown_choix(T_Bouton_dropdown * dropdown, word Numero, const char *Libelle); +T_Bouton_dropdown * Fenetre_Definir_bouton_dropdown(word Pos_X,word Pos_Y,word width,word height,word dropdown_width,char *label,byte display_choice,byte display_centered,byte display_arrow,byte active_button); +void Fenetre_Dropdown_choix(T_Bouton_dropdown * dropdown, word Numero, const char *label); void Fenetre_Dropdown_vider_choix(T_Bouton_dropdown * dropdown); byte Fenetre_click_dans_zone(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y); short Attendre_click_dans_palette(T_Bouton_palette * button); diff --git a/op_c.c b/op_c.c index 69744d09..fdd61c9d 100644 --- a/op_c.c +++ b/op_c.c @@ -1084,7 +1084,7 @@ int Valeur_modifiee(int Valeur,int modif) return Valeur; } -void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,int Largeur,int Hauteur,Composantes * palette,Table_conversion * tc) +void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,int width,int height,Composantes * palette,Table_conversion * tc) // Cette fonction dégrade au fur et à mesure le bitmap source, donc soit on ne // s'en ressert pas, soit on passe à la fonction une copie de travail du // bitmap original. @@ -1101,16 +1101,16 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i // On initialise les variables de parcours: Courant =Source; // Le pixel dont on s'occupe - Suivant =Courant+Largeur; // Le pixel en dessous + Suivant =Courant+width; // Le pixel en dessous C_plus1 =Courant+1; // Le pixel à droite S_moins1=Suivant-1; // Le pixel en bas à gauche S_plus1 =Suivant+1; // Le pixel en bas à droite d =Dest; // On parcours chaque pixel: - for (Pos_Y=0;Pos_YR=Valeur_modifiee(C_plus1->R,ERouge); @@ -1138,7 +1138,7 @@ void Convert_bitmap_24B_to_256_Floyd_Steinberg(Bitmap256 Dest,Bitmap24B Source,i C_plus1->B=Valeur_modifiee(C_plus1->B,EBleu ); } // En bas à gauche: - if (Pos_Y+1V=Valeur_modifiee(Suivant->V,EVert ); Suivant->B=Valeur_modifiee(Suivant->B,EBleu ); // En bas à droite: - if (Pos_X+11) Largeur--; - if (Hauteur>1) Hauteur--; + if (width>1) width--; + if (height>1) height--; } - Num2str(Largeur,Chaine,4); + Num2str(width,Chaine,4); Print_dans_menu(Chaine,2); - Num2str(Hauteur,Chaine,4); + Num2str(height,Chaine,4); Print_dans_menu(Chaine,11); } else @@ -3268,8 +3268,8 @@ void Etirer_brosse_0_7(void) short Debut_Y; short Ancien_X; short Ancien_Y; - short Largeur=0; - short Hauteur=0; + short width=0; + short height=0; byte Changement_de_taille; short Etat_prec; @@ -3285,12 +3285,12 @@ void Etirer_brosse_0_7(void) { if (Config.Coords_rel) { - Largeur=((Debut_X1)?Debut_X+(Brosse_Largeur>>1)-1:1; - Hauteur=(Brosse_Hauteur>1)?Debut_Y+(Brosse_Hauteur>>1)-1:1; + width=(Brosse_Largeur>1)?Debut_X+(Brosse_Largeur>>1)-1:1; + height=(Brosse_Hauteur>1)?Debut_Y+(Brosse_Hauteur>>1)-1:1; break; case 'X': // Moitié X - Largeur=(Brosse_Largeur>1)?Debut_X+(Brosse_Largeur>>1)-1:1; - Hauteur=Debut_Y+Brosse_Hauteur-1; + width=(Brosse_Largeur>1)?Debut_X+(Brosse_Largeur>>1)-1:1; + height=Debut_Y+Brosse_Hauteur-1; break; case 'Y': // Moitié Y - Largeur=Debut_X+Brosse_Largeur-1; - Hauteur=(Brosse_Hauteur>1)?Debut_Y+(Brosse_Hauteur>>1)-1:1; + width=Debut_X+Brosse_Largeur-1; + height=(Brosse_Hauteur>1)?Debut_Y+(Brosse_Hauteur>>1)-1:1; break; case 'n': // Normal - Largeur=Debut_X+Brosse_Largeur-1; - Hauteur=Debut_Y+Brosse_Hauteur-1; + width=Debut_X+Brosse_Largeur-1; + height=Debut_Y+Brosse_Hauteur-1; break; default : Changement_de_taille=0; @@ -3354,12 +3354,12 @@ void Etirer_brosse_0_7(void) Pinceau_X=Ancien_X; Pinceau_Y=Ancien_Y; - Etirer_brosse_preview(Debut_X,Debut_Y,Largeur,Hauteur); + Etirer_brosse_preview(Debut_X,Debut_Y,width,height); Afficher_curseur(); Operation_Taille_pile-=2; - Operation_PUSH(Largeur); - Operation_PUSH(Hauteur); + Operation_PUSH(width); + Operation_PUSH(height); } Operation_PUSH(Debut_X); @@ -4342,7 +4342,7 @@ void Rectangle_Degrade_0_5(void) short RAX; short RAY; short RBX; - short RBY, Largeur,Hauteur; + short RBY, width,height; short decalage_largeur = 0; short decalage_hauteur = 0; short decalage_gauche = 0; @@ -4359,8 +4359,8 @@ void Rectangle_Degrade_0_5(void) Pinceau_Y = RAY; Effacer_curseur(); - Largeur = abs(RBX-RAX); - Hauteur = abs(RBY-RAY); + width = abs(RBX-RAX); + height = abs(RBY-RAY); if (Max(RAX,RBX)-Principal_Decalage_X > Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran)) // Tous les clippings à gérer sont là decalage_largeur = Max(RAX,RBX) - Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran); @@ -4369,15 +4369,15 @@ void Rectangle_Degrade_0_5(void) decalage_hauteur = Max(RAY,RBY) - Min(Principal_Hauteur_image,Menu_Ordonnee); // Dessin dans la zone de dessin normale - Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,width - decalage_largeur); if(decalage_hauteur == 0) - Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Max(RAY,RBY)-1-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Max(RAY,RBY)-1-Principal_Decalage_Y,width - decalage_largeur); - Ligne_verticale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,height-decalage_hauteur); if (decalage_largeur == 0) // Sinon cette ligne est en dehors de la zone image, inutile de la dessiner - Ligne_verticale_XOR(Max(RAX,RBX)-1-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Max(RAX,RBX)-1-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,height-decalage_hauteur); - UpdateRect(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Largeur+1-decalage_largeur,Hauteur+1-decalage_hauteur); + UpdateRect(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,width+1-decalage_largeur,height+1-decalage_hauteur); // Dessin dans la zone zoomée if(Loupe_Mode && Min(RAX,RBX)Limite_Gauche_Zoom && Min(RAY,RBY)Limite_Haut_Zoom ) @@ -4403,22 +4403,22 @@ void Rectangle_Degrade_0_5(void) if(Max(RAY,RBY)>Limite_visible_Bas_Zoom) // On dépasse du zoom en bas decalage_hauteur += Max(RAY,RBY) - Limite_visible_Bas_Zoom; - if(Largeur > decalage_largeur) + if(width > decalage_largeur) { if(decalage_haut==0) // La ligne du haut est visible - Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Min(RAY,RBY),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Min(RAY,RBY),width-decalage_largeur); if(Max(RAY,RBY)0?decalage_gauche:Min(RAX,RBX),Max(RAY,RBY),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Max(RAY,RBY),width-decalage_largeur); } - if(Hauteur>decalage_hauteur) + if(height>decalage_hauteur) { if(decalage_gauche==0) // La ligne de gauche est visible - Ligne_verticale_XOR_Zoom(Min(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Min(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),height-decalage_hauteur); if(Max(RAX,RBX)0?decalage_haut:Min(RAY,RBY),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Max(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),height-decalage_hauteur); } } @@ -4487,14 +4487,14 @@ void Rectangle_Degrade_12_7(void) { // Mauvais bouton > anulation de l'opération. // On a déjà vidé la pile, il reste à effacer le rectangle XOR - short Largeur, Hauteur; + short width, height; short decalage_largeur = 0; short decalage_hauteur = 0; short decalage_gauche = 0; short decalage_haut = 0; - Largeur = abs(RBX-RAX); - Hauteur = abs(RBY-RAY); + width = abs(RBX-RAX); + height = abs(RBY-RAY); if (Max(RAX,RBX)-Principal_Decalage_X > Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran)) // Tous les clippings à gérer sont là decalage_largeur = Max(RAX,RBX) - Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran); @@ -4503,15 +4503,15 @@ void Rectangle_Degrade_12_7(void) decalage_hauteur = Max(RAY,RBY) - Min(Principal_Hauteur_image,Menu_Ordonnee); // Dessin dans la zone de dessin normale - Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,width - decalage_largeur); if(decalage_hauteur == 0) - Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Max(RAY,RBY)-1-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Max(RAY,RBY)-1-Principal_Decalage_Y,width - decalage_largeur); - Ligne_verticale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,height-decalage_hauteur); if (decalage_largeur == 0) // Sinon cette ligne est en dehors de la zone image, inutile de la dessiner - Ligne_verticale_XOR(Max(RAX,RBX)-1-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Max(RAX,RBX)-1-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,height-decalage_hauteur); - UpdateRect(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,Largeur+1-decalage_largeur,Hauteur+1-decalage_hauteur); + UpdateRect(Min(RAX,RBX)-Principal_Decalage_X,Min(RAY,RBY)-Principal_Decalage_Y,width+1-decalage_largeur,height+1-decalage_hauteur); // Dessin dans la zone zoomée if(Loupe_Mode && Min(RAX,RBX)Limite_Gauche_Zoom && Min(RAY,RBY)Limite_Haut_Zoom ) @@ -4537,22 +4537,22 @@ void Rectangle_Degrade_12_7(void) if(Max(RAY,RBY)>Limite_visible_Bas_Zoom) // On dépasse du zoom en bas decalage_hauteur += Max(RAY,RBY) - Limite_visible_Bas_Zoom; - if(Largeur > decalage_largeur) + if(width > decalage_largeur) { if(decalage_haut==0) // La ligne du haut est visible - Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Min(RAY,RBY),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Min(RAY,RBY),width-decalage_largeur); if(Max(RAY,RBY)0?decalage_gauche:Min(RAX,RBX),Max(RAY,RBY),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(RAX,RBX),Max(RAY,RBY),width-decalage_largeur); } - if(Hauteur>decalage_hauteur) + if(height>decalage_hauteur) { if(decalage_gauche==0) // La ligne de gauche est visible - Ligne_verticale_XOR_Zoom(Min(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Min(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),height-decalage_hauteur); if(Max(RAX,RBX)0?decalage_haut:Min(RAY,RBY),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Max(RAX,RBX),decalage_haut>0?decalage_haut:Min(RAY,RBY),height-decalage_hauteur); } } } @@ -4635,14 +4635,14 @@ void Rectangle_Degrade_0_9(void) { // Vecteur nul > pas de rectangle tracé // Du coup on doit effacer la preview xor ... - short Largeur, Hauteur; + short width, height; short decalage_largeur = 0; short decalage_hauteur = 0; short decalage_gauche = 0; short decalage_haut = 0; - Largeur = abs(Rect_Fin_X-Rect_Debut_X); - Hauteur = abs(Rect_Fin_Y-Rect_Debut_Y); + width = abs(Rect_Fin_X-Rect_Debut_X); + height = abs(Rect_Fin_Y-Rect_Debut_Y); if (Max(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X > Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran)) // Tous les clippings à gérer sont là decalage_largeur = Max(Rect_Debut_X,Rect_Fin_X) - Min(Principal_Largeur_image,Loupe_Mode?Principal_Split:Largeur_ecran); @@ -4651,15 +4651,15 @@ void Rectangle_Degrade_0_9(void) decalage_hauteur = Max(Rect_Debut_Y,Rect_Fin_Y) - Min(Principal_Hauteur_image,Menu_Ordonnee); // Dessin dans la zone de dessin normale - Ligne_horizontale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,width - decalage_largeur); if(decalage_hauteur == 0) - Ligne_horizontale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Max(Rect_Debut_Y,Rect_Fin_Y)-1-Principal_Decalage_Y,Largeur - decalage_largeur); + Ligne_horizontale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Max(Rect_Debut_Y,Rect_Fin_Y)-1-Principal_Decalage_Y,width - decalage_largeur); - Ligne_verticale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,height-decalage_hauteur); if (decalage_largeur == 0) // Sinon cette ligne est en dehors de la zone image, inutile de la dessiner - Ligne_verticale_XOR(Max(Rect_Debut_X,Rect_Fin_X)-1-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,Hauteur-decalage_hauteur); + Ligne_verticale_XOR(Max(Rect_Debut_X,Rect_Fin_X)-1-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,height-decalage_hauteur); - UpdateRect(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,Largeur+1-decalage_largeur,Hauteur+1-decalage_hauteur); + UpdateRect(Min(Rect_Debut_X,Rect_Fin_X)-Principal_Decalage_X,Min(Rect_Debut_Y,Rect_Fin_Y)-Principal_Decalage_Y,width+1-decalage_largeur,height+1-decalage_hauteur); // Dessin dans la zone zoomée if(Loupe_Mode && Min(Rect_Debut_X,Rect_Fin_X)Limite_Gauche_Zoom && Min(Rect_Debut_Y,Rect_Fin_Y)Limite_Haut_Zoom ) @@ -4685,22 +4685,22 @@ void Rectangle_Degrade_0_9(void) if(Max(Rect_Debut_Y,Rect_Fin_Y)>Limite_visible_Bas_Zoom) // On dépasse du zoom en bas decalage_hauteur += Max(Rect_Debut_Y,Rect_Fin_Y) - Limite_visible_Bas_Zoom; - if(Largeur > decalage_largeur) + if(width > decalage_largeur) { if(decalage_haut==0) // La ligne du haut est visible - Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(Rect_Debut_X,Rect_Fin_X),Min(Rect_Debut_Y,Rect_Fin_Y),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(Rect_Debut_X,Rect_Fin_X),Min(Rect_Debut_Y,Rect_Fin_Y),width-decalage_largeur); if(Max(Rect_Debut_Y,Rect_Fin_Y)0?decalage_gauche:Min(Rect_Debut_X,Rect_Fin_X),Max(Rect_Debut_Y,Rect_Fin_Y),Largeur-decalage_largeur); + Ligne_horizontale_XOR_Zoom(decalage_gauche>0?decalage_gauche:Min(Rect_Debut_X,Rect_Fin_X),Max(Rect_Debut_Y,Rect_Fin_Y),width-decalage_largeur); } - if(Hauteur>decalage_hauteur) + if(height>decalage_hauteur) { if(decalage_gauche==0) // La ligne de gauche est visible - Ligne_verticale_XOR_Zoom(Min(Rect_Debut_X,Rect_Fin_X),decalage_haut>0?decalage_haut:Min(Rect_Debut_Y,Rect_Fin_Y),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Min(Rect_Debut_X,Rect_Fin_X),decalage_haut>0?decalage_haut:Min(Rect_Debut_Y,Rect_Fin_Y),height-decalage_hauteur); if(Max(Rect_Debut_X,Rect_Fin_X)0?decalage_haut:Min(Rect_Debut_Y,Rect_Fin_Y),Hauteur-decalage_hauteur); + Ligne_verticale_XOR_Zoom(Max(Rect_Debut_X,Rect_Fin_X),decalage_haut>0?decalage_haut:Min(Rect_Debut_Y,Rect_Fin_Y),height-decalage_hauteur); } } } diff --git a/pages.c b/pages.c index c56c6964..119062d6 100644 --- a/pages.c +++ b/pages.c @@ -44,8 +44,8 @@ void Initialiser_S_Page(S_Page * Page) if (Page!=NULL) { Page->Image=NULL; - Page->Largeur=0; - Page->Hauteur=0; + Page->Width=0; + Page->Height=0; memset(Page->Palette,0,sizeof(T_Palette)); Page->Commentaire[0]='\0'; Page->Repertoire_fichier[0]='\0'; @@ -77,12 +77,12 @@ void Download_infos_page_principal(S_Page * Page) if (Page!=NULL) { - Dimensions_modifiees=(Principal_Largeur_image!=Page->Largeur) || - (Principal_Hauteur_image!=Page->Hauteur); + Dimensions_modifiees=(Principal_Largeur_image!=Page->Width) || + (Principal_Hauteur_image!=Page->Height); Principal_Ecran=Page->Image; - Principal_Largeur_image=Page->Largeur; - Principal_Hauteur_image=Page->Hauteur; + Principal_Largeur_image=Page->Width; + Principal_Hauteur_image=Page->Height; memcpy(Principal_Palette,Page->Palette,sizeof(T_Palette)); strcpy(Principal_Commentaire,Page->Commentaire); strcpy(Principal_Repertoire_fichier,Page->Repertoire_fichier); @@ -135,8 +135,8 @@ void Upload_infos_page_principal(S_Page * Page) if (Page!=NULL) { Page->Image=Principal_Ecran; - Page->Largeur=Principal_Largeur_image; - Page->Hauteur=Principal_Hauteur_image; + Page->Width=Principal_Largeur_image; + Page->Height=Principal_Hauteur_image; memcpy(Page->Palette,Principal_Palette,sizeof(T_Palette)); strcpy(Page->Commentaire,Principal_Commentaire); strcpy(Page->Repertoire_fichier,Principal_Repertoire_fichier); @@ -165,8 +165,8 @@ void Download_infos_page_brouillon(S_Page * Page) if (Page!=NULL) { Brouillon_Ecran=Page->Image; - Brouillon_Largeur_image=Page->Largeur; - Brouillon_Hauteur_image=Page->Hauteur; + Brouillon_Largeur_image=Page->Width; + Brouillon_Hauteur_image=Page->Height; memcpy(Brouillon_Palette,Page->Palette,sizeof(T_Palette)); strcpy(Brouillon_Commentaire,Page->Commentaire); strcpy(Brouillon_Repertoire_fichier,Page->Repertoire_fichier); @@ -195,8 +195,8 @@ void Upload_infos_page_brouillon(S_Page * Page) if (Page!=NULL) { Page->Image=Brouillon_Ecran; - Page->Largeur=Brouillon_Largeur_image; - Page->Hauteur=Brouillon_Hauteur_image; + Page->Width=Brouillon_Largeur_image; + Page->Height=Brouillon_Hauteur_image; memcpy(Page->Palette,Brouillon_Palette,sizeof(T_Palette)); strcpy(Page->Commentaire,Brouillon_Commentaire); strcpy(Page->Repertoire_fichier,Brouillon_Repertoire_fichier); @@ -220,17 +220,17 @@ void Upload_infos_page_brouillon(S_Page * Page) } } -void Download_infos_backup(S_Liste_de_pages * Liste) +void Download_infos_backup(S_Liste_de_pages * list) { - Ecran_backup=Liste->Pages[1].Image; + Ecran_backup=list->Pages[1].Image; if (Config.FX_Feedback) - FX_Feedback_Ecran=Liste->Pages[0].Image; + FX_Feedback_Ecran=list->Pages[0].Image; else - FX_Feedback_Ecran=Liste->Pages[1].Image; + FX_Feedback_Ecran=list->Pages[1].Image; } -int Allouer_une_page(S_Page * Page,int Largeur,int Hauteur) +int Allouer_une_page(S_Page * Page,int width,int height) { // Important: la S_Page ne doit pas déjà désigner une page allouée auquel // cas celle-ci serait perdue. @@ -238,15 +238,15 @@ int Allouer_une_page(S_Page * Page,int Largeur,int Hauteur) /* Debug : if (Page->Image!=NULL) exit(666); */ // On alloue la mémoire pour le bitmap - Page->Image=(byte *)malloc(Largeur*Hauteur); + Page->Image=(byte *)malloc(width*height); // On vérifie que l'allocation se soit bien passée if (Page->Image==NULL) return 0; // Echec else { - Page->Largeur=Largeur; - Page->Hauteur=Hauteur; + Page->Width=width; + Page->Height=height; // Important: La mise à jour des autres infos est du ressort de // l'appelant. @@ -261,8 +261,8 @@ void Liberer_une_page(S_Page * Page) if (Page->Image!=NULL) free(Page->Image); Page->Image=NULL; - Page->Largeur=0; - Page->Hauteur=0; + Page->Width=0; + Page->Height=0; // On ne se préoccupe pas de ce que deviens le reste des infos de l'image. } @@ -273,7 +273,7 @@ void Copier_S_page(S_Page * dest,S_Page * Source) int Taille_d_une_page(S_Page * Page) { - return sizeof(S_Page)+(Page->Largeur*Page->Hauteur)+8; + return sizeof(S_Page)+(Page->Width*Page->Height)+8; // 8 = 4 + 4 // (Toute zone allouée en mémoire est précédée d'un mot double indiquant sa // taille, or la taille d'un mot double est de 4 octets, et on utilise deux @@ -285,70 +285,70 @@ int Taille_d_une_page(S_Page * Page) /// GESTION DES LISTES DE PAGES /// -void Initialiser_S_Liste_de_pages(S_Liste_de_pages * Liste) +void Initialiser_S_Liste_de_pages(S_Liste_de_pages * list) { // Important: appeler cette fonction sur toute nouvelle structure // S_Liste_de_pages! - Liste->Taille_liste=0; - Liste->Nb_pages_allouees=0; - Liste->Pages=NULL; + list->Taille_liste=0; + list->Nb_pages_allouees=0; + list->Pages=NULL; } -int Allouer_une_liste_de_pages(S_Liste_de_pages * Liste,int Taille) +int Allouer_une_liste_de_pages(S_Liste_de_pages * list,int Taille) { // Important: la S_Liste_de_pages ne doit pas déjà désigner une liste de // pages allouée auquel cas celle-ci serait perdue. int Indice; - /* Debug : if (Liste->Pages!=NULL) exit(666); */ + /* Debug : if (list->Pages!=NULL) exit(666); */ // On alloue la mémoire pour la liste - Liste->Pages=(S_Page *)malloc(Taille*sizeof(S_Page)); + list->Pages=(S_Page *)malloc(Taille*sizeof(S_Page)); // On vérifie que l'allocation se soit bien passée - if (Liste->Pages==NULL) + if (list->Pages==NULL) return 0; // Echec else { // On initialise chacune des nouvelles pages for (Indice=0;IndicePages+Indice); - Liste->Taille_liste=Taille; - Liste->Nb_pages_allouees=0; + Initialiser_S_Page(list->Pages+Indice); + list->Taille_liste=Taille; + list->Nb_pages_allouees=0; return 1; // Succès } } -void Liberer_une_liste_de_pages(S_Liste_de_pages * Liste) +void Liberer_une_liste_de_pages(S_Liste_de_pages * list) { // On peut appeler cette fonction sur une liste de pages non allouée. // Important: cette fonction ne libère pas les pages de la liste. Il faut // donc le faire préalablement si nécessaire. - if (Liste->Pages!=NULL) - free(Liste->Pages); - Liste->Pages=NULL; - Liste->Taille_liste=0; - Liste->Nb_pages_allouees=0; + if (list->Pages!=NULL) + free(list->Pages); + list->Pages=NULL; + list->Taille_liste=0; + list->Nb_pages_allouees=0; } -int Taille_d_une_liste_de_pages(S_Liste_de_pages * Liste) +int Taille_d_une_liste_de_pages(S_Liste_de_pages * list) { int Resultat=0; int Indice; - for (Indice=0;IndiceNb_pages_allouees;Indice++) - Resultat+=Taille_d_une_page(Liste->Pages+Indice); + for (Indice=0;IndiceNb_pages_allouees;Indice++) + Resultat+=Taille_d_une_page(list->Pages+Indice); return Resultat+sizeof(S_Liste_de_pages)+4; // C.F. la remarque à propos de Taille_d_une_page pour la valeur 4. } -void Reculer_dans_une_liste_de_pages(S_Liste_de_pages * Liste) +void Reculer_dans_une_liste_de_pages(S_Liste_de_pages * list) { // Cette fonction fait l'équivalent d'un "Undo" dans la liste de pages. // Elle effectue une sorte de ROL (Rotation Left) sur la liste: @@ -369,29 +369,29 @@ void Reculer_dans_une_liste_de_pages(S_Liste_de_pages * Liste) int Indice; S_Page * Page_tempo; - if (Liste->Nb_pages_allouees>1) + if (list->Nb_pages_allouees>1) { // On crée la page tempo Page_tempo=(S_Page *)malloc(sizeof(S_Page)); Initialiser_S_Page(Page_tempo); // On copie la 1ère page (Page 0) dans la page temporaire - Copier_S_page(Page_tempo,Liste->Pages); + Copier_S_page(Page_tempo,list->Pages); // On copie toutes les pages 1-A à leur gauche - for (Indice=1;IndiceNb_pages_allouees;Indice++) - Copier_S_page(Liste->Pages+Indice-1,Liste->Pages+Indice); + for (Indice=1;IndiceNb_pages_allouees;Indice++) + Copier_S_page(list->Pages+Indice-1,list->Pages+Indice); // On copie la page 0 (dont la sauvegarde a été effectuée dans la page // temporaire) en dernière position - Copier_S_page(Liste->Pages+Liste->Nb_pages_allouees-1,Page_tempo); + Copier_S_page(list->Pages+list->Nb_pages_allouees-1,Page_tempo); // On détruit la page tempo free(Page_tempo); } } -void Avancer_dans_une_liste_de_pages(S_Liste_de_pages * Liste) +void Avancer_dans_une_liste_de_pages(S_Liste_de_pages * list) { // Cette fonction fait l'équivalent d'un "Redo" dans la liste de pages. // Elle effectue une sorte de ROR (Rotation Right) sur la liste: @@ -412,22 +412,22 @@ void Avancer_dans_une_liste_de_pages(S_Liste_de_pages * Liste) int Indice; S_Page * Page_tempo; - if (Liste->Nb_pages_allouees>1) + if (list->Nb_pages_allouees>1) { // On crée la page tempo Page_tempo=(S_Page *)malloc(sizeof(S_Page)); Initialiser_S_Page(Page_tempo); // On copie la dernière page dans la page temporaire - Copier_S_page(Page_tempo,Liste->Pages+Liste->Nb_pages_allouees-1); + Copier_S_page(Page_tempo,list->Pages+list->Nb_pages_allouees-1); // On copie toutes les pages 0-9 à leur droite - for (Indice=Liste->Nb_pages_allouees-1;Indice>0;Indice--) - Copier_S_page(Liste->Pages+Indice,Liste->Pages+Indice-1); + for (Indice=list->Nb_pages_allouees-1;Indice>0;Indice--) + Copier_S_page(list->Pages+Indice,list->Pages+Indice-1); // On copie la page plus ancienne page (la "A", dont la sauvegarde a été // effectuée dans la page temporaire) en 1ère position - Copier_S_page(Liste->Pages,Page_tempo); + Copier_S_page(list->Pages,Page_tempo); // On détruit la page tempo free(Page_tempo); @@ -473,14 +473,14 @@ int Nouvelle_page_possible( return 1; } -void Detruire_derniere_page_allouee_de_la_liste(S_Liste_de_pages * Liste) +void Detruire_derniere_page_allouee_de_la_liste(S_Liste_de_pages * list) { - if (Liste!=NULL) + if (list!=NULL) { - if (Liste->Nb_pages_allouees>0) + if (list->Nb_pages_allouees>0) { - Liste->Nb_pages_allouees--; - Liberer_une_page(Liste->Pages+Liste->Nb_pages_allouees); + list->Nb_pages_allouees--; + Liberer_une_page(list->Pages+list->Nb_pages_allouees); } } } @@ -489,7 +489,7 @@ void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courant { // Cette fonction crée une nouvelle page dont les attributs correspondent à -// ceux de Nouvelle_page (Largeur,Hauteur,...) (le champ Image est invalide +// ceux de Nouvelle_page (width,height,...) (le champ Image est invalide // à l'appel, c'est la fonction qui le met à jour), et l'enfile dans // Liste_courante. // Il est impératif que la création de cette page soit possible, @@ -511,14 +511,14 @@ void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courant ( (Liste_courante->Taille_liste==Liste_courante->Nb_pages_allouees) // ou qu'il ne reste plus assez de place pour allouer la Nouvelle_page || ( (Memoire_libre()-QUANTITE_MINIMALE_DE_MEMOIRE_A_CONSERVER)< - (unsigned long)(Nouvelle_page->Hauteur*Nouvelle_page->Largeur) ) ); + (unsigned long)(Nouvelle_page->Height*Nouvelle_page->Width) ) ); if (!Il_faut_liberer) { // On a assez de place pour allouer une page, et de plus la Liste_courante // n'est pas pleine. On n'a donc aucune page à supprimer. On peut en // allouer une directement. - Nouvelle_page->Image=(byte *)malloc(Nouvelle_page->Hauteur*Nouvelle_page->Largeur); + Nouvelle_page->Image=(byte *)malloc(Nouvelle_page->Height*Nouvelle_page->Width); } else { @@ -556,8 +556,8 @@ void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courant // On regarde si on peut recycler directement la page (cas où elle // aurait la même surface que la Nouvelle_page) - if ((Page_a_supprimer->Hauteur*Page_a_supprimer->Largeur)== - (Nouvelle_page->Hauteur*Nouvelle_page->Largeur)) + if ((Page_a_supprimer->Height*Page_a_supprimer->Width)== + (Nouvelle_page->Height*Nouvelle_page->Width)) { // Alors // On récupère le bitmap de la page à supprimer (évite de faire des @@ -580,12 +580,12 @@ void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courant // On regarde s'il faut continuer à libérer de la place Il_faut_liberer=(Memoire_libre()-QUANTITE_MINIMALE_DE_MEMOIRE_A_CONSERVER) - <(unsigned long)(Nouvelle_page->Hauteur*Nouvelle_page->Largeur); + <(unsigned long)(Nouvelle_page->Height*Nouvelle_page->Width); // S'il ne faut pas, c'est qu'on peut allouer un bitmap // pour la Nouvelle_page if (!Il_faut_liberer) - Nouvelle_page->Image=(byte *)malloc(Nouvelle_page->Hauteur*Nouvelle_page->Largeur); + Nouvelle_page->Image=(byte *)malloc(Nouvelle_page->Height*Nouvelle_page->Width); } } } @@ -603,54 +603,54 @@ void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courant Liste_courante->Nb_pages_allouees++; } -void Changer_nombre_de_pages_d_une_liste(S_Liste_de_pages * Liste,int Nb) +void Changer_nombre_de_pages_d_une_liste(S_Liste_de_pages * list,int number) { int Indice; S_Page * Nouvelles_pages; // Si la liste a déjà la taille demandée - if (Liste->Taille_liste==Nb) + if (list->Taille_liste==number) // Alors il n'y a rien à faire return; // Si la liste contient plus de pages que souhaité - if (Liste->Taille_liste>Nb) + if (list->Taille_liste>number) // Alors pour chaque page en excés - for (Indice=Nb;IndiceTaille_liste;Indice++) + for (Indice=number;IndiceTaille_liste;Indice++) // On libère la page - Liberer_une_page(Liste->Pages+Indice); + Liberer_une_page(list->Pages+Indice); // On fait une nouvelle liste de pages: - Nouvelles_pages=(S_Page *)malloc(Nb*sizeof(S_Page)); - for (Indice=0;IndiceTaille_liste);Indice++) - Copier_S_page(Nouvelles_pages+Indice,Liste->Pages+Indice); + for (Indice=0;IndiceTaille_liste);Indice++) + Copier_S_page(Nouvelles_pages+Indice,list->Pages+Indice); // On libère l'ancienne liste - free(Liste->Pages); + free(list->Pages); // On met à jour les champs de la nouvelle liste - Liste->Pages=Nouvelles_pages; - Liste->Taille_liste=Nb; - if (Liste->Nb_pages_allouees>Nb) - Liste->Nb_pages_allouees=Nb; + list->Pages=Nouvelles_pages; + list->Taille_liste=number; + if (list->Nb_pages_allouees>number) + list->Nb_pages_allouees=number; } -void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * Liste) +void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * list) { // On ne peut pas détruire la page courante de la liste si après // destruction il ne reste pas encore au moins une page. - if (Liste->Nb_pages_allouees>1) + if (list->Nb_pages_allouees>1) { // On fait faire un undo à la liste, comme ça, la nouvelle page courante // est la page précédente Reculer_dans_une_liste_de_pages(Principal_Backups); // Puis on détruit la dernière page, qui est l'ancienne page courante - Detruire_derniere_page_allouee_de_la_liste(Liste); + Detruire_derniere_page_allouee_de_la_liste(list); } } @@ -659,11 +659,11 @@ void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * Liste) /// GESTION DES BACKUPS /// -int Initialiser_les_listes_de_backups_en_debut_de_programme(int Taille,int Largeur,int Hauteur) +int Initialiser_les_listes_de_backups_en_debut_de_programme(int Taille,int width,int height) { // Taille correspond au nombre de pages que l'on souhaite dans chaque liste // (1 pour la page courante, puis 1 pour chaque backup, soit 2 au minimum). - // Largeur et Hauteur correspondent à la dimension des images de départ. + // width et height correspondent à la dimension des images de départ. S_Page * Page; int Retour=0; @@ -679,8 +679,8 @@ int Initialiser_les_listes_de_backups_en_debut_de_programme(int Taille,int Large Initialiser_S_Page(Page); Upload_infos_page_principal(Page); // On y met les infos sur la dimension de démarrage - Page->Largeur=Largeur; - Page->Hauteur=Hauteur; + Page->Width=width; + Page->Height=height; // On regarde si on peut ajouter cette page if (Nouvelle_page_possible(Page,Principal_Backups,Brouillon_Backups)) @@ -759,7 +759,7 @@ void Nouveau_nombre_de_backups(int Nouveau) // (Nouveau = Nombre de backups, sans compter les pages courantes) } -int Backup_avec_nouvelles_dimensions(int Upload,int Largeur,int Hauteur) +int Backup_avec_nouvelles_dimensions(int Upload,int width,int height) { // Retourne 1 si une nouvelle page est disponible (alors pleine de 0) et // 0 sinon. @@ -777,8 +777,8 @@ int Backup_avec_nouvelles_dimensions(int Upload,int Largeur,int Hauteur) Initialiser_S_Page(Nouvelle_page); Upload_infos_page_principal(Nouvelle_page); - Nouvelle_page->Largeur=Largeur; - Nouvelle_page->Hauteur=Hauteur; + Nouvelle_page->Width=width; + Nouvelle_page->Height=height; if (Nouvelle_page_possible(Nouvelle_page,Principal_Backups,Brouillon_Backups)) { Creer_nouvelle_page(Nouvelle_page,Principal_Backups,Brouillon_Backups); @@ -795,7 +795,7 @@ int Backup_avec_nouvelles_dimensions(int Upload,int Largeur,int Hauteur) return Retour; } -int Backuper_et_redimensionner_brouillon(int Largeur,int Hauteur) +int Backuper_et_redimensionner_brouillon(int width,int height) { // Retourne 1 si la page de dimension souhaitee est disponible en brouillon // et 0 sinon. @@ -812,8 +812,8 @@ int Backuper_et_redimensionner_brouillon(int Largeur,int Hauteur) Initialiser_S_Page(Nouvelle_page); Upload_infos_page_brouillon(Nouvelle_page); - Nouvelle_page->Largeur=Largeur; - Nouvelle_page->Hauteur=Hauteur; + Nouvelle_page->Width=width; + Nouvelle_page->Height=height; if (Nouvelle_page_possible(Nouvelle_page,Brouillon_Backups,Principal_Backups)) { Creer_nouvelle_page(Nouvelle_page,Brouillon_Backups,Principal_Backups); @@ -947,8 +947,8 @@ void Interchanger_image_principale_et_brouillon(void) // un changement de dimensions et va bêtement sortir du mode loupe, alors // que lors d'un changement de page, on veut bien conserver l'état du mode // loupe du brouillon. - Principal_Largeur_image=Principal_Backups->Pages->Largeur; - Principal_Hauteur_image=Principal_Backups->Pages->Hauteur; + Principal_Largeur_image=Principal_Backups->Pages->Width; + Principal_Hauteur_image=Principal_Backups->Pages->Height; Download_infos_page_principal(Principal_Backups->Pages); Download_infos_page_brouillon(Brouillon_Backups->Pages); diff --git a/pages.h b/pages.h index 7db56339..8cb33484 100644 --- a/pages.h +++ b/pages.h @@ -36,8 +36,8 @@ void Download_infos_page_principal(S_Page * Page); void Upload_infos_page_principal(S_Page * Page); void Download_infos_page_brouillon(S_Page * Page); void Upload_infos_page_brouillon(S_Page * Page); -void Download_infos_backup(S_Liste_de_pages * Liste); -int Allouer_une_page(S_Page * Page,int Largeur,int Hauteur); +void Download_infos_backup(S_Liste_de_pages * list); +int Allouer_une_page(S_Page * Page,int width,int height); void Liberer_une_page(S_Page * Page); void Copier_S_page(S_Page * dest,S_Page * Source); int Taille_d_une_page(S_Page * Page); @@ -48,17 +48,17 @@ int Taille_d_une_page(S_Page * Page); /// GESTION DES LISTES DE PAGES /// -void Initialiser_S_Liste_de_pages(S_Liste_de_pages * Liste); -int Allouer_une_liste_de_pages(S_Liste_de_pages * Liste,int Taille); -void Liberer_une_liste_de_pages(S_Liste_de_pages * Liste); -int Taille_d_une_liste_de_pages(S_Liste_de_pages * Liste); -void Reculer_dans_une_liste_de_pages(S_Liste_de_pages * Liste); -void Avancer_dans_une_liste_de_pages(S_Liste_de_pages * Liste); +void Initialiser_S_Liste_de_pages(S_Liste_de_pages * list); +int Allouer_une_liste_de_pages(S_Liste_de_pages * list,int Taille); +void Liberer_une_liste_de_pages(S_Liste_de_pages * list); +int Taille_d_une_liste_de_pages(S_Liste_de_pages * list); +void Reculer_dans_une_liste_de_pages(S_Liste_de_pages * list); +void Avancer_dans_une_liste_de_pages(S_Liste_de_pages * list); int Nouvelle_page_possible(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courante,S_Liste_de_pages * Liste_secondaire); -void Detruire_derniere_page_allouee_de_la_liste(S_Liste_de_pages * Liste); +void Detruire_derniere_page_allouee_de_la_liste(S_Liste_de_pages * list); void Creer_nouvelle_page(S_Page * Nouvelle_page,S_Liste_de_pages * Liste_courante,S_Liste_de_pages * Liste_secondaire); -void Changer_nombre_de_pages_d_une_liste(S_Liste_de_pages * Liste,int Nb); -void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * Liste); +void Changer_nombre_de_pages_d_une_liste(S_Liste_de_pages * list,int number); +void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * list); @@ -66,11 +66,11 @@ void Detruire_la_page_courante_d_une_liste(S_Liste_de_pages * Liste); /// GESTION DES BACKUPS /// -int Initialiser_les_listes_de_backups_en_debut_de_programme(int Taille,int Largeur,int Hauteur); +int Initialiser_les_listes_de_backups_en_debut_de_programme(int Taille,int width,int height); void Detruire_les_listes_de_backups_en_fin_de_programme(void); void Nouveau_nombre_de_backups(int Nouveau); -int Backup_avec_nouvelles_dimensions(int Upload,int Largeur,int Hauteur); -int Backuper_et_redimensionner_brouillon(int Largeur,int Hauteur); +int Backup_avec_nouvelles_dimensions(int Upload,int width,int height); +int Backuper_et_redimensionner_brouillon(int width,int height); void Backup(void); void Undo(void); void Redo(void); diff --git a/palette.c b/palette.c index a711b946..ceee61fa 100644 --- a/palette.c +++ b/palette.c @@ -60,10 +60,10 @@ int Color_Max=255; int Color_DemiPas=0; -void Set_Palette_RGB_Scale(int Grad) +void Set_Palette_RGB_Scale(int scale) { - if (Grad>= 2 && Grad <= 256) - Graduations_RGB = Grad; + if (scale>= 2 && scale <= 256) + Graduations_RGB = scale; } byte Palette_Scale_Component(byte comp) @@ -640,14 +640,14 @@ void Reduce_palette(short * Nb_couleurs_utilisees,int Nb_couleurs_demandees,T_Pa -void Palette_Modifier_jauge(T_Bouton_scroller * Jauge, - word Nb_elements, word Position, +void Palette_Modifier_jauge(T_Bouton_scroller * slider, + word nb_elements, word Position, char * Valeur, short Pos_X) { - Jauge->Nb_elements=Nb_elements; - Jauge->Position=Position; - Calculer_hauteur_curseur_jauge(Jauge); - Fenetre_Dessiner_jauge(Jauge); + slider->Nb_elements=nb_elements; + slider->Position=Position; + Calculer_hauteur_curseur_jauge(slider); + Fenetre_Dessiner_jauge(slider); Print_compteur(Pos_X,172,Valeur,CM_Noir,CM_Clair); } diff --git a/pxdouble.c b/pxdouble.c index cde56b0a..e2b07adf 100644 --- a/pxdouble.c +++ b/pxdouble.c @@ -47,43 +47,43 @@ byte Lit_Pixel_Double (word X,word Y) return *( Ecran + Y * 4 * Largeur_ecran + X * 2); } -void Block_Double (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +void Block_Double (word Debut_X,word Debut_Y,word width,word height,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X*2; rectangle.y=Debut_Y*2; - rectangle.w=Largeur*2; - rectangle.h=Hauteur*2; + rectangle.w=width*2; + rectangle.h=height*2; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); } -void Afficher_partie_de_l_ecran_Double (word Largeur,word Hauteur,word Largeur_image) +void Afficher_partie_de_l_ecran_Double (word width,word height,word image_width) /* Afficher une partie de l'image telle quelle sur l'écran */ { byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src=Principal_Decalage_Y*image_width+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) int y; int dy; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - for (dy=Largeur;dy>0;dy--) + for (dy=width;dy>0;dy--) { *(Dest+1)=*Dest=*Src; Src++; Dest+=2; } // On double la ligne qu'on vient de copier - memcpy(Dest-Largeur*ZOOMX+Largeur_ecran*ZOOMX,Dest-Largeur*ZOOMX,Largeur*ZOOMX); + memcpy(Dest-width*ZOOMX+Largeur_ecran*ZOOMX,Dest-width*ZOOMX,width*ZOOMX); // On passe à la ligne suivante - Src+=Largeur_image-Largeur; - Dest+=Largeur_ecran*4 - Largeur*2; + Src+=image_width-width; + Dest+=Largeur_ecran*4 - width*2; } - //UpdateRect(0,0,Largeur,Hauteur); + //UpdateRect(0,0,width,height); } void Pixel_Preview_Normal_Double (word X,word Y,byte Couleur) @@ -106,46 +106,46 @@ void Pixel_Preview_Loupe_Double (word X,word Y,byte Couleur) && X >= Limite_Gauche_Zoom && X <= Limite_visible_Droite_Zoom) { // On est dedans - int Hauteur; + int height; int Y_Zoom = Table_mul_facteur_zoom[Y-Loupe_Decalage_Y]; if (Menu_Ordonnee - Y_Zoom < Loupe_Facteur) // On ne doit dessiner qu'un morceau du pixel // sinon on dépasse sur le menu - Hauteur = Menu_Ordonnee - Y_Zoom; + height = Menu_Ordonnee - Y_Zoom; else - Hauteur = Loupe_Facteur; + height = Loupe_Facteur; Block_Double( Table_mul_facteur_zoom[X-Loupe_Decalage_X]+Principal_X_Zoom, - Y_Zoom, Loupe_Facteur, Hauteur, Couleur + Y_Zoom, Loupe_Facteur, height, Couleur ); } } -void Ligne_horizontale_XOR_Double(word Pos_X,word Pos_Y,word Largeur) +void Ligne_horizontale_XOR_Double(word Pos_X,word Pos_Y,word width) { //On calcule la valeur initiale de Dest: byte* Dest=Pos_Y*4*Largeur_ecran+Pos_X*2+Ecran; int X; - for (X=0;X0;i--) + for (i=height;i>0;i--) { *Dest=*(Dest+1)=*(Dest+Largeur_ecran*2)=*(Dest+Largeur_ecran*2+1)=~*Dest; Dest+=Largeur_ecran*4; } } -void Display_brush_Color_Double(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Display_brush_Color_Double(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * 4 * Largeur_ecran + Pos_X * 2; @@ -155,10 +155,10 @@ void Display_brush_Color_Double(word Pos_X,word Pos_Y,word x_offset,word y_offse word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -172,14 +172,14 @@ void Display_brush_Color_Double(word Pos_X,word Pos_Y,word x_offset,word y_offse } // On passe à la ligne suivante - Dest = Dest + Largeur_ecran*4 - Largeur*2; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + Largeur_ecran*4 - width*2; + Src = Src + Largeur_brosse - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } void Display_brush_Mono_Double(word Pos_X, word Pos_Y, - word x_offset, word y_offset, word Largeur, word Hauteur, + word x_offset, word y_offset, word width, word height, byte Couleur_de_transparence, byte Couleur, word Largeur_brosse) /* On affiche la brosse en monochrome */ { @@ -189,10 +189,10 @@ void Display_brush_Mono_Double(word Pos_X, word Pos_Y, // la brosse int x,y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) //Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { if (*Src!=Couleur_de_transparence) @@ -204,23 +204,23 @@ void Display_brush_Mono_Double(word Pos_X, word Pos_Y, } // On passe à la ligne suivante - Src+=Largeur_brosse-Largeur; - Dest+=Largeur_ecran*4-Largeur*2; + Src+=Largeur_brosse-width; + Dest+=Largeur_ecran*4-width*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Clear_brush_Double(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word Largeur,word Hauteur,__attribute__((unused))byte Couleur_de_transparence,word Largeur_image) +void Clear_brush_Double(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word width,word height,__attribute__((unused))byte Couleur_de_transparence,word image_width) { byte* Dest=Ecran+Pos_X*2+Pos_Y*4*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src = ( Pos_Y + Principal_Decalage_Y ) * Largeur_image + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src = ( Pos_Y + Principal_Decalage_Y ) * image_width + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) int y; int x; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { *(Dest+Largeur_ecran*2+1)=*(Dest+Largeur_ecran*2)=*(Dest+1)=*Dest=*Src; @@ -231,14 +231,14 @@ void Clear_brush_Double(word Pos_X,word Pos_Y,__attribute__((unused)) word x_off } // On passe à la ligne suivante - Src+=Largeur_image-Largeur; - Dest+=Largeur_ecran*4-Largeur*2; + Src+=image_width-width; + Dest+=Largeur_ecran*4-width*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } // Affiche une brosse (arbitraire) à l'écran -void Affiche_brosse_Double(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Affiche_brosse_Double(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * 4 * Largeur_ecran + Pos_X * 2; @@ -248,10 +248,10 @@ void Affiche_brosse_Double(byte * brush, word Pos_X,word Pos_Y,word x_offset,wor word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -264,57 +264,57 @@ void Affiche_brosse_Double(byte * brush, word Pos_X,word Pos_Y,word x_offset,wor } // On passe à la ligne suivante - Dest = Dest + Largeur_ecran*4 - Largeur*2; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + Largeur_ecran*4 - width*2; + Src = Src + Largeur_brosse - width; } } -void Remap_screen_Double(word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) +void Remap_screen_Double(word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion) { // Dest = coords a l'écran byte* Dest = Ecran + Pos_Y * 4 * Largeur_ecran + Pos_X * 2; int x,y; // Pour chaque ligne - for(y=Hauteur;y>0;y--) + for(y=height;y>0;y--) { // Pour chaque pixel - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { *(Dest+Largeur_ecran*2+1)=*(Dest+Largeur_ecran*2)=*(Dest+1)=*Dest= Table_de_conversion[*Dest]; Dest +=2; } - Dest = Dest + Largeur_ecran*4 - Largeur*2; + Dest = Dest + Largeur_ecran*4 - width*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Afficher_une_ligne_ecran_fast_Double(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_fast_Double(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche toute une ligne de pixels telle quelle. */ /* Utilisée si le buffer contient déja des pixel doublés. */ { - memcpy(Ecran+Pos_X*2+Pos_Y*4*Largeur_ecran,Ligne,Largeur*2); - memcpy(Ecran+Pos_X*2+(Pos_Y*4+2)*Largeur_ecran,Ligne,Largeur*2); + memcpy(Ecran+Pos_X*2+Pos_Y*4*Largeur_ecran,line,width*2); + memcpy(Ecran+Pos_X*2+(Pos_Y*4+2)*Largeur_ecran,line,width*2); } -void Afficher_une_ligne_ecran_Double(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_Double(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche une ligne de pixels en les doublant. */ { int x; byte *Dest; Dest=Ecran+Pos_X*2+Pos_Y*4*Largeur_ecran; - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { - *(Dest+Largeur_ecran*2+1)=*(Dest+Largeur_ecran*2)=*(Dest+1)=*Dest=*Ligne; + *(Dest+Largeur_ecran*2+1)=*(Dest+Largeur_ecran*2)=*(Dest+1)=*Dest=*line; Dest+=2; - Ligne++; + line++; } } void Afficher_une_ligne_transparente_mono_a_l_ecran_Double( - word Pos_X, word Pos_Y, word Largeur, byte* Ligne, + word Pos_X, word Pos_Y, word width, byte* line, byte Couleur_transparence, byte Couleur) // Affiche une ligne à l'écran avec une couleur + transparence. // Utilisé par les brosses en mode zoom @@ -322,28 +322,28 @@ void Afficher_une_ligne_transparente_mono_a_l_ecran_Double( byte* Dest = Ecran+ Pos_Y*ZOOMX*Largeur_ecran + Pos_X*ZOOMX; int x; // Pour chaque pixel - for(x=0;x 0); - Src += Largeur_image; + Src += image_width; } // ATTENTION on n'arrive jamais ici ! } @@ -381,9 +381,9 @@ void Afficher_partie_de_l_ecran_zoomee_Double( // Affiche une partie de la brosse couleur zoomée void Display_brush_Color_zoom_Double(word Pos_X,word Pos_Y, word x_offset,word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin,byte Couleur_de_transparence, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer) { byte* Src = Brosse+y_offset*Largeur_brosse + x_offset; @@ -393,13 +393,13 @@ void Display_brush_Color_zoom_Double(word Pos_X,word Pos_Y, // Pour chaque ligne while(1) { - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche facteur fois la ligne zoomée for(bx=Loupe_Facteur;bx>0;bx--) { - Afficher_une_ligne_transparente_a_l_ecran_Wide(Pos_X,y*ZOOMX,Largeur*Loupe_Facteur,Buffer,Couleur_de_transparence); + Afficher_une_ligne_transparente_a_l_ecran_Wide(Pos_X,y*ZOOMX,width*Loupe_Facteur,Buffer,Couleur_de_transparence); // TODO: pas clair ici - memcpy(Ecran + (y*ZOOMY+1)*ZOOMX*Largeur_ecran + Pos_X*ZOOMX, Ecran + y*ZOOMX*ZOOMY*Largeur_ecran + Pos_X*ZOOMX, Largeur*ZOOMX*Loupe_Facteur); + memcpy(Ecran + (y*ZOOMY+1)*ZOOMX*Largeur_ecran + Pos_X*ZOOMX, Ecran + y*ZOOMX*ZOOMY*Largeur_ecran + Pos_X*ZOOMX, width*ZOOMX*Loupe_Facteur); y++; if(y==Pos_Y_Fin) { @@ -413,10 +413,10 @@ void Display_brush_Color_zoom_Double(word Pos_X,word Pos_Y, void Display_brush_Mono_zoom_Double(word Pos_X, word Pos_Y, word x_offset, word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin, byte Couleur_de_transparence, byte Couleur, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer ) @@ -430,7 +430,7 @@ void Display_brush_Mono_zoom_Double(word Pos_X, word Pos_Y, int BX; // Src = Ligne originale // On éclate la ligne - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche la ligne Facteur fois à l'écran (sur des // lignes consécutives) @@ -441,7 +441,7 @@ void Display_brush_Mono_zoom_Double(word Pos_X, word Pos_Y, { // On affiche la ligne zoomée Afficher_une_ligne_transparente_mono_a_l_ecran_Double( - Pos_X, y, Largeur * Loupe_Facteur, + Pos_X, y, width * Loupe_Facteur, Buffer, Couleur_de_transparence, Couleur ); // On passe à la ligne suivante @@ -450,7 +450,7 @@ void Display_brush_Mono_zoom_Double(word Pos_X, word Pos_Y, if(y == Pos_Y_Fin*ZOOMX) { UpdateRect( Pos_X, Pos_Y, - Largeur * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); + width * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); return; } BX --; @@ -462,17 +462,17 @@ void Display_brush_Mono_zoom_Double(word Pos_X, word Pos_Y, } } -void Clear_brush_zoom_Double(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word Largeur_image,byte * Buffer) +void Clear_brush_zoom_Double(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word image_width,byte * Buffer) { // En fait on va recopier l'image non zoomée dans la partie zoomée ! - byte* Src = Principal_Ecran + y_offset * Largeur_image + x_offset; + byte* Src = Principal_Ecran + y_offset * image_width + x_offset; int y = Pos_Y; int bx; // Pour chaque ligne à zoomer while(1){ - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur*2,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur*2,width); bx=Loupe_Facteur; @@ -480,20 +480,20 @@ void Clear_brush_zoom_Double(word Pos_X,word Pos_Y,word x_offset,word y_offset,w do{ // TODO a verifier Afficher_une_ligne_ecran_fast_Double(Pos_X,y, - Largeur * Loupe_Facteur,Buffer); + width * Loupe_Facteur,Buffer); // Ligne suivante y++; if(y==Pos_Y_Fin) { UpdateRect(Pos_X,Pos_Y, - Largeur*Loupe_Facteur,Pos_Y_Fin-Pos_Y); + width*Loupe_Facteur,Pos_Y_Fin-Pos_Y); return; } bx--; }while(bx!=0); - Src+= Largeur_image; + Src+= image_width; } } diff --git a/pxdouble.h b/pxdouble.h index 09472444..312df620 100644 --- a/pxdouble.h +++ b/pxdouble.h @@ -23,22 +23,22 @@ void Pixel_Double (word X,word Y,byte Couleur); byte Lit_Pixel_Double (word X,word Y); - void Block_Double (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); + void Block_Double (word Debut_X,word Debut_Y,word width,word height,byte Couleur); void Pixel_Preview_Normal_Double (word X,word Y,byte Couleur); void Pixel_Preview_Loupe_Double (word X,word Y,byte Couleur); - void Ligne_horizontale_XOR_Double (word Pos_X,word Pos_Y,word Largeur); - void Ligne_verticale_XOR_Double (word Pos_X,word Pos_Y,word Hauteur); - void Display_brush_Color_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); - void Display_brush_Mono_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); - void Clear_brush_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image); - void Remap_screen_Double (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion); - void Afficher_partie_de_l_ecran_Double (word Largeur,word Hauteur,word Largeur_image); - void Afficher_une_ligne_ecran_Double (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Lire_une_ligne_ecran_Double (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Afficher_partie_de_l_ecran_zoomee_Double(word Largeur,word Hauteur,word Largeur_image,byte * Buffer); - void Display_brush_Color_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); - void Display_brush_Mono_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); - void Clear_brush_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer); - void Affiche_brosse_Double (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); + void Ligne_horizontale_XOR_Double (word Pos_X,word Pos_Y,word width); + void Ligne_verticale_XOR_Double (word Pos_X,word Pos_Y,word height); + void Display_brush_Color_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); + void Display_brush_Mono_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); + void Clear_brush_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word image_width); + void Remap_screen_Double (word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion); + void Afficher_partie_de_l_ecran_Double (word width,word height,word image_width); + void Afficher_une_ligne_ecran_Double (word Pos_X,word Pos_Y,word width,byte * line); + void Lire_une_ligne_ecran_Double (word Pos_X,word Pos_Y,word width,byte * line); + void Afficher_partie_de_l_ecran_zoomee_Double(word width,word height,word image_width,byte * Buffer); + void Display_brush_Color_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); + void Display_brush_Mono_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); + void Clear_brush_zoom_Double (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word image_width,byte * Buffer); + void Affiche_brosse_Double (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); - void Afficher_une_ligne_ecran_fast_Double (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); + void Afficher_une_ligne_ecran_fast_Double (word Pos_X,word Pos_Y,word width,byte * line); diff --git a/pxsimple.c b/pxsimple.c index eaa32f1d..8a48f525 100644 --- a/pxsimple.c +++ b/pxsimple.c @@ -40,35 +40,35 @@ byte Lit_Pixel_Simple (word X,word Y) return *( Ecran + Y * Largeur_ecran + X ); } -void Block_Simple (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +void Block_Simple (word Debut_X,word Debut_Y,word width,word height,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X; rectangle.y=Debut_Y; - rectangle.w=Largeur; - rectangle.h=Hauteur; + rectangle.w=width; + rectangle.h=height; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); } -void Afficher_partie_de_l_ecran_Simple (word Largeur,word Hauteur,word Largeur_image) +void Afficher_partie_de_l_ecran_Simple (word width,word height,word image_width) /* Afficher une partie de l'image telle quelle sur l'écran */ { byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src=Principal_Decalage_Y*image_width+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) int y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); // On passe à la ligne suivante - Src+=Largeur_image; + Src+=image_width; Dest+=Largeur_ecran; } - //UpdateRect(0,0,Largeur,Hauteur); + //UpdateRect(0,0,width,height); } void Pixel_Preview_Normal_Simple (word X,word Y,byte Couleur) @@ -91,46 +91,46 @@ void Pixel_Preview_Loupe_Simple (word X,word Y,byte Couleur) && X >= Limite_Gauche_Zoom && X <= Limite_visible_Droite_Zoom) { // On est dedans - int Hauteur; + int height; int Y_Zoom = Table_mul_facteur_zoom[Y-Loupe_Decalage_Y]; if (Menu_Ordonnee - Y_Zoom < Loupe_Facteur) // On ne doit dessiner qu'un morceau du pixel // sinon on dépasse sur le menu - Hauteur = Menu_Ordonnee - Y_Zoom; + height = Menu_Ordonnee - Y_Zoom; else - Hauteur = Loupe_Facteur; + height = Loupe_Facteur; Block_Simple( Table_mul_facteur_zoom[X-Loupe_Decalage_X]+Principal_X_Zoom, - Y_Zoom, Loupe_Facteur, Hauteur, Couleur + Y_Zoom, Loupe_Facteur, height, Couleur ); } } -void Ligne_horizontale_XOR_Simple(word Pos_X,word Pos_Y,word Largeur) +void Ligne_horizontale_XOR_Simple(word Pos_X,word Pos_Y,word width) { //On calcule la valeur initiale de Dest: byte* Dest=Pos_Y*Largeur_ecran+Pos_X+Ecran; int X; - for (X=0;X 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -156,14 +156,14 @@ void Display_brush_Color_Simple(word Pos_X,word Pos_Y,word x_offset,word y_offse } // On passe à la ligne suivante - Dest = Dest + Largeur_ecran - Largeur; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + Largeur_ecran - width; + Src = Src + Largeur_brosse - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } void Display_brush_Mono_Simple(word Pos_X, word Pos_Y, - word x_offset, word y_offset, word Largeur, word Hauteur, + word x_offset, word y_offset, word width, word height, byte Couleur_de_transparence, byte Couleur, word Largeur_brosse) /* On affiche la brosse en monochrome */ { @@ -173,10 +173,10 @@ void Display_brush_Mono_Simple(word Pos_X, word Pos_Y, // la brosse int x,y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) //Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { if (*Src!=Couleur_de_transparence) @@ -188,33 +188,33 @@ void Display_brush_Mono_Simple(word Pos_X, word Pos_Y, } // On passe à la ligne suivante - Src+=Largeur_brosse-Largeur; - Dest+=Largeur_ecran-Largeur; + Src+=Largeur_brosse-width; + Dest+=Largeur_ecran-width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Clear_brush_Simple(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word Largeur,word Hauteur,__attribute__((unused))byte Couleur_de_transparence,word Largeur_image) +void Clear_brush_Simple(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word width,word height,__attribute__((unused))byte Couleur_de_transparence,word image_width) { byte* Dest=Ecran+Pos_X+Pos_Y*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src = ( Pos_Y + Principal_Decalage_Y ) * Largeur_image + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src = ( Pos_Y + Principal_Decalage_Y ) * image_width + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) int y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); // On passe à la ligne suivante - Src+=Largeur_image; + Src+=image_width; Dest+=Largeur_ecran; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } // Affiche une brosse (arbitraire) à l'écran -void Affiche_brosse_Simple(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Affiche_brosse_Simple(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * Largeur_ecran + Pos_X; @@ -224,10 +224,10 @@ void Affiche_brosse_Simple(byte * brush, word Pos_X,word Pos_Y,word x_offset,wor word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -240,41 +240,41 @@ void Affiche_brosse_Simple(byte * brush, word Pos_X,word Pos_Y,word x_offset,wor } // On passe à la ligne suivante - Dest = Dest + Largeur_ecran - Largeur; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + Largeur_ecran - width; + Src = Src + Largeur_brosse - width; } } -void Remap_screen_Simple(word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) +void Remap_screen_Simple(word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion) { // Dest = coords a l'écran byte* Dest = Ecran + Pos_Y * Largeur_ecran + Pos_X; int x,y; // Pour chaque ligne - for(y=Hauteur;y>0;y--) + for(y=height;y>0;y--) { // Pour chaque pixel - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { *Dest = Table_de_conversion[*Dest]; Dest ++; } - Dest = Dest + Largeur_ecran - Largeur; + Dest = Dest + Largeur_ecran - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Afficher_une_ligne_ecran_Simple(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_Simple(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche toute une ligne de pixels. Utilisé pour les textes. */ { - memcpy(Ecran+Pos_X+Pos_Y*Largeur_ecran,Ligne,Largeur); + memcpy(Ecran+Pos_X+Pos_Y*Largeur_ecran,line,width); } void Afficher_une_ligne_transparente_mono_a_l_ecran_Simple( - word Pos_X, word Pos_Y, word Largeur, byte* Ligne, + word Pos_X, word Pos_Y, word width, byte* line, byte Couleur_transparence, byte Couleur) // Affiche une ligne à l'écran avec une couleur + transparence. // Utilisé par les brosses en mode zoom @@ -282,26 +282,26 @@ void Afficher_une_ligne_transparente_mono_a_l_ecran_Simple( byte* Dest = Ecran+ Pos_Y * Largeur_ecran + Pos_X; int x; // Pour chaque pixel - for(x=0;x 0); - Src += Largeur_image; + Src += image_width; } // ATTENTION on n'arrive jamais ici ! } -void Afficher_une_ligne_transparente_a_l_ecran_Simple(word Pos_X,word Pos_Y,word Largeur,byte* Ligne,byte Couleur_transparence) +void Afficher_une_ligne_transparente_a_l_ecran_Simple(word Pos_X,word Pos_Y,word width,byte* line,byte Couleur_transparence) { - byte* Src = Ligne; + byte* Src = line; byte* Dest = Ecran + Pos_Y * Largeur_ecran + Pos_X; word x; // Pour chaque pixel de la ligne - for(x = Largeur;x > 0;x--) + for(x = width;x > 0;x--) { if(*Src!=Couleur_transparence) *Dest = *Src; @@ -356,9 +356,9 @@ void Afficher_une_ligne_transparente_a_l_ecran_Simple(word Pos_X,word Pos_Y,word // Affiche une partie de la brosse couleur zoomée void Display_brush_Color_zoom_Simple(word Pos_X,word Pos_Y, word x_offset,word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin,byte Couleur_de_transparence, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer) { byte* Src = Brosse+y_offset*Largeur_brosse + x_offset; @@ -368,11 +368,11 @@ void Display_brush_Color_zoom_Simple(word Pos_X,word Pos_Y, // Pour chaque ligne while(1) { - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche facteur fois la ligne zoomée for(bx=Loupe_Facteur;bx>0;bx--) { - Afficher_une_ligne_transparente_a_l_ecran_Simple(Pos_X,y,Largeur*Loupe_Facteur,Buffer,Couleur_de_transparence); + Afficher_une_ligne_transparente_a_l_ecran_Simple(Pos_X,y,width*Loupe_Facteur,Buffer,Couleur_de_transparence); y++; if(y==Pos_Y_Fin) { @@ -386,10 +386,10 @@ void Display_brush_Color_zoom_Simple(word Pos_X,word Pos_Y, void Display_brush_Mono_zoom_Simple(word Pos_X, word Pos_Y, word x_offset, word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin, byte Couleur_de_transparence, byte Couleur, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer ) @@ -403,7 +403,7 @@ void Display_brush_Mono_zoom_Simple(word Pos_X, word Pos_Y, int BX; // Src = Ligne originale // On éclate la ligne - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche la ligne Facteur fois à l'écran (sur des // lignes consécutives) @@ -414,7 +414,7 @@ void Display_brush_Mono_zoom_Simple(word Pos_X, word Pos_Y, { // On affiche la ligne zoomée Afficher_une_ligne_transparente_mono_a_l_ecran_Simple( - Pos_X, y, Largeur * Loupe_Facteur, + Pos_X, y, width * Loupe_Facteur, Buffer, Couleur_de_transparence, Couleur ); // On passe à la ligne suivante @@ -423,7 +423,7 @@ void Display_brush_Mono_zoom_Simple(word Pos_X, word Pos_Y, if(y == Pos_Y_Fin) { UpdateRect( Pos_X, Pos_Y, - Largeur * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); + width * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); return; } BX --; @@ -435,36 +435,36 @@ void Display_brush_Mono_zoom_Simple(word Pos_X, word Pos_Y, } } -void Clear_brush_zoom_Simple(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word Largeur_image,byte * Buffer) +void Clear_brush_zoom_Simple(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word image_width,byte * Buffer) { // En fait on va recopier l'image non zoomée dans la partie zoomée ! - byte* Src = Principal_Ecran + y_offset * Largeur_image + x_offset; + byte* Src = Principal_Ecran + y_offset * image_width + x_offset; int y = Pos_Y; int bx; // Pour chaque ligne à zoomer while(1){ - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); bx=Loupe_Facteur; // Pour chaque ligne do{ Afficher_une_ligne_ecran_Simple(Pos_X,y, - Largeur * Loupe_Facteur,Buffer); + width * Loupe_Facteur,Buffer); // Ligne suivante y++; if(y==Pos_Y_Fin) { UpdateRect(Pos_X,Pos_Y, - Largeur*Loupe_Facteur,Pos_Y_Fin-Pos_Y); + width*Loupe_Facteur,Pos_Y_Fin-Pos_Y); return; } bx--; }while(bx!=0); - Src+= Largeur_image; + Src+= image_width; } } diff --git a/pxsimple.h b/pxsimple.h index 553767da..44f48624 100644 --- a/pxsimple.h +++ b/pxsimple.h @@ -23,25 +23,25 @@ void Pixel_Simple (word X,word Y,byte Couleur); byte Lit_Pixel_Simple (word X,word Y); - void Block_Simple (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); + void Block_Simple (word Debut_X,word Debut_Y,word width,word height,byte Couleur); void Pixel_Preview_Normal_Simple (word X,word Y,byte Couleur); void Pixel_Preview_Loupe_Simple (word X,word Y,byte Couleur); - void Ligne_horizontale_XOR_Simple (word Pos_X,word Pos_Y,word Largeur); - void Ligne_verticale_XOR_Simple (word Pos_X,word Pos_Y,word Hauteur); - void Display_brush_Color_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); - void Display_brush_Mono_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); - void Clear_brush_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image); - void Remap_screen_Simple (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion); - void Afficher_partie_de_l_ecran_Simple (word Largeur,word Hauteur,word Largeur_image); - void Afficher_une_ligne_ecran_Simple (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Lire_une_ligne_ecran_Simple (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Afficher_partie_de_l_ecran_zoomee_Simple(word Largeur,word Hauteur,word Largeur_image,byte * Buffer); - void Display_brush_Color_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); - void Display_brush_Mono_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); - void Clear_brush_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer); - void Affiche_brosse_Simple (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); + void Ligne_horizontale_XOR_Simple (word Pos_X,word Pos_Y,word width); + void Ligne_verticale_XOR_Simple (word Pos_X,word Pos_Y,word height); + void Display_brush_Color_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); + void Display_brush_Mono_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); + void Clear_brush_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word image_width); + void Remap_screen_Simple (word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion); + void Afficher_partie_de_l_ecran_Simple (word width,word height,word image_width); + void Afficher_une_ligne_ecran_Simple (word Pos_X,word Pos_Y,word width,byte * line); + void Lire_une_ligne_ecran_Simple (word Pos_X,word Pos_Y,word width,byte * line); + void Afficher_partie_de_l_ecran_zoomee_Simple(word width,word height,word image_width,byte * Buffer); + void Display_brush_Color_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); + void Display_brush_Mono_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); + void Clear_brush_zoom_Simple (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word image_width,byte * Buffer); + void Affiche_brosse_Simple (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); void Afficher_une_ligne_transparente_mono_a_l_ecran_Simple( - word Pos_X, word Pos_Y, word Largeur, byte* Ligne, + word Pos_X, word Pos_Y, word width, byte* line, byte Couleur_transparence, byte Couleur); -void Afficher_une_ligne_transparente_a_l_ecran_Simple(word Pos_X,word Pos_Y,word Largeur,byte* Ligne,byte Couleur_transparence); +void Afficher_une_ligne_transparente_a_l_ecran_Simple(word Pos_X,word Pos_Y,word width,byte* line,byte Couleur_transparence); diff --git a/pxtall.c b/pxtall.c index b8c477bb..cafc8d28 100644 --- a/pxtall.c +++ b/pxtall.c @@ -42,37 +42,37 @@ byte Lit_Pixel_Tall (word X,word Y) return *( Ecran + Y * 2 * Largeur_ecran + X ); } -void Block_Tall (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +void Block_Tall (word Debut_X,word Debut_Y,word width,word height,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X; rectangle.y=Debut_Y*2; - rectangle.w=Largeur; - rectangle.h=Hauteur*2; + rectangle.w=width; + rectangle.h=height*2; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); } -void Afficher_partie_de_l_ecran_Tall (word Largeur,word Hauteur,word Largeur_image) +void Afficher_partie_de_l_ecran_Tall (word width,word height,word image_width) /* Afficher une partie de l'image telle quelle sur l'écran */ { byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src=Principal_Decalage_Y*image_width+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) int y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); Dest+=Largeur_ecran; - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); // On passe à la ligne suivante - Src+=Largeur_image; + Src+=image_width; Dest+=Largeur_ecran; } - //UpdateRect(0,0,Largeur,Hauteur); + //UpdateRect(0,0,width,height); } void Pixel_Preview_Normal_Tall (word X,word Y,byte Couleur) @@ -95,50 +95,50 @@ void Pixel_Preview_Loupe_Tall (word X,word Y,byte Couleur) && X >= Limite_Gauche_Zoom && X <= Limite_visible_Droite_Zoom) { // On est dedans - int Hauteur; + int height; int Y_Zoom = Table_mul_facteur_zoom[Y-Loupe_Decalage_Y]; if (Menu_Ordonnee - Y_Zoom < Loupe_Facteur) // On ne doit dessiner qu'un morceau du pixel // sinon on dépasse sur le menu - Hauteur = Menu_Ordonnee - Y_Zoom; + height = Menu_Ordonnee - Y_Zoom; else - Hauteur = Loupe_Facteur; + height = Loupe_Facteur; Block_Tall( Table_mul_facteur_zoom[X-Loupe_Decalage_X]+Principal_X_Zoom, - Y_Zoom, Loupe_Facteur, Hauteur, Couleur + Y_Zoom, Loupe_Facteur, height, Couleur ); } } -void Ligne_horizontale_XOR_Tall(word Pos_X,word Pos_Y,word Largeur) +void Ligne_horizontale_XOR_Tall(word Pos_X,word Pos_Y,word width) { //On calcule la valeur initiale de Dest: byte* Dest=Pos_Y*2*Largeur_ecran+Pos_X+Ecran; int X; - for (X=0;X 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -165,14 +165,14 @@ void Display_brush_Color_Tall(word Pos_X,word Pos_Y,word x_offset,word y_offset, } // On passe à la ligne suivante - Dest = Dest + 2 * Largeur_ecran - Largeur; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + 2 * Largeur_ecran - width; + Src = Src + Largeur_brosse - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } void Display_brush_Mono_Tall(word Pos_X, word Pos_Y, - word x_offset, word y_offset, word Largeur, word Hauteur, + word x_offset, word y_offset, word width, word height, byte Couleur_de_transparence, byte Couleur, word Largeur_brosse) /* On affiche la brosse en monochrome */ { @@ -182,10 +182,10 @@ void Display_brush_Mono_Tall(word Pos_X, word Pos_Y, // la brosse int x,y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) //Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { if (*Src!=Couleur_de_transparence) @@ -200,35 +200,35 @@ void Display_brush_Mono_Tall(word Pos_X, word Pos_Y, } // On passe à la ligne suivante - Src+=Largeur_brosse-Largeur; - Dest+=2*Largeur_ecran-Largeur; + Src+=Largeur_brosse-width; + Dest+=2*Largeur_ecran-width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Clear_brush_Tall(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word Largeur,word Hauteur,__attribute__((unused))byte Couleur_de_transparence,word Largeur_image) +void Clear_brush_Tall(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word width,word height,__attribute__((unused))byte Couleur_de_transparence,word image_width) { byte* Dest=Ecran+Pos_X+Pos_Y*2*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src = ( Pos_Y + Principal_Decalage_Y ) * Largeur_image + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src = ( Pos_Y + Principal_Decalage_Y ) * image_width + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) int y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); Dest+=Largeur_ecran; - memcpy(Dest,Src,Largeur); + memcpy(Dest,Src,width); // On passe à la ligne suivante - Src+=Largeur_image; + Src+=image_width; Dest+=Largeur_ecran; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } // Affiche une brosse (arbitraire) à l'écran -void Affiche_brosse_Tall(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Affiche_brosse_Tall(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X; @@ -238,10 +238,10 @@ void Affiche_brosse_Tall(byte * brush, word Pos_X,word Pos_Y,word x_offset,word word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -255,51 +255,51 @@ void Affiche_brosse_Tall(byte * brush, word Pos_X,word Pos_Y,word x_offset,word } // On passe à la ligne suivante - Dest = Dest + Largeur_ecran * 2 - Largeur; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + Largeur_ecran * 2 - width; + Src = Src + Largeur_brosse - width; } } -void Remap_screen_Tall(word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) +void Remap_screen_Tall(word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion) { // Dest = coords a l'écran byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X; int x,y; // Pour chaque ligne - for(y=Hauteur*2;y>0;y--) + for(y=height*2;y>0;y--) { // Pour chaque pixel - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { *Dest = Table_de_conversion[*Dest]; Dest ++; } - Dest = Dest + Largeur_ecran - Largeur; + Dest = Dest + Largeur_ecran - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Afficher_une_ligne_ecran_Tall(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_Tall(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche toute une ligne de pixels. Utilisé pour les textes. */ { - memcpy(Ecran+Pos_X+Pos_Y*2*Largeur_ecran,Ligne,Largeur); - memcpy(Ecran+Pos_X+(Pos_Y*2+1)*Largeur_ecran,Ligne,Largeur); + memcpy(Ecran+Pos_X+Pos_Y*2*Largeur_ecran,line,width); + memcpy(Ecran+Pos_X+(Pos_Y*2+1)*Largeur_ecran,line,width); } -void Lire_une_ligne_ecran_Tall(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Lire_une_ligne_ecran_Tall(word Pos_X,word Pos_Y,word width,byte * line) { - memcpy(Ligne,Largeur_ecran * 2 * Pos_Y + Pos_X + Ecran,Largeur); + memcpy(line,Largeur_ecran * 2 * Pos_Y + Pos_X + Ecran,width); } void Afficher_partie_de_l_ecran_zoomee_Tall( - word Largeur, // Largeur non zoomée - word Hauteur, // Hauteur zoomée - word Largeur_image,byte * Buffer) + word width, // width non zoomée + word height, // height zoomée + word image_width,byte * Buffer) { - byte* Src = Principal_Ecran + Loupe_Decalage_Y * Largeur_image + byte* Src = Principal_Ecran + Loupe_Decalage_Y * image_width + Loupe_Decalage_X; int y = 0; // Ligne en cours de traitement @@ -309,27 +309,27 @@ void Afficher_partie_de_l_ecran_zoomee_Tall( int x; // On éclate la ligne - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On l'affiche Facteur fois, sur des lignes consécutives x = Loupe_Facteur*2; // Pour chaque ligne do{ // On affiche la ligne zoomée Afficher_une_ligne_ecran_Simple( - Principal_X_Zoom, y, Largeur*Loupe_Facteur, + Principal_X_Zoom, y, width*Loupe_Facteur, Buffer ); // On passe à la suivante y++; - if(y==Hauteur*2) + if(y==height*2) { UpdateRect(Principal_X_Zoom,0, - Largeur*Loupe_Facteur,Hauteur); + width*Loupe_Facteur,height); return; } x--; }while (x > 0); - Src += Largeur_image; + Src += image_width; } // ATTENTION on n'arrive jamais ici ! } @@ -337,9 +337,9 @@ void Afficher_partie_de_l_ecran_zoomee_Tall( // Affiche une partie de la brosse couleur zoomée void Display_brush_Color_zoom_Tall(word Pos_X,word Pos_Y, word x_offset,word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin,byte Couleur_de_transparence, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer) { byte* Src = Brosse+y_offset*Largeur_brosse + x_offset; @@ -349,12 +349,12 @@ void Display_brush_Color_zoom_Tall(word Pos_X,word Pos_Y, // Pour chaque ligne while(1) { - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche facteur fois la ligne zoomée for(bx=Loupe_Facteur;bx>0;bx--) { - Afficher_une_ligne_transparente_a_l_ecran_Simple(Pos_X,y*2,Largeur*Loupe_Facteur,Buffer,Couleur_de_transparence); - memcpy(Ecran + (y*2 +1) * Largeur_ecran + Pos_X, Ecran + y*2* Largeur_ecran + Pos_X, Largeur*Loupe_Facteur); + Afficher_une_ligne_transparente_a_l_ecran_Simple(Pos_X,y*2,width*Loupe_Facteur,Buffer,Couleur_de_transparence); + memcpy(Ecran + (y*2 +1) * Largeur_ecran + Pos_X, Ecran + y*2* Largeur_ecran + Pos_X, width*Loupe_Facteur); y++; if(y==Pos_Y_Fin) { @@ -368,10 +368,10 @@ void Display_brush_Color_zoom_Tall(word Pos_X,word Pos_Y, void Display_brush_Mono_zoom_Tall(word Pos_X, word Pos_Y, word x_offset, word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin, byte Couleur_de_transparence, byte Couleur, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer ) @@ -385,7 +385,7 @@ void Display_brush_Mono_zoom_Tall(word Pos_X, word Pos_Y, int BX; // Src = Ligne originale // On éclate la ligne - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche la ligne Facteur fois à l'écran (sur des // lignes consécutives) @@ -396,7 +396,7 @@ void Display_brush_Mono_zoom_Tall(word Pos_X, word Pos_Y, { // On affiche la ligne zoomée Afficher_une_ligne_transparente_mono_a_l_ecran_Simple( - Pos_X, y, Largeur * Loupe_Facteur, + Pos_X, y, width * Loupe_Facteur, Buffer, Couleur_de_transparence, Couleur ); // On passe à la ligne suivante @@ -405,7 +405,7 @@ void Display_brush_Mono_zoom_Tall(word Pos_X, word Pos_Y, if(y == Pos_Y_Fin*2) { UpdateRect( Pos_X, Pos_Y, - Largeur * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); + width * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); return; } BX --; @@ -417,35 +417,35 @@ void Display_brush_Mono_zoom_Tall(word Pos_X, word Pos_Y, } } -void Clear_brush_zoom_Tall(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word Largeur_image,byte * Buffer) +void Clear_brush_zoom_Tall(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word image_width,byte * Buffer) { // En fait on va recopier l'image non zoomée dans la partie zoomée ! - byte* Src = Principal_Ecran + y_offset * Largeur_image + x_offset; + byte* Src = Principal_Ecran + y_offset * image_width + x_offset; int y = Pos_Y; int bx; // Pour chaque ligne à zoomer while(1){ - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); bx=Loupe_Facteur; // Pour chaque ligne do{ Afficher_une_ligne_ecran_Tall(Pos_X,y, - Largeur * Loupe_Facteur,Buffer); + width * Loupe_Facteur,Buffer); // Ligne suivante y++; if(y==Pos_Y_Fin) { UpdateRect(Pos_X,Pos_Y, - Largeur*Loupe_Facteur,Pos_Y_Fin-Pos_Y); + width*Loupe_Facteur,Pos_Y_Fin-Pos_Y); return; } bx--; }while(bx!=0); - Src+= Largeur_image; + Src+= image_width; } } diff --git a/pxtall.h b/pxtall.h index 4b0165b1..52ccf8c5 100644 --- a/pxtall.h +++ b/pxtall.h @@ -23,20 +23,20 @@ void Pixel_Tall (word X,word Y,byte Couleur); byte Lit_Pixel_Tall (word X,word Y); - void Block_Tall (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); + void Block_Tall (word Debut_X,word Debut_Y,word width,word height,byte Couleur); void Pixel_Preview_Normal_Tall (word X,word Y,byte Couleur); void Pixel_Preview_Loupe_Tall (word X,word Y,byte Couleur); - void Ligne_horizontale_XOR_Tall (word Pos_X,word Pos_Y,word Largeur); - void Ligne_verticale_XOR_Tall (word Pos_X,word Pos_Y,word Hauteur); - void Display_brush_Color_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); - void Display_brush_Mono_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); - void Clear_brush_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image); - void Remap_screen_Tall (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion); - void Afficher_partie_de_l_ecran_Tall (word Largeur,word Hauteur,word Largeur_image); - void Afficher_une_ligne_ecran_Tall (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Lire_une_ligne_ecran_Tall (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Afficher_partie_de_l_ecran_zoomee_Tall(word Largeur,word Hauteur,word Largeur_image,byte * Buffer); - void Display_brush_Color_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); - void Display_brush_Mono_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); - void Clear_brush_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer); - void Affiche_brosse_Tall (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); + void Ligne_horizontale_XOR_Tall (word Pos_X,word Pos_Y,word width); + void Ligne_verticale_XOR_Tall (word Pos_X,word Pos_Y,word height); + void Display_brush_Color_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); + void Display_brush_Mono_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); + void Clear_brush_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word image_width); + void Remap_screen_Tall (word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion); + void Afficher_partie_de_l_ecran_Tall (word width,word height,word image_width); + void Afficher_une_ligne_ecran_Tall (word Pos_X,word Pos_Y,word width,byte * line); + void Lire_une_ligne_ecran_Tall (word Pos_X,word Pos_Y,word width,byte * line); + void Afficher_partie_de_l_ecran_zoomee_Tall(word width,word height,word image_width,byte * Buffer); + void Display_brush_Color_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); + void Display_brush_Mono_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); + void Clear_brush_zoom_Tall (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word image_width,byte * Buffer); + void Affiche_brosse_Tall (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); diff --git a/pxwide.c b/pxwide.c index 77324e3a..a3455b80 100644 --- a/pxwide.c +++ b/pxwide.c @@ -41,30 +41,30 @@ byte Lit_Pixel_Wide (word X,word Y) return *( Ecran + Y * 2 * Largeur_ecran + X * 2); } -void Block_Wide (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +void Block_Wide (word Debut_X,word Debut_Y,word width,word height,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X*2; rectangle.y=Debut_Y; - rectangle.w=Largeur*2; - rectangle.h=Hauteur; + rectangle.w=width*2; + rectangle.h=height; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); } -void Afficher_partie_de_l_ecran_Wide (word Largeur,word Hauteur,word Largeur_image) +void Afficher_partie_de_l_ecran_Wide (word width,word height,word image_width) /* Afficher une partie de l'image telle quelle sur l'écran */ { byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src=Principal_Decalage_Y*image_width+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (Src) int y; int dy; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { // On fait une copie de la ligne - for (dy=Largeur;dy>0;dy--) + for (dy=width;dy>0;dy--) { *(Dest+1)=*Dest=*Src; Src++; @@ -72,10 +72,10 @@ void Afficher_partie_de_l_ecran_Wide (word Largeur,word Hauteur,word Largeur_ima } // On passe à la ligne suivante - Src+=Largeur_image-Largeur; - Dest+=(Largeur_ecran - Largeur)*2; + Src+=image_width-width; + Dest+=(Largeur_ecran - width)*2; } - //UpdateRect(0,0,Largeur,Hauteur); + //UpdateRect(0,0,width,height); } void Pixel_Preview_Normal_Wide (word X,word Y,byte Couleur) @@ -98,40 +98,40 @@ void Pixel_Preview_Loupe_Wide (word X,word Y,byte Couleur) && X >= Limite_Gauche_Zoom && X <= Limite_visible_Droite_Zoom) { // On est dedans - int Hauteur; + int height; int Y_Zoom = Table_mul_facteur_zoom[Y-Loupe_Decalage_Y]; if (Menu_Ordonnee - Y_Zoom < Loupe_Facteur) // On ne doit dessiner qu'un morceau du pixel // sinon on dépasse sur le menu - Hauteur = Menu_Ordonnee - Y_Zoom; + height = Menu_Ordonnee - Y_Zoom; else - Hauteur = Loupe_Facteur; + height = Loupe_Facteur; Block_Wide( Table_mul_facteur_zoom[X-Loupe_Decalage_X]+Principal_X_Zoom, - Y_Zoom, Loupe_Facteur, Hauteur, Couleur + Y_Zoom, Loupe_Facteur, height, Couleur ); } } -void Ligne_horizontale_XOR_Wide(word Pos_X,word Pos_Y,word Largeur) +void Ligne_horizontale_XOR_Wide(word Pos_X,word Pos_Y,word width) { //On calcule la valeur initiale de Dest: byte* Dest=Pos_Y*2*Largeur_ecran+Pos_X*2+Ecran; int X; - for (X=0;X0;i--) + for (i=height;i>0;i--) { color=~*Dest; *Dest=color; @@ -140,7 +140,7 @@ void Ligne_verticale_XOR_Wide(word Pos_X,word Pos_Y,word Hauteur) } } -void Display_brush_Color_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Display_brush_Color_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X * 2; @@ -150,10 +150,10 @@ void Display_brush_Color_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset, word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -167,14 +167,14 @@ void Display_brush_Color_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset, } // On passe à la ligne suivante - Dest = Dest + (Largeur_ecran - Largeur)*2; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + (Largeur_ecran - width)*2; + Src = Src + Largeur_brosse - width; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } void Display_brush_Mono_Wide(word Pos_X, word Pos_Y, - word x_offset, word y_offset, word Largeur, word Hauteur, + word x_offset, word y_offset, word width, word height, byte Couleur_de_transparence, byte Couleur, word Largeur_brosse) /* On affiche la brosse en monochrome */ { @@ -184,10 +184,10 @@ void Display_brush_Mono_Wide(word Pos_X, word Pos_Y, // la brosse int x,y; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) //Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { if (*Src!=Couleur_de_transparence) @@ -199,23 +199,23 @@ void Display_brush_Mono_Wide(word Pos_X, word Pos_Y, } // On passe à la ligne suivante - Src+=Largeur_brosse-Largeur; - Dest+=(Largeur_ecran-Largeur)*2; + Src+=Largeur_brosse-width; + Dest+=(Largeur_ecran-width)*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Clear_brush_Wide(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word Largeur,word Hauteur,__attribute__((unused))byte Couleur_de_transparence,word Largeur_image) +void Clear_brush_Wide(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offset,__attribute__((unused)) word y_offset,word width,word height,__attribute__((unused))byte Couleur_de_transparence,word image_width) { byte* Dest=Ecran+Pos_X*2+Pos_Y*2*Largeur_ecran; //On va se mettre en 0,0 dans l'écran (Dest) - byte* Src = ( Pos_Y + Principal_Decalage_Y ) * Largeur_image + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) + byte* Src = ( Pos_Y + Principal_Decalage_Y ) * image_width + Pos_X + Principal_Decalage_X + Principal_Ecran; //Coords de départ ds la source (Src) int y; int x; - for(y=Hauteur;y!=0;y--) + for(y=height;y!=0;y--) // Pour chaque ligne { - for(x=Largeur;x!=0;x--) + for(x=width;x!=0;x--) //Pour chaque pixel { *(Dest+1)=*Dest=*Src; @@ -226,14 +226,14 @@ void Clear_brush_Wide(word Pos_X,word Pos_Y,__attribute__((unused)) word x_offse } // On passe à la ligne suivante - Src+=Largeur_image-Largeur; - Dest+=(Largeur_ecran-Largeur)*2; + Src+=image_width-width; + Dest+=(Largeur_ecran-width)*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } // Affiche une brosse (arbitraire) à l'écran -void Affiche_brosse_Wide(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse) +void Affiche_brosse_Wide(byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse) { // Dest = Position à l'écran byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X * 2; @@ -243,10 +243,10 @@ void Affiche_brosse_Wide(byte * brush, word Pos_X,word Pos_Y,word x_offset,word word x,y; // Pour chaque ligne - for(y = Hauteur;y > 0; y--) + for(y = height;y > 0; y--) { // Pour chaque pixel - for(x = Largeur;x > 0; x--) + for(x = width;x > 0; x--) { // On vérifie que ce n'est pas la transparence if(*Src != Couleur_de_transparence) @@ -259,57 +259,57 @@ void Affiche_brosse_Wide(byte * brush, word Pos_X,word Pos_Y,word x_offset,word } // On passe à la ligne suivante - Dest = Dest + (Largeur_ecran - Largeur)*2; - Src = Src + Largeur_brosse - Largeur; + Dest = Dest + (Largeur_ecran - width)*2; + Src = Src + Largeur_brosse - width; } } -void Remap_screen_Wide(word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion) +void Remap_screen_Wide(word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion) { // Dest = coords a l'écran byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X * 2; int x,y; // Pour chaque ligne - for(y=Hauteur;y>0;y--) + for(y=height;y>0;y--) { // Pour chaque pixel - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { *(Dest+1) = *Dest = Table_de_conversion[*Dest]; Dest +=2; } - Dest = Dest + (Largeur_ecran - Largeur)*2; + Dest = Dest + (Largeur_ecran - width)*2; } - UpdateRect(Pos_X,Pos_Y,Largeur,Hauteur); + UpdateRect(Pos_X,Pos_Y,width,height); } -void Afficher_une_ligne_ecran_fast_Wide(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_fast_Wide(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche toute une ligne de pixels telle quelle. */ /* Utilisée si le buffer contient déja des pixel doublés. */ { - memcpy(Ecran+Pos_X*2+Pos_Y*2*Largeur_ecran,Ligne,Largeur*2); + memcpy(Ecran+Pos_X*2+Pos_Y*2*Largeur_ecran,line,width*2); } -void Afficher_une_ligne_ecran_Wide(word Pos_X,word Pos_Y,word Largeur,byte * Ligne) +void Afficher_une_ligne_ecran_Wide(word Pos_X,word Pos_Y,word width,byte * line) /* On affiche une ligne de pixels en les doublant. */ { int x; byte *Dest; Dest=Ecran+Pos_X*2+Pos_Y*2*Largeur_ecran; - for(x=Largeur;x>0;x--) + for(x=width;x>0;x--) { - *Dest=*Ligne; + *Dest=*line; Dest++; - *Dest=*Ligne; + *Dest=*line; Dest++; - Ligne++; + line++; } } void Afficher_une_ligne_transparente_mono_a_l_ecran_Wide( - word Pos_X, word Pos_Y, word Largeur, byte* Ligne, + word Pos_X, word Pos_Y, word width, byte* line, byte Couleur_transparence, byte Couleur) // Affiche une ligne à l'écran avec une couleur + transparence. // Utilisé par les brosses en mode zoom @@ -317,29 +317,29 @@ void Afficher_une_ligne_transparente_mono_a_l_ecran_Wide( byte* Dest = Ecran+ Pos_Y*2 * Largeur_ecran + Pos_X*2; int x; // Pour chaque pixel - for(x=0;x 0); - Src += Largeur_image; + Src += image_width; } // ATTENTION on n'arrive jamais ici ! } -void Afficher_une_ligne_transparente_a_l_ecran_Wide(word Pos_X,word Pos_Y,word Largeur,byte* Ligne,byte Couleur_transparence) +void Afficher_une_ligne_transparente_a_l_ecran_Wide(word Pos_X,word Pos_Y,word width,byte* line,byte Couleur_transparence) { - byte* Src = Ligne; + byte* Src = line; byte* Dest = Ecran + Pos_Y * 2 * Largeur_ecran + Pos_X * 2; word x; // Pour chaque pixel de la ligne - for(x = Largeur;x > 0;x--) + for(x = width;x > 0;x--) { if(*Src!=Couleur_transparence) { @@ -397,9 +397,9 @@ void Afficher_une_ligne_transparente_a_l_ecran_Wide(word Pos_X,word Pos_Y,word L // Affiche une partie de la brosse couleur zoomée void Display_brush_Color_zoom_Wide(word Pos_X,word Pos_Y, word x_offset,word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin,byte Couleur_de_transparence, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer) { byte* Src = Brosse+y_offset*Largeur_brosse + x_offset; @@ -409,11 +409,11 @@ void Display_brush_Color_zoom_Wide(word Pos_X,word Pos_Y, // Pour chaque ligne while(1) { - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche facteur fois la ligne zoomée for(bx=Loupe_Facteur;bx>0;bx--) { - Afficher_une_ligne_transparente_a_l_ecran_Wide(Pos_X,y,Largeur*Loupe_Facteur,Buffer,Couleur_de_transparence); + Afficher_une_ligne_transparente_a_l_ecran_Wide(Pos_X,y,width*Loupe_Facteur,Buffer,Couleur_de_transparence); y++; if(y==Pos_Y_Fin) { @@ -427,10 +427,10 @@ void Display_brush_Color_zoom_Wide(word Pos_X,word Pos_Y, void Display_brush_Mono_zoom_Wide(word Pos_X, word Pos_Y, word x_offset, word y_offset, - word Largeur, // Largeur non zoomée + word width, // width non zoomée word Pos_Y_Fin, byte Couleur_de_transparence, byte Couleur, - word Largeur_brosse, // Largeur réelle de la brosse + word Largeur_brosse, // width réelle de la brosse byte * Buffer ) @@ -444,7 +444,7 @@ void Display_brush_Mono_zoom_Wide(word Pos_X, word Pos_Y, int BX; // Src = Ligne originale // On éclate la ligne - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur,width); // On affiche la ligne Facteur fois à l'écran (sur des // lignes consécutives) @@ -455,7 +455,7 @@ void Display_brush_Mono_zoom_Wide(word Pos_X, word Pos_Y, { // On affiche la ligne zoomée Afficher_une_ligne_transparente_mono_a_l_ecran_Wide( - Pos_X, y, Largeur * Loupe_Facteur, + Pos_X, y, width * Loupe_Facteur, Buffer, Couleur_de_transparence, Couleur ); // On passe à la ligne suivante @@ -464,7 +464,7 @@ void Display_brush_Mono_zoom_Wide(word Pos_X, word Pos_Y, if(y == Pos_Y_Fin) { UpdateRect( Pos_X, Pos_Y, - Largeur * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); + width * Loupe_Facteur, Pos_Y_Fin - Pos_Y ); return; } BX --; @@ -476,36 +476,36 @@ void Display_brush_Mono_zoom_Wide(word Pos_X, word Pos_Y, } } -void Clear_brush_zoom_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word Largeur_image,byte * Buffer) +void Clear_brush_zoom_Wide(word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,__attribute__((unused)) byte Couleur_de_transparence,word image_width,byte * Buffer) { // En fait on va recopier l'image non zoomée dans la partie zoomée ! - byte* Src = Principal_Ecran + y_offset * Largeur_image + x_offset; + byte* Src = Principal_Ecran + y_offset * image_width + x_offset; int y = Pos_Y; int bx; // Pour chaque ligne à zoomer while(1){ - Zoomer_une_ligne(Src,Buffer,Loupe_Facteur*2,Largeur); + Zoomer_une_ligne(Src,Buffer,Loupe_Facteur*2,width); bx=Loupe_Facteur; // Pour chaque ligne do{ Afficher_une_ligne_ecran_fast_Wide(Pos_X,y, - Largeur * Loupe_Facteur,Buffer); + width * Loupe_Facteur,Buffer); // Ligne suivante y++; if(y==Pos_Y_Fin) { UpdateRect(Pos_X,Pos_Y, - Largeur*Loupe_Facteur,Pos_Y_Fin-Pos_Y); + width*Loupe_Facteur,Pos_Y_Fin-Pos_Y); return; } bx--; }while(bx!=0); - Src+= Largeur_image; + Src+= image_width; } } diff --git a/pxwide.h b/pxwide.h index a9283b8a..a05cfa8d 100644 --- a/pxwide.h +++ b/pxwide.h @@ -23,23 +23,23 @@ void Pixel_Wide (word X,word Y,byte Couleur); byte Lit_Pixel_Wide (word X,word Y); - void Block_Wide (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); + void Block_Wide (word Debut_X,word Debut_Y,word width,word height,byte Couleur); void Pixel_Preview_Normal_Wide (word X,word Y,byte Couleur); void Pixel_Preview_Loupe_Wide (word X,word Y,byte Couleur); - void Ligne_horizontale_XOR_Wide (word Pos_X,word Pos_Y,word Largeur); - void Ligne_verticale_XOR_Wide (word Pos_X,word Pos_Y,word Hauteur); - void Display_brush_Color_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); - void Display_brush_Mono_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); - void Clear_brush_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_image); - void Remap_screen_Wide (word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte * Table_de_conversion); - void Afficher_partie_de_l_ecran_Wide (word Largeur,word Hauteur,word Largeur_image); - void Afficher_une_ligne_ecran_Wide (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Lire_une_ligne_ecran_Wide (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Afficher_partie_de_l_ecran_zoomee_Wide(word Largeur,word Hauteur,word Largeur_image,byte * Buffer); - void Display_brush_Color_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); - void Display_brush_Mono_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); - void Clear_brush_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer); - void Affiche_brosse_Wide (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word Largeur,word Hauteur,byte Couleur_de_transparence,word Largeur_brosse); + void Ligne_horizontale_XOR_Wide (word Pos_X,word Pos_Y,word width); + void Ligne_verticale_XOR_Wide (word Pos_X,word Pos_Y,word height); + void Display_brush_Color_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); + void Display_brush_Mono_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse); + void Clear_brush_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word image_width); + void Remap_screen_Wide (word Pos_X,word Pos_Y,word width,word height,byte * Table_de_conversion); + void Afficher_partie_de_l_ecran_Wide (word width,word height,word image_width); + void Afficher_une_ligne_ecran_Wide (word Pos_X,word Pos_Y,word width,byte * line); + void Lire_une_ligne_ecran_Wide (word Pos_X,word Pos_Y,word width,byte * line); + void Afficher_partie_de_l_ecran_zoomee_Wide(word width,word height,word image_width,byte * Buffer); + void Display_brush_Color_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); + void Display_brush_Mono_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); + void Clear_brush_zoom_Wide (word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word Pos_Y_Fin,byte Couleur_de_transparence,word image_width,byte * Buffer); + void Affiche_brosse_Wide (byte * brush, word Pos_X,word Pos_Y,word x_offset,word y_offset,word width,word height,byte Couleur_de_transparence,word Largeur_brosse); - void Afficher_une_ligne_ecran_fast_Wide (word Pos_X,word Pos_Y,word Largeur,byte * Ligne); - void Afficher_une_ligne_transparente_a_l_ecran_Wide(word Pos_X,word Pos_Y,word Largeur,byte* Ligne,byte Couleur_transparence); + void Afficher_une_ligne_ecran_fast_Wide (word Pos_X,word Pos_Y,word width,byte * line); + void Afficher_une_ligne_transparente_a_l_ecran_Wide(word Pos_X,word Pos_Y,word width,byte* line,byte Couleur_transparence); diff --git a/readini.c b/readini.c index 0afac58a..a7065a37 100644 --- a/readini.c +++ b/readini.c @@ -198,117 +198,117 @@ int Charger_INI_Get_string(FILE * file,char * Buffer,char * Option,char * Retour return 0; } -int Charger_INI_Get_value(char * String,int * Index,int * Value) +int Charger_INI_Get_value(char * String,int * index,int * Value) { // On teste si la valeur actuelle est YES (ou Y): - if (Charger_INI_Seek_pattern(String+(*Index),"yes,")==1) + if (Charger_INI_Seek_pattern(String+(*index),"yes,")==1) { (*Value)=1; - (*Index)+=4; + (*index)+=4; return 0; } else - if (strcmp(String+(*Index),"yes")==0) + if (strcmp(String+(*index),"yes")==0) { (*Value)=1; - (*Index)+=3; + (*index)+=3; return 0; } else - if (Charger_INI_Seek_pattern(String+(*Index),"y,")==1) + if (Charger_INI_Seek_pattern(String+(*index),"y,")==1) { (*Value)=1; - (*Index)+=2; + (*index)+=2; return 0; } else - if (strcmp(String+(*Index),"y")==0) + if (strcmp(String+(*index),"y")==0) { (*Value)=1; - (*Index)+=1; + (*index)+=1; return 0; } else // On teste si la valeur actuelle est NO (ou N): - if (Charger_INI_Seek_pattern(String+(*Index),"no,")==1) + if (Charger_INI_Seek_pattern(String+(*index),"no,")==1) { (*Value)=0; - (*Index)+=3; + (*index)+=3; return 0; } else - if (strcmp(String+(*Index),"no")==0) + if (strcmp(String+(*index),"no")==0) { (*Value)=0; - (*Index)+=2; + (*index)+=2; return 0; } else - if (Charger_INI_Seek_pattern(String+(*Index),"n,")==1) + if (Charger_INI_Seek_pattern(String+(*index),"n,")==1) { (*Value)=0; - (*Index)+=2; + (*index)+=2; return 0; } else - if (strcmp(String+(*Index),"n")==0) + if (strcmp(String+(*index),"n")==0) { (*Value)=0; - (*Index)+=1; + (*index)+=1; return 0; } else - if (String[*Index]=='$') + if (String[*index]=='$') { (*Value)=0; for (;;) { - (*Index)++; + (*index)++; - if ((String[*Index]>='0') && (String[*Index]<='9')) - (*Value)=((*Value)*16)+String[*Index]-'0'; + if ((String[*index]>='0') && (String[*index]<='9')) + (*Value)=((*Value)*16)+String[*index]-'0'; else - if ((String[*Index]>='A') && (String[*Index]<='F')) - (*Value)=((*Value)*16)+String[*Index]-'A'+10; + if ((String[*index]>='A') && (String[*index]<='F')) + (*Value)=((*Value)*16)+String[*index]-'A'+10; else - if (String[*Index]==',') + if (String[*index]==',') { - (*Index)++; + (*index)++; return 0; } else - if (String[*Index]=='\0') + if (String[*index]=='\0') return 0; else return ERREUR_INI_CORROMPU; } } else - if ((String[*Index]>='0') && (String[*Index]<='9')) + if ((String[*index]>='0') && (String[*index]<='9')) { (*Value)=0; for (;;) { - if ((String[*Index]>='0') && (String[*Index]<='9')) - (*Value)=((*Value)*10)+String[*Index]-'0'; + if ((String[*index]>='0') && (String[*index]<='9')) + (*Value)=((*Value)*10)+String[*index]-'0'; else - if (String[*Index]==',') + if (String[*index]==',') { - (*Index)++; + (*index)++; return 0; } else - if (String[*Index]=='\0') + if (String[*index]=='\0') return 0; else return ERREUR_INI_CORROMPU; - (*Index)++; + (*index)++; } } else @@ -399,7 +399,7 @@ int Charger_INI_Get_values(FILE * file,char * Buffer,char * Option,int Nb_values int Charger_INI(T_Config * Conf) { - FILE * Fichier; + FILE * file; char * Buffer; int Valeurs[3]; int Indice; @@ -417,14 +417,14 @@ int Charger_INI(T_Config * Conf) strcpy(Nom_du_fichier,Repertoire_de_configuration); strcat(Nom_du_fichier,"gfx2.ini"); - Fichier=fopen(Nom_du_fichier,"rb"); - if (Fichier==0) + file=fopen(Nom_du_fichier,"rb"); + if (file==0) { // Si le fichier ini est absent on le relit depuis gfx2def.ini strcpy(Nom_du_fichier,Repertoire_des_donnees); strcat(Nom_du_fichier,"gfx2def.ini"); - Fichier=fopen(Nom_du_fichier,"rb"); - if (Fichier == 0) + file=fopen(Nom_du_fichier,"rb"); + if (file == 0) { free(Nom_du_fichier); free(Buffer); @@ -432,40 +432,40 @@ int Charger_INI(T_Config * Conf) } } - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[MOUSE]"))) + if ((Retour=Charger_INI_Reach_group(file,Buffer,"[MOUSE]"))) goto Erreur_Retour; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"X_sensitivity",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"X_sensitivity",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>255)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Indice_Sensibilite_souris_X=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Y_sensitivity",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Y_sensitivity",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>255)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Indice_Sensibilite_souris_Y=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"X_correction_factor",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"X_correction_factor",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>4)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Mouse_Facteur_de_correction_X=Mouse_Facteur_de_correction_X=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Y_correction_factor",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Y_correction_factor",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>4)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Mouse_Facteur_de_correction_Y=Mouse_Facteur_de_correction_Y=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Cursor_aspect",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Cursor_aspect",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>3)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Curseur=Valeurs[0]-1; - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[MENU]"))) + if ((Retour=Charger_INI_Reach_group(file,Buffer,"[MENU]"))) goto Erreur_Retour; Conf->Coul_menu_pref[0].R=0; @@ -475,7 +475,7 @@ int Charger_INI(T_Config * Conf) Conf->Coul_menu_pref[3].V=255; Conf->Coul_menu_pref[3].B=255; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Light_color",3,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Light_color",3,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>63)) goto Erreur_ERREUR_INI_CORROMPU; @@ -487,7 +487,7 @@ int Charger_INI(T_Config * Conf) Conf->Coul_menu_pref[2].V=(Valeurs[1]<<2)|(Valeurs[1]>>4); Conf->Coul_menu_pref[2].B=(Valeurs[2]<<2)|(Valeurs[2]>>4); - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Dark_color",3,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Dark_color",3,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>63)) goto Erreur_ERREUR_INI_CORROMPU; @@ -499,187 +499,187 @@ int Charger_INI(T_Config * Conf) Conf->Coul_menu_pref[1].V=(Valeurs[1]<<2)|(Valeurs[1]>>4); Conf->Coul_menu_pref[1].B=(Valeurs[2]<<2)|(Valeurs[2]>>4); - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Menu_ratio",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Menu_ratio",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>2)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Ratio=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Font",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Font",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>2)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Fonte=Valeurs[0]-1; - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[FILE_SELECTOR]"))) + if ((Retour=Charger_INI_Reach_group(file,Buffer,"[FILE_SELECTOR]"))) goto Erreur_Retour; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Show_hidden_files",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Show_hidden_files",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Lire_les_fichiers_caches=Valeurs[0]?-1:0; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Show_hidden_directories",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Show_hidden_directories",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Lire_les_repertoires_caches=Valeurs[0]?-1:0; -/* if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Show_system_directories",1,Valeurs))) +/* if ((Retour=Charger_INI_Get_values (file,Buffer,"Show_system_directories",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Lire_les_repertoires_systemes=Valeurs[0]?-1:0; */ - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Preview_delay",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Preview_delay",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>256)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Chrono_delay=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Maximize_preview",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Maximize_preview",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Maximize_preview=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Find_file_fast",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Find_file_fast",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>2)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Find_file_fast=Valeurs[0]; - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[LOADING]"))) + if ((Retour=Charger_INI_Reach_group(file,Buffer,"[LOADING]"))) goto Erreur_Retour; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Auto_set_resolution",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Auto_set_resolution",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Auto_set_res=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Set_resolution_according_to",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Set_resolution_according_to",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>2)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Set_resolution_according_to=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Clear_palette",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Clear_palette",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Clear_palette=Valeurs[0]; - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[MISCELLANEOUS]"))) + if ((Retour=Charger_INI_Reach_group(file,Buffer,"[MISCELLANEOUS]"))) goto Erreur_Retour; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Draw_limits",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Draw_limits",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Afficher_limites_image=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Adjust_brush_pick",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Adjust_brush_pick",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Adjust_brush_pick=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Coordinates",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Coordinates",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>2)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Coords_rel=2-Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Backup",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Backup",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Backup=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Undo_pages",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Undo_pages",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>99)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Nb_pages_Undo=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Gauges_scrolling_speed_Left",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Gauges_scrolling_speed_Left",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>255)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Valeur_tempo_jauge_gauche=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Gauges_scrolling_speed_Right",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Gauges_scrolling_speed_Right",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<1) || (Valeurs[0]>255)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Valeur_tempo_jauge_droite=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Auto_save",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Auto_save",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Auto_save=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Vertices_per_polygon",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Vertices_per_polygon",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<2) || (Valeurs[0]>16384)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Nb_max_de_vertex_par_polygon=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Fast_zoom",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Fast_zoom",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Fast_zoom=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Separate_colors",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Separate_colors",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Couleurs_separees=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"FX_feedback",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"FX_feedback",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->FX_Feedback=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Safety_colors",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Safety_colors",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Safety_colors=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Opening_message",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Opening_message",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Opening_message=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Clear_with_stencil",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Clear_with_stencil",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Clear_with_stencil=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Auto_discontinuous",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Auto_discontinuous",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Auto_discontinuous=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Save_screen_size_in_GIF",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Save_screen_size_in_GIF",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; Conf->Taille_ecran_dans_GIF=Valeurs[0]; - if ((Retour=Charger_INI_Get_values (Fichier,Buffer,"Auto_nb_colors_used",1,Valeurs))) + if ((Retour=Charger_INI_Get_values (file,Buffer,"Auto_nb_colors_used",1,Valeurs))) goto Erreur_Retour; if ((Valeurs[0]<0) || (Valeurs[0]>1)) goto Erreur_ERREUR_INI_CORROMPU; @@ -687,27 +687,27 @@ int Charger_INI(T_Config * Conf) // Optionnel, le mode video par défaut (à partir de beta 97.0%) Conf->Resolution_par_defaut=0; - if (!Charger_INI_Get_string (Fichier,Buffer,"Default_video_mode",Libelle_valeur)) + if (!Charger_INI_Get_string (file,Buffer,"Default_video_mode",Libelle_valeur)) { - int Mode = Conversion_argument_mode(Libelle_valeur); - if (Mode>=0) - Conf->Resolution_par_defaut=Mode; + int mode = Conversion_argument_mode(Libelle_valeur); + if (mode>=0) + Conf->Resolution_par_defaut=mode; } // Optionnel, les dimensions de la fenêtre (à partir de beta 97.0%) - Mode_video[0].Largeur = 640; - Mode_video[0].Hauteur = 480; - if (!Charger_INI_Get_values (Fichier,Buffer,"Default_window_size",2,Valeurs)) + Mode_video[0].Width = 640; + Mode_video[0].Height = 480; + if (!Charger_INI_Get_values (file,Buffer,"Default_window_size",2,Valeurs)) { if ((Valeurs[0]>=320)) - Mode_video[0].Largeur = Valeurs[0]; + Mode_video[0].Width = Valeurs[0]; if ((Valeurs[1]>=200)) - Mode_video[0].Hauteur = Valeurs[1]; + Mode_video[0].Height = Valeurs[1]; } Conf->Mouse_Merge_movement=100; // Optionnel, paramètre pour grouper les mouvements souris (>98.0%) - if (!Charger_INI_Get_values (Fichier,Buffer,"Merge_movement",1,Valeurs)) + if (!Charger_INI_Get_values (file,Buffer,"Merge_movement",1,Valeurs)) { if ((Valeurs[0]<0) || (Valeurs[0]>1000)) goto Erreur_ERREUR_INI_CORROMPU; @@ -716,7 +716,7 @@ int Charger_INI(T_Config * Conf) Conf->Palette_Cells_X=8; // Optionnel, nombre de colonnes dans la palette (>98.0%) - if (!Charger_INI_Get_values (Fichier,Buffer,"Palette_Cells_X",1,Valeurs)) + if (!Charger_INI_Get_values (file,Buffer,"Palette_Cells_X",1,Valeurs)) { if ((Valeurs[0]<1) || (Valeurs[0]>256)) goto Erreur_ERREUR_INI_CORROMPU; @@ -724,7 +724,7 @@ int Charger_INI(T_Config * Conf) } Conf->Palette_Cells_Y=8; // Optionnel, nombre de lignes dans la palette (>98.0%) - if (!Charger_INI_Get_values (Fichier,Buffer,"Palette_Cells_Y",1,Valeurs)) + if (!Charger_INI_Get_values (file,Buffer,"Palette_Cells_Y",1,Valeurs)) { if (Valeurs[0]<1 || Valeurs[0]>16) goto Erreur_ERREUR_INI_CORROMPU; @@ -738,7 +738,7 @@ int Charger_INI(T_Config * Conf) } for (Indice=0;IndiceResolution_par_defaut)))) goto Erreur_Retour; - Valeurs[0]=Mode_video[0].Largeur; - Valeurs[1]=Mode_video[0].Hauteur; + Valeurs[0]=Mode_video[0].Width; + Valeurs[1]=Mode_video[0].Height; if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Default_window_size",2,Valeurs,0))) goto Erreur_Retour; diff --git a/sdlscreen.c b/sdlscreen.c index 0210929f..2029bd26 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -44,18 +44,18 @@ #endif #endif -void Set_Mode_SDL(int *Largeur, int *Hauteur, int Fullscreen) +void Set_Mode_SDL(int *width, int *height, int fullscreen) /* On règle la résolution de l'écran */ { - Ecran_SDL=SDL_SetVideoMode(*Largeur,*Hauteur,8,(Fullscreen?SDL_FULLSCREEN:0)|SDL_RESIZABLE); + Ecran_SDL=SDL_SetVideoMode(*width,*height,8,(fullscreen?SDL_FULLSCREEN:0)|SDL_RESIZABLE); if(Ecran_SDL != NULL) { // Vérification du mode obtenu (ce n'est pas toujours celui demandé) - if (Ecran_SDL->w != *Largeur || Ecran_SDL->h != *Hauteur) + if (Ecran_SDL->w != *width || Ecran_SDL->h != *height) { DEBUG("Erreur mode video obtenu différent de celui demandé !!",0); - *Largeur = Ecran_SDL->w; - *Hauteur = Ecran_SDL->h; + *width = Ecran_SDL->w; + *height = Ecran_SDL->h; } Ecran=Ecran_SDL->pixels; } @@ -106,14 +106,14 @@ void Flush_update(void) } -void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur) +void UpdateRect(short X, short Y, unsigned short width, unsigned short height) { #if (METHODE_UPDATE == METHODE_UPDATE_MULTI_RECTANGLE) - SDL_UpdateRect(Ecran_SDL, X*Pixel_width, Y*Pixel_height, Largeur*Pixel_width, Hauteur*Pixel_height); + SDL_UpdateRect(Ecran_SDL, X*Pixel_width, Y*Pixel_height, width*Pixel_width, height*Pixel_height); #endif #if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) - if (Largeur==0 || Hauteur==0) + if (width==0 || height==0) { Min_X=Min_Y=0; Max_X=Max_Y=10000; @@ -124,10 +124,10 @@ void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur Min_X = X; if (Y < Min_Y) Min_Y = Y; - if (X+Largeur>Max_X) - Max_X=X+Largeur; - if (Y+Hauteur>Max_Y) - Max_Y=Y+Hauteur; + if (X+width>Max_X) + Max_X=X+width; + if (Y+height>Max_Y) + Max_Y=Y+height; } #endif @@ -172,12 +172,12 @@ byte * Surface_en_bytefield(SDL_Surface *Source, byte * dest) } // Convertit un index de palette en couleur RGB 24 bits -SDL_Color Conversion_couleur_SDL(byte Index) +SDL_Color Conversion_couleur_SDL(byte index) { SDL_Color Couleur; - Couleur.r = Principal_Palette[Index].R; - Couleur.g = Principal_Palette[Index].V; - Couleur.b = Principal_Palette[Index].B; + Couleur.r = Principal_Palette[index].R; + Couleur.g = Principal_Palette[index].V; + Couleur.b = Principal_Palette[index].B; Couleur.unused = 255; return Couleur; } diff --git a/sdlscreen.h b/sdlscreen.h index 376f3ec5..37386a92 100644 --- a/sdlscreen.h +++ b/sdlscreen.h @@ -30,7 +30,7 @@ SDL_Rect ** Liste_Modes_Videos_SDL; byte* Ecran; - void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur); + void UpdateRect(short X, short Y, unsigned short width, unsigned short height); void Flush_update(void); byte * Surface_en_bytefield(SDL_Surface *Source, byte * dest); SDL_Color Conversion_couleur_SDL(byte); diff --git a/shade.c b/shade.c index b4b4c90d..cbe749c0 100644 --- a/shade.c +++ b/shade.c @@ -79,14 +79,14 @@ void Shade_Blocs_degrades(void) // On commence par compter le nombre de shades while (cursor<512) { - while ((cursor<512) && (Shade_Liste[Shade_Actuel].Liste[cursor]&0xFF00)) + while ((cursor<512) && (Shade_Liste[Shade_Actuel].List[cursor]&0xFF00)) cursor++; if (cursor<512) { Nb_shades++; while ( (cursor<512) - && (!(Shade_Liste[Shade_Actuel].Liste[cursor]&0xFF00)) ) + && (!(Shade_Liste[Shade_Actuel].List[cursor]&0xFF00)) ) cursor++; } } @@ -112,11 +112,11 @@ void Shade_Blocs_degrades(void) if (Shade_traite>Ancien_shade_traite) { // On commence par sauter tous les vides jusqu'au prochain shade - while ((cursor<512) && (Shade_Liste[Shade_Actuel].Liste[cursor]&0xFF00)) + while ((cursor<512) && (Shade_Liste[Shade_Actuel].List[cursor]&0xFF00)) cursor++; Debut_shade=cursor; // puis regarde sa taille - while ((cursor<512) && (!(Shade_Liste[Shade_Actuel].Liste[cursor]&0xFF00))) + while ((cursor<512) && (!(Shade_Liste[Shade_Actuel].List[cursor]&0xFF00))) cursor++; Taille_shade=cursor-Debut_shade; Ancien_shade_traite=Shade_traite; @@ -124,7 +124,7 @@ void Shade_Blocs_degrades(void) for (Pos_X=Debut_X;Pos_X=Select_Debut) && (Position<=Select_Fin)) { @@ -188,10 +188,10 @@ void Afficher_couleur_case_selectionnee(word Select_Debut,word Select_Fin) char Chaine[4]; if ((Select_Debut!=Select_Fin) - || (Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0x0100)) + || (Shade_Liste[Shade_Actuel].List[Select_Debut]&0x0100)) strcpy(Chaine," "); else - Num2str(Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0xFF,Chaine,3); + Num2str(Shade_Liste[Shade_Actuel].List[Select_Debut]&0xFF,Chaine,3); Print_dans_fenetre(213,115,Chaine,CM_Noir,CM_Clair); } @@ -210,11 +210,11 @@ void Afficher_couleur_selectionnee(word Select_Debut,word Select_Fin) } -void Afficher_mode_du_shade(short X,short Y,byte Mode) +void Afficher_mode_du_shade(short X,short Y,byte mode) { char Chaine[7]; - switch (Mode) + switch (mode) { case MODE_SHADE_NORMAL : strcpy(Chaine,"Normal"); @@ -232,26 +232,26 @@ void Afficher_mode_du_shade(short X,short Y,byte Mode) void Afficher_tout_le_shade(word Select_Debut1,word Select_Fin1, word Select_Debut2,word Select_Fin2) { - word Ligne, Colonne; + word line, Colonne; word Position; - for (Ligne=0; Ligne<8; Ligne++) + for (line=0; line<8; line++) for (Colonne=0; Colonne<64; Colonne++) { - Position=(Ligne<<6)+Colonne; + Position=(line<<6)+Colonne; // On regarde si c'est une couleur ou un bloc vide - if (Shade_Liste[Shade_Actuel].Liste[Position]&0x0100) // Vide + if (Shade_Liste[Shade_Actuel].List[Position]&0x0100) // Vide { - Fenetre_Afficher_cadre_bombe((Colonne<<2)+8,(Ligne*7)+127,4,4); + Fenetre_Afficher_cadre_bombe((Colonne<<2)+8,(line*7)+127,4,4); Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+9)), - Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+128)), + Fenetre_Pos_Y+(Menu_Facteur_Y*((line*7)+128)), Menu_Facteur_X<<1,Menu_Facteur_Y<<1,CM_Clair); } else // Couleur Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+8)), - Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+127)), + Fenetre_Pos_Y+(Menu_Facteur_Y*((line*7)+127)), Menu_Facteur_X<<2,Menu_Facteur_Y<<2, - Shade_Liste[Shade_Actuel].Liste[Position]&0xFF); + Shade_Liste[Shade_Actuel].List[Position]&0xFF); } UpdateRect(Fenetre_Pos_X+7*Menu_Facteur_X,Fenetre_Pos_Y+126*Menu_Facteur_Y,Menu_Facteur_X*((64<<2)+2),Menu_Facteur_Y*((8<<2)+2)); Tagger_shades(Select_Debut2,Select_Fin2); @@ -274,10 +274,10 @@ void Supprimer_shade(word Select_Debut,word Select_Fin) } for (Select_Fin++;Select_Fin<512;Select_Debut++,Select_Fin++) - Shade_Liste[Shade_Actuel].Liste[Select_Debut]=Shade_Liste[Shade_Actuel].Liste[Select_Fin]; + Shade_Liste[Shade_Actuel].List[Select_Debut]=Shade_Liste[Shade_Actuel].List[Select_Fin]; for (;Select_Debut<512;Select_Debut++) - Shade_Liste[Shade_Actuel].Liste[Select_Debut]=0x0100; + Shade_Liste[Shade_Actuel].List[Select_Debut]=0x0100; } @@ -298,11 +298,11 @@ void Inserer_shade(byte Premiere_couleur, byte Derniere_couleur, word Select_Deb Limite=512-Select_Debut; for (cursor=0; cursor<512; cursor++) { - if (!(Shade_Liste[Shade_Actuel].Liste[cursor]&0x0100)) + if (!(Shade_Liste[Shade_Actuel].List[cursor]&0x0100)) for (Temp=Premiere_couleur; Temp<=Derniere_couleur; Temp++) if ( (Temp-Premiere_couleur=Limite;cursor--) - Shade_Liste[Shade_Actuel].Liste[cursor]=Shade_Liste[Shade_Actuel].Liste[cursor-Temp]; + Shade_Liste[Shade_Actuel].List[cursor]=Shade_Liste[Shade_Actuel].List[cursor-Temp]; for (cursor=Select_Debut+Temp;Select_Debut=512) return; for (cursor=511;cursor>Position;cursor--) - Shade_Liste[Shade_Actuel].Liste[cursor]=Shade_Liste[Shade_Actuel].Liste[cursor-1]; + Shade_Liste[Shade_Actuel].List[cursor]=Shade_Liste[Shade_Actuel].List[cursor-1]; - Shade_Liste[Shade_Actuel].Liste[Position]=0x0100; + Shade_Liste[Shade_Actuel].List[Position]=0x0100; } @@ -380,7 +380,7 @@ void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) // On fait une copie de la liste Shade_temporaire=(word *)malloc(512*sizeof(word)); - memcpy(Shade_temporaire,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Shade_temporaire,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // On calcul les dernières couleurs de chaque bloc. Fin_1=Debut_Bloc_1+Taille_du_bloc-1; @@ -392,7 +392,7 @@ void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) for (Pos_1=Debut_Bloc_1,Pos_2=Fin_1+1;Pos_1<=Fin_2;Pos_1++) { // Il faut transformer la case Pos_1 en Pos_2: - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; + Shade_Liste[Shade_Actuel].List[Pos_1]=Shade_temporaire[Pos_2]; // On gère la mise à jour de Pos_2 if (Pos_2==Fin_2) Pos_2=Debut_Bloc_1; @@ -407,7 +407,7 @@ void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) for (Pos_1=Debut_Bloc_2,Pos_2=Debut_Bloc_1;Pos_1<=Fin_1;Pos_1++) { // Il faut transformer la couleur Pos_1 en Pos_2: - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; + Shade_Liste[Shade_Actuel].List[Pos_1]=Shade_temporaire[Pos_2]; // On gère la mise à jour de Pos_2 if (Pos_2==Fin_1) Pos_2=Debut_Bloc_2; @@ -421,9 +421,9 @@ void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) for (Pos_1=Debut_Bloc_1,Pos_2=Debut_Bloc_2;Pos_1<=Fin_1;Pos_1++,Pos_2++) { // On échange les cases - Temp =Shade_Liste[Shade_Actuel].Liste[Pos_1]; - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_Liste[Shade_Actuel].Liste[Pos_2]; - Shade_Liste[Shade_Actuel].Liste[Pos_2]=Temp; + Temp =Shade_Liste[Shade_Actuel].List[Pos_1]; + Shade_Liste[Shade_Actuel].List[Pos_1]=Shade_Liste[Shade_Actuel].List[Pos_2]; + Shade_Liste[Shade_Actuel].List[Pos_2]=Temp; } } @@ -521,8 +521,8 @@ int Menu_Shade(void) Num2str(Shade_Actuel+1,Chaine,1); Print_dans_fenetre(210,55,Chaine,CM_Noir,CM_Clair); - memcpy(Buffer ,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer ,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*310,Menu_Facteur_Y*190); @@ -597,7 +597,7 @@ int Menu_Shade(void) Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); Afficher_curseur(); // On place le nouveau shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); break; case 3 : // Gestion de la zone de définition de shades @@ -616,14 +616,14 @@ int Menu_Shade(void) break; case 6 : // Copy - memcpy(Buffer,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); break; case 7 : // Paste // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // Et on le modifie - memcpy(Shade_Liste[Shade_Actuel].Liste,Buffer,512*sizeof(word)); + memcpy(Shade_Liste[Shade_Actuel].List,Buffer,512*sizeof(word)); Effacer_curseur(); Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); Afficher_curseur(); @@ -631,7 +631,7 @@ int Menu_Shade(void) case 8 : // Insert // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // Et on le modifie if (Premiere_couleur<=Derniere_couleur) Temp=Derniere_couleur-Premiere_couleur; @@ -683,7 +683,7 @@ int Menu_Shade(void) case 9 : // Delete // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // Et on le modifie Supprimer_shade(Select_Debut,Select_Fin); if (Select_Debut<=Select_Fin) @@ -697,7 +697,7 @@ int Menu_Shade(void) case 10 : // Blank // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // Et on le modifie if (Fenetre_Attribut1==A_DROITE) // Click droit { @@ -733,7 +733,7 @@ int Menu_Shade(void) Temp2=Select_Debut; } while (Temp<=Temp2) - Shade_Liste[Shade_Actuel].Liste[Temp++]=0x0100; + Shade_Liste[Shade_Actuel].List[Temp++]=0x0100; } Effacer_curseur(); @@ -743,7 +743,7 @@ int Menu_Shade(void) case 11 : // Invert // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].List,512*sizeof(word)); // Et on le modifie if (Select_Debut<=Select_Fin) { @@ -758,9 +758,9 @@ int Menu_Shade(void) for (;TempTAILLE_MAXI_PINCEAU) Largeur=TAILLE_MAXI_PINCEAU; - if (Hauteur>TAILLE_MAXI_PINCEAU) Hauteur=TAILLE_MAXI_PINCEAU; - Pinceau_Largeur=Largeur; - Pinceau_Hauteur=Hauteur; + if (width<1) width=1; + if (height<1) height=1; + if (width>TAILLE_MAXI_PINCEAU) width=TAILLE_MAXI_PINCEAU; + if (height>TAILLE_MAXI_PINCEAU) height=TAILLE_MAXI_PINCEAU; + Pinceau_Largeur=width; + Pinceau_Hauteur=height; Pinceau_Decalage_X=Pinceau_Largeur>>1; Pinceau_Decalage_Y=Pinceau_Hauteur>>1; switch (Pinceau_Forme) diff --git a/special.h b/special.h index af4a4677..573b5aff 100644 --- a/special.h +++ b/special.h @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -void Modifier_pinceau(int Largeur, int Hauteur); +void Modifier_pinceau(int width, int height); void Retrecir_pinceau(void); void Grossir_pinceau(void); diff --git a/struct.h b/struct.h index f20994f6..fabcb712 100644 --- a/struct.h +++ b/struct.h @@ -66,8 +66,8 @@ typedef struct T_Bouton_normal short Numero; word Pos_X; word Pos_Y; - word Largeur; - word Hauteur; + word Width; + word Height; byte Clickable; byte Repetable; word Raccourci; @@ -87,7 +87,7 @@ typedef struct T_Bouton_scroller short Numero; word Pos_X; word Pos_Y; - word Hauteur; + word Height; word Nb_elements; word Nb_visibles; word Position; @@ -100,15 +100,15 @@ typedef struct T_Bouton_special short Numero; word Pos_X; word Pos_Y; - word Largeur; - word Hauteur; + word Width; + word Height; struct T_Bouton_special * Next; } T_Bouton_special; typedef struct T_Dropdown_choix { short Numero; - const char * Libelle; + const char * Label; struct T_Dropdown_choix * Next; } T_Dropdown_choix; @@ -117,8 +117,8 @@ typedef struct T_Bouton_dropdown short Numero; word Pos_X; word Pos_Y; - word Largeur; - word Hauteur; + word Width; + word Height; byte Affiche_choix; // The selected item's label is printed in the dropdown area byte Affiche_centre; // Center labels (otherwise, align left) byte Affiche_fleche; // Display a "down" arrow box in top right @@ -166,7 +166,7 @@ typedef struct // Déclaration d'une info de shade typedef struct { - word Liste[512]; // Liste de couleurs + word List[512]; // Liste de couleurs byte Pas; // Pas d'incrémentation/décrémentation byte Mode; // Mode d'utilisation (Normal/Boucle/Non-saturé) } T_Shade; @@ -178,8 +178,8 @@ typedef struct typedef struct { byte Etat; - word Largeur; - word Hauteur; + word Width; + word Height; } __attribute__((__packed__)) Config_Mode_video; typedef struct @@ -259,8 +259,8 @@ typedef struct typedef struct { byte * Image; // Bitmap de l'image - int Largeur; // Largeur du bitmap - int Hauteur; // Hauteur du bitmap + int Width; // Largeur du bitmap + int Height; // Hauteur du bitmap T_Palette Palette; // Palette de l'image char Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image diff --git a/texte.c b/texte.c index eae926b0..bc279c7f 100644 --- a/texte.c +++ b/texte.c @@ -59,10 +59,10 @@ typedef struct T_FONTE { - char * Nom; + char * Name; int EstTrueType; int EstImage; - char Libelle[22]; + char Label[22]; // Liste chainée simple struct T_FONTE * Suivante; @@ -82,15 +82,15 @@ int Compare_fontes(T_FONTE * Fonte1, T_FONTE * Fonte2) return -1; if (Fonte2->EstImage && !Fonte1->EstImage) return 1; - return strcmp(Fonte1->Libelle, Fonte2->Libelle); + return strcmp(Fonte1->Label, Fonte2->Label); } // Ajout d'une fonte à la liste. -void Ajout_fonte(const char *Nom) +void Ajout_fonte(const char *name) { char * Nom_fonte; T_FONTE * Fonte; - int Taille=strlen(Nom)+1; + int Taille=strlen(name)+1; int Indice; // Détermination du type: @@ -100,24 +100,24 @@ void Ajout_fonte(const char *Nom) if (Taille < 6) return; char strFontName[512]; - CFStringRef CFSFontName;// = CFSTR(Nom); + CFStringRef CFSFontName;// = CFSTR(name); - CFSFontName = CFStringCreateWithBytes(NULL, (UInt8 *) Nom, Taille - 1, kCFStringEncodingASCII, false); + CFSFontName = CFStringCreateWithBytes(NULL, (UInt8 *) name, Taille - 1, kCFStringEncodingASCII, false); // Fix some funny names CFStringGetCString(CFSFontName, strFontName, 512, kCFStringEncodingASCII); // Now we have a printable font name, use it - Nom = strFontName; + name = strFontName; #else if (Taille<5 || - Nom[Taille-5]!='.') + name[Taille-5]!='.') return; #endif Fonte = (T_FONTE *)malloc(sizeof(T_FONTE)); - switch (EXTID(tolower(Nom[Taille-4]), tolower(Nom[Taille-3]), tolower(Nom[Taille-2]))) + switch (EXTID(tolower(name[Taille-4]), tolower(name[Taille-3]), tolower(name[Taille-2]))) { case EXTID('t','t','f'): case EXTID('f','o','n'): @@ -142,7 +142,7 @@ void Ajout_fonte(const char *Nom) break; default: #ifdef __macosx__ - if(strcasecmp(&Nom[Taille-6], "dfont") == 0) + if(strcasecmp(&name[Taille-6], "dfont") == 0) { Fonte->EstTrueType = 1; Fonte->EstImage = 0; @@ -158,19 +158,19 @@ void Ajout_fonte(const char *Nom) #endif } - Fonte->Nom = (char *)malloc(Taille); - strcpy(Fonte->Nom, Nom); - // Libelle - strcpy(Fonte->Libelle, " "); + Fonte->Name = (char *)malloc(Taille); + strcpy(Fonte->Name, name); + // Label + strcpy(Fonte->Label, " "); if (Fonte->EstTrueType) - Fonte->Libelle[17]=Fonte->Libelle[18]='T'; // Logo TT - Nom_fonte=Position_dernier_slash(Fonte->Nom); + Fonte->Label[17]=Fonte->Label[18]='T'; // Logo TT + Nom_fonte=Position_dernier_slash(Fonte->Name); if (Nom_fonte==NULL) - Nom_fonte=Fonte->Nom; + Nom_fonte=Fonte->Name; else Nom_fonte++; for (Indice=0; Indice < 17 && Nom_fonte[Indice]!='\0' && Nom_fonte[Indice]!='.'; Indice++) - Fonte->Libelle[Indice]=Nom_fonte[Indice]; + Fonte->Label[Indice]=Nom_fonte[Indice]; // Gestion Liste Fonte->Suivante = NULL; @@ -187,10 +187,10 @@ void Ajout_fonte(const char *Nom) Compare = Compare_fontes(Fonte, Liste_fontes_debut); if (Compare<=0) { - if (Compare==0 && !strcmp(Fonte->Nom, Liste_fontes_debut->Nom)) + if (Compare==0 && !strcmp(Fonte->Name, Liste_fontes_debut->Name)) { // Doublon - free(Fonte->Nom); + free(Fonte->Name); free(Fonte); return; } @@ -206,10 +206,10 @@ void Ajout_fonte(const char *Nom) while (Fonte_cherchee->Suivante && (Compare=Compare_fontes(Fonte, Fonte_cherchee->Suivante))>0) Fonte_cherchee=Fonte_cherchee->Suivante; // Après Fonte_cherchee - if (Compare==0 && strcmp(Fonte->Nom, Fonte_cherchee->Suivante->Nom)==0) + if (Compare==0 && strcmp(Fonte->Name, Fonte_cherchee->Suivante->Name)==0) { // Doublon - free(Fonte->Nom); + free(Fonte->Name); free(Fonte); return; } @@ -229,7 +229,7 @@ char * Nom_fonte(int Indice) return ""; while (Indice--) Fonte = Fonte->Suivante; - return Fonte->Nom; + return Fonte->Name; } @@ -238,20 +238,20 @@ char * Nom_fonte(int Indice) char * Libelle_fonte(int Indice) { T_FONTE *Fonte; - static char Libelle[20]; + static char label[20]; - strcpy(Libelle, " "); + strcpy(label, " "); // Recherche de la fonte Fonte = Liste_fontes_debut; if (Indice<0 ||Indice>=Fonte_nombre) - return Libelle; + return label; while (Indice--) Fonte = Fonte->Suivante; // Libellé - strcpy(Libelle, Fonte->Libelle); - return Libelle; + strcpy(label, Fonte->Label); + return label; } @@ -368,7 +368,7 @@ int Support_TrueType() #ifndef NOTTF -byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int Italic, int *Largeur, int *Hauteur) +byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int italic, int *width, int *height) { TTF_Font *Fonte; SDL_Surface * TexteColore; @@ -388,7 +388,7 @@ byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int anti } // Style Style=0; - if (Italic) + if (italic) Style|=TTF_STYLE_ITALIC; if (bold) Style|=TTF_STYLE_BOLD; @@ -440,8 +440,8 @@ byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int anti *(BrosseRetour+Indice)=Fore_color; } } - *Largeur=Texte8Bit->w; - *Hauteur=Texte8Bit->h; + *width=Texte8Bit->w; + *height=Texte8Bit->h; SDL_FreeSurface(Texte8Bit); TTF_CloseFont(Fonte); return BrosseRetour; @@ -449,7 +449,7 @@ byte *Rendu_Texte_TTF(const char *Chaine, int Numero_fonte, int Taille, int anti #endif -byte *Rendu_Texte_SFont(const char *Chaine, int Numero_fonte, int *Largeur, int *Hauteur) +byte *Rendu_Texte_SFont(const char *Chaine, int Numero_fonte, int *width, int *height) { SFont_Font *Fonte; SDL_Surface * TexteColore; @@ -468,10 +468,10 @@ byte *Rendu_Texte_SFont(const char *Chaine, int Numero_fonte, int *Largeur, int } // Calcul des dimensions - *Hauteur=SFont_TextHeight(Fonte); - *Largeur=SFont_TextWidth(Fonte, Chaine); + *height=SFont_TextHeight(Fonte); + *width=SFont_TextWidth(Fonte, Chaine); // Allocation d'une surface SDL - TexteColore=SDL_CreateRGBSurface(SDL_SWSURFACE, *Largeur, *Hauteur, 24, 0, 0, 0, 0); + TexteColore=SDL_CreateRGBSurface(SDL_SWSURFACE, *width, *height, 24, 0, 0, 0, 0); // Rendu du texte SFont_Write(TexteColore, Fonte, 0, 0, Chaine); if (!TexteColore) @@ -499,9 +499,9 @@ byte *Rendu_Texte_SFont(const char *Chaine, int Numero_fonte, int *Largeur, int // Crée une brosse à partir des paramètres de texte demandés. -// Si cela réussit, la fonction place les dimensions dans Largeur et Hauteur, +// Si cela réussit, la fonction place les dimensions dans width et height, // et retourne l'adresse du bloc d'octets. -byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int Italic, int *Largeur, int *Hauteur) +byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int italic, int *width, int *height) { T_FONTE *Fonte = Liste_fontes_debut; int Indice=Numero_fonte; @@ -515,14 +515,14 @@ byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int antialia if (Fonte->EstTrueType) { #ifndef NOTTF - return Rendu_Texte_TTF(Chaine, Numero_fonte, Taille, antialias, bold, Italic, Largeur, Hauteur); + return Rendu_Texte_TTF(Chaine, Numero_fonte, Taille, antialias, bold, italic, width, height); #else return NULL; #endif } else { - return Rendu_Texte_SFont(Chaine, Numero_fonte, Largeur, Hauteur); + return Rendu_Texte_SFont(Chaine, Numero_fonte, width, height); } } diff --git a/texte.h b/texte.h index efefdeef..10116dbc 100644 --- a/texte.h +++ b/texte.h @@ -25,9 +25,9 @@ void Initialisation_Texte(void); // Informe si texte.c a été compilé avec l'option de support TrueType ou pas. int Support_TrueType(void); // Ajout d'une fonte à la liste. -void Ajout_fonte(char *Nom); +void Ajout_fonte(char *name); // Crée une brosse à partir des paramètres de texte demandés. -byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int Italic, int *Largeur, int *Hauteur); +byte *Rendu_Texte(const char *Chaine, int Numero_fonte, int Taille, int antialias, int bold, int italic, int *width, int *height); // Trouve le libellé d'affichage d'une fonte par son numéro char * Libelle_fonte(int Indice); // Trouve le nom d'une fonte par son numéro diff --git a/translat/english.txt b/translat/english.txt index 10a3d1fc..9fccd827 100644 --- a/translat/english.txt +++ b/translat/english.txt @@ -1653,237 +1653,237 @@ Extension FX_Feedback old_fx_feedback_screen Facteur -Facteur_A -Facteur_B -Facteur_de_zoom +factor_a +factor_b +zoom_factor Famille Fast_zoom Fichier -Fichier_le_plus_ressemblant -Fichier_recherche -FileName +most_matching_filename +quicksearch_filename +filename Filler Filler1 Filler2 -Filtre -Fin -Fin_1 -Fin_2 -Fin_Bleu -Fin_Compteur_X -Fin_Compteur_Y -Fin_Rouge -Fin_Vert -Fin_X -Fin_X_Loupe -Fin_Y -Fin_Y_Loupe -Fin_block +filter +End +end_1 +end_2 +end_blue +end_counter_x +end_counter_y +end_red +end_green +end_x +end_x_mag +end_y +end_y_mag +block_end Find_file_fast -Float_temporaire -Fname +temp_float +filename Fonction -Fonte1 -Fonte2 -Fonte_cherchee +font_1 +font_2 +searched_font Format -Format_demande -Format_fichier -Format_fichier_initial +selected_format +File_format +initial_file_format Forme -Forme_curseur_avant_remplissage +cursor_shape_before_fill Fullscreen Grad -Group -Group_upper +group +group_upper H Hauteur Hauteur_Curseur_jauge -Hauteur_boite -Hauteur_cellule -Hauteur_choisie +box_height +cell_height +chosen_height Hauteur_curseur Hauteur_image -Hauteur_image_initiale -Hauteur_maxi_jauge +initial_image_height +max_slider_height Header Height Home I -Icone +icon Id_field_size Ident -Il_faut_liberer -Il_faut_remapper +need_to_free +need_to_remp Image -Image_en_24b -Image_modifiee_initiale +image_is_24b +initial_image_is_modified Image_type_code -Incr_X +incr_x Index -Indicateur -Indice -Indice2 -IndiceBit -IndiceConfig -IndiceLecteur -IndiceOrdo -Indice_Reduction_palette -Indice_Sensibilite_souris_X -Indice_Sensibilite_souris_Y -Indice_Touche -Indice_bouton -Indice_bouton_precedent -Indice_buffer -Indice_choix +Indicator +index +index2 +bit_index +config_index +drive_index +order_index +reducer_index +Mouse_sensitivity_index_x +Mouse_sensitivity_index_y +key_index +button_index +prev_button_number +buffer_index +choice_index Indice_chunk Indice_config -Indice_couleur -Indice_de_caractere -Indice_de_couleur -Indice_de_facteur +color_index +char_index +color_index +factor_index Indice_de_lecture -Indice_de_ligne -Indice_de_multiplication -Indice_destination -Indice_facteur -Indice_fenetre -Indice_mode -Indice_palette -Indice_pattern -Selected_index -Indice_source +line_index +mult_index +dest_index +factor_index +window_index +mode_index +pal_index +pattern_index +selected_index +source_index Indice_touche -Indice_valeur -Informations_Disque -Ini_existe -Initial_X -Initial_Y +value_index +disk_info +ini_file_exists +initial_x +initial_y Inversion Italic Jauge -Jauge_Colonnes -Jauge_Lignes -Jauge_RGBScale -Jauge_Reduction -Jauge_bleue -Jauge_rouge -Jauge_verte +columns_slider +lines_slider +rgb_scale_slider +reduce_slider +blue_slider +red_slider +green_slider Jump Kind L -Effective_L -La_liste_est_triee +effective_w +list_is_sorted Largeur -Largeur_brosse -Largeur_buffer -Largeur_choisie -Largeur_choix -Largeur_de_la_fenetre -Dest_width -Largeur_destination -Largeur_en_caracteres -Largeur_image -Largeur_image_initiale -Largeur_ligne -Largeur_lue -Largeur_reelle -Largeur_source -Last_pixel -Le_fichier_existe +brush_width +buffer_width +chosen_width +Dropdown_width +window_width +dest_width +destination_width +width_in_characters +Image_width +initial_image_width +line_width +width_read +real_width +source_width +last_pixel +file_already_exists Lettre -Lettre_soulignee -Lettres_identiques +undersc_letter +matching_letters Libelle -Libelle_valeur -Lien +value_label +hyperlink Ligne -Ligne_de_depart -Ligne_modifiee -Ligne_originale -Ligne_zoomee +start_line +line_is_modified +original_line +zoomed_line Lignes -Limite_atteinte_Bas -Limite_atteinte_Droite -Limite_atteinte_Gauche -Limite_atteinte_Haut -Limite_courante_Bas -Limite_courante_Haut -Lire_les_fichiers_caches -Lire_les_repertoires_caches -Lire_les_repertoires_systemes +bottom_reached +right_reached +left_reached +top_reached +current_limit_bottom +current_limit_top +Show_hidden_files +Show_hidden_directories +Show_system_directories Liste -Liste_a_raboter -Liste_courante -Liste_secondaire -Liste_tempo -Litteral +list_to_reduce +current_list +secondary_list +temp_list +litteral Load Longueur -Loop_Backup -Lu +loop_backup +byte_read Manufacturer Mask Masque -Masque_icone -Matrice_Zone_saisie -Matrice_choisie +icon_mask +matrix_input +chosen_matrix MaxPos Maximize_preview -Meilleur_mode -Meilleure_couleur_1 -Meilleure_couleur_2 -Meilleure_difference -Meilleure_largeur -Message +best_mode +best_color_1 +best_color_2 +best_difference +best_width +message MessageErreur Methode -Mod +mod Mode -Mode1 -Mode2 -Mode_choisi -Mode_dans_lequel_on_demarre -Modes_a_sauver -Modificateur -Modifieur -Modifs_effectuees +mode1 +mode2 +selected_mode +starting_videomode +modes_to_save +modifiers +modifier +changes_made Mot -Mot_temporaire +temp_word Moteur_Dernier_bouton_clicke Moteur_Type_dernier_bouton_clicke -MouseK_Original -Mouse_Merge_movement -NB_FONTES +original_mouse_k +Mouse_merge_movement +NB_FONTS Nb -Nb_Couleurs +nb_colors Nb_bits -Nb_bits_a_traiter -Nb_bits_en_cours -Nb_bits_initial +nb_bits_to_process +current_nb_bits +initial_nb_bits Nb_bits_pixel -Nb_bits_traites -Nb_choix -Nb_couleurs -Nb_couleurs_demandees -Nb_couleurs_utilisees +nb_bits_processed +nb_choices +nb_colors +nb_colors_asked +used_colors Nb_elements Nb_elements_visibles -Nb_lignes -Nb_max_de_vertex_par_polygon -Nb_pages_Undo -Nb_pages_allouees -Nb_shades -Nb_texte -Nb_valeurs -Nb_values_expected -Nb_values_to_set +nb_lines +Nb_max_vertices_per_polygon +Max_undo_pages +Nb_pages_allocated +nb_shades +nb_text_chunks +nb_values +nb_expected_values +nb_values_to_set Nb_visibles -Nbbits -Ne_pas_restaurer -New_Brosse -New_Brosse_Hauteur -New_Brosse_Largeur +Nb_bits +do_not_restore +new_brush +new_brush_height +new_brush_width Next Noir Nom diff --git a/translat/translations.xls b/translat/translations.xls index c6307c608b41ef00050bdac638fbe9d5fe074d01..c3173d3b3fb86b62ab477a8b783c768919f45432 100644 GIT binary patch literal 272896 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 diff --git a/windows.c b/windows.c index d8a19870..62703676 100644 --- a/windows.c +++ b/windows.c @@ -67,7 +67,7 @@ void Pixel_dans_fenetre(word X,word Y,byte Couleur) // -- Cadre général avec couleurs paramètrables -- -void Fenetre_Afficher_cadre_general(word Pos_X,word Pos_Y,word Largeur,word Hauteur, +void Fenetre_Afficher_cadre_general(word Pos_X,word Pos_Y,word width,word height, byte Couleur_HG,byte Couleur_BD,byte Couleur_S,byte Couleur_CHG,byte Couleur_CBD) // Paramètres de couleurs: // Couleur_HG =Bords Haut et Gauche @@ -79,60 +79,60 @@ void Fenetre_Afficher_cadre_general(word Pos_X,word Pos_Y,word Largeur,word Haut // Bord haut (sans les extrémités) Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X), Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), - (Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_HG); + (width-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_HG); // Bord bas (sans les extrémités) Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X), - Fenetre_Pos_Y+((Pos_Y+Hauteur-1)*Menu_Facteur_Y), - (Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_BD); + Fenetre_Pos_Y+((Pos_Y+height-1)*Menu_Facteur_Y), + (width-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_BD); // Bord gauche (sans les extrémités) Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X), Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y), - Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_HG); + Menu_Facteur_X,(height-2)*Menu_Facteur_Y,Couleur_HG); // Bord droite (sans les extrémités) - Block(Fenetre_Pos_X+((Pos_X+Largeur-1)*Menu_Facteur_X), + Block(Fenetre_Pos_X+((Pos_X+width-1)*Menu_Facteur_X), Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y), - Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_BD); + Menu_Facteur_X,(height-2)*Menu_Facteur_Y,Couleur_BD); // Coin haut gauche Pixel_dans_fenetre(Pos_X,Pos_Y,Couleur_CHG); // Coin haut droite - Pixel_dans_fenetre(Pos_X+Largeur-1,Pos_Y,Couleur_S); + Pixel_dans_fenetre(Pos_X+width-1,Pos_Y,Couleur_S); // Coin bas droite - Pixel_dans_fenetre(Pos_X+Largeur-1,Pos_Y+Hauteur-1,Couleur_CBD); + Pixel_dans_fenetre(Pos_X+width-1,Pos_Y+height-1,Couleur_CBD); // Coin bas gauche - Pixel_dans_fenetre(Pos_X,Pos_Y+Hauteur-1,Couleur_S); + Pixel_dans_fenetre(Pos_X,Pos_Y+height-1,Couleur_S); } // -- Cadre dont tout le contour est d'une seule couleur -- -void Fenetre_Afficher_cadre_mono(word Pos_X,word Pos_Y,word Largeur,word Hauteur,byte Couleur) +void Fenetre_Afficher_cadre_mono(word Pos_X,word Pos_Y,word width,word height,byte Couleur) { - Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,Couleur,Couleur,Couleur,Couleur,Couleur); + Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,width,height,Couleur,Couleur,Couleur,Couleur,Couleur); } // -- Cadre creux: foncé en haut-gauche et clair en bas-droite -- -void Fenetre_Afficher_cadre_creux(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +void Fenetre_Afficher_cadre_creux(word Pos_X,word Pos_Y,word width,word height) { - Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Blanc,CM_Clair,CM_Fonce,CM_Blanc); + Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,width,height,CM_Fonce,CM_Blanc,CM_Clair,CM_Fonce,CM_Blanc); } // -- Cadre bombé: clair en haut-gauche et foncé en bas-droite -- -void Fenetre_Afficher_cadre_bombe(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +void Fenetre_Afficher_cadre_bombe(word Pos_X,word Pos_Y,word width,word height) { - Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Blanc,CM_Fonce,CM_Clair,CM_Blanc,CM_Fonce); + Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,width,height,CM_Blanc,CM_Fonce,CM_Clair,CM_Blanc,CM_Fonce); } // -- Cadre de séparation: un cadre bombé dans un cadre creux (3D!!!) -- -void Fenetre_Afficher_cadre(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +void Fenetre_Afficher_cadre(word Pos_X,word Pos_Y,word width,word height) { - Fenetre_Afficher_cadre_creux(Pos_X,Pos_Y,Largeur,Hauteur); - Fenetre_Afficher_cadre_bombe(Pos_X+1,Pos_Y+1,Largeur-2,Hauteur-2); + Fenetre_Afficher_cadre_creux(Pos_X,Pos_Y,width,height); + Fenetre_Afficher_cadre_bombe(Pos_X+1,Pos_Y+1,width-2,height-2); } @@ -226,7 +226,7 @@ void Afficher_palette_du_menu(void) { int Couleur; byte Hauteur_cellule=32/Menu_Cellules_Y; - // Largeur: Menu_Taille_couleur + // width: Menu_Taille_couleur if (Menu_visible) { @@ -305,8 +305,8 @@ void Changer_cellules_palette() // Mise à jour de la taille du bouton dans le menu. C'est pour pas que // la bordure noire soit active. - Bouton[BOUTON_CHOIX_COL].Largeur=(Menu_Taille_couleur*Menu_Cellules_X)-1; - Bouton[BOUTON_CHOIX_COL].Hauteur=32/Menu_Cellules_Y*Menu_Cellules_Y-1; + Bouton[BOUTON_CHOIX_COL].Width=(Menu_Taille_couleur*Menu_Cellules_X)-1; + Bouton[BOUTON_CHOIX_COL].Height=32/Menu_Cellules_Y*Menu_Cellules_Y-1; } // Retrouve la couleur sur laquelle pointe le curseur souris. @@ -318,10 +318,10 @@ void Changer_cellules_palette() int Couleur_palette() { int Col; - int Ligne; - Ligne=(((Mouse_Y-Menu_Ordonnee)/Menu_Facteur_Y)-2)/(32/Menu_Cellules_Y); + int line; + line=(((Mouse_Y-Menu_Ordonnee)/Menu_Facteur_Y)-2)/(32/Menu_Cellules_Y); - Col=Couleur_debut_palette+Ligne+ + Col=Couleur_debut_palette+line+ ((((Mouse_X/Menu_Facteur_X)-(LARGEUR_MENU+1))/Menu_Taille_couleur)*Menu_Cellules_Y); if (Col<0 || Col>255) return -1; @@ -818,7 +818,7 @@ void Afficher_sprite_dans_menu(int Numero_bouton,int Numero_sprite) Pos_menu_Y=Bouton[Numero_bouton].Decalage_Y; Pos_menu_X=Bouton[Numero_bouton].Decalage_X; - if (Bouton[Numero_bouton].Forme != FORME_BOUTON_TRIANGLE_BAS_DROITE) + if (Bouton[Numero_bouton].Shape != FORME_BOUTON_TRIANGLE_BAS_DROITE) { Pos_menu_Y+=1; Pos_menu_X+=1; @@ -998,21 +998,21 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) word Couleur,Vraie_couleur; word Debut_X,Debut_Y; word Fin_X,Fin_Y; - word Largeur; - word Hauteur; + word width; + word height; word Coin_X=Fenetre_Pos_X+Fenetre_Largeur*Menu_Facteur_X; // |_ Coin bas-droit word Coin_Y=Fenetre_Pos_Y+Fenetre_Hauteur*Menu_Facteur_Y; // | de la fenêtre +1 if (Config.Couleurs_separees) { - Largeur=(Menu_Taille_couleur-1)*Menu_Facteur_X; - Hauteur=Menu_Facteur_Y*(32/Menu_Cellules_Y-1); + width=(Menu_Taille_couleur-1)*Menu_Facteur_X; + height=Menu_Facteur_Y*(32/Menu_Cellules_Y-1); } else { - Largeur=Menu_Taille_couleur*Menu_Facteur_X; - Hauteur=Menu_Facteur_Y*(32/Menu_Cellules_Y); + width=Menu_Taille_couleur*Menu_Facteur_X; + height=Menu_Facteur_Y*(32/Menu_Cellules_Y); } for (Couleur=0,Vraie_couleur=Couleur_debut_palette;Couleur=Coin_Y) || (Fin_X<=Fenetre_Pos_X) || (Debut_X>=Coin_X) ) - Block(Debut_X,Debut_Y,Largeur,Hauteur,Vraie_couleur); + Block(Debut_X,Debut_Y,width,height,Vraie_couleur); else { @@ -1038,14 +1038,14 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) if ( (Fin_X>Coin_X) && (Fin_Y>Coin_Y) ) { Block(Coin_X,Debut_Y,Fin_X-Coin_X,Coin_Y-Debut_Y,Vraie_couleur); - Block(Debut_X,Coin_Y,Largeur,Fin_Y-Coin_Y,Vraie_couleur); + Block(Debut_X,Coin_Y,width,Fin_Y-Coin_Y,Vraie_couleur); } else { if (Fin_Y>Coin_Y) - Block(Debut_X,Coin_Y,Largeur,Fin_Y-Coin_Y,Vraie_couleur); + Block(Debut_X,Coin_Y,width,Fin_Y-Coin_Y,Vraie_couleur); else - Block(Coin_X,Debut_Y,Fin_X-Coin_X,Hauteur,Vraie_couleur); + Block(Coin_X,Debut_Y,Fin_X-Coin_X,height,Vraie_couleur); } } } @@ -1056,10 +1056,10 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) if (Fin_Y>Coin_Y) { Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,Coin_Y-Debut_Y,Vraie_couleur); - Block(Debut_X,Coin_Y,Largeur,Fin_Y-Coin_Y,Vraie_couleur); + Block(Debut_X,Coin_Y,width,Fin_Y-Coin_Y,Vraie_couleur); } else - Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,Hauteur,Vraie_couleur); + Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,height,Vraie_couleur); } else { @@ -1067,12 +1067,12 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) { Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,Coin_Y-Debut_Y,Vraie_couleur); Block(Coin_X,Debut_Y,Fin_X-Coin_X,Coin_Y-Debut_Y,Vraie_couleur); - Block(Debut_X,Coin_Y,Largeur,Fin_Y-Coin_Y,Vraie_couleur); + Block(Debut_X,Coin_Y,width,Fin_Y-Coin_Y,Vraie_couleur); } else { - Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,Hauteur,Vraie_couleur); - Block(Coin_X,Debut_Y,Fin_X-Coin_X,Hauteur,Vraie_couleur); + Block(Debut_X,Debut_Y,Fenetre_Pos_X-Debut_X,height,Vraie_couleur); + Block(Coin_X,Debut_Y,Fin_X-Coin_X,height,Vraie_couleur); } } } @@ -1088,8 +1088,8 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) relative_x = ((short)Debut_X - (short)Fenetre_Pos_X); relative_y = ((short)Debut_Y - (short)Fenetre_Pos_Y); - for (Pos_Y=relative_y;Pos_Y<(relative_y+Hauteur)&&Pos_Y=0&&Pos_Y>=0) Pixel_fond(Pos_X,Pos_Y,Vraie_couleur); } @@ -1425,11 +1425,11 @@ void Afficher_barre_de_split(void) // -- Afficher une barre horizontale XOR zoomée -void Ligne_horizontale_XOR_Zoom(short Pos_X, short Pos_Y, short Largeur) +void Ligne_horizontale_XOR_Zoom(short Pos_X, short Pos_Y, short width) { short Pos_X_reelle=Principal_X_Zoom+(Pos_X-Loupe_Decalage_X)*Loupe_Facteur; short Pos_Y_reelle=(Pos_Y-Loupe_Decalage_Y)*Loupe_Facteur; - short Largeur_reelle=Largeur*Loupe_Facteur; + short Largeur_reelle=width*Loupe_Facteur; short Pos_Y_Fin=(Pos_Y_reelle+Loupe_Facteur=Principal_X_Zoom) ) ) || (Fenetre) || (Forme_curseur==FORME_CURSEUR_SABLIER) ) - Forme=Forme_curseur; + shape=Forme_curseur; else - Forme=FORME_CURSEUR_FLECHE; + shape=FORME_CURSEUR_FLECHE; - switch(Forme) + switch(shape) { case FORME_CURSEUR_CIBLE : if (!Cacher_pinceau) @@ -1607,8 +1607,8 @@ void Afficher_curseur(void) case FORME_CURSEUR_FLECHE : case FORME_CURSEUR_SABLIER : - Debut_X=Mouse_X-Curseur_Decalage_X[Forme]; - Debut_Y=Mouse_Y-Curseur_Decalage_Y[Forme]; + Debut_X=Mouse_X-Curseur_Decalage_X[shape]; + Debut_Y=Mouse_Y-Curseur_Decalage_Y[shape]; for (Pos_X=Debut_X,Compteur_X=0;Compteur_X<15;Pos_X++,Compteur_X++) { if(Pos_X<0) continue; @@ -1617,7 +1617,7 @@ void Afficher_curseur(void) { if(Pos_Y<0) continue; if(Pos_Y>=Hauteur_ecran) break; - Couleur=SPRITE_CURSEUR[Forme][Compteur_Y][Compteur_X]; + Couleur=SPRITE_CURSEUR[shape][Compteur_Y][Compteur_X]; // On sauvegarde dans FOND_CURSEUR pour restaurer plus tard FOND_CURSEUR[Compteur_Y][Compteur_X]=Lit_pixel(Pos_X,Pos_Y); if (Couleur!=CM_Trans) @@ -1631,7 +1631,7 @@ void Afficher_curseur(void) Pos_X=Pinceau_X-Principal_Decalage_X; Pos_Y=Pinceau_Y-Principal_Decalage_Y; - Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // Largeur de la barre XOR + Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // width de la barre XOR if ((Pos_Y=Limite_Haut)) { Ligne_horizontale_XOR(0,Pinceau_Y-Principal_Decalage_Y,Compteur_X); @@ -1762,7 +1762,7 @@ void Afficher_curseur(void) void Effacer_curseur(void) { - byte Forme; + byte shape; int Debut_X; // int car sont parfois négatifs ! (quand on dessine sur un bord) int Debut_Y; short Fin_X; @@ -1782,11 +1782,11 @@ void Effacer_curseur(void) && ( (!Loupe_Mode) || (Mouse_X=Principal_X_Zoom) ) ) || (Fenetre) || (Forme_curseur==FORME_CURSEUR_SABLIER) ) - Forme=Forme_curseur; + shape=Forme_curseur; else - Forme=FORME_CURSEUR_FLECHE; + shape=FORME_CURSEUR_FLECHE; - switch(Forme) + switch(shape) { case FORME_CURSEUR_CIBLE : if (!Cacher_curseur) @@ -1904,8 +1904,8 @@ void Effacer_curseur(void) case FORME_CURSEUR_FLECHE : case FORME_CURSEUR_SABLIER : - Debut_X=Mouse_X-Curseur_Decalage_X[Forme]; - Debut_Y=Mouse_Y-Curseur_Decalage_Y[Forme]; + Debut_X=Mouse_X-Curseur_Decalage_X[shape]; + Debut_Y=Mouse_Y-Curseur_Decalage_Y[shape]; for (Pos_X=Debut_X,Compteur_X=0;Compteur_X<15;Pos_X++,Compteur_X++) { @@ -1925,7 +1925,7 @@ void Effacer_curseur(void) Pos_X=Pinceau_X-Principal_Decalage_X; Pos_Y=Pinceau_Y-Principal_Decalage_Y; - Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // Largeur de la barre XOR + Compteur_X=(Loupe_Mode)?Principal_Split:Largeur_ecran; // width de la barre XOR if ((Pos_Y=Limite_Haut)) { Ligne_horizontale_XOR(0,Pinceau_Y-Principal_Decalage_Y,Compteur_X); @@ -2063,29 +2063,29 @@ void Effacer_curseur(void) void Afficher_ecran(void) { - word Largeur; - word Hauteur; + word width; + word height; // ---/\/\/\ Partie non zoomée: /\/\/\--- if (Loupe_Mode) { if (Principal_Largeur_image