load.c
changeset 5 c87681fff7d3
parent 2 57a1fcb0c75c
child 6 bc41369f4587
--- a/load.c	Sat Aug 11 16:12:27 2007 +0200
+++ b/load.c	Mon Aug 13 16:27:41 2007 +0200
@@ -14,7 +14,7 @@
 int dont_touch[20];
 int ndont_touch;
 
-void load_init()
+void init_load()
 {
     ndefs = 0;
     nwords = 0;
@@ -69,6 +69,7 @@
 {
     struct Word w;
     int last_offset = 0;
+    int def_avoided = 0;
 
     do {
         int offset, length;
@@ -76,6 +77,7 @@
         w.w = get_word(index);
         if (w.w == 0)
             break;
+        /*printf("Word: %s\n", w.w);*/
         offset = get_int(index);
         length = get_int(index);
         if (offset > last_offset)
@@ -85,10 +87,26 @@
         }
         else
             w.def = search_def(offset, length);
-        if (w.def == -1)
+        if (w.def == -1) 
         {
+            /* New definition */
+            int newindex, repindex;
             defstr = get_def(fdefs, offset, length);
-            w.def = new_def(defstr, offset, length);
+            newindex = new_def(defstr, offset, length);
+            
+            /* Store it in the hash for repeated defs */
+            repindex = def_repeated(&defs[newindex]);
+            if (repindex != -1) 
+            {
+                def_avoided += 1;
+                printf("Repeated def avoided %i (word %s)\n", def_avoided, w.w);
+                remove_def(newindex);
+                newindex = repindex;
+            } else
+                new_hashdef(&defs[newindex], newindex);
+
+            /* Store the final index */
+            w.def = newindex;
         }
         /* sizeof -1  instead of strlen() */
         if (strncmp(w.w, "00database", sizeof("00database") - 1) == 0)