summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-03-09 20:45:30 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-03-09 20:45:30 -0400
commit7caa00ef467acdb7b874d4283b3bc58730bf803d (patch)
treec3e2542fca0d8a12f776847b70522a10091fef70 /src/main.c
parent58a32dad0be010556b39f8ce4b55aa012c2762d0 (diff)
Added keytablist struct
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c50
1 files changed, 36 insertions, 14 deletions
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);
}