rnd-20000815-1-src
[rocksndiamonds.git] / src / files.c
index ce0aff38a2769de47d7b22becaa01980225fbb8e..f1872c68512544ce4385b77813f2fd0faa24b864 100644 (file)
@@ -14,7 +14,6 @@
 #include <ctype.h>
 #include <dirent.h>
 #include <sys/stat.h>
-#include <unistd.h>
 
 #include "files.h"
 #include "tools.h"
 #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);
 }
 
@@ -1093,7 +1120,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
 
@@ -1139,12 +1166,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"                          },
@@ -1513,12 +1540,12 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
     si->input[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 +1565,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 +1911,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, " ");
 
@@ -2186,7 +2213,7 @@ void SaveLevelSetup_SeriesInfo()
   chmod(filename, SETUP_PERMS);
 }
 
-#ifdef MSDOS
+#if defined(MSDOS) || defined(WIN32)
 void initErrorFile()
 {
   char *filename;