aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-06-28 07:33:49 +0000
committerSimon Tatham <anakin@pobox.com>2005-06-28 07:33:49 +0000
commitcdb8433c0a5bf546ae2f4c55bad1be064d05df3b (patch)
tree3e6026b5dde0edba0477de9d714b46c0f687e6cf
parent08410651e05b0723073d53e7d75174767633bf87 (diff)
downloadpuzzles-cdb8433c0a5bf546ae2f4c55bad1be064d05df3b.zip
puzzles-cdb8433c0a5bf546ae2f4c55bad1be064d05df3b.tar.gz
puzzles-cdb8433c0a5bf546ae2f4c55bad1be064d05df3b.tar.bz2
puzzles-cdb8433c0a5bf546ae2f4c55bad1be064d05df3b.tar.xz
Another function pair required for serialisation; these ones save
and restore anything vitally important in the game_ui. Most of the game_ui is expected to be stuff about cursor positions and currently active mouse drags, so it absolutely _doesn't_ want to be preserved over a serialisation; but one or two things would be disorienting or outright wrong to reset, such as the Net origin position and the Mines death counter. [originally from svn r6026]
-rw-r--r--cube.c11
-rw-r--r--fifteen.c11
-rw-r--r--flip.c11
-rw-r--r--guess.c11
-rw-r--r--mines.c17
-rw-r--r--net.c19
-rw-r--r--netslide.c11
-rw-r--r--nullgame.c11
-rw-r--r--pattern.c11
-rw-r--r--puzzles.h2
-rw-r--r--rect.c11
-rw-r--r--samegame.c11
-rw-r--r--sixteen.c11
-rw-r--r--solo.c11
-rw-r--r--twiddle.c11
15 files changed, 170 insertions, 0 deletions
diff --git a/cube.c b/cube.c
index 4f26df7..57246e4 100644
--- a/cube.c
+++ b/cube.c
@@ -1004,6 +1004,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1714,6 +1723,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/fifteen.c b/fifteen.c
index 9d763a6..ad7381c 100644
--- a/fifteen.c
+++ b/fifteen.c
@@ -436,6 +436,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -882,6 +891,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/flip.c b/flip.c
index a8636dd..1d7fa17 100644
--- a/flip.c
+++ b/flip.c
@@ -871,6 +871,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1229,6 +1238,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/guess.c b/guess.c
index f3738c0..e681d16 100644
--- a/guess.c
+++ b/guess.c
@@ -404,6 +404,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1260,6 +1269,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/mines.c b/mines.c
index 6aee39f..f9f714b 100644
--- a/mines.c
+++ b/mines.c
@@ -2357,6 +2357,21 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ char buf[80];
+ /*
+ * The deaths counter needs preserving across a serialisation.
+ */
+ sprintf(buf, "D%d", ui->deaths);
+ return dupstr(buf);
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+ sscanf(encoding, "D%d", &ui->deaths);
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -3039,6 +3054,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/net.c b/net.c
index 6253568..6feabda 100644
--- a/net.c
+++ b/net.c
@@ -1846,6 +1846,23 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ char buf[120];
+ /*
+ * We preserve the origin and centre-point coordinates over a
+ * serialise.
+ */
+ sprintf(buf, "O%d,%d;C%d,%d", ui->org_x, ui->org_y, ui->cx, ui->cy);
+ return dupstr(buf);
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+ sscanf(encoding, "O%d,%d;C%d,%d",
+ &ui->org_x, &ui->org_y, &ui->cx, &ui->cy);
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -2739,6 +2756,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/netslide.c b/netslide.c
index b329d8d..b2b50e8 100644
--- a/netslide.c
+++ b/netslide.c
@@ -1005,6 +1005,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
/* ----------------------------------------------------------------------
* Process a move.
*/
@@ -1822,6 +1831,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/nullgame.c b/nullgame.c
index bc3f64a..46f903f 100644
--- a/nullgame.c
+++ b/nullgame.c
@@ -142,6 +142,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -255,6 +264,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/pattern.c b/pattern.c
index c6e2cda..115e813 100644
--- a/pattern.c
+++ b/pattern.c
@@ -773,6 +773,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1194,6 +1203,8 @@ const struct game thegame = {
FALSE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/puzzles.h b/puzzles.h
index 92c5a10..17b0b00 100644
--- a/puzzles.h
+++ b/puzzles.h
@@ -275,6 +275,8 @@ struct game {
char *(*text_format)(game_state *state);
game_ui *(*new_ui)(game_state *state);
void (*free_ui)(game_ui *ui);
+ char *(*encode_ui)(game_ui *ui);
+ void (*decode_ui)(game_ui *ui, char *encoding);
void (*changed_state)(game_ui *ui, game_state *oldstate,
game_state *newstate);
char *(*interpret_move)(game_state *state, game_ui *ui, game_drawstate *ds,
diff --git a/rect.c b/rect.c
index 679ba93..ca8c04b 100644
--- a/rect.c
+++ b/rect.c
@@ -2170,6 +2170,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void coord_round(float x, float y, int *xr, int *yr)
{
float xs, ys, xv, yv, dx, dy, dist;
@@ -2799,6 +2808,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/samegame.c b/samegame.c
index 95ced1a..18e461e 100644
--- a/samegame.c
+++ b/samegame.c
@@ -411,6 +411,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void sel_clear(game_ui *ui, game_state *state)
{
int i;
@@ -999,6 +1008,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/sixteen.c b/sixteen.c
index 6c158d5..a7e6efb 100644
--- a/sixteen.c
+++ b/sixteen.c
@@ -564,6 +564,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1060,6 +1069,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/solo.c b/solo.c
index 74ca872..20e6c07 100644
--- a/solo.c
+++ b/solo.c
@@ -1931,6 +1931,15 @@ static void free_ui(game_ui *ui)
sfree(ui);
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -2420,6 +2429,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,
diff --git a/twiddle.c b/twiddle.c
index 66ce4d1..02b1d79 100644
--- a/twiddle.c
+++ b/twiddle.c
@@ -608,6 +608,15 @@ static void free_ui(game_ui *ui)
{
}
+char *encode_ui(game_ui *ui)
+{
+ return NULL;
+}
+
+void decode_ui(game_ui *ui, char *encoding)
+{
+}
+
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
@@ -1224,6 +1233,8 @@ const struct game thegame = {
TRUE, game_text_format,
new_ui,
free_ui,
+ encode_ui,
+ decode_ui,
game_changed_state,
interpret_move,
execute_move,