X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=2a86f2be07706c0380ea7ad7a13494f401a1ca39;hb=512f7bbfa113ed92bebc8a3a7d436b38c0227d59;hp=5beaafd23eb643145386fbf9094bbf5ce913cba3;hpb=b641818c787e48bbf03ce2a0cd5b542c4c21e523;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 5beaafd2..2a86f2be 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -18,11 +18,6 @@ #include "platform.h" -#if !defined(PLATFORM_WIN32) -#include -#include -#endif - #include "setup.h" #include "joystick.h" #include "text.h" @@ -820,9 +815,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) @@ -893,9 +886,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) @@ -966,9 +957,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) @@ -1367,19 +1356,19 @@ void dumpTreeInfo(TreeInfo *node, int depth) { int i; - printf("Dumping TreeInfo:\n"); + Debug("tree", "Dumping TreeInfo:"); while (node) { for (i = 0; i < (depth + 1) * 3; i++) - printf(" "); + DebugContinued("", " "); - printf("'%s' / '%s'\n", node->identifier, node->name); + DebugContinued("tree", "'%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); + Debug("tree", "subdir == '%s' ['%s', '%s'] [%d])", + node->subdir, node->fullpath, node->basepath, node->in_user_dir); */ if (node->node_group != NULL) @@ -1510,10 +1499,10 @@ char *getHomeDir(void) { if ((dir = getenv("HOME")) == NULL) { - struct passwd *pwd; + dir = getUnixHomeDir(); - if ((pwd = getpwuid(getuid())) != NULL) - dir = getStringCopy(pwd->pw_dir); + if (dir != NULL) + dir = getStringCopy(dir); else dir = "."; } @@ -1639,8 +1628,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); @@ -1837,8 +1825,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); } @@ -1898,7 +1886,7 @@ SetupFileHash *newSetupFileHash(void) create_hashtable(16, 0.75, get_hash_from_key, keys_are_equal); if (new_hash == NULL) - Error(ERR_EXIT, "create_hashtable() failed -- out of memory"); + Fail("create_hashtable() failed -- out of memory"); return new_hash; } @@ -1931,7 +1919,7 @@ void setHashEntry(SetupFileHash *hash, char *token, char *value) // change value; if it does not exist, insert it as new if (!change_hash_entry(hash, token, value_copy)) if (!insert_hash_entry(hash, getStringCopy(token), value_copy)) - Error(ERR_EXIT, "cannot insert into hash -- aborting"); + Fail("cannot insert into hash -- aborting"); } char *removeHashEntry(SetupFileHash *hash, char *token) @@ -1948,8 +1936,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) } @@ -2054,25 +2042,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 } @@ -2125,7 +2113,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; @@ -2206,7 +2194,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 @@ -2221,16 +2209,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 @@ -2250,16 +2238,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); @@ -2273,7 +2261,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; } @@ -2512,7 +2500,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); @@ -2999,7 +2987,7 @@ static TreeInfo *getArtworkInfoCacheEntry(LevelDirTree *level_node, int type) // check if cache entry for this item is mandatory, but missing if (value == NULL && !optional) { - Error(ERR_WARN, "missing cache entry '%s'", token); + Warn("missing cache entry '%s'", token); cached = FALSE; } @@ -3236,7 +3224,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; } @@ -3245,12 +3233,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]; @@ -3271,7 +3259,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; } @@ -3337,7 +3325,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); @@ -3448,7 +3436,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; } @@ -3498,7 +3486,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); } @@ -3547,7 +3535,7 @@ void LoadLevelInfo(void) leveldir_current = getFirstValidTreeInfoEntry(leveldir_first); if (leveldir_first == NULL) - Error(ERR_EXIT, "cannot find any valid level series in any directory"); + Fail("cannot find any valid level series in any directory"); sortTreeInfo(&leveldir_first); @@ -3595,7 +3583,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); @@ -3710,7 +3698,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; } @@ -3752,8 +3740,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) @@ -3774,6 +3761,34 @@ static TreeInfo *getDummyArtworkInfo(int type) return artwork_new; } +void SetCurrentArtwork(int type) +{ + ArtworkDirTree **current_ptr = ARTWORK_CURRENT_PTR(artwork, type); + ArtworkDirTree *first_node = ARTWORK_FIRST_NODE(artwork, type); + char *setup_set = SETUP_ARTWORK_SET(setup, type); + char *default_subdir = ARTWORK_DEFAULT_SUBDIR(type); + + // set current artwork to artwork configured in setup menu + *current_ptr = getTreeInfoFromIdentifier(first_node, setup_set); + + // if not found, set current artwork to default artwork + if (*current_ptr == NULL) + *current_ptr = getTreeInfoFromIdentifier(first_node, default_subdir); + + // if not found, set current artwork to first artwork in tree + if (*current_ptr == NULL) + *current_ptr = getFirstValidTreeInfoEntry(first_node); +} + +void ChangeCurrentArtworkIfNeeded(int type) +{ + char *current_identifier = ARTWORK_CURRENT_IDENTIFIER(artwork, type); + char *setup_set = SETUP_ARTWORK_SET(setup, type); + + if (!strEqual(current_identifier, setup_set)) + SetCurrentArtwork(type); +} + void LoadArtworkInfo(void) { LoadArtworkInfoCache(); @@ -3809,38 +3824,21 @@ void LoadArtworkInfo(void) artwork.mus_first = getDummyArtworkInfo(TREE_TYPE_MUSIC_DIR); // before sorting, the first entries will be from the user directory - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, setup.graphics_set); - if (artwork.gfx_current == NULL) - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, GFX_DEFAULT_SUBDIR); - if (artwork.gfx_current == NULL) - artwork.gfx_current = getFirstValidTreeInfoEntry(artwork.gfx_first); - - artwork.snd_current = - getTreeInfoFromIdentifier(artwork.snd_first, setup.sounds_set); - if (artwork.snd_current == NULL) - artwork.snd_current = - getTreeInfoFromIdentifier(artwork.snd_first, SND_DEFAULT_SUBDIR); - if (artwork.snd_current == NULL) - artwork.snd_current = getFirstValidTreeInfoEntry(artwork.snd_first); - - artwork.mus_current = - getTreeInfoFromIdentifier(artwork.mus_first, setup.music_set); - if (artwork.mus_current == NULL) - artwork.mus_current = - getTreeInfoFromIdentifier(artwork.mus_first, MUS_DEFAULT_SUBDIR); - if (artwork.mus_current == NULL) - artwork.mus_current = getFirstValidTreeInfoEntry(artwork.mus_first); + SetCurrentArtwork(ARTWORK_TYPE_GRAPHICS); + SetCurrentArtwork(ARTWORK_TYPE_SOUNDS); + SetCurrentArtwork(ARTWORK_TYPE_MUSIC); artwork.gfx_current_identifier = artwork.gfx_current->identifier; artwork.snd_current_identifier = artwork.snd_current->identifier; 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); @@ -3930,39 +3928,9 @@ void LoadLevelArtworkInfo(void) print_timestamp_time("SaveArtworkInfoCache"); // needed for reloading level artwork not known at ealier stage - - if (!strEqual(artwork.gfx_current_identifier, setup.graphics_set)) - { - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, setup.graphics_set); - if (artwork.gfx_current == NULL) - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, GFX_DEFAULT_SUBDIR); - if (artwork.gfx_current == NULL) - artwork.gfx_current = getFirstValidTreeInfoEntry(artwork.gfx_first); - } - - if (!strEqual(artwork.snd_current_identifier, setup.sounds_set)) - { - artwork.snd_current = - getTreeInfoFromIdentifier(artwork.snd_first, setup.sounds_set); - if (artwork.snd_current == NULL) - artwork.snd_current = - getTreeInfoFromIdentifier(artwork.snd_first, SND_DEFAULT_SUBDIR); - if (artwork.snd_current == NULL) - artwork.snd_current = getFirstValidTreeInfoEntry(artwork.snd_first); - } - - if (!strEqual(artwork.mus_current_identifier, setup.music_set)) - { - artwork.mus_current = - getTreeInfoFromIdentifier(artwork.mus_first, setup.music_set); - if (artwork.mus_current == NULL) - artwork.mus_current = - getTreeInfoFromIdentifier(artwork.mus_first, MUS_DEFAULT_SUBDIR); - if (artwork.mus_current == NULL) - artwork.mus_current = getFirstValidTreeInfoEntry(artwork.mus_first); - } + ChangeCurrentArtworkIfNeeded(ARTWORK_TYPE_GRAPHICS); + ChangeCurrentArtworkIfNeeded(ARTWORK_TYPE_SOUNDS); + ChangeCurrentArtworkIfNeeded(ARTWORK_TYPE_MUSIC); print_timestamp_time("getTreeInfoFromIdentifier"); @@ -4058,7 +4026,7 @@ void AddTreeSetToTreeInfo(TreeInfo *tree_node, char *tree_dir, char *tree_subdir_new, int type) { if (!AddTreeSetToTreeInfoExt(tree_node, tree_dir, tree_subdir_new, type)) - Error(ERR_EXIT, "internal tree info structure corrupted -- aborting"); + Fail("internal tree info structure corrupted -- aborting"); } void AddUserLevelSetToLevelInfo(char *level_subdir_new) @@ -4100,7 +4068,7 @@ TreeInfo *getArtworkTreeInfoForUserLevelSet(int type) ti = getTreeInfoFromIdentifier(artwork_first_node, ARTWORK_DEFAULT_SUBDIR(type)); if (ti == NULL) - Error(ERR_EXIT, "cannot find default graphics -- should not happen"); + Fail("cannot find default graphics -- should not happen"); } return ti; @@ -4200,7 +4168,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; @@ -4411,7 +4380,7 @@ void LoadLevelSetup_LastSeries(void) } else { - Error(ERR_DEBUG, "using default setup values"); + Debug("setup", "using default setup values"); } free(filename); @@ -4435,7 +4404,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); @@ -4486,7 +4455,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; } @@ -4508,12 +4477,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; } } @@ -4615,7 +4586,7 @@ void LoadLevelSetup_SeriesInfo(void) } else { - Error(ERR_DEBUG, "using default setup values"); + Debug("setup", "using default setup values"); } free(filename); @@ -4640,8 +4611,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; }