From 7bf71cd7b067d736e78ee330f7d9280e9ca00a57 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Tue, 30 Sep 2008 19:24:49 +0000 Subject: [PATCH] More work on endianness. Grid settings are now saved and reloaded. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@187 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- Makefile.dep | 4 +- const.h | 2 +- gfx2.cfg | Bin 10351 -> 10362 bytes gfx2.ini | 4 +- global.h | 2 +- init.c | 324 ++++++++++++++++++++++++++------------------------- io.c | 12 ++ io.h | 3 + loadsave.c | 151 ++++++++++++------------ 9 files changed, 268 insertions(+), 234 deletions(-) diff --git a/Makefile.dep b/Makefile.dep index 825aa201..81925932 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -1,8 +1,8 @@ main.o: main.c const.h struct.h global.h loadsave.h graph.h divers.h \ init.h boutons.h moteur.h pages.h files.h sdlscreen.h erreurs.h \ readini.h saveini.h linux.h -init.o: init.c const.h struct.h global.h loadsave.h graph.h \ - boutons.h palette.h aide.h operatio.h divers.h erreurs.h clavier.h +init.o: init.c const.h struct.h global.h loadsave.h graph.h boutons.h \ + palette.h aide.h operatio.h divers.h erreurs.h clavier.h io.h graph.o: graph.c sdlscreen.h struct.h const.h graph.h divers.h moteur.h \ boutons.h pages.h global.h loadsave.h erreurs.h sdlscreen.o: sdlscreen.c global.h struct.h const.h loadsave.h sdlscreen.h \ diff --git a/const.h b/const.h index c556e07a..952dc110 100644 --- a/const.h +++ b/const.h @@ -14,7 +14,6 @@ #define BETA1 97 // | plusieurs parties => 2.0 ß95.5% #define BETA2 0 // | #define ALPHA_BETA "ß" // Type de la version "Þ" ou "ß" -#define TAILLE_FICHIER_CONFIG 10351 // Taille du fichier GFX2.CFG #define DAT_DEBUT_INI_PAR_DEFAUT 0xF385 // Dans gfx2.dat, début du fichier gfx2.ini standard #define NB_MODES_VIDEO 60 // Nombre de modes vidéo #define NB_BOUTONS 38 // Nombre de boutons à gérer @@ -274,6 +273,7 @@ enum CHUNKS_CFG CHUNK_SMOOTH = 6, CHUNK_EXCLUDE_COLORS = 7, CHUNK_QUICK_SHADE = 8, + CHUNK_GRILLE = 9, CHUNK_MAX }; diff --git a/gfx2.cfg b/gfx2.cfg index 67f5eb9b162f84837fe5d5d429663188ba40572b..3099d78da11c2385e9e4c9e56102a8b7097fa236 100644 GIT binary patch delta 318 zcmWm6p$!625Jl0yvj_+Y5)5T5+uM`p*KvKqb02;-+e}1ldIiKM- zJkI^tUAn0`U(z~fMKL|Qmoaw6C8>fIbu36)R@l~4(lK7UgQ<*_qjC01f3 zmav2+EMW;tSi+K*jxAw%OiT$%P=czkQemaSN`;jQ0~L3o1GV5Gu~1>5!a{|GUGF?^ Mv-N(tm^Y612W(L`%>V!Z delta 306 zcmWm6p%DT>5Jb`4IW!VMArRn@6#7Cq2?jk`+=S4fP(=br!nh1Tqv&tG>VCiJGd(WD z+{V5%=Sy05)?`agB#Fq2ETo0ABWH4rmi^rvQwil$cT6QzLM2o}C6vd`jFni4l~}?O zmau&2jxAvcOIX4ZmdC`DpadnT3M&;>Dy&pksW4D+CpuCK9uf-`7Ah=MSlAEF^S0U? E{>Pos_X)) ? 1 : 0); // Lecture de la fonte alternative - if (fread(Fonte_temporaire,1,2048,Handle)!=2048) + if (!read_bytes(Handle, Fonte_temporaire,2048)) Erreur(ERREUR_DAT_CORROMPU); for (Indice=0;Indice<256;Indice++) for (Pos_X=0;Pos_X<8;Pos_X++) @@ -290,7 +286,7 @@ void Charger_DAT(void) Fonte=Fonte_systeme; // Lecture de la fonte 6x8: (spéciale aide) - if (fread(Fonte_help,1,315*6*8,Handle)!=(315*6*8)) + if (!read_bytes(Handle, Fonte_help,315*6*8)) Erreur(ERREUR_DAT_CORROMPU); // Le reste est actuellement une copie du fichier INI par défaut: @@ -1719,8 +1715,12 @@ int Charger_CFG(int Tout_charger) return ERREUR_CFG_ABSENT; if ( (Taille_fichier>8) { case 0 : @@ -1804,38 +1793,44 @@ int Charger_CFG(int Tout_charger) goto Erreur_lecture_config; for (Indice=1; Indice<=NB_MODES_VIDEO; Indice++) { - fread(&(CFG_Mode_video.Etat),1,1,Handle); - fread(&(CFG_Mode_video.Largeur),1,2,Handle); - if (fread(&(CFG_Mode_video.Hauteur),1,2,Handle)!=2) + if (!read_byte(Handle, &CFG_Mode_video.Etat) || + !read_word_le(Handle, &CFG_Mode_video.Largeur) || + !read_word_le(Handle, &CFG_Mode_video.Hauteur) ) goto Erreur_lecture_config; - else + + for (Indice2=0; Indice2>6)) ) ); - Indice2++); - if (Indice2>6)) + { Mode_video[Indice2].Etat=(Mode_video[Indice2].Etat&0xFC) | (CFG_Mode_video.Etat&3); + break; + } } } break; case CHUNK_SHADE: // Shade if (Tout_charger) { - if (fread(&Shade_Actuel,1,sizeof(Shade_Actuel),Handle)!=sizeof(Shade_Actuel)) + if (! read_byte(Handle, &Shade_Actuel) ) goto Erreur_lecture_config; - else + + for (Indice=0; Indice<8; Indice++) { - if (fread(Shade_Liste,1,sizeof(Shade_Liste),Handle)!=sizeof(Shade_Liste)) - goto Erreur_lecture_config; - else - Liste2tables(Shade_Liste[Shade_Actuel].Liste, - Shade_Liste[Shade_Actuel].Pas, - Shade_Liste[Shade_Actuel].Mode, - Shade_Table_gauche,Shade_Table_droite); + for (Indice2=0; Indice2<512; Indice2++) + { + if (! read_word_le(Handle, &Shade_Liste[Indice].Liste[Indice2])) + goto Erreur_lecture_config; + } + if (! read_byte(Handle, &Shade_Liste[Indice].Pas) || + ! read_byte(Handle, &Shade_Liste[Indice].Mode) ) + goto Erreur_lecture_config; } + Liste2tables(Shade_Liste[Shade_Actuel].Liste, + Shade_Liste[Shade_Actuel].Pas, + Shade_Liste[Shade_Actuel].Mode, + Shade_Table_gauche,Shade_Table_droite); } else { @@ -1846,7 +1841,7 @@ int Charger_CFG(int Tout_charger) case CHUNK_MASQUE: // Masque if (Tout_charger) { - if (fread(Mask,1,sizeof(Mask),Handle)!=sizeof(Mask)) + if (!read_bytes(Handle, Mask, 256)) goto Erreur_lecture_config; } else @@ -1858,7 +1853,7 @@ int Charger_CFG(int Tout_charger) case CHUNK_STENCIL: // Stencil if (Tout_charger) { - if (fread(Stencil,1,sizeof(Stencil),Handle)!=sizeof(Stencil)) + if (!read_bytes(Handle, Stencil, 256)) goto Erreur_lecture_config; } else @@ -1871,16 +1866,16 @@ int Charger_CFG(int Tout_charger) if (Tout_charger) { // fixme endianness : Degrade_Courant est un int, enregistre en byte - if (fread(&Degrade_Courant,1,1,Handle)!=1) + if (! read_byte(Handle, &Degrade_Courant)) goto Erreur_lecture_config; for(Indice=0;Indice<16;Indice++) { - fread(&(Degrade_Tableau[Indice].Debut),1,1,Handle); - fread(&(Degrade_Tableau[Indice].Fin),1,1,Handle); - fread(&(Degrade_Tableau[Indice].Inverse),1,4,Handle); - fread(&(Degrade_Tableau[Indice].Melange),1,4,Handle); - if (fread(&(Degrade_Tableau[Indice]).Technique,1,4,Handle)!=4) - goto Erreur_lecture_config; + if (!read_byte(Handle, &Degrade_Tableau[Indice].Debut) || + !read_byte(Handle, &Degrade_Tableau[Indice].Fin) || + !read_dword_le(Handle, &Degrade_Tableau[Indice].Inverse) || + !read_dword_le(Handle, &Degrade_Tableau[Indice].Melange) || + !read_dword_le(Handle, &Degrade_Tableau[Indice].Technique) ) + goto Erreur_lecture_config; } Degrade_Charger_infos_du_tableau(Degrade_Courant); } @@ -1893,8 +1888,10 @@ int Charger_CFG(int Tout_charger) case CHUNK_SMOOTH: // Matrice du smooth if (Tout_charger) { - if (fread(Smooth_Matrice,1,sizeof(Smooth_Matrice),Handle)!=sizeof(Smooth_Matrice)) - goto Erreur_lecture_config; + for (Indice=0; Indice<3; Indice++) + for (Indice2=0; Indice2<3; Indice2++) + if (!read_byte(Handle, &(Smooth_Matrice[Indice][Indice2]))) + goto Erreur_lecture_config; } else { @@ -1905,7 +1902,7 @@ int Charger_CFG(int Tout_charger) case CHUNK_EXCLUDE_COLORS: // Exclude_color if (Tout_charger) { - if (fread(Exclude_color,1,sizeof(Exclude_color),Handle)!=sizeof(Exclude_color)) + if (!read_bytes(Handle, Exclude_color, 256)) goto Erreur_lecture_config; } else @@ -1917,9 +1914,27 @@ int Charger_CFG(int Tout_charger) case CHUNK_QUICK_SHADE: // Quick-shade if (Tout_charger) { - if (fread(&Quick_shade_Step,1,sizeof(Quick_shade_Step),Handle)!=sizeof(Quick_shade_Step)) + if (!read_byte(Handle, &Quick_shade_Step)) goto Erreur_lecture_config; - if (fread(&Quick_shade_Loop,1,sizeof(Quick_shade_Loop),Handle)!=sizeof(Quick_shade_Loop)) + if (!read_byte(Handle, &Quick_shade_Loop)) + goto Erreur_lecture_config; + } + else + { + if (fseek(Handle,Chunk.Taille,SEEK_CUR)==-1) + goto Erreur_lecture_config; + } + break; + case CHUNK_GRILLE: // Grille + if (Tout_charger) + { + if (!read_word_le(Handle, &Snap_Largeur)) + goto Erreur_lecture_config; + if (!read_word_le(Handle, &Snap_Hauteur)) + goto Erreur_lecture_config; + if (!read_word_le(Handle, &Snap_Decalage_X)) + goto Erreur_lecture_config; + if (!read_word_le(Handle, &Snap_Decalage_Y)) goto Erreur_lecture_config; } else @@ -1951,6 +1966,7 @@ int Sauver_CFG(void) { FILE* Handle; int Indice; + int Indice2; //byte Octet; char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; struct Config_Header CFG_Header; @@ -1971,17 +1987,19 @@ int Sauver_CFG(void) CFG_Header.Version2=VERSION2; CFG_Header.Beta1 =BETA1; CFG_Header.Beta2 =BETA2; - if (fwrite(&CFG_Header,1,sizeof(CFG_Header),Handle)!=sizeof(CFG_Header)) + if (!write_bytes(Handle, &CFG_Header.Signature,3) || + !write_byte(Handle, CFG_Header.Version1) || + !write_byte(Handle, CFG_Header.Version2) || + !write_byte(Handle, CFG_Header.Beta1) || + !write_byte(Handle, CFG_Header.Beta2) ) goto Erreur_sauvegarde_config; // Enregistrement des touches Chunk.Numero=CHUNK_TOUCHES; Chunk.Taille=NB_TOUCHES*sizeof(CFG_Infos_touche); - #if SDL_BYTEORDER == SDL_BIG_ENDIAN - //On remet les octets dans l'ordre "normal" - Chunk.Taille=bswap_16(Chunk.Taille); - #endif - if (fwrite(&(Chunk.Numero),1,sizeof(byte),Handle)!=sizeof(byte)||fwrite(&(Chunk.Taille),1,sizeof(word),Handle)!=sizeof(word)) + + if (!write_byte(Handle, Chunk.Numero) || + !write_word_le(Handle, Chunk.Taille) ) goto Erreur_sauvegarde_config; for (Indice=0; IndiceTAILLE_COMMENTAIRE) { @@ -973,7 +973,7 @@ void Load_PKM(void) break; case 1 : // Dimensions de l'écran d'origine - if (read_bytes(Fichier,&Octet,1)) + if (read_byte(Fichier,&Octet)) { if (Octet==4) { @@ -990,12 +990,12 @@ void Load_PKM(void) break; case 2 : // Couleur de transparence - if (read_bytes(Fichier,&Octet,1)) + if (read_byte(Fichier,&Octet)) { if (Octet==1) { Indice++; - if (! read_bytes(Fichier,&Back_color,1)) + if (! read_byte(Fichier,&Back_color)) Erreur_fichier=2; } else @@ -1006,7 +1006,7 @@ void Load_PKM(void) break; default: - if (read_bytes(Fichier,&Octet,1)) + if (read_byte(Fichier,&Octet)) { Indice+=Octet; if (fseek(Fichier,Octet,SEEK_CUR)) @@ -1595,13 +1595,13 @@ void Load_LBM(void) && (read_word_be(LBM_Fichier,&Header.Height)) && (read_word_be(LBM_Fichier,&Header.Xorg)) && (read_word_be(LBM_Fichier,&Header.Yorg)) - && (read_bytes(LBM_Fichier,&Header.BitPlanes,1)) - && (read_bytes(LBM_Fichier,&Header.Mask,1)) - && (read_bytes(LBM_Fichier,&Header.Compression,1)) - && (read_bytes(LBM_Fichier,&Header.Pad1,1)) + && (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_bytes(LBM_Fichier,&Header.Xaspect,1)) - && (read_bytes(LBM_Fichier,&Header.Yaspect,1)) + && (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) @@ -1656,7 +1656,7 @@ void Load_LBM(void) // On lit l'octet de padding du CMAP si la taille est impaire if (Nb_couleurs&1) - if (read_bytes(LBM_Fichier,&Octet,1)) + if (read_byte(LBM_Fichier,&Octet)) Erreur_fichier=2; if ( (Wait_for((byte *)"BODY")) && (!Erreur_fichier) ) @@ -2635,7 +2635,7 @@ void Load_GIF(void) word Nb_couleurs; // Nombre de couleurs dans l'image word Indice_de_couleur; // Indice de traitement d'une couleur - word Taille_de_lecture; // Nombre de données à lire (divers) + byte Taille_de_lecture; // Nombre de données à lire (divers) //word Indice_de_lecture; // Indice de lecture des données (divers) byte Block_indicateur; // Code indicateur du type de bloc en cours word Nb_bits_initial; // Nb de bits au début du traitement LZW @@ -2675,9 +2675,9 @@ void Load_GIF(void) if (read_word_le(GIF_Fichier,&(LSDB.Largeur)) && read_word_le(GIF_Fichier,&(LSDB.Hauteur)) - && read_bytes(GIF_Fichier,&(LSDB.Resol),1) - && read_bytes(GIF_Fichier,&(LSDB.Backcol),1) - && read_bytes(GIF_Fichier,&(LSDB.Aspect),1) + && read_byte(GIF_Fichier,&(LSDB.Resol)) + && read_byte(GIF_Fichier,&(LSDB.Backcol)) + && read_byte(GIF_Fichier,&(LSDB.Aspect)) ) { // Lecture du Logical Screen Descriptor Block réussie: @@ -2715,19 +2715,19 @@ void Load_GIF(void) // Palette dans l'ordre: for(Indice_de_couleur=0;Indice_de_couleur