From 881d3602e7b5db3e430e065f5066a090065641c9 Mon Sep 17 00:00:00 2001 From: biglyderv Date: Sat, 12 Apr 2025 09:44:14 -0400 Subject: [PATCH] clean up I/O database --- .gitignore | 3 ++- src/command.c | 22 +++++-------------- src/command.h | 2 +- src/loader.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++---- src/loader.h | 3 ++- src/main.c | 34 +++++++++++----------------- src/main.h | 12 +++++----- 7 files changed, 87 insertions(+), 50 deletions(-) diff --git a/.gitignore b/.gitignore index 7ac3b40..97fedc6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ /inv.txt /inv_users.txt /polls.txt -/elem.tar.gz \ No newline at end of file +/elem.tar.gz +/combos.txt \ No newline at end of file diff --git a/src/command.c b/src/command.c index 4ac7293..c89104e 100644 --- a/src/command.c +++ b/src/command.c @@ -4,7 +4,7 @@ #include #include #include - +#include "loader.h" #include "main.h" // huge cleanup operation soon @@ -159,7 +159,7 @@ int handle_pages_int(char *command, char *invs) { } } -int suggest_command(char *command, char *command_re, hashmap *polls, char *name, +int suggest_command(char *command, char *command_re, hashmap *polls, hashmap *combos, char *name, int was_combination) { char *page = handle_pages(command, "/suggest "); @@ -204,12 +204,9 @@ int suggest_command(char *command, char *command_re, hashmap *polls, char *name, printf("Poll was added into the game!\n"); FILE *fptr; - fptr = fopen("../elem_data/" combo_file, "a"); - if (fptr == NULL) - return 1; - fwrite(val, sizeof(char), strlen(val), fptr); - fwrite("\n", sizeof(char), 1, fptr); - fclose(fptr); + hashmap_set(combos, command_re, strlen(command_re), (uintptr_t)page, 0); + + write_elements(combos, "../elem_data/" COMBO_FILE, 0); return 1; } @@ -219,14 +216,7 @@ int suggest_command(char *command, char *command_re, hashmap *polls, char *name, FILE *fptr; - fptr = fopen("../elem_data/" poll_file, "a"); - if (fptr == NULL) - return 1; - fwrite(key, sizeof(char), strlen(key), fptr); - fwrite(";", sizeof(char), 1, fptr); - fwrite(val, sizeof(char), strlen(val), fptr); - fwrite("\n", sizeof(char), 1, fptr); - fclose(fptr); + write_elements(polls, "../elem_data/" POLL_FILE, 3); return 1; } diff --git a/src/command.h b/src/command.h index bba66a4..cdd78bf 100644 --- a/src/command.h +++ b/src/command.h @@ -2,7 +2,7 @@ int get_command(char *command, char *command_re, char **sort_tmp); int slash_command(char *command, hashmap *inv); int suggest_command(char *command, char *command_re, hashmap *polls, - char *name, int was_combination); + hashmap *combos, char *name, int was_combination); int help_command(char *command); int polls_command(char *command, hashmap *polls, hashmap *cmd); int path_command(char *command, hashmap *elements_rev, hashmap *already_done, diff --git a/src/loader.c b/src/loader.c index 67c3efe..28668f5 100644 --- a/src/loader.c +++ b/src/loader.c @@ -6,7 +6,56 @@ #include "main.h" -int load_elements(hashmap *m, char *table, int use_inv) { +struct write_struct { + FILE *fptr; + int mode; +}; + +int entry_handler(const void *key, size_t size, uintptr_t val, void *usr) { + struct write_struct *usr2 = (struct write_struct *)usr; + + char *val2 = (char *)val; + char *key2 = (char *)key; + + if (usr2->mode == 0) { + fwrite(val2, sizeof(char), strlen(val2), usr2->fptr); + fwrite(";", sizeof(char), 1, usr2->fptr); + fwrite(key2, sizeof(char), strlen(key2), usr2->fptr); + if (key2[strlen(key2) - 1] != '\n') { + fwrite("\n", sizeof(char), 1, usr2->fptr); + } + } else if (usr2->mode == 1) { + fwrite(key2, sizeof(char), strlen(key2), usr2->fptr); + fwrite("\n", sizeof(char), 1, usr2->fptr); + } else { + fwrite(key2, sizeof(char), strlen(key2), usr2->fptr); + fwrite(";", sizeof(char), 1, usr2->fptr); + fwrite(val2, sizeof(char), strlen(val2), usr2->fptr); + if (val2[strlen(val2) - 1] != '\n') { + fwrite("\n", sizeof(char), 1, usr2->fptr); + } + } + + return 1; +} + +void write_elements(hashmap *m, char *table, int mode) { + FILE *fptr; + + fptr = fopen(table, "w"); + + if (fptr == NULL) + return; + + struct write_struct writer = {.fptr = fptr, .mode = mode}; + + hashmap_iterate(m, entry_handler, (void *)&writer); + //fwrite("\n", sizeof(char), 1, fptr); + + fclose(fptr); +} + +int load_elements(hashmap *m, char *table, int mode) { FILE *fptr; fptr = fopen(table, "r"); @@ -19,6 +68,8 @@ int load_elements(hashmap *m, char *table, int use_inv) { int did_something = 0; + int lines_get = 0; + while (1) { str2 = calloc(MAX_FILE_SIZE, sizeof(char)); if (!fgets(str2, MAX_FILE_SIZE, fptr)) { @@ -26,13 +77,15 @@ int load_elements(hashmap *m, char *table, int use_inv) { break; } + lines_get++; + str = calloc(strlen(str2) + 1, sizeof(char)); strcpy(str, str2); free(str2); did_something = 1; - if (use_inv == 1) { + if (mode == 1) { hashmap_set(m, str, strlen(str) - 1, (uintptr_t)1, 0); continue; } @@ -44,7 +97,7 @@ int load_elements(hashmap *m, char *table, int use_inv) { char *combo = calloc(strlen(combo_o) + 1, sizeof(char)); strcpy(combo, combo_o); - if (use_inv == 3) { + if (mode == 3) { uintptr_t result; hashmap_get(m, str, strlen(str) - 1, &result); @@ -54,7 +107,7 @@ int load_elements(hashmap *m, char *table, int use_inv) { continue; } - if (use_inv == 2 || use_inv == 3) { + if (mode == 2 || mode == 3) { hashmap_set(m, str, strlen(str) - 1, (uintptr_t)combo, 1); continue; } diff --git a/src/loader.h b/src/loader.h index 116d3ad..ad57b8d 100644 --- a/src/loader.h +++ b/src/loader.h @@ -1,2 +1,3 @@ #include "map.h" -int load_elements(hashmap *m, char *table, int use_inv); \ No newline at end of file +int load_elements(hashmap *m, char *table, int mode); +void write_elements(hashmap *m, char *table, int mode); \ No newline at end of file diff --git a/src/main.c b/src/main.c index a82e4d2..67e3c96 100644 --- a/src/main.c +++ b/src/main.c @@ -12,24 +12,24 @@ void init_tables(hashmap *elements, hashmap *inv, hashmap *polls, hashmap *elements_rev, int do_inv) { - load_elements(elements, "../elem_data/" combo_file, 0); - load_elements(elements, combo_file, 0) || - load_elements(elements, "bin/" combo_file, 0); + load_elements(elements, "../elem_data/" COMBO_FILE, 0); + load_elements(elements, COMBO_FILE, 0) || + load_elements(elements, "bin/" COMBO_FILE, 0); - load_elements(elements_rev, "../elem_data/" combo_file, 3); - load_elements(elements_rev, combo_file, 3) || - load_elements(elements_rev, "bin/" combo_file, 3); + load_elements(elements_rev, "../elem_data/" COMBO_FILE, 3); + load_elements(elements_rev, COMBO_FILE, 3) || + load_elements(elements_rev, "bin/" COMBO_FILE, 3); - load_elements(polls, "../elem_data/" poll_file, 3); + load_elements(polls, "../elem_data/" POLL_FILE, 3); if (!do_inv) return; - load_elements(inv, "../elem_data/" inv_base_file, 1) || - load_elements(inv, inv_base_file, 1) || - load_elements(inv, "bin/" inv_base_file, 1); + load_elements(inv, "../elem_data/" INV_BASE_FILE, 1) || + load_elements(inv, INV_BASE_FILE, 1) || + load_elements(inv, "bin/" INV_BASE_FILE, 1); - load_elements(inv, inv_file, 1); + load_elements(inv, INV_FILE, 1); } int main(int argc, char *argv[]) { @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) { } if (was_combination && - suggest_command(command, command_re, polls, name, was_combination)) { + suggest_command(command, command_re, polls, elements, name, was_combination)) { continue; } was_combination = 0; @@ -148,15 +148,7 @@ int main(int argc, char *argv[]) { hashmap_set(inv, res_str, strlen(res_str), (uintptr_t)1, 0); printf("You made %s!\n", res_str); - - FILE *fptr; - - fptr = fopen(inv_file, "a"); - if (fptr == NULL) - continue; - fwrite(res_str, sizeof(char), strlen(res_str), fptr); - fwrite("\n", sizeof(char), 1, fptr); - fclose(fptr); + write_elements(inv, INV_FILE, 1); } // free(command); diff --git a/src/main.h b/src/main.h index 7761ac3..9e1ac77 100644 --- a/src/main.h +++ b/src/main.h @@ -1,9 +1,9 @@ -#define inv_file "inv.txt" -#define inv_base_file "inv_base.txt" -#define combo_file "combos.txt" -#define poll_file "polls.txt" -#define polls_lock_file "polls_lock.txt" -#define lb_file "lb.txt" +#define INV_FILE "inv.txt" +#define INV_BASE_FILE "inv_base.txt" +#define COMBO_FILE "combos.txt" +#define POLL_FILE "polls.txt" +#define POLLS_LOCK_FILE "polls_lock.txt" +#define LB_FILE "lb.txt" #define MAX_BUF_LENGTH 1024 #define MAX_COMBO_LENGTH 1024