X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=9865b9d6c6e29c7e0a724c687db73a3a8210401c;hb=38c26472a6e9f0f037ddfe535d3919c00772b26f;hp=b5dfab4b945ade852c68ec365cba847a1dc5805f;hpb=fa2a77aa4b53bb786e67f35d6c46f759ebe7823d;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index b5dfab4b..9865b9d6 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -458,6 +458,7 @@ static void printUsage() " \"print graphicsinfo.conf\" print default graphics config\n" " \"print soundsinfo.conf\" print default sounds config\n" " \"print musicinfo.conf\" print default music config\n" + " \"dump level FILE\" dump level data from FILE\n" " \"dump tape FILE\" dump tape data from FILE\n" " \"autoplay LEVELDIR\" play level tapes for LEVELDIR\n" "\n", @@ -1234,6 +1235,63 @@ char getCharFromKey(Key key) } +/* ------------------------------------------------------------------------- */ +/* functions to translate string identifiers to integer or boolean value */ +/* ------------------------------------------------------------------------- */ + +int get_integer_from_string(char *s) +{ + static char *number_text[][3] = + { + { "0", "zero", "null", }, + { "1", "one", "first" }, + { "2", "two", "second" }, + { "3", "three", "third" }, + { "4", "four", "fourth" }, + { "5", "five", "fifth" }, + { "6", "six", "sixth" }, + { "7", "seven", "seventh" }, + { "8", "eight", "eighth" }, + { "9", "nine", "ninth" }, + { "10", "ten", "tenth" }, + { "11", "eleven", "eleventh" }, + { "12", "twelve", "twelfth" }, + }; + + int i, j; + char *s_lower = getStringToLower(s); + int result = -1; + + for (i=0; i<13; i++) + for (j=0; j<3; j++) + if (strcmp(s_lower, number_text[i][j]) == 0) + result = i; + + if (result == -1) + result = atoi(s); + + free(s_lower); + + return result; +} + +boolean get_boolean_from_string(char *s) +{ + char *s_lower = getStringToLower(s); + boolean result = FALSE; + + if (strcmp(s_lower, "true") == 0 || + strcmp(s_lower, "yes") == 0 || + strcmp(s_lower, "on") == 0 || + get_integer_from_string(s) == 1) + result = TRUE; + + free(s_lower); + + return result; +} + + /* ========================================================================= */ /* functions for generic lists */ /* ========================================================================= */ @@ -1369,11 +1427,19 @@ boolean FileIsArtworkType(char *basename, int type) /* functions for loading artwork configuration information */ /* ========================================================================= */ +static int get_parameter_value(int type, char *value) +{ + return (type == TYPE_INTEGER ? get_integer_from_string(value) : + type == TYPE_BOOLEAN ? get_boolean_from_string(value) : + -1); +} + struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, struct ConfigInfo *suffix_list, int num_file_list_entries) { struct FileInfo *file_list; + int num_file_list_entries_found = 0; int num_suffix_list_entries = 0; int list_pos = 0; int i, j; @@ -1399,7 +1465,8 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, for (j=0; j 0) list_pos++; - if (list_pos > num_file_list_entries - 1) + if (list_pos >= num_file_list_entries) break; /* simple sanity check if this is really a file definition */ @@ -1451,8 +1519,16 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, } } - if (list_pos != num_file_list_entries - 1) - Error(ERR_EXIT, "inconsistant config list information (%d != %d) -- please fix", list_pos, num_file_list_entries - 1); + num_file_list_entries_found = list_pos + 1; + if (num_file_list_entries_found != num_file_list_entries) + { + Error(ERR_RETURN, "inconsistant config list information:"); + Error(ERR_RETURN, "- should be: %d (according to 'src/conf_gfx.h')", + num_file_list_entries); + Error(ERR_RETURN, "- found to be: %d (according to 'src/conf_gfx.c')", + num_file_list_entries_found); + Error(ERR_EXIT, "please fix"); + } return file_list; } @@ -1491,8 +1567,13 @@ static void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) { char *filename = getTokenValue(setup_file_list, file_list[i].token); - if (filename == NULL) + if (filename) + for (j=0; j