45 #define GOO_BOOL_TYPE 1 46 #define GOO_STRING_TYPE 2 131 if (eq_index == -1) {
137 for (
int i = 0; i < eq_index; i++) {
138 if (arg[i] ==
'\'' || arg[i] ==
'"') {
143 return &arg[eq_index];
153 for (
int i = 1; i < argc; i++) {
155 char *arg = strdup(argv[i]);
164 char *val = strdup(&eq[1]);
171 size_t last = strlen(val) - 1;
174 char *valclean = strdup(&val[1]);
196 if (!strncmp(tok,
"--", 2)) {
197 char *optname = &tok[2];
203 printf(
"Unknown option --%s\n", optname);
215 if (!strcmp(val,
"true")) {
220 if (!strcmp(val,
"false")) {
243 printf(
"Option %s requires a string argument.\n",optname);
247 if (!strncmp(tok,
"-",1) && strncmp(tok,
"--",2)) {
248 size_t len = strlen(tok);
250 for (pos = 1; pos < len; pos++) {
254 char *sopt_ptr = (
char*) &sopt;
260 if (pos==1 && isdigit(tok[pos])) {
267 printf(
"Unknown option -%c\n", tok[pos]);
289 printf(
"Ran out of arguments for option block %s\n", tok);
298 printf(
"Option -%c requires a string argument.\n", tok[pos]);
322 goo->
help = strdup(s);
331 char *sname_ptr = (
char*) &sname;
333 if (strlen(lname) < 1) {
334 fprintf (stderr,
"getopt_add_bool(): must supply option name\n");
339 fprintf (stderr,
"getopt_add_bool(): invalid option character: '%c'\n", sopt);
344 fprintf (stderr,
"getopt_add_bool(): duplicate option name: --%s\n", lname);
349 fprintf (stderr,
"getopt_add_bool(): duplicate option: -%s ('%s')\n", sname, lname);
354 goo->
sname=strdup(sname);
355 goo->
lname=strdup(lname);
356 goo->
svalue=strdup(def ?
"true" :
"false");
358 goo->
help=strdup(help);
381 char *sname_ptr = (
char*) &sname;
383 if (strlen(lname) < 1) {
384 fprintf (stderr,
"getopt_add_string(): must supply option name\n");
389 fprintf (stderr,
"getopt_add_string(): invalid option character: '%c'\n", sopt);
394 fprintf (stderr,
"getopt_add_string(): duplicate option name: --%s\n", lname);
399 fprintf (stderr,
"getopt_add_string(): duplicate option: -%s ('%s')\n", sname, lname);
404 goo->
sname=strdup(sname);
405 goo->
lname=strdup(lname);
408 goo->
help=strdup(help);
421 assert (goo != NULL);
431 char *endptr = (
char *) v;
432 long val = strtol(v, &endptr, 10);
435 fprintf (stderr,
"--%s argument: strtol failed: %s\n", lname, strerror(errno));
440 fprintf (stderr,
"--%s argument cannot be parsed as an int\n", lname);
451 int val = !strcmp(v,
"true");
461 char *endptr = (
char *) v;
462 double d = strtod (v, &endptr);
465 fprintf (stderr,
"--%s argument: strtod failed: %s\n", lname, strerror(errno));
470 fprintf (stderr,
"--%s argument cannot be parsed as a double\n", lname);
514 longwidth =
max(longwidth, (
int) strlen(goo->
lname));
517 valuewidth =
max(valuewidth, (
int) strlen(goo->
svalue));
526 if (goo->
help==NULL || strlen(goo->
help)==0)
535 if (goo->
sname[0]==0)
int zhash_str_equals(const void *a, const void *b)
double getopt_get_double(getopt_t *getopt, const char *lname)
void getopt_add_int(getopt_t *gopt, char sopt, const char *lname, const char *def, const char *help)
void getopt_add_double(getopt_t *gopt, char sopt, const char *lname, const char *def, const char *help)
static int zarray_size(const zarray_t *za)
int getopt_parse(getopt_t *gopt, int argc, char *argv[], int showErrors)
void getopt_add_string(getopt_t *gopt, char sopt, const char *lname, const char *def, const char *help)
void getopt_option_destroy(getopt_option_t *goo)
int zhash_contains(const zhash_t *zh, const void *key)
bool str_starts_with(const char *haystack, const char *needle)
static void zarray_destroy(zarray_t *za)
char * getopt_get_usage(getopt_t *gopt)
void getopt_add_bool(getopt_t *gopt, char sopt, const char *lname, int def, const char *help)
getopt_t * getopt_create()
static zarray_t * zarray_create(size_t el_sz)
string_buffer_t * string_buffer_create()
const char * getopt_get_string(getopt_t *gopt, const char *lname)
int getopt_was_specified(getopt_t *getopt, const char *lname)
void zhash_destroy(zhash_t *zh)
void string_buffer_appendf(string_buffer_t *sb, const char *fmt,...) __attribute__((format(printf
void getopt_add_spacer(getopt_t *gopt, const char *s)
uint32_t zhash_str_hash(const void *a)
const zarray_t * getopt_get_extra_args(getopt_t *gopt)
int zhash_put(zhash_t *zh, const void *key, const void *value, void *oldkey, void *oldvalue)
static void zarray_get(const zarray_t *za, int idx, void *p)
static void getopt_modify_string(char **str, char *newvalue)
int zhash_get(const zhash_t *zh, const void *key, void *out_value)
int getopt_get_bool(getopt_t *getopt, const char *lname)
int getopt_get_int(getopt_t *getopt, const char *lname)
void getopt_destroy(getopt_t *gopt)
void zarray_vmap(zarray_t *za, void(*f)())
int str_indexof(const char *haystack, const char *needle)
void string_buffer_destroy(string_buffer_t *sb)
char * string_buffer_to_string(string_buffer_t *sb)
static char * get_arg_assignment(char *arg)
void getopt_do_usage(getopt_t *gopt)
static void zarray_add(zarray_t *za, const void *p)
zhash_t * zhash_create(size_t keysz, size_t valuesz, uint32_t(*hash)(const void *a), int(*equals)(const void *a, const void *b))