From b49fde701527ca2902cdcf32181af894fb74014e Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Mon, 27 Oct 2008 18:27:05 +0000 Subject: [PATCH] OS4, OSX: Centralized the part which determined which directory contains the program's files. Owners of these platforms, please check if I did it ok. It should crash spectacularly on program init or shutdown if I messed up. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@312 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- init.c | 35 ++++++++++++++++++++--------------- main.c | 8 -------- readini.c | 8 -------- saveini.c | 12 ------------ 4 files changed, 20 insertions(+), 43 deletions(-) diff --git a/init.c b/init.c index c8ef392e..4a5ebe2b 100644 --- a/init.c +++ b/init.c @@ -60,13 +60,30 @@ #endif // Chercher le répertoire contenant GFX2.EXE -void Chercher_repertoire_du_programme(char * Chaine) +// en: Determine which directory contains the executable, data, and configuration. +// The argument is argv[0], but some platforms don't need it. +#if defined(__macosx__) || defined(__amigaos4__) + #define ARG_UNUSED __attribute__((unused)) +#else + #define ARG_UNUSED +#endif +void Chercher_repertoire_du_programme(ARG_UNUSED char * Chaine) { - #ifdef __macosx__ + #undef ARG_UNUSED + + // MacOSX + #if defined(__macosx__) CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); CFURLGetFileSystemRepresentation(url,true,(UInt8*)Repertoire_du_programme,MAXPATHLEN); CFRelease(url); - strcat(Repertoire_du_programme,"Contents/Resources"); + strcat(Repertoire_du_programme,"/Contents/Resources/"); + + // AmigaOS4: hard-coded volume name. + #elif defined(__amigaos4__) + strcpy(Repertoire_du_programme,"PROGDIR:"); + + // Windows, linux: The part of argv[0] before the executable name. + // Keep the last / or \. #else Extraire_chemin(Repertoire_du_programme, Chaine); #endif @@ -161,12 +178,8 @@ void Charger_DAT(void) struct stat Informations_Fichier; -#ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.dat"); -#else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.dat"); -#endif if(stat(Nom_du_fichier,&Informations_Fichier)) { @@ -1576,12 +1589,8 @@ int Charger_CFG(int Tout_charger) struct stat Informations_Fichier; int Conversion_touches = 0; -#ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.cfg"); -#else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.cfg"); -#endif stat(Nom_du_fichier,&Informations_Fichier); Taille_fichier=Informations_Fichier.st_size; @@ -1851,12 +1860,8 @@ int Sauver_CFG(void) struct Config_Infos_touche CFG_Infos_touche; struct Config_Mode_video CFG_Mode_video; -#ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.cfg"); -#else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.cfg"); -#endif if ((Handle=fopen(Nom_du_fichier,"wb"))==NULL) return ERREUR_SAUVEGARDE_CFG; diff --git a/main.c b/main.c index 0a034d0a..88ebc07a 100644 --- a/main.c +++ b/main.c @@ -264,15 +264,7 @@ void Initialisation_du_programme(int argc,char * argv[]) Initialiser_S_Liste_de_pages(Brouillon_Backups); // On détermine dès le départ où se trouve le fichier: - // On détermine dès le départ où se trouve le fichier: -#ifdef __macosx__ - CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - CFURLGetFileSystemRepresentation(url, true, (UInt8 *) Repertoire_du_programme, MAXPATHLEN); - CFRelease(url); - strcat(Repertoire_du_programme, "/Contents/Resources/"); -#else Chercher_repertoire_du_programme(argv[0]); -#endif // On détecte les lecteurs qui sont accessibles: Rechercher_drives(); diff --git a/readini.c b/readini.c index 174c8190..93928912 100644 --- a/readini.c +++ b/readini.c @@ -403,23 +403,15 @@ int Charger_INI(struct S_Config * Conf) Nom_du_fichier=(char *)malloc(256); // On calcule le nom du fichier qu'on manipule: -#ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.ini"); -#else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.ini"); -#endif Fichier=fopen(Nom_du_fichier,"rb"); if (Fichier==0) { // Si le fichier ini est absent on le relit depuis gfx2.dat - #ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.dat"); - #else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.dat"); - #endif Fichier=fopen(Nom_du_fichier,"rb"); if (Fichier == 0) { diff --git a/saveini.c b/saveini.c index 209104c1..f76da073 100644 --- a/saveini.c +++ b/saveini.c @@ -399,22 +399,14 @@ int Sauver_INI(struct S_Config * Conf) Buffer=(char *)malloc(1024); // On calcule les noms des fichiers qu'on manipule: -#ifdef __amigaos4__ - strcpy(Nom_du_fichier,"PROGDIR:gfx2.ini"); -#else strcpy(Nom_du_fichier,Repertoire_du_programme); strcat(Nom_du_fichier,"gfx2.ini"); -#endif // On vérifie si le fichier INI existe if ((Ini_existe = Fichier_existe(Nom_du_fichier))) { -#ifdef __amigaos4__ - strcpy(Nom_du_fichier_temporaire,"PROGDIR:gfx2.$$$"); -#else strcpy(Nom_du_fichier_temporaire,Repertoire_du_programme); strcat(Nom_du_fichier_temporaire,"gfx2.$$$"); -#endif // On renome l'ancienne version du fichier INI vers un fichier temporaire: if (rename(Nom_du_fichier,Nom_du_fichier_temporaire)!=0) @@ -423,12 +415,8 @@ int Sauver_INI(struct S_Config * Conf) } } // On récupère un fichier INI "propre" dans GFX2.DAT -#ifdef __amigaos4__ - strcpy(Nom_du_fichier_DAT,"PROGDIR:gfx2.dat"); -#else strcpy(Nom_du_fichier_DAT,Repertoire_du_programme); strcat(Nom_du_fichier_DAT,"gfx2.dat"); -#endif Ancien_fichier=fopen(Nom_du_fichier_DAT,"rb"); if (Ancien_fichier==0) {