shithub: puzzles

Download patch

ref: e6026d9d8e7864c4d0f1eeba53c33d430ac36dfd
parent: 1fdafb6abf2d3ea0d37e79b5dfd9daf8eed28f22
author: Simon Tatham <anakin@pobox.com>
date: Sat Mar 30 12:59:19 EDT 2013

Add a midend function to return the current random seed, parallel to
the existing one that returns the game id. No front end has so far
needed this, but one is about to.

[originally from svn r9778]

--- a/devel.but
+++ b/devel.but
@@ -3091,6 +3091,17 @@
 \cq{params:description}) describing the game currently active in the
 mid-end. The returned string is dynamically allocated.
 
+\H{midend-get-random-seed} \cw{midend_get_random_seed()}
+
+\c char *midend_get_random_seed(midend *me)
+
+Returns a random game ID (i.e. one in the form \cq{params#seedstring})
+describing the game currently active in the mid-end, if there is one.
+If the game was created by entering a description, no random seed will
+currently exist and this function will return \cw{NULL}.
+
+The returned string, if it is non-\cw{NULL}, is dynamically allocated.
+
 \H{midend-can-format-as-text-now} \cw{midend_can_format_as_text_now()}
 
 \c int midend_can_format_as_text_now(midend *me);
--- a/midend.c
+++ b/midend.c
@@ -1304,6 +1304,21 @@
     return ret;
 }
 
+char *midend_get_random_seed(midend *me)
+{
+    char *parstr, *ret;
+
+    if (!me->seedstr)
+        return NULL;
+
+    parstr = me->ourgame->encode_params(me->curparams, TRUE);
+    assert(parstr);
+    ret = snewn(strlen(parstr) + strlen(me->seedstr) + 2, char);
+    sprintf(ret, "%s#%s", parstr, me->seedstr);
+    sfree(parstr);
+    return ret;
+}
+
 char *midend_set_config(midend *me, int which, config_item *cfg)
 {
     char *error;
--- a/puzzles.h
+++ b/puzzles.h
@@ -251,6 +251,7 @@
 char *midend_set_config(midend *me, int which, config_item *cfg);
 char *midend_game_id(midend *me, char *id);
 char *midend_get_game_id(midend *me);
+char *midend_get_random_seed(midend *me);
 int midend_can_format_as_text_now(midend *me);
 char *midend_text_format(midend *me);
 char *midend_solve(midend *me);