From 6c5041543c4572c7a125af00aef2d0b710c68509 Mon Sep 17 00:00:00 2001 From: Andrea Date: Thu, 28 Aug 2025 14:44:25 +0200 Subject: [PATCH] chore: add basic utilities --- common/utils.c | 2 -- include/arguments.h | 83 +++++++++++++++++++++++++++++++++++++++++++++ include/utils.h | 6 ++++ src/main.c | 7 +++- src/utils.c | 20 +++++++++++ 5 files changed, 115 insertions(+), 3 deletions(-) delete mode 100644 common/utils.c create mode 100644 include/arguments.h create mode 100644 src/utils.c diff --git a/common/utils.c b/common/utils.c deleted file mode 100644 index 50ed0cf..0000000 --- a/common/utils.c +++ /dev/null @@ -1,2 +0,0 @@ - -#include "utils.h" diff --git a/include/arguments.h b/include/arguments.h new file mode 100644 index 0000000..2f2b0aa --- /dev/null +++ b/include/arguments.h @@ -0,0 +1,83 @@ + +#ifndef ARGUMENTS_H +#define ARGUMENTS_H + +#include +#include + +struct arguments {}; + +#define USAGE 0x123 + +static struct argp_option options[] = { + { + .name = "help", + .key = 'h', + .arg = 0, + .flags = 0, + .doc = "Show this help list", + .group = -1, + }, + { + .name = "usage", + .key = USAGE, + .arg = 0, + .flags = 0, + .doc = "Give a short usage message", + .group = 0, + }, + { + .name = "version", + .key = 'v', + .arg = 0, + .flags = 0, + .doc = "Print program version", + .group = -1, + }, + {0}, +}; + +static error_t parser(int key, [[gnu::unused]] char *arg, + struct argp_state *state) { + + [[gnu::unused]] + struct arguments *arguments = (struct arguments *)state->input; + switch (key) { + case USAGE: { + argp_state_help(state, state->out_stream, + ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); + break; + } +#undef USAGE + case 'h': { + argp_state_help(state, state->out_stream, ARGP_HELP_STD_HELP); + break; + } + case 'v': { + fprintf(state->out_stream, "%s\n", argp_program_version); + exit(0); + break; + } + case ARGP_KEY_ARG: { + return ARGP_ERR_UNKNOWN; + } + case ARGP_KEY_NO_ARGS: { + return 0; + } + case ARGP_KEY_END: { + return 0; + } + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + .options = options, + .parser = parser, + .args_doc = "", + .doc = "", +}; + +#endif diff --git a/include/utils.h b/include/utils.h index 451e37f..ac56a2d 100644 --- a/include/utils.h +++ b/include/utils.h @@ -2,4 +2,10 @@ #ifndef UTILS_H #define UTILS_H +void print_usage(const char *prog_name); + +void log_info(const char *fmt, ...); + +void log_error(const char *fmt, ...); + #endif diff --git a/src/main.c b/src/main.c index ab4d7a9..53cc3a1 100644 --- a/src/main.c +++ b/src/main.c @@ -1,2 +1,7 @@ +#include "arguments.h" -int main(int argc, char **argv) { return 0; } +int main(int argc, char **argv) { + struct arguments arguments = {}; + argp_parse(&argp, argc, argv, ARGP_NO_HELP, 0, &arguments); + return 0; +} diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..7c8a59e --- /dev/null +++ b/src/utils.c @@ -0,0 +1,20 @@ + +#include "utils.h" +#include +#include + +void log_info(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + fprintf(stdout, "[INFO] "); + vfprintf(stdout, fmt, args); + va_end(args); +} + +void log_error(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + fprintf(stderr, "[ERROR] "); + vfprintf(stderr, fmt, args); + va_end(args); +}