feat(args): args_handler

This commit is contained in:
william.valenduc 2026-01-12 18:42:02 +00:00
parent d1f4e0e88d
commit 234713b6a0
2 changed files with 105 additions and 0 deletions

64
src/utils/args/args.c Normal file
View file

@ -0,0 +1,64 @@
#include "./args.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
int args_handler(int argc, char **argv, struct args_options *options)
{
options->type = INPUT_UNDEFINED;
options->input_source = NULL;
options->pretty_print = false;
options->verbose = false;
for (int i = 1; i < argc; i++)
{
if (strcmp(argv[i], "--pretty-print") == 0)
{
options->pretty_print = true;
}
else if (strcmp(argv[i], "--verbose") == 0)
{
options->verbose = true;
}
else if (strcmp(argv[i], "-c") == 0 && i + 1 < argc)
{
if (options->type != INPUT_UNDEFINED)
return 1; // Error: multiple input types specified
options->type = INPUT_CMD;
options->input_source = argv[i + 1];
i++;
}
else if (argv[i][0] == '-')
{
return 1; // Error: unknown option
}
else
{
if (options->type != INPUT_UNDEFINED)
return 1; // Error: multiple input types specified
options->type = INPUT_FILE;
options->input_source = argv[i];
}
}
if (options->type == INPUT_UNDEFINED)
options->type = INPUT_STDIN;
return 0;
}
void args_print(struct args_options *options)
{
printf("Input type: %s\n",
options->type == INPUT_CMD ? "COMMAND"
: options->type == INPUT_FILE ? "FILE"
: options->type == INPUT_STDIN ? "STDIN"
: "UNDEFINED");
printf("Input source: %s\n",
options->input_source ? options->input_source : "NULL");
printf("Pretty print: %s\n", options->pretty_print ? "true" : "false");
printf("Verbose: %s\n", options->verbose ? "true" : "false");
}