X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=49478464d427b114e7ebb2fb75218f0814988167;hb=3836649c663e70e503686c52c67f71d21c00bb84;hp=53157870e13f3e4bc5c17fa27bc79dde3dce4e94;hpb=f9b768303c640858ba5192babe50ba85eab9a8a4;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index 53157870..49478464 100644 --- a/src/main.c +++ b/src/main.c @@ -17,6 +17,7 @@ #include "events.h" #include "sound.h" #include "joystick.h" +#include "misc.h" #ifdef MSDOS #include @@ -45,15 +46,17 @@ char *joystick_device_name[2] = { DEV_JOYSTICK_0, DEV_JOYSTICK_1 }; char *level_directory = LEVEL_PATH; int width, height; +char *program_name = NULL; char *display_name = NULL; char *server_host = NULL; int server_port = 0; -int networking = FALSE; -int standalone = TRUE; +int serveronly = FALSE; +int network = FALSE; int verbose = FALSE; int game_status = MAINMENU; int game_emulation = EMU_NONE; +int network_playing = FALSE; int button_status = MB_NOT_PRESSED, motion_status = FALSE; int key_joystick_mapping = 0; int global_joystick_status = JOYSTICK_STATUS; @@ -104,6 +107,8 @@ int AllPlayersGone; int FrameCounter, TimeFrames, TimeLeft; int MampferNr, SiebAktiv; +byte network_player_action[MAX_PLAYERS]; +BOOL network_player_action_received = FALSE; int TestPlayer = 0; struct LevelDirInfo leveldir[MAX_LEVDIR_ENTRIES]; @@ -192,158 +197,17 @@ int background_loop[] = }; int num_bg_loops = sizeof(background_loop)/sizeof(int); -char *progname; - -#define MAX_OPTION_LEN 1024 - -static void fatal_option() -{ - fprintf(stderr,"Try '%s --help' for more information.\n", - progname); - exit(1); -} - -static void fatal_unrecognized_option(char *option) -{ - fprintf(stderr,"%s: unrecognized option '%s'\n", - progname, option); - fatal_option(); -} - -static void fatal_option_requires_argument(char *option) -{ - fprintf(stderr,"%s: option '%s' requires an argument\n", - progname, option); - fatal_option(); -} - -static void fatal_invalid_argument(char *option) -{ - fprintf(stderr,"%s: option '%s' has invalid argument\n", - progname, option); - fatal_option(); -} - -static void fatal_too_many_arguments() -{ - fprintf(stderr,"%s: too many arguments\n", - progname); - fatal_option(); -} - -extern void fatal(char *); - int main(int argc, char *argv[]) { - char **options_left = &argv[1]; - - progname = &argv[0][strlen(argv[0])]; - while (progname != argv[0]) - if (*progname-- == '/') - break; - - while (options_left) - { - char option_str[MAX_OPTION_LEN]; - char *option = options_left[0]; - char *next_option = options_left[1]; - char *option_arg = NULL; - int option_len; - - if (strcmp(option, "--") == 0) /* end of argument list */ - break; - - if (strncmp(option, "--", 2)) /* treat '--' like '-' */ - option++; - option_len = strlen(option); - - if (option_len >= MAX_OPTION_LEN) - fatal_unrecognized_option(option); - - strcpy(option_str, option); - option = option_str; - - option_arg = strchr(option, '='); - if (option_arg == NULL) /* no '=' in option */ - option_arg = next_option; - else - { - *option_arg++ = '\0'; /* cut argument from option */ - if (*option_arg == '\0') /* no argument after '=' */ - fatal_invalid_argument(option); - } - - if (strncmp(option, "-help", option_len) == 0) - { - printf("Usage: rocksndiamonds [options] [server.name [port]]\n" - "Options:\n" - " -d, --display machine:0 X server display\n" - " -l, --levels directory alternative level directory\n" - " -v, --verbose verbose mode\n"); - exit(0); - } - else if (strncmp(option, "-display", option_len) == 0) - { - if (option_arg == NULL) - fatal_option_requires_argument(option); - - display_name = option_arg; - if (option_arg == next_option) - options_left++; - } - else if (strncmp(option, "-levels", option_len) == 0) - { - if (option_arg == NULL) - fatal_option_requires_argument(option); - - level_directory = option_arg; - if (option_arg == next_option) - options_left++; - } - else if (strncmp(option, "-verbose", option_len) == 0) - { - verbose = TRUE; - } - else if (*option == '-') - fatal_unrecognized_option(option); - else if (server_host == NULL) - server_host = *options_left; - else if (server_port == 0) - { - server_port = atoi(*options_left); - if (server_port < 1024) - fatal("Bad port number"); - } - else - fatal_too_many_arguments(); - - options_left++; - } - - - - /* - if (argc>1) - level_directory = argv[1]; - */ - - - /* - if (argc > 1) - server_host = argv[1]; - - if (argc > 2) - server_port = atoi(argv[2]); - */ - + program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]); #ifdef MSDOS _fmode = O_BINARY; #endif + GetOptions(argv); OpenAll(argc,argv); EventLoop(); - CloseAll(); - - exit(0); + CloseAllAndExit(0); + exit(0); /* to keep compilers happy */ }