write.c
author viric@llimona
Sat, 01 Sep 2007 12:26:22 +0200
changeset 17 d95d9e7a2b81
parent 8 09ec33061ff3
permissions -rw-r--r--
General interface to dictionary search.
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
#include "dictre.h"
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     3
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     4
extern struct Word words[];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     5
extern int nwords;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     6
extern struct Def defs[];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     7
extern int ndefs;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     8
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     9
static int write_dictionary_data(FILE *fdefs)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    10
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    11
    int i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    12
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    13
    int offset = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    14
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    15
    for (i=0; i < ndefs; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    16
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    17
        fwrite(defs[i].d, defs[i].length, 1, fdefs);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    18
        defs[i].offset = offset;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    19
        offset += defs[i].length;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    20
    }
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    21
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    22
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    23
static void write_dictionary_index(FILE *index)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    24
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    25
    int i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    26
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    27
    for (i=0; i < nwords; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    28
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    29
        char offset_str[50];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    30
        char length_str[50];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    31
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    32
        num_to_ia5(offset_str, defs[words[i].def].offset);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    33
        num_to_ia5(length_str, defs[words[i].def].length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    34
        fprintf(index, "%s\t%s\t%s\n",
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    35
                words[i].w, offset_str, length_str);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    36
    }
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    37
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    38
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    39
void write_dictionary(const char *name)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    40
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    41
    FILE *i, *d;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    42
    char tmpname[500];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    43
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    44
    strcpy(tmpname, name);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    45
    strcat(tmpname, ".dict");
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    46
    d = fopen(tmpname, "wb");
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    47
    write_dictionary_data(d);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    48
    fclose(d);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    49
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    50
    strcpy(tmpname, name);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    51
    strcat(tmpname, ".index");
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    52
    i = fopen(tmpname, "wb");
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    53
    write_dictionary_index(i);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    54
    fclose(i);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    55
}