chiark / gitweb /
Add 'const' to the game_params arguments in validate_desc and
authorSimon Tatham <anakin@pobox.com>
Fri, 12 Apr 2013 17:11:49 +0000 (17:11 +0000)
committerSimon Tatham <anakin@pobox.com>
Fri, 12 Apr 2013 17:11:49 +0000 (17:11 +0000)
new_desc. Oddities in the 'make test' output brought to my attention
that a few puzzles have been modifying their input game_params for
various reasons; they shouldn't do that, because that's the
game_params held permanently by the midend and it will affect
subsequent game generations if they modify it. So now those arguments
are const, and all the games which previously modified their
game_params now take a copy and modify that instead.

[originally from svn r9830]

43 files changed:
blackbox.c
bridges.c
cube.c
devel.but
dominosa.c
fifteen.c
filling.c
flip.c
galaxies.c
guess.c
inertia.c
keen.c
lightup.c
loopy.c
magnets.c
map.c
mines.c
net.c
netslide.c
nullgame.c
pattern.c
pearl.c
pegs.c
puzzles.h
range.c
rect.c
samegame.c
signpost.c
singles.c
sixteen.c
slant.c
solo.c
tents.c
towers.c
twiddle.c
undead.c
unequal.c
unfinished/group.c
unfinished/separate.c
unfinished/slide.c
unfinished/sokoban.c
unruly.c
untangle.c

index 1546d918c5019c9f23f57ae9e805b17e45c35f1c..c0417ec89141ccac2f985e92e3401588ab0dc7ce 100644 (file)
@@ -210,7 +210,7 @@ static char *validate_params(game_params *params, int full)
  * Then we obfuscate it.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int nballs = params->minballs, i;
@@ -251,7 +251,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int nballs, dlen = strlen(desc), i;
     unsigned char *bmp;
index a5eef25d740c21f520facc4e45c3cf02845dc771..d60036b207cd48d155dd0bff954cef919908d9cc 100644 (file)
--- a/bridges.c
+++ b/bridges.c
@@ -1735,7 +1735,7 @@ static int solve_from_scratch(game_state *state, int difficulty)
 
 /* --- New game functions --- */
 
-static game_state *new_state(game_params *params)
+static game_state *new_state(const game_params *params)
 {
     game_state *ret = snew(game_state);
     int wh = params->w * params->h, i;
@@ -1845,7 +1845,7 @@ static void free_game(game_state *state)
 
 #define ORDER(a,b) do { if (a < b) { int tmp=a; int a=b; int b=tmp; } } while(0)
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     game_state *tobuild  = NULL;
@@ -2015,7 +2015,7 @@ generated:
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int i, wh = params->w * params->h;
 
diff --git a/cube.c b/cube.c
index 15c479bb86dae51ea8515c805e17b215a99752c5..380e3306f79a3fa3fe07bfc3458ba4568828b602 100644 (file)
--- a/cube.c
+++ b/cube.c
@@ -315,7 +315,8 @@ static char *encode_params(game_params *params, int full)
 }
 typedef void (*egc_callback)(void *, struct grid_square *);
 
-static void enum_grid_squares(game_params *params, egc_callback callback, void *ctx)
+static void enum_grid_squares(const game_params *params, egc_callback callback,
+                              void *ctx)
 {
     const struct solid *solid = solids[params->solid];
 
@@ -597,7 +598,7 @@ static void classify_grid_square_callback(void *ctx, struct grid_square *sq)
        data->squareindex++;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     struct grid_data data;
@@ -845,7 +846,7 @@ static struct solid *transform_poly(const struct solid *solid, int flip,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int area = grid_area(params->d1, params->d2, solids[params->solid]->order);
     int i, j;
index c218cd172854963bac63d7f98e170c9b90f486fb..e95e1d2ded0c6b71523380e9dea92b7c290f9f52 100644 (file)
--- a/devel.but
+++ b/devel.but
@@ -655,7 +655,7 @@ a descriptive-format game ID.
 
 \S{backend-new-desc} \cw{new_desc()}
 
-\c char *(*new_desc)(game_params *params, random_state *rs,
+\c char *(*new_desc)(const game_params *params, random_state *rs,
 \c                   char **aux, int interactive);
 
 This function is where all the really hard work gets done. This is
@@ -696,7 +696,7 @@ again in the game description.
 
 \S{backend-validate-desc} \cw{validate_desc()}
 
-\c char *(*validate_desc)(game_params *params, char *desc);
+\c char *(*validate_desc)(const game_params *params, char *desc);
 
 This function is given a game description, and its job is to
 validate that it describes a puzzle which makes sense.
index 26624103f954872e793ef8a95642256a56bcf6b1..d80425caf489b565de12527cbbc02153f9eb3b45 100644 (file)
@@ -545,7 +545,7 @@ static int solver(int w, int h, int n, int *grid, int *output)
  * End of solver code.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int n = params->n, w = n+2, h = n+1, wh = w*h;
@@ -746,7 +746,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int n = params->n, w = n+2, h = n+1, wh = w*h;
     int *occurrences;
index 1a106e815f29b28387edaaa2b8e9888bbc15f989..06e738b64f0052f4aabe27a0a5b7e91a1772c50f 100644 (file)
--- a/fifteen.c
+++ b/fifteen.c
@@ -155,7 +155,7 @@ static int perm_parity(int *perm, int n)
     return ret;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int gap, n, i, x;
@@ -271,7 +271,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *p, *err;
     int i, area;
index a0c9fc45bb6960f191b452602cbad461c7cb9481..4cd4318b41999a862bbfa5cd19049b707ce0354a 100644 (file)
--- a/filling.c
+++ b/filling.c
@@ -867,7 +867,7 @@ static void minimize_clue_set(int *board, int w, int h, int *randomize) {
     sfree(board_cp);
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                            char **aux, int interactive)
 {
     const int w = params->w;
@@ -906,7 +906,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return game_description;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int i;
     const int sz = params->w * params->h;
diff --git a/flip.c b/flip.c
index c30e484bea4fd7b21729fc568132ecf38542bdb5..e42e8c035bb31dbcf8a45dfbfc2f54ca0b34d08e 100644 (file)
--- a/flip.c
+++ b/flip.c
@@ -347,7 +347,7 @@ static void addneighbours(tree234 *t, int w, int h, int cx, int cy,
     addsq(t, w, h, cx, cy, x, y+1, matrix);
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h, wh = w * h;
@@ -596,7 +596,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h, wh = w * h;
     int mlen = (wh*wh+3)/4, glen = (wh+3)/4;
index db89700e3f5f6345d25eb941200f60731c3843e1..bd0e98247e5edc89854f255a5d5901eb06565356 100644 (file)
@@ -1233,7 +1233,7 @@ static void generate_pass(game_state *state, random_state *rs, int *scratch,
 static int check_complete(game_state *state, int *dsf, int *colours);
 static int solver_state(game_state *state, int maxdiff);
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     game_state *state = blank_game(params->w, params->h), *copy;
@@ -1480,7 +1480,7 @@ static int dots_too_close(game_state *state)
     return (ret == -1) ? 1 : 0;
 }
 
-static game_state *load_game(game_params *params, char *desc,
+static game_state *load_game(const game_params *params, char *desc,
                              char **why_r)
 {
     game_state *state = blank_game(params->w, params->h);
@@ -1528,7 +1528,7 @@ fail:
     return NULL;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *why = NULL;
     game_state *dummy = load_game(params, desc, &why);
diff --git a/guess.c b/guess.c
index 15cf0d99945164681707bf011a4aa0624dc75e54..b4374babb91a99026c66c6fea2d7365323a44222 100644 (file)
--- a/guess.c
+++ b/guess.c
@@ -264,7 +264,7 @@ static void free_pegrow(pegrow pegs)
     sfree(pegs);
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     unsigned char *bmp = snewn(params->npegs, unsigned char);
@@ -287,7 +287,7 @@ newcol:
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     unsigned char *bmp;
     int i;
index eb850ac436bc7beca0556eef48704b569bc750c2..590be69f3d6e7b9c5d632616799c5c3c6e5c0f8f 100644 (file)
--- a/inertia.c
+++ b/inertia.c
@@ -583,13 +583,13 @@ static char *gengrid(int w, int h, random_state *rs)
     return grid;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     return gengrid(params->w, params->h, rs);
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h, wh = w*h;
     int starts = 0, gems = 0, i;
diff --git a/keen.c b/keen.c
index e951dbabd7de26876134888f473f3dc10acc7cd9..ccda00215eaad33b28f7c574c51fcb47eb7ed6d0 100644 (file)
--- a/keen.c
+++ b/keen.c
@@ -740,7 +740,7 @@ static char *parse_block_structure(const char **p, int w, int *dsf)
     return NULL;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, a = w*w;
@@ -1145,7 +1145,7 @@ done
  * Gameplay.
  */
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, a = w*w;
     int *dsf;
index 9131428313dc4f95c01b2216a12a9a0e5e5819d9..97ccc2a3a31439a89f7e1dc7afd931c07e6bac7c 100644 (file)
--- a/lightup.c
+++ b/lightup.c
@@ -367,7 +367,7 @@ static char *validate_params(game_params *params, int full)
 
 /* --- Game state construction/freeing helper functions --- */
 
-static game_state *new_state(game_params *params)
+static game_state *new_state(const game_params *params)
 {
     game_state *ret = snew(game_state);
 
@@ -568,7 +568,8 @@ static void clean_board(game_state *state, int leave_blacks)
     state->nlights = 0;
 }
 
-static void set_blacks(game_state *state, game_params *params, random_state *rs)
+static void set_blacks(game_state *state, const game_params *params,
+                       random_state *rs)
 {
     int x, y, degree = 0, rotate = 0, nblack;
     int rh, rw, i;
@@ -1516,9 +1517,11 @@ static int puzzle_is_good(game_state *state, int difficulty)
 
 #define MAX_GRIDGEN_TRIES 20
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params_in, random_state *rs,
                           char **aux, int interactive)
 {
+    game_params params_copy = *params_in; /* structure copy */
+    game_params *params = &params_copy;
     game_state *news = new_state(params), *copys;
     int i, j, run, x, y, wh = params->w*params->h, num;
     char *ret, *p;
@@ -1625,7 +1628,7 @@ goodpuzzle:
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int i;
     for (i = 0; i < params->w*params->h; i++) {
diff --git a/loopy.c b/loopy.c
index 6b3d53e312d9cc79b7cca0a42b9c434e790a70c9..68cf646833eddfa7ecf4acb44eee440c73a340fe 100644 (file)
--- a/loopy.c
+++ b/loopy.c
@@ -231,7 +231,7 @@ struct game_drawstate {
     char *clue_satisfied;
 };
 
-static char *validate_desc(game_params *params, char *desc);
+static char *validate_desc(const game_params *params, char *desc);
 static int dot_order(const game_state* state, int i, char line_type);
 static int face_order(const game_state* state, int i, char line_type);
 static solver_state *solve_game_rec(const solver_state *sstate);
@@ -277,7 +277,7 @@ static const struct {
 /* Generates a (dynamically allocated) new grid, according to the
  * type and size requested in params.  Does nothing if the grid is already
  * generated. */
-static grid *loopy_generate_grid(game_params *params, char *grid_desc)
+static grid *loopy_generate_grid(const game_params *params, char *grid_desc)
 {
     return grid_new(grid_types[params->type], params->w, params->h, grid_desc);
 }
@@ -713,7 +713,7 @@ static char *extract_grid_desc(char **desc)
 
 /* We require that the params pass the test in validate_params and that the
  * description fills the entire game area */
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int count = 0;
     grid *g;
@@ -1364,7 +1364,7 @@ static game_state *remove_clues(game_state *state, random_state *rs,
 }
 
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                            char **aux, int interactive)
 {
     /* solution and description both use run-length encoding in obvious ways */
index e9b8c7dfa2eff7412bb5e7e6818652cedf7d04cb..2f56c7c79f6d9ab304a5936f1357a749ae533272 100644 (file)
--- a/magnets.c
+++ b/magnets.c
@@ -422,7 +422,8 @@ badchar:
     return NULL;
 }
 
-static game_state *new_game_int(game_params *params, char *desc, const char **prob)
+static game_state *new_game_int(const game_params *params, char *desc,
+                                const char **prob)
 {
     game_state *state = new_state(params->w, params->h);
     int x, y, idx, *count;
@@ -529,7 +530,7 @@ done:
     return state;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     const char *prob;
     game_state *st = new_game_int(params, desc, &prob);
@@ -1603,7 +1604,7 @@ static void generate_aux(game_state *new, char *aux)
     aux[new->wh] = '\0';
 }
 
-static int check_difficulty(game_params *params, game_state *new,
+static int check_difficulty(const game_params *params, game_state *new,
                             random_state *rs)
 {
     int *scratch, *grid_correct, slen, i;
@@ -1675,7 +1676,7 @@ static int check_difficulty(game_params *params, game_state *new,
     return 0;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux_r, int interactive)
 {
     game_state *new = new_state(params->w, params->h);
diff --git a/map.c b/map.c
index af7c0af47aa3f55e643fc89f13abed2c42aea6e8..34a95368369c92ee0b5c0acdf848f47d997fb9ea 100644 (file)
--- a/map.c
+++ b/map.c
@@ -1393,7 +1393,7 @@ static int map_solver(struct solver_scratch *sc,
  * Game generation main function.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     struct solver_scratch *sc = NULL;
@@ -1704,7 +1704,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *parse_edge_list(game_params *params, char **desc, int *map)
+static char *parse_edge_list(const game_params *params, char **desc, int *map)
 {
     int w = params->w, h = params->h, wh = w*h, n = params->n;
     int i, k, pos, state;
@@ -1780,7 +1780,7 @@ static char *parse_edge_list(game_params *params, char **desc, int *map)
     return NULL;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h, wh = w*h, n = params->n;
     int area;
diff --git a/mines.c b/mines.c
index abd1ad8e61ccf34dc99d302920a8b817858657dc..f8adcd31e2d6d4f0a10794c9f81906e0a9a5a09f 100644 (file)
--- a/mines.c
+++ b/mines.c
@@ -1955,7 +1955,7 @@ static char *new_mine_layout(int w, int h, int n, int x, int y, int unique,
     return grid;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     /*
@@ -1994,7 +1994,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     }
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int wh = params->w * params->h;
     int x, y;
diff --git a/net.c b/net.c
index 2e19f1f0273e06f1cf4baa5825436c2851dac931..13aa191f4573f81a760e9297c15e9a73af29bc14 100644 (file)
--- a/net.c
+++ b/net.c
@@ -1126,7 +1126,7 @@ static void perturb(int w, int h, unsigned char *tiles, int wrapping,
     sfree(perimeter);
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     tree234 *possibilities, *barriertree;
@@ -1545,7 +1545,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->width, h = params->height;
     int i;
index 8d18652bb48f278de647574027764cc9f4c4b77b..e3fc90179b9f59d364ad082d76d15c1cf3a01e14 100644 (file)
@@ -324,7 +324,7 @@ static char *validate_params(game_params *params, int full)
  * Randomly select a new game description.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     tree234 *possibilities, *barriertree;
@@ -696,7 +696,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->width, h = params->height;
     int i;
index 4e68bf274922229ae0b963e79b9541bfc74808de..e315d0099fe790867d80daf3096006262cd64466 100644 (file)
@@ -83,13 +83,13 @@ static char *validate_params(game_params *params, int full)
     return NULL;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     return dupstr("FIXME");
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     return NULL;
 }
index 300a1b3584261de6e3fbf7cdcaa96e656bf83887..a10d8a3823782c27a8f1239f89a4618928d85174 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -662,7 +662,7 @@ static unsigned char *generate_soluble(random_state *rs, int w, int h)
     return grid;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     unsigned char *grid;
@@ -749,7 +749,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int i, n, rowspace;
     char *p;
diff --git a/pearl.c b/pearl.c
index ed1ee16ce483871b6f02e0b854f9843f32952954..1159c045493dda6abab9986218e31718c78e31f9 100644 (file)
--- a/pearl.c
+++ b/pearl.c
@@ -1158,7 +1158,7 @@ void pearl_loopgen(int w, int h, char *lines, random_state *rs)
 #endif
 }
 
-static int new_clues(game_params *params, random_state *rs,
+static int new_clues(const game_params *params, random_state *rs,
                      char *clues, char *grid)
 {
     int w = params->w, h = params->h, diff = params->difficulty;
@@ -1356,7 +1356,7 @@ static int new_clues(game_params *params, random_state *rs,
     return ngen;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     char *grid, *clues;
@@ -1393,7 +1393,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int i, sizesofar;
     const int totalsize = params->w * params->h;
diff --git a/pegs.c b/pegs.c
index 3dac5fc719767974afa7210480b0ba98741beb6d..066ab09d95b050165209df0ad63af2db377a3619 100644 (file)
--- a/pegs.c
+++ b/pegs.c
@@ -503,7 +503,7 @@ static void pegs_generate(unsigned char *grid, int w, int h, random_state *rs)
  * it as part of the puzzle.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h;
@@ -660,7 +660,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int len = params->w * params->h;
 
index 8232692bfe63969d29fc97f4fa852a9f6e6c1d6f..421d030cb5b01960e9cb0b8870c5743516740ee0 100644 (file)
--- a/puzzles.h
+++ b/puzzles.h
@@ -487,9 +487,9 @@ struct game {
     config_item *(*configure)(game_params *params);
     game_params *(*custom_params)(config_item *cfg);
     char *(*validate_params)(game_params *params, int full);
-    char *(*new_desc)(game_params *params, random_state *rs,
+    char *(*new_desc)(const game_params *params, random_state *rs,
                      char **aux, int interactive);
-    char *(*validate_desc)(game_params *params, char *desc);
+    char *(*validate_desc)(const game_params *params, char *desc);
     game_state *(*new_game)(midend *me, game_params *params, char *desc);
     game_state *(*dup_game)(game_state *state);
     void (*free_game)(game_state *state);
diff --git a/range.c b/range.c
index 43231d9683361b428a2572b6f7d2cbdf51b4fa1f..7e7181441b2c828b008f4bae08c3544515e928d3 100644 (file)
--- a/range.c
+++ b/range.c
@@ -672,7 +672,7 @@ static void newdesc_compute_clues(game_state *state);
 static int newdesc_strip_clues(game_state *state, int *shuffle_1toN);
 static char *newdesc_encode_game_description(int n, puzzle_size *grid);
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                            char **aux, int interactive)
 {
     int const w = params->w, h = params->h, n = w * h;
@@ -1060,7 +1060,7 @@ static char *newdesc_encode_game_description(int area, puzzle_size *grid)
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int const n = params->w * params->h;
     int squares = 0;
diff --git a/rect.c b/rect.c
index 25b2132553b374d10c1ab03702130177b40fc45d..53d389a0e139f59a9b66fb6a67e6fc0b905bda5c 100644 (file)
--- a/rect.c
+++ b/rect.c
@@ -1146,9 +1146,11 @@ static void display_grid(game_params *params, int *grid, int *numbers, int all)
 }
 #endif
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params_in, random_state *rs,
                           char **aux, int interactive)
 {
+    game_params params_copy = *params_in; /* structure copy */
+    game_params *params = &params_copy;
     int *grid, *numbers = NULL;
     int x, y, y2, y2last, yx, run, i, nsquares;
     char *desc, *p;
@@ -1776,7 +1778,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int area = params->w * params->h;
     int squares = 0;
index 65ebef746f346f56503b5219d9459cb5778bec93..a271dee5dd47c9d22ea4918fa91f3431a6e70042 100644 (file)
@@ -917,7 +917,7 @@ static void gen_grid_random(int w, int h, int nc, int *grid, random_state *rs)
     }
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     char *ret;
@@ -948,7 +948,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int area = params->w * params->h, i;
     char *p = desc;
index b5e22edd357046bae4ac0eb94249247c6bbac245..972bf82339486cf588b392268f31969f461565be 100644 (file)
@@ -499,7 +499,7 @@ static void free_game(game_state *state)
     sfree(state);
 }
 
-static void unpick_desc(game_params *params, char *desc,
+static void unpick_desc(const game_params *params, char *desc,
                         game_state **sout, char **mout)
 {
     game_state *state = blank_game(params->w, params->h);
@@ -793,7 +793,7 @@ done:
     return ret;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     game_state *state = blank_game(params->w, params->h);
@@ -840,7 +840,7 @@ generate:
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *ret = NULL;
 
index 32449b6b525bd94e79035054b674698d899e55eb..319ab11f8700476763d76b9d2e80394557ee350a 100644 (file)
--- a/singles.c
+++ b/singles.c
@@ -333,7 +333,7 @@ static int c2n(char c) {
     return -1;
 }
 
-static void unpick_desc(game_params *params, char *desc,
+static void unpick_desc(const game_params *params, char *desc,
                         game_state **sout, char **mout)
 {
     game_state *state = blank_game(params->w, params->h);
@@ -1207,7 +1207,7 @@ solved:
       the solver gets a headstart working out where they are.
  */
 
-static int new_game_is_good(game_params *params,
+static int new_game_is_good(const game_params *params,
                             game_state *state, game_state *tosolve)
 {
     int sret, sret_easy = 0;
@@ -1289,7 +1289,7 @@ found:
     return j;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     game_state *state = blank_game(params->w, params->h);
@@ -1401,7 +1401,7 @@ randomise:
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *ret = NULL;
 
index 88c7ef49b682b8603a69a0e91f688274835d8c80..d5a278917d342a7cea30043d799895518d1307fe 100644 (file)
--- a/sixteen.c
+++ b/sixteen.c
@@ -193,7 +193,7 @@ static int perm_parity(int *perm, int n)
     return ret;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int stop, n, i, x;
@@ -398,7 +398,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
 }
 
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *p, *err;
     int i, area;
diff --git a/slant.c b/slant.c
index 2f9de52c73ae468d8f053b93ea0876fee66d6448..251cc4a29f5a3b3db12e2ac885527b95be9d339e 100644 (file)
--- a/slant.c
+++ b/slant.c
@@ -1063,7 +1063,7 @@ static void slant_generate(int w, int h, signed char *soln, random_state *rs)
     sfree(connected);
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h, W = w+1, H = h+1;
@@ -1216,7 +1216,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h, W = w+1, H = h+1;
     int area = W*H;
diff --git a/solo.c b/solo.c
index d9bf18d7677312d1049f7ede44032e260d39d0a5..50acfc126c2af105f0e6d6dcef1bab326488b44f 100644 (file)
--- a/solo.c
+++ b/solo.c
@@ -3063,7 +3063,8 @@ static int check_valid(int cr, struct block_structure *blocks,
     return TRUE;
 }
 
-static int symmetries(game_params *params, int x, int y, int *output, int s)
+static int symmetries(const game_params *params, int x, int y,
+                      int *output, int s)
 {
     int c = params->c, r = params->r, cr = c*r;
     int i = 0;
@@ -3305,7 +3306,7 @@ static int blocks_encode_space(struct block_structure *blocks)
     return grid_encode_space(area);
 }
 
-static char *encode_puzzle_desc(game_params *params, digit *grid,
+static char *encode_puzzle_desc(const game_params *params, digit *grid,
                                struct block_structure *blocks,
                                digit *kgrid,
                                struct block_structure *kblocks)
@@ -3548,7 +3549,7 @@ static struct block_structure *gen_killer_cages(int cr, random_state *rs,
     return b;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int c = params->c, r = params->r, cr = c*r;
@@ -3989,7 +3990,7 @@ static char *validate_block_desc(char **pdesc, int cr, int area,
     return NULL;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int cr = params->c * params->r, area = cr*cr;
     char *err;
diff --git a/tents.c b/tents.c
index ef5debcc90c0bb8aa0c518ba8b2649dc2da405e2..a4b1b6e211d2ea435f180a73d0722cea7b43781b 100644 (file)
--- a/tents.c
+++ b/tents.c
@@ -900,9 +900,11 @@ static int tents_solve(int w, int h, const char *grid, int *numbers,
     return 1;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params_in, random_state *rs,
                           char **aux, int interactive)
 {
+    game_params params_copy = *params_in; /* structure copy */
+    game_params *params = &params_copy;
     int w = params->w, h = params->h;
     int ntrees = w * h / 5;
     char *grid = snewn(w*h, char);
@@ -1188,7 +1190,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h;
     int area, i;
index bd395549e3b371b2e8ba91fee16f71e8a84e64c0..39ab6513bae65846c52ee64c8eb64c9afd5c0c69 100644 (file)
--- a/towers.c
+++ b/towers.c
@@ -608,7 +608,7 @@ static int solver(int w, int *clues, digit *soln, int maxdiff)
  * Grid generation.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, a = w*w;
@@ -803,7 +803,7 @@ done
  * Gameplay.
  */
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, a = w*w;
     const char *p = desc;
index b5b276f0aa50e1a820718ba47260c8497f5d6f56..08ef7927802187b94d91a94367690d50f5dbf3b5 100644 (file)
--- a/twiddle.c
+++ b/twiddle.c
@@ -306,7 +306,7 @@ static int grid_complete(int *grid, int wh, int orientable)
     return ok;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int *grid;
@@ -430,7 +430,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *p;
     int w = params->w, h = params->h, wh = w*h;
index e38c96844d33107cde490b0d2eba1a5d2f046e82..fe2cd839f4c41fb68b0216106aab68312fdd3256 100644 (file)
--- a/undead.c
+++ b/undead.c
@@ -237,7 +237,7 @@ struct game_state {
     int cheated;
 };
 
-static game_state *new_state(game_params *params) {
+static game_state *new_state(const game_params *params) {
     int i;
     game_state *state = snew(game_state);
     state->common = snew(struct game_common);
@@ -956,7 +956,7 @@ int path_cmp(const void *a, const void *b) {
     return pa->num_monsters - pb->num_monsters;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                            char **aux, int interactive) {
     int i,count,c,w,h,r,p,g;
     game_state *new;
@@ -1419,7 +1419,7 @@ static game_state *new_game(midend *me, game_params *params, char *desc) {
     return state;
 }
 
-static char *validate_desc(game_params *params, char *desc) {
+static char *validate_desc(const game_params *params, char *desc) {
     int i;
     int w = params->w, h = params->h;
     int wh = w*h;
index d16a572364caa7c9e3d697980e49db5bc526c26f..a35d7a81b7041885baef3b0ff916b22a01e3c2ea 100644 (file)
--- a/unequal.c
+++ b/unequal.c
@@ -1094,9 +1094,11 @@ static void add_adjacent_flags(game_state *state, digit *latin)
     }
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params_in, random_state *rs,
                           char **aux, int interactive)
 {
+    game_params params_copy = *params_in; /* structure copy */
+    game_params *params = &params_copy;
     digit *sq = NULL;
     int i, x, y, retlen, k, nsol;
     int o2 = params->order * params->order, ntries = 1;
@@ -1188,7 +1190,7 @@ generate:
     return ret;
 }
 
-static game_state *load_game(game_params *params, char *desc,
+static game_state *load_game(const game_params *params, char *desc,
                              char **why_r)
 {
     game_state *state = blank_game(params->order, params->adjacent);
@@ -1284,7 +1286,7 @@ static game_state *new_game(midend *me, game_params *params, char *desc)
     return state;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     char *why = NULL;
     game_state *dummy = load_game(params, desc, &why);
index 1c2c02e107d9376dacb9658098ceda078f7ebf17..28066e68082c7cdae6c2ae97e13a2da9891c4ba9 100644 (file)
@@ -361,7 +361,7 @@ static int solver_normal(struct latin_solver *solver, void *vctx)
 #define SOLVER(upper,title,func,lower) func,
 static usersolver_t const group_solvers[] = { DIFFLIST(SOLVER) };
 
-static int solver(game_params *params, digit *grid, int maxdiff)
+static int solver(const game_params *params, digit *grid, int maxdiff)
 {
     int w = params->w;
     int ret;
@@ -595,7 +595,7 @@ static const struct groups groups[] = {
 
 /* ----- data generated by group.gap ends ----- */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, a = w*w;
@@ -810,7 +810,7 @@ static char *validate_grid_desc(const char **pdesc, int range, int area)
     return NULL;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, a = w*w;
     const char *p = desc;
index ee9c830e2c701c95e98b1526dfcb2d20e8b8179d..c5f25a5e948b396a795dfe9f7c0f936a723e1ab8 100644 (file)
@@ -626,7 +626,7 @@ unsigned char *generate(int w, int h, int k, random_state *rs)
  * End of solver/generator code.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h, wh = w*h, k = params->k;
@@ -646,7 +646,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     return NULL;
 }
index 38ef4d0be1fade3e6732aab2429080c5bd9dea3f..f87699d1e6595248d7fb3e70eea4e8cb46c39b24 100644 (file)
@@ -837,7 +837,7 @@ static void generate_board(int w, int h, int *rtx, int *rty, int *minmoves,
  * End of solver/generator code.
  */
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h, wh = w*h;
@@ -891,7 +891,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h, wh = w*h;
     int *active, *link;
index 4b0780c3b62c5fe26df2c53bbcf31e2270df0329..09f4ee854d42c0505b59c5da387a110e7016276d 100644 (file)
@@ -731,7 +731,7 @@ static void sokoban_generate(int w, int h, unsigned char *grid, int moves,
        grid[py*w+px] = PLAYER;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int w = params->w, h = params->h;
@@ -806,7 +806,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return desc;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w = params->w, h = params->h;
     int area = 0;
index d2ea9aaf644118cfd109a33a53d899ad7477c473..28477f0ef61f3717ce802eef44e553266d122f5a 100644 (file)
--- a/unruly.c
+++ b/unruly.c
@@ -269,7 +269,7 @@ static char *validate_params(game_params *params, int full)
     return NULL;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int w2 = params->w2, h2 = params->h2;
     int s = w2 * h2;
@@ -1077,7 +1077,7 @@ static int unruly_fill_game(game_state *state, struct unruly_scratch *scratch,
     return TRUE;
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                            char **aux, int interactive)
 {
 #ifdef STANDALONE_SOLVER
index 59d48c45baf6d156de2e2b5ee136000f15730001..3180f959d35820c54e9c181831462b80368aa39f 100644 (file)
@@ -491,7 +491,7 @@ static void make_circle(point *pts, int n, int w)
     }
 }
 
-static char *new_game_desc(game_params *params, random_state *rs,
+static char *new_game_desc(const game_params *params, random_state *rs,
                           char **aux, int interactive)
 {
     int n = params->n, i;
@@ -734,7 +734,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
     return ret;
 }
 
-static char *validate_desc(game_params *params, char *desc)
+static char *validate_desc(const game_params *params, char *desc)
 {
     int a, b;