X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=811ef07e576484826ea0ebdc07889848cac8cbee;hb=a84bd00a438ff458c2d74d1d1784deefe12bf84a;hp=5d4a4acc4b2474792327e10fdf44dde90f3fb0c2;hpb=fffaec4e69e54c74cf5eea689191e81b8c19b85a;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 5d4a4acc..811ef07e 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -403,6 +403,14 @@ char *getPath3(char *path1, char *path2, char *path3) return complete_path; } +static char *getStringCat2(char *s1, char *s2) +{ + char *complete_string = checked_malloc(strlen(s1) + strlen(s2) + 1); + + sprintf(complete_string, "%s%s", s1, s2); + return complete_string; +} + char *getStringCopy(char *s) { char *s_copy; @@ -1349,27 +1357,59 @@ boolean FileIsArtworkType(char *basename, int type) /* ========================================================================= */ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, - char *suffix_list[], - int num_list_entries) + struct ConfigInfo *suffix_list, + int num_file_list_entries) { - struct FileInfo *file_list = - checked_calloc(num_list_entries * sizeof(struct FileInfo)); + struct FileInfo *file_list; + int num_suffix_list_entries = 0; int list_pos = 0; int i, j; + file_list = checked_calloc(num_file_list_entries * sizeof(struct FileInfo)); + + for (i=0; suffix_list[i].token != NULL; i++) + num_suffix_list_entries++; + + /* always start with reliable default values */ + for (i=0; i 0) + { + int parameter_array_size = num_suffix_list_entries * sizeof(int); + + file_list[i].default_parameter = checked_calloc(parameter_array_size); + file_list[i].parameter = checked_calloc(parameter_array_size); + + for (j=0; j= num_list_entries) - Error(ERR_EXIT, "inconsistant config list information -- please fix"); + if (i > 0) + list_pos++; + + if (list_pos > num_file_list_entries - 1) + break; + + /* simple sanity check if this is really a file definition */ + if (strcmp(&config_list[i].value[len_config_value - 4], ".pcx") != 0 && + strcmp(&config_list[i].value[len_config_value - 4], ".wav") != 0 && + strcmp(config_list[i].value, UNDEFINED_FILENAME) != 0) + { + Error(ERR_RETURN, "Configuration directive '%s' -> '%s':", + config_list[i].token, config_list[i].value); + Error(ERR_EXIT, "This seems to be no valid definition -- please fix"); + } file_list[list_pos].token = config_list[i].token; file_list[list_pos].default_filename = config_list[i].value; - - list_pos++; } } - if (list_pos != num_list_entries) + if (list_pos != num_file_list_entries - 1) Error(ERR_EXIT, "inconsistant config list information -- please fix"); return file_list; @@ -1395,33 +1446,58 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, static void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) { - int num_list_entries = artwork_info->num_list_entries; struct FileInfo *file_list = artwork_info->file_list; + struct ConfigInfo *suffix_list = artwork_info->suffix_list; + int num_file_list_entries = artwork_info->num_file_list_entries; + int num_suffix_list_entries = artwork_info->num_suffix_list_entries; char *filename = getCustomArtworkConfigFilename(artwork_info->type); struct SetupFileList *setup_file_list; - int i; + int i, j; #if 0 printf("GOT CUSTOM ARTWORK CONFIG FILE '%s'\n", filename); #endif /* always start with reliable default values */ - for (i=0; iartwork_list == NULL || - list_pos >= artwork_info->num_list_entries) + list_pos >= artwork_info->num_file_list_entries) return; #if 0 @@ -1560,7 +1636,7 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) { "Loading music:", TRUE } }; - int num_list_entries = artwork_info->num_list_entries; + int num_file_list_entries = artwork_info->num_file_list_entries; struct FileInfo *file_list = artwork_info->file_list; int i; @@ -1570,18 +1646,15 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) DrawInitText(draw_init[artwork_info->type].text, 120, FC_GREEN); #if 0 - printf("DEBUG: reloading %d sounds ...\n", num_list_entries); + printf("DEBUG: reloading %d artwork files ...\n", num_file_list_entries); #endif - for(i=0; itype].do_it) DrawInitText(file_list[i].token, 150, FC_YELLOW); - if (file_list[i].filename) - LoadArtworkToList(artwork_info, file_list[i].filename, i); - else - LoadArtworkToList(artwork_info, file_list[i].default_filename, i); + LoadArtworkToList(artwork_info, file_list[i].filename, i); } draw_init[artwork_info->type].do_it = FALSE; @@ -1607,7 +1680,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info) IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT"); #endif - for(i=0; inum_list_entries; i++) + for(i=0; inum_file_list_entries; i++) deleteArtworkListEntry(artwork_info, &artwork_info->artwork_list[i]); #if 0 @@ -1618,7 +1691,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info) free(artwork_info->artwork_list); artwork_info->artwork_list = NULL; - artwork_info->num_list_entries = 0; + artwork_info->num_file_list_entries = 0; }