rnd-20020609-1-src
[rocksndiamonds.git] / src / libgame / misc.c
index 9fa1153550d80a6df83737e2a80a3e4f71c1591c..8fe3200d3c4a28b22675eeccd81a9fc00f7450da 100644 (file)
@@ -111,10 +111,12 @@ static void sleep_milliseconds(unsigned long milliseconds_delay)
 {
   boolean do_busy_waiting = (milliseconds_delay < 5 ? TRUE : FALSE);
 
+#if 0
 #if defined(PLATFORM_MSDOS)
-  /* don't use select() to perform waiting operations under DOS/Windows
+  /* don't use select() to perform waiting operations under DOS
      environment; always use a busy loop for waiting instead */
   do_busy_waiting = TRUE;
+#endif
 #endif
 
   if (do_busy_waiting)
@@ -134,6 +136,8 @@ static void sleep_milliseconds(unsigned long milliseconds_delay)
   {
 #if defined(TARGET_SDL)
     SDL_Delay(milliseconds_delay);
+#elif defined(TARGET_ALLEGRO)
+    rest(milliseconds_delay);
 #else
     struct timeval delay;
 
@@ -817,6 +821,30 @@ void putFileChunk(FILE *file, char *chunk_name, int chunk_size,
   }
 }
 
+int getFileVersion(FILE *file)
+{
+  int version_major, version_minor, version_patch;
+
+  version_major = fgetc(file);
+  version_minor = fgetc(file);
+  version_patch = fgetc(file);
+  fgetc(file);         /* not used */
+
+  return VERSION_IDENT(version_major, version_minor, version_patch);
+}
+
+void putFileVersion(FILE *file, int version)
+{
+  int version_major = VERSION_MAJOR(version);
+  int version_minor = VERSION_MINOR(version);
+  int version_patch = VERSION_PATCH(version);
+
+  fputc(version_major, file);
+  fputc(version_minor, file);
+  fputc(version_patch, file);
+  fputc(0, file);      /* not used */
+}
+
 void ReadUnusedBytesFromFile(FILE *file, unsigned long bytes)
 {
   while (bytes-- && !feof(file))
@@ -829,6 +857,11 @@ void WriteUnusedBytesToFile(FILE *file, unsigned long bytes)
     fputc(0, file);
 }
 
+
+/* ------------------------------------------------------------------------- */
+/* functions to translate key identifiers between different format           */
+/* ------------------------------------------------------------------------- */
+
 #define TRANSLATE_KEYSYM_TO_KEYNAME    0
 #define TRANSLATE_KEYSYM_TO_X11KEYNAME 1
 #define TRANSLATE_KEYNAME_TO_KEYSYM    2
@@ -958,8 +991,8 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
       sprintf(name_buffer, "%c", '0' + (char)(key - KSYM_0));
     else if (key >= KSYM_KP_0 && key <= KSYM_KP_9)
       sprintf(name_buffer, "keypad %c", '0' + (char)(key - KSYM_KP_0));
-    else if (key >= KSYM_F1 && key <= KSYM_F24)
-      sprintf(name_buffer, "function F%d", (int)(key - KSYM_F1 + 1));
+    else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
+      sprintf(name_buffer, "function F%d", (int)(key - KSYM_FKEY_FIRST + 1));
     else if (key == KSYM_UNDEFINED)
       strcpy(name_buffer, "(undefined)");
     else
@@ -995,8 +1028,8 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
       sprintf(name_buffer, "XK_%c", '0' + (char)(key - KSYM_0));
     else if (key >= KSYM_KP_0 && key <= KSYM_KP_9)
       sprintf(name_buffer, "XK_KP_%c", '0' + (char)(key - KSYM_KP_0));
-    else if (key >= KSYM_F1 && key <= KSYM_F24)
-      sprintf(name_buffer, "XK_F%d", (int)(key - KSYM_F1 + 1));
+    else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
+      sprintf(name_buffer, "XK_F%d", (int)(key - KSYM_FKEY_FIRST + 1));
     else if (key == KSYM_UNDEFINED)
       strcpy(name_buffer, "[undefined]");
     else
@@ -1072,7 +1105,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
          ((c2 >= '0' && c1 <= '9') || c2 == '\0'))
        d = atoi(&name_ptr[4]);
 
-      if (d >=1 && d <= 24)
+      if (d >= 1 && d <= KSYM_NUM_FKEYS)
        key = KSYM_F1 + (Key)(d - 1);
     }
     else if (strncmp(name_ptr, "XK_", 3) == 0)
@@ -1196,16 +1229,34 @@ boolean FileIsSound(char *basename)
 
 boolean FileIsMusic(char *basename)
 {
+  /* "music" can be a WAV (loop) file or (if compiled with SDL) a MOD file */
+
+  if (FileIsSound(basename))
+    return TRUE;
+
+#if defined(TARGET_SDL)
   if (strlen(basename) > 4 &&
       (strcmp(&basename[strlen(basename) - 4], ".mod") == 0 ||
        strcmp(&basename[strlen(basename) - 4], ".MOD") == 0 ||
        strncmp(basename, "mod.", 4) == 0 ||
        strncmp(basename, "MOD.", 4) == 0))
     return TRUE;
+#endif
 
   return FALSE;
 }
 
+boolean FileIsArtworkType(char *basename, int type)
+{
+  if ((type == TREE_TYPE_GRAPHICS_DIR && FileIsGraphic(basename)) ||
+      (type == TREE_TYPE_SOUNDS_DIR && FileIsSound(basename)) ||
+      (type == TREE_TYPE_MUSIC_DIR && FileIsMusic(basename)))
+    return TRUE;
+
+  return FALSE;
+}
+
+
 /* ========================================================================= */
 /* functions only needed for non-Unix (non-command-line) systems */
 /* ========================================================================= */