From ae8290c655dec864db8ef0dc6b59891d6434c71f Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 28 Jun 2005 07:33:49 +0000 Subject: [PATCH] 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. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6026 cda61777-01e9-0310-a592-d414129be87e --- cube.c | 11 +++++++++++ fifteen.c | 11 +++++++++++ flip.c | 11 +++++++++++ guess.c | 11 +++++++++++ mines.c | 17 +++++++++++++++++ net.c | 19 +++++++++++++++++++ netslide.c | 11 +++++++++++ nullgame.c | 11 +++++++++++ pattern.c | 11 +++++++++++ puzzles.h | 2 ++ rect.c | 11 +++++++++++ samegame.c | 11 +++++++++++ sixteen.c | 11 +++++++++++ solo.c | 11 +++++++++++ twiddle.c | 11 +++++++++++ 15 files changed, 170 insertions(+) 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, -- 2.11.0