X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/57046465d3de05a21fb9a6e540ba064f2ed70010..854a4f51614eb4a6a23e15204d30d1e57ef83c6f:/filling.c diff --git a/filling.c b/filling.c index fba86e5..b05ab49 100644 --- a/filling.c +++ b/filling.c @@ -47,7 +47,6 @@ #include #include -#include #include #include #include @@ -300,7 +299,7 @@ static game_state *new_game(midend *, game_params *, char *); static void free_game(game_state *); /* generate a random valid board; uses validate_board. */ -void make_board(int *board, int w, int h, random_state *rs) { +static void make_board(int *board, int w, int h, random_state *rs) { int *dsf; const unsigned int sz = w * h; @@ -908,7 +907,7 @@ static void game_changed_state(game_ui *ui, game_state *oldstate, #define PREFERRED_TILE_SIZE 32 #define TILE_SIZE (ds->tilesize) #define BORDER (TILE_SIZE / 2) -#define BORDER_WIDTH (TILE_SIZE / 32) +#define BORDER_WIDTH (max(TILE_SIZE / 32, 1)) struct game_drawstate { struct game_params params; @@ -975,24 +974,24 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, static game_state *execute_move(game_state *state, char *move) { game_state *new_state; + const int sz = state->shared->params.w * state->shared->params.h; if (*move == 's') { - const int sz = state->shared->params.w * state->shared->params.h; int i = 0; new_state = dup_game(state); for (++move; i < sz; ++i) new_state->board[i] = move[i] - '0'; new_state->cheated = TRUE; } else { char *endptr; - const int i = strtol(move, &endptr, errno = 0); + const int i = strtol(move, &endptr, 0); int value; - if (errno == ERANGE) return NULL; if (endptr == move) return NULL; if (*endptr != '_') return NULL; move = endptr + 1; value = strtol(move, &endptr, 0); if (endptr == move) return NULL; if (*endptr != '\0') return NULL; + if (i < 0 || i >= sz || value < 0 || value > 9) return NULL; new_state = dup_game(state); new_state->board[i] = value; } @@ -1390,7 +1389,8 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate, * should start by drawing a big background-colour rectangle * covering the whole window. */ - draw_rect(dr, 0, 0, 10*ds->tilesize, 10*ds->tilesize, COL_BACKGROUND); + draw_rect(dr, 0, 0, w*TILE_SIZE + 2*BORDER, h*TILE_SIZE + 2*BORDER, + COL_BACKGROUND); /* * Smaller black rectangle which is the main grid. @@ -1400,6 +1400,8 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate, h*TILE_SIZE + 2*BORDER_WIDTH + 1, COL_GRID); + draw_update(dr, 0, 0, w*TILE_SIZE + 2*BORDER, h*TILE_SIZE + 2*BORDER); + ds->started = TRUE; } @@ -1526,7 +1528,7 @@ const struct game thegame = { TRUE, FALSE, game_print_size, game_print, FALSE, /* wants_statusbar */ FALSE, game_timing_state, - 0, /* flags */ + REQUIRE_NUMPAD, /* flags */ }; #ifdef STANDALONE_SOLVER /* solver? hah! */