diff options
-rw-r--r-- | src/gen-consts.h | 786 | ||||
-rw-r--r-- | src/gen.c | 47 | ||||
-rw-r--r-- | src/main.c | 25 |
3 files changed, 814 insertions, 44 deletions
diff --git a/src/gen-consts.h b/src/gen-consts.h new file mode 100644 index 0000000..035e3d2 --- /dev/null +++ b/src/gen-consts.h @@ -0,0 +1,786 @@ +static const char sheader[] = +"#ifndef CONFCONF_HEAD_H\n" +"#define CONFCONF_HEAD_H\n" +"\n" +"#include <stdbool.h>\n" +"#include <stdlib.h>\n" +"#include <stdio.h>\n" +"\n" +"#ifndef CONFCONF_ALLOCWIDTH\n" +"#define CONFCONF_ALLOCWIDTH 32\n" +"#endif\n" +"\n" +"enum confconf_result_type {\n" +" CONFCONF_SUCCESS = 0,\n" +" CONFCONF_ERR_UNEXPECTED_EOF,\n" +" CONFCONF_ERR_UNEXPECTED_TOKEN,\n" +" CONFCONF_ERR_HASH_KEY_TOO_LONG,\n" +" CONFCONF_ERR_RANGE,\n" +" CONFCONF_ERR_MISSING_VARIABLE,\n" +" CONFCONF_ERR_MEMORY,\n" +" CONFCONF_ERR_BAD_ALLOC_WIDTH,\n" +"};\n" +"\n" +"struct confconf_priv_state {\n" +" void *fp;\n" +" int (*gcp)(void *);\n" +" int (*ugcp)(int, void *);\n" +" size_t line;\n" +" size_t col;\n" +" size_t byte;\n" +" union {\n" +" bool b;\n" +" char *s;\n" +" int i;\n" +" long int il;\n" +" long long int ill;\n" +" unsigned u;\n" +" long unsigned ul;\n" +" long long unsigned ull;\n" +" float f;\n" +" double d;\n" +" long double dl;\n" +" };\n" +"};\n" +"\n" +"static int confconf_priv_gcp_file(void *fp)\n" +"{\n" +" return getc((FILE *)fp);\n" +"}\n" +"\n" +"static int confconf_priv_ugcp_file(int c, void *fp)\n" +"{\n" +" return ungetc(c, (FILE *)fp);\n" +"}\n" +"\n" +"static void confconf_priv_eat_space(struct confconf_priv_state *st)\n" +"{\n" +" int c;\n" +"\n" +" while (true) {\n" +" c = (*(st->gcp))(st->fp);\n" +"\n" +" /* comment */\n" +" if (c == '#') {\n" +" st->col++;\n" +" st->byte++;\n" +"\n" +" do {\n" +" c = (*(st->gcp))(st->fp);\n" +" st->col++;\n" +" st->byte++;\n" +" } while (c != '\\n' && c != EOF);\n" +"\n" +" if (c == '\\n') {\n" +" st->col = 1;\n" +" st->line++;\n" +" continue;\n" +" } else {\n" +" st->col--;\n" +" st->byte--;\n" +" return;\n" +" }\n" +" }\n" +"\n" +" /* space */\n" +" if (c == ' ' || c == '\\f' || c == '\\n'\n" +" || c == '\\r' || c == '\\t' || c == '\\v') {\n" +" while (c == ' ' || c == '\\f' || c == '\\n'\n" +" || c == '\\r' || c == '\\t' || c == '\\v') {\n" +" if (c == '\\n') {\n" +" st->col = 1;\n" +" st->line++;\n" +" } else {\n" +" st->col++;\n" +" }\n" +" st->byte++;\n" +"\n" +" c = (*(st->gcp))(st->fp);\n" +" }\n" +"\n" +" if (c == EOF) {\n" +" return;\n" +" } else {\n" +" (*(st->ugcp))(c, st->fp);\n" +" continue;\n" +" }\n" +" }\n" +"\n" +" (*(st->ugcp))(c, st->fp);\n" +" break;\n" +" }\n" +"}\n" +"\n" +"static enum confconf_result_type confconf_priv_get_tok(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" size_t len = 0, mlen = 0;\n" +" char *stmp;\n" +" int c;\n" +"\n" +" st->s = NULL;\n" +"\n" +" c = (*(st->gcp))(st->fp);\n" +"\n" +" if (c == EOF)\n" +" return CONFCONF_ERR_UNEXPECTED_EOF;\n" +"\n" +" while (c != ' ' && c != '\\f' && c != '\\n'\n" +" && c != '\\r' && c != '\\t' && c != '\\v'\n" +" && c != ']' && c != '}' && c != ','\n" +" && c != EOF) {\n" +" if (len == mlen) {\n" +" mlen += CONFCONF_ALLOCWIDTH;\n" +"\n" +" if (mlen < len) {\n" +" if (st->s != NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" }\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +"\n" +" stmp = realloc(st->s, mlen);\n" +" if (stmp == NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +" st->s = stmp;\n" +" }\n" +"\n" +" st->s[len] = c;\n" +" len++;\n" +" c = (*(st->gcp))(st->fp);\n" +" }\n" +"\n" +" if (len == mlen) {\n" +" mlen += CONFCONF_ALLOCWIDTH;\n" +"\n" +" if (mlen < len) {\n" +" if (st->s != NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" }\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +"\n" +" stmp = realloc(st->s, mlen);\n" +" if (stmp == NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +" st->s = stmp;\n" +" }\n" +"\n" +" (*(st->ugcp))(c, st->fp);\n" +"\n" +" st->s[len] = '\\0';\n" +"\n" +" st->col += len;\n" +" st->byte += len;\n" +"\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sbool[] = +"#ifndef CONFCONF_BOOL_H\n" +"#define CONFCONF_BOOL_H\n" +"\n" +"static enum confconf_result_type confconf_priv_get_bool(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" char *off;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" off = st->s;\n" +"\n" +" if (*off == 't' || *off == 'T') {\n" +" if (\n" +" (*(++off) == 'r' || *off == 'R') &&\n" +" (*(++off) == 'u' || *off == 'U') &&\n" +" (*(++off) == 'e' || *off == 'E') &&\n" +" (*(++off) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = true;\n" +" return CONFCONF_SUCCESS;\n" +" } else {\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +" }\n" +"\n" +" if (*off == 'y' || *off == 'Y') {\n" +" if (\n" +" (*(++off) == 'e' || *off == 'E') &&\n" +" (*(++off) == 's' || *off == 'S') &&\n" +" (*(++off) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = true;\n" +" return CONFCONF_SUCCESS;\n" +" } else {\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +" }\n" +"\n" +" if (*off == 'n' || *off == 'N') {\n" +" if (\n" +" (*(++off) == 'o' || *off == 'O') &&\n" +" (*(++off) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = false;\n" +" return CONFCONF_SUCCESS;\n" +" } else {\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +" }\n" +"\n" +" if (*off == 'f' || *off == 'F') {\n" +" if (\n" +" (*(++off) == 'a' || *off == 'A') &&\n" +" (*(++off) == 'l' || *off == 'L') &&\n" +" (*(++off) == 's' || *off == 'S') &&\n" +" (*(++off) == 'e' || *off == 'E') &&\n" +" (*(++off) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = false;\n" +" return CONFCONF_SUCCESS;\n" +" } else {\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +" }\n" +"\n" +" if (*off == 'o' || *off == 'O') {\n" +" if (\n" +" (*(off+1) == 'n' || *(off+1) == 'N') &&\n" +" (*(off+2) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = true;\n" +" return CONFCONF_SUCCESS;\n" +" }\n" +"\n" +" if (\n" +" (*(++off) == 'f' || *off == 'F') &&\n" +" (*(++off) == 'f' || *off == 'F') &&\n" +" (*(++off) == '\\0')\n" +" ) {\n" +" free(st->s);\n" +" st->b = false;\n" +" return CONFCONF_SUCCESS;\n" +" } else {\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +" }\n" +"\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sstring[] = +"#ifndef CONFCONF_STRING_H\n" +"#define CONFCONF_STRING_H\n" +"\n" +"static enum confconf_result_type confconf_priv_get_str(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" size_t len = 0, mlen = 0;\n" +" char *stmp;\n" +" int c, endc;\n" +" bool escape = false;\n" +"\n" +" st->s = NULL;\n" +"\n" +" c = (*(st->gcp))(st->fp);\n" +" if (c == EOF)\n" +" return CONFCONF_ERR_UNEXPECTED_EOF;\n" +"\n" +" if (c != '\\'' && c != '\\\"') {\n" +" (*(st->ugcp))(c, st->fp);\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +"\n" +" endc = c;\n" +"\n" +" st->col++;\n" +" st->byte++;\n" +"\n" +" while (true) {\n" +" c = (*(st->gcp))(st->fp);\n" +" st->col++;\n" +" st->byte++;\n" +"\n" +" if (c == endc && !escape)\n" +" break;\n" +"\n" +" if (c == '\\\\' && !escape) {\n" +" escape = true;\n" +" continue;\n" +" }\n" +"\n" +" escape = false;\n" +"\n" +" if (c == '\\n') {\n" +" st->col = 1;\n" +" st->line++;\n" +" }\n" +"\n" +" if (c == EOF) {\n" +" if (st->s != NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" }\n" +" return CONFCONF_ERR_UNEXPECTED_EOF;\n" +" }\n" +"\n" +" if (len == mlen) {\n" +" mlen += CONFCONF_ALLOCWIDTH;\n" +"\n" +" if (mlen < len) {\n" +" if (st->s != NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" }\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +"\n" +" stmp = realloc(st->s, mlen);\n" +" if (stmp == NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +" st->s = stmp;\n" +" }\n" +"\n" +" st->s[len] = c;\n" +" len++;\n" +" }\n" +"\n" +" if (len == mlen) {\n" +" mlen += CONFCONF_ALLOCWIDTH;\n" +"\n" +" if (mlen < len) {\n" +" if (st->s != NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" }\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +"\n" +" stmp = realloc(st->s, mlen);\n" +" if (stmp == NULL) {\n" +" free(st->s);\n" +" st->s = NULL;\n" +" return CONFCONF_ERR_MEMORY;\n" +" }\n" +" st->s = stmp;\n" +" }\n" +"\n" +" st->s[len] = '\\0';\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sid[] = +"#ifndef CONFCONF_ID_H\n" +"#define CONFCONF_ID_H\n" +"\n" +"static enum confconf_result_type confconf_priv_get_id(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" char *off;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" for (off = st->s; *off != '\\0'; off++) {\n" +" if (*off >= '0' && *off <= '9')\n" +" continue;\n" +" if (\n" +" *off == 'a' || *off == 'b' || *off == 'c' ||\n" +" *off == 'd' || *off == 'e' || *off == 'f' ||\n" +" *off == 'g' || *off == 'h' || *off == 'i' ||\n" +" *off == 'j' || *off == 'k' || *off == 'l' ||\n" +" *off == 'm' || *off == 'n' || *off == 'o' ||\n" +" *off == 'p' || *off == 'q' || *off == 'r' ||\n" +" *off == 's' || *off == 't' || *off == 'u' ||\n" +" *off == 'v' || *off == 'w' || *off == 'x' ||\n" +" *off == 'y' || *off == 'z' ||\n" +" *off == 'A' || *off == 'B' || *off == 'C' ||\n" +" *off == 'D' || *off == 'E' || *off == 'F' ||\n" +" *off == 'G' || *off == 'H' || *off == 'I' ||\n" +" *off == 'J' || *off == 'K' || *off == 'L' ||\n" +" *off == 'M' || *off == 'N' || *off == 'O' ||\n" +" *off == 'P' || *off == 'Q' || *off == 'R' ||\n" +" *off == 'S' || *off == 'T' || *off == 'U' ||\n" +" *off == 'V' || *off == 'W' || *off == 'X' ||\n" +" *off == 'Y' || *off == 'Z' ||\n" +" *off == '-' || *off == '_'\n" +" ) {\n" +" continue;\n" +" }\n" +" \n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +" }\n" +"\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sint[] = +"#ifndef CONFCONF_INT_H\n" +"#define CONFCONF_INT_H\n" +"\n" +"#include <errno.h>\n" +"#include <limits.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_int(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long int i;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" i = strtol(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" if (i > INT_MAX || i < INT_MIN)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" free(st->s);\n" +" st->i = (int)i;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sintl[] = +"#ifndef CONFCONF_INTL_H\n" +"#define CONFCONF_INTL_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_intl(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long int il;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" il = strtol(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->il = il;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sintll[] = +"#ifndef CONFCONF_INTLL_H\n" +"#define CONFCONF_INTLL_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_intll(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long long int ill;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" ill = strtoll(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->ill = ill;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char suint[] = +"#ifndef CONFCONF_UINT_H\n" +"#define CONFCONF_UINT_H\n" +"\n" +"#include <errno.h>\n" +"#include <limits.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_uint(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long unsigned u;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" u = strtoul(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" if (u > UINT_MAX)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" free(st->s);\n" +" st->u = (unsigned)u;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char suintl[] = +"#ifndef CONFCONF_UINTL_H\n" +"#define CONFCONF_UINTL_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_uintl(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long unsigned ul;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" ul = strtoul(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->ul = ul;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char suintll[] = +"#ifndef CONFCONF_UINTLL_H\n" +"#define CONFCONF_UINTLL_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_uintll(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" long long unsigned ull;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" ull = strtoull(st->s, &check, 0);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->ull = ull;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sfloat[] = +"#ifndef CONFCONF_FLOAT_H\n" +"#define CONFCONF_FLOAT_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_float(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" double f;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" f = strtof(st->s, &check);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->f = f;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sdouble[] = +"#ifndef CONFCONF_DOUBLE_H\n" +"#define CONFCONF_DOUBLE_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_double(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" double d;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" d = strtod(st->s, &check);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->d = d;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; + +static const char sdoublel[] = +"#ifndef CONFCONF_DOUBLEL_H\n" +"#define CONFCONF_DOUBLEL_H\n" +"\n" +"#include <errno.h>\n" +"\n" +"static enum confconf_result_type confconf_priv_get_doublel(\n" +" struct confconf_priv_state *st)\n" +"{\n" +" enum confconf_result_type r;\n" +" double dl;\n" +" char *check;\n" +"\n" +" r = confconf_priv_get_tok(st);\n" +"\n" +" if (r != CONFCONF_SUCCESS)\n" +" return r;\n" +"\n" +" errno = EILSEQ;\n" +" dl = strtold(st->s, &check);\n" +"\n" +" if (errno == ERANGE)\n" +" return CONFCONF_ERR_RANGE;\n" +"\n" +" if (*check != '\\0')\n" +" return CONFCONF_ERR_UNEXPECTED_TOKEN;\n" +"\n" +" free(st->s);\n" +" st->dl = dl;\n" +" return CONFCONF_SUCCESS;\n" +"}\n" +"\n" +"#endif\n" +"\n" +; @@ -4,24 +4,7 @@ #include <time.h> -static const char header[] = -"#ifndef CONFCONF_PRIV_H\n" -"#define CONFCONF_PRIV_H\n" -"\n" -"#include <stdbool.h>\n" -"#include <stdio.h>\n" -"#include <ctype.h>\n" -"\n" -"struct confconf_priv_fstate {\n" -" void *f;\n" -" int (*gcp)(void *);\n" -" size_t line;\n" -" size_t col;\n" -" size_t byte;\n" -"};\n" -"\n" -"#endif\n" -; +#include "gen-consts.h" void gen(FILE *f, struct parse_result_s pr, struct analyse_result_s ar) { @@ -34,5 +17,31 @@ void gen(FILE *f, struct parse_result_s pr, struct analyse_result_s ar) fprintf(f, "/* generated by %s on %04d-%02d-%02d */\n", VERSION, ti->tm_year + 1900, ti->tm_mon + 1, ti->tm_mday); - fprintf(f, header); + fprintf(f, sheader); + + if (ar.uses_bool) + fprintf(f, sbool); + if (ar.uses_string) + fprintf(f, sstring); + if (ar.uses_id) + fprintf(f, sid); + if (ar.uses_int) + fprintf(f, sint); + if (ar.uses_intl) + fprintf(f, sintl); + if (ar.uses_intll) + fprintf(f, sintll); + if (ar.uses_uint) + fprintf(f, suint); + if (ar.uses_uintl) + fprintf(f, suintl); + if (ar.uses_uintll) + fprintf(f, suintll); + if (ar.uses_float) + fprintf(f, sfloat); + if (ar.uses_double) + fprintf(f, sdouble); + if (ar.uses_doublel) + fprintf(f, sdoublel); + } @@ -59,31 +59,6 @@ int main(int argc, char **argv) print_tree(&ar.var_tree); puts(""); - if (ar.uses_bool) - puts("bool"); - if (ar.uses_string) - puts("string"); - if (ar.uses_id) - puts("id"); - if (ar.uses_int) - puts("int"); - if (ar.uses_intl) - puts("intl"); - if (ar.uses_intll) - puts("intll"); - if (ar.uses_uint) - puts("uint"); - if (ar.uses_uintl) - puts("uintl"); - if (ar.uses_uintll) - puts("uintll"); - if (ar.uses_float) - puts("float"); - if (ar.uses_double) - puts("double"); - if (ar.uses_doublel) - puts("doublel"); - gen(fo, pr, ar); if (fo != stdout) |