Fixes from James H to the numbering of squares, in particular:
[sgt/puzzles] / pattern.c
index 787e591..7c1b0f2 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -569,7 +569,7 @@ static char *validate_desc(game_params *params, char *desc)
         if (*desc && isdigit((unsigned char)*desc)) {
             do {
                 p = desc;
-                while (desc && isdigit((unsigned char)*desc)) desc++;
+                while (*desc && isdigit((unsigned char)*desc)) desc++;
                 n = atoi(p);
                 rowspace -= n+1;
 
@@ -620,7 +620,7 @@ static game_state *new_game(midend *me, game_params *params, char *desc)
         if (*desc && isdigit((unsigned char)*desc)) {
             do {
                 p = desc;
-                while (desc && isdigit((unsigned char)*desc)) desc++;
+                while (*desc && isdigit((unsigned char)*desc)) desc++;
                 state->rowdata[state->rowsize * i + state->rowlen[i]++] =
                     atoi(p);
             } while (*desc++ == '.');
@@ -808,7 +808,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
             ui->drag = LEFT_DRAG;
             ui->release = LEFT_RELEASE;
 #ifdef STYLUS_BASED
-            ui->state = currstate == GRID_FULL ? GRID_UNKNOWN : GRID_FULL;
+            ui->state = (currstate + 2) % 3; /* FULL -> EMPTY -> UNKNOWN */
 #else
             ui->state = GRID_FULL;
 #endif
@@ -816,7 +816,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
             ui->drag = RIGHT_DRAG;
             ui->release = RIGHT_RELEASE;
 #ifdef STYLUS_BASED
-            ui->state = currstate == GRID_EMPTY ? GRID_UNKNOWN : GRID_EMPTY;
+            ui->state = (currstate + 1) % 3; /* EMPTY -> FULL -> UNKNOWN */
 #else
             ui->state = GRID_EMPTY;
 #endif
@@ -1045,6 +1045,7 @@ static game_drawstate *game_new_drawstate(drawing *dr, game_state *state)
     ds->visible = snewn(ds->w * ds->h, unsigned char);
     ds->tilesize = 0;                  /* not decided yet */
     memset(ds->visible, 255, ds->w * ds->h);
+    ds->cur_x = ds->cur_y = 0;
 
     return ds;
 }