void parse_args(int argc, char *argv[], cmd_data_t *cmd_data) { int a; char *arg; bool argused; for (a=1; a < argc; a++) { arg = argv[a]; argused = false; if (arg[0] == '-') { if (arg[1] == '-') { argused = parse_long_opt(arg + 2, cmd_data); } else if (arg[1] == 'o' && a+1 < argc) { cmd_data->arglist[cmd_data->num_args++] = arg; arg = argv[++a]; argused = parse_output_file_name(arg, cmd_data); } else { int num_used = parse_short_opt(arg + 1, cmd_data); argused = num_used > 0; if (num_used > 1) { a += num_used - 1; } } } else { argused = parse_input_file_name(arg, cmd_data); } if (!argused) { cmd_data->arglist[cmd_data->num_args++] = arg; } } post_parse_fixup(cmd_data); }
void main (int argc, char *argv[]) { int command_line_arg; int unused; /* Machine specific initialization. (JAT) */ machine_setup(); /* Error initialization. */ program_name = "ddl"; /* Set defaults */ yydebug = 0; min_warning_priority = DRC_MIN_WARNING_PRIORITY + 2; /* Parse command line arguments. */ while ((command_line_arg = getopt_long(argc, argv, "dhvw", long_options, &unused)) != -1) { switch (command_line_arg) { case 'd': yydebug = 1; break; case 'h': print_help_information(long_options, options_help); exit(EXIT_SUCCESS); break; case 'v': printf("p2 version %s\n", version_string); exit(EXIT_SUCCESS); break; case 'w': min_warning_priority = 1; /* Enable all warnings. */ break; case '?': calling_error("illegal or unrecognized option"); break; } } if (optind == argc) calling_error("ddl takes exactly one argument"); /* Parse input file name and open input file. */ parse_input_file_name(argv[optind], file_name); yyin = fopen(file_name, "r"); if (yyin == NULL) error("Can't open file %s\n", file_name); /* Parse. */ if (yyparse() != 0) error("parsing failed"); /* Exit. */ exit(EXIT_SUCCESS); }