+#if 1
+
+static void DrawLine(int from_x, int from_y, int to_x, int to_y,
+ int element, boolean change_level)
+{
+ int xsize = ABS(to_x - from_x);
+ int ysize = ABS(to_y - from_y);
+ int dx = (to_x < from_x ? -1 : +1);
+ int dy = (to_y < from_y ? -1 : +1);
+ int i;
+
+ if (from_y == to_y) /* horizontal line */
+ {
+ for (i = 0; i <= xsize; i++)
+ DrawLineElement(from_x + i * dx, from_y, element, change_level);
+ }
+ else if (from_x == to_x) /* vertical line */
+ {
+ for (i = 0; i <= ysize; i++)
+ DrawLineElement(from_x, from_y + i * dy, element, change_level);
+ }
+ else /* diagonal line */
+ {
+ int x, y;
+
+ if (ysize < xsize) /* a < 1 */
+ {
+ float a = (float)ysize / (float)xsize;
+
+ for (i = 0; i <= xsize; i++)
+ {
+ y = (int)(a * i + 0.5) * dy;
+ DrawLineElement(from_x + i * dx, from_y + y, element, change_level);
+ }
+ }
+ else /* a >= 1 */
+ {
+ float a = (float)xsize / (float)ysize;
+
+ for (i = 0; i <= ysize; i++)
+ {
+ x = (int)(a * i + 0.5) * dx;
+ DrawLineElement(from_x + x, from_y + i * dy, element, change_level);
+ }
+ }
+ }
+}
+
+#else
+