From 3bf724685585c81e5686235b637aacb4eefe9f74 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 2 Aug 2008 15:38:00 +0000 Subject: [PATCH] Saving a picture and loading it back works, but there are struct misalignment problems, asved file will NOT be compatible with other tools git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@91 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- divers.c | 8 +++++++- files.c | 4 ++-- gfx2.cfg | Bin 10351 -> 10351 bytes linux.c | 6 ++++-- loadsave.c | 57 +++++++++++++++++++++++++++++++++++------------------ 5 files changed, 51 insertions(+), 24 deletions(-) diff --git a/divers.c b/divers.c index f46bf2cc..10e83020 100644 --- a/divers.c +++ b/divers.c @@ -612,7 +612,13 @@ byte Couleur_ILBM_line(word Pos_X, word Vraie_taille_ligne) void Palette_256_to_64(T_Palette Palette) { - UNIMPLEMENTED + int i; + for(i=0;i<256;i++) + { + Palette[i].R = Palette[i].B >> 2; + Palette[i].V = Palette[i].V >> 2; + Palette[i].B = Palette[i].R >> 2; + } } void Palette_64_to_256(T_Palette Palette) diff --git a/files.c b/files.c index 5b76c1f0..bf0d9077 100644 --- a/files.c +++ b/files.c @@ -71,10 +71,10 @@ int Fichier_existe(char * Fichier) // D‚termine si un fichier pass‚ en paramŠtre existe ou non dans le // r‚pertoire courant. { - struct stat* buf = NULL; + struct stat buf; int Resultat; - Resultat=stat(Fichier,buf); + Resultat=stat(Fichier,&buf); if (Resultat!=0) return(errno!=ENOENT); else diff --git a/gfx2.cfg b/gfx2.cfg index e8bd4fbcfc918bb19c62b28717a02bc5666269f8..f19827a47329739e82defa335ca9a9c0b0e8820c 100644 GIT binary patch delta 314 zcmWm6p%KDR6a~?j|Dz+2OauZM43h#UjOXQW5padl-K?zDwf)bRVv|#xj<%jAbZ88Ol&js=QLk9GO%y9T~{;Mol)tm_nu}BUz$eGHulOJlfOs50qm@6ByBPWui$(yXiLfMlmxrHTELM4<&u82yggi5G{N~rWjmQIXiC01fJ zR%11m2Cm3ztj21r#%e4*6HyJ-Pz_Zfr9w)DlnN;o0xBMURyC@SphqI1LPCXv3JHfn LvC)RtecT@Z$0;{& diff --git a/linux.c b/linux.c index 485011ef..8ce0eee1 100644 --- a/linux.c +++ b/linux.c @@ -1,5 +1,6 @@ #include #include +#include void _splitpath(char* Buffer, char* Chemin, char* Nom_Fichier) { @@ -19,8 +20,9 @@ void _splitpath(char* Buffer, char* Chemin, char* Nom_Fichier) int filelength(int fichier) { - printf("filelenght non implémenté!\n"); - return 0; + struct stat infos_fichier; + fstat(fichier,&infos_fichier); + return infos_fichier.st_size; } void itoa(int source,char* dest, int longueur) diff --git a/loadsave.c b/loadsave.c index ce04e28c..59156c45 100644 --- a/loadsave.c +++ b/loadsave.c @@ -19,7 +19,16 @@ #include "erreurs.h" #ifdef __linux__ + #include + #include #include "linux.h" + #if __BYTE_ORDER == __BIG_ENDIAN + #define endian_magic(x) bswap_16(x) + #else + #define endian_magic(x) bswap_16(x) + #endif +#elif __WATCOMC__ + #define endian_magic(x) (x) #endif // Chargement des pixels dans l'écran principal @@ -962,7 +971,7 @@ void Load_PKM(void) dword Taille_image; dword Taille_pack; long Taille_du_fichier; - struct stat* Informations_Fichier=NULL; + struct stat Informations_Fichier; Nom_fichier_complet(Nom_du_fichier,0); @@ -971,8 +980,8 @@ void Load_PKM(void) if ((Fichier=open(Nom_du_fichier,O_RDONLY))!=-1) { - stat(Nom_du_fichier,Informations_Fichier); - Taille_du_fichier=Informations_Fichier->st_size; + stat(Nom_du_fichier,&Informations_Fichier); + Taille_du_fichier=Informations_Fichier.st_size; if (read(Fichier,&Head,sizeof(struct Header))==sizeof(struct Header)) { @@ -1082,7 +1091,7 @@ void Load_PKM(void) Compteur_de_donnees_packees=0; Compteur_de_pixels=0; - Taille_pack=(Informations_Fichier->st_size)-sizeof(struct Header)-Head.Jump; + Taille_pack=(Informations_Fichier.st_size)-sizeof(struct Header)-Head.Jump; // Boucle de décompression: while ( (Compteur_de_pixels