--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/zload.c Tue Aug 28 01:03:24 2007 +0200
@@ -0,0 +1,119 @@
+#include <stdio.h>
+#include <sys/stat.h>
+#include "dictre.h"
+
+static FILE *index, *dict;
+static remove_tmp_file = 0;
+
+static new_word(const char *w, const char *defstr)
+{
+ printf("'%s': '%s'\n", w, defstr);
+}
+
+void zload_words(FILE *index, FILE *fdefs)
+{
+ int last_offset = 0;
+ int def_avoided = 0;
+ int numword = 0;;
+ static int dispnwords = 0;
+ static int nwords = 0;
+
+ do {
+ int offset, length;
+ char *defstr;
+ char *word;
+ word = get_word(index);
+ /*numword++;
+ printf("words: %i\n", numword);*/
+ if (word == 0)
+ break;
+ /*printf("Word: %s\n", w.w);*/
+ offset = get_int(index);
+ length = get_int(index);
+ defstr = get_def(fdefs, offset, length);
+
+ /* sizeof -1 instead of strlen() */
+ /* If the word is not 00database* ... */
+ if (strncmp(word, "00database", sizeof("00database") - 1) != 0)
+ zprocess_def(word, defstr);
+
+ /* stdout Display */
+ dispnwords++;
+ nwords++;
+ if (dispnwords >= 1000)
+ {
+ dispnwords = 0;
+ fprintf(stderr,
+ "Loaded: %i Repeated definitions avoided: %i\n", nwords,
+ def_avoided);
+ }
+
+ } while(1);
+}
+
+static void close_files()
+{
+ fclose(index);
+ fclose(dict);
+
+ if (remove_tmp_file)
+ unlink("/tmp/tmp.dict");
+}
+
+static void open_files(int argn, char **argv)
+{
+ char tmpname[500];
+ if (argn < 2)
+ {
+ fprintf(stderr, "usage: %s <dict_basename>\n", argv[0]);
+ exit(1);
+ }
+ strcpy(tmpname, argv[1]);
+ strcat(tmpname, ".index");
+ index = fopen(tmpname, "r");
+ if(index == NULL)
+ {
+ fprintf(stderr, "File: %s ", tmpname);
+ perror("- cannot open file.");
+ exit(-1);
+ }
+
+ strcpy(tmpname, argv[1]);
+ strcat(tmpname, ".dict");
+ dict = fopen(tmpname, "r");
+ if(dict == NULL)
+ {
+ struct stat st;
+ int res;
+ char tmp[500];
+ strcat(tmpname, ".dz");
+ res = stat(tmpname, &st);
+ if (res == -1)
+ {
+ fprintf(stderr, "File: %s ", tmpname);
+ perror("- cannot open file.");
+ exit(-1);
+ }
+ sprintf(tmp, "gzip -cd %s > /tmp/tmp.dict",
+ tmpname);
+ printf("Gunzipping...\n");
+ res = system(tmp);
+ dict = fopen("/tmp/tmp.dict", "r");
+ if(dict == NULL || res != 0)
+ {
+ fprintf(stderr, "Error gunzipping file: %s ", tmpname);
+ perror("- something happened to /tmp/tmp.dict.");
+ exit(-1);
+ }
+ remove_tmp_file = 1;
+ }
+}
+
+int main(int argn, char **argv)
+{
+ open_files(argn, argv);
+ init_wordlist();
+ zload_words(index, dict);
+ dump_wordlist();
+ close_files();
+}