#include #include #include #include #include #include "args.h" #include "util.h" void args_add(args_t *args, char *name){ if(NULL == args->list) args->list = malloc(sizeof(arg_t)*(args->count+1)); else args->list = realloc(args->list, sizeof(arg_t)*(args->count+1)); args->list[args->count].name = name; args->list[args->count++].value = NULL; } void args_add_value(args_t *args, char *value){ if(NULL != args->list && args->list[args->count-1].value == NULL){ args->list[args->count-1].value = value; return; } if(NULL == args->list) args->list = malloc(sizeof(arg_t)*(args->count+1)); else args->list = realloc(args->list, sizeof(arg_t)*(args->count+1)); args->list[args->count].name = NULL; args->list[args->count++].value = value; } args_t *args_parse(int argc, char *argv[]){ args_t *args = malloc(sizeof(args_t)); bzero(args, sizeof(args_t)); if(argc <= 1) return args; for(int i = 1; i < argc; i++){ if(startswith(argv[i], "--")) args_add(args, argv[i]+2); else args_add_value(args, argv[i]); } return args; } void args_free(args_t *args){ free(args->list); free(args); } char *args_get_string(args_t *args, char *name){ for(int i = 0; i < args->count; i++){ if(NULL == args->list[i].name) continue; if(eq(args->list[i].name, name)) return args->list[i].value; } return NULL; } bool args_get_bool(args_t *args, char *name){ for(int i = 0; i < args->count; i++){ if(NULL == args->list[i].name) continue; if(eq(args->list[i].name, name)) return true; } return false; } int args_get_int(args_t *args, char *name){ for(int i = 0; i < args->count; i++){ if(NULL == args->list[i].name) continue; if(eq(args->list[i].name, name)) return atoi(args->list[i].value); } return -1; }