X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=39eca58ac7d2cc9d2438d5600e84b9f3521c1072;hb=dce12aedb7f597d85daf4ae5dfc4e058ae2f7b5c;hp=59a273e15b6607f5d771123bfec43ca98cfeb2a0;hpb=51dcb2097c619c5f9ba924a7edb4a3bdd6a6986e;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 59a273e1..39eca58a 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -206,14 +206,6 @@ static void sleep_milliseconds(unsigned long milliseconds_delay) { boolean do_busy_waiting = (milliseconds_delay < 5 ? TRUE : FALSE); -#if 0 -#if defined(PLATFORM_MSDOS) - /* don't use select() to perform waiting operations under DOS - environment; always use a busy loop for waiting instead */ - do_busy_waiting = TRUE; -#endif -#endif - if (do_busy_waiting) { /* we want to wait only a few ms -- if we assume that we have a @@ -337,26 +329,24 @@ static char *get_corrected_real_name(char *real_name) char *from_ptr = real_name; char *to_ptr = real_name_new; - if (strchr(real_name, 'ß') == NULL) /* name does not contain 'ß' */ - { - strncpy(real_name_new, real_name, MAX_USERNAME_LEN); - real_name_new[MAX_USERNAME_LEN] = '\0'; - - return real_name_new; - } - - /* the user's real name may contain a 'ß' character (german sharp s), - which has no equivalent in upper case letters (which our fonts use) */ + /* copy the name string, but not more than MAX_USERNAME_LEN characters */ while (*from_ptr && (long)(to_ptr - real_name_new) < MAX_USERNAME_LEN - 1) { - if (*from_ptr != 'ß') - *to_ptr++ = *from_ptr++; - else + /* the name field read from "passwd" file may also contain additional + user information, separated by commas, which will be removed here */ + if (*from_ptr == ',') + break; + + /* the user's real name may contain 'ß' characters (german sharp s), + which have no equivalent in upper case letters (used by our fonts) */ + if (*from_ptr == 'ß') { from_ptr++; *to_ptr++ = 's'; *to_ptr++ = 's'; } + else + *to_ptr++ = *from_ptr++; } *to_ptr = '\0'; @@ -458,6 +448,51 @@ char *getHomeDir() } +/* ------------------------------------------------------------------------- */ +/* path manipulation functions */ +/* ------------------------------------------------------------------------- */ + +static char *getLastPathSeparatorPtr(char *filename) +{ + char *last_separator = strrchr(filename, '/'); + +#if !defined(PLATFORM_UNIX) + if (last_separator == NULL) /* also try DOS/Windows variant */ + last_separator = strrchr(filename, '\\'); +#endif + + return last_separator; +} + +static char *getBaseNamePtr(char *filename) +{ + char *last_separator = getLastPathSeparatorPtr(filename); + + if (last_separator != NULL) + return last_separator + 1; /* separator found: strip base path */ + else + return filename; /* no separator found: filename has no path */ +} + +char *getBaseName(char *filename) +{ + return getStringCopy(getBaseNamePtr(filename)); +} + +char *getBasePath(char *filename) +{ + 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; +} + + /* ------------------------------------------------------------------------- */ /* various string functions */ /* ------------------------------------------------------------------------- */ @@ -531,19 +566,34 @@ void setString(char **old_value, char *new_value) void GetOptions(char *argv[], void (*print_usage_function)(void)) { + char *ro_base_path = RO_BASE_PATH; + char *rw_base_path = RW_BASE_PATH; char **options_left = &argv[1]; +#if !defined(PLATFORM_MACOSX) + /* if the program is configured to start from current directory (default), + determine program package directory (KDE/Konqueror does not do this by + itself and fails otherwise); on Mac OS X, the program binary is stored + in an application package directory -- do not try to use this directory + as the program data directory (Mac OS X handles this correctly anyway) */ + + if (strcmp(ro_base_path, ".") == 0) + ro_base_path = program.command_basepath; + if (strcmp(rw_base_path, ".") == 0) + rw_base_path = program.command_basepath; +#endif + /* initialize global program options */ options.display_name = NULL; options.server_host = NULL; options.server_port = 0; - options.ro_base_directory = RO_BASE_PATH; - options.rw_base_directory = RW_BASE_PATH; - options.level_directory = RO_BASE_PATH "/" LEVELS_DIRECTORY; - options.graphics_directory = RO_BASE_PATH "/" GRAPHICS_DIRECTORY; - options.sounds_directory = RO_BASE_PATH "/" SOUNDS_DIRECTORY; - options.music_directory = RO_BASE_PATH "/" MUSIC_DIRECTORY; - options.docs_directory = RO_BASE_PATH "/" DOCS_DIRECTORY; + options.ro_base_directory = ro_base_path; + options.rw_base_directory = rw_base_path; + options.level_directory = getPath2(ro_base_path, LEVELS_DIRECTORY); + options.graphics_directory = getPath2(ro_base_path, GRAPHICS_DIRECTORY); + 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.execute_command = NULL; options.serveronly = FALSE; options.network = FALSE; @@ -610,22 +660,17 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); /* this should be extended to separate options for ro and rw data */ - options.ro_base_directory = option_arg; - options.rw_base_directory = option_arg; + options.ro_base_directory = ro_base_path = option_arg; + options.rw_base_directory = rw_base_path = option_arg; if (option_arg == next_option) options_left++; /* adjust paths for sub-directories in base directory accordingly */ - options.level_directory = - getPath2(options.ro_base_directory, LEVELS_DIRECTORY); - options.graphics_directory = - getPath2(options.ro_base_directory, GRAPHICS_DIRECTORY); - options.sounds_directory = - getPath2(options.ro_base_directory, SOUNDS_DIRECTORY); - options.music_directory = - getPath2(options.ro_base_directory, MUSIC_DIRECTORY); - options.docs_directory = - getPath2(options.ro_base_directory, DOCS_DIRECTORY); + options.level_directory = getPath2(ro_base_path, LEVELS_DIRECTORY); + options.graphics_directory = getPath2(ro_base_path, GRAPHICS_DIRECTORY); + 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); } else if (strncmp(option, "-levels", option_len) == 0) { @@ -688,10 +733,8 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) if (option_arg == next_option) options_left++; -#if 1 /* when doing batch processing, always enable verbose mode (warnings) */ options.verbose = TRUE; -#endif } else if (*option == '-') { @@ -882,6 +925,25 @@ inline void swap_number_pairs(int *x1, int *y1, int *x2, int *y2) *y2 = help_y; } +/* the "put" variants of the following file access functions check for the file + pointer being != NULL and return the number of bytes they have or would have + written; this allows for chunk writing functions to first determine the size + of the (not yet written) chunk, write the correct chunk size and finally + write the chunk itself */ + +int getFile8BitInteger(FILE *file) +{ + return fgetc(file); +} + +int putFile8BitInteger(FILE *file, int value) +{ + if (file != NULL) + fputc(value, file); + + return 1; +} + int getFile16BitInteger(FILE *file, int byte_order) { if (byte_order == BYTE_ORDER_BIG_ENDIAN) @@ -892,18 +954,23 @@ int getFile16BitInteger(FILE *file, int byte_order) (fgetc(file) << 8)); } -void putFile16BitInteger(FILE *file, int value, int byte_order) +int putFile16BitInteger(FILE *file, int value, int byte_order) { - if (byte_order == BYTE_ORDER_BIG_ENDIAN) + if (file != NULL) { - fputc((value >> 8) & 0xff, file); - fputc((value >> 0) & 0xff, file); - } - else /* BYTE_ORDER_LITTLE_ENDIAN */ - { - fputc((value >> 0) & 0xff, file); - fputc((value >> 8) & 0xff, file); + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + { + fputc((value >> 8) & 0xff, file); + fputc((value >> 0) & 0xff, file); + } + else /* BYTE_ORDER_LITTLE_ENDIAN */ + { + fputc((value >> 0) & 0xff, file); + fputc((value >> 8) & 0xff, file); + } } + + return 2; } int getFile32BitInteger(FILE *file, int byte_order) @@ -920,22 +987,27 @@ int getFile32BitInteger(FILE *file, int byte_order) (fgetc(file) << 24)); } -void putFile32BitInteger(FILE *file, int value, int byte_order) +int putFile32BitInteger(FILE *file, int value, int byte_order) { - if (byte_order == BYTE_ORDER_BIG_ENDIAN) - { - fputc((value >> 24) & 0xff, file); - fputc((value >> 16) & 0xff, file); - fputc((value >> 8) & 0xff, file); - fputc((value >> 0) & 0xff, file); - } - else /* BYTE_ORDER_LITTLE_ENDIAN */ + if (file != NULL) { - fputc((value >> 0) & 0xff, file); - fputc((value >> 8) & 0xff, file); - fputc((value >> 16) & 0xff, file); - fputc((value >> 24) & 0xff, file); + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + { + fputc((value >> 24) & 0xff, file); + fputc((value >> 16) & 0xff, file); + fputc((value >> 8) & 0xff, file); + fputc((value >> 0) & 0xff, file); + } + else /* BYTE_ORDER_LITTLE_ENDIAN */ + { + fputc((value >> 0) & 0xff, file); + fputc((value >> 8) & 0xff, file); + fputc((value >> 16) & 0xff, file); + fputc((value >> 24) & 0xff, file); + } } + + return 4; } boolean getFileChunk(FILE *file, char *chunk_name, int *chunk_size, @@ -992,6 +1064,22 @@ void putFileVersion(FILE *file, int version) fputc(version_build, file); } +void ReadBytesFromFile(FILE *file, byte *buffer, unsigned long bytes) +{ + int i; + + for(i = 0; i < bytes && !feof(file); i++) + buffer[i] = fgetc(file); +} + +void WriteBytesToFile(FILE *file, byte *buffer, unsigned long bytes) +{ + int i; + + for(i = 0; i < bytes; i++) + fputc(buffer[i], file); +} + void ReadUnusedBytesFromFile(FILE *file, unsigned long bytes) { while (bytes-- && !feof(file)) @@ -1431,10 +1519,6 @@ void addNodeToList(ListNode **node_first, char *key, void *content) { ListNode *node_new = newListNode(); -#if 0 - printf("LIST: adding node with key '%s'\n", key); -#endif - node_new->key = getStringCopy(key); node_new->content = content; node_new->next = *node_first; @@ -1447,17 +1531,8 @@ void deleteNodeFromList(ListNode **node_first, char *key, if (node_first == NULL || *node_first == NULL) return; -#if 0 - printf("[CHECKING LIST KEY '%s' == '%s']\n", - (*node_first)->key, key); -#endif - if (strcmp((*node_first)->key, key) == 0) { -#if 0 - printf("[DELETING LIST ENTRY]\n"); -#endif - free((*node_first)->key); if (destructor_function) destructor_function((*node_first)->content); @@ -1507,10 +1582,6 @@ boolean fileExists(char *filename) if (filename == NULL) return FALSE; -#if 0 - printf("checking file '%s'\n", filename); -#endif - return (access(filename, F_OK) == 0); } @@ -1560,27 +1631,21 @@ boolean fileHasSuffix(char *basename, char *suffix) boolean FileIsGraphic(char *filename) { - char *basename = strrchr(filename, '/'); - - basename = (basename != NULL ? basename + 1 : filename); + char *basename = getBaseNamePtr(filename); return fileHasSuffix(basename, "pcx"); } boolean FileIsSound(char *filename) { - char *basename = strrchr(filename, '/'); - - basename = (basename != NULL ? basename + 1 : filename); + char *basename = getBaseNamePtr(filename); return fileHasSuffix(basename, "wav"); } boolean FileIsMusic(char *filename) { - char *basename = strrchr(filename, '/'); - - basename = (basename != NULL ? basename + 1 : filename); + char *basename = getBaseNamePtr(filename); if (FileIsSound(basename)) return TRUE; @@ -1673,7 +1738,7 @@ static boolean string_has_parameter(char *s, char *s_contained) return string_has_parameter(substring, s_contained); } -int get_parameter_value(char *suffix, char *value_raw, int type) +int get_parameter_value(char *value_raw, char *suffix, int type) { char *value = getStringToLower(value_raw); int result = 0; /* probably a save default value */ @@ -1724,7 +1789,7 @@ int get_auto_parameter_value(char *token, char *value_raw) if (suffix == NULL) suffix = token; - return get_parameter_value(suffix, value_raw, TYPE_INTEGER); + return get_parameter_value(value_raw, suffix, TYPE_INTEGER); } static void FreeCustomArtworkList(struct ArtworkListInfo *, @@ -1843,11 +1908,6 @@ static boolean token_suffix_match(char *token, char *suffix, int start_pos) int len_token = strlen(token); int len_suffix = strlen(suffix); -#if 0 - if (IS_PARENT_PROCESS()) - printf(":::::::::: check '%s' for '%s' ::::::::::\n", token, suffix); -#endif - if (start_pos < 0) /* compare suffix from end of string */ start_pos += len_token; @@ -1890,16 +1950,6 @@ static void read_token_parameters(SetupFileHash *setup_file_hash, /* mark config file token as well known from default config */ setHashEntry(setup_file_hash, file_list_entry->token, known_token_value); } -#if 0 - else - { - if (strcmp(file_list_entry->filename, - file_list_entry->default_filename) != 0) - printf("___ resetting '%s' to default\n", file_list_entry->token); - - setString(&file_list_entry->filename, file_list_entry->default_filename); - } -#endif /* check for config tokens that can be build by base token and suffixes */ for (i = 0; suffix_list[i].token != NULL; i++) @@ -1929,11 +1979,6 @@ static void add_dynamic_file_list_entry(struct FileInfo **list, struct FileInfo *new_list_entry; int parameter_array_size = num_suffix_list_entries * sizeof(char *); -#if 0 - if (IS_PARENT_PROCESS()) - printf("===> found dynamic definition '%s'\n", token); -#endif - (*num_list_entries)++; *list = checked_realloc(*list, *num_list_entries * sizeof(struct FileInfo)); new_list_entry = &(*list)[*num_list_entries - 1]; @@ -1995,10 +2040,6 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info, if (filename == NULL) return; -#if 0 - printf("::: LoadArtworkConfigFromFilename: '%s'\n", filename); -#endif - if ((setup_file_hash = loadSetupFileHash(filename)) == NULL) return; @@ -2017,7 +2058,6 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info, /* at this point, we do not need the setup file hash anymore -- free it */ freeSetupFileHash(setup_file_hash); -#if 1 /* map deprecated to current tokens (using prefix match and replace) */ BEGIN_HASH_ITERATION(valid_file_hash, itr) { @@ -2038,7 +2078,6 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info, } } END_HASH_ITERATION(valid_file_hash, itr) -#endif /* read parameters for all known config file tokens */ for (i = 0; i < num_file_list_entries; i++) @@ -2083,6 +2122,10 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info, boolean base_prefix_found = FALSE; boolean parameter_suffix_found = FALSE; +#if 0 + printf("::: examining '%s' -> '%s'\n", token, HASH_ITERATION_VALUE(itr)); +#endif + /* skip all parameter definitions (handled by read_token_parameters()) */ for (i = 0; i < num_suffix_list_entries && !parameter_suffix_found; i++) { @@ -2092,16 +2135,6 @@ static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info, parameter_suffix_found = TRUE; } -#if 0 - if (IS_PARENT_PROCESS()) - { - if (parameter_suffix_found) - printf("---> skipping token '%s' (parameter token)\n", token); - else - printf("---> examining token '%s': search prefix ...\n", token); - } -#endif - if (parameter_suffix_found) continue; @@ -2440,25 +2473,14 @@ static void deleteArtworkListEntry(struct ArtworkListInfo *artwork_info, { char *filename = (*listnode)->source_filename; -#if 0 - printf("[decrementing reference counter of artwork '%s']\n", filename); -#endif - if (--(*listnode)->num_references <= 0) - { -#if 0 - printf("[deleting artwork '%s']\n", filename); -#endif - deleteNodeFromList(&artwork_info->content_list, filename, artwork_info->free_artwork); - } *listnode = NULL; } } -#if 1 static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, struct ListNodeInfo **listnode, struct FileInfo *file_list_entry) @@ -2534,105 +2556,6 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, return; } -#if 0 - printf("::: %s: '%s'\n", init_text[artwork_info->type], basename); -#endif - - DrawInitText(init_text[artwork_info->type], 120, FC_GREEN); - DrawInitText(basename, 150, FC_YELLOW); - - if ((*listnode = artwork_info->load_artwork(filename)) != NULL) - { -#if 0 - printf("[adding new artwork '%s']\n", filename); -#endif - - (*listnode)->num_references = 1; - addNodeToList(&artwork_info->content_list, (*listnode)->source_filename, - *listnode); - } - else - { - int error_mode = ERR_WARN; - -#if 1 - /* we can get away without sounds and music, but not without graphics */ - if (artwork_info->type == ARTWORK_TYPE_GRAPHICS) - error_mode = ERR_EXIT; -#endif - - Error(error_mode, "cannot load artwork file '%s'", basename); - return; - } -} - -#else - -static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, - struct ListNodeInfo **listnode, - char *basename) -{ - char *init_text[] = - { - "Loading graphics:", - "Loading sounds:", - "Loading music:" - }; - - ListNode *node; - char *filename = getCustomArtworkFilename(basename, artwork_info->type); - - if (filename == NULL) - { - int error_mode = ERR_WARN; - -#if 1 - /* !!! NEW ARTWORK FALLBACK CODE !!! NEARLY UNTESTED !!! */ - /* before failing, try fallback to default artwork */ -#else - /* we can get away without sounds and music, but not without graphics */ - if (*listnode == NULL && artwork_info->type == ARTWORK_TYPE_GRAPHICS) - error_mode = ERR_EXIT; -#endif - - Error(error_mode, "cannot find artwork file '%s'", basename); - return; - } - - /* check if the old and the new artwork file are the same */ - if (*listnode && strcmp((*listnode)->source_filename, filename) == 0) - { - /* The old and new artwork are the same (have the same filename and path). - This usually means that this artwork does not exist in this artwork set - and a fallback to the existing artwork is done. */ - -#if 0 - printf("[artwork '%s' already exists (same list entry)]\n", filename); -#endif - - return; - } - - /* delete existing artwork file entry */ - deleteArtworkListEntry(artwork_info, listnode); - - /* check if the new artwork file already exists in the list of artworks */ - if ((node = getNodeFromKey(artwork_info->content_list, filename)) != NULL) - { -#if 0 - printf("[artwork '%s' already exists (other list entry)]\n", filename); -#endif - - *listnode = (struct ListNodeInfo *)node->content; - (*listnode)->num_references++; - - return; - } - -#if 0 - printf("::: %s: '%s'\n", init_text[artwork_info->type], basename); -#endif - DrawInitText(init_text[artwork_info->type], 120, FC_GREEN); DrawInitText(basename, 150, FC_YELLOW); @@ -2650,19 +2573,15 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, { int error_mode = ERR_WARN; -#if 1 /* we can get away without sounds and music, but not without graphics */ if (artwork_info->type == ARTWORK_TYPE_GRAPHICS) error_mode = ERR_EXIT; -#endif Error(error_mode, "cannot load artwork file '%s'", basename); return; } } -#endif -#if 1 static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, struct ListNodeInfo **listnode, struct FileInfo *file_list_entry) @@ -2680,86 +2599,6 @@ static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, replaceArtworkListEntry(artwork_info, listnode, file_list_entry); } -#else - -static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, - struct ListNodeInfo **listnode, - char *basename) -{ -#if 0 - printf("GOT CUSTOM ARTWORK FILE '%s'\n", filename); -#endif - - if (strcmp(basename, UNDEFINED_FILENAME) == 0) - { - deleteArtworkListEntry(artwork_info, listnode); - return; - } - - replaceArtworkListEntry(artwork_info, listnode, basename); -} -#endif - -#if 1 -static void LoadArtworkToList(struct ArtworkListInfo *artwork_info, - struct ListNodeInfo **listnode, - struct FileInfo *file_list_entry) -{ -#if 0 - if (artwork_info->artwork_list == NULL || - list_pos >= artwork_info->num_file_list_entries) - return; -#endif - -#if 0 - printf("loading artwork '%s' ... [%d]\n", - basename, getNumNodes(artwork_info->content_list)); -#endif - -#if 1 - LoadCustomArtwork(artwork_info, listnode, file_list_entry); -#else - LoadCustomArtwork(artwork_info, &artwork_info->artwork_list[list_pos], - basename); -#endif - -#if 0 - printf("loading artwork '%s' done [%d]\n", - basename, getNumNodes(artwork_info->content_list)); -#endif -} - -#else - -static void LoadArtworkToList(struct ArtworkListInfo *artwork_info, - struct ListNodeInfo **listnode, - char *basename, int list_pos) -{ -#if 0 - if (artwork_info->artwork_list == NULL || - list_pos >= artwork_info->num_file_list_entries) - return; -#endif - -#if 0 - printf("loading artwork '%s' ... [%d]\n", - basename, getNumNodes(artwork_info->content_list)); -#endif - -#if 1 - LoadCustomArtwork(artwork_info, listnode, basename); -#else - LoadCustomArtwork(artwork_info, &artwork_info->artwork_list[list_pos], - basename); -#endif - -#if 0 - printf("loading artwork '%s' done [%d]\n", - basename, getNumNodes(artwork_info->content_list)); -#endif -} -#endif - void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) { struct FileInfo *file_list = artwork_info->file_list; @@ -2769,73 +2608,13 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) artwork_info->num_dynamic_file_list_entries; int i; -#if 0 - printf("DEBUG: reloading %d static artwork files ...\n", - num_file_list_entries); -#endif - for (i = 0; i < num_file_list_entries; i++) - { -#if 0 - if (strcmp(file_list[i].token, "background") == 0) - printf("::: '%s' -> '%s'\n", file_list[i].token, file_list[i].filename); -#endif - -#if 1 - LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i], + LoadCustomArtwork(artwork_info, &artwork_info->artwork_list[i], &file_list[i]); -#else - LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i], - file_list[i].filename, i); -#endif - -#if 0 - /* !!! NEW ARTWORK FALLBACK CODE !!! NEARLY UNTESTED !!! */ - if (artwork_info->artwork_list[i] == NULL && - strcmp(file_list[i].filename, UNDEFINED_FILENAME) != 0 && - strcmp(file_list[i].default_filename, file_list[i].filename) != 0 && - strcmp(file_list[i].default_filename, UNDEFINED_FILENAME) != 0) - { - Error(ERR_WARN, "trying default artwork file '%s'", - file_list[i].default_filename); - - LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i], - file_list[i].default_filename, i); - - /* even the fallback to default artwork was not successful -- fail now */ - if (artwork_info->artwork_list[i] == NULL && - artwork_info->type == ARTWORK_TYPE_GRAPHICS) - Error(ERR_EXIT, "cannot find artwork file '%s' or default file '%s'", - file_list[i].filename, file_list[i].default_filename); - - file_list[i].fallback_to_default = TRUE; - } -#endif - } - -#if 0 - printf("DEBUG: reloading %d dynamic artwork files ...\n", - num_dynamic_file_list_entries); -#endif for (i = 0; i < num_dynamic_file_list_entries; i++) - { -#if 1 - LoadArtworkToList(artwork_info, &artwork_info->dynamic_artwork_list[i], + LoadCustomArtwork(artwork_info, &artwork_info->dynamic_artwork_list[i], &dynamic_file_list[i]); -#else - LoadArtworkToList(artwork_info, &artwork_info->dynamic_artwork_list[i], - dynamic_file_list[i].filename, i); -#endif - -#if 0 - printf("::: '%s', '0x%08x'\n", - dynamic_file_list[i].filename, - dynamic_file_list[i].default_filename); -#endif - - /* dynamic artwork does not have default filename! */ - } #if 0 dumpList(artwork_info->content_list); @@ -2864,21 +2643,11 @@ void FreeCustomArtworkLists(struct ArtworkListInfo *artwork_info) if (artwork_info == NULL) return; -#if 0 - printf("%s: FREEING ARTWORK ...\n", - IS_CHILD_PROCESS() ? "CHILD" : "PARENT"); -#endif - FreeCustomArtworkList(artwork_info, &artwork_info->artwork_list, &artwork_info->num_file_list_entries); FreeCustomArtworkList(artwork_info, &artwork_info->dynamic_artwork_list, &artwork_info->num_dynamic_file_list_entries); - -#if 0 - printf("%s: FREEING ARTWORK -- DONE\n", - IS_CHILD_PROCESS() ? "CHILD" : "PARENT"); -#endif }