/** * Decides what to do upon command lines options passed to the program * @param argc : number of arguments given on the command line. * @param argv : an array of strings that contains command line arguments. * @returns options_t structure malloc'ed and filled upon choosen command * line's option (in manage_command_line_options function). */ options_t *do_what_is_needed_from_command_line_options(int argc, char **argv) { options_t *opt = NULL; /** Structure to manage options from the command line can be freed when no longer needed */ opt = manage_command_line_options(argc, argv); if (opt != NULL) { if (opt->version == TRUE) { print_program_version(PROGRAM_NAME, CLIENT_DATE, CLIENT_VERSION, CLIENT_AUTHORS, CLIENT_LICENSE); print_libraries_versions(PROGRAM_NAME); print_selected_options(opt); exit(EXIT_SUCCESS); } } return opt; }
/* * Name : parse_cmd_line * Parameters : argc and argv (user supplied arguments). * Returns : 0 on success and -1 on error * Desc : Command Line Parser */ int parse_cmd_line(cmd_line_args *cmd_args, int argc, char *argv[]) { int i, bad_option = FALSE; for (i = 1; i < argc; i++) { /* check for help options */ if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "-?") == 0)) { usage(cmd_args); exit(0); } else if (strncmp(argv[i], "--verbose:simple", 16) == 0 || strncmp(argv[i], "-v:simple", 9) == 0) { cmd_args->_verbose = TRUE; cmd_args->_verbose_lvl = 1; } else if (strncmp(argv[i], "--verbose:detailed", 18) == 0 || strncmp(argv[i], "-v:detailed", 11) == 0) { cmd_args->_verbose = TRUE; cmd_args->_verbose_lvl = 2; } else if (strcmp(argv[i], "--silent") == 0 || strcmp(argv[i], "-s") == 0) { cmd_args->_verbose = FALSE; } else if ((strcmp(argv[i], "--file") == 0) || strcmp(argv[i], "-f") == 0) { /* copy over the input filename */ if (argv[i + 1] != NULL) { if (strcpy(cmd_args->_file_name, argv[i + 1]) == NULL) { RTMB_printf(stderr, "ERROR: Problem setting input" " file\n"); return ERROR; } } else { RTMB_printf(stderr, "Provide a valid input filename with "); RTMB_printf(stderr, "--file or -f option\n"); usage(cmd_args); return ERROR; } i++; } else if (strcmp(argv[i], "--report") == 0 || strcmp(argv[i], "-r") == 0) { /* copy over the report directory name */ if (argv[i + 1] != NULL) { if (strcpy(cmd_args->_dir_name, argv[i + 1]) == NULL) { RTMB_printf(stderr, "ERROR: Problem setting report " "directory\n"); return ERROR; } } else { RTMB_printf(stderr, "Provide a valid directory name with " "--report "); RTMB_printf(stderr, "or -r option\n"); usage(); return ERROR; } i++; } else if (strcmp(argv[i], "--quick") == 0 || strcmp(argv[i], "-q") == 0) { cmd_args->_quick = TRUE; } else if (strcmp(argv[i], "--compliant") == 0 || strcmp( argv[i], "-c") == 0) { cmd_args->_quick = FALSE; } else if (strcmp(argv[i], "--test") == 0 || strcmp(argv[i], "-t") == 0) { /* Check if some explicit tests need to be run */ if (argv[i + 1] != NULL) { if (setup_testcase_names(cmd_args, argv[i + 1]) == ERROR) { return ERROR; } } else { RTMB_printf(stderr, "Provide valid tests to be run with "); RTMB_printf(stderr, "--test or -t option\n"); usage(cmd_args); return ERROR; } i++; } else if (strcmp(argv[i], "--test?") == 0 || strcmp(argv[i], "-t?") == 0) { print_tests_list(); exit(0); } else if (strcmp(argv[i], "--hard-rt") == 0) { cmd_args->_rt_mode = HARD_RT; } else if (strcmp(argv[i], "--soft-rt") == 0) { cmd_args->_rt_mode = SOFT_RT; } else if (strcmp(argv[i], "--guaranteed-rt") == 0) { cmd_args->_rt_mode = GUARANTEED_RT; } else { RTMB_printf(stderr, "ERROR: Unknown option '%s'\n", argv[i]); bad_option = TRUE; } } if (bad_option) { usage(cmd_args); return ERROR; } print_selected_options(cmd_args); return 0; }