Adjust LR combine function.
[chise/kage.git] / kagecgi / kagedb.c
1 //kagedb.c
2 //
3
4 #include "kage.h"
5 #include "kagecgi.h"
6 #include "sysdep.h"
7
8 int initDB(){
9         db_create(&kPartsdbDatabase, NULL, 0);
10         kPartsdbDatabase->open(kPartsdbDatabase, NULL, partsdbFileName, NULL, DB_HASH, DB_RDONLY, 0644);
11         db_create(&kIdsdbDatabase, NULL, 0);
12         kIdsdbDatabase->open(kIdsdbDatabase, NULL, idsdbFileName, NULL, DB_HASH, DB_RDONLY, 0644);
13         db_create(&kAliasdbDatabase, NULL, 0);
14         kAliasdbDatabase->open(kAliasdbDatabase, NULL, aliasdbFileName, NULL, DB_HASH, DB_RDONLY, 0644);
15         return 0;
16 }
17
18 int closeDB(){
19         kPartsdbDatabase->close(kPartsdbDatabase, 0);
20         kIdsdbDatabase->close(kIdsdbDatabase, 0);
21         kAliasdbDatabase->close(kAliasdbDatabase, 0);
22         return 0;
23 }
24
25 void searchPartsData(const KGString *in, KGString *out){
26         DBT dbkey, dbdata;
27         char *buf;
28         KGString *temp, *temp2;
29         
30         //cut off the end '-0000' if 'in' end with it
31         temp = kg_string_new(in->str);
32 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) kg_string_set_size(temp, temp->len - 5);
33         if((temp->str)[0] == 'u'){
34                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) kg_string_set_size(temp, temp->len - 4);
35                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
36                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
37                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
38                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
39                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
40         }
41         
42         memset(&dbkey,0,sizeof(DBT));
43         memset(&dbdata,0,sizeof(DBT));
44         dbkey.data = temp->str;
45         dbkey.size = temp->len;
46         kg_string_set_size(out, 0);
47         kPartsdbDatabase->get(kPartsdbDatabase, NULL, &dbkey, &dbdata, 0);
48         if(dbdata.size != 0){
49                 //for temporary : shares glyph both Mincho and Gothic
50                 buf = (char *)malloc(dbdata.size + 1);
51                 strncpy(buf, dbdata.data, dbdata.size);
52                 buf[dbdata.size] = '\0'; 
53                 temp2 = kg_string_new(buf);
54                 //fprintf(stderr,"%s\n",buf);
55                 free(buf);
56                 convert99(temp2, out);
57                 return;
58         }
59 }
60
61 void searchAliasData(const KGString *in, KGString *out){
62         DBT dbkey, dbdata;
63         char *buf;
64         KGString *temp;
65         
66         //cut off the end '-0000' if 'in' end with it
67         temp = kg_string_new(in->str);
68 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) kg_string_set_size(temp, temp->len - 5);
69         if((temp->str)[0] == 'u'){
70                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) kg_string_set_size(temp, temp->len - 4);
71                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
72                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
73                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
74                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
75                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
76         }
77         
78         memset(&dbkey,0,sizeof(DBT));
79         memset(&dbdata,0,sizeof(DBT));
80         dbkey.data = temp->str;
81         dbkey.size = temp->len;
82         kg_string_set_size(out, 0);
83         kAliasdbDatabase->get(kAliasdbDatabase, NULL, &dbkey, &dbdata, 0);
84         if(dbdata.size != 0){
85                 buf = (char *)malloc(dbdata.size + 1);
86                 strncpy(buf, dbdata.data, dbdata.size);
87                 buf[dbdata.size] = '\0'; 
88                 //fprintf(stderr,"%s\n",buf);
89                 kg_string_append(out, buf);
90                 free(buf);
91                 return;
92         }
93
94         memset(&dbkey,0,sizeof(DBT));
95         memset(&dbdata,0,sizeof(DBT));
96         dbkey.data = temp->str;
97         dbkey.size = temp->len;
98         kg_string_set_size(out, 0);
99         kIdsdbDatabase->get(kIdsdbDatabase, NULL, &dbkey, &dbdata, 0);
100         if(dbdata.size != 0){
101                 buf = (char *)malloc(dbdata.size + 1);
102                 strncpy(buf, dbdata.data, dbdata.size);
103                 buf[dbdata.size] = '\0'; 
104                 //fprintf(stderr,"%s\n",buf);
105                 kg_string_append(out, buf);
106                 free(buf);
107         }
108 }