From e286ed23ae3cabfb75327d8512dc937b2ecf9be1 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 14 Nov 2025 04:22:39 -0500 Subject: Add command-line options. --- src/opts.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/opts.c (limited to 'src/opts.c') diff --git a/src/opts.c b/src/opts.c new file mode 100644 index 0000000..2a5628e --- /dev/null +++ b/src/opts.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include "unalf.h" + +#define OPTIONS "aeklLopqtvd:x:" + +/* uncomment to test exclude/include glob lists */ +// #define DEBUG_GLOBS + +static void add_exclude(const char *glob) { + if(exclude_count == MAX_EXCLUDES) + return; + exclude_globs[exclude_count++] = glob; +} + +#ifdef DEBUG_GLOBS +static void show_globs(void) { + int i; + + printf("Include globs:\n"); + while(*include_globs) + printf(" + %s\n", *include_globs++); + printf("Exclude globs:\n"); + for(i = 0; i < exclude_count; i++) + printf(" - %s\n", exclude_globs[i]); + exit(0); +} +#endif + +void parse_opts(int argc, char * const *argv) { + int opt; + + while((opt = getopt(argc, argv, OPTIONS)) != -1) { + switch(opt) { + case 'a': opts.txtconv++; break; + case 'e': opts.listonly = opts.testonly = 0; break; + case 'k': opts.keepdot++; break; + case 'l': opts.listonly++; opts.testonly = 0; break; + case 'L': opts.lowercase++; break; + case 'o': opts.overwrite++; break; + case 'p': opts.extract_to_stdout++; opts.quiet++; break; + case 'q': opts.quiet++; break; + case 't': opts.testonly++; opts.listonly = 0; break; + case 'v': opts.listonly = 1; opts.testonly = 0; opts.verbose_list++; break; + case 'd': opts.outdir = optarg; break; + case 'x': add_exclude(optarg); break; + default: + fprintf(stderr, "%s: invalid option (try -h or --help)\n", self); + exit(1); + } + } + + if(optind >= argc) { + fprintf(stderr, "%s: missing alf file argument (try -h or --help)\n", self); + exit(1); + } + + in_filename = argv[optind]; + include_globs = &argv[optind + 1]; /* might be null, that's OK */ + +#ifdef DEBUG_GLOBS + show_globs(); +#endif +} -- cgit v1.2.3