load.c
author viric@mandarina
Sat, 11 Aug 2007 15:52:30 +0200
changeset 2 57a1fcb0c75c
parent 0 7f37716d4f1e
child 5 c87681fff7d3
permissions -rw-r--r--
Some improvements.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     1
#include <stdio.h>
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     2
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     3
#include "dictre.h"
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     4
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     5
enum
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     6
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     7
    MAX=500000
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     8
};
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     9
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    10
struct Word words[MAX];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    11
int nwords;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    12
struct Def defs[MAX];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    13
int ndefs;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    14
int dont_touch[20];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    15
int ndont_touch;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    16
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    17
void load_init()
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    18
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    19
    ndefs = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    20
    nwords = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    21
    ndont_touch = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    22
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    23
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    24
static void new_word(struct Word *from)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    25
{
2
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    26
    static int dispnwords = 0;
0
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    27
    memcpy(&words[nwords], from, sizeof(*from));
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    28
    nwords++;
2
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    29
    dispnwords++;
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    30
    if (dispnwords >= 1000)
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    31
    {
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    32
        dispnwords = 0;
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    33
        printf("Loaded: %i\n", nwords);
57a1fcb0c75c Some improvements.
viric@mandarina
parents: 0
diff changeset
    34
    }
0
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    35
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    36
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    37
static void new_dont_touch(int n)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    38
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    39
    dont_touch[ndont_touch++] = n;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    40
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    41
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    42
static int new_def(char *def, int offset, int length)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    43
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    44
    defs[ndefs].d = def;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    45
    defs[ndefs].offset = offset;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    46
    defs[ndefs].length = length;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    47
    return ndefs++;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    48
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    49
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    50
static int search_def(int offset, int length)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    51
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    52
    int i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    53
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    54
    for(i=0; i < ndefs; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    55
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    56
        if (defs[i].offset == offset &&
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    57
                defs[i].length == length)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    58
            return i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    59
    }
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    60
    return -1;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    61
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    62
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    63
static void print_word(struct Word *w)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    64
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    65
    printf("%s\t%i\n", w->w, w->def);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    66
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    67
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    68
void load_dictionary(FILE *index, FILE *fdefs)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    69
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    70
    struct Word w;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    71
    int last_offset = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    72
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    73
    do {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    74
        int offset, length;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    75
        char *defstr;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    76
        w.w = get_word(index);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    77
        if (w.w == 0)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    78
            break;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    79
        offset = get_int(index);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    80
        length = get_int(index);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    81
        if (offset > last_offset)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    82
        {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    83
            w.def = -1;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    84
            last_offset = offset;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    85
        }
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    86
        else
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    87
            w.def = search_def(offset, length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    88
        if (w.def == -1)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    89
        {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    90
            defstr = get_def(fdefs, offset, length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    91
            w.def = new_def(defstr, offset, length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    92
        }
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    93
        /* sizeof -1  instead of strlen() */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    94
        if (strncmp(w.w, "00database", sizeof("00database") - 1) == 0)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    95
                new_dont_touch(w.def);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    96
        new_word(&w);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    97
    } while(1);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    98
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    99
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   100
void print_words()
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   101
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   102
    int i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   103
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   104
    for(i=0; i < nwords; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   105
        print_word(&words[i]);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
   106
}