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