X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=d21363cad99665ff029ee48bb9c94ec2739c59af;hb=b6847742a0713d8ed21bb6104476db54f8c1a4b9;hp=7883f325e4de89b6f8a18ab459958c3fed342905;hpb=29ea60b3d59414875c3bbc59e64f62d2e236ef2a;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 7883f325..d21363ca 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -662,7 +662,8 @@ boolean strSuffixLower(char *s, char *suffix) /* command line option handling functions */ /* ------------------------------------------------------------------------- */ -void GetOptions(char *argv[], void (*print_usage_function)(void)) +void GetOptions(char *argv[], void (*print_usage_function)(void), + unsigned long (*get_cmd_switch_function)(char *)) { char *ro_base_path = RO_BASE_PATH; char *rw_base_path = RW_BASE_PATH; @@ -685,6 +686,7 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) options.display_name = NULL; options.server_host = NULL; options.server_port = 0; + options.ro_base_directory = ro_base_path; options.rw_base_directory = rw_base_path; options.level_directory = getPath2(ro_base_path, LEVELS_DIRECTORY); @@ -693,12 +695,15 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) options.music_directory = getPath2(ro_base_path, MUSIC_DIRECTORY); options.docs_directory = getPath2(ro_base_path, DOCS_DIRECTORY); options.execute_command = NULL; + options.serveronly = FALSE; options.network = FALSE; options.verbose = FALSE; options.debug = FALSE; options.debug_x11_sync = FALSE; + options.cmd_switches = 0; + #if !defined(PLATFORM_UNIX) if (*options_left == NULL) /* no options given -- enable verbose mode */ options.verbose = TRUE; @@ -721,7 +726,7 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) if (strEqual(option, "--")) /* stop scanning arguments */ break; - if (strncmp(option, "--", 2) == 0) /* treat '--' like '-' */ + if (strPrefix(option, "--")) /* treat '--' like '-' */ option++; option_arg = strchr(option, '='); @@ -827,6 +832,21 @@ void GetOptions(char *argv[], void (*print_usage_function)(void)) { options.debug_x11_sync = TRUE; } + else if (strPrefix(option, "-D")) + { + char *switch_string = &option[2]; + unsigned long switch_value; + + if (*switch_string == '\0') + Error(ERR_EXIT_HELP, "empty switch ignored"); + + switch_value = get_cmd_switch_function(switch_string); + + if (switch_value == 0) + Error(ERR_EXIT_HELP, "unknown switch '%s'", switch_string); + + options.cmd_switches |= switch_value; + } else if (strncmp(option, "-execute", option_len) == 0) { if (option_arg == NULL) @@ -1429,7 +1449,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) Key key = KSYM_UNDEFINED; char *name_ptr = *x11name; - if (strncmp(name_ptr, "XK_", 3) == 0 && strlen(name_ptr) == 4) + if (strPrefix(name_ptr, "XK_") && strlen(name_ptr) == 4) { char c = name_ptr[3]; @@ -1440,14 +1460,14 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) else if (c >= '0' && c <= '9') key = KSYM_0 + (Key)(c - '0'); } - else if (strncmp(name_ptr, "XK_KP_", 6) == 0 && strlen(name_ptr) == 7) + else if (strPrefix(name_ptr, "XK_KP_") && strlen(name_ptr) == 7) { char c = name_ptr[6]; if (c >= '0' && c <= '9') key = KSYM_KP_0 + (Key)(c - '0'); } - else if (strncmp(name_ptr, "XK_F", 4) == 0 && strlen(name_ptr) <= 6) + else if (strPrefix(name_ptr, "XK_F") && strlen(name_ptr) <= 6) { char c1 = name_ptr[4]; char c2 = name_ptr[5]; @@ -1460,7 +1480,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) if (d >= 1 && d <= KSYM_NUM_FKEYS) key = KSYM_F1 + (Key)(d - 1); } - else if (strncmp(name_ptr, "XK_", 3) == 0) + else if (strPrefix(name_ptr, "XK_")) { i = 0; @@ -1474,7 +1494,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) } while (translate_key[++i].x11name); } - else if (strncmp(name_ptr, "0x", 2) == 0) + else if (strPrefix(name_ptr, "0x")) { unsigned long value = 0;