2022-06-19 01:13:10 +00:00
|
|
|
#include <gargoyle.h>
|
2022-06-19 05:13:49 +00:00
|
|
|
#include <stddef.h>
|
2022-06-19 01:13:10 +00:00
|
|
|
|
2022-06-19 05:13:49 +00:00
|
|
|
uint8_t gargoyle_digest(uint16_t optc, struct gargoyle_opt *optv, int *argc, char ***argv) {
|
2022-06-19 05:56:39 +00:00
|
|
|
while(1) {
|
2022-06-19 01:13:10 +00:00
|
|
|
const char *arg = **argv;
|
|
|
|
|
|
|
|
if(!arg || *arg != '-' || !*(arg + 1)) {
|
2022-06-19 05:56:39 +00:00
|
|
|
return GARGOYLE_ERR_SUCCESS;
|
2022-06-19 01:13:10 +00:00
|
|
|
} else if(*arg == '-' && *(arg + 1) == '-' && !*(arg + 2)) {
|
|
|
|
*argc -= 1;
|
|
|
|
*argv += 1;
|
2022-06-19 05:56:39 +00:00
|
|
|
return GARGOYLE_ERR_SUCCESS;
|
2022-06-19 05:13:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
struct gargoyle_opt *opt = NULL;
|
|
|
|
|
|
|
|
if(*(arg + 1) == '-') {
|
|
|
|
opt = gargoyle_find_brand(optc, optv, arg + 2);
|
2022-06-19 05:56:39 +00:00
|
|
|
|
|
|
|
if(!opt) {
|
|
|
|
return GARGOYLE_ERR_UNKNOWN_OPT;
|
|
|
|
}
|
2022-06-19 05:13:49 +00:00
|
|
|
} else {
|
2022-06-19 05:56:39 +00:00
|
|
|
const char *idx = arg + 1;
|
|
|
|
|
|
|
|
for(; *idx; idx += 1) {
|
|
|
|
opt = gargoyle_find_emblem(optc, optv, *idx);
|
2022-06-19 05:13:49 +00:00
|
|
|
|
2022-06-19 05:56:39 +00:00
|
|
|
if(!opt) {
|
|
|
|
return GARGOYLE_ERR_UNKNOWN_OPT;
|
|
|
|
}
|
|
|
|
}
|
2022-06-19 01:13:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
*argc -= 1;
|
|
|
|
*argv += 1;
|
|
|
|
}
|
|
|
|
|
2022-06-19 05:56:39 +00:00
|
|
|
return GARGOYLE_ERR_SUCCESS;
|
2022-06-19 01:13:10 +00:00
|
|
|
}
|