-//kagecgi.c\r
-//\r
-\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <png.h>\r
-#include <glib.h>\r
-#include "kage.h"\r
-#include "kagecgi.h"\r
-\r
-int main(int argc, char *argv[]){\r
- GString *tmp1, *tmp2, *test1, *test2, *filename;\r
- FILE *err, *fp;\r
- char errbuf[errorFileSize];\r
- char *pos, *cur;\r
- int dummy;\r
- int i;\r
-\r
- dummy = initDB();\r
-\r
- //set default\r
- kShotai = kMincho;\r
-// kShotai = kGothic;\r
-// kDesign = 0; //jp\r
- kSize = 200;\r
- kType = 0; //png\r
- kInput = 0; //ids or direct\r
- kResultText = g_string_new("");\r
- kMode = 0;\r
- \r
- //set some param by request\r
-// tmp1 = g_string_new((gchar *)argv[1]);\r
- tmp1 = g_string_new((gchar *)getenv("QUERY_STRING"));\r
- pos = tmp1->str;\r
- \r
- //separate token\r
- if(tmp1->len != 0){\r
- while(1){\r
- cur = strchr(pos, '&');\r
- tmp2 = g_string_new(pos);\r
- if(cur != NULL) g_string_set_size(tmp2, cur - pos);\r
- //got request string\r
-// if(strncmp(tmp2->str, "design=jp", 9) == 0) kDesign = 0;\r
-// else if(strncmp(tmp2->str, "design=cs", 9) == 0) kDesign = 10;\r
-// else if(strncmp(tmp2->str, "design=ct", 9) == 0) kDesign = 11;\r
-// else if(strncmp(tmp2->str, "design=kr", 9) == 0) kDesign = 20;\r
-// else if(strncmp(tmp2->str, "design=vn", 9) == 0) kDesign = 30;\r
-// else if(strncmp(tmp2->str, "design=un", 9) == 0) kDesign = 40;\r
-// else if(strncmp(tmp2->str, "shotai=mincho", 13) == 0) kShotai = kMincho;\r
- if(strncmp(tmp2->str, "shotai=mincho", 13) == 0) kShotai = kMincho;\r
- else if(strncmp(tmp2->str, "shotai=gothic", 13) == 0) kShotai = kGothic;\r
- else if(strncmp(tmp2->str, "shotai=skeleton", 15) == 0) kShotai = kGothic;\r
- else if(strncmp(tmp2->str, "type=png", 8) == 0) kType = 0;\r
- else if(strncmp(tmp2->str, "type=svg", 8) == 0) kType = 1;\r
- else if(strncmp(tmp2->str, "type=eps", 8) == 0) kType = 2;\r
- else if(strncmp(tmp2->str, "type=raw", 8) == 0) kType = 3;\r
- else if(strncmp(tmp2->str, "input=ids", 9) == 0) kInput = 0;\r
- else if(strncmp(tmp2->str, "input=directwithadjust", 22) == 0) kInput = 2;\r
- else if(strncmp(tmp2->str, "input=direct", 12) == 0) kInput = 1;\r
- else if(strncmp(tmp2->str, "size=24", 7) == 0) kSize = 24;\r
- else if(strncmp(tmp2->str, "size=200", 8) == 0) kSize = 200;\r
- else test1 = g_string_new(tmp2->str);\r
- if(cur == NULL) break;\r
- pos = cur + 1;\r
- }\r
- }\r
- else{ // redirected request\r
- kInput = 0;\r
- tmp1 = g_string_new((gchar *)getenv("REDIRECT_URL"));\r
- pos = tmp1->str;\r
- while(1){\r
- cur = strchr(pos, '/');\r
- tmp2 = g_string_new(pos);\r
- if(cur != NULL) g_string_set_size(tmp2, cur - pos);\r
- //got request string\r
-// if(strncmp(tmp2->str, "jp", 2) == 0) kDesign = 0;\r
-// else if(strncmp(tmp2->str, "cs", 2) == 0) kDesign = 10;\r
-// else if(strncmp(tmp2->str, "ct", 2) == 0) kDesign = 11;\r
-// else if(strncmp(tmp2->str, "kr", 2) == 0) kDesign = 20;\r
-// else if(strncmp(tmp2->str, "vn", 2) == 0) kDesign = 30;\r
-// else if(strncmp(tmp2->str, "un", 2) == 0) kDesign = 40;\r
-// else if(strncmp(tmp2->str, "mincho", 6) == 0) kShotai = kMincho;\r
- if(strncmp(tmp2->str, "mincho", 6) == 0) kShotai = kMincho;\r
- else if(strncmp(tmp2->str, "gothic", 6) == 0) kShotai = kGothic;\r
- else if(strncmp(tmp2->str, "skeleton", 8) == 0) kShotai = kGothic;\r
- else if(strncmp(tmp2->str, "v0.4", 4) == 0);\r
- else test1 = g_string_new(tmp2->str);\r
- if(cur == NULL) break;\r
- pos = cur + 1;\r
- }\r
- if(strncmp(test1->str + test1->len - 4, ".png", 4) == 0) kType = 0;\r
- if(strncmp(test1->str + test1->len - 4, ".svg", 4) == 0) kType = 1;\r
- if(strncmp(test1->str + test1->len - 4, ".eps", 4) == 0) kType = 2;\r
- if(strncmp(test1->str + test1->len - 4, ".raw", 4) == 0) kType = 3;\r
- g_string_set_size(test1, test1->len - 4);\r
- }\r
- \r
- //clear result buffer\r
- test2 = g_string_new("");\r
- if(kType == 2){\r
- g_string_append(kResultText, "%!PS-Adobe-3.0 EPSF-3.0\n");\r
- g_string_append(kResultText, "%%BoundingBox: 0 -208 1024 816\n");\r
- g_string_append(kResultText, "%%Pages: 0\n");\r
- g_string_append(kResultText, "%%Title: ");\r
- g_string_append(kResultText, test1->str);\r
- g_string_append(kResultText, "\n");\r
- g_string_append(kResultText, "%%Creator: KAGE System\n");\r
- g_string_append(kResultText, "%%CreationDate: 00:00 1-1-2004\n");\r
- g_string_append(kResultText, "%%EndComments\n");\r
- g_string_append(kResultText, "%%EndProlog\n");\r
- g_string_append(kResultText, "%%Page \"");\r
- g_string_append(kResultText, test1->str);\r
- g_string_append(kResultText, "\" 1\n");\r
- g_string_append(kResultText, "newpath\n");\r
- }\r
- kageCanvas = initPng(canvasWidth, canvasHeight);\r
- if(kInput == 0) generateGlyph(test1, test2);\r
- else{\r
- convert99(test1, test2);\r
- // g_string_append(test2, test1->str);\r
- }\r
-\r
- if(kType == 0){ //png(image)\r
- if(test2->len != 0){\r
- if(kInput != 1){ //0 and 2\r
- test2 = CalcSizes(test2, 1);\r
- }\r
- DrawBox();\r
- drawGlyph(test2, 0);\r
- //output to file\r
- filename = g_string_new(pngFilePath);\r
-// if(kDesign == 0) g_string_append(filename, "jp/");\r
-// else if(kDesign == 10) g_string_append(filename, "cs/");\r
-// else if(kDesign == 11) g_string_append(filename, "ct/");\r
-// else if(kDesign == 20) g_string_append(filename, "kr/");\r
-// else if(kDesign == 30) g_string_append(filename, "vn/");\r
-// else if(kDesign == 40) g_string_append(filename, "un/");\r
- if(kShotai == kMincho) g_string_append(filename, "mincho/");\r
- else if(kShotai == kGothic) g_string_append(filename, "gothic/");//skeleton??\r
- g_string_append(filename, test1->str);\r
- g_string_append(filename, ".png");\r
- \r
-//skip for adjustment mode\r
-// fp = fopen(filename->str, "w");\r
-// writePng(pngWidth, pngHeight, kageCanvas, fp);\r
-// fclose(fp);\r
- //output to stdout\r
- fprintf(stdout, "Content-type: image/png\n\n");\r
- writePng(pngWidth, pngHeight, kageCanvas, stdout);\r
- //done\r
- closePng(pngWidth, pngHeight, kageCanvas);\r
- }\r
- else{\r
- err = fopen("error.png", "r");\r
- fread(errbuf, sizeof(char), errorFileSize, err);\r
- // printf("An error occurred.\r\n");\r
- fprintf(stdout, "Content-type: image/png\n\n");\r
- fwrite(errbuf, sizeof(char), errorFileSize, stdout);\r
- fclose(err);\r
- }\r
- }\r
- else if(kType == 1){ //svg(vector graphics)\r
- }\r
- else if(kType == 2){ //eps(vector graphics)\r
- if(test2->len != 0){\r
- test2 = CalcSizes(test2, 1);\r
- kMode = 1;\r
- drawGlyph(test2, 0);\r
- g_string_append(kResultText, "fill\n");\r
- g_string_append(kResultText, "%%EOF\n");\r
- fprintf(stdout, "Content-type: application/postscript\n\n");\r
- fprintf(stdout, "%s", kResultText->str);\r
- }\r
- else{\r
- fprintf(stdout, "Content-type: text/plain\n\n");\r
- fprintf(stdout, "An error occurred.");\r
- }\r
- }\r
- else{ //raw(text)\r
- if(test2->len != 0){\r
- fprintf(stdout, "Content-type: text/plain\n\n");\r
- fprintf(stdout, "result=%s", test2->str);\r
- }\r
- else{\r
- fprintf(stdout, "Content-type: text/plain\n\n");\r
- fprintf(stdout, "result=nodata");\r
- }\r
- }\r
- dummy = closeDB();\r
- \r
- return 0;\r
-}\r
-\r
+//kagecgi.c
+//
+
+#include "kage.h"
+#include "kagecgi.h"
+#include "sysdep.h"
+
+int main(int argc, char *argv[]){
+ KGString *tmp1, *tmp2, *test1, *test2, *filename;
+ FILE *err;
+ char errbuf[errorFileSize];
+ char *pos, *cur;
+ int dummy;
+ int type;
+
+ dummy = initDB();
+
+ //set default
+ kShotai = kMincho;
+ //kShotai = kGothic;
+ kSize = 200;
+ kType = 0; //png
+ kInput = 0; //ids or direct
+ kResultText = kg_string_new("");
+ kMode = 0;
+
+ //confirm request
+ type = 0;
+ //GET request
+ if(type == 0){
+ tmp1 = kg_string_new((kgchar *)getenv("QUERY_STRING"));
+ if(tmp1->len != 0) type = 2;
+ }
+ //argv(detect after GET request)
+ if(type == 0){
+ tmp1 = kg_string_new((kgchar *)argv[1]);
+ if(tmp1->len != 0) type = 1;
+ }
+ //redirect
+ if(type == 0){
+ tmp1 = kg_string_new((kgchar *)getenv("REDIRECT_URL"));
+ if(tmp1->len != 0) type = 3;
+ }
+ //error
+ if(type == 0){
+ fprintf(stderr, "Request Error.\n");
+ return 0;
+ }
+ pos = tmp1->str;
+
+ //separate token
+ if(type == 1 || type == 2){ //argv or GET request
+ while(1){
+ cur = strchr(pos, '&');
+ tmp2 = kg_string_new(pos);
+ if(cur != NULL) kg_string_set_size(tmp2, cur - pos);
+ //got request string
+ if(strncmp(tmp2->str, "shotai=mincho", 13) == 0) kShotai = kMincho;
+ else if(strncmp(tmp2->str, "shotai=gothic", 13) == 0) kShotai = kGothic;
+ else if(strncmp(tmp2->str, "shotai=skeleton", 15) == 0) kShotai = kGothic;
+ else if(strncmp(tmp2->str, "type=png", 8) == 0) kType = 0;
+ else if(strncmp(tmp2->str, "type=svg", 8) == 0) kType = 1;
+ else if(strncmp(tmp2->str, "type=eps", 8) == 0) kType = 2;
+ else if(strncmp(tmp2->str, "type=raw", 8) == 0) kType = 3;
+ else if(strncmp(tmp2->str, "input=ids", 9) == 0) kInput = 0;
+ else if(strncmp(tmp2->str, "input=directwithadjust", 22) == 0) kInput = 2;
+ else if(strncmp(tmp2->str, "input=direct", 12) == 0) kInput = 1;
+ else if(strncmp(tmp2->str, "size=24", 7) == 0) kSize = 24;
+ else if(strncmp(tmp2->str, "size=200", 8) == 0) kSize = 200;
+ else test1 = kg_string_new(tmp2->str);
+ if(cur == NULL) break;
+ pos = cur + 1;
+ }
+ }
+ else{ // redirected request
+ kInput = 0;
+ while(1){
+ cur = strchr(pos, '/');
+ tmp2 = kg_string_new(pos);
+ if(cur != NULL) kg_string_set_size(tmp2, cur - pos);
+ //got request string
+ if(strncmp(tmp2->str, "mincho", 6) == 0) kShotai = kMincho;
+ else if(strncmp(tmp2->str, "gothic", 6) == 0) kShotai = kGothic;
+ else if(strncmp(tmp2->str, "skeleton", 8) == 0) kShotai = kGothic;
+ else if(strncmp(tmp2->str, "v0.4", 4) == 0);
+ else test1 = kg_string_new(tmp2->str);
+ if(cur == NULL) break;
+ pos = cur + 1;
+ }
+ if(strncmp(test1->str + test1->len - 4, ".png", 4) == 0) kType = 0;
+ if(strncmp(test1->str + test1->len - 4, ".svg", 4) == 0) kType = 1;
+ if(strncmp(test1->str + test1->len - 4, ".eps", 4) == 0) kType = 2;
+ if(strncmp(test1->str + test1->len - 4, ".raw", 4) == 0) kType = 3;
+ kg_string_set_size(test1, test1->len - 4);
+ }
+
+ //clear result buffer
+ test2 = kg_string_new("");
+ if(kType == 1){ //svg
+ kg_string_append(kResultText, "<?xml version=\"1.0\"?>\n");
+ kg_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");
+ kg_string_append(kResultText, "<svg width=\"1024\" height=\"1024\" viewBox=\"0 0 1024 1024\">");
+ kg_string_append(kResultText, "<g style=\"fill: black; stroke: black\">");
+ }
+ else if(kType == 2){ //eps
+ kg_string_append(kResultText, "%!PS-Adobe-3.0 EPSF-3.0\n");
+ kg_string_append(kResultText, "%%BoundingBox: 0 -208 1024 816\n");
+ kg_string_append(kResultText, "%%Pages: 0\n");
+ kg_string_append(kResultText, "%%Title: ");
+ kg_string_append(kResultText, test1->str);
+ kg_string_append(kResultText, "\n");
+ kg_string_append(kResultText, "%%Creator: KAGE System\n");
+ kg_string_append(kResultText, "%%CreationDate: 00:00 1-1-2004\n");
+ kg_string_append(kResultText, "%%EndComments\n");
+ kg_string_append(kResultText, "%%EndProlog\n");
+ kg_string_append(kResultText, "%%Page \"");
+ kg_string_append(kResultText, test1->str);
+ kg_string_append(kResultText, "\" 1\n");
+ kg_string_append(kResultText, "newpath\n");
+ }
+ kageCanvas = initPng(canvasWidth, canvasHeight);
+ if(kInput == 0) generateGlyph(test1, test2);
+ else{
+ convert99(test1, test2);
+ // kg_string_append(test2, test1->str);
+ }
+
+ if(test2->len != 0) test2 = finalAdjustment(test2);
+
+ if(kType == 0){ //png(image)
+ if(test2->len != 0){
+ if(kInput != 1){ //0 and 2
+ test2 = CalcSizes(test2, 1);
+ }
+ DrawBox();
+ drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
+ //output to file
+ filename = kg_string_new(pngFilePath);
+ if(kShotai == kMincho) kg_string_append(filename, "mincho/");
+ else if(kShotai == kGothic) kg_string_append(filename, "gothic/");//skeleton??
+ kg_string_append(filename, test1->str);
+ kg_string_append(filename, ".png");
+
+ //skip for adjustment mode
+ //fp = fopen(filename->str, "w");
+ //writePng(pngWidth, pngHeight, kageCanvas, fp);
+ //fclose(fp);
+ //output to stdout
+ if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");
+ writePng(pngWidth, pngHeight, kageCanvas, stdout);
+ //done
+ closePng(pngWidth, pngHeight, kageCanvas);
+ }
+ else{
+ err = fopen(errorFileName, "r");
+ fread(errbuf, sizeof(char), errorFileSize, err);
+ //printf("An error occurred.\r\n");
+ if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");
+ fwrite(errbuf, sizeof(char), errorFileSize, stdout);
+ fclose(err);
+ }
+ }
+ else if(kType == 1){ //svg(vector graphics)
+ if(test2->len != 0){
+ test2 = CalcSizes(test2, 1);
+ kMode = 1;
+ drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
+ kg_string_append(kResultText, "</g></svg>\n");
+ if(type != 1) fprintf(stdout, "Content-type: image/svg-xml\n\n");
+ fprintf(stdout, "%s", kResultText->str);
+ }
+ else{
+ if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
+ fprintf(stdout, "An error occurred.");
+ }
+ }
+ else if(kType == 2){ //eps(vector graphics)
+ if(test2->len != 0){
+ test2 = CalcSizes(test2, 1);
+ kMode = 2;
+ drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
+ kg_string_append(kResultText, "fill\n");
+ kg_string_append(kResultText, "%%EOF\n");
+ if(type != 1) fprintf(stdout, "Content-type: application/postscript\n\n");
+ fprintf(stdout, "%s", kResultText->str);
+ }
+ else{
+ if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
+ fprintf(stdout, "An error occurred.");
+ }
+ }
+ else{ //raw(text)
+
+ if(test2->len != 0){
+ test2 = CalcSizes(test2, 1);
+ if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
+ fprintf(stdout, "result=%s", test2->str);
+ }
+ else{
+ if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
+ fprintf(stdout, "result=nodata");
+ }
+ }
+ dummy = closeDB();
+
+ return 0;
+}
+