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 67f5eb9b..3099d78d 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/gfx2.ini b/gfx2.ini index a5473a0a..96fb7238 100644 --- a/gfx2.ini +++ b/gfx2.ini @@ -62,7 +62,7 @@ ; 1: Solid | 1: Solide ; 2: Transparent | 2: Transparent ; 3: Thin (solid) | 3: Fin (solide) - Cursor_aspect = 1 ; (default 1) + Cursor_aspect = 3 ; (default 1) @@ -286,4 +286,4 @@ ; Number of the default video mode | Numéro du mode vidéo par défaut au ; at startup (see the list by typing| démarrage (voir la liste en tapant ; "gfx2 /?" at the DOS prompt). | "gfx2 /?" sur la ligne de commande). - Default_video_mode = 58 ; (default 0) + Default_video_mode = 53 ; (default 0) diff --git a/global.h b/global.h index 25eec4d3..11bacf80 100644 --- a/global.h +++ b/global.h @@ -474,7 +474,7 @@ GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du d GLOBAL fonction_afficheur Traiter_pixel_de_degrade; // Redirection de l'affichage GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // Données de tous les dégradés -GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dégradé courant +GLOBAL byte Degrade_Courant; // Indice du tableau correspondant au dégradé courant diff --git a/init.c b/init.c index 81f37c18..dbee176b 100644 --- a/init.c +++ b/init.c @@ -20,6 +20,7 @@ #include "divers.h" #include "erreurs.h" #include "clavier.h" +#include "io.h" #include "errno.h" @@ -231,38 +232,33 @@ void Charger_DAT(void) Erreur(ERREUR_DAT_ABSENT); } - if (fread(Palette_defaut,1,sizeof(T_Palette),Handle)!=sizeof(T_Palette)) + if (!read_bytes(Handle, Palette_defaut,sizeof(T_Palette))) Erreur(ERREUR_DAT_CORROMPU); - if (fread(BLOCK_MENU,1,LARGEUR_MENU*HAUTEUR_MENU,Handle)!=LARGEUR_MENU*HAUTEUR_MENU) + if (!read_bytes(Handle, BLOCK_MENU,LARGEUR_MENU*HAUTEUR_MENU)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(SPRITE_EFFET,1,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_EFFETS,Handle)!= - LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_EFFETS) + if (!read_bytes(Handle, SPRITE_EFFET,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_EFFETS)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(SPRITE_CURSEUR,1,LARGEUR_SPRITE_CURSEUR*HAUTEUR_SPRITE_CURSEUR*NB_SPRITES_CURSEUR,Handle)!= - LARGEUR_SPRITE_CURSEUR*HAUTEUR_SPRITE_CURSEUR*NB_SPRITES_CURSEUR) + if (!read_bytes(Handle, SPRITE_CURSEUR,LARGEUR_SPRITE_CURSEUR*HAUTEUR_SPRITE_CURSEUR*NB_SPRITES_CURSEUR)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(SPRITE_MENU,1,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_MENU,Handle)!= - LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_MENU) + if (!read_bytes(Handle, SPRITE_MENU,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_MENU)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(SPRITE_PINCEAU,1,LARGEUR_PINCEAU*HAUTEUR_PINCEAU*NB_SPRITES_PINCEAU,Handle)!= - LARGEUR_PINCEAU*HAUTEUR_PINCEAU*NB_SPRITES_PINCEAU) + if (!read_bytes(Handle, SPRITE_PINCEAU,LARGEUR_PINCEAU*HAUTEUR_PINCEAU*NB_SPRITES_PINCEAU)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(SPRITE_DRIVE,1,LARGEUR_SPRITE_DRIVE*HAUTEUR_SPRITE_DRIVE*NB_SPRITES_DRIVES,Handle)!= - LARGEUR_SPRITE_DRIVE*HAUTEUR_SPRITE_DRIVE*NB_SPRITES_DRIVES) + if (!read_bytes(Handle, SPRITE_DRIVE,LARGEUR_SPRITE_DRIVE*HAUTEUR_SPRITE_DRIVE*NB_SPRITES_DRIVES)) Erreur(ERREUR_DAT_CORROMPU); if (!(Logo_GrafX2=(byte *)malloc(231*56))) Erreur(ERREUR_MEMOIRE); - if (fread(Logo_GrafX2,1,231*56,Handle)!=(231*56)) + if (!read_bytes(Handle, Logo_GrafX2,231*56)) Erreur(ERREUR_DAT_CORROMPU); - if (fread(TRAME_PREDEFINIE,1,2*16*NB_TRAMES_PREDEFINIES,Handle)!=2*16*NB_TRAMES_PREDEFINIES) + if (!read_bytes(Handle, TRAME_PREDEFINIE,2*16*NB_TRAMES_PREDEFINIES)) Erreur(ERREUR_DAT_CORROMPU); // Lecture des fontes 8x8: @@ -270,7 +266,7 @@ void Charger_DAT(void) Erreur(ERREUR_MEMOIRE); // Lecture de la fonte système - 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++) @@ -278,7 +274,7 @@ void Charger_DAT(void) Fonte_systeme[(Indice<<6)+(Pos_X<<3)+Pos_Y]=( ((*(Fonte_temporaire+(Indice*8)+Pos_Y))&(0x80>>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