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