change help for cli

This commit is contained in:
2025-12-14 19:32:57 +01:00
parent 4906ae7001
commit 4c279e29b9
2 changed files with 49 additions and 7 deletions
+5 -3
View File
@@ -219,11 +219,13 @@ void arr_qsort(void *this, dyn_array_cmp_fn cmp_fn);
typedef struct args { typedef struct args {
int count; int count;
const char **values; const char **values;
bool help;
int indentation;
} args_t; } args_t;
args_t cli_make_args(int argc, const char **argv); // no crash args_t cli_make_args(int argc, const char **argv);
bool cli_command(args_t *args, const char *command_name); // no crash bool cli_command(args_t *args, const char *command_name);
bool cli_bool(args_t args, const char *flag_name); // no crash 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); 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); 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); bool cli_opt_int_func(args_t args, const char *flag_name, int *output, const char *file, int line);
+44 -4
View File
@@ -3,14 +3,24 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
bool cli_command(args_t *args, const char *command_name) { static void cli_print_indentation(args_t args) {
if (args->count == 0) { for ( size_t i = 0; i < args.indentation; i++ ) {
return false; 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) { if (strcmp(args->values[0], command_name) == 0) {
args->values++; args->values++;
args->count--; args->count--;
args->indentation++;
return true; return true;
} }
return false; 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) { 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; bool is_flag_name_found = false;
int flag_name_index; int flag_name_index;
for ( int i = 0; i < args.count; i++ ) { 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) { 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; const char *value;
if (cli_opt_str_func(args, flag_name, &value, file, line)) { if (cli_opt_str_func(args, flag_name, &value, file, line)) {
return value; 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) { 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 = ""; const char *text = "";
if (cli_opt_str_func(args, flag_name, &text, file, line)) { if (cli_opt_str_func(args, flag_name, &text, file, line)) {
if ( 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) { 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; int value;
if (cli_opt_int_func(args, flag_name, &value, file, line)) { if (cli_opt_int_func(args, flag_name, &value, file, line)) {
return value; 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) { args_t cli_make_args(int argc, const char **argv) {
return (args_t) { args_t args = (args_t) {
.count = argc-1, .count = argc-1,
.values = argv+1, .values = argv+1,
.help = false,
.indentation = 0,
}; };
args.help = cli_bool(args, "--help") || cli_bool(args, "-h");
return args;
} }