aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blackbox.c3
-rw-r--r--devel.but7
-rw-r--r--guess.c3
-rw-r--r--inertia.c3
-rw-r--r--midend.c3
-rw-r--r--mines.c3
-rw-r--r--net.c3
-rw-r--r--puzzles.h3
8 files changed, 19 insertions, 9 deletions
diff --git a/blackbox.c b/blackbox.c
index 7c84a16..2ec8693 100644
--- a/blackbox.c
+++ b/blackbox.c
@@ -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);
}
diff --git a/devel.but b/devel.but
index 9ce8eee..ae0a84d 100644
--- a/devel.but
+++ b/devel.but
@@ -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}.
diff --git a/guess.c b/guess.c
index 1dbea4c..dc02d57 100644
--- a/guess.c
+++ b/guess.c
@@ -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;
diff --git a/inertia.c b/inertia.c
index 42c2f5b..a352514 100644
--- a/inertia.c
+++ b/inertia.c
@@ -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);
diff --git a/midend.c b/midend.c
index 2e49e8d..c9ef415 100644
--- a/midend.c
+++ b/midend.c
@@ -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
diff --git a/mines.c b/mines.c
index e9437cb..c9deb82 100644
--- a/mines.c
+++ b/mines.c
@@ -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);
diff --git a/net.c b/net.c
index 7f90047..d920c5c 100644
--- a/net.c
+++ b/net.c
@@ -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);
diff --git a/puzzles.h b/puzzles.h
index 6b5ff6e..27e1443 100644
--- a/puzzles.h
+++ b/puzzles.h
@@ -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);