~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Mention NetWalk and update comment
[sgt/puzzles]
/
midend.c
diff --git
a/midend.c
b/midend.c
index
192d7e5
..
070f4f3
100644
(file)
--- a/
midend.c
+++ b/
midend.c
@@
-34,7
+34,7
@@
struct midend_data {
char **preset_names;
int npresets, presetsize;
char **preset_names;
int npresets, presetsize;
- game_params *params, *
tmp
params;
+ game_params *params, *
cur
params;
struct midend_state_entry *states;
game_drawstate *drawstate;
game_state *oldstate;
struct midend_state_entry *states;
game_drawstate *drawstate;
game_state *oldstate;
@@
-68,7
+68,7
@@
midend_data *midend_new(frontend *fe, const game *ourgame)
me->nstates = me->statesize = me->statepos = 0;
me->states = NULL;
me->params = ourgame->default_params();
me->nstates = me->statesize = me->statepos = 0;
me->states = NULL;
me->params = ourgame->default_params();
- me->
tmp
params = NULL;
+ me->
cur
params = NULL;
me->desc = NULL;
me->seedstr = NULL;
me->aux_info = NULL;
me->desc = NULL;
me->seedstr = NULL;
me->aux_info = NULL;
@@
-98,8
+98,8
@@
void midend_free(midend_data *me)
if (me->aux_info)
me->ourgame->free_aux_info(me->aux_info);
me->ourgame->free_params(me->params);
if (me->aux_info)
me->ourgame->free_aux_info(me->aux_info);
me->ourgame->free_params(me->params);
- if (me->
tmp
params)
- me->ourgame->free_params(me->
tmp
params);
+ if (me->
cur
params)
+ me->ourgame->free_params(me->
cur
params);
sfree(me);
}
sfree(me);
}
@@
-135,14
+135,23
@@
void midend_new_game(midend_data *me)
/*
* Generate a new random seed. 15 digits comes to about
* 48 bits, which should be more than enough.
/*
* Generate a new random seed. 15 digits comes to about
* 48 bits, which should be more than enough.
+ *
+ * I'll avoid putting a leading zero on the number,
+ * just in case it confuses anybody who thinks it's
+ * processed as an integer rather than a string.
*/
char newseed[16];
int i;
newseed[15] = '\0';
*/
char newseed[16];
int i;
newseed[15] = '\0';
- for (i = 0; i < 15; i++)
+ newseed[0] = '1' + random_upto(me->random, 9);
+ for (i = 1; i < 15; i++)
newseed[i] = '0' + random_upto(me->random, 10);
sfree(me->seedstr);
me->seedstr = dupstr(newseed);
newseed[i] = '0' + random_upto(me->random, 10);
sfree(me->seedstr);
me->seedstr = dupstr(newseed);
+
+ if (me->curparams)
+ me->ourgame->free_params(me->curparams);
+ me->curparams = me->ourgame->dup_params(me->params);
}
sfree(me->desc);
}
sfree(me->desc);
@@
-151,14
+160,8
@@
void midend_new_game(midend_data *me)
me->aux_info = NULL;
rs = random_init(me->seedstr, strlen(me->seedstr));
me->aux_info = NULL;
rs = random_init(me->seedstr, strlen(me->seedstr));
- me->desc = me->ourgame->new_desc
- (me->tmpparams ? me->tmpparams : me->params, rs, &me->aux_info);
+ me->desc = me->ourgame->new_desc(me->curparams, rs, &me->aux_info);
random_free(rs);
random_free(rs);
-
- if (me->tmpparams) {
- me->ourgame->free_params(me->tmpparams);
- me->tmpparams = NULL;
- }
}
ensure(me);
}
ensure(me);
@@
-585,6
+588,12
@@
int midend_num_presets(midend_data *me)
preset = me->ourgame->default_params();
me->ourgame->decode_params(preset, val);
preset = me->ourgame->default_params();
me->ourgame->decode_params(preset, val);
+ if (me->ourgame->validate_params(preset)) {
+ /* Drop this one from the list. */
+ me->ourgame->free_params(preset);
+ continue;
+ }
+
if (me->presetsize <= me->npresets) {
me->presetsize = me->npresets + 10;
me->presets = sresize(me->presets, me->presetsize,
if (me->presetsize <= me->npresets) {
me->presetsize = me->npresets + 10;
me->presets = sresize(me->presets, me->presetsize,
@@
-651,7
+660,7
@@
config_item *midend_get_config(midend_data *me, int which, char **wintitle)
* the former is likely to persist across many code
* changes).
*/
* the former is likely to persist across many code
* changes).
*/
- parstr = me->ourgame->encode_params(me->params, which == CFG_SEED);
+ parstr = me->ourgame->encode_params(me->
cur
params, which == CFG_SEED);
if (which == CFG_DESC) {
ret[0].sval = snewn(strlen(parstr) + strlen(me->desc) + 2, char);
sprintf(ret[0].sval, "%s:%s", parstr, me->desc);
if (which == CFG_DESC) {
ret[0].sval = snewn(strlen(parstr) + strlen(me->desc) + 2, char);
sprintf(ret[0].sval, "%s:%s", parstr, me->desc);
@@
-731,9
+740,9
@@
static char *midend_game_id_int(midend_data *me, char *id, int defmode)
me->ourgame->free_params(tmpparams);
return error;
}
me->ourgame->free_params(tmpparams);
return error;
}
- if (me->
tmp
params)
- me->ourgame->free_params(me->
tmp
params);
- me->
tmp
params = tmpparams;
+ if (me->
cur
params)
+ me->ourgame->free_params(me->
cur
params);
+ me->
cur
params = tmpparams;
/*
* Now filter only the persistent parts of this state into
/*
* Now filter only the persistent parts of this state into
@@
-744,18
+753,23
@@
static char *midend_game_id_int(midend_data *me, char *id, int defmode)
if (seed || desc) {
char *tmpstr = me->ourgame->encode_params(tmpparams, FALSE);
me->ourgame->decode_params(me->params, tmpstr);
if (seed || desc) {
char *tmpstr = me->ourgame->encode_params(tmpparams, FALSE);
me->ourgame->decode_params(me->params, tmpstr);
+ sfree(tmpstr);
} else {
me->ourgame->free_params(me->params);
me->params = me->ourgame->dup_params(tmpparams);
}
}
} else {
me->ourgame->free_params(me->params);
me->params = me->ourgame->dup_params(tmpparams);
}
}
+ sfree(me->desc);
+ me->desc = NULL;
+ sfree(me->seedstr);
+ me->seedstr = NULL;
+
if (desc) {
error = me->ourgame->validate_desc(me->params, desc);
if (error)
return error;
if (desc) {
error = me->ourgame->validate_desc(me->params, desc);
if (error)
return error;
- sfree(me->desc);
me->desc = dupstr(desc);
me->genmode = GOT_DESC;
if (me->aux_info)
me->desc = dupstr(desc);
me->genmode = GOT_DESC;
if (me->aux_info)
@@
-764,7
+778,6
@@
static char *midend_game_id_int(midend_data *me, char *id, int defmode)
}
if (seed) {
}
if (seed) {
- sfree(me->seedstr);
me->seedstr = dupstr(seed);
me->genmode = GOT_SEED;
}
me->seedstr = dupstr(seed);
me->genmode = GOT_SEED;
}