diff options
| -rw-r--r-- | blackbox.c | 3 | ||||
| -rw-r--r-- | devel.but | 7 | ||||
| -rw-r--r-- | guess.c | 3 | ||||
| -rw-r--r-- | inertia.c | 3 | ||||
| -rw-r--r-- | midend.c | 3 | ||||
| -rw-r--r-- | mines.c | 3 | ||||
| -rw-r--r-- | net.c | 3 | ||||
| -rw-r--r-- | puzzles.h | 3 |
8 files changed, 19 insertions, 9 deletions
@@ -511,7 +511,8 @@ static char *encode_ui(const game_ui *ui) return dupstr(buf); } -static void decode_ui(game_ui *ui, const char *encoding) +static void decode_ui(game_ui *ui, const char *encoding, + const game_state *state) { sscanf(encoding, "E%d", &ui->errors); } @@ -890,14 +890,17 @@ this function it can just set the pointer to \cw{NULL}. \S{backend-decode-ui} \cw{decode_ui()} -\c void (*decode_ui)(game_ui *ui, const char *encoding); +\c void (*decode_ui)(game_ui *ui, const char *encoding, +\c const game_state *state); This function parses a string previously output by \cw{encode_ui()}, and writes the decoded data back into the freshly-created \c{game_ui} structure provided. If the string is invalid, the function should do the best it can, which might just mean not changing the \c{game_ui} structure at all. This might happen if a save file is corrupted, or -simply from a newer version that encodes more \c{game_ui} data. +simply from a newer version that encodes more \c{game_ui} data. The +current \c{game_state} is provided in case the function needs to +refer to it for validation. Like \cw{encode_ui()}, \cw{decode_ui()} is optional. If a back-end doesn't need this function it can just set the pointer to \cw{NULL}. @@ -452,7 +452,8 @@ static char *encode_ui(const game_ui *ui) return sresize(ret, p - ret, char); } -static void decode_ui(game_ui *ui, const char *encoding) +static void decode_ui(game_ui *ui, const char *encoding, + const game_state *state) { int i; const char *p = encoding; @@ -1527,7 +1527,8 @@ static char *encode_ui(const game_ui *ui) return dupstr(buf); } -static void decode_ui(game_ui *ui, const char *encoding) +static void decode_ui(game_ui *ui, const char *encoding, + const game_state *state) { int p = 0; sscanf(encoding, "D%d%n", &ui->deaths, &p); @@ -2542,7 +2542,8 @@ static const char *midend_deserialise_internal( data.ui = me->ourgame->new_ui(data.states[0].state); if (data.uistr && me->ourgame->decode_ui) - me->ourgame->decode_ui(data.ui, data.uistr); + me->ourgame->decode_ui(data.ui, data.uistr, + data.states[data.statepos-1].state); /* * Run the externally provided check function, and abort if it @@ -2413,7 +2413,8 @@ static char *encode_ui(const game_ui *ui) return dupstr(buf); } -static void decode_ui(game_ui *ui, const char *encoding) +static void decode_ui(game_ui *ui, const char *encoding, + const game_state *state) { int p= 0; sscanf(encoding, "D%d%n", &ui->deaths, &p); @@ -2041,7 +2041,8 @@ static char *encode_ui(const game_ui *ui) return dupstr(buf); } -static void decode_ui(game_ui *ui, const char *encoding) +static void decode_ui(game_ui *ui, const char *encoding, + const game_state *state) { sscanf(encoding, "O%d,%d;C%d,%d", &ui->org_x, &ui->org_y, &ui->cx, &ui->cy); @@ -664,7 +664,8 @@ struct game { game_ui *(*new_ui)(const game_state *state); void (*free_ui)(game_ui *ui); char *(*encode_ui)(const game_ui *ui); - void (*decode_ui)(game_ui *ui, const char *encoding); + void (*decode_ui)(game_ui *ui, const char *encoding, + const game_state *state); key_label *(*request_keys)(const game_params *params, int *nkeys); void (*changed_state)(game_ui *ui, const game_state *oldstate, const game_state *newstate); |