--- 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)