X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=bde3ea638ccc744881a3d393fdf50190adf174bf;hb=14089dac2cbe56e563863e1e5adb8847944fd262;hp=6600dfdfc044fbc01116792c2bcbb35cf37350d1;hpb=b583d4fa28df35b6974bd075d3de65a841454556;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 6600dfdf..bde3ea63 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -436,6 +436,34 @@ char *getStringToLower(char *s) return s_copy; } +static void printUsage() +{ + printf("\n" + "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n" + "\n" + "Options:\n" + " -d, --display HOSTNAME[:SCREEN] specify X server display\n" + " -b, --basepath DIRECTORY alternative base DIRECTORY\n" + " -l, --level DIRECTORY alternative level DIRECTORY\n" + " -g, --graphics DIRECTORY alternative graphics DIRECTORY\n" + " -s, --sounds DIRECTORY alternative sounds DIRECTORY\n" + " -m, --music DIRECTORY alternative music DIRECTORY\n" + " -n, --network network multiplayer game\n" + " --serveronly only start network server\n" + " -v, --verbose verbose mode\n" + " --debug display debugging information\n" + " -e, --execute COMMAND execute batch COMMAND:\n" + "\n" + "Valid commands for '--execute' option:\n" + " \"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 tape FILE\" dump tape data from FILE\n" + " \"autoplay LEVELDIR\" play level tapes for LEVELDIR\n" + "\n", + program.command_basename); +} + void GetOptions(char *argv[]) { char **options_left = &argv[1]; @@ -450,11 +478,11 @@ void GetOptions(char *argv[]) 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.execute_command = NULL; options.serveronly = FALSE; options.network = FALSE; options.verbose = FALSE; options.debug = FALSE; - options.debug_command = NULL; while (*options_left) { @@ -492,22 +520,7 @@ void GetOptions(char *argv[]) Error(ERR_EXIT_HELP, "unrecognized option '%s'", option); else if (strncmp(option, "-help", option_len) == 0) { - printf("Usage: %s [options] [ []]\n" - "Options:\n" - " -d, --display [:] X server display\n" - " -b, --basepath alternative base directory\n" - " -l, --level alternative level directory\n" - " -g, --graphics alternative graphics directory\n" - " -s, --sounds alternative sounds directory\n" - " -m, --music alternative music directory\n" - " -n, --network network multiplayer game\n" - " --serveronly only start network server\n" - " -v, --verbose verbose mode\n" - " --debug display debugging information\n", - program.command_basename); - - if (options.debug) - printf(" --debug-command execute special command\n"); + printUsage(); exit(0); } @@ -587,12 +600,12 @@ void GetOptions(char *argv[]) { options.debug = TRUE; } - else if (strncmp(option, "-debug-command", option_len) == 0) + else if (strncmp(option, "-execute", option_len) == 0) { if (option_arg == NULL) Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); - options.debug_command = option_arg; + options.execute_command = option_arg; if (option_arg == next_option) options_left++; } @@ -1361,6 +1374,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_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; @@ -1420,7 +1434,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, if (i > 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 */ @@ -1438,8 +1452,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; } @@ -1731,7 +1753,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info) { int i; - if (artwork_info->artwork_list == NULL) + if (artwork_info == NULL || artwork_info->artwork_list == NULL) return; #if 0 @@ -1788,6 +1810,21 @@ void dumpErrorFile() #endif +/* ========================================================================= */ +/* some generic helper functions */ +/* ========================================================================= */ + +void printf_line(char line_char, int line_length) +{ + int i; + + for (i=0; i