/* maximal allowed length of a command line option */
#define MAX_OPTION_LEN 256
-static unsigned int getCurrentMS()
+static unsigned int getCurrentMS(void)
{
return SDL_GetTicks();
}
}
#endif
-char *getLoginName()
+char *getLoginName(void)
{
static char *login_name = NULL;
return login_name;
}
-char *getRealName()
+char *getRealName(void)
{
static char *real_name = NULL;
char *basepath = getStringCopy(filename);
char *last_separator = getLastPathSeparatorPtr(basepath);
- if (last_separator != NULL)
- *last_separator = '\0'; /* separator found: strip basename */
- else
- basepath = "."; /* no separator found: use current path */
-
- return basepath;
-}
-
-static char *getProgramMainDataPath()
-{
- char *main_data_path = getStringCopy(program.command_basepath);
-
-#if defined(PLATFORM_MACOSX)
- static char *main_data_binary_subdir = NULL;
- static char *main_data_files_subdir = NULL;
-
- if (main_data_binary_subdir == NULL)
- {
- main_data_binary_subdir = checked_malloc(strlen(program.program_title) + 1 +
- strlen("app") + 1 +
- strlen(MAC_APP_BINARY_SUBDIR) + 1);
-
- sprintf(main_data_binary_subdir, "%s.app/%s",
- program.program_title, MAC_APP_BINARY_SUBDIR);
- }
-
- if (main_data_files_subdir == NULL)
+ /* if no separator was found, use current directory */
+ if (last_separator == NULL)
{
- main_data_files_subdir = checked_malloc(strlen(program.program_title) + 1 +
- strlen("app") + 1 +
- strlen(MAC_APP_FILES_SUBDIR) + 1);
+ free(basepath);
- sprintf(main_data_files_subdir, "%s.app/%s",
- program.program_title, MAC_APP_FILES_SUBDIR);
+ return getStringCopy(".");
}
- if (strSuffix(main_data_path, main_data_binary_subdir))
- {
- char *main_data_path_old = main_data_path;
-
- // cut relative path to Mac OS X application binary directory from path
- main_data_path[strlen(main_data_path) -
- strlen(main_data_binary_subdir)] = '\0';
-
- // cut trailing path separator from path (but not if path is root directory)
- if (strSuffix(main_data_path, "/") && !strEqual(main_data_path, "/"))
- main_data_path[strlen(main_data_path) - 1] = '\0';
-
- // replace empty path with current directory
- if (strEqual(main_data_path, ""))
- main_data_path = ".";
+ /* separator found: strip basename */
+ *last_separator = '\0';
- // add relative path to Mac OS X application resources directory to path
- main_data_path = getPath2(main_data_path, main_data_files_subdir);
-
- free(main_data_path_old);
- }
-#endif
-
- return main_data_path;
+ return basepath;
}
void (*print_usage_function)(void),
void (*print_version_function)(void))
{
- char *ro_base_path = RO_BASE_PATH;
- char *rw_base_path = RW_BASE_PATH;
+ char *ro_base_path = getProgramMainDataPath(argv[0], RO_BASE_PATH);
+ char *rw_base_path = getProgramMainDataPath(argv[0], RW_BASE_PATH);
char **argvplus = checked_calloc((argc + 1) * sizeof(char **));
char **options_left = &argvplus[1];
while (argc--)
argvplus[argc] = argv[argc];
- /* if the program is configured to start from current directory (default),
- determine program package directory from program binary (some versions
- of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not
- set the current working directory to the program package directory) */
-
- if (strEqual(ro_base_path, "."))
- ro_base_path = getProgramMainDataPath();
- if (strEqual(rw_base_path, "."))
- rw_base_path = getProgramMainDataPath();
-
/* initialize global program options */
options.server_host = NULL;
options.server_port = 0;
va_end(ap);
}
-char *GetError()
+char *GetError(void)
{
return internal_error;
}
int getFileVersion(File *file)
{
+ int version_super = getByteFromFile(file);
int version_major = getByteFromFile(file);
int version_minor = getByteFromFile(file);
int version_patch = getByteFromFile(file);
- int version_build = getByteFromFile(file);
- return VERSION_IDENT(version_major, version_minor, version_patch,
- version_build);
+ return VERSION_IDENT(version_super, version_major, version_minor,
+ version_patch);
}
int putFileVersion(FILE *file, int version)
{
if (file != NULL)
{
+ int version_super = VERSION_SUPER(version);
int version_major = VERSION_MAJOR(version);
int version_minor = VERSION_MINOR(version);
int version_patch = VERSION_PATCH(version);
- int version_build = VERSION_BUILD(version);
+ fputc(version_super, file);
fputc(version_major, file);
fputc(version_minor, file);
fputc(version_patch, file);
- fputc(version_build, file);
}
return 4;
#define TRANSLATE_KEYNAME_TO_KEYSYM 2
#define TRANSLATE_X11KEYNAME_TO_KEYSYM 3
-void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
+static void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
{
static struct
{
char *name;
} translate_key[] =
{
+ /* return and escape keys */
+ { KSYM_Return, "XK_Return", "return" },
+ { KSYM_Escape, "XK_Escape", "escape" },
+
/* normal cursor keys */
{ KSYM_Left, "XK_Left", "cursor left" },
{ KSYM_Right, "XK_Right", "cursor right" },
return result;
}
+int get_player_nr_from_string(char *s)
+{
+ static char *player_text[] =
+ {
+ "player_1",
+ "player_2",
+ "player_3",
+ "player_4",
+
+ NULL
+ };
+
+ char *s_lower = getStringToLower(s);
+ int result = 0;
+ int i;
+
+ for (i = 0; player_text[i] != NULL; i++)
+ if (strEqual(s_lower, player_text[i]))
+ result = i;
+
+ free(s_lower);
+
+ return result;
+}
+
/* ------------------------------------------------------------------------- */
/* functions for generic lists */
/* ------------------------------------------------------------------------- */
-ListNode *newListNode()
+ListNode *newListNode(void)
{
return checked_calloc(sizeof(ListNode));
}
return (node_first ? 1 + getNumNodes(node_first->next) : 0);
}
-void dumpList(ListNode *node_first)
+#if 0
+static void dumpList(ListNode *node_first)
{
ListNode *node = node_first;
printf("[%d nodes]\n", getNumNodes(node_first));
}
+#endif
/* ------------------------------------------------------------------------- */
/* functions for file handling */
/* ------------------------------------------------------------------------- */
+#define MAX_BUFFER_SIZE 4096
+
File *openFile(char *filename, char *mode)
{
File *file = checked_calloc(sizeof(File));
return fread(buffer, item_size, num_items, file->file);
}
+size_t writeFile(File *file, void *buffer, size_t item_size, size_t num_items)
+{
+ return fwrite(buffer, item_size, num_items, file->file);
+}
+
int seekFile(File *file, long offset, int whence)
{
#if defined(PLATFORM_ANDROID)
return fgets(line, size, file->file);
}
+int copyFile(char *filename_from, char *filename_to)
+{
+ File *file_from, *file_to;
+
+ if ((file_from = openFile(filename_from, MODE_READ)) == NULL)
+ {
+ return -1;
+ }
+
+ if ((file_to = openFile(filename_to, MODE_WRITE)) == NULL)
+ {
+ closeFile(file_from);
+
+ return -1;
+ }
+
+ while (!checkEndOfFile(file_from))
+ {
+ byte buffer[MAX_BUFFER_SIZE];
+ size_t bytes_read = readFile(file_from, buffer, 1, MAX_BUFFER_SIZE);
+
+ writeFile(file_to, buffer, 1, bytes_read);
+ }
+
+ closeFile(file_from);
+ closeFile(file_to);
+
+ return 0;
+}
+
/* ------------------------------------------------------------------------- */
/* functions for directory handling */
return success;
}
-boolean fileHasPrefix(char *basename, char *prefix)
+#if 0
+static boolean fileHasPrefix(char *basename, char *prefix)
{
static char *basename_lower = NULL;
int basename_length, prefix_length;
return FALSE;
}
+#endif
-boolean fileHasSuffix(char *basename, char *suffix)
+static boolean fileHasSuffix(char *basename, char *suffix)
{
static char *basename_lower = NULL;
int basename_length, suffix_length;
return NULL;
}
-char *get_special_base_token(struct ArtworkListInfo *artwork_info, char *token)
+static char *get_special_base_token(struct ArtworkListInfo *artwork_info,
+ char *token)
{
/* !!! make this dynamically configurable (init.c:InitArtworkConfig) !!! */
static struct ConfigTypeInfo prefix_list[] =
return string_has_parameter(substring, s_contained);
}
-int get_anim_parameter_value(char *s)
+static int get_anim_parameter_value(char *s)
{
char *pattern_1 = "click:anim_";
char *pattern_2 = ".part_";
return result;
}
+static int get_anim_action_parameter_value(char *token)
+{
+ int result = getImageIDFromToken(token);
+
+ if (result == -1)
+ {
+ char *gfx_token = getStringCat2("gfx.", token);
+
+ result = getImageIDFromToken(gfx_token);
+
+ checked_free(gfx_token);
+ }
+
+ if (result == -1)
+ {
+ Key key = getKeyFromX11KeyName(token);
+
+ if (key != KSYM_UNDEFINED)
+ result = -(int)key;
+ }
+
+ if (result == -1)
+ result = ANIM_EVENT_ACTION_NONE;
+
+ return result;
+}
+
int get_parameter_value(char *value_raw, char *suffix, int type)
{
char *value = getStringToLower(value_raw);
// add optional "click:anim_X" or "click:anim_X.part_X" parameter
result |= get_anim_parameter_value(value);
}
+ else if (strEqual(suffix, ".init_event_action") ||
+ strEqual(suffix, ".anim_event_action"))
+ {
+ result = get_anim_action_parameter_value(value_raw);
+ }
else if (strEqual(suffix, ".class"))
{
result = (strEqual(value, ARG_UNDEFINED) ? ARG_UNDEFINED_VALUE :
if (string_has_parameter(value, "inner_corners"))
result |= STYLE_INNER_CORNERS;
+
+ if (string_has_parameter(value, "reverse"))
+ result |= STYLE_REVERSE;
+
+ if (string_has_parameter(value, "passthrough_clicks"))
+ result |= STYLE_PASSTHROUGH;
+
+ if (string_has_parameter(value, "multiple_actions"))
+ result |= STYLE_MULTIPLE_ACTIONS;
}
else if (strEqual(suffix, ".fade_mode"))
{
return getPath2(getUserGameDataDir(), basename);
}
-void OpenLogFiles()
+void OpenLogFiles(void)
{
int i;
}
}
-void CloseLogFiles()
+void CloseLogFiles(void)
{
int i;
fclose(log_file);
}
-void NotifyUserAboutErrorFile()
+void NotifyUserAboutErrorFile(void)
{
#if defined(PLATFORM_WIN32)
char *title_text = getStringCat2(program.program_title, " Error Message");
#define DEBUG_TIME_IN_MICROSECONDS 0
#if DEBUG_TIME_IN_MICROSECONDS
-static double Counter_Microseconds()
+static double Counter_Microseconds(void)
{
static struct timeval base_time = { 0, 0 };
struct timeval current_time;
}
#endif
-char *debug_print_timestamp_get_padding(int padding_size)
+static char *debug_print_timestamp_get_padding(int padding_size)
{
static char *padding = NULL;
int max_padding_size = 100;
unit);
}
-void debug_print_parent_only(char *format, ...)
+#if 0
+static void debug_print_parent_only(char *format, ...)
{
if (!IS_PARENT_PROCESS())
return;
printf("\n");
}
}
+#endif
#endif /* DEBUG */
-void print_timestamp_ext(char *message, char *mode)
+static void print_timestamp_ext(char *message, char *mode)
{
#if DEBUG_PRINT_INIT_TIMESTAMPS
static char *debug_message = NULL;