Add preliminary support for options

This commit is contained in:
Kamil Trzcinski
2022-04-05 16:52:12 +02:00
parent 4ac1a8dbe5
commit 97055565b5
6 changed files with 153 additions and 19 deletions

43
opts/opts.h Normal file
View File

@ -0,0 +1,43 @@
#pragma once
#include <stdbool.h>
typedef struct options_s {
const char *name;
void *ptr;
union {
unsigned *value;
unsigned *value_uint;
bool *value_bool;
};
const char *format;
const char *help;
unsigned size;
} option_t;
#define lambda(return_type, function_body) \
({ \
return_type __fn__ function_body \
__fn__; \
})
#define OPTION_FORMAT_uint "%d"
#define OPTION_FORMAT_bool "%d"
#define DEFINE_OPTION(_section, _name, _type) \
{ \
.name = #_section "-" #_name, \
.value_##_type = &_section##_options._name, \
.format = OPTION_FORMAT_##_type, \
.size = sizeof(_section##_options._name), \
}
#define DEFINE_OPTION_PTR(_section, _name, _format) \
{ \
.name = #_section "-" #_name, \
.ptr = _section##_options._name, \
.format = _format, \
.size = sizeof(_section##_options._name), \
}
int parse_opts(option_t *options, int argc, char *argv[]);