コード例 #1
0
ファイル: cli.c プロジェクト: aguynamedryan/fsqlf
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]);
    }
}
コード例 #2
0
ファイル: cli.c プロジェクト: dnsmkl/fsqlf
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]);
    }
}