gargoyle/src/scribe.c

49 lines
1.3 KiB
C

#include <gargoyle/codex.h>
#include <gargoyle/scribe.h>
#include <gargoyle/twine.h>
#include <stdlib.h>
uint8_t gargoyle_from_bool(struct gargoyle_optn *opt, const char *brand, const char *neg, uint16_t neg_sz, gargoyle_flag_type flags) {
if(opt->val) {
uint8_t *val = opt->val;
*val = !gargoyle_cmp(brand, neg, neg_sz, flags);
}
return GARGOYLE_ERR_SUCCESS;
}
uint8_t gargoyle_from_rope(struct gargoyle_optn *opt, const char *brand_val, gargoyle_flag_type flags) {
if(opt->type & GARGOYLE_TYPE_UINT) {
char *end = NULL;
uint64_t *val = opt->val;
*val = strtoull(brand_val, &end, 10);
if(*end) {
return GARGOYLE_ERR_INVALID_UINT;
}
} else if(opt->type & GARGOYLE_TYPE_SINT) {
char *end = NULL;
int64_t *val = opt->val;
*val = strtoll(brand_val, &end, 10);
if(*end) {
return GARGOYLE_ERR_INVALID_SINT;
}
} else if(opt->type & GARGOYLE_TYPE_DBLE) {
char *end = NULL;
double *val = opt->val;
*val = strtod(brand_val, &end);
if(*end) {
return GARGOYLE_ERR_INVALID_DBLE;
}
} else if(opt->type & GARGOYLE_TYPE_ROPE) {
char *val = opt->val;
gargoyle_cpy(val, brand_val, opt->val_sz, flags | GARGOYLE_FLG_FILL0);
} else {
return GARGOYLE_ERR_UNKNOWN_TYPE;
}
return GARGOYLE_ERR_SUCCESS;
}