Add an even more evil (!) game mode, in which it's not made
[sgt/puzzles] / tents.c
diff --git a/tents.c b/tents.c
index 134d44b..a229e55 100644 (file)
--- a/tents.c
+++ b/tents.c
@@ -1210,6 +1210,10 @@ static char *validate_desc(game_params *params, char *desc)
 
        desc++;
     }
+    if (area < w * h + 1)
+       return "Not enough data to fill grid";
+    else if (area > w * h + 1)
+       return "Too much data to fill grid";
 
     for (i = 0; i < w+h; i++) {
        if (!*desc)
@@ -1465,6 +1469,7 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
     ymin = min(ui->dsy, ui->dey);
     ymax = max(ui->dsy, ui->dey);
 
+#ifndef STYLUS_BASED
     /*
      * Left-dragging has no effect, so we treat a left-drag as a
      * single click on dsx,dsy.
@@ -1473,6 +1478,7 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
         xmin = xmax = ui->dsx;
         ymin = ymax = ui->dsy;
     }
+#endif
 
     if (x < xmin || x > xmax || y < ymin || y > ymax)
         return v;                      /* no change outside drag area */
@@ -1485,11 +1491,18 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
          * Results of a simple click. Left button sets blanks to
          * tents; right button sets blanks to non-tents; either
          * button clears a non-blank square.
+         * If stylus-based however, it loops instead.
          */
         if (ui->drag_button == LEFT_BUTTON)
+#ifdef STYLUS_BASED
+            v = (v == BLANK ? TENT : (v == TENT ? NONTENT : BLANK));
+        else
+            v = (v == BLANK ? NONTENT : (v == NONTENT ? TENT : BLANK));
+#else
             v = (v == BLANK ? TENT : BLANK);
         else
             v = (v == BLANK ? NONTENT : BLANK);
+#endif
     } else {
         /*
          * Results of a drag. Left-dragging has no effect.
@@ -1499,7 +1512,11 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
         if (ui->drag_button == RIGHT_BUTTON)
             v = (v == BLANK ? NONTENT : v);
         else
+#ifdef STYLUS_BASED
+            v = (v == BLANK ? NONTENT : v);
+#else
             /* do nothing */;
+#endif
     }
 
     return v;