X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=ac1b0fa74a380246fa12e2f8880e3240648f6fae;hb=2f9311c5cfa019e40c127df71e25659b641986d3;hp=bdd8b54319ae9c94b82876953d10d7a9760f01d9;hpb=21c25c56356db2138816a0716d73934ac3893e89;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index bdd8b543..ac1b0fa7 100644 --- a/src/files.c +++ b/src/files.c @@ -19,7 +19,14 @@ #include "tape.h" #include "joystick.h" -static char *getUserdataDir() +#define MAX_LINE_LEN 1000 + +static char *getGlobalDataDir() +{ + return GAME_DIR; +} + +static char *getUserDataDir() { static char *userdata_dir = NULL; @@ -37,14 +44,14 @@ static char *getUserdataDir() static char *getSetupDir() { - return getUserdataDir(); + return getUserDataDir(); } static char *getTapeDir(char *level_subdir) { static char *tape_dir = NULL; - char *data_dir = getUserdataDir(); - char *tape_subdir = TAPEDATA_DIRECTORY; + char *data_dir = getUserDataDir(); + char *tape_subdir = TAPES_DIRECTORY; if (tape_dir) free(tape_dir); @@ -57,6 +64,23 @@ static char *getTapeDir(char *level_subdir) return tape_dir; } +static char *getScoreDir(char *level_subdir) +{ + static char *score_dir = NULL; + char *data_dir = getGlobalDataDir(); + char *score_subdir = SCORES_DIRECTORY; + + if (score_dir) + free(score_dir); + + score_dir = checked_malloc(strlen(data_dir) + strlen(score_subdir) + + strlen(level_subdir) + 3); + sprintf(score_dir, "%s/%s%s%s", data_dir, score_subdir, + (strlen(level_subdir) > 0 ? "/" : ""), level_subdir); + + return score_dir; +} + static void createDirectory(char *dir, char *text) { if (access(dir, F_OK) != 0) @@ -64,15 +88,21 @@ static void createDirectory(char *dir, char *text) Error(ERR_WARN, "cannot create %s directory '%s'", text, dir); } -void InitUserdataDirectory() +static void InitUserDataDirectory() { - createDirectory(getUserdataDir(), "user data"); + createDirectory(getUserDataDir(), "user data"); } static void InitTapeDirectory(char *level_subdir) { - createDirectory(getTapeDir(""), "main tape data"); - createDirectory(getTapeDir(level_subdir), "level tape data"); + createDirectory(getTapeDir(""), "main tape"); + createDirectory(getTapeDir(level_subdir), "level tape"); +} + +static void InitScoreDirectory(char *level_subdir) +{ + createDirectory(getScoreDir(""), "main score"); + createDirectory(getScoreDir(level_subdir), "level score"); } boolean LoadLevelInfo() @@ -82,16 +112,16 @@ boolean LoadLevelInfo() char cookie[MAX_FILENAME_LEN]; FILE *file; - sprintf(filename,"%s/%s",level_directory,LEVDIR_FILENAME); + sprintf(filename, "%s/%s", options.level_directory, LEVDIR_FILENAME); - if (!(file=fopen(filename,"r"))) + if (!(file = fopen(filename, "r"))) { Error(ERR_WARN, "cannot read level info '%s'", filename); return(FALSE); } - fscanf(file,"%s\n",cookie); - if (strcmp(cookie,LEVELDIR_COOKIE)) /* ungültiges Format? */ + fscanf(file, "%s\n", cookie); + if (strcmp(cookie, LEVELDIR_COOKIE)) { Error(ERR_WARN, "wrong format of level info file"); fclose(file); @@ -100,12 +130,12 @@ boolean LoadLevelInfo() num_leveldirs = 0; leveldir_nr = 0; - for(i=0;i