if (GetUserName(login_name, &buffer_size) == 0)
strcpy(login_name, ANONYMOUS_NAME);
}
-#else
+#elif defined(PLATFORM_UNIX) && !defined(PLATFORM_ANDROID)
if (login_name == NULL)
{
struct passwd *pwd;
else
login_name = getStringCopy(pwd->pw_name);
}
+#else
+ login_name = ANONYMOUS_NAME;
#endif
return login_name;
options.sounds_directory = getPath2(ro_base_path, SOUNDS_DIRECTORY);
options.music_directory = getPath2(ro_base_path, MUSIC_DIRECTORY);
options.docs_directory = getPath2(ro_base_path, DOCS_DIRECTORY);
+ options.conf_directory = getPath2(ro_base_path, CONF_DIRECTORY);
options.execute_command = NULL;
options.special_flags = NULL;
if (*options_left == NULL) /* no options given -- enable verbose mode */
options.verbose = TRUE;
#endif
+#endif
+
+#if DEBUG
+#if defined(PLATFORM_ANDROID)
+ options.debug = TRUE;
+#endif
#endif
while (*options_left)
options.sounds_directory = getPath2(ro_base_path, SOUNDS_DIRECTORY);
options.music_directory = getPath2(ro_base_path, MUSIC_DIRECTORY);
options.docs_directory = getPath2(ro_base_path, DOCS_DIRECTORY);
+ options.conf_directory = getPath2(ro_base_path, CONF_DIRECTORY);
}
else if (strncmp(option, "-levels", option_len) == 0)
{
ANDROID_LOG_UNKNOWN);
#endif
+ /* display debug messages only when running in debug mode */
+ if (mode & ERR_DEBUG && !options.debug)
+ return;
+
/* display warnings only when running in verbose mode */
if (mode & ERR_WARN && !options.verbose)
return;
{ KSYM_Page_Down, "XK_Page_Down", "page down" },
#if defined(TARGET_SDL2)
+ { KSYM_Select, "XK_Select", "select" },
{ KSYM_Menu, "XK_Menu", "menu" }, /* menu key */
{ KSYM_Back, "XK_Back", "back" }, /* back key */
+ { KSYM_PlayPause, "XK_PlayPause", "play/pause" },
+#if defined(PLATFORM_ANDROID)
+ { KSYM_Rewind, "XK_Rewind", "rewind" },
+ { KSYM_FastForward, "XK_FastForward", "fast forward" },
+#endif
#endif
/* ASCII 0x20 to 0x40 keys (except numbers) */
{ "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"))
{
if (string_has_parameter(value, "static_panel"))
result |= ANIM_STATIC_PANEL;
}
+ else if (strEqual(suffix, ".init_event") ||
+ strEqual(suffix, ".anim_event"))
+ {
+ result = ANIM_EVENT_DEFAULT;
+
+ if (string_has_parameter(value, "any"))
+ result |= ANIM_EVENT_ANY;
+
+ if (string_has_parameter(value, "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"))
{
result = (strEqual(value, ARG_UNDEFINED) ? ARG_UNDEFINED_VALUE :