From: Mart Lubbers Date: Wed, 23 Mar 2016 11:02:14 +0000 (+0100) Subject: argparsing working X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=1f2f3bf57f4c245c9c0a065bff85427e9afcca8b;p=mc1516pa.git argparsing working --- diff --git a/modelchecker/Makefile b/modelchecker/Makefile index 5c295e6..4f09f85 100644 --- a/modelchecker/Makefile +++ b/modelchecker/Makefile @@ -1,8 +1,8 @@ -PROGRAM=main -OBJS=sokoban.o +PROGRAM:=main +OBJS:=sokoban.o -CFLAGS=-O3 -Wextra -Wall -Werror -fno-strict-aliasing -std=gnu11 \ - -I./sylvan/src +CFLAGS=-O3 -Wextra -Wall -Werror -fno-strict-aliasing -std=gnu11 +CFLAGS+=-I./sylvan/src all: $(OBJS) $(PROGRAM) diff --git a/modelchecker/main.c b/modelchecker/main.c index 00f8b32..76f5e95 100644 --- a/modelchecker/main.c +++ b/modelchecker/main.c @@ -1,36 +1,105 @@ #include +#include +#include #include +#include "mc.h" //#include //#include //#include -//#include - -int main(void){ - // Mart: - // Argument parsing - // ./main [opts] [FILEPATH [FILEPATH ...]] - // -o Objectbased - // -c Coordinatebased - // -y hYbrid - // -h Help - // - // FUTURE: - // -r Also compute the set of all reachable solution states - // -l LURD Check if LURD is a valid path - // - // FILEPATH Optional input file(s) - + +bool DEBUG = false; + +void usage(char *prg){ + fprintf(stderr, + "Usage:\n" + "\t%s [opts] [FILE [FILE [...]]]\n" + "\n" + "Options:\n" + "\tAll strategies are mutually exclusive\n" + "\t-c coordinate based strategy\n" + "\t-o object based strategy\n" + "\t-y hybrid strategy\n" +// "\t-l LURD lURD verification strategy\n" +// "\t-r show all positions that are a valid solution\n" + "\n" + "\t-d enable verbose debug output\n" + "\t-h show this help\n" + "\n" + "Positional arguments:\n" + "\tFILE zero or more sokoban screens\n" + "\t when no file is specified stdin will be used\n", prg); +} + +void solve(FILE *inputstream){ + int buffer; + while((buffer = fgetc(inputstream)) != EOF){ + printf("%c", buffer); + } // Alex: // Screen reading // - Removing outside walls // - Bucket fill // - [tile] // - tile = structure {int, int, enumtile} - + // Both: Encoding in both schemes // Future: SMC +} + +int main(int argc, char **argv){ + strategy strat = HYBRID; + int optchar; + + while((optchar = getopt(argc, argv, "cdhoy")) != -1){ + switch(optchar){ + case 'c': + strat = COORD; + if(DEBUG) fprintf(stderr, "Strategy changed to Coordinate based\n"); + break; + case 'd': + DEBUG = true; + if(DEBUG) fprintf(stderr, "Debug enabled\n"); + break; + case 'h': + usage(argv[0]); + return 0; + case 'o': + strat = OBJECT; + if(DEBUG) fprintf(stderr, "Strategy changed to Object based\n"); + break; + case 'y': + strat = HYBRID; + if(DEBUG) fprintf(stderr, "Strategy changed to Hybrid\n"); + break; + case '?': + if(isprint(optopt)){ + fprintf(stderr, "Unknown option `-%c'.\n", optopt); + } else { + fprintf(stderr, "Unknown option char `-\\x%x'.\n", optopt); + } + return 2; + default: + break; + } + } + + if(optind == argc){ + fprintf(stderr, "You have not specified a file, reading from stdin\n"); + solve(stdin); + } + + for(int filepathindex = optind; filepathindex < argc; filepathindex++){ + char *currentfilepath = argv[filepathindex]; + fprintf(stderr, "Processing: %s\n", currentfilepath); + if(DEBUG) fprintf(stderr, "Strategy: %d\n", strat); + FILE *currentfile = fopen(currentfilepath, "r"); + if(DEBUG) fprintf(stderr, "Opening file\n"); + solve(currentfile); + if(DEBUG) fprintf(stderr, "Closing file\n"); + fclose(currentfile); + } return 0; } diff --git a/modelchecker/mc.h b/modelchecker/mc.h new file mode 100644 index 0000000..fd90291 --- /dev/null +++ b/modelchecker/mc.h @@ -0,0 +1,6 @@ +#ifndef MC_H +#define MC_H + +typedef enum {OBJECT, COORD, HYBRID} strategy; + +#endif