X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=37210cd7ecc37b2631f1d21ad805375e2dc3eb95;hb=bb2ddcf13df18d69e4472d4697da173981970e9d;hp=ce0aff38a2769de47d7b22becaa01980225fbb8e;hpb=adaabca253f2e76597725cdc86fc1fff6f0de1d2;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index ce0aff38..37210cd7 100644 --- a/src/files.c +++ b/src/files.c @@ -14,7 +14,6 @@ #include #include #include -#include #include "files.h" #include "tools.h" @@ -64,9 +63,33 @@ #define LEVELFILE_EXTENSION "lvl" #define TAPEFILE_EXTENSION "tap" #define SCOREFILE_EXTENSION "sco" +#endif + +#if defined(MSDOS) || defined(WIN32) #define ERROR_FILENAME "error.out" #endif +#ifdef WIN32 +#ifndef S_IRGRP +#define S_IRGRP S_IRUSR +#endif +#ifndef S_IROTH +#define S_IROTH S_IRUSR +#endif +#ifndef S_IWGRP +#define S_IWGRP S_IWUSR +#endif +#ifndef S_IWOTH +#define S_IWOTH S_IWUSR +#endif +#ifndef S_IXGRP +#define S_IXGRP S_IXUSR +#endif +#ifndef S_IXOTH +#define S_IXOTH S_IXUSR +#endif +#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) @@ -324,7 +347,11 @@ static char *getScoreFilename(int nr) static void createDirectory(char *dir, char *text) { if (access(dir, F_OK) != 0) +#ifdef WIN32 + if (mkdir(dir) != 0) +#else if (mkdir(dir, USERDATA_DIR_MODE) != 0) +#endif Error(ERR_WARN, "cannot create %s directory '%s'", text, dir); } @@ -1051,39 +1078,40 @@ void SaveScore(int level_nr) #define SETUP_TOKEN_TEAM_MODE 10 #define SETUP_TOKEN_HANDICAP 11 #define SETUP_TOKEN_TIME_LIMIT 12 +#define SETUP_TOKEN_FULLSCREEN 13 /* player setup */ -#define SETUP_TOKEN_USE_JOYSTICK 13 -#define SETUP_TOKEN_JOY_DEVICE_NAME 14 -#define SETUP_TOKEN_JOY_XLEFT 15 -#define SETUP_TOKEN_JOY_XMIDDLE 16 -#define SETUP_TOKEN_JOY_XRIGHT 17 -#define SETUP_TOKEN_JOY_YUPPER 18 -#define SETUP_TOKEN_JOY_YMIDDLE 19 -#define SETUP_TOKEN_JOY_YLOWER 20 -#define SETUP_TOKEN_JOY_SNAP 21 -#define SETUP_TOKEN_JOY_BOMB 22 -#define SETUP_TOKEN_KEY_LEFT 23 -#define SETUP_TOKEN_KEY_RIGHT 24 -#define SETUP_TOKEN_KEY_UP 25 -#define SETUP_TOKEN_KEY_DOWN 26 -#define SETUP_TOKEN_KEY_SNAP 27 -#define SETUP_TOKEN_KEY_BOMB 28 +#define SETUP_TOKEN_USE_JOYSTICK 14 +#define SETUP_TOKEN_JOY_DEVICE_NAME 15 +#define SETUP_TOKEN_JOY_XLEFT 16 +#define SETUP_TOKEN_JOY_XMIDDLE 17 +#define SETUP_TOKEN_JOY_XRIGHT 18 +#define SETUP_TOKEN_JOY_YUPPER 19 +#define SETUP_TOKEN_JOY_YMIDDLE 20 +#define SETUP_TOKEN_JOY_YLOWER 21 +#define SETUP_TOKEN_JOY_SNAP 22 +#define SETUP_TOKEN_JOY_BOMB 23 +#define SETUP_TOKEN_KEY_LEFT 24 +#define SETUP_TOKEN_KEY_RIGHT 25 +#define SETUP_TOKEN_KEY_UP 26 +#define SETUP_TOKEN_KEY_DOWN 27 +#define SETUP_TOKEN_KEY_SNAP 28 +#define SETUP_TOKEN_KEY_BOMB 29 /* level directory info */ -#define LEVELINFO_TOKEN_NAME 29 -#define LEVELINFO_TOKEN_NAME_SHORT 30 -#define LEVELINFO_TOKEN_NAME_SORTING 31 -#define LEVELINFO_TOKEN_AUTHOR 32 -#define LEVELINFO_TOKEN_IMPORTED_FROM 33 -#define LEVELINFO_TOKEN_LEVELS 34 -#define LEVELINFO_TOKEN_FIRST_LEVEL 35 -#define LEVELINFO_TOKEN_SORT_PRIORITY 36 -#define LEVELINFO_TOKEN_LEVEL_GROUP 37 -#define LEVELINFO_TOKEN_READONLY 38 +#define LEVELINFO_TOKEN_NAME 30 +#define LEVELINFO_TOKEN_NAME_SHORT 31 +#define LEVELINFO_TOKEN_NAME_SORTING 32 +#define LEVELINFO_TOKEN_AUTHOR 33 +#define LEVELINFO_TOKEN_IMPORTED_FROM 34 +#define LEVELINFO_TOKEN_LEVELS 35 +#define LEVELINFO_TOKEN_FIRST_LEVEL 36 +#define LEVELINFO_TOKEN_SORT_PRIORITY 37 +#define LEVELINFO_TOKEN_LEVEL_GROUP 38 +#define LEVELINFO_TOKEN_READONLY 39 #define FIRST_GLOBAL_SETUP_TOKEN SETUP_TOKEN_PLAYER_NAME -#define LAST_GLOBAL_SETUP_TOKEN SETUP_TOKEN_TIME_LIMIT +#define LAST_GLOBAL_SETUP_TOKEN SETUP_TOKEN_FULLSCREEN #define FIRST_PLAYER_SETUP_TOKEN SETUP_TOKEN_USE_JOYSTICK #define LAST_PLAYER_SETUP_TOKEN SETUP_TOKEN_KEY_BOMB @@ -1093,7 +1121,7 @@ void SaveScore(int level_nr) #define TYPE_BOOLEAN 1 #define TYPE_SWITCH 2 -#define TYPE_KEYSYM 3 +#define TYPE_KEY 3 #define TYPE_INTEGER 4 #define TYPE_STRING 5 @@ -1127,6 +1155,7 @@ static struct { TYPE_SWITCH, &si.team_mode, "team_mode" }, { TYPE_SWITCH, &si.handicap, "handicap" }, { TYPE_SWITCH, &si.time_limit, "time_limit" }, + { TYPE_SWITCH, &si.fullscreen, "fullscreen" }, /* player setup */ { TYPE_BOOLEAN, &sii.use_joystick, ".use_joystick" }, @@ -1139,12 +1168,12 @@ static struct { TYPE_INTEGER, &sii.joy.ylower, ".joy.ylower" }, { TYPE_INTEGER, &sii.joy.snap, ".joy.snap_field" }, { TYPE_INTEGER, &sii.joy.bomb, ".joy.place_bomb" }, - { TYPE_KEYSYM, &sii.key.left, ".key.move_left" }, - { TYPE_KEYSYM, &sii.key.right, ".key.move_right" }, - { TYPE_KEYSYM, &sii.key.up, ".key.move_up" }, - { TYPE_KEYSYM, &sii.key.down, ".key.move_down" }, - { TYPE_KEYSYM, &sii.key.snap, ".key.snap_field" }, - { TYPE_KEYSYM, &sii.key.bomb, ".key.place_bomb" }, + { TYPE_KEY, &sii.key.left, ".key.move_left" }, + { TYPE_KEY, &sii.key.right, ".key.move_right" }, + { TYPE_KEY, &sii.key.up, ".key.move_up" }, + { TYPE_KEY, &sii.key.down, ".key.move_down" }, + { TYPE_KEY, &sii.key.snap, ".key.snap_field" }, + { TYPE_KEY, &sii.key.bomb, ".key.place_bomb" }, /* level directory info */ { TYPE_STRING, &ldi.name, "name" }, @@ -1500,6 +1529,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->team_mode = FALSE; si->handicap = TRUE; si->time_limit = TRUE; + si->fullscreen = FALSE; for (i=0; iinput[i].joy.ylower = JOYSTICK_YLOWER; si->input[i].joy.snap = (i == 0 ? JOY_BUTTON_1 : 0); si->input[i].joy.bomb = (i == 0 ? JOY_BUTTON_2 : 0); - si->input[i].key.left = (i == 0 ? DEFAULT_KEY_LEFT : KEY_UNDEFINDED); - si->input[i].key.right = (i == 0 ? DEFAULT_KEY_RIGHT : KEY_UNDEFINDED); - si->input[i].key.up = (i == 0 ? DEFAULT_KEY_UP : KEY_UNDEFINDED); - si->input[i].key.down = (i == 0 ? DEFAULT_KEY_DOWN : KEY_UNDEFINDED); - si->input[i].key.snap = (i == 0 ? DEFAULT_KEY_SNAP : KEY_UNDEFINDED); - si->input[i].key.bomb = (i == 0 ? DEFAULT_KEY_BOMB : KEY_UNDEFINDED); + si->input[i].key.left = (i == 0 ? DEFAULT_KEY_LEFT : KEY_UNDEFINED); + si->input[i].key.right = (i == 0 ? DEFAULT_KEY_RIGHT : KEY_UNDEFINED); + si->input[i].key.up = (i == 0 ? DEFAULT_KEY_UP : KEY_UNDEFINED); + si->input[i].key.down = (i == 0 ? DEFAULT_KEY_DOWN : KEY_UNDEFINED); + si->input[i].key.snap = (i == 0 ? DEFAULT_KEY_SNAP : KEY_UNDEFINED); + si->input[i].key.bomb = (i == 0 ? DEFAULT_KEY_BOMB : KEY_UNDEFINED); } } @@ -1538,8 +1568,8 @@ static void setSetupInfo(int token_nr, char *token_value) *(boolean *)setup_value = get_string_boolean_value(token_value); break; - case TYPE_KEYSYM: - *(KeySym *)setup_value = getKeySymFromX11KeyName(token_value); + case TYPE_KEY: + *(Key *)setup_value = getKeyFromX11KeyName(token_value); break; case TYPE_INTEGER: @@ -1884,12 +1914,12 @@ static char *getSetupLine(char *prefix, int token_nr) strcat(entry, (*(boolean *)setup_value ? "on" : "off")); break; - case TYPE_KEYSYM: + case TYPE_KEY: { - KeySym keysym = *(KeySym *)setup_value; - char *keyname = getKeyNameFromKeySym(keysym); + Key key = *(Key *)setup_value; + char *keyname = getKeyNameFromKey(key); - strcat(entry, getX11KeyNameFromKeySym(keysym)); + strcat(entry, getX11KeyNameFromKey(key)); for (i=strlen(entry); i<50; i++) strcat(entry, " "); @@ -2050,7 +2080,7 @@ static void checkSeriesInfo() level_directory = getPath2((leveldir_current->user_defined ? getUserLevelDir("") : options.level_directory), - leveldir_current->filename); + leveldir_current->fullpath); if ((dir = opendir(level_directory)) == NULL) { @@ -2186,7 +2216,7 @@ void SaveLevelSetup_SeriesInfo() chmod(filename, SETUP_PERMS); } -#ifdef MSDOS +#if defined(MSDOS) || defined(WIN32) void initErrorFile() { char *filename;