diff --git a/Makefile b/Makefile index c85b808..0f7cd2e 100644 --- a/Makefile +++ b/Makefile @@ -3,13 +3,13 @@ FLAGS=-g -Wall -Wextra -Wpedantic LFLAGS= -all: bin/main +all: bin/colloscope -test: bin/main - bin/main MP2I-creneaux.txt 33 MP2I-colleurs.txt 16 6 15 output.csv +test: bin/colloscope + bin/colloscope -v MP2I-creneaux.txt 33 MP2I-colleurs.txt 16 6 15 output.csv OBJECTS = obj/structure.o obj/algorithm.o obj/display.o obj/logger.o obj/main.o -bin/main: $(OBJECTS) +bin/colloscope: $(OBJECTS) @mkdir -p bin $(CC) -o $@ $(LFLAGS) $(FLAGS) $(OBJECTS) diff --git a/src/main.c b/src/main.c index e85cc0d..ad7393e 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "logger.h" #include "structure.h" @@ -29,21 +30,75 @@ // gcc -g -Wall -Wextra -Wpedantic main.c -lSDL2 -lSDL2_image -lm -o main // ./main MP2I-creneaux.txt 33 MP2I-colleurs.txt 16 6 15 output.csv +void print_help() +{ + printf("Colloscope - A program that generates a colloscope for French 'classe prépas'. By Alexandre Aboujaib\n"); + printf("Licensed under the terms of the GNU GPL version 3 or later.\n\n"); + printf("Usage: colloscope [-qvh] \n\n"); + printf("Available options :\n"); + printf(" -q Quiet mode\n"); + printf(" -v Verbose mode\n"); + printf(" -h Print this help\n"); +} + int main(int argc, char **argv) { - if (argc!=8) { - fprintf(stderr, "Usage: %s \n", argv[0]); + int offset; + bool quiet=false; + bool verbose=false; + + if (argc==2 && strcmp(argv[1], "-h")==0) + { + print_help(); + exit(0); + } + else if (argc==8) + { + offset=0; + } + else if (argc==9 && argv[1][0]=='-') + { + offset=1; + + for (char *ch=&argv[1][1]; *ch != '\0'; ch++) + { + switch (*ch) + { + case 'q': + quiet=true; break; + case 'v': + verbose=true; break; + default: + fprintf(stderr, "Unknown option '%c'. Available: [-qvh].\n", *ch); + } + } + + if (quiet && verbose) + { + fprintf(stderr, "You can't be both quiet and verbose!\n"); + } + } + else { + fprintf(stderr, "Usage: %s [-qvh] \n", argv[0]); exit(1); } - create_logger("colloscope.log", LOG_TRACE); - char* path_creneaux = argv[1]; - int n_creneaux = str_to_int(argv[2]); - char* path_colleurs = argv[3]; - int n_colleurs = str_to_int(argv[6]); - int n_weeks = str_to_int(argv[5]); - int n_groups = str_to_int(argv[6]); - char* path_output = argv[7]; + char* path_creneaux = argv[1+offset]; + int n_creneaux = str_to_int(argv[2+offset]); + char* path_colleurs = argv[3+offset]; + int n_colleurs = str_to_int(argv[6+offset]); + int n_weeks = str_to_int(argv[5+offset]); + int n_groups = str_to_int(argv[6+offset]); + char* path_output = argv[7+offset]; + + + if (quiet) { + create_logger("colloscope.log", LOG_WARN); + } else if (verbose) { + create_logger("colloscope.log", LOG_DEBUG); + } else { + create_logger("colloscope.log", LOG_INFO); + } trace("%d %d %d %d", n_creneaux, n_colleurs, n_weeks, n_groups);