void read_cli_options(int argc, char **argv, struct kw_conf * (*kw)(const char *), FILE ** fin, FILE ** fout) { int i; if (argc == 1) return; // use stdin and stdout if (argc == 2 && strcmp(argv[1], "--create-config-file") == 0) { if (create_conf_file(FSQLF_CONFFILE_NAME) != 0) { exit(1); } else { fprintf(stderr, "File '%s' (re)created.\n", FSQLF_CONFFILE_NAME); exit(0); } } for (i = 1; i < argc; i++) { if (argv[i][0] != '-') { if ((*fin) == stdin) { //try to openinig INPUT file (*fin) = fopen(argv[1], "r"); if (!(*fin)) { FAIL_WITH_ERROR(1, "Error opening input file: %s", argv[i]); } } else if ((*fout) == stdout) { //try to openinig OUTPUT file (only if INPUT file is set) (*fout) = fopen(argv[2], "w+"); if (!(*fout)) FAIL_WITH_ERROR(1, "Error opening output file: %s", argv[i]); } } else if (ARGV_MATCH(i, "-i")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); (*fin) = fopen(argv[i], "r"); if (!(*fin)) FAIL_WITH_ERROR(1, "Error opening input file: %s", argv[i]); } else if (ARGV_MATCH(i, "-o")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); (*fout) = fopen(argv[i], "w+"); if (!(*fout)) FAIL_WITH_ERROR(1, "Error opening output file: %s", argv[i]); } else if (ARGV_MATCH(i, "--config-file")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (read_conf_file(argv[i], kw) == READ_FAILED) { FAIL_WITH_ERROR(1, "Error reading configuration file: %s", argv[i]); } } else if (ARGV_MATCH(i, "--select-comma-newline")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "after") == 0) { kw("kw_comma")->before.new_line = 0; kw("kw_comma")->after.new_line = 1; } else if (strcmp(argv[i], "before") == 0) { kw("kw_comma")->before.new_line = 1; kw("kw_comma")->after.new_line = 0; } else if (strcmp(argv[i], "none") == 0) { kw("kw_comma")->before.new_line = 0; kw("kw_comma")->after.new_line = 0; } } else if (ARGV_MATCH(i, "--keyword-case")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "none") == 0) { set_case(CASE_none); } else if (strcmp(argv[i], "upper") == 0) { set_case(CASE_UPPER); } else if (strcmp(argv[i], "lower") == 0) { set_case(CASE_lower); } else if (strcmp(argv[i], "initcap") == 0) { set_case(CASE_Initcap); } } else if (ARGV_MATCH(i, "--keyword-text")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "original") == 0) { set_text_original(1); } else if (strcmp(argv[i], "default") == 0) { set_text_original(0); } } else if (ARGV_MATCH(i, "--select-newline-after")) { kw("kw_select")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-or-before")) { kw("kw_or")->before.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-or-after")) { kw("kw_or")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-and-before")) { kw("kw_and")->before.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-and-after")) { kw("kw_and")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-major-sections")) { int new_line_count = get_int_arg(++i, argc, argv); kw("kw_from")->before.new_line = new_line_count; kw("kw_where")->before.new_line = new_line_count; kw("kw_inner_join")->before.new_line = new_line_count; kw("kw_left_join")->before.new_line = new_line_count; kw("kw_right_join")->before.new_line = new_line_count; kw("kw_full_join")->before.new_line = new_line_count; kw("kw_cross_join")->before.new_line = new_line_count; } else if (ARGV_MATCH(i, "--debug")) { if (++i >= argc ) FAIL_WITH_ERROR(1, "Missing or invalid value for option : %s", argv[i-1]); if (ARGV_MATCH(i, "none")) debug_level |= DEBUGNONE; else if (ARGV_MATCH(i, "state")) debug_level |= DEBUGSTATES; else if (ARGV_MATCH(i, "match")) debug_level |= DEBUGMATCHES; else if (ARGV_MATCH(i, "parenthesis")) debug_level |= DEBUGPARCOUNTS; else FAIL_WITH_ERROR(1, "Missing or invalid value for option : %s", argv[i-1]); } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { usage_info(argc, argv); exit(0); } else FAIL_WITH_ERROR(1, "Option `%s' is not recognised or used incorrectly.\nTry `%s --help' for more information\n", argv[i], argv[0]); } }
void read_cli_options(struct fsqlf_kw_conf *kwall, int argc, char **argv, FILE **fin, FILE **fout) { int i; if (argc == 1) return; // use stdin and stdout if (argc == 2 && strcmp(argv[1], "--create-config-file") == 0) { FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[1]); } if (argc == 3 && strcmp(argv[1], "--create-config-file") == 0) { if (fsqlf_kwmap_conffile_create(argv[2]) != FSQLF_OK) { fprintf(stderr, "Problem occurred during creation of config file '%s'.\n", argv[2]); exit(1); } else { fprintf(stderr, "Configuration was written to file '%s'.\n", argv[2]); exit(0); } } for (i = 1; i < argc; i++) { if (argv[i][0] != '-') { if ((*fin) == stdin) { //try to openinig INPUT file (*fin) = fopen(argv[1], "r"); if (!(*fin)) { FAIL_WITH_ERROR(1, "Error opening input file: %s", argv[i]); } } else if ((*fout) == stdout) { //try to openinig OUTPUT file (only if INPUT file is set) (*fout) = fopen(argv[2], "w+"); if (!(*fout)) FAIL_WITH_ERROR(1, "Error opening output file: %s", argv[i]); } } else if (ARGV_MATCH(i, "-i")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); (*fin) = fopen(argv[i], "r"); if (!(*fin)) FAIL_WITH_ERROR(1, "Error opening input file: %s", argv[i]); } else if (ARGV_MATCH(i, "-o")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); (*fout) = fopen(argv[i], "w+"); if (!(*fout)) FAIL_WITH_ERROR(1, "Error opening output file: %s", argv[i]); } else if (ARGV_MATCH(i, "--config-file")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (fsqlf_kwmap_conffile_read(kwall, argv[i]) == FSQLF_FAIL) { FAIL_WITH_ERROR(1, "Error reading configuration file: %s", argv[i]); } } else if (ARGV_MATCH(i, "--select-comma-newline")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "after") == 0) { fsqlf_kw_get(kwall, "kw_comma")->before.new_line = 0; fsqlf_kw_get(kwall, "kw_comma")->after.new_line = 1; } else if (strcmp(argv[i], "before") == 0) { fsqlf_kw_get(kwall, "kw_comma")->before.new_line = 1; fsqlf_kw_get(kwall, "kw_comma")->after.new_line = 0; } else if (strcmp(argv[i], "none") == 0) { fsqlf_kw_get(kwall, "kw_comma")->before.new_line = 0; fsqlf_kw_get(kwall, "kw_comma")->after.new_line = 0; } } else if (ARGV_MATCH(i, "--keyword-case")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "none") == 0) { fsqlf_kwmap_set_case(kwall, FSQLF_KWCASE_ORIGINAL); } else if (strcmp(argv[i], "upper") == 0) { fsqlf_kwmap_set_case(kwall, FSQLF_KWCASE_UPPER); } else if (strcmp(argv[i], "lower") == 0) { fsqlf_kwmap_set_case(kwall, FSQLF_KWCASE_LOWER); } else if (strcmp(argv[i], "initcap") == 0) { fsqlf_kwmap_set_case(kwall, FSQLF_KWCASE_INITCAP); } } else if (ARGV_MATCH(i, "--keyword-text")) { if (++i >= argc) FAIL_WITH_ERROR(1, "Missing value for option : %s", argv[i-1]); if (strcmp(argv[i], "original") == 0) { fsqlf_kwmap_set_spelling(kwall, FSQLF_KWSPELLING_USE_ORIGINAL); } else if (strcmp(argv[i], "default") == 0) { fsqlf_kwmap_set_spelling(kwall, FSQLF_KWSPELLING_USE_HARDCODED_DEFAULT); } } else if (ARGV_MATCH(i, "--select-newline-after")) { fsqlf_kw_get(kwall, "kw_select")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-or-before")) { fsqlf_kw_get(kwall, "kw_or")->before.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-or-after")) { fsqlf_kw_get(kwall, "kw_or")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-and-before")) { fsqlf_kw_get(kwall, "kw_and")->before.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-and-after")) { fsqlf_kw_get(kwall, "kw_and")->after.new_line = get_int_arg(++i, argc, argv); } else if (ARGV_MATCH(i, "--newline-major-sections")) { int new_line_count = get_int_arg(++i, argc, argv); fsqlf_kwmap_set_major_clause_nl(kwall, new_line_count); } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { usage_info(argc, argv); exit(0); } else FAIL_WITH_ERROR(1, "Option `%s' is not recognised or used incorrectly.\nTry `%s --help' for more information\n", argv[i], argv[0]); } }