idx2index.c
author viric@mandarina
Mon, 13 Aug 2007 23:45:46 +0200
changeset 7 c815840c5b65
parent 0 7f37716d4f1e
child 8 09ec33061ff3
permissions -rw-r--r--
Optimizations
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 <netinet/in.h>
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     3
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     4
/*
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     5
 * idx2index - Part of the flow to convert a StarDict index to a dictd index.
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     6
 *             Author: LluĂ­s Batlle
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     7
 * In order to convert a StarDict idx file to a dictd index file, pass:
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     8
 * ./idx2index < file.idx | LC_ALL=POSIX sort > file.index
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
     9
 * */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    10
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    11
static char num_to_ia5char(int n)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    12
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    13
    /* From RFC 1421 */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    14
    if (n >= 0 && n <= 25)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    15
        return 'A' + n;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    16
    else if (n >= 26 && n <= 51)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    17
        return 'a' + (n - 26);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    18
    else if (n >= 52 && n <= 61)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    19
        return '0' + (n - 52);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    20
    else if (n == 62)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    21
        return '+';
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    22
    else if (n == 63)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    23
        return '-';
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    24
    else
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    25
        return '!'; /* Error */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    26
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    27
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    28
static int num_to_ia5(char *dest, int n)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    29
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    30
    char tmp[20];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    31
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    32
    int i, max;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    33
   
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    34
    for(i =0; i <= 10; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    35
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    36
        tmp[i] = num_to_ia5char(n % 64);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    37
        if (n < 64)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    38
            break;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    39
        n /= 64;
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
    max = i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    43
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    44
    /* reverse the number */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    45
    for (i=0; i<=max; ++i)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    46
        dest[i] = tmp[max-i];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    47
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    48
    /* Ending '\0' */
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    49
    dest[max+1] = '\0';
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    50
    return max;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    51
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    52
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    53
static int get_int()
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    54
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    55
    int i;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    56
    fread(&i, sizeof(int) , 1, stdin);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    57
    i = ntohl(i); /* Network to Host order */
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
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    61
static int get_word(char * word)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    62
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    63
    int c;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    64
    int count = 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    65
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    66
    do
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    67
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    68
        c = getchar();
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    69
        if (c == EOF)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    70
            break;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    71
        word[count] = (char) c;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    72
        ++count;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    73
    } while (c != 0);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    74
    return count;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    75
}
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    76
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    77
int main()
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    78
{
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    79
    char word[256];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    80
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    81
    do
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    82
    {
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    83
        int offset, length;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    84
        int res;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    85
        char c_offset[20], c_length[20];
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    86
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    87
        res = get_word(word);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    88
        if (res == 0)
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    89
            break;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    90
        offset = get_int();
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    91
        num_to_ia5(c_offset, offset);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    92
        length = get_int();
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    93
        num_to_ia5(c_length, length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    94
        printf("%s\t%s\t%s\n", word, c_offset, c_length);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    95
    } while(1);
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    96
    return 0;
7f37716d4f1e Initial. Awful makefile.
viric@llimona
parents:
diff changeset
    97
}