return ret;
}
-static char *validate_params(game_params *params)
+static char *validate_params(game_params *params, int full)
{
if (params->w < 1 || params->h < 1)
return "Width and height must both be positive";
char *q = p;
int n;
- if (!isdigit(*p))
+ if (!isdigit((unsigned char)*p))
return "Not enough numbers in string";
- while (isdigit(*p)) p++;
+ while (isdigit((unsigned char)*p)) p++;
if (i < area-1 && *p != ',')
return "Expected comma after number";
game_state *newstate)
{
sel_clear(ui, newstate);
+
+ /*
+ * If the game state has just changed into an unplayable one
+ * (either completed or impossible), we vanish the keyboard-
+ * control cursor.
+ */
+ if (newstate->complete || newstate->impossible)
+ ui->displaysel = 0;
}
static char *sel_movedesc(game_ui *ui, game_state *state)
int *tiles; /* contains colour and SELECTED. */
};
-static game_state *execute_move(game_state *from, char *move);
-
static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
int x, int y, int button)
{
if (ISSEL(ui,tx,ty)) {
if (button == RIGHT_BUTTON)
sel_clear(ui, state);
- else {
- game_state *tmp;
-
+ else
ret = sel_movedesc(ui, state);
-
- /*
- * Unfortunately, we must check for completeness or
- * impossibility now, in order to update the game_ui;
- * and we can't do that without constructing the new
- * grid. Sigh.
- */
- tmp = execute_move(state, ret);
- if (tmp->complete || tmp->impossible)
- ui->displaysel = 0;
- free_game(tmp);
- }
} else {
sel_clear(ui, state); /* might be no-op */
sel_expand(ui, state, tx, ty);
return TRUE;
}
-static int game_timing_state(game_state *state)
+static int game_timing_state(game_state *state, game_ui *ui)
{
return TRUE;
}