Endianness and structure alignment fixes. Main loop running. Letsstart implementing SDL video :)

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@20 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2007-09-18 18:02:07 +00:00
parent 5dada6fc69
commit 49e7f9739d
5 changed files with 3279 additions and 3253 deletions

39
init.c
View File

@ -21,6 +21,8 @@
#include "divers.h"
#include "errno.h"
#include <endian.h>
#include <byteswap.h>
// On déclare méchamment le prototype de Erreur pour éviter de faire un
// fichier "main.h":
@ -227,7 +229,7 @@ void Decrypte(byte * Donnee,int Taille)
void Charger_DAT(void)
{
int Handle;
long Taille_fichier;
int Taille_fichier;
int Indice;
char Nom_du_fichier[256];
byte * Fonte_temporaire;
@ -343,6 +345,10 @@ void Charger_DAT(void)
if (read(Handle,&Mot_temporaire,2)!=2)
Erreur(ERREUR_DAT_CORROMPU);
#ifdef __BIG_ENDIAN
Mot_temporaire=bswap_16(Mot_temporaire);
#endif
// On copie ce nombre de lignes dans la table:
Table_d_aide[Indice].Nombre_de_lignes=Mot_temporaire;
@ -350,6 +356,10 @@ void Charger_DAT(void)
if (read(Handle,&Mot_temporaire,2)!=2)
Erreur(ERREUR_DAT_CORROMPU);
#ifdef __BIG_ENDIAN
Mot_temporaire=bswap_16(Mot_temporaire);
#endif
// On alloue la mémoire correspondante:
if (!(Table_d_aide[Indice].Debut_de_la_liste=(byte *)malloc(Mot_temporaire)))
Erreur(ERREUR_MEMOIRE);
@ -1782,9 +1792,12 @@ int Charger_CFG(int Tout_charger)
goto Erreur_lecture_config;
// - Lecture des infos contenues dans le fichier de config -
while (read(Handle,&Chunk,sizeof(Chunk))==sizeof(Chunk))
while (read(Handle,&(Chunk.Numero),sizeof(byte))==sizeof(byte))
{
printf("CHUNK: %d %d \n",Chunk.Numero,Chunk.Taille);
read(Handle,&(Chunk.Taille),sizeof(word));
#ifdef __BIG_ENDIAN
Chunk.Taille=bswap_16(Chunk.Taille);
#endif
switch (Chunk.Numero)
{
case CHUNK_TOUCHES: // Touches
@ -1798,6 +1811,11 @@ int Charger_CFG(int Tout_charger)
goto Erreur_lecture_config;
else
{
#ifdef __BIG_ENDIAN
CFG_Infos_touche.Touche=bswap_16(CFG_Infos_touche.Touche);
CFG_Infos_touche.Touche2=bswap_16(CFG_Infos_touche.Touche2);
CFG_Infos_touche.Numero=bswap_16(CFG_Infos_touche.Numero);
#endif
for (Indice2=0;
((Indice2<NB_TOUCHES) && (Numero_option[Indice2]!=CFG_Infos_touche.Numero));
Indice2++);
@ -1822,11 +1840,13 @@ int Charger_CFG(int Tout_charger)
}
break;
case CHUNK_MODES_VIDEO: // Modes vidéo
if ((Chunk.Taille/sizeof(CFG_Mode_video))!=NB_MODES_VIDEO)
if ((Chunk.Taille/5/*sizeof(CFG_Mode_video)*/)!=NB_MODES_VIDEO)
goto Erreur_lecture_config;
for (Indice=1; Indice<=NB_MODES_VIDEO; Indice++)
{
if (read(Handle,&CFG_Mode_video,sizeof(CFG_Mode_video))!=sizeof(CFG_Mode_video))
read(Handle,&(CFG_Mode_video.Etat),1);
read(Handle,&(CFG_Mode_video.Largeur),2);
if (read(Handle,&(CFG_Mode_video.Hauteur),2)!=2)
goto Erreur_lecture_config;
else
{
@ -1892,8 +1912,15 @@ int Charger_CFG(int Tout_charger)
{
if (read(Handle,&Degrade_Courant,1)!=1)
goto Erreur_lecture_config;
if (read(Handle,Degrade_Tableau,sizeof(Degrade_Tableau))!=sizeof(Degrade_Tableau))
for(Indice=0;Indice<16;Indice++)
{
read(Handle,&(Degrade_Tableau[Indice].Debut),1);
read(Handle,&(Degrade_Tableau[Indice].Fin),1);
read(Handle,&(Degrade_Tableau[Indice].Inverse),4);
read(Handle,&(Degrade_Tableau[Indice].Melange),4);
if (read(Handle,&(Degrade_Tableau[Indice]).Technique,4)!=4)
goto Erreur_lecture_config;
}
Degrade_Charger_infos_du_tableau(Degrade_Courant);
}
else

9
main.c
View File

@ -249,7 +249,7 @@ void Initialisation_du_programme(int argc,char * argv[])
int Mode_dans_lequel_on_demarre;
// On commence également par interdire d'appuyer sur Ctrl+Pause et Ctrl+C
signal(SIGINT ,SIG_IGN);
// signal(SIGINT ,SIG_IGN);
printf("°±²Û GrafX 2.00 %s%s þ Copyright (c)1996-1999 Sunset Design Û²±°\n",ALPHA_BETA,POURCENTAGE_VERSION);
@ -303,7 +303,7 @@ void Initialisation_du_programme(int argc,char * argv[])
Brosse_File_list_Decalage=0;
Brosse_Format=0;
// On initialise les commentaires des images à des chaŒnes vides
// On initialise les commentaires des images à des chaînes vides
Principal_Commentaire[0]='\0';
Brouillon_Commentaire[0]='\0';
Brosse_Commentaire[0]='\0';
@ -415,8 +415,7 @@ void Initialisation_du_programme(int argc,char * argv[])
srand(time(NULL)); // On randomize un peu tout ça...
// Passer en clavier américain
//Clavier_americain();
//TODO: Voir à quoi ça sert vraiement ...
Clavier_americain();
// Initialisation des boutons
Initialisation_des_boutons();
@ -475,7 +474,7 @@ void Initialisation_du_programme(int argc,char * argv[])
Pinceau_Hauteur=1;
// Détection des modes SDL en état de fonctionner:
Liste_Modes_Videos_SDL= SDL_ListModes(NULL, 0);
// Liste_Modes_Videos_SDL= SDL_ListModes(NULL, 0);
//Ici, trier les modes dispos ou pas dans le tableau global ...

View File

@ -346,7 +346,7 @@ int Charger_INI(struct S_Config * Conf)
// On calcule le nom du fichier qu'on manipule:
strcpy(Nom_du_fichier,Repertoire_du_programme);
strcat(Nom_du_fichier,"GFX2.INI");
strcat(Nom_du_fichier,"gfx2.ini");
Fichier=fopen(Nom_du_fichier,"r");
if (Fichier!=0)

View File

@ -268,10 +268,10 @@ int Sauver_INI(struct S_Config * Conf)
// On calcule les noms des fichiers qu'on manipule:
strcpy(Nom_du_fichier,Repertoire_du_programme);
strcat(Nom_du_fichier,"GFX2.INI");
strcat(Nom_du_fichier,"gfx2.ini");
strcpy(Nom_du_fichier_temporaire,Repertoire_du_programme);
strcat(Nom_du_fichier_temporaire,"GFX2.$$$");
strcat(Nom_du_fichier_temporaire,"gfx2.$$$");
// On renome l'ancienne version du fichier INI vers un fichier temporaire:
if (rename(Nom_du_fichier,Nom_du_fichier_temporaire)!=0)

View File

@ -114,9 +114,9 @@ struct T_Degrade_Tableau
{
byte Debut; // PremiŠre couleur du dégradé
byte Fin; // DerniŠre couleur du dégradé
int Inverse; // "Le dégradé va de Fin … Debut"
long Melange; // Valeur de mélange du dégradé (0-255)
int Technique; // Technique … utiliser (0-2)
dword Inverse; // "Le dégradé va de Fin … Debut" //INT
dword Melange; // Valeur de mélange du dégradé (0-255) //LONG
dword Technique; // Technique … utiliser (0-2) //INT
};
// Déclaration d'une info de shade