#include #include #include #include #include "data.h" #include "ui.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); setlocale(LC_ALL, ""); noecho(); cbreak(); nonl(); keypad(stdscr, TRUE); initscr(); FILE *f = fopen("dict.txt", "r"); unsigned int lines = count_lines(f); fseek(f, 0, SEEK_SET); char * line = NULL; size_t len = 0; ssize_t read; PROGRESS_BAR *bar = new_progress_bar(stdscr, lines); while ((read = getline(&line, &len, f)) != -1) { if (line[0] == '#' || line[0] == '\n') continue; insert(data, line, read-1); bar_step(bar, 1); } move(2,0); printw("Saving db..."); refresh(); load_or_save_db(data->db, "backup.db", 1); clear(); refresh(); TEXT_BOX *box = new_text_box(stdscr, 10); get_char(box); clear(); refresh(); endwin(); free_data(data); 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; }