chiark / gitweb /
Another function pair required for serialisation; these ones save
authorSimon Tatham <anakin@pobox.com>
Tue, 28 Jun 2005 07:33:49 +0000 (07:33 +0000)
committerSimon Tatham <anakin@pobox.com>
Tue, 28 Jun 2005 07:33:49 +0000 (07:33 +0000)
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]

15 files changed:
cube.c
fifteen.c
flip.c
guess.c
mines.c
net.c
netslide.c
nullgame.c
pattern.c
puzzles.h
rect.c
samegame.c
sixteen.c
solo.c
twiddle.c

diff --git a/cube.c b/cube.c
index 4f26df7f1a24f72f151b82f868b19e8532c0582a..57246e4dcbd0a97fbce33b797078c9bd6ac6f5ab 100644 (file)
--- 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,
index 9d763a6cf8fd7b75a6e78075266d3a5b92d55159..ad7381c3e07c0564c146c8841eb80009b0dbde2e 100644 (file)
--- 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 a8636dd25d7f5256fd3c37e78774e411dce112b4..1d7fa172e5623b91e6a0123ed837779a3a6ab46c 100644 (file)
--- 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 f3738c0eb44f75102d802fe145463cd0901a2d9f..e681d169defe3f1ed7f16e2664b095bfecb47897 100644 (file)
--- 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 6aee39f0f581d4a8ab9ab8065d80c84cfb240b3b..f9f714bf589a4c340cf638988519b1b56838a239 100644 (file)
--- 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 62535686a99aba8bb58cc5f4acc7822820a01fee..6feabdae4c31f326e306f5b5220eca94860fa4b4 100644 (file)
--- 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,
index b329d8d56a62b5b990e7315c6e752bbd21f41686..b2b50e84c2029ff19a6bd219a90984d5b3ae77aa 100644 (file)
@@ -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,
index bc3f64a06b7174127c26634b76e7b94df2601265..46f903f461adf9739f959d9295eb3868d888a1c1 100644 (file)
@@ -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,
index c6e2cda494882beaecf805cb1b9c129c47a57527..115e8137b6858d3057b769235ed350f41f74ee44 100644 (file)
--- 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,
index 92c5a1067bc8a915e147d61bfbaf66a1fb188e8f..17b0b007a0d40b24826e17c6d4421e8b1b140389 100644 (file)
--- 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 679ba930e57466f8abca5525ce97e024b5b99f4f..ca8c04bad916478fb779791de0eb5261737c5567 100644 (file)
--- 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,
index 95ced1a6a7064be192269589df3b7ea1df8776d6..18e461eebb6139e4d7016ed35083e7ae5394d227 100644 (file)
@@ -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,
index 6c158d5f9c0e6ee12cc4a02707289b6b3c4fdc8f..a7e6efbce480b88cecc4652eb4c15f81b8c0c3fc 100644 (file)
--- 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 74ca8720b626009f837d154d0049d102c372fa5f..20e6c079a696297db7b9dee5f8dc61a01ebe586c 100644 (file)
--- 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,
index 66ce4d120e756207eec94d8bf06825437b8c9ea7..02b1d7907ac5344c81795dfb630a87b0e4b885c5 100644 (file)
--- 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,