utilise carg-parse for better arg parsing

This commit is contained in:
AUnicornWithNoLife 2023-05-11 18:19:56 +01:00
parent 6dfce8b413
commit d75c172461
4 changed files with 48 additions and 35 deletions

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "font8x8"] [submodule "font8x8"]
path = font8x8 path = font8x8
url = https://github.com/dhepper/font8x8.git url = https://github.com/dhepper/font8x8.git
[submodule "carg-parse"]
path = carg-parse
url = http://github.com/AUnicornWithNoLife/carg-parse.git

1
carg-parse Submodule

@ -0,0 +1 @@
Subproject commit 01a42d665640712f96cdaa75b9bd672b8d2510e3

45
main.c
View File

@ -4,6 +4,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include "font8x8/font8x8.h" #include "font8x8/font8x8.h"
#include "carg-parse/carg-parse.h"
#define SIZE 8 #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 carg_parse_data* args = carg_parse(argc, argv);
{
printf("not enough arguments provided");
return -1;
}
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; verbose = true;
printf("VERBOSE enabled \n"); printf("VERBOSE ENABLED");
} }
}
if (argc >= 4) // replace true and false chars if present in arguments if (!strcmp(args->lv_labels[i], "trueC"))
{
trueChar = argv[2][0];
falseChar = argv[3][0];
if (verbose)
{ {
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) if (verbose)
{ {

View File

@ -1,28 +1,28 @@
build: main.c build: main.c
echo "Building executable" @echo "Building executable"
mkdir -p "./Build" @mkdir -p "./Build"
clang main.c -o "./Build/BigLetter" @clang main.c carg-parse/carg-parse.c -o "./Build/BigLetter"
echo "Finished building executable" @echo "Finished building executable"
echo "Executable is located at './Build/BigLetter'" @echo "Executable is located at './Build/BigLetter'"
usage: usage:
echo "BigLetter Usage:" @echo "BigLetter Usage:"
echo "Location: ./Build/BigLetter" @echo "Location: ./Build/BigLetter"
echo "Arguments:" @echo "Arguments:"
echo "Required: Input Text" @echo "Required: Input Text"
echo "Optional: Replacement True and False Characters" @echo "Optional: Replacement True and False Characters"
echo "Optional: Verbose" @echo "Optional: Verbose"
echo "'./Build/BigLetter' 'INPUT TEXT' 'TRUE CHAR' 'FALSE CHAR' 'v FOR VERBOSE" @echo "'./Build/BigLetter' 'INPUT TEXT' 'TRUE CHAR' 'FALSE CHAR' 'v FOR VERBOSE"
example: ./build/BigLetter example: ./build/BigLetter
"./Build/BigLetter" "Hello, World" @"./Build/BigLetter" "Hello, World"
clean: clean:
echo "Cleaning build directory" @echo "Cleaning build directory"
rm -rf "./Build" @rm -rf "./Build"
echo "Finished cleaning build directory" @echo "Finished cleaning build directory"