From 4c279e29b93facc8f92435612a82ea080f8f1ae3 Mon Sep 17 00:00:00 2001 From: Ivar Fatland Date: Sun, 14 Dec 2025 19:32:57 +0100 Subject: [PATCH] change help for cli --- cig.h | 8 +++++--- cli.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/cig.h b/cig.h index 8194b43..450dbb2 100644 --- a/cig.h +++ b/cig.h @@ -219,11 +219,13 @@ void arr_qsort(void *this, dyn_array_cmp_fn cmp_fn); typedef struct args { int count; const char **values; + bool help; + int indentation; } args_t; -args_t cli_make_args(int argc, const char **argv); // no crash -bool cli_command(args_t *args, const char *command_name); // no crash -bool cli_bool(args_t args, const char *flag_name); // no crash +args_t cli_make_args(int argc, const char **argv); +bool cli_command(args_t *args, const char *command_name); +bool cli_bool(args_t args, const char *flag_name); bool cli_opt_str_func(args_t args, const char *flag_name, const char **output, const char *file, int line); const char *cli_req_str_func(args_t args, const char *flag_name, const char *file, int line); bool cli_opt_int_func(args_t args, const char *flag_name, int *output, const char *file, int line); diff --git a/cli.c b/cli.c index 2d3e680..9a10dcb 100644 --- a/cli.c +++ b/cli.c @@ -3,14 +3,24 @@ #include #include -bool cli_command(args_t *args, const char *command_name) { - if (args->count == 0) { - return false; +static void cli_print_indentation(args_t args) { + for ( size_t i = 0; i < args.indentation; i++ ) { + printf("\t"); } +} + +bool cli_command(args_t *args, const char *command_name) { + if (args->help) { + cli_print_indentation(*args); + printf("[ cmd ] %s\n", command_name); + } + if (args->count == 0) { return false; } if (strcmp(args->values[0], command_name) == 0) { args->values++; args->count--; + args->indentation++; return true; + } return false; } @@ -25,6 +35,13 @@ bool cli_bool(args_t args, const char *flag_name) { } bool cli_opt_str_func(args_t args, const char *flag_name, const char **output, const char *file, int line) { + if (args.help) { + cli_print_indentation(args); + printf("[ opt ] %s\n", flag_name); + *output = ""; + return false; + } + bool is_flag_name_found = false; int flag_name_index; for ( int i = 0; i < args.count; i++ ) { @@ -49,6 +66,12 @@ bool cli_opt_str_func(args_t args, const char *flag_name, const char **output, c } const char *cli_req_str_func(args_t args, const char *flag_name, const char *file, int line) { + if (args.help) { + cli_print_indentation(args); + printf("[ req ] %s\n", flag_name); + return ""; + } + const char *value; if (cli_opt_str_func(args, flag_name, &value, file, line)) { return value; @@ -60,6 +83,13 @@ const char *cli_req_str_func(args_t args, const char *flag_name, const char *fil } bool cli_opt_int_func(args_t args, const char *flag_name, int *output, const char *file, int line) { + if (args.help) { + cli_print_indentation(args); + printf("[ opt ] %s\n", flag_name); + *output = 0; + return false; + } + const char *text = ""; if (cli_opt_str_func(args, flag_name, &text, file, line)) { if ( @@ -91,6 +121,12 @@ bool cli_opt_int_func(args_t args, const char *flag_name, int *output, const cha } int cli_req_int_func(args_t args, const char *flag_name, const char *file, int line) { + if (args.help) { + cli_print_indentation(args); + printf("[ req ] %s\n", flag_name); + return 0; + } + int value; if (cli_opt_int_func(args, flag_name, &value, file, line)) { return value; @@ -102,9 +138,13 @@ int cli_req_int_func(args_t args, const char *flag_name, const char *file, int l } args_t cli_make_args(int argc, const char **argv) { - return (args_t) { + args_t args = (args_t) { .count = argc-1, .values = argv+1, + .help = false, + .indentation = 0, }; + args.help = cli_bool(args, "--help") || cli_bool(args, "-h"); + return args; }