rnd-20061019-1-src
[rocksndiamonds.git] / src / libgame / misc.c
index 0d19ff9c16eadf9844d3ada6371c35e685cb3748..ec16eeee4568f1b7c95a23b5d810a64c1edfcad9 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment                      *
+* (c) 1994-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -790,8 +790,6 @@ char *GetError()
   return internal_error;
 }
 
-#if 1
-
 void Error(int mode, char *format, ...)
 {
   static boolean last_line_was_separator = FALSE;
@@ -853,87 +851,6 @@ void Error(int mode, char *format, ...)
   }
 }
 
-#else
-
-void Error(int mode, char *format, ...)
-{
-  static boolean last_line_was_separator = FALSE;
-  char *process_name = "";
-  FILE *error = stderr;
-  char *newline = "\n";
-
-  /* display warnings only when running in verbose mode */
-  if (mode & ERR_WARN && !options.verbose)
-    return;
-
-  if (mode == ERR_RETURN_LINE)
-  {
-    if (!last_line_was_separator)
-      fprintf_line(error, format, 79);
-
-    last_line_was_separator = TRUE;
-
-    return;
-  }
-
-  last_line_was_separator = FALSE;
-
-#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS)
-  newline = "\r\n";
-
-  if ((error = openErrorFile()) == NULL)
-  {
-    printf("Cannot write to error output file!%s", newline);
-
-    program.exit_function(1);
-  }
-#endif
-
-  if (mode & ERR_SOUND_SERVER)
-    process_name = " sound server";
-  else if (mode & ERR_NETWORK_SERVER)
-    process_name = " network server";
-  else if (mode & ERR_NETWORK_CLIENT)
-    process_name = " network client **";
-
-  if (format)
-  {
-    va_list ap;
-
-    fprintf(error, "%s%s: ", program.command_basename, process_name);
-
-    if (mode & ERR_WARN)
-      fprintf(error, "warning: ");
-
-    va_start(ap, format);
-    vfprintf(error, format, ap);
-    va_end(ap);
-  
-    fprintf(error, "%s", newline);
-  }
-  
-  if (mode & ERR_HELP)
-    fprintf(error, "%s: Try option '--help' for more information.%s",
-           program.command_basename, newline);
-
-  if (mode & ERR_EXIT)
-    fprintf(error, "%s%s: aborting%s",
-           program.command_basename, process_name, newline);
-
-  if (error != stderr)
-    fclose(error);
-
-  if (mode & ERR_EXIT)
-  {
-    if (mode & ERR_FROM_SERVER)
-      exit(1);                         /* child process: normal exit */
-    else
-      program.exit_function(1);                /* main process: clean up stuff */
-  }
-}
-
-#endif
-
 
 /* ------------------------------------------------------------------------- */
 /* checked memory allocation and freeing functions                           */
@@ -1320,13 +1237,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));
-#if 1
     else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
       sprintf(name_buffer, "F%d", (int)(key - KSYM_FKEY_FIRST + 1));
-#else
-    else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
-      sprintf(name_buffer, "function F%d", (int)(key - KSYM_FKEY_FIRST + 1));
-#endif
     else if (key == KSYM_UNDEFINED)
       strcpy(name_buffer, "(undefined)");
     else
@@ -1632,7 +1544,7 @@ void deleteNodeFromList(ListNode **node_first, char *key,
 
   if (strEqual((*node_first)->key, key))
   {
-    free((*node_first)->key);
+    checked_free((*node_first)->key);
     if (destructor_function)
       destructor_function((*node_first)->content);
     *node_first = (*node_first)->next;
@@ -1849,6 +1761,12 @@ int get_parameter_value(char *value_raw, char *suffix, int type)
              strEqual(value, "up")    ? MV_UP :
              strEqual(value, "down")  ? MV_DOWN : MV_NONE);
   }
+  else if (strEqual(suffix, ".align"))
+  {
+    result = (strEqual(value, "left")   ? ALIGN_LEFT :
+             strEqual(value, "right")  ? ALIGN_RIGHT :
+             strEqual(value, "center") ? ALIGN_CENTER : ALIGN_DEFAULT);
+  }
   else if (strEqual(suffix, ".anim_mode"))
   {
     result = (string_has_parameter(value, "none")      ? ANIM_NONE :
@@ -1862,6 +1780,7 @@ int get_parameter_value(char *value_raw, char *suffix, int type)
              string_has_parameter(value, "ce_delay")   ? ANIM_CE_DELAY :
              string_has_parameter(value, "horizontal") ? ANIM_HORIZONTAL :
              string_has_parameter(value, "vertical")   ? ANIM_VERTICAL :
+             string_has_parameter(value, "centered")   ? ANIM_CENTERED :
              ANIM_DEFAULT);
 
     if (string_has_parameter(value, "reverse"))
@@ -1932,14 +1851,14 @@ void get_aspect_ratio_from_screen_mode(struct ScreenModeInfo *screen_mode,
 
   do
   {
-    *x = i * aspect_ratio;
+    *x = i * aspect_ratio + 0.000001;
     *y = i;
 
     aspect_ratio_new = (float)*x / (float)*y;
 
     i++;
   }
-  while (aspect_ratio_new != aspect_ratio && *x < screen_mode->width);
+  while (aspect_ratio_new != aspect_ratio && *y < screen_mode->height);
 }
 
 static void FreeCustomArtworkList(struct ArtworkListInfo *,
@@ -2814,14 +2733,11 @@ char *getErrorFilename(char *basename)
 
 void openErrorFile()
 {
-  /* always start with reliable default values */
-  program.error_file = stderr;
+  InitUserDataDirectory();
 
-#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS)
   if ((program.error_file = fopen(program.error_filename, MODE_WRITE)) == NULL)
     fprintf_newline(stderr, "ERROR: cannot open file '%s' for writing!",
                    program.error_filename);
-#endif
 }
 
 void closeErrorFile()