X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=206db77e4de949a765822011b9ddd738a68917ca;hp=7d17464164e4f33f8e09b7fd0e0b45a80c0f9c53;hb=a99a1803e5097bc598b4c6f73259715da148ab27;hpb=9151b056647ea2d66aa9836ac8051f58fd43bc2c diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 7d174641..206db77e 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // setup.c // ============================================================================ @@ -99,6 +99,7 @@ static int token_comment_position = TOKEN_COMMENT_POSITION_DEFAULT; static SetupFileHash *artworkinfo_cache_old = NULL; static SetupFileHash *artworkinfo_cache_new = NULL; +static SetupFileHash *optional_tokens_hash = NULL; static boolean use_artworkinfo_cache = TRUE; @@ -819,9 +820,7 @@ char *getCustomImageFilename(char *basename) { free(filename); - if (options.debug) - Error(ERR_WARN, "cannot find artwork file '%s' (using fallback)", - basename); + Warn("cannot find artwork file '%s' (using fallback)", basename); // 6th try: look for fallback artwork in old default artwork directory // (needed to prevent errors when trying to access unused artwork files) @@ -892,9 +891,7 @@ char *getCustomSoundFilename(char *basename) { free(filename); - if (options.debug) - Error(ERR_WARN, "cannot find artwork file '%s' (using fallback)", - basename); + Warn("cannot find artwork file '%s' (using fallback)", basename); // 6th try: look for fallback artwork in old default artwork directory // (needed to prevent errors when trying to access unused artwork files) @@ -965,9 +962,7 @@ char *getCustomMusicFilename(char *basename) { free(filename); - if (options.debug) - Error(ERR_WARN, "cannot find artwork file '%s' (using fallback)", - basename); + Warn("cannot find artwork file '%s' (using fallback)", basename); // 6th try: look for fallback artwork in old default artwork directory // (needed to prevent errors when trying to access unused artwork files) @@ -1366,19 +1361,19 @@ void dumpTreeInfo(TreeInfo *node, int depth) { int i; - printf("Dumping TreeInfo:\n"); + Print("Dumping TreeInfo:\n"); while (node) { for (i = 0; i < (depth + 1) * 3; i++) - printf(" "); + Print(" "); - printf("'%s' / '%s'\n", node->identifier, node->name); + Print("'%s' / '%s'\n", node->identifier, node->name); /* // use for dumping artwork info tree - printf("subdir == '%s' ['%s', '%s'] [%d])\n", - node->subdir, node->fullpath, node->basepath, node->in_user_dir); + Print("subdir == '%s' ['%s', '%s'] [%d])\n", + node->subdir, node->fullpath, node->basepath, node->in_user_dir); */ if (node->node_group != NULL) @@ -1638,8 +1633,7 @@ void createDirectory(char *dir, char *text, int permission_class) } if (posix_mkdir(dir, dir_mode) != 0) - Error(ERR_WARN, "cannot create %s directory '%s': %s", - text, dir, strerror(errno)); + Warn("cannot create %s directory '%s': %s", text, dir, strerror(errno)); if (permission_class == PERMS_PUBLIC && !running_setgid) chmod(dir, dir_mode); @@ -1836,8 +1830,8 @@ static void printSetupFileList(SetupFileList *list) if (!list) return; - printf("token: '%s'\n", list->token); - printf("value: '%s'\n", list->value); + Debug("setup:printSetupFileList", "token: '%s'", list->token); + Debug("setup:printSetupFileList", "value: '%s'", list->value); printSetupFileList(list->next); } @@ -1947,8 +1941,8 @@ static void printSetupFileHash(SetupFileHash *hash) { BEGIN_HASH_ITERATION(hash, itr) { - printf("token: '%s'\n", HASH_ITERATION_TOKEN(itr)); - printf("value: '%s'\n", HASH_ITERATION_VALUE(itr)); + Debug("setup:printSetupFileHash", "token: '%s'", HASH_ITERATION_TOKEN(itr)); + Debug("setup:printSetupFileHash", "value: '%s'", HASH_ITERATION_VALUE(itr)); } END_HASH_ITERATION(hash, itr) } @@ -2053,25 +2047,25 @@ static boolean getTokenValueFromSetupLineExt(char *line, { if (!token_value_separator_warning) { - Error(ERR_INFO_LINE, "-"); + Debug("setup", "---"); if (filename != NULL) { - Error(ERR_WARN, "missing token/value separator(s) in config file:"); - Error(ERR_INFO, "- config file: '%s'", filename); + Debug("setup", "missing token/value separator(s) in config file:"); + Debug("setup", "- config file: '%s'", filename); } else { - Error(ERR_WARN, "missing token/value separator(s):"); + Debug("setup", "missing token/value separator(s):"); } token_value_separator_warning = TRUE; } if (filename != NULL) - Error(ERR_INFO, "- line %d: '%s'", line_nr, line_raw); + Debug("setup", "- line %d: '%s'", line_nr, line_raw); else - Error(ERR_INFO, "- line: '%s'", line_raw); + Debug("setup", "- line: '%s'", line_raw); } #endif } @@ -2124,7 +2118,7 @@ static boolean loadSetupFileData(void *setup_file_data, char *filename, if (!(file = openFile(filename, MODE_READ))) { #if DEBUG_NO_CONFIG_FILE - Error(ERR_DEBUG, "cannot open configuration file '%s'", filename); + Debug("setup", "cannot open configuration file '%s'", filename); #endif return FALSE; @@ -2205,7 +2199,7 @@ static boolean loadSetupFileData(void *setup_file_data, char *filename, } else { - Error(ERR_WARN, "ignoring already processed file '%s'", value); + Warn("ignoring already processed file '%s'", value); } } else @@ -2220,16 +2214,16 @@ static boolean loadSetupFileData(void *setup_file_data, char *filename, { if (!token_already_exists_warning) { - Error(ERR_INFO_LINE, "-"); - Error(ERR_WARN, "duplicate token(s) found in config file:"); - Error(ERR_INFO, "- config file: '%s'", filename); + Debug("setup", "---"); + Debug("setup", "duplicate token(s) found in config file:"); + Debug("setup", "- config file: '%s'", filename); token_already_exists_warning = TRUE; } - Error(ERR_INFO, "- token: '%s' (in line %d)", token, line_nr); - Error(ERR_INFO, " old value: '%s'", old_value); - Error(ERR_INFO, " new value: '%s'", value); + Debug("setup", "- token: '%s' (in line %d)", token, line_nr); + Debug("setup", " old value: '%s'", old_value); + Debug("setup", " new value: '%s'", value); } #endif @@ -2249,16 +2243,16 @@ static boolean loadSetupFileData(void *setup_file_data, char *filename, #if CHECK_TOKEN_VALUE_SEPARATOR__WARN_IF_MISSING if (token_value_separator_warning) - Error(ERR_INFO_LINE, "-"); + Debug("setup", "---"); #endif #if CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH if (token_already_exists_warning) - Error(ERR_INFO_LINE, "-"); + Debug("setup", "---"); #endif if (token_count == 0 && include_count == 0) - Error(ERR_WARN, "configuration file '%s' is empty", filename); + Warn("configuration file '%s' is empty", filename); if (top_recursion_level) freeSetupFileHash(include_filename_hash); @@ -2272,7 +2266,7 @@ static void saveSetupFileHash(SetupFileHash *hash, char *filename) if (!(file = fopen(filename, MODE_WRITE))) { - Error(ERR_WARN, "cannot write configuration file '%s'", filename); + Warn("cannot write configuration file '%s'", filename); return; } @@ -2423,6 +2417,15 @@ static struct TokenInfo artworkinfo_tokens[] = { -1, NULL, NULL }, }; +static char *optional_tokens[] = +{ + "program_title", + "program_copyright", + "program_company", + + NULL +}; + static void setTreeInfoToDefaults(TreeInfo *ti, int type) { ti->type = type; @@ -2502,7 +2505,7 @@ static void setTreeInfoToDefaultsFromParent(TreeInfo *ti, TreeInfo *parent) { if (parent == NULL) { - Error(ERR_WARN, "setTreeInfoToDefaultsFromParent(): parent == NULL"); + Warn("setTreeInfoToDefaultsFromParent(): parent == NULL"); setTreeInfoToDefaults(ti, TREE_TYPE_UNDEFINED); @@ -2957,6 +2960,16 @@ static TreeInfo *getArtworkInfoCacheEntry(LevelDirTree *level_node, int type) if (!use_artworkinfo_cache) return NULL; + if (optional_tokens_hash == NULL) + { + int i; + + // create hash from list of optional tokens (for quick access) + optional_tokens_hash = newSetupFileHash(); + for (i = 0; optional_tokens[i] != NULL; i++) + setHashEntry(optional_tokens_hash, optional_tokens[i], ""); + } + if (cached) { int i; @@ -2968,16 +2981,28 @@ static TreeInfo *getArtworkInfoCacheEntry(LevelDirTree *level_node, int type) ldi = *artwork_info; for (i = 0; artworkinfo_tokens[i].type != -1; i++) { - char *token = getCacheToken(token_prefix, artworkinfo_tokens[i].text); + char *token_suffix = artworkinfo_tokens[i].text; + char *token = getCacheToken(token_prefix, token_suffix); char *value = getHashEntry(artworkinfo_cache_old, token); + boolean optional = + (getHashEntry(optional_tokens_hash, token_suffix) != NULL); - // if defined, use value from cache, else keep default value - if (value != NULL) - setSetupInfo(artworkinfo_tokens, i, value); + setSetupInfo(artworkinfo_tokens, i, value); + + // check if cache entry for this item is mandatory, but missing + if (value == NULL && !optional) + { + Warn("missing cache entry '%s'", token); + + cached = FALSE; + } } *artwork_info = ldi; + } + if (cached) + { char *filename_levelinfo = getPath2(getLevelDirFromTreeInfo(level_node), LEVELINFO_FILENAME); char *filename_artworkinfo = getPath2(getSetupArtworkDir(artwork_info), @@ -3204,7 +3229,7 @@ char *ExtractZipFileIntoDirectory(char *zip_filename, char *directory, if (!zip_file_valid) { - Error(ERR_WARN, "zip file '%s' rejected!", zip_filename); + Warn("zip file '%s' rejected!", zip_filename); return NULL; } @@ -3213,12 +3238,12 @@ char *ExtractZipFileIntoDirectory(char *zip_filename, char *directory, if (zip_entries == NULL) { - Error(ERR_WARN, "zip file '%s' could not be extracted!", zip_filename); + Warn("zip file '%s' could not be extracted!", zip_filename); return NULL; } - Error(ERR_INFO, "zip file '%s' successfully extracted!", zip_filename); + Info("zip file '%s' successfully extracted!", zip_filename); // first zip file entry contains top level directory char *top_dir = zip_entries[0]; @@ -3239,7 +3264,7 @@ static void ProcessZipFilesInDirectory(char *directory, int tree_type) // display error if directory is main "options.graphics_directory" etc. if (tree_type == TREE_TYPE_LEVEL_DIR || directory == OPTIONS_ARTWORK_DIRECTORY(tree_type)) - Error(ERR_WARN, "cannot read directory '%s'", directory); + Warn("cannot read directory '%s'", directory); return; } @@ -3305,7 +3330,7 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, if (setup_file_hash == NULL) { #if DEBUG_NO_CONFIG_FILE - Error(ERR_WARN, "ignoring level directory '%s'", directory_path); + Debug("setup", "ignoring level directory '%s'", directory_path); #endif free(directory_path); @@ -3416,7 +3441,7 @@ static void LoadLevelInfoFromLevelDir(TreeInfo **node_first, if ((dir = openDirectory(level_directory)) == NULL) { - Error(ERR_WARN, "cannot read level directory '%s'", level_directory); + Warn("cannot read level directory '%s'", level_directory); return; } @@ -3466,7 +3491,7 @@ static void LoadLevelInfoFromLevelDir(TreeInfo **node_first, } if (!valid_entry_found) - Error(ERR_WARN, "cannot find any valid level series in directory '%s'", + Warn("cannot find any valid level series in directory '%s'", level_directory); } @@ -3563,7 +3588,7 @@ static boolean LoadArtworkInfoFromArtworkConf(TreeInfo **node_first, { #if DEBUG_NO_CONFIG_FILE if (!strEqual(directory_name, ".")) - Error(ERR_WARN, "ignoring artwork directory '%s'", directory_path); + Debug("setup", "ignoring artwork directory '%s'", directory_path); #endif free(directory_path); @@ -3678,7 +3703,7 @@ static void LoadArtworkInfoFromArtworkDir(TreeInfo **node_first, { // display error if directory is main "options.graphics_directory" etc. if (base_directory == OPTIONS_ARTWORK_DIRECTORY(type)) - Error(ERR_WARN, "cannot read directory '%s'", base_directory); + Warn("cannot read directory '%s'", base_directory); return; } @@ -3720,8 +3745,7 @@ static void LoadArtworkInfoFromArtworkDir(TreeInfo **node_first, base_directory, ".", type); if (!valid_entry_found) - Error(ERR_WARN, "cannot find any valid artwork in directory '%s'", - base_directory); + Warn("cannot find any valid artwork in directory '%s'", base_directory); } static TreeInfo *getDummyArtworkInfo(int type) @@ -3806,9 +3830,12 @@ void LoadArtworkInfo(void) artwork.mus_current_identifier = artwork.mus_current->identifier; #if ENABLE_UNUSED_CODE - printf("graphics set == %s\n\n", artwork.gfx_current_identifier); - printf("sounds set == %s\n\n", artwork.snd_current_identifier); - printf("music set == %s\n\n", artwork.mus_current_identifier); + Debug("setup:LoadArtworkInfo", "graphics set == %s", + artwork.gfx_current_identifier); + Debug("setup:LoadArtworkInfo", "sounds set == %s", + artwork.snd_current_identifier); + Debug("setup:LoadArtworkInfo", "music set == %s", + artwork.mus_current_identifier); #endif sortTreeInfo(&artwork.gfx_first); @@ -4168,7 +4195,8 @@ boolean CreateUserLevelSet(char *level_subdir, char *level_name, if (!(file = fopen(filename, MODE_WRITE))) { - Error(ERR_WARN, "cannot write level info file '%s'", filename); + Warn("cannot write level info file '%s'", filename); + free(filename); return FALSE; @@ -4379,7 +4407,7 @@ void LoadLevelSetup_LastSeries(void) } else { - Error(ERR_DEBUG, "using default setup values"); + Debug("setup", "using default setup values"); } free(filename); @@ -4403,7 +4431,7 @@ static void SaveLevelSetup_LastSeries_Ext(boolean deactivate_last_level_series) if (!(file = fopen(filename, MODE_WRITE))) { - Error(ERR_WARN, "cannot write setup file '%s'", filename); + Warn("cannot write setup file '%s'", filename); free(filename); @@ -4454,7 +4482,7 @@ static void checkSeriesInfo(void) if ((dir = openDirectory(level_directory)) == NULL) { - Error(ERR_WARN, "cannot read level directory '%s'", level_directory); + Warn("cannot read level directory '%s'", level_directory); return; } @@ -4476,12 +4504,14 @@ static void checkSeriesInfo(void) if (levelnum_value < leveldir_current->first_level) { - Error(ERR_WARN, "additional level %d found", levelnum_value); + Warn("additional level %d found", levelnum_value); + leveldir_current->first_level = levelnum_value; } else if (levelnum_value > leveldir_current->last_level) { - Error(ERR_WARN, "additional level %d found", levelnum_value); + Warn("additional level %d found", levelnum_value); + leveldir_current->last_level = levelnum_value; } } @@ -4583,7 +4613,7 @@ void LoadLevelSetup_SeriesInfo(void) } else { - Error(ERR_DEBUG, "using default setup values"); + Debug("setup", "using default setup values"); } free(filename); @@ -4608,8 +4638,10 @@ void SaveLevelSetup_SeriesInfo(void) if (!(file = fopen(filename, MODE_WRITE))) { - Error(ERR_WARN, "cannot write setup file '%s'", filename); + Warn("cannot write setup file '%s'", filename); + free(filename); + return; }