rnd-20131216-1-src
[rocksndiamonds.git] / src / libgame / misc.c
index 37aacf9187da13d46839f82cae07b629e357ac7e..eda87185ec74990bc6ac9efbee0b648a93d82436 100644 (file)
@@ -441,7 +441,7 @@ unsigned int get_random_number(int nr, int max)
 /* system info functions                                                     */
 /* ------------------------------------------------------------------------- */
 
-#if !defined(PLATFORM_MSDOS)
+#if !defined(PLATFORM_MSDOS) && !defined(PLATFORM_ANDROID)
 static char *get_corrected_real_name(char *real_name)
 {
   char *real_name_new = checked_malloc(MAX_USERNAME_LEN + 1);
@@ -1047,8 +1047,11 @@ void Error(int mode, char *format, ...)
   char *process_name = "";
 
 #if defined(PLATFORM_ANDROID)
-  android_log_prio = (mode & ERR_WARN ? ANDROID_LOG_WARN :
-                     mode & ERR_EXIT ? ANDROID_LOG_FATAL : ANDROID_LOG_INFO);
+  android_log_prio = (mode & ERR_DEBUG ? ANDROID_LOG_DEBUG :
+                     mode & ERR_INFO ? ANDROID_LOG_INFO :
+                     mode & ERR_WARN ? ANDROID_LOG_WARN :
+                     mode & ERR_EXIT ? ANDROID_LOG_FATAL :
+                     ANDROID_LOG_UNKNOWN);
 #endif
 
 #if 1
@@ -1450,7 +1453,9 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
     { KSYM_End,                "XK_End",               "end" },
     { KSYM_Page_Up,    "XK_Page_Up",           "page up" },
     { KSYM_Page_Down,  "XK_Page_Down",         "page down" },
-    { KSYM_Menu,       "XK_Menu",              "menu" },        /* Win-Menu */
+
+    { KSYM_Menu,       "XK_Menu",              "menu" },        /* menu key */
+    { KSYM_Back,       "XK_Back",              "back" },        /* back key */
 
     /* ASCII 0x20 to 0x40 keys (except numbers) */
     { KSYM_space,      "XK_space",             "space" },
@@ -2087,7 +2092,7 @@ DirectoryEntry *readDirectory(Directory *dir)
     dir->dir_entry = checked_calloc(sizeof(DirectoryEntry));
 
     dir->dir_entry->is_directory = FALSE;
-    if (line[strlen(line) - 1] = '/')
+    if (line[strlen(line) - 1] == '/')
     {
       dir->dir_entry->is_directory = TRUE;
 
@@ -2141,23 +2146,53 @@ void freeDirectoryEntry(DirectoryEntry *dir_entry)
 /* functions for checking files and filenames                                */
 /* ------------------------------------------------------------------------- */
 
+boolean directoryExists(char *dir_name)
+{
+  if (dir_name == NULL)
+    return FALSE;
+
+  boolean success = (access(dir_name, F_OK) == 0);
+
+#if defined(PLATFORM_ANDROID)
+  if (!success)
+  {
+    // this might be an asset directory; check by trying to open toc file
+    char *asset_toc_filename = getPath2(dir_name, ASSET_TOC_BASENAME);
+    SDL_RWops *file = SDL_RWFromFile(asset_toc_filename, MODE_READ);
+
+    checked_free(asset_toc_filename);
+
+    success = (file != NULL);
+
+    if (success)
+      SDL_RWclose(file);
+  }
+#endif
+
+  return success;
+}
+
 boolean fileExists(char *filename)
 {
   if (filename == NULL)
     return FALSE;
 
+  boolean success = (access(filename, F_OK) == 0);
+
 #if defined(PLATFORM_ANDROID)
-  // workaround: check if file exists by opening and closing it
-  SDL_RWops *file = SDL_RWFromFile(filename, MODE_READ);
-  boolean success = (file != NULL);
+  if (!success)
+  {
+    // this might be an asset file; check by trying to open it
+    SDL_RWops *file = SDL_RWFromFile(filename, MODE_READ);
 
-  if (success)
-    SDL_RWclose(file);
+    success = (file != NULL);
 
-  return success;
-#else
-  return (access(filename, F_OK) == 0);
+    if (success)
+      SDL_RWclose(file);
+  }
 #endif
+
+  return success;
 }
 
 boolean fileHasPrefix(char *basename, char *prefix)
@@ -2208,23 +2243,38 @@ boolean FileIsGraphic(char *filename)
 {
   char *basename = getBaseNamePtr(filename);
 
+#if defined(TARGET_SDL)
+  return (!fileHasSuffix(basename, "txt") &&
+         !fileHasSuffix(basename, "conf"));
+#else
   return fileHasSuffix(basename, "pcx");
+#endif
 }
 
 boolean FileIsSound(char *filename)
 {
   char *basename = getBaseNamePtr(filename);
 
+#if defined(TARGET_SDL)
+  return (!fileHasSuffix(basename, "txt") &&
+         !fileHasSuffix(basename, "conf"));
+#else
   return fileHasSuffix(basename, "wav");
+#endif
 }
 
 boolean FileIsMusic(char *filename)
 {
   char *basename = getBaseNamePtr(filename);
 
+#if defined(TARGET_SDL)
+  return (!fileHasSuffix(basename, "txt") &&
+         !fileHasSuffix(basename, "conf"));
+#else
   if (FileIsSound(basename))
     return TRUE;
 
+#if 0
 #if defined(TARGET_SDL)
   if ((fileHasPrefix(basename, "mod") && !fileHasSuffix(basename, "txt")) ||
       fileHasSuffix(basename, "mod") ||
@@ -2236,9 +2286,11 @@ boolean FileIsMusic(char *filename)
       fileHasSuffix(basename, "mp3") ||
       fileHasSuffix(basename, "ogg"))
     return TRUE;
+#endif
 #endif
 
   return FALSE;
+#endif
 }
 
 boolean FileIsArtworkType(char *basename, int type)
@@ -2496,10 +2548,13 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
   }
 
   list_pos = 0;
+
   for (i = 0; config_list[i].token != NULL; i++)
   {
     int len_config_token = strlen(config_list[i].token);
+#if 0
     int len_config_value = strlen(config_list[i].value);
+#endif
     boolean is_file_entry = TRUE;
 
     for (j = 0; suffix_list[j].token != NULL; j++)
@@ -2514,6 +2569,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
                  config_list[i].value);
 
        is_file_entry = FALSE;
+
        break;
       }
     }
@@ -2531,6 +2587,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
       if (list_pos >= num_file_list_entries)
        break;
 
+#if 0
       /* simple sanity check if this is really a file definition */
       if (!strEqual(&config_list[i].value[len_config_value - 4], ".pcx") &&
          !strEqual(&config_list[i].value[len_config_value - 4], ".wav") &&
@@ -2540,6 +2597,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
              config_list[i].token, config_list[i].value);
        Error(ERR_EXIT, "This seems to be no valid definition -- please fix");
       }
+#endif
 
       file_list[list_pos].token = config_list[i].token;
       file_list[list_pos].default_filename = config_list[i].value;
@@ -3524,7 +3582,7 @@ void debug_print_timestamp(int counter_nr, char *message)
 
   if (message)
 #if 1
-    Error(ERR_INFO, "%s%s%s %.3f %s",
+    Error(ERR_DEBUG, "%s%s%s %.3f %s",
 #else
     printf("%s%s%s %.3f %s\n",
 #endif