30#define USE_DUPLICATE_ARG_WORKAROUND
32static char NO_DOCS[] =
"NO DOCUMENTATION SPECIFIED";
68#ifdef USE_DUPLICATE_ARG_WORKAROUND
76 const char *s =
static_cast<const char *
>(
ptr);
80 while ((c = tolower(*s++))) {
93static bool keycmp(
const void *a,
const void *
b)
95 const bAKey *ka =
static_cast<const bAKey *
>(a);
135#ifdef USE_DUPLICATE_ARG_WORKAROUND
168 BLI_assert((current_pass != 0) && (current_pass >= -1));
171#ifdef USE_DUPLICATE_ARG_WORKAROUND
179 for (
i = 0;
i < ba->
argc;
i++) {
185 const char *short_arg,
186 const char *long_arg,
193 if (doc ==
nullptr) {
213 a =
lookUp(ba, arg, pass, case_str);
216 printf(
"WARNING: conflicting argument\n");
217 printf(
"\ttrying to add '%s' on pass %i, %scase sensitive\n",
220 case_str == 1 ?
"not " :
"");
221 printf(
"\tconflict with '%s' on pass %i, %scase sensitive\n\n",
243 const char *short_arg,
245 const char *long_arg,
263 const char *short_arg,
264 const char *long_arg,
289#ifdef USE_DUPLICATE_ARG_WORKAROUND
292 for (
int pass = 0; pass <= ba->
pass_max; pass++) {
293 a =
lookUp(ba, arg, pass, -1);
296 if (d->
done ==
true) {
341 for (
i = 1;
i < ba->
argc;
i++) {
346 void *
data =
nullptr;
364 for (j = 0; j <= retval; j++) {
369 else if (retval == -1) {
static bArgument * lookUp(bArgs *ba, const char *arg, int pass, int case_str)
static void internalDocPrint(bArgs *ba, bArgDoc *d)
static void args_print_wrapper(void *, const char *format, va_list args)
bool BLI_args_has_other_doc(const bArgs *ba)
static bool keycmp(const void *a, const void *b)
void BLI_args_add(bArgs *ba, const char *short_arg, const char *long_arg, const char *doc, BA_ArgCallback cb, void *data)
void BLI_args_add_case(bArgs *ba, const char *short_arg, int short_case, const char *long_arg, int long_case, const char *doc, BA_ArgCallback cb, void *data)
void BLI_args_destroy(bArgs *ba)
void BLI_args_printf(bArgs *ba, const char *format,...)
void BLI_args_print_other_doc(bArgs *ba)
bArgs * BLI_args_create(int argc, const char **argv)
void BLI_args_print(const bArgs *ba)
static uint keyhash(const void *ptr)
static void internalAdd(bArgs *ba, const char *arg, int case_str, BA_ArgCallback cb, void *data, bArgDoc *d)
void BLI_args_pass_set(bArgs *ba, int current_pass)
static uint case_strhash(const void *ptr)
void BLI_args_print_fn_set(bArgs *ba, bArgPrintFn print_fn, void *user_data)
static bArgDoc * internalDocs(bArgs *ba, const char *short_arg, const char *long_arg, const char *doc)
void BLI_args_print_arg_doc(bArgs *ba, const char *arg)
void BLI_args_parse(bArgs *ba, int pass, BA_ArgCallback default_cb, void *default_data)
A general argument parsing module.
int(*)(int argc, const char **argv, void *data) BA_ArgCallback
void(*)(void *user_data, const char *format, va_list args) bArgPrintFn
#define ATTR_PRINTF_FORMAT(format_param, dots_param)
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_intcmp(const void *a, const void *b)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int char char int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
Read Guarded memory(de)allocation.
BMesh const char void * data
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
const char * documentation