/* * Copyright (c) 2020-2022, yzrh * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include "extern.h" #include "version.h" int main(int argc, char **argv) { cnki_t *param = NULL; if (cnki_create(¶m) != 0) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } int c; for (;;) { static struct option long_options[] = { {"output", required_argument, 0, 'o'}, {"buffer", required_argument, 0, 'b'}, {"verbose", no_argument, 0, 'v'}, {0, 0, 0, 0} }; int option_index = 0; c = getopt_long(argc, argv, "o:b:v", long_options, &option_index); if (c == -1) break; switch (c) { case 'o': if ((param->fp_o = fopen(optarg, "w")) == NULL) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } break; case 'b': param->size_buf = atoi(optarg); break; case 'v': param->stat += 1; break; case '?': break; default: abort(); } } if (argc - optind == 1) { if (param->fp_o == NULL) { if (param->stat == 0) { param->fp_o = stdout; } else { fprintf(stderr, "%s: --verbose ", argv[0]); fprintf(stderr, "must not be set "); fprintf(stderr, "when using stdout\n"); return EXIT_FAILURE; } } if ((param->fp_i = fopen(argv[optind], "r")) == NULL) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } if (param->stat > 0) printf("Melon " VERSION "." RELEASE "." PATCH EXTRA "\n" "Copyright (c) 2020-2022, yzrh \n\n"); cnki_info(¶m); if (strncmp(param->file_stat->type, "%PDF", 4) == 0) { if (cnki_pdf(¶m) != 0) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } } else if (strncmp(param->file_stat->type, "CAJ", 3) == 0) { if (cnki_caj(¶m) != 0) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } } else if (strncmp(param->file_stat->type, "HN", 2) == 0 || (unsigned char) param->file_stat->type[0] == 0xc8) { if (cnki_hn(¶m) != 0) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } } else if (strncmp(param->file_stat->type, "KDH ", 4) == 0) { if (cnki_kdh(¶m) != 0) { fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); return EXIT_FAILURE; } } else { fprintf(stderr, "%s: %s\n", argv[0], "Invalid file"); return EXIT_FAILURE; } fclose(param->fp_i); fclose(param->fp_o); } else { fprintf(stderr, "Usage: %s ", argv[0]); fprintf(stderr, "[--output --buffer --verbose] file\n"); return EXIT_FAILURE; } cnki_destroy(¶m); }