#include #include #include #include "../lib/util.h" #include "../lib/data.h" int run(const char *db, const char *txt); int main(int argc, char** argv) { int opt; char* txt = NULL; char* db = NULL; while ((opt = getopt(argc, argv, "t:d:h")) != -1) { switch(opt) { case 't': txt = copy_achar(optarg); break; case 'd': db = copy_achar(optarg); break; case 'h': // fall through default: printf("Usage: %s", argv[0]); goto end; } } int r = run(db, txt); end: if (txt != NULL) free(txt); if (db != NULL) free(db); return r; } int run(const char *db, const char *txt) { char * line = NULL; size_t len = 0; int count = 0; ssize_t read; Data *data; FILE *f; int total; printf("\33[?25l"); // hide cursor data = new_data(":memory:"); f = fopen(txt, "r"); bootstrap(data); total = count_file_lines(f); fseek(f, 0, SEEK_SET); while ((read = getline(&line, &len, f)) != -1) { if (line[0] == '#' || line[0] == '\n') continue; insert(data, line, read-1); count++; if ((count % 321) == 0) { float t = ((float)count/(float)total)*100; printf("\rLoading data [%03.0f%%] %d/%d", t, count, total); } } float t = ((float)count/(float)total)*100; printf("\rLoading data [%03.0f%%] %d/%d", t, count, total); int r = load_or_save_db(data->db, db, 1); printf("\rDONE!"); printf("\33[?25h"); // reenable cursor return r; }