freeSetupFileHash(setup_file_hash);
}
-static int get_token_parameter_value(char *token, char *value_raw)
+static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
{
- char *suffix;
-
- if (token == NULL || value_raw == NULL)
- return ARG_UNDEFINED_VALUE;
-
- suffix = strrchr(token, '.');
- if (suffix == NULL)
- suffix = token;
-
- if (strncmp(suffix, ".font", 5) == 0)
+ 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" },
+ { TYPE_INTEGER, &tmi.anim_mode, ".anim_mode" },
+ { TYPE_INTEGER, &tmi.fade_delay, ".fade_delay" },
+ { TYPE_INTEGER, &tmi.post_delay, ".post_delay" },
+ { TYPE_INTEGER, &tmi.auto_delay, ".auto_delay" },
+
+ { -1, NULL, NULL }
+ };
+ static struct
{
- int i;
-
- /* !!! OPTIMIZE THIS BY USING HASH !!! */
- for (i = 0; i < NUM_FONTS; i++)
- if (strEqual(value_raw, font_info[i].token_name))
- return i;
-
- /* if font not found, use reliable default value */
- return FONT_INITIAL_1;
+ struct TitleMessageInfo *array;
+ char *text;
}
+ titlemessage_arrays[] =
+ {
+ { titlemessage_initial, "[titlemessage_initial]" },
+ { titlemessage, "[titlemessage]" },
- return get_parameter_value(value_raw, suffix, TYPE_INTEGER);
-}
-
-static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
-{
+ { NULL, NULL }
+ };
SetupFileHash *setup_file_hash;
- int i;
+ int i, j, k;
#if 0
printf("LoadSpecialMenuDesignSettings from file '%s' ...\n", filename);
if ((setup_file_hash = loadSetupFileHash(filename)) == NULL)
return;
+ /* the following initializes hierarchical values from dynamic configuration */
+
/* special case: initialize with default values that may be overwritten */
+ /* (e.g., init "menu.draw_xoffset.INFO" from "menu.draw_xoffset") */
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 */
+ /* (eg, init "menu.draw_xoffset.INFO[MUSIC]" from "menu.draw_xoffset.INFO") */
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 */
+ /* (e.g., init "titlemessage_1.anim_mode" from "[titlemessage].anim_mode") */
+ 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 */
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))
get_token_parameter_value(image_config_vars[i].token,
image_config[j].value);
+ /* the following initializes hierarchical values from static configuration */
+
+ /* special case: initialize "ARG_DEFAULT" values in static default config */
+ /* (e.g., initialize "[titlemessage].anim_mode" from "[title].anim_mode") */
+ titlemessage_initial_default.anim_mode = title_initial_default.anim_mode;
+ titlemessage_initial_default.fade_delay = title_initial_default.fade_delay;
+ titlemessage_initial_default.post_delay = title_initial_default.post_delay;
+ titlemessage_initial_default.auto_delay = title_initial_default.auto_delay;
+ titlemessage_default.anim_mode = title_default.anim_mode;
+ titlemessage_default.fade_delay = title_default.fade_delay;
+ titlemessage_default.post_delay = title_default.post_delay;
+ titlemessage_default.auto_delay = title_default.auto_delay;
+
+ /* special case: initialize "ARG_DEFAULT" values in static default config */
+ /* (e.g., init "titlemessage_1.anim_mode" from "[titlemessage].anim_mode") */
+ 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))
{
/* first look for special settings configured in level series config */