{ "global.anim_6" },
{ "global.anim_7" },
{ "global.anim_8" },
+ { "global.anim_9" },
+ { "global.anim_10" },
+ { "global.anim_11" },
+ { "global.anim_12" },
+ { "global.anim_13" },
+ { "global.anim_14" },
+ { "global.anim_15" },
+ { "global.anim_16" },
+ { "global.anim_17" },
+ { "global.anim_18" },
+ { "global.anim_19" },
+ { "global.anim_20" },
+ { "global.anim_21" },
+ { "global.anim_22" },
+ { "global.anim_23" },
+ { "global.anim_24" },
+ { "global.anim_25" },
+ { "global.anim_26" },
+ { "global.anim_27" },
+ { "global.anim_28" },
+ { "global.anim_29" },
+ { "global.anim_30" },
+ { "global.anim_31" },
+ { "global.anim_32" },
{ NULL }
};
return string_has_parameter(substring, s_contained);
}
+int get_anim_parameter_value(char *s)
+{
+ char *pattern_1 = "click:anim_";
+ char *pattern_2 = ".part_";
+ char *matching_char = NULL;
+ char *s_ptr = s;
+ int result = ANIM_EVENT_NONE;
+
+ matching_char = strstr(s_ptr, pattern_1);
+ if (matching_char == NULL)
+ return ANIM_EVENT_NONE;
+
+ s_ptr = matching_char + strlen(pattern_1);
+
+ // check for main animation number ("anim_X" or "anim_XX")
+ if (*s_ptr >= '0' && *s_ptr <= '9')
+ {
+ int gic_anim_nr = (*s_ptr++ - '0');
+
+ if (*s_ptr >= '0' && *s_ptr <= '9')
+ gic_anim_nr = 10 * gic_anim_nr + (*s_ptr++ - '0');
+
+ if (gic_anim_nr < 1 || gic_anim_nr > MAX_GLOBAL_ANIMS)
+ return ANIM_EVENT_NONE;
+
+ result |= gic_anim_nr << ANIM_EVENT_ANIM_BIT;
+ }
+ else
+ {
+ // invalid main animation number specified
+
+ return ANIM_EVENT_NONE;
+ }
+
+ // check for animation part number ("part_X" or "part_XX") (optional)
+ if (strPrefix(s_ptr, pattern_2))
+ {
+ s_ptr += strlen(pattern_2);
+
+ if (*s_ptr >= '0' && *s_ptr <= '9')
+ {
+ int gic_part_nr = (*s_ptr++ - '0');
+
+ if (*s_ptr >= '0' && *s_ptr <= '9')
+ gic_part_nr = 10 * gic_part_nr + (*s_ptr++ - '0');
+
+ if (gic_part_nr < 1 || gic_part_nr > MAX_GLOBAL_ANIM_PARTS)
+ return ANIM_EVENT_NONE;
+
+ result |= gic_part_nr << ANIM_EVENT_PART_BIT;
+ }
+ else
+ {
+ // invalid animation part number specified
+
+ return ANIM_EVENT_NONE;
+ }
+ }
+
+ /* discard result if next character is neither delimiter nor whitespace */
+ if (!(*s_ptr == ',' || *s_ptr == '\0' ||
+ *s_ptr == ' ' || *s_ptr == '\t'))
+ return ANIM_EVENT_NONE;
+
+ return result;
+}
+
int get_parameter_value(char *value_raw, char *suffix, int type)
{
char *value = getStringToLower(value_raw);
strEqual(value, "middle") ? POS_MIDDLE :
strEqual(value, "lower") ? POS_LOWER :
strEqual(value, "bottom") ? POS_BOTTOM :
- strEqual(value, "any") ? POS_ANY : POS_UNDEFINED);
+ strEqual(value, "any") ? POS_ANY :
+ strEqual(value, "last") ? POS_LAST : POS_UNDEFINED);
}
else if (strEqual(suffix, ".align"))
{
{
result = ANIM_EVENT_DEFAULT;
+ if (string_has_parameter(value, "any"))
+ result |= ANIM_EVENT_ANY;
+
if (string_has_parameter(value, "click"))
- result |= ANIM_EVENT_CLICK;
+ result |= ANIM_EVENT_SELF;
+
+ // add optional "click:anim_X" or "click:anim_X.part_X" parameter
+ result |= get_anim_parameter_value(value);
}
else if (strEqual(suffix, ".class"))
{