X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fcommon%2Fparse_file.c;h=50fc30d04f8e467b61341dd2532519c920edc319;hb=96e8b3ea0ba8d50683c149422fd9c2588123f62c;hp=9e55d16fa8eb53aa326d70220d34cbc683ec0df9;hpb=c53b42dfc7e4de104f9189428dd5b9a0d431c00a;p=plomrogue diff --git a/src/common/parse_file.c b/src/common/parse_file.c index 9e55d16..50fc30d 100644 --- a/src/common/parse_file.c +++ b/src/common/parse_file.c @@ -64,7 +64,7 @@ extern void parse_file(char * path, void (* token_to_entry) (char *, char *)) err_line_count = 0; err_line(0 == linemax, "File is empty."); char * token0 = NULL; /* For final token_to_entry() if while() stagnates. */ - char * token1; + char * token1 = NULL; char * err_val = "No value given."; while (try_fgets(err_line_line, linemax + 1, file, f_name)) { @@ -145,7 +145,7 @@ extern char * token_from_line(char * line) -extern void test_for_int(char * string, char type) +extern void parsetest_int(char * string, char type) { char * err; if ('8' == type) @@ -175,15 +175,59 @@ extern void test_for_int(char * string, char type) -extern uint8_t set_val(char * token0, char * token1, char * comparand, - uint8_t * flags, uint8_t set_flag, char type, - char * element) +extern void parsetest_defcontext(uint8_t flags) +{ + err_line(!(flags & EDIT_STARTED),"Outside appropriate definition context."); +} + + + +extern void parsetest_singlechar(char * string) +{ + err_line(1 != strlen(string), "Value must be single ASCII character."); +} + + + +extern void parsetest_too_many_values() +{ + err_line(NULL != token_from_line(NULL), "Too many values."); +} + + + +extern void parse_id_uniq(int test) +{ + err_line(0 != test, "Declaration of ID already used."); +} + + + +extern void parse_unknown_arg() +{ + err_line(1, "Unknown argument."); +} + + + +extern char * parse_init_entry(uint8_t * flags, size_t size) +{ + char * f_name = "parse_init_entry()"; + *flags = EDIT_STARTED; + char * p = try_malloc(size, f_name); + memset(p, 0, size); + return p; +} + + + +extern uint8_t parse_val(char * token0, char * token1, char * comparand, + uint8_t * flags, uint8_t set_flag, char type, + char * element) { if (!strcmp(token0, comparand)) { - char * err_out = "Outside appropriate definition's context."; - char * err_singlechar = "Value must be single ASCII character."; - err_line(!(*flags & EDIT_STARTED), err_out); + parsetest_defcontext(*flags); *flags = *flags | set_flag; if ('s' == type) { @@ -191,20 +235,29 @@ extern uint8_t set_val(char * token0, char * token1, char * comparand, } else if ('c' == type) { - err_line(1 != strlen(token1), err_singlechar); + parsetest_singlechar(token1); *element = (token1)[0]; } else if ('8' == type) { - test_for_int(token1, '8'); + parsetest_int(token1, '8'); * (uint8_t *) element = atoi(token1); } else if ('i' == type) { - test_for_int(token1, 'i'); + parsetest_int(token1, 'i'); * (int16_t *) element = atoi(token1); } return 1; } return 0; } + + + +extern void parse_and_reduce_to_readyflag(uint8_t * flags, uint8_t ready_flag) +{ + char * err_fin = "Last definition block not finished yet."; + err_line((*flags & ready_flag) ^ ready_flag, err_fin); + *flags = ready_flag; +}