From 7caa00ef467acdb7b874d4283b3bc58730bf803d Mon Sep 17 00:00:00 2001 From: bpc2003 Date: Sun, 9 Mar 2025 20:45:30 -0400 Subject: Added keytablist struct --- src/main.c | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 1aaaaa7..e8a3a08 100644 --- a/src/main.c +++ b/src/main.c @@ -8,7 +8,9 @@ int main(int argc, char **argv) { - struct keytab tab[TABLEN] = {{ NULL, 0, { 0 } }}; + int open = 0; + int len = 2; + struct keytablist *list = calloc(len, sizeof(struct keytablist)); if (argc != 2) exit(1); char *filename = argv[1]; @@ -19,14 +21,26 @@ int main(int argc, char **argv) struct byte *bytes = parse(buf); free(buf); - for (int i = 0; i < blen; ++i) { + for (int i = 0, j = 0; i < blen; ++i) { switch (bytes[i].type) { case BEGIN: + if (j >= len) { + len *= 2; + list = realloc(list, len * sizeof(struct keytablist)); + } + if (open == 1) { + fprintf(stderr, "missing close!\n"); + free(bytes); + exit(1); + } + open = 1; break; case END: + open = 0; + j++; break; case PAIR: - setkey(tab, bytes[i].value); + setkey(list, j, bytes[i].value); free(bytes[i].value); break; case ERROR: @@ -35,19 +49,27 @@ int main(int argc, char **argv) } } - int *indexes = getkeys(tab); - for (int i = 0; indexes[i] != 0; ++i) { - printf("%s: ", tab[indexes[i]].key); - if (tab[indexes[i]].flag == 1) { - printf("%.2lf\n", tab[indexes[i]].v.num); - } else if (tab[indexes[i]].flag == 2) { - printf("%d\n", tab[indexes[i]].v.b); - } else if (tab[indexes[i]].flag == 3) { - printf("%s\n", tab[indexes[i]].v.str); + for (int i = 0; i < len; ++i) { + int *indexes = getkeys(list, i); + for (int j = 0; indexes[j]; ++j) { + printf("%s: ", list[i].tab[indexes[j]].key); + switch (list[i].tab[indexes[j]].flag) { + case 1: + printf("%.2lf\n", list[i].tab[indexes[j]].v.num); + break; + case 2: + printf("%d\n", list[i].tab[indexes[j]].v.b); + break; + case 3: + printf("%s\n", list[i].tab[indexes[j]].v.str); + break; + } + delkey(list, i, list[i].tab[indexes[j]].key); } - delkey(tab, tab[indexes[i]].key); + free(indexes); } - free(indexes); + + free(list); free(bytes); exit(0); } -- cgit v1.2.3