From 450769e0315c0bacf8cd4b9b1b81edeca6623a25 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Mon, 30 Apr 2012 20:11:53 -0300 Subject: [PATCH] b2/: add options to set file type on the command line --- b2/Makefile | 2 +- b2/boom.c | 32 ++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/b2/Makefile b/b2/Makefile index 108a757..0754d97 100644 --- a/b2/Makefile +++ b/b2/Makefile @@ -83,4 +83,4 @@ spotless: clean # ----- Experiments ----------------------------------------------------------- try: - $(VALGRIND) ./boom HIERARCHY CHAR + $(VALGRIND) ./boom HIERARCHY -c CHAR diff --git a/b2/boom.c b/b2/boom.c index c85f8cd..ad8c3bf 100644 --- a/b2/boom.c +++ b/b2/boom.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "lang.h" @@ -36,26 +37,33 @@ static void open_stdin(const char *name) static void usage(const char *name) { - fprintf(stderr, "usage: %s [file ...]\n", name); + fprintf(stderr, +"usage: %s file [[-type] file ...] ...\n\n" +" file types:\n" +" -c characteristics\n" +" -i inventory\n" + , name); exit(1); } int main(int argc, char **argv) { + void (*parse)(void) = parse_hierarchy; int i; - switch (argc) { - case 1: - break; - default: - open_stdin(argv[1]); - break; - } - parse_hierarchy(); - for (i = 2; i < argc; i++) { - open_stdin(argv[i]); - parse_characteristics(); + for (i = 1; i != argc; i++) { + if (*argv[i] == '-') { + if (!strcmp(argv[i], "-c")) + parse = parse_characteristics; + else if (!strcmp(argv[i], "-i")) + parse = parse_inventory; + else + usage(*argv); + } else { + open_stdin(argv[i]); + parse(); + } } return 0; }