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]);
}
Example #2
0
int optionMode()
{	
	o_option();
	return 1;
}