92 lines
1.9 KiB
C
92 lines
1.9 KiB
C
|
#include <libmp/all.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <strings.h>
|
||
|
|
||
|
#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;
|
||
|
}
|