void Task_manager::initialize(int& argc, char**&argv) { unsigned int num_spes = VSIP_IMPL_CBE_NUM_SPES; for (int i=1; i < argc; ++i) { if (!strcmp(argv[i], "--svpp-num-spes")) { num_spes = atoi(argv[i+1]); shift_argv(argc, argv, i, 2); i -= 1; } } instance_ = new Task_manager(num_spes); }
int ci_main(int argc, lp_str *argv) { unsigned int i = 0; static int ok = 1; if (argc < 2) { lp_error(E_NOCMD, no_cmd_message, _essential_data.title); return 1; } while (1) { if (i == number_commands) { ok = 0; break; } if (strncmp(argv[1], registered_commands[i].name_str, strlen(argv[1])) == 0) break; i++; } if (!ok) { lp_error(E_UNREC, unrecognized_cmd_message, _essential_data.title); return 1; } processed_cmd = 1; shift_argv(argc, argv); _command = registered_commands[i].name_str; return (*registered_commands[i].func_ptr)(argc - 1, argv); }
/** read the command-line options * * \return length of modified argv * * \todo possibly maintain a list of dirs to search?? */ int setup_options(int argc, char *argv[]) { char *str = NULL; int pos, i; /* first set up defaults */ for (i = 0; i < (int) ARRAY_LENGTH(env_vars); ++i) { if ((str = getenv(env_vars[i].name))) *env_vars[i].dest = xstrdup(str); else if (strcmp(env_vars[i].name, ENVIRON_SAVEDIR) == 0 && (str = get_homedir())) { size_t len = strlen(str) + strlen(PACKAGE_TARNAME) + 3; *env_vars[i].dest = xmalloc(len); sprintf(*env_vars[i].dest, "%s/.%s", str, PACKAGE_TARNAME); free(str); } else *env_vars[i].dest = xstrdup(env_vars[i].def_val); } /* set up default values */ options.want_audio = 1; options.want_intro = 1; options.want_cheats = 0; options.want_fullscreen = 0; options.want_debug = 0; options.feat_shorter_advanced_training = 0; options.feat_random_nauts =0; //Naut Randomize, Nikakd, 10/8/10 options.feat_compat_nauts =10; //Naut Compatibility, Nikakd, 10/8/10 options.feat_no_cTraining =1; //No Capsule Training, Nikakd, 10/8/10 options.feat_no_backup =1; //No Backup crew required -Leon options.cheat_no_damage=0; //Damaged Equipment Cheat, Nikakd, 10/8/10 options.feat_random_eq=0; options.feat_eq_new_name =0; options.cheat_altasOnMoon=0; options.cheat_addMaxS=1; options.boosterSafety=0; fixpath_options(); /* now try to read config file, if it exists */ if (read_config_file() < 0) /* if not, then write default config template */ write_default_config(); /* first pass: command line options */ for (pos = 1; pos < argc; ++pos) { str = argv[pos]; if (str[0] != '-') continue; if (!str[1]) continue; if (strcmp(str, "--") == 0) { shift_argv(argv + pos, argc - pos, 1); argc--; break; } /* check what option matches */ if (strcmp(str, "-h") == 0) usage(0); else if (strcmp(str, "-i") == 0) options.want_intro = 0; else if (strcmp(str, "-n") == 0) options.want_cheats = 1; else if (strcmp(str, "-a") == 0) options.want_audio = 0; else if (strcmp(str, "-f") == 0) options.want_fullscreen = 1; else if (strcmp(str, "-v") == 0) options.want_debug++; else { ERROR2("unknown option %s", str); usage(1); } shift_argv(argv + pos, argc - pos, 1); argc--; pos--; /* for loop will advance it again */ } /* second pass: variable assignments */ for (pos = 1; pos < argc; ++pos) { /** \todo should use PATH_MAX or something similar here */ char name[32 + 1], *value; int offset = 0; int fields = 0; fields = sscanf(argv[pos], "%32[A-Z_]=%n", name, &offset); /* it is unclear whether %n increments return value */ if (fields < 1) continue; value = argv[pos] + offset; for (i = 0; i < (int) ARRAY_LENGTH(env_vars); ++i) { if (strcmp(name, env_vars[i].name) == 0) { free(*env_vars[i].dest); *env_vars[i].dest = xstrdup(value); break; } } if (i == (int) ARRAY_LENGTH(env_vars)) WARNING2("unsupported command line variable `%s'", name); /* remove matched string from argv */ shift_argv(argv + pos, argc - pos, 1); /* * now we have one fewer arg, pos points to the next arg, * keep it this way after incrementing it on top of the loop */ pos--; argc--; } fixpath_options(); return argc; }