From 03aa0fe6c664f74e8e4e5877ef89b4e053b30bc5 Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Mon, 12 Feb 2024 22:10:24 +0100 Subject: feat: Add initial ncurses support Alongside with loading and saving data from the dict.cc's text. --- main.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 7 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 720871c..dae1f2a 100644 --- a/main.c +++ b/main.c @@ -1,20 +1,101 @@ +#include #include #include - +#include #include "data.h" +#define BUF_SIZE 100 + +unsigned int count_lines(FILE* file); +int load_or_save_db(sqlite3 *pInMemory, const char *zFilename, int isSave); + int main() { Data *data = new_data(":memory:"); bootstrap(data); - for (int x = 0; x < 10000; x++) - insert(data, "LINE X"); - LIST *list = select(data); + setlocale(LC_ALL, ""); + initscr(); + + int maxx=getmaxx(stdscr); + + FILE *f = fopen("dict.txt", "r"); + unsigned int lines = count_lines(f); + fseek(f, 0, SEEK_SET); - for (unsigned int x = 0; x < list->size; x++) - printf("This is a line: %s\n", ((Word*)list->list[x])->Line); + char * line = NULL; + size_t len = 0; + ssize_t read; + int count = 0; + while ((read = getline(&line, &len, f)) != -1) { + if (line[0] == '#' || line[0] == '\n') + continue; - list_free(list); + insert(data, line, read-1); + count ++; + move(0,0); + float total = ((float)count/(float)lines); + printw("%03.0f%% ", total*100); + for (int x = 0; x < ((maxx-4)*total); x++) { + printw("█"); + } + move(1,0); + printw("%d/%d",count,lines); + refresh(); + } + + move(2,0); + printw("Saving db..."); + refresh(); + load_or_save_db(data->db, "backup.db", 1); + + clear(); + refresh(); return 0; } + +int load_or_save_db(sqlite3 *pInMemory, const char *zFilename, int isSave){ + int rc; /* Function return code */ + sqlite3 *pFile; /* Database connection opened on zFilename */ + sqlite3_backup *pBackup; /* Backup object used to copy data */ + sqlite3 *pTo; /* Database to copy to (pFile or pInMemory) */ + sqlite3 *pFrom; /* Database to copy from (pFile or pInMemory) */ + + rc = sqlite3_open(zFilename, &pFile); + if( rc==SQLITE_OK ){ + pFrom = (isSave ? pInMemory : pFile); + pTo = (isSave ? pFile : pInMemory); + + pBackup = sqlite3_backup_init(pTo, "main", pFrom, "main"); + if( pBackup ){ + (void)sqlite3_backup_step(pBackup, -1); + (void)sqlite3_backup_finish(pBackup); + } + rc = sqlite3_errcode(pTo); + } + + (void)sqlite3_close(pFile); + return rc; +} + +unsigned int count_lines(FILE* file) +{ + char buf[BUF_SIZE]; + unsigned int counter = 0; + for(;;) + { + size_t res = fread(buf, 1, BUF_SIZE, file); + if (ferror(file)) + return -1; + + size_t i; + for(i = 0; i < res; i++) + if (buf[i] == '\n') + counter++; + + if (feof(file)) + break; + } + + return counter; +} -- cgit v1.2.3