X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmisc.c;h=6cbd9655e60cd32ed28a514fef251691a8736932;hp=56b651cbc38f3d9cf6c9a2abe4e0f5098006d9bd;hb=e5c5bf5c4a76a04f9bf64e92227bf2ef969fd25c;hpb=59c2e609872b70cb4c458004cd9e2fe22c86a54b diff --git a/src/misc.c b/src/misc.c index 56b651cb..6cbd9655 100644 --- a/src/misc.c +++ b/src/misc.c @@ -84,7 +84,8 @@ void Delay(unsigned long delay) /* Sleep specified number of milliseconds */ sleep_milliseconds(delay); } -BOOL FrameReached(unsigned long *frame_counter_var, unsigned long frame_delay) +boolean FrameReached(unsigned long *frame_counter_var, + unsigned long frame_delay) { unsigned long actual_frame_counter = FrameCounter; @@ -96,7 +97,8 @@ BOOL FrameReached(unsigned long *frame_counter_var, unsigned long frame_delay) return(TRUE); } -BOOL DelayReached(unsigned long *counter_var, unsigned long delay) +boolean DelayReached(unsigned long *counter_var, + unsigned long delay) { unsigned long actual_counter = Counter(); @@ -193,6 +195,14 @@ void GetOptions(char *argv[]) { char **options_left = &argv[1]; + /* initialize global program options */ + options.display_name = NULL; + options.server_host = NULL; + options.server_port = 0; + options.serveronly = FALSE; + options.network = FALSE; + options.verbose = FALSE; + while (*options_left) { char option_str[MAX_OPTION_LEN]; @@ -244,11 +254,11 @@ void GetOptions(char *argv[]) if (option_arg == NULL) Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); - display_name = option_arg; + options.display_name = option_arg; if (option_arg == next_option) options_left++; - printf("--display == '%s'\n", display_name); + printf("--display == '%s'\n", options.display_name); } else if (strncmp(option, "-levels", option_len) == 0) { @@ -265,35 +275,35 @@ void GetOptions(char *argv[]) { printf("--network\n"); - network = TRUE; + options.network = TRUE; } else if (strncmp(option, "-serveronly", option_len) == 0) { printf("--serveronly\n"); - serveronly = TRUE; + options.serveronly = TRUE; } else if (strncmp(option, "-verbose", option_len) == 0) { printf("--verbose\n"); - verbose = TRUE; + options.verbose = TRUE; } else if (*option == '-') Error(ERR_EXIT_HELP, "unrecognized option '%s'", option_str); - else if (server_host == NULL) + else if (options.server_host == NULL) { - server_host = *options_left; + options.server_host = *options_left; - printf("server.name == '%s'\n", server_host); + printf("server.name == '%s'\n", options.server_host); } - else if (server_port == 0) + else if (options.server_port == 0) { - server_port = atoi(*options_left); - if (server_port < 1024) - Error(ERR_EXIT_HELP, "bad port number '%d'", server_port); + options.server_port = atoi(*options_left); + if (options.server_port < 1024) + Error(ERR_EXIT_HELP, "bad port number '%d'", options.server_port); - printf("port == %d\n", server_port); + printf("port == %d\n", options.server_port); } else Error(ERR_EXIT_HELP, "too many arguments"); @@ -370,15 +380,14 @@ void Error(int mode, char *format_str, ...) } } -/* like memcpy, but guaranteed to handle overlap when s <= t */ -void copydown(char *s, char *t, int n) +void *checked_malloc(unsigned long size) { - for (; n; n--) - *(s++) = *(t++); -} + void *ptr; -void fatal(char *s) -{ - fprintf(stderr, "%s.\n", s); - exit(1); + ptr = malloc(size); + + if (ptr == NULL) + Error(ERR_EXIT, "cannot allocate %d bytes -- out of memory", size); + + return ptr; }