rnd-20070319-1-src
[rocksndiamonds.git] / src / files.c
index 7c35c2359b8183c4526bfa0ab669912d426a4d8a..501339f135e66edb086800e341df9aef93c67347 100644 (file)
@@ -7774,10 +7774,11 @@ void SaveScore(int nr)
 #define NUM_PLAYER_SETUP_TOKENS                        16
 
 /* system setup */
-#define SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER     0
-#define SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE 1
+#define SETUP_TOKEN_SYSTEM_SDL_VIDEODRIVER     0
+#define SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER     1
+#define SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE 2
 
-#define NUM_SYSTEM_SETUP_TOKENS                        2
+#define NUM_SYSTEM_SETUP_TOKENS                        3
 
 /* options setup */
 #define SETUP_TOKEN_OPTIONS_VERBOSE            0
@@ -7917,6 +7918,7 @@ static struct TokenInfo player_setup_tokens[] =
 
 static struct TokenInfo system_setup_tokens[] =
 {
+  { TYPE_STRING,  &syi.sdl_videodriver,        "system.sdl_videodriver"        },
   { TYPE_STRING,  &syi.sdl_audiodriver,        "system.sdl_audiodriver"        },
   { TYPE_INTEGER, &syi.audio_fragment_size,"system.audio_fragment_size"        },
 };
@@ -8028,6 +8030,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
     si->input[i].key.drop  = (i == 0 ? DEFAULT_KEY_DROP  : KSYM_UNDEFINED);
   }
 
+  si->system.sdl_videodriver = getStringCopy(ARG_DEFAULT);
   si->system.sdl_audiodriver = getStringCopy(ARG_DEFAULT);
   si->system.audio_fragment_size = DEFAULT_AUDIO_FRAGMENT_SIZE;
 
@@ -8320,8 +8323,39 @@ void LoadCustomElementDescriptions()
 
 static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
 {
+  static struct TitleMessageInfo tmi;
+  static struct TokenInfo titlemessage_tokens[] =
+  {
+    { TYPE_INTEGER,    &tmi.x,                 ".x"                    },
+    { TYPE_INTEGER,    &tmi.y,                 ".y"                    },
+    { TYPE_INTEGER,    &tmi.width,             ".width"                },
+    { TYPE_INTEGER,    &tmi.height,            ".height"               },
+    { TYPE_INTEGER,    &tmi.chars,             ".chars"                },
+    { TYPE_INTEGER,    &tmi.lines,             ".lines"                },
+    { TYPE_INTEGER,    &tmi.align,             ".align"                },
+    { TYPE_INTEGER,    &tmi.valign,            ".valign"               },
+    { TYPE_INTEGER,    &tmi.font,              ".font"                 },
+    { TYPE_BOOLEAN,    &tmi.autowrap,          ".autowrap"             },
+    { TYPE_BOOLEAN,    &tmi.centered,          ".centered"             },
+    { TYPE_BOOLEAN,    &tmi.parse_comments,    ".parse_comments"       },
+    { TYPE_INTEGER,    &tmi.sort_priority,     ".sort_priority"        },
+
+    { -1,              NULL,                   NULL                    }
+  };
+  static struct
+  {
+    struct TitleMessageInfo *array;
+    char *text;
+  }
+  titlemessage_arrays[] =
+  {
+    { titlemessage_initial,            "[titlemessage_initial]"        },
+    { titlemessage,                    "[titlemessage]"                },
+
+    { NULL,                            NULL                            }
+  };
   SetupFileHash *setup_file_hash;
-  int i;
+  int i, j, k;
 
 #if 0
   printf("LoadSpecialMenuDesignSettings from file '%s' ...\n", filename);
@@ -8333,28 +8367,60 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
   /* special case: initialize with default values that may be overwritten */
   for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++)
   {
-    char *value_x = getHashEntry(setup_file_hash, "menu.draw_xoffset");
-    char *value_y = getHashEntry(setup_file_hash, "menu.draw_yoffset");
-    char *list_size = getHashEntry(setup_file_hash, "menu.list_size");
+    char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset");
+    char *value_2 = getHashEntry(setup_file_hash, "menu.draw_yoffset");
+    char *value_3 = getHashEntry(setup_file_hash, "menu.list_size");
 
-    if (value_x != NULL)
-      menu.draw_xoffset[i] = get_integer_from_string(value_x);
-    if (value_y != NULL)
-      menu.draw_yoffset[i] = get_integer_from_string(value_y);
-    if (list_size != NULL)
-      menu.list_size[i] = get_integer_from_string(list_size);
+    if (value_1 != NULL)
+      menu.draw_xoffset[i] = get_integer_from_string(value_1);
+    if (value_2 != NULL)
+      menu.draw_yoffset[i] = get_integer_from_string(value_2);
+    if (value_3 != NULL)
+      menu.list_size[i] = get_integer_from_string(value_3);
   }
 
   /* special case: initialize with default values that may be overwritten */
   for (i = 0; i < NUM_SPECIAL_GFX_INFO_ARGS; i++)
   {
-    char *value_x = getHashEntry(setup_file_hash, "menu.draw_xoffset.INFO");
-    char *value_y = getHashEntry(setup_file_hash, "menu.draw_yoffset.INFO");
+    char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset.INFO");
+    char *value_2 = getHashEntry(setup_file_hash, "menu.draw_yoffset.INFO");
 
-    if (value_x != NULL)
-      menu.draw_xoffset_info[i] = get_integer_from_string(value_x);
-    if (value_y != NULL)
-      menu.draw_yoffset_info[i] = get_integer_from_string(value_y);
+    if (value_1 != NULL)
+      menu.draw_xoffset_info[i] = get_integer_from_string(value_1);
+    if (value_2 != NULL)
+      menu.draw_yoffset_info[i] = get_integer_from_string(value_2);
+  }
+
+  /* special case: initialize with default values that may be overwritten */
+  for (i = 0; titlemessage_arrays[i].array != NULL; i++)
+  {
+    struct TitleMessageInfo *array = titlemessage_arrays[i].array;
+    char *base_token = titlemessage_arrays[i].text;
+
+    for (j = 0; titlemessage_tokens[j].type != -1; j++)
+    {
+      char *token = getStringCat2(base_token, titlemessage_tokens[j].text);
+      char *value = getHashEntry(setup_file_hash, token);
+
+      if (value != NULL)
+      {
+       int parameter_value = get_token_parameter_value(token, value);
+
+       for (k = 0; k < MAX_NUM_TITLE_MESSAGES; k++)
+       {
+         tmi = array[k];
+
+         if (titlemessage_tokens[j].type == TYPE_INTEGER)
+           *(boolean *)titlemessage_tokens[j].value = (boolean)parameter_value;
+         else
+           *(int     *)titlemessage_tokens[j].value = (int)parameter_value;
+
+         array[k] = tmi;
+       }
+      }
+
+      free(token);
+    }
   }
 
   /* read (and overwrite with) values that may be specified in config file */
@@ -8364,7 +8430,7 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
 
     if (value != NULL)
       *image_config_vars[i].value =
-       get_auto_parameter_value(image_config_vars[i].token, value);
+       get_token_parameter_value(image_config_vars[i].token, value);
   }
 
   freeSetupFileHash(setup_file_hash);
@@ -8375,13 +8441,20 @@ void LoadSpecialMenuDesignSettings()
   char *filename_base = UNDEFINED_FILENAME, *filename_local;
   int i, j;
 
-  /* always start with reliable default values from default config */
+  /* always start with reliable default values from static default config */
   for (i = 0; image_config_vars[i].token != NULL; i++)
     for (j = 0; image_config[j].token != NULL; j++)
       if (strEqual(image_config_vars[i].token, image_config[j].token))
        *image_config_vars[i].value =
-         get_auto_parameter_value(image_config_vars[i].token,
-                                  image_config[j].value);
+         get_token_parameter_value(image_config_vars[i].token,
+                                   image_config[j].value);
+
+  /* special case: initialize with default values that may be overwritten */
+  for (i = 0; i < MAX_NUM_TITLE_MESSAGES; i++)
+  {
+    titlemessage_initial[i] = titlemessage_initial_default;
+    titlemessage[i] = titlemessage_default;
+  }
 
   if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS))
   {
@@ -8453,19 +8526,19 @@ void LoadUserDefinedEditorElementList(int **elements, int *num_elements)
     {
       if (num_unknown_tokens == 0)
       {
-       Error(ERR_RETURN_LINE, "-");
-       Error(ERR_RETURN, "warning: unknown token(s) found in config file:");
-       Error(ERR_RETURN, "- config file: '%s'", filename);
+       Error(ERR_INFO_LINE, "-");
+       Error(ERR_INFO, "warning: unknown token(s) found in config file:");
+       Error(ERR_INFO, "- config file: '%s'", filename);
 
        num_unknown_tokens++;
       }
 
-      Error(ERR_RETURN, "- token: '%s'", list->token);
+      Error(ERR_INFO, "- token: '%s'", list->token);
     }
   }
 
   if (num_unknown_tokens > 0)
-    Error(ERR_RETURN_LINE, "-");
+    Error(ERR_INFO_LINE, "-");
 
   while (*num_elements % 4)    /* pad with empty elements, if needed */
     (*elements)[(*num_elements)++] = EL_EMPTY;
@@ -8766,18 +8839,18 @@ void print_unknown_token(char *filename, char *token, int token_nr)
 {
   if (token_nr == 0)
   {
-    Error(ERR_RETURN_LINE, "-");
-    Error(ERR_RETURN, "warning: unknown token(s) found in config file:");
-    Error(ERR_RETURN, "- config file: '%s'", filename);
+    Error(ERR_INFO_LINE, "-");
+    Error(ERR_INFO, "warning: unknown token(s) found in config file:");
+    Error(ERR_INFO, "- config file: '%s'", filename);
   }
 
-  Error(ERR_RETURN, "- token: '%s'", token);
+  Error(ERR_INFO, "- token: '%s'", token);
 }
 
 void print_unknown_token_end(int token_nr)
 {
   if (token_nr > 0)
-    Error(ERR_RETURN_LINE, "-");
+    Error(ERR_INFO_LINE, "-");
 }
 
 void LoadHelpAnimInfo()