Fixed typos in comment area...
[chise/kage.git] / kagecgi / kagedb.c
1 //kagedb.c\r
2 //\r
3 \r
4 #include <db1/db.h>\r
5 //#include <db2/db_185.h>\r
6 \r
7 #include <sys/fcntl.h>\r
8 #include <glib.h>\r
9 #include "kagecgi.h"\r
10 #include "kage.h"\r
11 \r
12 int initDB(){\r
13         kDatabase = dbopen(databaseFileName, O_RDWR|O_CREAT, 0666, DB_HASH, NULL);\r
14         return 0;\r
15 }\r
16 \r
17 int closeDB(){\r
18         kDatabase->close(kDatabase);\r
19         return 0;\r
20 }\r
21 \r
22 void searchPartsData(const GString *in, GString *out){\r
23         DBT dbkey, dbdata;\r
24         char *start, *end;\r
25         GString *temp, *temp2;\r
26         \r
27         //cut off the end '-0000' if 'in' end with it\r
28         temp = g_string_new(in->str);\r
29 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) g_string_set_size(temp, temp->len - 5);\r
30         if((temp->str)[0] == 'u'){\r
31                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) g_string_set_size(temp, temp->len - 4);\r
32                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
33                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
34                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
35                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
36                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
37         }\r
38         \r
39         memset(&dbkey,0,sizeof(DBT));\r
40         memset(&dbdata,0,sizeof(DBT));\r
41         dbkey.data = temp->str;\r
42         dbkey.size = temp->len;\r
43         g_string_set_size(out, 0);\r
44         temp2 = g_string_new("");\r
45         kDatabase->get(kDatabase, &dbkey, &dbdata, 0);\r
46         if(dbdata.size != 0){\r
47                 //first:search selected shotai\r
48                 if(kShotai == kMincho) start = strstr(dbdata.data, ",mincho,");\r
49                 else start = strstr(dbdata.data, ",gothic,");\r
50                 if(start != NULL){\r
51                         start = strchr((start+8), ',');\r
52                         if(start != NULL){\r
53                                 start = strchr((start+1), ',');\r
54                                 if(start != NULL){\r
55                                         end = strchr((start+1), ',');\r
56                                         if(end != NULL){\r
57                                                 g_string_append_len(temp2, (start+1), end - start - 2 + 1);\r
58                                                 convert99(temp2, out);\r
59                                                 return;\r
60                                         }\r
61                                 }\r
62                         }\r
63                 }\r
64                 //second:search another shotai\r
65                 if(kShotai == kMincho) start = strstr(dbdata.data, ",gothic,");\r
66                 else start = strstr(dbdata.data, ",mincho,");\r
67                 if(start != NULL){\r
68                         start = strchr((start+8), ',');\r
69                         if(start != NULL){\r
70                                 start = strchr((start+1), ',');\r
71                                 if(start != NULL){\r
72                                         end = strchr((start+1), ',');\r
73                                         if(end != NULL){\r
74                                                 g_string_append_len(temp2, (start+1), end - start - 2 + 1);\r
75                                                 convert99(temp2, out);\r
76                                                 return;\r
77                                         }\r
78                                 }\r
79                         }\r
80                 }\r
81         }\r
82 }\r
83 \r
84 void searchAliasData(const GString *in, GString *out){\r
85         DBT dbkey, dbdata;\r
86         char *start, *end;\r
87         GString *temp;\r
88         \r
89         //cut off the end '-0000' if 'in' end with it\r
90         temp = g_string_new(in->str);\r
91 //      if(strncmp(temp->str + temp->len - 5, "-0000", 5) == 0) g_string_set_size(temp, temp->len - 5);\r
92         if((temp->str)[0] == 'u'){\r
93                 if(strncmp(temp->str + temp->len - 4, "-j00", 4) == 0) g_string_set_size(temp, temp->len - 4);\r
94                 else if(strncmp(temp->str + temp->len - 4, "-g00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
95                 else if(strncmp(temp->str + temp->len - 4, "-t00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
96                 else if(strncmp(temp->str + temp->len - 4, "-k00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
97                 else if(strncmp(temp->str + temp->len - 4, "-v00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
98                 else if(strncmp(temp->str + temp->len - 4, "-u00", 4) == 0) g_string_set_size(temp, temp->len - 2);\r
99         }\r
100         \r
101         memset(&dbkey,0,sizeof(DBT));\r
102         memset(&dbdata,0,sizeof(DBT));\r
103         dbkey.data = temp->str;\r
104         dbkey.size = temp->len;\r
105         g_string_set_size(out, 0);\r
106         kDatabase->get(kDatabase, &dbkey, &dbdata, 0);\r
107         if(dbdata.size != 0){\r
108                 start = strstr(dbdata.data, ",linkto,");\r
109                 if(start != NULL){\r
110                         start = strchr((start+8), ',');\r
111                         if(start != NULL){\r
112                                 start = strchr((start+1), ',');\r
113                                 if(start != NULL){\r
114                                         end = strchr((start+1), ',');\r
115                                         if(end != NULL){\r
116                                                 g_string_append_len(out, (start+1), end - start - 2 + 1);\r
117                                         }\r
118                                 }\r
119                         }\r
120                 }\r
121         }\r
122 }\r
123 \r