void parse_options (dckey **ppk, char **pcfile, int *pdur, int argc, char **argv) { char opt; char *opt_arg; int arg_idx = 2; *ppk = NULL; *pcfile = NULL; *pdur = -1; while ((arg_idx < argc) && (argv[arg_idx][0] == '-')) { opt = argv[arg_idx][1]; /* locate the argument to this option */ opt_arg = (argv[arg_idx][2] != '\0') ? &(argv[arg_idx][2]) : argv[++arg_idx]; ++arg_idx; switch (opt) { case 'g': /* seen a -g option already? */ if (*ppk) { dcfree (*ppk); usage (argv[0]); } else *ppk = g_option (opt_arg); break; case 'o': /* seen a -o option already? */ if (*pcfile) { if (*ppk) dcfree (*ppk); usage (argv[0]); } else *pcfile = o_option (opt_arg); break; case 'e': /* seen a -e option already? */ if (*pdur != -1) { if (*ppk) dcfree (*ppk); usage (argv[0]); } else /* a -1 return value means "out of range"; display usage notice */ if ((*pdur = e_option (opt_arg)) == -1) usage (argv[0]); break; default: usage (argv[0]); } } /* now we should have exactly two more args */ if (arg_idx != argc - 2) usage (argv[0]); }
int optionMode() { o_option(); return 1; }