diff options
author | yzrh <yzrh@tuta.io> | 2020-08-14 22:04:26 +0000 |
---|---|---|
committer | yzrh <yzrh@tuta.io> | 2020-08-14 22:04:26 +0000 |
commit | 12ecdd71592eccf7bdb6214edbc7318246469c1c (patch) | |
tree | fda27e41c37a2345702ad3e90480154d975e426f /src/melon.c | |
download | melon-12ecdd71592eccf7bdb6214edbc7318246469c1c.tar.gz melon-12ecdd71592eccf7bdb6214edbc7318246469c1c.tar.zst |
Initial commit.
Diffstat (limited to 'src/melon.c')
-rw-r--r-- | src/melon.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/melon.c b/src/melon.c new file mode 100644 index 0000000..d1a08d1 --- /dev/null +++ b/src/melon.c @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2020, yzrh <yzrh@tuta.io> + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <getopt.h> + +#include "extern.h" +#include "version.h" + +int +main(int argc, char **argv, char **envp) +{ + printf("Melon " VERSION "." RELEASE "." PATCH EXTRA "\n"); + printf("Copyright (c) 2020, yzrh <yzrh@tuta.io>\n\n"); + + 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; + } + + cnki_info(¶m); + + if (strcmp(param->file_stat->type, "%PDF") == 0) { + if (cnki_pdf(¶m) != 0) { + fprintf(stderr, "%s: %s\n", argv[0], + strerror(errno)); + return EXIT_FAILURE; + } + } else if (strcmp(param->file_stat->type, "CAJ") == 0) { + if (cnki_caj(¶m) != 0) { + fprintf(stderr, "%s: %s\n", argv[0], + strerror(errno)); + return EXIT_FAILURE; + } + } else if (strcmp(param->file_stat->type, "HN") == 0) { + if (cnki_nh(¶m) != 0) { + fprintf(stderr, "%s: %s\n", argv[0], + strerror(errno)); + return EXIT_FAILURE; + } + } else if (strcmp(param->file_stat->type, "KDH ") == 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); +} |