X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ffiles.c;h=80a5e7cb82f256380e227888ea8621d8f84b3cdd;hp=cb1199d340bb58212659431caadeb900800719ca;hb=4f767d54c7ac468e9a42e22caf716111be1ceba9;hpb=05651fcbc154b1d8321d6e4e9374cfcdd274feda diff --git a/src/files.c b/src/files.c index cb1199d3..80a5e7cb 100644 --- a/src/files.c +++ b/src/files.c @@ -22,14 +22,53 @@ #include "tape.h" #include "joystick.h" -#define MAX_LINE_LEN 1000 /* file input line length */ -#define CHUNK_ID_LEN 4 /* IFF style chunk id length */ -#define LEVEL_HEADER_SIZE 80 /* size of level file header */ -#define LEVEL_HEADER_UNUSED 18 /* unused level header bytes */ -#define TAPE_HEADER_SIZE 20 /* size of tape file header */ -#define TAPE_HEADER_UNUSED 7 /* unused tape header bytes */ -#define FILE_VERSION_1_0 10 /* old 1.0 file version */ -#define FILE_VERSION_1_2 12 /* actual file version */ +#define MAX_FILENAME_LEN 256 /* maximal filename length */ +#define MAX_LINE_LEN 1000 /* maximal input line length */ +#define CHUNK_ID_LEN 4 /* IFF style chunk id length */ +#define LEVEL_HEADER_SIZE 80 /* size of level file header */ +#define LEVEL_HEADER_UNUSED 18 /* unused level header bytes */ +#define TAPE_HEADER_SIZE 20 /* size of tape file header */ +#define TAPE_HEADER_UNUSED 7 /* unused tape header bytes */ +#define FILE_VERSION_1_0 10 /* old 1.0 file version */ +#define FILE_VERSION_1_2 12 /* actual file version */ + +/* file identifier strings */ +#define LEVEL_COOKIE "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.2" +#define SCORE_COOKIE "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.2" +#define TAPE_COOKIE "ROCKSNDIAMONDS_TAPE_FILE_VERSION_1.2" +#define SETUP_COOKIE "ROCKSNDIAMONDS_SETUP_FILE_VERSION_1.2" +#define LEVELSETUP_COOKIE "ROCKSNDIAMONDS_LEVELSETUP_FILE_VERSION_1.2" +#define LEVELINFO_COOKIE "ROCKSNDIAMONDS_LEVELINFO_FILE_VERSION_1.2" +/* old file identifiers for backward compatibility */ +#define LEVEL_COOKIE_10 "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0" +#define TAPE_COOKIE_10 "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0" + +/* file names and filename extensions */ +#ifndef MSDOS +#define USERDATA_DIRECTORY ".rocksndiamonds" +#define SETUP_FILENAME "setup.conf" +#define LEVELSETUP_FILENAME "levelsetup.conf" +#define LEVELINFO_FILENAME "levelinfo.conf" +#define TAPEFILE_EXTENSION "tape" +#define SCOREFILE_EXTENSION "score" +#else +#define USERDATA_DIRECTORY "userdata" +#define SETUP_FILENAME "setup.cnf" +#define LEVELSETUP_FILENAME "lvlsetup.cnf" +#define LEVELINFO_FILENAME "lvlinfo.cnf" +#define TAPEFILE_EXTENSION "rec" +#define SCOREFILE_EXTENSION "sco" +#endif + +/* file permissions for newly written files */ +#define MODE_R_ALL (S_IRUSR | S_IRGRP | S_IROTH) +#define MODE_W_ALL (S_IWUSR | S_IWGRP | S_IWOTH) +#define MODE_X_ALL (S_IXUSR | S_IXGRP | S_IXOTH) +#define USERDATA_DIR_MODE (MODE_R_ALL | MODE_X_ALL | S_IWUSR) +#define LEVEL_PERMS (MODE_R_ALL | MODE_W_ALL) +#define SCORE_PERMS LEVEL_PERMS +#define TAPE_PERMS LEVEL_PERMS +#define SETUP_PERMS LEVEL_PERMS static void SaveUserLevelInfo(); /* for 'InitUserLevelDir()' */ static char *getSetupLine(char *, int); /* for 'SaveUserLevelInfo()' */ @@ -166,7 +205,7 @@ static void setLevelInfoToDefaults() strcpy(level.name, "Nameless Level"); - for(i=0; id_name) >= MAX_LEVDIR_FILENAME) - { - Error(ERR_WARN, "filename of level directory '%s' too long -- ignoring", - dir_entry->d_name); - continue; - } - filename = getPath2(directory, LEVELINFO_FILENAME); setup_file_list = loadSetupFileList(filename);