X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmisc.c;h=56b651cbc38f3d9cf6c9a2abe4e0f5098006d9bd;hb=59c2e609872b70cb4c458004cd9e2fe22c86a54b;hp=6445ee2894655da2331d777b733e12b81fe847cf;hpb=e557b2b5d9951a4e692fd4e32a5cf45c84252c64;p=rocksndiamonds.git diff --git a/src/misc.c b/src/misc.c index 6445ee28..56b651cb 100644 --- a/src/misc.c +++ b/src/misc.c @@ -208,7 +208,7 @@ void GetOptions(char *argv[]) break; if (option_len >= MAX_OPTION_LEN) - Error(ERR_EXITHELP, "unrecognized option '%s'", option); + Error(ERR_EXIT_HELP, "unrecognized option '%s'", option); if (strncmp(option, "--", 2) == 0) /* treat '--' like '-' */ option++; @@ -220,19 +220,21 @@ void GetOptions(char *argv[]) { *option_arg++ = '\0'; /* cut argument from option */ if (*option_arg == '\0') /* no argument after '=' */ - Error(ERR_EXITHELP, "option '%s' has invalid argument", option_str); + Error(ERR_EXIT_HELP, "option '%s' has invalid argument", option_str); } option_len = strlen(option); if (strcmp(option, "-") == 0) - Error(ERR_EXITHELP, "unrecognized option '%s'", option); + Error(ERR_EXIT_HELP, "unrecognized option '%s'", option); else if (strncmp(option, "-help", option_len) == 0) { printf("Usage: %s [options] [server.name [port]]\n" "Options:\n" " -d, --display machine:0 X server display\n" " -l, --levels directory alternative level directory\n" + " -s, --serveronly only start network server\n" + " -n, --network network multiplayer game\n" " -v, --verbose verbose mode\n", program_name); exit(0); @@ -240,7 +242,7 @@ void GetOptions(char *argv[]) else if (strncmp(option, "-display", option_len) == 0) { if (option_arg == NULL) - Error(ERR_EXITHELP, "option '%s' requires an argument", option_str); + Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); display_name = option_arg; if (option_arg == next_option) @@ -251,7 +253,7 @@ void GetOptions(char *argv[]) else if (strncmp(option, "-levels", option_len) == 0) { if (option_arg == NULL) - Error(ERR_EXITHELP, "option '%s' requires an argument", option_str); + Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); level_directory = option_arg; if (option_arg == next_option) @@ -259,6 +261,18 @@ void GetOptions(char *argv[]) printf("--levels == '%s'\n", level_directory); } + else if (strncmp(option, "-network", option_len) == 0) + { + printf("--network\n"); + + network = TRUE; + } + else if (strncmp(option, "-serveronly", option_len) == 0) + { + printf("--serveronly\n"); + + serveronly = TRUE; + } else if (strncmp(option, "-verbose", option_len) == 0) { printf("--verbose\n"); @@ -266,7 +280,7 @@ void GetOptions(char *argv[]) verbose = TRUE; } else if (*option == '-') - Error(ERR_EXITHELP, "unrecognized option '%s'", option_str); + Error(ERR_EXIT_HELP, "unrecognized option '%s'", option_str); else if (server_host == NULL) { server_host = *options_left; @@ -277,12 +291,12 @@ void GetOptions(char *argv[]) { server_port = atoi(*options_left); if (server_port < 1024) - Error(ERR_EXITHELP, "bad port number '%d'", server_port); + Error(ERR_EXIT_HELP, "bad port number '%d'", server_port); printf("port == %d\n", server_port); } else - Error(ERR_EXITHELP, "too many arguments"); + Error(ERR_EXIT_HELP, "too many arguments"); options_left++; } @@ -291,6 +305,10 @@ void GetOptions(char *argv[]) void Error(int mode, char *format_str, ...) { FILE *output_stream = stderr; + char *process_name = ""; + + if (mode == ERR_EXIT_SOUNDSERVER) + process_name = " sound server"; if (format_str) { @@ -300,7 +318,7 @@ void Error(int mode, char *format_str, ...) int i_value; double d_value; - fprintf(output_stream, "%s: ", program_name); + fprintf(output_stream, "%s%s: ", program_name, process_name); va_start(ap, format_str); /* ap points to first unnamed argument */ @@ -330,7 +348,8 @@ void Error(int mode, char *format_str, ...) break; default: - fprintf(stderr, "\nError(): invalid format string: %s\n",format_str); + fprintf(stderr, "\n%s: Error(): invalid format string: %s\n", + program_name, format_str); CloseAllAndExit(10); } } @@ -340,13 +359,26 @@ void Error(int mode, char *format_str, ...) fprintf(output_stream, "\n"); } - if (mode == ERR_EXITHELP) + if (mode == ERR_EXIT_HELP) fprintf(output_stream, "%s: Try option '--help' for more information.\n", program_name); - if (mode == ERR_EXIT || mode == ERR_EXITHELP) + if (mode != ERR_RETURN) { - fprintf(output_stream, "%s: aborting\n", program_name); + fprintf(output_stream, "%s%s: aborting\n", program_name, process_name); CloseAllAndExit(1); } } + +/* like memcpy, but guaranteed to handle overlap when s <= t */ +void copydown(char *s, char *t, int n) +{ + for (; n; n--) + *(s++) = *(t++); +} + +void fatal(char *s) +{ + fprintf(stderr, "%s.\n", s); + exit(1); +}