remove engine and glyphwiki from repogitry.
[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   //else{
42   //  kg_string_set_size(temp, in->len);
43   //}
44   
45   memset(&dbkey,0,sizeof(DBT));
46   memset(&dbdata,0,sizeof(DBT));
47   dbkey.data = temp->str;
48   dbkey.size = temp->len;
49   kg_string_set_size(out, 0);
50   //fprintf(stderr, "trytogetparts:%s(%s:%d)\n", in->str, temp->str,temp->len);
51   kPartsdbDatabase->get(kPartsdbDatabase, NULL, &dbkey, &dbdata, 0);
52   if(dbdata.size != 0){
53     //fprintf(stderr, "getparts:%s\n", in->str);
54     //for temporary : shares glyph both Mincho and Gothic
55     buf = (char *)malloc(dbdata.size + 1);
56     strncpy(buf, dbdata.data, dbdata.size);
57     buf[dbdata.size] = '\0'; 
58     temp2 = kg_string_new(buf);
59     //fprintf(stderr,"%s\n",buf);
60     free(buf);
61     convert99(temp2, out);
62     return;
63   }
64 }
65
66 void searchAliasData(const KGString *in, KGString *out){
67   DBT dbkey, dbdata;
68   char *buf;
69   KGString *temp;
70   
71   //cut off the end '-0000' if 'in' end with it
72   temp = kg_string_new(in->str);
73   //if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) kg_string_set_size(temp, temp->len - 5);
74   if((temp->str)[0] == 'u'){
75     if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) kg_string_set_size(temp, temp->len - 4);
76     else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
77     else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
78     else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
79     else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
80     else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) kg_string_set_size(temp, temp->len - 2);
81   }
82   
83   memset(&dbkey,0,sizeof(DBT));
84   memset(&dbdata,0,sizeof(DBT));
85   dbkey.data = temp->str;
86   dbkey.size = temp->len;
87   kg_string_set_size(out, 0);
88   kAliasdbDatabase->get(kAliasdbDatabase, NULL, &dbkey, &dbdata, 0);
89   if(dbdata.size != 0){
90     buf = (char *)malloc(dbdata.size + 1);
91     strncpy(buf, dbdata.data, dbdata.size);
92     buf[dbdata.size] = '\0'; 
93     //fprintf(stderr,"%s\n",buf);
94     kg_string_append(out, buf);
95     free(buf);
96     return;
97   }
98   
99   memset(&dbkey,0,sizeof(DBT));
100   memset(&dbdata,0,sizeof(DBT));
101   dbkey.data = temp->str;
102   dbkey.size = temp->len;
103   kg_string_set_size(out, 0);
104   kIdsdbDatabase->get(kIdsdbDatabase, NULL, &dbkey, &dbdata, 0);
105   if(dbdata.size != 0){
106     buf = (char *)malloc(dbdata.size + 1);
107     strncpy(buf, dbdata.data, dbdata.size);
108     buf[dbdata.size] = '\0'; 
109     //fprintf(stderr,"%s\n",buf);
110     kg_string_append(out, buf);
111     free(buf);
112   }
113 }