-/* This function checks if a string <s> of the format "string1, string2, ..."
- exactly contains a string <s_contained>. */
-
-static boolean string_has_parameter(char *s, char *s_contained)
-{
- char *substring;
-
- if (s == NULL || s_contained == NULL)
- return FALSE;
-
- if (strlen(s_contained) > strlen(s))
- return FALSE;
-
- if (strncmp(s, s_contained, strlen(s_contained)) == 0)
- {
- char next_char = s[strlen(s_contained)];
-
- /* check if next character is delimiter or whitespace */
- return (next_char == ',' || next_char == '\0' ||
- next_char == ' ' || next_char == '\t' ? TRUE : FALSE);
- }
-
- /* check if string contains another parameter string after a comma */
- substring = strchr(s, ',');
- if (substring == NULL) /* string does not contain a comma */
- return FALSE;
-
- /* advance string pointer to next character after the comma */
- substring++;
-
- /* skip potential whitespaces after the comma */
- while (*substring == ' ' || *substring == '\t')
- substring++;
-
- return string_has_parameter(substring, s_contained);
-}
-
-int get_parameter_value(char *value_raw, char *suffix, int type)
-{
- char *value = getStringToLower(value_raw);
- int result = 0; /* probably a save default value */
-
- if (strEqual(suffix, ".direction"))
- {
- result = (strEqual(value, "left") ? MV_LEFT :
- strEqual(value, "right") ? MV_RIGHT :
- strEqual(value, "up") ? MV_UP :
- strEqual(value, "down") ? MV_DOWN : MV_NONE);
- }
- else if (strEqual(suffix, ".position"))
- {
- result = (strEqual(value, "left") ? POS_LEFT :
- strEqual(value, "right") ? POS_RIGHT :
- strEqual(value, "top") ? POS_TOP :
- strEqual(value, "upper") ? POS_UPPER :
- strEqual(value, "middle") ? POS_MIDDLE :
- strEqual(value, "lower") ? POS_LOWER :
- strEqual(value, "bottom") ? POS_BOTTOM :
- strEqual(value, "any") ? POS_ANY : POS_UNDEFINED);
- }
- else if (strEqual(suffix, ".align"))
- {
- result = (strEqual(value, "left") ? ALIGN_LEFT :
- strEqual(value, "right") ? ALIGN_RIGHT :
- strEqual(value, "center") ? ALIGN_CENTER :
- strEqual(value, "middle") ? ALIGN_CENTER : ALIGN_DEFAULT);
- }
- else if (strEqual(suffix, ".valign"))
- {
- result = (strEqual(value, "top") ? VALIGN_TOP :
- strEqual(value, "bottom") ? VALIGN_BOTTOM :
- strEqual(value, "middle") ? VALIGN_MIDDLE :
- strEqual(value, "center") ? VALIGN_MIDDLE : VALIGN_DEFAULT);
- }
- else if (strEqual(suffix, ".anim_mode"))
- {
- result = (string_has_parameter(value, "none") ? ANIM_NONE :
- string_has_parameter(value, "loop") ? ANIM_LOOP :
- string_has_parameter(value, "linear") ? ANIM_LINEAR :
- string_has_parameter(value, "pingpong") ? ANIM_PINGPONG :
- string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 :
- string_has_parameter(value, "random") ? ANIM_RANDOM :
- string_has_parameter(value, "ce_value") ? ANIM_CE_VALUE :
- string_has_parameter(value, "ce_score") ? ANIM_CE_SCORE :
- 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 :
- string_has_parameter(value, "all") ? ANIM_ALL :
- ANIM_DEFAULT);
-
- if (string_has_parameter(value, "once"))
- result |= ANIM_ONCE;
-
- if (string_has_parameter(value, "reverse"))
- result |= ANIM_REVERSE;
-
- if (string_has_parameter(value, "opaque_player"))
- result |= ANIM_OPAQUE_PLAYER;
-
- if (string_has_parameter(value, "static_panel"))
- result |= ANIM_STATIC_PANEL;
- }
- else if (strEqual(suffix, ".class"))
- {
- result = (strEqual(value, ARG_UNDEFINED) ? ARG_UNDEFINED_VALUE :
- get_hash_from_key(value));
- }
- else if (strEqual(suffix, ".style"))
- {
- result = STYLE_DEFAULT;
-
- if (string_has_parameter(value, "accurate_borders"))
- result |= STYLE_ACCURATE_BORDERS;
-
- if (string_has_parameter(value, "inner_corners"))
- result |= STYLE_INNER_CORNERS;
- }
- else if (strEqual(suffix, ".fade_mode"))
- {
- result = (string_has_parameter(value, "none") ? FADE_MODE_NONE :
- string_has_parameter(value, "fade") ? FADE_MODE_FADE :
- string_has_parameter(value, "crossfade") ? FADE_MODE_CROSSFADE :
- string_has_parameter(value, "melt") ? FADE_MODE_MELT :
- string_has_parameter(value, "curtain") ? FADE_MODE_CURTAIN :
- FADE_MODE_DEFAULT);
- }
- else if (strPrefix(suffix, ".font")) /* (may also be ".font_xyz") */
- {
- result = gfx.get_font_from_token_function(value);
- }
- else /* generic parameter of type integer or boolean */
- {
- result = (strEqual(value, ARG_UNDEFINED) ? ARG_UNDEFINED_VALUE :
- type == TYPE_INTEGER ? get_integer_from_string(value) :
- type == TYPE_BOOLEAN ? get_boolean_from_string(value) :
- ARG_UNDEFINED_VALUE);
- }
-
- free(value);
-
- return result;
-}
-
-struct ScreenModeInfo *get_screen_mode_from_string(char *screen_mode_string)
-{
- static struct ScreenModeInfo screen_mode;
- char *screen_mode_string_x = strchr(screen_mode_string, 'x');
- char *screen_mode_string_copy;
- char *screen_mode_string_pos_w;
- char *screen_mode_string_pos_h;
-
- if (screen_mode_string_x == NULL) /* invalid screen mode format */
- return NULL;
-
- screen_mode_string_copy = getStringCopy(screen_mode_string);
-
- screen_mode_string_pos_w = screen_mode_string_copy;
- screen_mode_string_pos_h = strchr(screen_mode_string_copy, 'x');
- *screen_mode_string_pos_h++ = '\0';
-
- screen_mode.width = atoi(screen_mode_string_pos_w);
- screen_mode.height = atoi(screen_mode_string_pos_h);
-
- return &screen_mode;
-}
-
-void get_aspect_ratio_from_screen_mode(struct ScreenModeInfo *screen_mode,
- int *x, int *y)
-{
- float aspect_ratio = (float)screen_mode->width / (float)screen_mode->height;
- float aspect_ratio_new;
- int i = 1;
-
- do
- {
- *x = i * aspect_ratio + 0.000001;
- *y = i;
-
- aspect_ratio_new = (float)*x / (float)*y;
-
- i++;
- }
- while (aspect_ratio_new != aspect_ratio && *y < screen_mode->height);
-}
-