From bd22d0e47d0fb203286b088f048cf1aff1fa93a1 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Mon, 22 Jul 2024 23:14:43 +0200 Subject: Nieuw optieontleedsysteem, en migreer weerklank --- src/weerklank.c | 63 ++++++++++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 43 deletions(-) (limited to 'src/weerklank.c') diff --git a/src/weerklank.c b/src/weerklank.c index ad03389..18b8b59 100644 --- a/src/weerklank.c +++ b/src/weerklank.c @@ -1,22 +1,17 @@ #include -#include #include -#include #include -#include -#include "util/versie.h" - -static void usage(FILE *f) { - fprintf(f, - "Gebruik: weerklank [-nehV] [touwtje]...\n" - "\n" - "Exporteer de touwtjes.\n" - "\n" - " -n Voeg geen nieuwe regel toe\n" - " -e Ontleed terugslagontsnappingen\n" - " -h Toon deze hulptekst\n" - " -V Toon versienummer\n"); -} +#include "util/option.h" + +static const char *usage_string = + "Gebruik: %s [-nehV] [touwtje]...\n" + "\n" + "Exporteer de touwtjes.\n" + "\n" + " -n Voeg geen nieuwe regel toe\n" + " -e Ontleed terugslagontsnappingen\n" + " -h Toon deze hulptekst\n" + " -V Toon versienummer\n"; struct options { bool nonewline; @@ -25,33 +20,15 @@ struct options { // Returns pointer to argument array containing the file names static char** parse_options(int argc, char **argv, struct options *opts) { - int opt; - while ((opt = getopt(argc, argv, "nehV")) != -1) { - switch (opt) { - case 'n': - opts->nonewline = true; - break; - - case 'e': - opts->unescape = true; - break; - - case 'h': - usage(stdout); - exit(0); - - case 'V': - drukkedoos_print_versie(stdout, "weerklank"); - exit(0); - - case '?': - fprintf(stderr, "weerklank: Ongeldige optie: -%c\n", optopt); - usage(stderr); - exit(1); - } - } - - return argv + optind; + const struct option_spec spec[] = { + {'n', OPTION_SETBOOL(&opts->nonewline)}, + {'e', OPTION_SETBOOL(&opts->unescape)}, + {'h', OPTION_HELPUSAGE(usage_string)}, + {'V', OPTION_VERSION()}, + OPTION_SPEC_END + }; + + return option_parse(argc, argv, spec); } static const char lowercase_escapes[] = "\a\b\0\0\e\f\0\0\0\0\0\0\0\n\0\0\0\r\0\t\0\v\0\0\0\0"; -- cgit v1.2.3-70-g09d2