renamed function
[rocksndiamonds.git] / src / libgame / misc.c
index 17072d87cf249b43c38bbd21ebe0b27783dbef21..b71fee31934da47516917d3dbdb9e99aee3fdd49 100644 (file)
@@ -288,11 +288,31 @@ static void printf_log_prefix(int log_level, char *mode)
     printf_log_nonewline("[%s] ", log_token);
 }
 
-static void Log(int log_level, char *mode, char *format, va_list ap)
+static void vLog(int log_level, char *mode, char *format, va_list ap)
 {
   if (log_level < 0 || log_level > LOG_FATAL)
     return;
 
+  if (log_level == LOG_DEBUG)
+  {
+    if (!options.debug)
+      return;
+
+    // if optional debug mode specified, limit debug output accordingly
+    if (options.debug_mode != NULL &&
+       strstr(mode, options.debug_mode) == NULL)
+      return;
+  }
+
+#if defined(PLATFORM_ANDROID)
+  android_log_prio = (log_level == LOG_DEBUG ? ANDROID_LOG_DEBUG :
+                     log_level == LOG_INFO  ? ANDROID_LOG_INFO :
+                     log_level == LOG_WARN  ? ANDROID_LOG_WARN :
+                     log_level == LOG_ERROR ? ANDROID_LOG_ERROR :
+                     log_level == LOG_FATAL ? ANDROID_LOG_FATAL :
+                     ANDROID_LOG_UNKNOWN);
+#endif
+
   static boolean last_line_was_separator = FALSE;
   char *log_token = log_tokens[log_level];
 
@@ -332,7 +352,7 @@ void Debug(char *mode, char *format, ...)
   va_list ap;
 
   va_start(ap, format);
-  Log(LOG_DEBUG, mode, format, ap);
+  vLog(LOG_DEBUG, mode, format, ap);
   va_end(ap);
 }
 
@@ -341,7 +361,7 @@ void Info(char *format, ...)
   va_list ap;
 
   va_start(ap, format);
-  Log(LOG_INFO, NULL, format, ap);
+  vLog(LOG_INFO, NULL, format, ap);
   va_end(ap);
 }
 
@@ -350,7 +370,7 @@ void Warn(char *format, ...)
   va_list ap;
 
   va_start(ap, format);
-  Log(LOG_WARN, NULL, format, ap);
+  vLog(LOG_WARN, NULL, format, ap);
   va_end(ap);
 }
 
@@ -557,10 +577,15 @@ void SkipUntilDelayReached(unsigned int *counter_var, unsigned int delay,
 
 #if 0
 #if DEBUG
-  printf("::: %d: %d ms", *loop_var, delay);
   if (skip_frames)
-    printf(" -> SKIP %d FRAME(S) [%d ms]", skip_frames, skip_frames * delay);
-  printf("\n");
+    Debug("internal:SkipUntilDelayReached",
+         "%d: %d ms -> SKIP %d FRAME(S) [%d ms]",
+         *loop_var, delay,
+         skip_frames, skip_frames * delay);
+  else
+    Debug("internal:SkipUntilDelayReached",
+         "%d: %d ms",
+         *loop_var, delay);
 #endif
 #endif
 
@@ -1036,6 +1061,7 @@ void GetOptions(int argc, char *argv[],
 
   options.execute_command = NULL;
   options.special_flags = NULL;
+  options.debug_mode = NULL;
 
   options.mytapes = FALSE;
   options.serveronly = FALSE;
@@ -1170,6 +1196,10 @@ void GetOptions(int argc, char *argv[],
     else if (strncmp(option, "-debug", option_len) == 0)
     {
       options.debug = TRUE;
+
+      // optionally, debug output can be limited to a specific debug mode
+      if (option_arg != next_option)
+       options.debug_mode = getStringCopy(option_arg);
     }
     else if (strncmp(option, "-verbose", option_len) == 0)
     {
@@ -1860,7 +1890,7 @@ static void translate_keyname(Key *keysym, char **x11name, char **name, int mode
     }
 
     if (key == KSYM_UNDEFINED)
-      Error(ERR_WARN, "getKeyFromKeyName(): not completely implemented");
+      Warn("getKeyFromKeyName(): not completely implemented");
 
     *keysym = key;
   }
@@ -2228,12 +2258,12 @@ static void dumpList(ListNode *node_first)
 
   while (node)
   {
-    printf("['%s' (%d)]\n", node->key,
-          ((struct ListNodeInfo *)node->content)->num_references);
+    Debug("internal:dumpList", "['%s' (%d)]", node->key,
+         ((struct ListNodeInfo *)node->content)->num_references);
     node = node->next;
   }
 
-  printf("[%d nodes]\n", getNumNodes(node_first));
+  Debug("internal:dumpList", "[%d nodes]", getNumNodes(node_first));
 }
 #endif
 
@@ -3379,53 +3409,53 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info,
 
     if (options.debug && dynamic_tokens_found)
     {
-      Error(ERR_INFO_LINE, "-");
-      Error(ERR_INFO, "dynamic token(s) found in config file:");
-      Error(ERR_INFO, "- config file: '%s'", filename);
+      Debug("config", "---");
+      Debug("config", "dynamic token(s) found in config file:");
+      Debug("config", "- config file: '%s'", filename);
 
       for (list = setup_file_list; list != NULL; list = list->next)
       {
        char *value = getHashEntry(extra_file_hash, list->token);
 
        if (value != NULL && strEqual(value, known_token_value))
-         Error(ERR_INFO, "- dynamic token: '%s'", list->token);
+         Debug("config", "- dynamic token: '%s'", list->token);
       }
 
-      Error(ERR_INFO_LINE, "-");
+      Debug("config", "---");
     }
 
     if (unknown_tokens_found)
     {
-      Error(ERR_INFO_LINE, "-");
-      Error(ERR_INFO, "warning: unknown token(s) found in config file:");
-      Error(ERR_INFO, "- config file: '%s'", filename);
+      Warn("---");
+      Warn("unknown token(s) found in config file:");
+      Warn("- config file: '%s'", filename);
 
       for (list = setup_file_list; list != NULL; list = list->next)
       {
        char *value = getHashEntry(extra_file_hash, list->token);
 
        if (value != NULL && !strEqual(value, known_token_value))
-         Error(ERR_INFO, "- dynamic token: '%s'", list->token);
+         Warn("- dynamic token: '%s'", list->token);
       }
 
-      Error(ERR_INFO_LINE, "-");
+      Warn("---");
     }
 
     if (undefined_values_found)
     {
-      Error(ERR_INFO_LINE, "-");
-      Error(ERR_INFO, "warning: undefined values found in config file:");
-      Error(ERR_INFO, "- config file: '%s'", filename);
+      Warn("---");
+      Warn("undefined values found in config file:");
+      Warn("- config file: '%s'", filename);
 
       for (list = setup_file_list; list != NULL; list = list->next)
       {
        char *value = getHashEntry(empty_file_hash, list->token);
 
        if (value != NULL)
-         Error(ERR_INFO, "- undefined value for token: '%s'", list->token);
+         Warn("- undefined value for token: '%s'", list->token);
       }
 
-      Error(ERR_INFO_LINE, "-");
+      Warn("---");
     }
 
     freeSetupFileList(setup_file_list);
@@ -3531,7 +3561,7 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
 
   if (filename == NULL)
   {
-    Error(ERR_WARN, "cannot find artwork file '%s'", basename);
+    Warn("cannot find artwork file '%s'", basename);
 
     basename = file_list_entry->default_filename;
 
@@ -3557,7 +3587,7 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
 
     file_list_entry->fallback_to_default = TRUE;
 
-    Error(ERR_WARN, "trying default artwork file '%s'", basename);
+    Warn("trying default artwork file '%s'", basename);
 
     filename = getCustomArtworkFilename(basename, artwork_info->type);
 
@@ -3715,8 +3745,8 @@ void OpenLogFiles(void)
     {
       program.log_file[i] = program.log_file_default[i];   // reset to default
 
-      Error(ERR_WARN, "cannot open file '%s' for writing: %s",
-           program.log_filename[i], strerror(errno));
+      Warn("cannot open file '%s' for writing: %s",
+          program.log_filename[i], strerror(errno));
     }
 
     // output should be unbuffered so it is not truncated in a crash
@@ -3834,12 +3864,12 @@ void debug_print_timestamp(int counter_nr, char *message)
   counter[counter_nr][1] = counter[counter_nr][0];
 
   if (message)
-    Error(ERR_DEBUG, "%s%s%s %.3f %s",
-          debug_print_timestamp_get_padding(counter_nr * indent_size),
-          message,
-          debug_print_timestamp_get_padding(padding_size - strlen(message)),
-          timestamp_interval / 1000,
-          unit);
+    Debug("time", "%s%s%s %.3f %s",
+         debug_print_timestamp_get_padding(counter_nr * indent_size),
+         message,
+         debug_print_timestamp_get_padding(padding_size - strlen(message)),
+         timestamp_interval / 1000,
+         unit);
 }
 
 #if 0