Improved shape of L2RD harai's tail.
[chise/kage.git] / kagecgi / kagedf.c
index 079c432..adca7fe 100755 (executable)
-//kagedf.c\r
-//\r
-#include "kage.h"\r
-\r
-void dfDrawFont(int a1, int a2, int a3,\r
-       int x1, int y1,\r
-       int x2, int y2,\r
-       int x3, int y3,\r
-       int x4, int y4){\r
-       int tx1, tx2, tx3, tx4, ty1, ty2, ty3, ty4, v;\r
-       double rad;\r
-       \r
-       if(kShotai == kMincho){\r
-               switch(a1 % 100){\r
-               case 0:\r
-                       break;\r
-       case 1:\r
-               if(a3 == 4){\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage, y2, 1, 14);\r
-               }\r
-               else{\r
-                               cdDrawLine(x1, y1, x2, y2, a2, a3);\r
-               }\r
-               break;\r
-       case 2:\r
-       case 12:\r
-               if(a3 == 4){\r
-                               if(x2 == x3){\r
-                                       tx1 = x3;\r
-                                       ty1 = y3 - kMage;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       tx1 = x3 - kMage;\r
-                                       ty1 = y3;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x3 - kMage * cos(rad) * v;\r
-                                       ty1 = y3 - kMage * sin(rad) * v;\r
-                               }\r
-                               cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage, y3, 1, 14);\r
-               }\r
-               else if(a3 == 5){\r
-                               cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 15);\r
-               }\r
-               else{\r
-                               cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);\r
-               }\r
-               break;\r
-               case 3:\r
-               if(a3 == 5){\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               if(x2 == x3){\r
-                                       if(y2 < y3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2;\r
-                                       ty2 = y2 + kMage * v;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       if(x2 < x3){ v = 1; } else { v = -1; }\r
-                                       tx2 = x2 + kMage * v;\r
-                                       ty2 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * cos(rad) * v;\r
-                                       ty2 = y2 + kMage * sin(rad) * v;\r
-                               }\r
-                               tx3 = x3 - kMage;\r
-                               ty3 = y3;\r
-                               tx4 = x3 + kMage * 0.5;\r
-                               ty4 = y3 - kMage * 2;\r
-                               \r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
-                               cdDrawLine(tx2, ty2, tx3, ty3, 6, 5); // bolder by force\r
-                       }\r
-                       else{\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else { v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               if(x2 == x3){\r
-                                       if(y2 < y3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2;\r
-                                       ty2 = y2 + kMage * v;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * v;\r
-                                       ty2 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * cos(rad) * v;\r
-                                       ty2 = y2 + kMage * sin(rad) * v;\r
-                               }\r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
-                               cdDrawLine(tx2, ty2, x3, y3, 6, a3); // bolder by force\r
-                       }\r
-               break;\r
-           case 6:\r
-               if(a3 == 5){\r
-                               tx1 = x4 - kMage;\r
-                               ty1 = y4;\r
-                               tx2 = x4 + kMage * 0.5;\r
-                               ty2 = y4 - kMage * 2;\r
-                               if(a2 == 7 || a3 == 7){\r
-                                       cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
-                                       cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, 15);\r
-                               }\r
-                               else{\r
-                                       cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
-                                       cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, 15);\r
-                               }\r
-                       }\r
-                       else{\r
-                               if(a2 == 7 || a3 == 7){\r
-                                       cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
-                                       cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, a3);\r
-                               }\r
-                               else{\r
-                                       cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
-                                       cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
-                               }\r
-                       }\r
-                       break;\r
-       case 7:\r
-         cdDrawLine(x1, y1, x2, y2, a2, 1);\r
-         cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, 7);\r
-         break;\r
-       case 9: // may not be exist\r
-         break;\r
-       default:\r
-         break;\r
-       }\r
-       }\r
-    \r
-    else{ // gothic\r
-       switch(a1 % 100){\r
-       case 0:\r
-               break;\r
-       case 1:\r
-               if(a3 == 4){\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage * 2, y2 - kMage * 0.5, 1, 0);\r
-               }\r
-               else{\r
-                               cdDrawLine(x1, y1, x2, y2, a2, a3);\r
-               }\r
-                       break;\r
-       case 2:\r
-       case 12:\r
-               if(a3 == 4){\r
-                               if(x2 == x3){\r
-                                       tx1 = x3;\r
-                                       ty1 = y3 - kMage;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       tx1 = x3 - kMage;\r
-                                       ty1 = y3;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x3 - kMage * cos(rad) * v;\r
-                                       ty1 = y3 - kMage * sin(rad) * v;\r
-                               }\r
-                               cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage * 2, y3 - kMage * 0.5, 1, 0);\r
-               }\r
-               else if(a3 == 5){\r
-                               tx1 = x3 + kMage;\r
-                               ty1 = y3;\r
-                               tx2 = tx1 + kMage * 0.5;\r
-                               ty2 = y3 - kMage * 2;\r
-                               cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 1);\r
-                               cdDrawCurve(x3, y3, tx1, ty1, tx2, ty2, 1, 0);\r
-               }\r
-               else{\r
-                               cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);\r
-               }\r
-               break;\r
-       case 3:\r
-               if(a3 == 5){\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               if(x2 == x3){\r
-                                       if(y2 < y3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2;\r
-                                       ty2 = y2 + kMage * v;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * v;\r
-                                       ty2 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * cos(rad) * v;\r
-                                       ty2 = y2 + kMage * sin(rad) * v;\r
-                               }\r
-                               tx3 = x3 - kMage;\r
-                               ty3 = y3;\r
-                               tx4 = x3 + kMage * 0.5;\r
-                               ty4 = y3 - kMage * 2;\r
-                               \r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
-                               cdDrawLine(tx2, ty2, tx3, ty3, 1, 1);\r
-                               cdDrawCurve(tx3, ty3, x3, y3, tx4, ty4, 1, 0);\r
-               }\r
-               else{\r
-                               if(x1 == x2){\r
-                                       if(y1 < y2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2;\r
-                                       ty1 = y2 - kMage * v;\r
-                               }\r
-                               else if(y1 == y2){\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * v;\r
-                                       ty1 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
-                                       if(x1 < x2){ v = 1; } else{ v = -1; }\r
-                                       tx1 = x2 - kMage * cos(rad) * v;\r
-                                       ty1 = y2 - kMage * sin(rad) * v;\r
-                               }\r
-                               if(x2 == x3){\r
-                                       if(y2 < y3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2;\r
-                                       ty2 = y2 + kMage * v;\r
-                               }\r
-                               else if(y2 == y3){\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * v;\r
-                                       ty2 = y2;\r
-                               }\r
-                               else{\r
-                                       rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
-                                       if(x2 < x3){ v = 1; } else{ v = -1; }\r
-                                       tx2 = x2 + kMage * cos(rad) * v;\r
-                                       ty2 = y2 + kMage * sin(rad) * v;\r
-                               }\r
-                               \r
-                               cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
-                               cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
-                               cdDrawLine(tx2, ty2, x3, y3, 1, a3);\r
-               }\r
-               break;\r
-       case 6:\r
-               if(a3 == 5){\r
-                               tx1 = x4 - kMage;\r
-                               ty1 = y4;\r
-                               tx2 = x4 + kMage * 0.5;\r
-                               ty2 = y4 - kMage * 2;\r
-                               cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
-                               cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, tx1, ty1, 1, 1);\r
-                               cdDrawCurve(tx1, ty1, x4, y4, tx2, ty2, 1, 0);\r
-               }\r
-               else{\r
-                               cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
-                               cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
-               }\r
-               break;\r
-       case 7:\r
-               cdDrawLine(x1, y1, x2, y2, a2, 1);\r
-               cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, a3);\r
-               break;\r
-       case 9: // may not be exist\r
-               break;\r
-       default:\r
-                       break;\r
-               }\r
-       }\r
-}\r
+//kagedf.c
+//
+#include "kage.h"
+#include "kagecgi.h"
+
+void dfDrawFont(int a1, int a2, int a3,
+                int x1, int y1,
+                int x2, int y2,
+                int x3, int y3,
+                int x4, int y4){
+  int tx1, tx2, tx3, tx4, ty1, ty2, ty3, ty4, v;
+  double rad;
+  
+  if(kShotai == kMincho){
+    switch(a1 % 100){
+    case 0:
+      break;
+    case 1:
+      if(a3 == 4){
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else{ v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage, y2, 1, 14);
+      }
+      else{
+        cdDrawLine(x1, y1, x2, y2, a2, a3);
+      }
+      break;
+    case 2:
+    case 12:
+      if(a3 == 4){
+        if(x2 == x3){
+          tx1 = x3;
+          ty1 = y3 - kMage;
+        }
+        else if(y2 == y3){
+          tx1 = x3 - kMage;
+          ty1 = y3;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx1 = x3 - kMage * cos(rad) * v;
+          ty1 = y3 - kMage * sin(rad) * v;
+        }
+        cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage, y3, 1, 14);
+      }
+      else if(a3 == 5){
+        cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 15);
+      }
+      else{
+        cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);
+      }
+      break;
+    case 3:
+      if(a3 == 5){
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else{ v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        if(x2 == x3){
+          if(y2 < y3){ v = 1; } else{ v = -1; }
+          tx2 = x2;
+          ty2 = y2 + kMage * v;
+        }
+        else if(y2 == y3){
+          if(x2 < x3){ v = 1; } else { v = -1; }
+          tx2 = x2 + kMage * v;
+          ty2 = y2;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * cos(rad) * v;
+          ty2 = y2 + kMage * sin(rad) * v;
+        }
+        tx3 = x3 - kMage;
+        ty3 = y3;
+        tx4 = x3 + kMage * 0.5;
+        ty4 = y3 - kMage * 2;
+        
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);
+        cdDrawLine(tx2, ty2, tx3, ty3, 6, 5); // bolder by force
+      }
+      else{
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else { v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        if(x2 == x3){
+          if(y2 < y3){ v = 1; } else{ v = -1; }
+          tx2 = x2;
+          ty2 = y2 + kMage * v;
+        }
+        else if(y2 == y3){
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * v;
+          ty2 = y2;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * cos(rad) * v;
+          ty2 = y2 + kMage * sin(rad) * v;
+        }
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);
+        cdDrawLine(tx2, ty2, x3, y3, 6, a3); // bolder by force
+      }
+      break;
+    case 6:
+      if(a3 == 5){
+        /* only implimented for gothic
+                               tx1 = x4 - kMage;
+                               ty1 = y4;
+                               tx2 = x4 + kMage * 0.5;
+                               ty2 = y4 - kMage * 2;
+         */
+        cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, 15);
+      }
+      else{
+        cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);
+      }
+      break;
+    case 7:
+      cdDrawLine(x1, y1, x2, y2, a2, 1);
+      cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, 7);
+      break;
+    case 8:
+      icBox(x1, y1, x2, y2);
+      break;
+    case 9: // may not be exist
+      icDot(x1, y1);
+      icDot(x2, y2);
+      break;
+    default:
+      break;
+    }
+  }
+  
+  else{ // gothic
+    switch(a1 % 100){
+    case 0:
+      break;
+    case 1:
+      if(a3 == 4){
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else{ v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage * 2, y2 - kMage * 0.5, 1, 0);
+      }
+      else{
+        cdDrawLine(x1, y1, x2, y2, a2, a3);
+      }
+      break;
+    case 2:
+    case 12:
+      if(a3 == 4){
+        if(x2 == x3){
+          tx1 = x3;
+          ty1 = y3 - kMage;
+        }
+        else if(y2 == y3){
+          tx1 = x3 - kMage;
+          ty1 = y3;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx1 = x3 - kMage * cos(rad) * v;
+          ty1 = y3 - kMage * sin(rad) * v;
+        }
+        cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage * 2, y3 - kMage * 0.5, 1, 0);
+      }
+      else if(a3 == 5){
+        tx1 = x3 + kMage;
+        ty1 = y3;
+        tx2 = tx1 + kMage * 0.5;
+        ty2 = y3 - kMage * 2;
+        cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 1);
+        cdDrawCurve(x3, y3, tx1, ty1, tx2, ty2, 1, 0);
+      }
+      else{
+        cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);
+      }
+      break;
+    case 3:
+      if(a3 == 5){
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else{ v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        if(x2 == x3){
+          if(y2 < y3){ v = 1; } else{ v = -1; }
+          tx2 = x2;
+          ty2 = y2 + kMage * v;
+        }
+        else if(y2 == y3){
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * v;
+          ty2 = y2;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * cos(rad) * v;
+          ty2 = y2 + kMage * sin(rad) * v;
+        }
+        tx3 = x3 - kMage;
+        ty3 = y3;
+        tx4 = x3 + kMage * 0.5;
+        ty4 = y3 - kMage * 2;
+        
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);
+        cdDrawLine(tx2, ty2, tx3, ty3, 1, 1);
+        cdDrawCurve(tx3, ty3, x3, y3, tx4, ty4, 1, 0);
+      }
+      else{
+        if(x1 == x2){
+          if(y1 < y2){ v = 1; } else{ v = -1; }
+          tx1 = x2;
+          ty1 = y2 - kMage * v;
+        }
+        else if(y1 == y2){
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * v;
+          ty1 = y2;
+        }
+        else{
+          rad = atan((double)(y2 - y1) / (double)(x2 - x1));
+          if(x1 < x2){ v = 1; } else{ v = -1; }
+          tx1 = x2 - kMage * cos(rad) * v;
+          ty1 = y2 - kMage * sin(rad) * v;
+        }
+        if(x2 == x3){
+          if(y2 < y3){ v = 1; } else{ v = -1; }
+          tx2 = x2;
+          ty2 = y2 + kMage * v;
+        }
+        else if(y2 == y3){
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * v;
+          ty2 = y2;
+        }
+        else{
+          rad = atan((double)(y3 - y2) / (double)(x3 - x2));
+          if(x2 < x3){ v = 1; } else{ v = -1; }
+          tx2 = x2 + kMage * cos(rad) * v;
+          ty2 = y2 + kMage * sin(rad) * v;
+        }
+        
+        cdDrawLine(x1, y1, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);
+        cdDrawLine(tx2, ty2, x3, y3, 1, a3);
+      }
+      break;
+    case 6:
+      if(a3 == 5){
+        tx1 = x4 - kMage;
+        ty1 = y4;
+        tx2 = x4 + kMage * 0.5;
+        ty2 = y4 - kMage * 2;
+        cdDrawBezier(x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);
+        cdDrawCurve(tx1, ty1, x4, y4, tx2, ty2, 1, 0);
+      }
+      else{
+        cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);
+      }
+      break;
+    case 7:
+      cdDrawLine(x1, y1, x2, y2, a2, 1);
+      cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, a3);
+      break;
+    case 8:
+      icBox(x1, y1, x2, y2);
+      break;
+    case 9: // may not be exist
+      icDot(x1, y1);
+      icDot(x2, y2);
+      break;
+    default:
+      break;
+    }
+  }
+}