aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c95
1 files changed, 88 insertions, 7 deletions
diff --git a/main.c b/main.c
index 720871c..dae1f2a 100644
--- a/main.c
+++ b/main.c
@@ -1,20 +1,101 @@
+#include <locale.h>
#include <stdio.h>
#include <sqlite3.h>
-
+#include <ncurses.h>
#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;
+}