From d75c172461949a2c4a7c0d04924e9ee592c8d68e Mon Sep 17 00:00:00 2001 From: AUnicornWithNoLife <55228370+AUnicornWithNoLife@users.noreply.github.com> Date: Thu, 11 May 2023 18:19:56 +0100 Subject: [PATCH] utilise carg-parse for better arg parsing --- .gitmodules | 3 +++ carg-parse | 1 + main.c | 45 +++++++++++++++++++++++++++------------------ makefile | 34 +++++++++++++++++----------------- 4 files changed, 48 insertions(+), 35 deletions(-) create mode 160000 carg-parse diff --git a/.gitmodules b/.gitmodules index 33fe955..9064914 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "font8x8"] path = font8x8 url = https://github.com/dhepper/font8x8.git +[submodule "carg-parse"] + path = carg-parse + url = http://github.com/AUnicornWithNoLife/carg-parse.git diff --git a/carg-parse b/carg-parse new file mode 160000 index 0000000..01a42d6 --- /dev/null +++ b/carg-parse @@ -0,0 +1 @@ +Subproject commit 01a42d665640712f96cdaa75b9bd672b8d2510e3 diff --git a/main.c b/main.c index 7e97966..a0c1168 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,7 @@ #include #include #include "font8x8/font8x8.h" +#include "carg-parse/carg-parse.h" #define SIZE 8 @@ -47,36 +48,44 @@ void stringToFont(char* input, int width, char output[SIZE][width]) } } -int main (int argc, char** argv) // argument layout "'./Big Letter' 'INPUT TEXT' 'OPTIONAL TRUE CHARACTER' 'OPTIONAL FALSE CHARACTER' 'OPTIONAL v FOR VERBOSE" +int main (int argc, char** argv) // argument layout "'./Big Letter' 'INPUT TEXT' -trueC 'OPTIONAL TRUE CHARACTER' -falseC 'OPTIONAL FALSE CHARACTER' -v (optional VERBOSE flag) { - if (argc < 2) // requires one argument - { - printf("not enough arguments provided"); - return -1; - } + carg_parse_data* args = carg_parse(argc, argv); - if (argc >= 3) // if last argument is 'v' enable verbose + for (int i = 0; i < args->lv_len; i++) { - if (argv[argc - 1][0] == 'v') + if (!strcmp(args->lv_labels[i], "v")) { verbose = true; - printf("VERBOSE enabled \n"); + printf("VERBOSE ENABLED"); } - } - if (argc >= 4) // replace true and false chars if present in arguments - { - trueChar = argv[2][0]; - falseChar = argv[3][0]; - - if (verbose) + if (!strcmp(args->lv_labels[i], "trueC")) { - printf("trueChar: %c\nfalseChar: %c\n", trueChar, falseChar); + trueChar = args->lv_values[i][0]; + } + + if (!strcmp(args->lv_labels[i], "falseC")) + { + falseChar = args->lv_values[i][0]; } } - char* inputString = argv[1]; + char* inputString; + + if (args->values_len > 0) + { + inputString = args->values[0]; + } + else + { + printf("\n!!!NOT ENOUGH ARGUMNETS!!!\n\n"); + + return -1; + } + + carg_parse_free(args); if (verbose) { diff --git a/makefile b/makefile index de09d60..c67bd25 100644 --- a/makefile +++ b/makefile @@ -1,28 +1,28 @@ build: main.c - echo "Building executable" - - mkdir -p "./Build" + @echo "Building executable" - clang main.c -o "./Build/BigLetter" + @mkdir -p "./Build" - echo "Finished building executable" - echo "Executable is located at './Build/BigLetter'" + @clang main.c carg-parse/carg-parse.c -o "./Build/BigLetter" + + @echo "Finished building executable" + @echo "Executable is located at './Build/BigLetter'" usage: - echo "BigLetter Usage:" - echo "Location: ./Build/BigLetter" - echo "Arguments:" - echo "Required: Input Text" - echo "Optional: Replacement True and False Characters" - echo "Optional: Verbose" - echo "'./Build/BigLetter' 'INPUT TEXT' 'TRUE CHAR' 'FALSE CHAR' 'v FOR VERBOSE" + @echo "BigLetter Usage:" + @echo "Location: ./Build/BigLetter" + @echo "Arguments:" + @echo "Required: Input Text" + @echo "Optional: Replacement True and False Characters" + @echo "Optional: Verbose" + @echo "'./Build/BigLetter' 'INPUT TEXT' 'TRUE CHAR' 'FALSE CHAR' 'v FOR VERBOSE" example: ./build/BigLetter - "./Build/BigLetter" "Hello, World" + @"./Build/BigLetter" "Hello, World" clean: - echo "Cleaning build directory" + @echo "Cleaning build directory" - rm -rf "./Build" + @rm -rf "./Build" - echo "Finished cleaning build directory" \ No newline at end of file + @echo "Finished cleaning build directory" \ No newline at end of file