Change description of STRUCT. Remove some comments, unused vars.
[chise/kage.git] / kagecgi / kagecgi.c
1 //kagecgi.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 main(int argc, char *argv[]){\r
9         GString *tmp1, *tmp2, *test1, *test2, *filename;\r
10         FILE *err;\r
11         char errbuf[errorFileSize];\r
12         char *pos, *cur;\r
13         int dummy;\r
14         int type;\r
15 \r
16         dummy = initDB();\r
17 \r
18         //set default\r
19         kShotai = kMincho;\r
20 //      kShotai = kGothic;\r
21         kSize = 200;\r
22         kType = 0; //png\r
23         kInput = 0; //ids or direct\r
24         kResultText = g_string_new("");\r
25         kMode = 0;\r
26         \r
27         //confirm request\r
28         type = 0;\r
29         //GET request\r
30         if(type == 0){\r
31           tmp1 = g_string_new((gchar *)getenv("QUERY_STRING"));\r
32           if(tmp1->len != 0) type = 2;\r
33         }\r
34         //argv(detect after GET request)\r
35         if(type == 0){
36                 tmp1 = g_string_new((gchar *)argv[1]);\r
37                 if(tmp1->len != 0) type = 1;
38         }
39         //redirect\r
40         if(type == 0){\r
41           tmp1 = g_string_new((gchar *)getenv("REDIRECT_URL"));\r
42           if(tmp1->len != 0) type = 3;\r
43         }\r
44         //error\r
45         if(type == 0){\r
46           fprintf(stderr, "Request Error.\n");\r
47           return 0;\r
48         }\r
49         pos = tmp1->str;\r
50         \r
51         //separate token\r
52         if(type == 1 || type == 2){ //argv or GET request\r
53                 while(1){\r
54                         cur = strchr(pos, '&');\r
55                         tmp2 = g_string_new(pos);\r
56                         if(cur != NULL) g_string_set_size(tmp2, cur - pos);\r
57                         //got request string\r
58                         if(strncmp(tmp2->str, "shotai=mincho", 13) == 0) kShotai = kMincho;\r
59                         else if(strncmp(tmp2->str, "shotai=gothic", 13) == 0) kShotai = kGothic;\r
60                         else if(strncmp(tmp2->str, "shotai=skeleton", 15) == 0) kShotai = kGothic;\r
61                         else if(strncmp(tmp2->str, "type=png", 8) == 0) kType = 0;\r
62                         else if(strncmp(tmp2->str, "type=svg", 8) == 0) kType = 1;\r
63                         else if(strncmp(tmp2->str, "type=eps", 8) == 0) kType = 2;\r
64                         else if(strncmp(tmp2->str, "type=raw", 8) == 0) kType = 3;\r
65                         else if(strncmp(tmp2->str, "input=ids", 9) == 0) kInput = 0;\r
66                         else if(strncmp(tmp2->str, "input=directwithadjust", 22) == 0) kInput = 2;\r
67                         else if(strncmp(tmp2->str, "input=direct", 12) == 0) kInput = 1;\r
68                         else if(strncmp(tmp2->str, "size=24", 7) == 0) kSize = 24;\r
69                         else if(strncmp(tmp2->str, "size=200", 8) == 0) kSize = 200;\r
70                         else test1 = g_string_new(tmp2->str);\r
71                         if(cur == NULL) break;\r
72                         pos = cur + 1;\r
73                 }\r
74         }\r
75         else{ // redirected request\r
76                 kInput = 0;\r
77                 while(1){\r
78                         cur = strchr(pos, '/');\r
79                         tmp2 = g_string_new(pos);\r
80                         if(cur != NULL) g_string_set_size(tmp2, cur - pos);\r
81                         //got request string\r
82                         if(strncmp(tmp2->str, "mincho", 6) == 0) kShotai = kMincho;\r
83                         else if(strncmp(tmp2->str, "gothic", 6) == 0) kShotai = kGothic;\r
84                         else if(strncmp(tmp2->str, "skeleton", 8) == 0) kShotai = kGothic;\r
85                         else if(strncmp(tmp2->str, "v0.4", 4) == 0);\r
86                         else test1 = g_string_new(tmp2->str);\r
87                         if(cur == NULL) break;\r
88                         pos = cur + 1;\r
89                 }\r
90                 if(strncmp(test1->str + test1->len - 4, ".png", 4) == 0) kType = 0;\r
91                 if(strncmp(test1->str + test1->len - 4, ".svg", 4) == 0) kType = 1;\r
92                 if(strncmp(test1->str + test1->len - 4, ".eps", 4) == 0) kType = 2;\r
93                 if(strncmp(test1->str + test1->len - 4, ".raw", 4) == 0) kType = 3;\r
94                 g_string_set_size(test1, test1->len - 4);\r
95         }\r
96         \r
97         //clear result buffer\r
98         test2 = g_string_new("");\r
99         if(kType == 1){ //svg\r
100           g_string_append(kResultText, "<?xml version=\"1.0\"?>\n");\r
101           g_string_append(kResultText, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n");\r
102           g_string_append(kResultText, "<svg viewBox=\"0 0 1024 1024\">");\r
103         }\r
104         else if(kType == 2){ //eps\r
105                 g_string_append(kResultText, "%!PS-Adobe-3.0 EPSF-3.0\n");\r
106                 g_string_append(kResultText, "%%BoundingBox: 0 -208 1024 816\n");\r
107                 g_string_append(kResultText, "%%Pages: 0\n");\r
108                 g_string_append(kResultText, "%%Title: ");\r
109                 g_string_append(kResultText, test1->str);\r
110                 g_string_append(kResultText, "\n");\r
111                 g_string_append(kResultText, "%%Creator: KAGE System\n");\r
112                 g_string_append(kResultText, "%%CreationDate: 00:00 1-1-2004\n");\r
113                 g_string_append(kResultText, "%%EndComments\n");\r
114                 g_string_append(kResultText, "%%EndProlog\n");\r
115                 g_string_append(kResultText, "%%Page \"");\r
116                 g_string_append(kResultText, test1->str);\r
117                 g_string_append(kResultText, "\" 1\n");\r
118                 g_string_append(kResultText, "newpath\n");\r
119         }\r
120         kageCanvas = initPng(canvasWidth, canvasHeight);\r
121         if(kInput == 0) generateGlyph(test1, test2);\r
122         else{\r
123           convert99(test1, test2);\r
124           //      g_string_append(test2, test1->str);\r
125         }\r
126 \r
127         if(kType == 0){ //png(image)\r
128                 if(test2->len != 0){\r
129                   if(kInput != 1){ //0 and 2\r
130                     test2 = CalcSizes(test2, 1);\r
131                   }\r
132                         DrawBox();\r
133                         drawGlyph(test2, 0);\r
134                         //output to file\r
135                         filename = g_string_new(pngFilePath);\r
136                         if(kShotai == kMincho) g_string_append(filename, "mincho/");\r
137                         else if(kShotai == kGothic) g_string_append(filename, "gothic/");//skeleton??\r
138                         g_string_append(filename, test1->str);\r
139                         g_string_append(filename, ".png");\r
140                         \r
141 //skip for adjustment mode\r
142 //                      fp = fopen(filename->str, "w");\r
143 //                      writePng(pngWidth, pngHeight, kageCanvas, fp);\r
144 //                      fclose(fp);\r
145                         //output to stdout\r
146                         if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");\r
147                         writePng(pngWidth, pngHeight, kageCanvas, stdout);\r
148                         //done\r
149                         closePng(pngWidth, pngHeight, kageCanvas);\r
150                 }\r
151                 else{\r
152                         err = fopen(errorFileName, "r");\r
153                         fread(errbuf, sizeof(char), errorFileSize, err);\r
154                 //      printf("An error occurred.\r\n");\r
155                         if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");\r
156                         fwrite(errbuf, sizeof(char), errorFileSize, stdout);\r
157                         fclose(err);\r
158                 }\r
159         }\r
160         else if(kType == 1){ //svg(vector graphics)\r
161                 if(test2->len != 0){\r
162                         test2 = CalcSizes(test2, 1);\r
163                         kMode = 1;\r
164                         drawGlyph(test2, 0);\r
165                         g_string_append(kResultText, "</svg>\n");\r
166                         if(type != 1) fprintf(stdout, "Content-type: image/svg-xml\n\n");\r
167                         fprintf(stdout, "%s", kResultText->str);\r
168                 }\r
169                 else{\r
170                         if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");\r
171                         fprintf(stdout, "An error occurred.");\r
172                 }\r
173         }\r
174         else if(kType == 2){ //eps(vector graphics)\r
175                 if(test2->len != 0){\r
176                         test2 = CalcSizes(test2, 1);\r
177                         kMode = 2;\r
178                         drawGlyph(test2, 0);\r
179                         g_string_append(kResultText, "fill\n");\r
180                         g_string_append(kResultText, "%%EOF\n");\r
181                         if(type != 1) fprintf(stdout, "Content-type: application/postscript\n\n");\r
182                         fprintf(stdout, "%s", kResultText->str);\r
183                 }\r
184                 else{\r
185                         if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");\r
186                         fprintf(stdout, "An error occurred.");\r
187                 }\r
188         }\r
189         else{ //raw(text)\r
190 \r
191                 if(test2->len != 0){\r
192                         test2 = CalcSizes(test2, 1);\r
193                         if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");\r
194                         fprintf(stdout, "result=%s", test2->str);\r
195                 }\r
196                 else{\r
197                         if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");\r
198                         fprintf(stdout, "result=nodata");\r
199                 }\r
200         }\r
201         dummy = closeDB();\r
202         \r
203         return 0;\r
204 }\r
205 \r